mem: Add checks and explanation for assertMemInhibit usage

This commit is contained in:
Andreas Hansson 2014-12-02 06:07:46 -05:00
parent 41846cb61b
commit 3d6ec81e66
2 changed files with 12 additions and 2 deletions

View file

@ -1693,7 +1693,12 @@ Cache<TagStore>::handleSnoop(PacketPtr pkt, BlkType *blk,
}
if (respond) {
assert(!pkt->memInhibitAsserted());
// prevent anyone else from responding, cache as well as
// memory, and also prevent any memory from even seeing the
// request (with current inhibited semantics), note that this
// applies both to reads and writes and that for writes it
// works thanks to the fact that we still have dirty data and
// will write it back at a later point
pkt->assertMemInhibit();
if (have_exclusive) {
pkt->setSupplyExclusive();

View file

@ -504,7 +504,12 @@ class Packet : public Printable
bool isFlush() const { return cmd.isFlush(); }
// Snoop flags
void assertMemInhibit() { flags.set(MEM_INHIBIT); }
void assertMemInhibit()
{
assert(isRequest());
assert(!flags.isSet(MEM_INHIBIT));
flags.set(MEM_INHIBIT);
}
bool memInhibitAsserted() const { return flags.isSet(MEM_INHIBIT); }
void assertShared() { flags.set(SHARED); }
bool sharedAsserted() const { return flags.isSet(SHARED); }