From 215d5e4096cb4b06aa7fd5e9936440b28d8fe034 Mon Sep 17 00:00:00 2001 From: Andreas Sandberg Date: Tue, 28 Aug 2018 11:56:55 +0100 Subject: [PATCH] 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 Reviewed-on: https://gem5-review.googlesource.com/12418 Reviewed-by: Jason Lowe-Power Maintainer: Jason Lowe-Power --- configs/common/CpuConfig.py | 13 ++++++++++++- configs/example/fs.py | 12 ++---------- configs/example/se.py | 9 +-------- 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: -- 2.30.2