BaseCache::recvTimingResp
can trigger an assertion error from getTarget()
due to MSHR in senderState
having no targets
#100
Labels
This was identified by Eliot moss on our gem5-users mailing list (https://www.mail-archive.com/gem5-users@gem5.org/msg21771.html). Copy and pasted verbatim:
Dear gem5-ers - I've run across something, which unfortunately I cannot reliably repeat, that suggests an oversight in the code of src/mem/cache/base.cc. In particular, it appears that a HardPFResp can arrive where the MSHR remembered in the packet's senderState no longer has any targets. This causes this line to fail with an assertion error in getTarget(): const QueueEntry::Target *initial_tgt = mshr->getTarget(); Presumably some suitable conditionalization on mshr->hasTargets() could be used to fix things, unless the problem is that somehow the target(s) disappeared when they should not have. My suspicion is that something to do with snooping by another cache caused the target to go away, and the situation should just be ignored, but I did not want to attempt a fix along the lines of testing hasTargets() without further confirmation. There is also the question of what to do about the stats in this case, there being no obvious basis for determining a latency. [We could change the senderState to include the time the prefetch began, though, and use HardPFReq as the command.] Regards - Eliot Moss
The
const QueueEntry::Target *initial_tgt = mshr->getTarget();
line mentioned in the email refers to:gem5/src/mem/cache/base.cc
Line 528 in af72b9b
The text was updated successfully, but these errors were encountered: