Hi,
I've been playing around with the Mercurial tip version of gem5 and think
I've uncovered a small bug. The last version I used was back in October
though, so I might have missed something obvious.
Within MI_example's directory protocol, there's the following code within
setState:
if (state == State:I) {
assert(getDirectoryEntry(addr).Owner.count() == 0);
assert(getDirectoryEntry(addr).Sharers.count() == 0);
directory.invalidateBlock(addr); // <-- This line
The invalidateBlock line marks the block as invalid, of course. When the
block is re-fetched from directory, this then causes getDirectoryEntry to
return a clean entry, thus if data is written back to the directory, the
writeback works, then setting the state to I causes the block to be
discarded. This line is not within the MESI_CMP_directory protocol
As I say, I'm not sure if this is a bug or I'm missing something in the
bigger picture, but I've been hitting my head against a wall for a good few
hours trying to track down this bug.
Cheers,
Jamie
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users