diff options
author | Christoffer Dall <christoffer.dall@linaro.org> | 2017-10-03 14:02:12 +0200 |
---|---|---|
committer | Marc Zyngier <marc.zyngier@arm.com> | 2018-03-19 10:53:13 +0000 |
commit | 3f5c90b890acfa7ad0b817a67cfc5eaaf0e21f7d (patch) | |
tree | 34680c327ab34cdfd8b097638e59a02f6f648319 /virt/kvm | |
parent | dc251406bf244080adbc1a69b5a171ec4b43c93c (diff) | |
download | linux-3f5c90b890acfa7ad0b817a67cfc5eaaf0e21f7d.tar.gz linux-3f5c90b890acfa7ad0b817a67cfc5eaaf0e21f7d.tar.bz2 linux-3f5c90b890acfa7ad0b817a67cfc5eaaf0e21f7d.zip |
KVM: arm64: Introduce VHE-specific kvm_vcpu_run
So far this is mostly (see below) a copy of the legacy non-VHE switch
function, but we will start reworking these functions in separate
directions to work on VHE and non-VHE in the most optimal way in later
patches.
The only difference after this patch between the VHE and non-VHE run
functions is that we omit the branch-predictor variant-2 hardening for
QC Falkor CPUs, because this workaround is specific to a series of
non-VHE ARMv8.0 CPUs.
Reviewed-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Diffstat (limited to 'virt/kvm')
-rw-r--r-- | virt/kvm/arm/arm.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/virt/kvm/arm/arm.c b/virt/kvm/arm/arm.c index 2062d9357971..09dbee56ed8f 100644 --- a/virt/kvm/arm/arm.c +++ b/virt/kvm/arm/arm.c @@ -733,13 +733,15 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *run) */ trace_kvm_entry(*vcpu_pc(vcpu)); guest_enter_irqoff(); - if (has_vhe()) - kvm_arm_vhe_guest_enter(); - - ret = kvm_call_hyp(__kvm_vcpu_run, vcpu); - if (has_vhe()) + if (has_vhe()) { + kvm_arm_vhe_guest_enter(); + ret = kvm_vcpu_run_vhe(vcpu); kvm_arm_vhe_guest_exit(); + } else { + ret = kvm_call_hyp(__kvm_vcpu_run_nvhe, vcpu); + } + vcpu->mode = OUTSIDE_GUEST_MODE; vcpu->stat.exits++; /* |