64 lines
2.1 KiB
Diff
64 lines
2.1 KiB
Diff
From: Alexander Graf <agraf@suse.de>
|
|
Date: Mon, 9 Jun 2014 01:16:32 +0200
|
|
Subject: KVM: PPC: Book3s PR: Disable AIL mode with OPAL
|
|
Origin: https://git.kernel.org/linus/fb4188bad02f4871b26cf19b98e8d92499ca5d31
|
|
|
|
When we're using PR KVM we must not allow the CPU to take interrupts
|
|
in virtual mode, as the SLB does not contain host kernel mappings
|
|
when running inside the guest context.
|
|
|
|
To make sure we get good performance for non-KVM tasks but still
|
|
properly functioning PR KVM, let's just disable AIL whenever a vcpu
|
|
is scheduled in.
|
|
|
|
This is fundamentally different from how we deal with AIL on pSeries
|
|
type machines where we disable AIL for the whole machine as soon as
|
|
a single KVM VM is up.
|
|
|
|
The reason for that is easy - on pSeries we do not have control over
|
|
per-cpu configuration of AIL. We also don't want to mess with CPU hotplug
|
|
races and AIL configuration, so setting it per CPU is easier and more
|
|
flexible.
|
|
|
|
This patch fixes running PR KVM on POWER8 bare metal for me.
|
|
|
|
Signed-off-by: Alexander Graf <agraf@suse.de>
|
|
Acked-by: Paul Mackerras <paulus@samba.org>
|
|
---
|
|
arch/powerpc/kvm/book3s_pr.c | 12 ++++++++++++
|
|
1 file changed, 12 insertions(+)
|
|
|
|
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c
|
|
index 3da412e..8ea7da4 100644
|
|
--- a/arch/powerpc/kvm/book3s_pr.c
|
|
+++ b/arch/powerpc/kvm/book3s_pr.c
|
|
@@ -71,6 +71,12 @@ static void kvmppc_core_vcpu_load_pr(struct kvm_vcpu *vcpu, int cpu)
|
|
svcpu->in_use = 0;
|
|
svcpu_put(svcpu);
|
|
#endif
|
|
+
|
|
+ /* Disable AIL if supported */
|
|
+ if (cpu_has_feature(CPU_FTR_HVMODE) &&
|
|
+ cpu_has_feature(CPU_FTR_ARCH_207S))
|
|
+ mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) & ~LPCR_AIL);
|
|
+
|
|
vcpu->cpu = smp_processor_id();
|
|
#ifdef CONFIG_PPC_BOOK3S_32
|
|
current->thread.kvm_shadow_vcpu = vcpu->arch.shadow_vcpu;
|
|
@@ -91,6 +97,12 @@ static void kvmppc_core_vcpu_put_pr(struct kvm_vcpu *vcpu)
|
|
|
|
kvmppc_giveup_ext(vcpu, MSR_FP | MSR_VEC | MSR_VSX);
|
|
kvmppc_giveup_fac(vcpu, FSCR_TAR_LG);
|
|
+
|
|
+ /* Enable AIL if supported */
|
|
+ if (cpu_has_feature(CPU_FTR_HVMODE) &&
|
|
+ cpu_has_feature(CPU_FTR_ARCH_207S))
|
|
+ mtspr(SPRN_LPCR, mfspr(SPRN_LPCR) | LPCR_AIL_3);
|
|
+
|
|
vcpu->cpu = -1;
|
|
}
|
|
|
|
--
|
|
1.7.10.4
|
|
|