]> git.baikalelectronics.ru Git - kernel.git/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)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 8 Feb 2021 13:02:08 +0000 (00:02 +1100)
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
arch/powerpc/kvm/book3s_hv.c

index 6f612d240392f08d3fb6618c6abf9610cf23dfa0..d348e77cee20eb104dc63f4ccb032677250d4cb9 100644 (file)
@@ -3407,8 +3407,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) {
@@ -4217,8 +4218,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);