diff options
Diffstat (limited to 'src/cpu')
-rw-r--r-- | src/cpu/kvm/vm.cc | 11 | ||||
-rw-r--r-- | src/cpu/kvm/vm.hh | 17 |
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. |