summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/kvm/BaseKvmCPU.py1
-rw-r--r--src/cpu/kvm/KvmVM.py5
-rw-r--r--src/cpu/kvm/base.cc2
-rw-r--r--src/cpu/kvm/vm.cc10
-rw-r--r--src/cpu/kvm/vm.hh5
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
/**