summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNikos Nikoleris <nikos.nikoleris@arm.com>2017-10-07 11:19:54 +0100
committerNikos Nikoleris <nikos.nikoleris@arm.com>2017-12-05 11:47:01 +0000
commitb9edb351454c2601070fb9432f23fc3914eb33c1 (patch)
tree5e88d137fa1ae93f067ee997685f091538b18843 /src
parent7d70967abaf1ce3a09433620dc41ed48c2fc0db0 (diff)
downloadgem5-b9edb351454c2601070fb9432f23fc3914eb33c1.tar.xz
mem-ruby: Prevent ruby from crashing on CMOs
Ruby has no support for cache maintenace operations. As a workaround, after printing a warning, we treat them as no-ops in the memory system and respond immediately without handling them. There should be workarounds in the memory system already that allow execution to proceed without the requirement for cache maintenance operations. Change-Id: I125ee4fa37b674c636d87f2d9205bbc1a74da101 Reviewed-on: https://gem5-review.googlesource.com/5057 Reviewed-by: Jieming Yin <bjm419@gmail.com> Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
Diffstat (limited to 'src')
-rw-r--r--src/mem/ruby/system/RubyPort.cc8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/mem/ruby/system/RubyPort.cc b/src/mem/ruby/system/RubyPort.cc
index 5b94f80ed..fd535cca2 100644
--- a/src/mem/ruby/system/RubyPort.cc
+++ b/src/mem/ruby/system/RubyPort.cc
@@ -237,6 +237,14 @@ RubyPort::MemSlavePort::recvTimingReq(PacketPtr pkt)
panic("RubyPort should never see request with the "
"cacheResponding flag set\n");
+ // ruby doesn't support cache maintenance operations at the
+ // moment, as a workaround, we respond right away
+ if (pkt->req->isCacheMaintenance()) {
+ warn_once("Cache maintenance operations are not supported in Ruby.\n");
+ pkt->makeResponse();
+ schedTimingResp(pkt, curTick());
+ return true;
+ }
// Check for pio requests and directly send them to the dedicated
// pio port.
if (pkt->cmd != MemCmd::MemFenceReq) {