summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel R. Carvalho <odanrc@yahoo.com.br>2019-06-21 16:24:28 +0200
committerDaniel Carvalho <odanrc@yahoo.com.br>2019-08-02 11:42:46 +0000
commit334b8377f35b183148dfda3a7a5d71bee2990b81 (patch)
treed0ede20f1d39227fd0ba15bea70e26b8a929bbbc /src
parent2f1a08240f37c6c61f984ae263265f482a0e81b7 (diff)
downloadgem5-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')
-rw-r--r--src/mem/snoop_filter.cc29
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