lkml.org 
[lkml]   [2019]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.20 078/117] KVM: x86: WARN_ONCE if sending a PV IPI returns a fatal error
    Date
    4.20-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sean Christopherson <sean.j.christopherson@intel.com>

    commit de81c2f912ef57917bdc6d63b410c534c3e07982 upstream.

    KVM hypercalls return a negative value error code in case of a fatal
    error, e.g. when the hypercall isn't supported or was made with invalid
    parameters. WARN_ONCE on fatal errors when sending PV IPIs as any such
    error all but guarantees an SMP system will hang due to a missing IPI.

    Fixes: aaffcfd1e82d ("KVM: X86: Implement PV IPIs in linux guest")
    Cc: stable@vger.kernel.org
    Cc: Wanpeng Li <wanpengli@tencent.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/kernel/kvm.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/arch/x86/kernel/kvm.c
    +++ b/arch/x86/kernel/kvm.c
    @@ -457,6 +457,7 @@ static void __send_ipi_mask(const struct
    #else
    u64 ipi_bitmap = 0;
    #endif
    + long ret;

    if (cpumask_empty(mask))
    return;
    @@ -482,8 +483,9 @@ static void __send_ipi_mask(const struct
    } else if (apic_id < min + KVM_IPI_CLUSTER_SIZE) {
    max = apic_id < max ? max : apic_id;
    } else {
    - kvm_hypercall4(KVM_HC_SEND_IPI, (unsigned long)ipi_bitmap,
    + ret = kvm_hypercall4(KVM_HC_SEND_IPI, (unsigned long)ipi_bitmap,
    (unsigned long)(ipi_bitmap >> BITS_PER_LONG), min, icr);
    + WARN_ONCE(ret < 0, "KVM: failed to send PV IPI: %ld", ret);
    min = max = apic_id;
    ipi_bitmap = 0;
    }
    @@ -491,8 +493,9 @@ static void __send_ipi_mask(const struct
    }

    if (ipi_bitmap) {
    - kvm_hypercall4(KVM_HC_SEND_IPI, (unsigned long)ipi_bitmap,
    + ret = kvm_hypercall4(KVM_HC_SEND_IPI, (unsigned long)ipi_bitmap,
    (unsigned long)(ipi_bitmap >> BITS_PER_LONG), min, icr);
    + WARN_ONCE(ret < 0, "KVM: failed to send PV IPI: %ld", ret);
    }

    local_irq_restore(flags);

    \
     
     \ /
      Last update: 2019-01-29 13:08    [W:2.614 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site