diff options
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 /** |