summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas.sandberg@arm.com>2018-08-28 11:56:55 +0100
committerAndreas Sandberg <andreas.sandberg@arm.com>2018-09-03 16:05:46 +0000
commit215d5e4096cb4b06aa7fd5e9936440b28d8fe034 (patch)
tree280a6ea01b449ac3592157baadd61382025b7edc
parent2b4b94d0556c2d03172ebff63f7fc502c3c26ff8 (diff)
downloadgem5-215d5e4096cb4b06aa7fd5e9936440b28d8fe034.tar.xz
config: Move KVM CPU checking to CpuConfig helper module
Both se.py and fs.py need to check if a CPU is a KVM CPU. This is somewhat involved since CPUs can be disabled at compile time. Enable better code reuse by moving it to the CpuConfig module. Change-Id: I47b1512ecb62e757399a407a0e41be83b9f83be3 Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com> Reviewed-on: https://gem5-review.googlesource.com/12418 Reviewed-by: Jason Lowe-Power <jason@lowepower.com> Maintainer: Jason Lowe-Power <jason@lowepower.com>
-rw-r--r--configs/common/CpuConfig.py13
-rw-r--r--configs/example/fs.py12
-rw-r--r--configs/example/se.py9
3 files changed, 15 insertions, 19 deletions
diff --git a/configs/common/CpuConfig.py b/configs/common/CpuConfig.py
index 3f193ae60..d70e6cfa7 100644
--- a/configs/common/CpuConfig.py
+++ b/configs/common/CpuConfig.py
@@ -1,4 +1,4 @@
-# Copyright (c) 2012, 2017 ARM Limited
+# Copyright (c) 2012, 2017-2018 ARM Limited
# All rights reserved.
#
# The license below extends only to copyright in the software and shall
@@ -59,6 +59,17 @@ def is_cpu_class(cls):
except (TypeError, AttributeError):
return False
+def _cpu_subclass_tester(name):
+ cpu_class = getattr(m5.objects, name, None)
+
+ def tester(cls):
+ return cpu_class is not None and cls is not None and \
+ issubclass(cls, cpu_class)
+
+ return tester
+
+is_kvm_cpu = _cpu_subclass_tester("BaseKvmCPU")
+
def get(name):
"""Get a CPU class from a user provided class name or alias."""
diff --git a/configs/example/fs.py b/configs/example/fs.py
index 4031fd05e..f299d761c 100644
--- a/configs/example/fs.py
+++ b/configs/example/fs.py
@@ -66,14 +66,6 @@ from common import CpuConfig
from common.Caches import *
from common import Options
-
-# Check if KVM support has been enabled, we might need to do VM
-# configuration if that's the case.
-have_kvm_support = 'BaseKvmCPU' in globals()
-def is_kvm_cpu(cpu_class):
- return have_kvm_support and cpu_class != None and \
- issubclass(cpu_class, BaseKvmCPU)
-
def cmd_line_template():
if options.command_line and options.command_line_file:
print("Error: --command-line and --command-line-file are "
@@ -148,7 +140,7 @@ def build_test_system(np):
test_sys.cpu = [TestCPUClass(clk_domain=test_sys.cpu_clk_domain, cpu_id=i)
for i in xrange(np)]
- if is_kvm_cpu(TestCPUClass) or is_kvm_cpu(FutureClass):
+ if CpuConfig.is_kvm_cpu(TestCPUClass) or CpuConfig.is_kvm_cpu(FutureClass):
test_sys.kvm_vm = KvmVM()
if options.ruby:
@@ -282,7 +274,7 @@ def build_drive_system(np):
if options.kernel is not None:
drive_sys.kernel = binary(options.kernel)
- if is_kvm_cpu(DriveCPUClass):
+ if CpuConfig.is_kvm_cpu(DriveCPUClass):
drive_sys.kvm_vm = KvmVM()
drive_sys.iobridge = Bridge(delay='50ns',
diff --git a/configs/example/se.py b/configs/example/se.py
index 99d79bc57..015a953da 100644
--- a/configs/example/se.py
+++ b/configs/example/se.py
@@ -65,13 +65,6 @@ from common import MemConfig
from common.Caches import *
from common.cpu2000 import *
-# Check if KVM support has been enabled, we might need to do VM
-# configuration if that's the case.
-have_kvm_support = 'BaseKvmCPU' in globals()
-def is_kvm_cpu(cpu_class):
- return have_kvm_support and cpu_class != None and \
- issubclass(cpu_class, BaseKvmCPU)
-
def get_processes(options):
"""Interprets provided options and returns a list of processes"""
@@ -210,7 +203,7 @@ if options.elastic_trace_en:
for cpu in system.cpu:
cpu.clk_domain = system.cpu_clk_domain
-if is_kvm_cpu(CPUClass) or is_kvm_cpu(FutureClass):
+if CpuConfig.is_kvm_cpu(CPUClass) or CpuConfig.is_kvm_cpu(FutureClass):
if buildEnv['TARGET_ISA'] == 'x86':
system.kvm_vm = KvmVM()
for process in multiprocesses: