summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/minor/lsq.cc18
-rw-r--r--src/cpu/minor/lsq.hh5
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(); }