summaryrefslogtreecommitdiff
path: root/src/cpu
diff options
context:
space:
mode:
Diffstat (limited to 'src/cpu')
-rw-r--r--src/cpu/kvm/vm.cc11
-rw-r--r--src/cpu/kvm/vm.hh17
2 files changed, 28 insertions, 0 deletions
diff --git a/src/cpu/kvm/vm.cc b/src/cpu/kvm/vm.cc
index a12374aa5..87a76c242 100644
--- a/src/cpu/kvm/vm.cc
+++ b/src/cpu/kvm/vm.cc
@@ -520,6 +520,17 @@ KvmVM::allocVCPUID()
return nextVCPUID++;
}
+#if defined(__aarch64__)
+void
+KvmVM::kvmArmPreferredTarget(struct kvm_vcpu_init &target) const
+{
+ if (ioctl(KVM_ARM_PREFERRED_TARGET, &target) == -1) {
+ panic("KVM: Failed to get ARM preferred CPU target (errno: %i)\n",
+ errno);
+ }
+}
+#endif
+
int
KvmVM::ioctl(int request, long p1) const
{
diff --git a/src/cpu/kvm/vm.hh b/src/cpu/kvm/vm.hh
index d21fc2660..8f834a06e 100644
--- a/src/cpu/kvm/vm.hh
+++ b/src/cpu/kvm/vm.hh
@@ -398,6 +398,23 @@ class KvmVM : public SimObject
/** Global KVM interface */
Kvm kvm;
+#if defined(__aarch64__)
+ public: // ARM-specific
+ /**
+ * Ask the kernel for the preferred CPU target to simulate.
+ *
+ * When creating an ARM vCPU in Kvm, we need to initialize it with
+ * a call to BaseArmKvmCPU::kvmArmVCpuInit(). When calling this
+ * function, we need to know what type of CPU the host has. This
+ * call sets up the kvm_vcpu_init structure with the values the
+ * kernel wants.
+ *
+ * @param[out] target Target structure to initialize.
+ */
+ void kvmArmPreferredTarget(struct kvm_vcpu_init &target) const;
+
+#endif
+
protected:
/**
* VM CPU initialization code.