From 6ab6c52b0bf9c91ef9249613cb4c9d8ab579b4f3 Mon Sep 17 00:00:00 2001 From: Swapnil Haria Date: Thu, 9 Nov 2017 13:04:39 -0600 Subject: mem-ruby: Support atomic_noncaching acceses in ruby Ruby has no support for atomic_noncaching accesses, which prevents using it with kvm-cpu. This patch fixes this by directly forwarding atomic requests from the ruby port/sequencer to the corresponding directory based on the destination address of the packet. Change-Id: I0b4928bfda44fd9e5e48583c51d1ea422800da2d Reviewed-on: https://gem5-review.googlesource.com/5601 Reviewed-by: Andreas Sandberg Reviewed-by: Jason Lowe-Power Reviewed-by: Bradford Beckmann Maintainer: Jason Lowe-Power Maintainer: Bradford Beckmann --- configs/common/Simulation.py | 5 +++++ configs/example/fs.py | 8 +------- configs/example/se.py | 6 +----- 3 files changed, 7 insertions(+), 12 deletions(-) (limited to 'configs') diff --git a/configs/common/Simulation.py b/configs/common/Simulation.py index 71a982af9..7c949b972 100644 --- a/configs/common/Simulation.py +++ b/configs/common/Simulation.py @@ -83,6 +83,11 @@ def setCPUClass(options): TmpClass = AtomicSimpleCPU test_mem_mode = 'atomic' + # Ruby only supports atomic accesses in noncaching mode + if test_mem_mode == 'atomic' and options.ruby: + warn("Memory mode will be changed to atomic_noncaching") + test_mem_mode = 'atomic_noncaching' + return (TmpClass, test_mem_mode, CPUClass) def setMemClass(options): diff --git a/configs/example/fs.py b/configs/example/fs.py index 65079372c..351d1c016 100644 --- a/configs/example/fs.py +++ b/configs/example/fs.py @@ -47,7 +47,7 @@ import sys import m5 from m5.defines import buildEnv from m5.objects import * -from m5.util import addToPath, fatal +from m5.util import addToPath, fatal, warn addToPath('../') @@ -147,12 +147,6 @@ def build_test_system(np): test_sys.kvm_vm = KvmVM() if options.ruby: - # Check for timing mode because ruby does not support atomic accesses - if not (options.cpu_type == "DerivO3CPU" or - options.cpu_type == "TimingSimpleCPU"): - print >> sys.stderr, "Ruby requires TimingSimpleCPU or O3CPU!!" - sys.exit(1) - Ruby.create_system(options, True, test_sys, test_sys.iobus, test_sys._dma_ports) diff --git a/configs/example/se.py b/configs/example/se.py index 7a19e5aef..56e4753b9 100644 --- a/configs/example/se.py +++ b/configs/example/se.py @@ -49,7 +49,7 @@ import os import m5 from m5.defines import buildEnv from m5.objects import * -from m5.util import addToPath, fatal +from m5.util import addToPath, fatal, warn addToPath('../') @@ -250,10 +250,6 @@ for i in xrange(np): system.cpu[i].createThreads() if options.ruby: - if options.cpu_type == "AtomicSimpleCPU": - print >> sys.stderr, "Ruby does not work with atomic cpu!!" - sys.exit(1) - Ruby.create_system(options, False, system) assert(options.num_cpus == len(system.ruby._cpu_ports)) -- cgit v1.2.3