diff options
author | Daniel R. Carvalho <odanrc@yahoo.com.br> | 2019-06-21 16:24:28 +0200 |
---|---|---|
committer | Daniel Carvalho <odanrc@yahoo.com.br> | 2019-08-02 11:42:46 +0000 |
commit | 334b8377f35b183148dfda3a7a5d71bee2990b81 (patch) | |
tree | d0ede20f1d39227fd0ba15bea70e26b8a929bbbc /src/mem | |
parent | 2f1a08240f37c6c61f984ae263265f482a0e81b7 (diff) | |
download | gem5-334b8377f35b183148dfda3a7a5d71bee2990b81.tar.xz |
mem: Move eraseIfNullEntry to when holder is updated
The entry should only be tested for deletion when holder is updated.
Change-Id: I5a10b6fa876912709b7467860d43c23c60f38568
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/19750
Reviewed-by: Nikos Nikoleris <nikos.nikoleris@arm.com>
Maintainer: Nikos Nikoleris <nikos.nikoleris@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/mem')
-rw-r--r-- | src/mem/snoop_filter.cc | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/src/mem/snoop_filter.cc b/src/mem/snoop_filter.cc index d368dd868..b0422e2bc 100644 --- a/src/mem/snoop_filter.cc +++ b/src/mem/snoop_filter.cc @@ -206,9 +206,6 @@ SnoopFilter::lookupSnoop(const Packet* cpkt) SnoopItem& sf_item = sf_it->second; - DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", - __func__, sf_item.requested, sf_item.holder); - SnoopMask interested = (sf_item.holder | sf_item.requested); totSnoops++; @@ -232,13 +229,14 @@ SnoopFilter::lookupSnoop(const Packet* cpkt) // Early clear of the holder, if no other request is currently going on // @todo: This should possibly be updated even though we do not filter // upward snoops + DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", + __func__, sf_item.requested, sf_item.holder); sf_item.holder = 0; + DPRINTF(SnoopFilter, "%s: new SF value %x.%x\n", + __func__, sf_item.requested, sf_item.holder); + eraseIfNullEntry(sf_it); } - eraseIfNullEntry(sf_it); - DPRINTF(SnoopFilter, "%s: new SF value %x.%x interest: %x \n", - __func__, sf_item.requested, sf_item.holder, interested); - return snoopSelected(maskToPortList(interested), lookupLatency); } @@ -320,21 +318,20 @@ SnoopFilter::updateSnoopForward(const Packet* cpkt, if (!is_hit) return; - SnoopItem& sf_item = sf_it->second; - - DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", - __func__, sf_item.requested, sf_item.holder); - // If the snoop response has no sharers the line is passed in // Modified state, and we know that there are no other copies, or // they will all be invalidated imminently if (!cpkt->hasSharers()) { + SnoopItem& sf_item = sf_it->second; + + DPRINTF(SnoopFilter, "%s: old SF value %x.%x\n", + __func__, sf_item.requested, sf_item.holder); sf_item.holder = 0; - } - DPRINTF(SnoopFilter, "%s: new SF value %x.%x\n", - __func__, sf_item.requested, sf_item.holder); - eraseIfNullEntry(sf_it); + DPRINTF(SnoopFilter, "%s: new SF value %x.%x\n", + __func__, sf_item.requested, sf_item.holder); + eraseIfNullEntry(sf_it); + } } void |