From 1a45a8c5d3527f0d96c48e176073d39413b4f990 Mon Sep 17 00:00:00 2001 From: Andrew Bardsley Date: Fri, 12 Sep 2014 10:22:49 -0400 Subject: 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. --- src/cpu/minor/lsq.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/cpu/minor/lsq.cc') 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; } -- cgit v1.2.3