diff options
author | Curtis Dunham <Curtis.Dunham@arm.com> | 2017-02-14 15:09:18 -0600 |
---|---|---|
committer | Curtis Dunham <Curtis.Dunham@arm.com> | 2017-02-14 15:09:18 -0600 |
commit | 41beacce088e8f682a0e8ac48f22a3fa4805a43b (patch) | |
tree | 3cd96b36acb9b38a2010eeae07f193a9d2292c73 /src/cpu | |
parent | d3bfc03688e164c02e9c25730ada11b669c01eda (diff) | |
download | gem5-41beacce088e8f682a0e8ac48f22a3fa4805a43b.tar.xz |
sim, kvm: make KvmVM a System parameter
A KVM VM is typically a child of the System object already, but for
solving future issues with configuration graph resolution, the most
logical way to keep track of this object is for it to be an actual
parameter of the System object.
Change-Id: I965ded22203ff8667db9ca02de0042ff1c772220
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/kvm/BaseKvmCPU.py | 1 | ||||
-rw-r--r-- | src/cpu/kvm/KvmVM.py | 5 | ||||
-rw-r--r-- | src/cpu/kvm/base.cc | 2 | ||||
-rw-r--r-- | src/cpu/kvm/vm.cc | 10 | ||||
-rw-r--r-- | src/cpu/kvm/vm.hh | 5 |
5 files changed, 17 insertions, 6 deletions
diff --git a/src/cpu/kvm/BaseKvmCPU.py b/src/cpu/kvm/BaseKvmCPU.py index 4c64f24ed..cc0b28fe9 100644 --- a/src/cpu/kvm/BaseKvmCPU.py +++ b/src/cpu/kvm/BaseKvmCPU.py @@ -64,7 +64,6 @@ class BaseKvmCPU(BaseCPU): def support_take_over(cls): return True - kvmVM = Param.KvmVM(Parent.any, 'KVM VM (i.e., shared memory domain)') useCoalescedMMIO = Param.Bool(False, "Use coalesced MMIO (EXPERIMENTAL)") usePerfOverflow = Param.Bool(False, "Use perf event overflow counters (EXPERIMENTAL)") alwaysSyncTC = Param.Bool(False, diff --git a/src/cpu/kvm/KvmVM.py b/src/cpu/kvm/KvmVM.py index 478a91682..cbc92ca0d 100644 --- a/src/cpu/kvm/KvmVM.py +++ b/src/cpu/kvm/KvmVM.py @@ -44,6 +44,5 @@ class KvmVM(SimObject): type = 'KvmVM' cxx_header = "cpu/kvm/vm.hh" - system = Param.System(Parent.any, "system object") - - coalescedMMIO = VectorParam.AddrRange([], "memory ranges for coalesced MMIO") + coalescedMMIO = \ + VectorParam.AddrRange([], "memory ranges for coalesced MMIO") diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc index 723feda44..6ae3c7dff 100644 --- a/src/cpu/kvm/base.cc +++ b/src/cpu/kvm/base.cc @@ -64,7 +64,7 @@ BaseKvmCPU::BaseKvmCPU(BaseKvmCPUParams *params) : BaseCPU(params), - vm(*params->kvmVM), + vm(*params->system->getKvmVM()), _status(Idle), dataPort(name() + ".dcache_port", this), instPort(name() + ".icache_port", this), diff --git a/src/cpu/kvm/vm.cc b/src/cpu/kvm/vm.cc index d3ab8c45a..604d182ab 100644 --- a/src/cpu/kvm/vm.cc +++ b/src/cpu/kvm/vm.cc @@ -292,7 +292,7 @@ Kvm::createVM() KvmVM::KvmVM(KvmVMParams *params) : SimObject(params), - kvm(new Kvm()), system(params->system), + kvm(new Kvm()), system(nullptr), vmFD(kvm->createVM()), started(false), nextVCPUID(0) @@ -342,6 +342,7 @@ KvmVM::cpuStartup() void KvmVM::delayedStartup() { + assert(system); // set by the system during its construction const std::vector<BackingStoreEntry> &memories( system->getPhysMem().getBackingStore()); @@ -526,6 +527,13 @@ KvmVM::createDevice(uint32_t type, uint32_t flags) #endif } +void +KvmVM::setSystem(System *s) { + panic_if(system != nullptr, "setSystem() can only be called once"); + panic_if(s == nullptr, "setSystem() called with null System*"); + system = s; +} + int KvmVM::createVCPU(long vcpuID) { diff --git a/src/cpu/kvm/vm.hh b/src/cpu/kvm/vm.hh index 560efb606..dbd46aa3c 100644 --- a/src/cpu/kvm/vm.hh +++ b/src/cpu/kvm/vm.hh @@ -400,6 +400,11 @@ class KvmVM : public SimObject /** Global KVM interface */ Kvm *kvm; + /** + * Initialize system pointer. Invoked by system object. + */ + void setSystem(System *s); + #if defined(__aarch64__) public: // ARM-specific /** |