mem: Add option to force in-order insertion in PacketQueue
authorStephan Diestelhorst <stephan.diestelhorst@arm.com>
Mon, 2 Mar 2015 09:00:49 +0000 (04:00 -0500)
committerStephan Diestelhorst <stephan.diestelhorst@arm.com>
Mon, 2 Mar 2015 09:00:49 +0000 (04:00 -0500)
commitecef1612b8a9a5632c8354ccb000184c2f82ddf3
treec7c21dfc5aa15f3a552fbfb59e7474d1307e7934
parentd4ef8368aa1dfb5e1e1ebe155c0fce1070046f83
mem: Add option to force in-order insertion in PacketQueue

By default, the packet queue is ordered by the ticks of the to-be-sent
packages. With the recent modifications of packages sinking their header time
when their resposne leaves the caches, there could be cases of MSHR targets
being allocated and ordered A, B, but their responses being sent out in the
order B,A. This led to inconsistencies in bus traffic, in particular the snoop
filter observing first a ReadExResp and later a ReadRespWithInv.  Logically,
these were ordered the other way around behind the MSHR, but due to the timing
adjustments when inserting into the PacketQueue, they were sent out in the
wrong order on the bus, confusing the snoop filter.

This patch adds a flag (off by default) such that these special cases can
request in-order insertion into the packet queue, which might offset timing
slighty. This is expected to occur rarely and not affect timing results.
src/mem/cache/cache_impl.hh
src/mem/packet_queue.cc
src/mem/packet_queue.hh
src/mem/qport.hh