diff options
Diffstat (limited to 'src/cpu/minor')
-rw-r--r-- | src/cpu/minor/lsq.cc | 18 | ||||
-rw-r--r-- | src/cpu/minor/lsq.hh | 5 |
2 files changed, 17 insertions, 6 deletions
diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc index 75dbb804a..501620746 100644 --- a/src/cpu/minor/lsq.cc +++ b/src/cpu/minor/lsq.cc @@ -730,6 +730,15 @@ LSQ::StoreBuffer::forwardStoreData(LSQRequestPtr load, } void +LSQ::StoreBuffer::countIssuedStore(LSQRequestPtr request) +{ + /* Barriers are accounted for as they are cleared from + * the queue, not after their transfers are complete */ + if (!request->isBarrier()) + numUnissuedAccesses--; +} + +void LSQ::StoreBuffer::step() { DPRINTF(MinorMem, "StoreBuffer step numUnissuedAccesses: %d\n", @@ -785,10 +794,7 @@ LSQ::StoreBuffer::step() " system\n", *(request->inst)); if (lsq.tryToSend(request)) { - /* Barrier are accounted for as they are cleared from - * the queue, not after their transfers are complete */ - if (!request->isBarrier()) - numUnissuedAccesses--; + countIssuedStore(request); issue_count++; } else { /* Don't step on to the next store buffer entry if this @@ -1198,7 +1204,7 @@ LSQ::recvTimingResp(PacketPtr response) /* Response to a request from the store buffer */ request->retireResponse(response); - /* Remove completed requests unless they are barrier (which will + /* Remove completed requests unless they are barriers (which will * need to be removed in order */ if (request->isComplete()) { if (!request->isBarrier()) { @@ -1265,7 +1271,7 @@ LSQ::recvRetry() break; case LSQRequest::StoreBufferIssuing: /* In the store buffer */ - storeBuffer.numUnissuedAccesses--; + storeBuffer.countIssuedStore(retryRequest); break; default: assert(false); diff --git a/src/cpu/minor/lsq.hh b/src/cpu/minor/lsq.hh index 7da2fd694..7936ae8f0 100644 --- a/src/cpu/minor/lsq.hh +++ b/src/cpu/minor/lsq.hh @@ -514,6 +514,11 @@ class LSQ : public Named * completely issued to the memory system */ unsigned int numUnissuedStores() { return numUnissuedAccesses; } + /** Count a store being issued to memory by decrementing + * numUnissuedAccesses. Does not count barrier requests as they + * will be handles as barriers are cleared from the buffer */ + void countIssuedStore(LSQRequestPtr request); + /** Drained if there is absolutely nothing left in the buffer */ bool isDrained() const { return slots.empty(); } |