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);
if (pkt->cmd == MemCmd::HardPFReq) {
DPRINTF(Cache, "Squashing prefetch from lower cache %#x\n",
pkt->getAddr());
- pkt->setPrefetchSquashed();
+ pkt->setBlockCached();
return;
}
// 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;
}
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
/// 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;
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