mem: Tidy up the snoop state-transition logic

Remove broken and unused option to pass dirty data on non-exclusive
snoops. Also beef up the comments a bit.
This commit is contained in:
Andreas Hansson 2015-09-04 13:13:58 -04:00
parent 8e74d5484f
commit 76088fb9ca

View file

@ -1828,17 +1828,13 @@ Cache::handleSnoop(PacketPtr pkt, CacheBlk *blk, bool is_timing,
} }
if (!pkt->req->isUncacheable() && pkt->isRead() && !invalidate) { if (!pkt->req->isUncacheable() && pkt->isRead() && !invalidate) {
// reading non-exclusive shared data, note that we retain
// the block in owned state if it is dirty, with the response
// taken care of below, and otherwhise simply downgrade to
// shared
assert(!needs_exclusive); assert(!needs_exclusive);
pkt->assertShared(); pkt->assertShared();
int bits_to_clear = BlkWritable; blk->status &= ~BlkWritable;
const bool haveOwnershipState = true; // for now
if (!haveOwnershipState) {
// if we don't support pure ownership (dirty && !writable),
// have to clear dirty bit here, assume memory snarfs data
// on cache-to-cache xfer
bits_to_clear |= BlkDirty;
}
blk->status &= ~bits_to_clear;
} }
if (respond) { if (respond) {
@ -1850,9 +1846,10 @@ Cache::handleSnoop(PacketPtr pkt, CacheBlk *blk, bool is_timing,
// will write it back at a later point // will write it back at a later point
pkt->assertMemInhibit(); pkt->assertMemInhibit();
if (have_exclusive) { if (have_exclusive) {
// in the case of an uncacheable request there is no need // in the case of an uncacheable request there is no point
// to set the exclusive flag, but since the recipient does // in setting the exclusive flag, but since the recipient
// not care there is no harm in doing so // does not care there is no harm in doing so, in any case
// it is just a hint
pkt->setSupplyExclusive(); pkt->setSupplyExclusive();
} }
if (is_timing) { if (is_timing) {