mem: Add checks and explanation for assertMemInhibit usage
This commit is contained in:
parent
41846cb61b
commit
3d6ec81e66
2 changed files with 12 additions and 2 deletions
7
src/mem/cache/cache_impl.hh
vendored
7
src/mem/cache/cache_impl.hh
vendored
|
@ -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();
|
||||
|
|
|
@ -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); }
|
||||
|
|
Loading…
Reference in a new issue