lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 171/667] KVM: PPC: Book3S HV Nested: L2 LPCR should inherit L1 LPES setting
    Date
    From: Nicholas Piggin <npiggin@gmail.com>

    [ Upstream commit 2852ebfa10afdcefff35ec72c8da97141df9845c ]

    The L1 should not be able to adjust LPES mode for the L2. Setting LPES
    if the L0 needs it clear would cause external interrupts to be sent to
    L2 and missed by the L0.

    Clearing LPES when it may be set, as typically happens with XIVE enabled
    could cause a performance issue despite having no native XIVE support in
    the guest, because it will cause mediated interrupts for the L2 to be
    taken in HV mode, which then have to be injected.

    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Reviewed-by: Fabiano Rosas <farosas@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20220303053315.1056880-7-npiggin@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/kvm/book3s_hv.c | 4 ++++
    arch/powerpc/kvm/book3s_hv_nested.c | 3 +--
    2 files changed, 5 insertions(+), 2 deletions(-)

    diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
    index 7fa685711669..eba77096c443 100644
    --- a/arch/powerpc/kvm/book3s_hv.c
    +++ b/arch/powerpc/kvm/book3s_hv.c
    @@ -5235,6 +5235,10 @@ static int kvmppc_core_init_vm_hv(struct kvm *kvm)
    kvm->arch.host_lpcr = lpcr = mfspr(SPRN_LPCR);
    lpcr &= LPCR_PECE | LPCR_LPES;
    } else {
    + /*
    + * The L2 LPES mode will be set by the L0 according to whether
    + * or not it needs to take external interrupts in HV mode.
    + */
    lpcr = 0;
    }
    lpcr |= (4UL << LPCR_DPFD_SH) | LPCR_HDICE |
    diff --git a/arch/powerpc/kvm/book3s_hv_nested.c b/arch/powerpc/kvm/book3s_hv_nested.c
    index 6c4e0e93105f..ddea14e5cb5e 100644
    --- a/arch/powerpc/kvm/book3s_hv_nested.c
    +++ b/arch/powerpc/kvm/book3s_hv_nested.c
    @@ -261,8 +261,7 @@ static void load_l2_hv_regs(struct kvm_vcpu *vcpu,
    /*
    * Don't let L1 change LPCR bits for the L2 except these:
    */
    - mask = LPCR_DPFD | LPCR_ILE | LPCR_TC | LPCR_AIL | LPCR_LD |
    - LPCR_LPES | LPCR_MER;
    + mask = LPCR_DPFD | LPCR_ILE | LPCR_TC | LPCR_AIL | LPCR_LD | LPCR_MER;

    /*
    * Additional filtering is required depending on hardware
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-06-07 20:32    [W:4.057 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site