mem: Fix SenderState related cache deadlock
authorSascha Bischoff <sascha.bischoff@arm.com>
Tue, 19 Feb 2013 10:56:06 +0000 (05:56 -0500)
committerSascha Bischoff <sascha.bischoff@arm.com>
Tue, 19 Feb 2013 10:56:06 +0000 (05:56 -0500)
commit86a4d092691bdcdc7b60f7cacd7d5b5c54d9a1ca
tree6fdc88e25bc34f2a5275c21c27e4c72608303cbf
parent0622f30961fc32b967bb1ef784afc5a205b16f6e
mem: Fix SenderState related cache deadlock

This patch fixes a potential deadlock in the caches. This deadlock
could occur when more than one cache is used in a system, and
pkt->senderState is modified in between the two caches. This happened
as the caches relied on the senderState remaining unchanged, and used
it for instantaneous upstream communication with other caches.

This issue has been addressed by iterating over the linked list of
senderStates until we are either able to cast to a MSHR* or
senderState is NULL. If the cast is successful, we know that the
packet has previously passed through another cache, and therefore
update the downstreamPending flag accordingly. Otherwise, we do
nothing.
src/mem/cache/mshr.cc
src/mem/packet.hh