Re: [PATCH v4] KVM: x86/xen: Inject vCPU upcall vector when local APIC is enabled

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

 



On Tue, Jan 16, 2024, David Woodhouse wrote:
> From: David Woodhouse <dwmw@xxxxxxxxxxxx>
> 
> Linux guests since commit b1c3497e604d ("x86/xen: Add support for
> HVMOP_set_evtchn_upcall_vector") in v6.0 onwards will use the per-vCPU
> upcall vector when it's advertised in the Xen CPUID leaves.
> 
> This upcall is injected through the guest's local APIC as an MSI, unlike
> the older system vector which was merely injected by the hypervisor any
> time the CPU was able to receive an interrupt and the upcall_pending
> flags is set in its vcpu_info.
> 
> Effectively, that makes the per-CPU upcall edge triggered instead of
> level triggered, which results in the upcall being lost if the MSI is
> delivered when the local APIC is *disabled*.
> 
> Xen checks the vcpu_info->evtchn_upcall_pending flag when the local APIC
> for a vCPU is software enabled (in fact, on any write to the SPIV
> register which doesn't disable the APIC). Do the same in KVM since KVM
> doesn't provide a way for userspace to intervene and trap accesses to
> the SPIV register of a local APIC emulated by KVM.
> 
> Astute reviewers may note that kvm_xen_inject_vcpu_vector() function has
> a WARN_ON_ONCE() in the case where kvm_irq_delivery_to_apic_fast() fails
> and returns false. In the case where the MSI is not delivered due to the
> local APIC being disabled, kvm_irq_delivery_to_apic_fast() still returns
> true but the value in *r is zero. So the WARN_ON_ONCE() remains correct,
> as that case should still never happen.
> 
> Fixes: fde0451be8fb3 ("KVM: x86/xen: Support per-vCPU event channel upcall via local APIC")
> Signed-off-by: David Woodhouse <dwmw@xxxxxxxxxxxx>
> Reviewed-by: Paul Durrant <paul@xxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> ---
>  v4: Reword commit message,
>      rename kvm_xen_enable_lapic() → kvm_xen_sw_enable_lapic().
>  v3: Repost, add Cc:stable.
>  v2: Add Fixes: tag.
> 
>  arch/x86/kvm/lapic.c |  5 ++++-
>  arch/x86/kvm/xen.c   |  2 +-
>  arch/x86/kvm/xen.h   | 18 ++++++++++++++++++
>  3 files changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
> index 3242f3da2457..75bc7d3f0022 100644
> --- a/arch/x86/kvm/lapic.c
> +++ b/arch/x86/kvm/lapic.c
> @@ -41,6 +41,7 @@
>  #include "ioapic.h"
>  #include "trace.h"
>  #include "x86.h"
> +#include "xen.h"
>  #include "cpuid.h"
>  #include "hyperv.h"
>  #include "smm.h"

Patch is corrupt.

git am /home/seanjc/patches/v4_20240116_dwmw2_kvm_x86_xen_inject_vcpu_upcall_vector_when_local_apic_is_enabled.mbx
Applying: KVM: x86/xen: Inject vCPU upcall vector when local APIC is enabled
error: corrupt patch at line 17

cat ~/patches/v4_20240116_dwmw2_kvm_x86_xen_inject_vcpu_upcall_vector_when_local_apic_is_enabled.mbx | patch -p 1 --merge
patching file arch/x86/kvm/lapic.c
patch: **** malformed patch at line 59:  #include "ioapic.h"

Based on what I see in a web view, I suspect something on your end is converting
whitespace to fancy unicode equivalents.

diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index 3242f3da2457..75bc7d3f0022 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -41,6 +41,7 @@
=C2=A0#include "ioapic.h"
=C2=A0#include "trace.h"
=C2=A0#include "x86.h"
+#include "xen.h"
=C2=A0#include "cpuid.h"
=C2=A0#include "hyperv.h"
=C2=A0#include "smm.h"





[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux