Hi all,

One of our next steps to the memory system is to separate out snooping messages 
from "normal" messages. This will eventually enable us to classify ports as 
coherent/non-coherent masters/slaves. When looking at how the caches deal with 
forwarding snoops at the moment, there is a slight ambiguity between the two 
options is_top_level and foward_snoops. Is there ever a case where is_top_level 
is true and we should still forward snoops? I would imagine that if the CPU has 
no caching, e.g. a normal atomic/timing CPU then is_top_level for the L1 is 
true and the cache should not forward snoops. If we use the O3 CPU with a 
snooping LSQ, then is_top_level should be false, and we should indeed forward 
snoops.

Did I get this completely wrong, or do you agree?

I have made the following change in the cache and all quick regressions (ARM, 
ALPHA, X86) still pass.

diff --git a/src/mem/cache/base.cc b/src/mem/cache/base.cc
--- a/src/mem/cache/base.cc
+++ b/src/mem/cache/base.cc
@@ -57,7 +57,7 @@
       blkSize(p->block_size),
       hitLatency(p->latency),
       numTarget(p->tgts_per_mshr),
-      forwardSnoops(p->forward_snoops),
+      forwardSnoops(p->forward_snoops && !p->is_top_level),
       isTopLevel(p->is_top_level),
       blocked(0),
       noTargetMSHR(NULL),


Andreas

-- IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to