Patch "KVM: PPC: Book3S HV: Avoid returning to nested hypervisor on pending doorbells" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    KVM: PPC: Book3S HV: Avoid returning to nested hypervisor on pending doorbells

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-ppc-book3s-hv-avoid-returning-to-nested-hypervis.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 18faaf580c5ba5d372b124e721811bbb3be28adf
Author: Gautam Menghani <gautam@xxxxxxxxxxxxx>
Date:   Sat Nov 9 12:02:57 2024 +0530

    KVM: PPC: Book3S HV: Avoid returning to nested hypervisor on pending doorbells
    
    [ Upstream commit 26686db69917399fa30e3b3135360771e90f83ec ]
    
    Commit 6398326b9ba1 ("KVM: PPC: Book3S HV P9: Stop using vc->dpdes")
    dropped the use of vcore->dpdes for msgsndp / SMT emulation. Prior to that
    commit, the below code at L1 level (see [1] for terminology) was
    responsible for setting vc->dpdes for the respective L2 vCPU:
    
    if (!nested) {
            kvmppc_core_prepare_to_enter(vcpu);
            if (vcpu->arch.doorbell_request) {
                    vc->dpdes = 1;
                    smp_wmb();
                    vcpu->arch.doorbell_request = 0;
            }
    
    L1 then sent vc->dpdes to L0 via kvmhv_save_hv_regs(), and while
    servicing H_ENTER_NESTED at L0, the below condition at L0 level made sure
    to abort and go back to L1 if vcpu->arch.doorbell_request = 1 so that L1
    sets vc->dpdes as per above if condition:
    
    } else if (vcpu->arch.pending_exceptions ||
               vcpu->arch.doorbell_request ||
               xive_interrupt_pending(vcpu)) {
            vcpu->arch.ret = RESUME_HOST;
            goto out;
    }
    
    This worked fine since vcpu->arch.doorbell_request was used more like a
    flag and vc->dpdes was used to pass around the doorbell state. But after
    Commit 6398326b9ba1 ("KVM: PPC: Book3S HV P9: Stop using vc->dpdes"),
    vcpu->arch.doorbell_request is the only variable used to pass around
    doorbell state.
    With the plumbing for handling doorbells for nested guests updated to use
    vcpu->arch.doorbell_request over vc->dpdes, the above "else if" stops
    doorbells from working correctly as L0 aborts execution of L2 and
    instead goes back to L1.
    
    Remove vcpu->arch.doorbell_request from the above "else if" condition as
    it is no longer needed for L0 to correctly handle the doorbell status
    while running L2.
    
    [1] Terminology
    1. L0 : PowerNV linux running with HV privileges
    2. L1 : Pseries KVM guest running on top of L0
    2. L2 : Nested KVM guest running on top of L1
    
    Fixes: 6398326b9ba1 ("KVM: PPC: Book3S HV P9: Stop using vc->dpdes")
    Signed-off-by: Gautam Menghani <gautam@xxxxxxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://patch.msgid.link/20241109063301.105289-4-gautam@xxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 479218389e7cd..45708ac55e90e 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -4653,7 +4653,6 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 time_limit,
 			lpcr |= LPCR_MER;
 		}
 	} else if (vcpu->arch.pending_exceptions ||
-		   vcpu->arch.doorbell_request ||
 		   xive_interrupt_pending(vcpu)) {
 		vcpu->arch.ret = RESUME_HOST;
 		goto out;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux