]> git.itanic.dy.fi Git - linux-stable/commitdiff
KVM: PPC: Book3S HV: Context tracking exit guest context before enabling irqs
authorNicholas Piggin <npiggin@gmail.com>
Sat, 30 Jan 2021 13:08:12 +0000 (23:08 +1000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Sep 2022 12:16:55 +0000 (14:16 +0200)
[ Upstream commit 112665286d08c87e66d699e7cba43c1497ad165f ]

Interrupts that occur in kernel mode expect that context tracking
is set to kernel. Enabling local irqs before context tracking
switches from guest to host means interrupts can come in and trigger
warnings about wrong context, and possibly worse.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20210130130852.2952424-3-npiggin@gmail.com
Stable-dep-of: 235cee162459 ("KVM: PPC: Tick accounting should defer vtime accounting 'til after IRQ handling")
Signed-off-by: Sasha Levin <sashal@kernel.org>
arch/powerpc/kvm/book3s_hv.c

index 38b7a3491aac080a26aef0120c09fc32db7176af..d6c4e27f7ed903aadae7e063f570c4263c6f50b1 100644 (file)
@@ -3399,8 +3399,9 @@ static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)
 
        kvmppc_set_host_core(pcpu);
 
+       guest_exit_irqoff();
+
        local_irq_enable();
-       guest_exit();
 
        /* Let secondaries go back to the offline loop */
        for (i = 0; i < controlled_threads; ++i) {
@@ -4235,8 +4236,9 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 time_limit,
 
        kvmppc_set_host_core(pcpu);
 
+       guest_exit_irqoff();
+
        local_irq_enable();
-       guest_exit();
 
        cpumask_clear_cpu(pcpu, &kvm->arch.cpu_in_guest);