prefetch: don't panic on requests w/o contextID (e.g., writebacks).

This commit is contained in:
Steve Reinhardt 2009-03-10 17:37:15 -07:00
parent ac64586a99
commit a94c68228a
3 changed files with 18 additions and 2 deletions

View file

@ -34,13 +34,18 @@
* GHB Prefetcher implementation. * GHB Prefetcher implementation.
*/ */
#include "base/trace.hh"
#include "mem/cache/prefetch/ghb.hh" #include "mem/cache/prefetch/ghb.hh"
#include "arch/isa_traits.hh"
void void
GHBPrefetcher::calculatePrefetch(PacketPtr &pkt, std::list<Addr> &addresses, GHBPrefetcher::calculatePrefetch(PacketPtr &pkt, std::list<Addr> &addresses,
std::list<Tick> &delays) std::list<Tick> &delays)
{ {
if (useContextId && !pkt->req->hasContextId()) {
DPRINTF(HWPrefetch, "ignoring request with no context ID");
return;
}
Addr blk_addr = pkt->getAddr() & ~(Addr)(blkSize-1); Addr blk_addr = pkt->getAddr() & ~(Addr)(blkSize-1);
int ctx_id = useContextId ? pkt->req->contextId() : 0; int ctx_id = useContextId ? pkt->req->contextId() : 0;
assert(ctx_id < Max_Contexts); assert(ctx_id < Max_Contexts);

View file

@ -46,6 +46,11 @@ StridePrefetcher::calculatePrefetch(PacketPtr &pkt, std::list<Addr> &addresses,
return; return;
} }
if (useContextId && !pkt->req->hasContextId()) {
DPRINTF(HWPrefetch, "ignoring request with no context ID");
return;
}
Addr blk_addr = pkt->getAddr() & ~(Addr)(blkSize-1); Addr blk_addr = pkt->getAddr() & ~(Addr)(blkSize-1);
int ctx_id = useContextId ? pkt->req->contextId() : 0; int ctx_id = useContextId ? pkt->req->contextId() : 0;
Addr pc = pkt->req->getPC(); Addr pc = pkt->req->getPC();

View file

@ -409,6 +409,12 @@ class Request : public FastAlloc
flags.set(VALID_EXTRA_DATA); flags.set(VALID_EXTRA_DATA);
} }
bool
hasContextId() const
{
return flags.isSet(VALID_CONTEXT_ID);
}
/** Accessor function for context ID.*/ /** Accessor function for context ID.*/
int int
contextId() const contextId() const
@ -425,13 +431,13 @@ class Request : public FastAlloc
return _threadId; return _threadId;
} }
/** Accessor function for pc.*/
bool bool
hasPC() const hasPC() const
{ {
return flags.isSet(VALID_PC); return flags.isSet(VALID_PC);
} }
/** Accessor function for pc.*/
Addr Addr
getPC() const getPC() const
{ {