cpu: Fix retries on barrier/store in Minor's store buffer
authorAndrew Bardsley <Andrew.Bardsley@arm.com>
Tue, 2 Dec 2014 11:08:15 +0000 (06:08 -0500)
committerAndrew Bardsley <Andrew.Bardsley@arm.com>
Tue, 2 Dec 2014 11:08:15 +0000 (06:08 -0500)
commitdf37cad0fdf262ffbfd1b680e7fb8ef7689885ad
treec21b9cd29013ff22775feabd0e61d64b53a79a10
parent98f3e7a3108dc41daae3e9c8ef448cf948b840b1
cpu: Fix retries on barrier/store in Minor's store buffer

This patch fixes a case where a store in Minor's store buffer never
leaves the store buffer as it is pre-maturely counted as having been
issued, leading to the store buffer idling.

LSQ::StoreBuffer::numUnissuedAccesses should count the number of accesses
either in memory, or still in the store buffer after being completed.

For stores which are also barriers, the store will stay in the store
buffer for a cycle after it is completed and will be cleaned up by the
barrier clearing code (to ensure that barriers are completed in-order).
To acheive this, numUnissuedAccesses is not decremented when a store-barrier
is issued to memory, but when its barrier effect is cleared.

Without this patch, the correct behaviour happens when a memory transaction
is immediately accepted, but not if it needs a retry.
src/cpu/minor/lsq.cc
src/cpu/minor/lsq.hh