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

Reply via email to