mem: Rename PREFETCH_SNOOP_SQUASH flag to BLOCK_CACHED
This patch subsumes the PREFETCH_SNOOP_SQUASH flag with the more generic BLOCK_CACHED flag. Future patches implementing cache eviction messages can use the BLOCK_CACHED flag in almost the same manner as hardware prefetches use the PREFETCH_SNOOP_SQUASH flag. The PREFTECH_SNOOP_FLAG is set if the prefetch target is found in the tags or the MSHRs in any state, so we are simply replacing calls to setPrefetchSquashed() with setBlockCached(). The case of where the prefetch target is found in the writeback MSHRs of upper level caches continues to be covered by the MEM_INHIBIT flag.
This commit is contained in:
parent
a1164154de
commit
15f0d9ff14
2 changed files with 16 additions and 14 deletions
21
src/mem/cache/cache_impl.hh
vendored
21
src/mem/cache/cache_impl.hh
vendored
|
@ -1651,11 +1651,11 @@ Cache<TagStore>::handleSnoop(PacketPtr pkt, BlkType *blk,
|
|||
if (snoopPkt.sharedAsserted()) {
|
||||
pkt->assertShared();
|
||||
}
|
||||
// If this request is a prefetch and an
|
||||
// upper level squashes the prefetch request,
|
||||
// make sure to propogate the squash to the requester.
|
||||
if (snoopPkt.prefetchSquashed()) {
|
||||
pkt->setPrefetchSquashed();
|
||||
// If this request is a prefetch or clean evict and an
|
||||
// upper level signals block present, make sure to
|
||||
// propagate the block presence to the requester.
|
||||
if (snoopPkt.isBlockCached()) {
|
||||
pkt->setBlockCached();
|
||||
}
|
||||
} else {
|
||||
cpuSidePort->sendAtomicSnoop(pkt);
|
||||
|
@ -1695,7 +1695,7 @@ Cache<TagStore>::handleSnoop(PacketPtr pkt, BlkType *blk,
|
|||
if (pkt->cmd == MemCmd::HardPFReq) {
|
||||
DPRINTF(Cache, "Squashing prefetch from lower cache %#x\n",
|
||||
pkt->getAddr());
|
||||
pkt->setPrefetchSquashed();
|
||||
pkt->setBlockCached();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1789,9 +1789,10 @@ Cache<TagStore>::recvTimingSnoopReq(PacketPtr pkt)
|
|||
|
||||
// Squash any prefetch requests from below on MSHR hits
|
||||
if (mshr && pkt->cmd == MemCmd::HardPFReq) {
|
||||
DPRINTF(Cache, "Squashing prefetch from lower cache on mshr hit %#x\n",
|
||||
DPRINTF(Cache, "Setting block present to squash prefetch from"
|
||||
"lower cache on mshr hit %#x\n",
|
||||
pkt->getAddr());
|
||||
pkt->setPrefetchSquashed();
|
||||
pkt->setBlockCached();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2022,8 +2023,8 @@ Cache<TagStore>::getTimingPacket()
|
|||
return NULL;
|
||||
}
|
||||
|
||||
if (snoop_pkt.prefetchSquashed() || blk != NULL) {
|
||||
DPRINTF(Cache, "Prefetch squashed by cache. "
|
||||
if (snoop_pkt.isBlockCached() || blk != NULL) {
|
||||
DPRINTF(Cache, "Block present, prefetch squashed by cache. "
|
||||
"Deallocating mshr target %#x.\n", mshr->addr);
|
||||
|
||||
// Deallocate the mshr target
|
||||
|
|
|
@ -261,8 +261,9 @@ class Packet : public Printable
|
|||
/// suppress the error if this packet encounters a functional
|
||||
/// access failure.
|
||||
static const FlagsType SUPPRESS_FUNC_ERROR = 0x00008000;
|
||||
// Signal prefetch squash through express snoop flag
|
||||
static const FlagsType PREFETCH_SNOOP_SQUASH = 0x00010000;
|
||||
// Signal block present to squash prefetch and cache evict packets
|
||||
// through express snoop flag
|
||||
static const FlagsType BLOCK_CACHED = 0x00010000;
|
||||
|
||||
Flags flags;
|
||||
|
||||
|
@ -505,8 +506,8 @@ class Packet : public Printable
|
|||
bool isSupplyExclusive() const { return flags.isSet(SUPPLY_EXCLUSIVE); }
|
||||
void setSuppressFuncError() { flags.set(SUPPRESS_FUNC_ERROR); }
|
||||
bool suppressFuncError() const { return flags.isSet(SUPPRESS_FUNC_ERROR); }
|
||||
void setPrefetchSquashed() { flags.set(PREFETCH_SNOOP_SQUASH); }
|
||||
bool prefetchSquashed() const { return flags.isSet(PREFETCH_SNOOP_SQUASH); }
|
||||
void setBlockCached() { flags.set(BLOCK_CACHED); }
|
||||
bool isBlockCached() const { return flags.isSet(BLOCK_CACHED); }
|
||||
|
||||
// Network error conditions... encapsulate them as methods since
|
||||
// their encoding keeps changing (from result field to command
|
||||
|
|
Loading…
Reference in a new issue