summaryrefslogtreecommitdiff
path: root/src/cpu/minor/lsq.cc
diff options
context:
space:
mode:
authorAndrew Bardsley <Andrew.Bardsley@arm.com>2014-09-12 10:22:49 -0400
committerAndrew Bardsley <Andrew.Bardsley@arm.com>2014-09-12 10:22:49 -0400
commit1a45a8c5d3527f0d96c48e176073d39413b4f990 (patch)
tree4a75f497aec8b6c5d8c7ceb7c17a60b833db4b8c /src/cpu/minor/lsq.cc
parentc8b919aba27a41adb7f75aeace358e4d31c47b76 (diff)
downloadgem5-1a45a8c5d3527f0d96c48e176073d39413b4f990.tar.xz
cpu: Fix memory access in Minor not setting parent Request flags
This patch fixes cases where uncacheable/memory type flags are not set correctly on a memory op which is split in the LSQ. Without this patch, request->request if freely used to check flags where the flags should actually come from the accumulation of request fragment flags. This patch also fixes a bug where an uncacheable access which passes through tryToSendRequest more than once can increment LSQ::numAccessesInMemorySystem more than once.
Diffstat (limited to 'src/cpu/minor/lsq.cc')
-rw-r--r--src/cpu/minor/lsq.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc
index c5e38c78d..b05ae514c 100644
--- a/src/cpu/minor/lsq.cc
+++ b/src/cpu/minor/lsq.cc
@@ -476,6 +476,8 @@ LSQ::SplitDataRequest::makeFragmentPackets()
makePacketForRequest(*fragment, isLoad, this, request_data);
fragmentPackets.push_back(fragment_packet);
+ /* Accumulate flags in parent request */
+ request.setFlags(fragment->getFlags());
}
/* Might as well make the overall/response packet here */
@@ -1029,7 +1031,7 @@ LSQ::tryToSendToTransfers(LSQRequestPtr request)
/* Remember if this is an access which can't be idly
* discarded by an interrupt */
- if (!bufferable) {
+ if (!bufferable && !request->issuedToMemory) {
numAccessesIssuedToMemory++;
request->issuedToMemory = true;
}