summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cpu/minor/lsq.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc
index dea776c9e..8bbda030c 100644
--- a/src/cpu/minor/lsq.cc
+++ b/src/cpu/minor/lsq.cc
@@ -142,10 +142,18 @@ LSQ::LSQRequest::containsAddrRangeOf(
LSQ::AddrRangeCoverage
LSQ::LSQRequest::containsAddrRangeOf(LSQRequestPtr other_request)
{
- return containsAddrRangeOf(request->getPaddr(), request->getSize(),
+ AddrRangeCoverage ret = containsAddrRangeOf(
+ request->getPaddr(), request->getSize(),
other_request->request->getPaddr(), other_request->request->getSize());
+ /* If there is a strobe mask then store data forwarding might not be
+ * correct. Instead of checking enablemant of every byte we just fall back
+ * to PartialAddrRangeCoverage to prohibit store data forwarding */
+ if (ret == FullAddrRangeCoverage && request->isMasked())
+ ret = PartialAddrRangeCoverage;
+ return ret;
}
+
bool
LSQ::LSQRequest::isBarrier()
{