]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
KVM: e500: always restore irqs
authorPaolo Bonzini <pbonzini@redhat.com>
Sun, 12 Jan 2025 09:34:44 +0000 (10:34 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Sun, 12 Jan 2025 09:34:44 +0000 (10:34 +0100)
If find_linux_pte fails, IRQs will not be restored.  This is unlikely
to happen in practice since it would have been reported as hanging
hosts, but it should of course be fixed anyway.

Cc: stable@vger.kernel.org
Reported-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/powerpc/kvm/e500_mmu_host.c

index e5a145b578a4768e158357114f80505da380a33f..6824e8139801c2089ebe32d9964cfe378d9a5da6 100644 (file)
@@ -479,7 +479,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
                if (pte_present(pte)) {
                        wimg = (pte_val(pte) >> PTE_WIMGE_SHIFT) &
                                MAS2_WIMGE_MASK;
-                       local_irq_restore(flags);
                } else {
                        local_irq_restore(flags);
                        pr_err_ratelimited("%s: pte not present: gfn %lx,pfn %lx\n",
@@ -488,8 +487,9 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
                        goto out;
                }
        }
-       writable = kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg);
+       local_irq_restore(flags);
 
+       writable = kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg);
        kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
                                ref, gvaddr, stlbe);