Current logic incorrectly uses the enum ioapic_irq_destination_types
to check the posted interrupt destination types. However, the value was
set using APIC_DM_XXX macros, which are left-shifted by 8 bits.
Fixes by using the APIC_DM_FIXED and APIC_DM_LOWEST instead.
Fixes: (fdcf75621375 'KVM: x86: Disable posted interrupts for non-standard IRQs delivery modes')
Cc: Alexander Graf <[email protected]>
Signed-off-by: Suravee Suthikulpanit <[email protected]>
---
arch/x86/include/asm/kvm_host.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 98959e8..f15e5b3 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1664,8 +1664,8 @@ void kvm_set_msi_irq(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *e,
static inline bool kvm_irq_is_postable(struct kvm_lapic_irq *irq)
{
/* We can only post Fixed and LowPrio IRQs */
- return (irq->delivery_mode == dest_Fixed ||
- irq->delivery_mode == dest_LowestPrio);
+ return (irq->delivery_mode == APIC_DM_FIXED ||
+ irq->delivery_mode == APIC_DM_LOWEST);
}
static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu)
--
1.8.3.1
Ping.
Thanks,
Suravee
On 4/7/20 1:13 PM, Suravee Suthikulpanit wrote:
> Current logic incorrectly uses the enum ioapic_irq_destination_types
> to check the posted interrupt destination types. However, the value was
> set using APIC_DM_XXX macros, which are left-shifted by 8 bits.
>
> Fixes by using the APIC_DM_FIXED and APIC_DM_LOWEST instead.
>
> Fixes: (fdcf75621375 'KVM: x86: Disable posted interrupts for non-standard IRQs delivery modes')
> Cc: Alexander Graf <[email protected]>
> Signed-off-by: Suravee Suthikulpanit <[email protected]>
> ---
> arch/x86/include/asm/kvm_host.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 98959e8..f15e5b3 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -1664,8 +1664,8 @@ void kvm_set_msi_irq(struct kvm *kvm, struct kvm_kernel_irq_routing_entry *e,
> static inline bool kvm_irq_is_postable(struct kvm_lapic_irq *irq)
> {
> /* We can only post Fixed and LowPrio IRQs */
> - return (irq->delivery_mode == dest_Fixed ||
> - irq->delivery_mode == dest_LowestPrio);
> + return (irq->delivery_mode == APIC_DM_FIXED ||
> + irq->delivery_mode == APIC_DM_LOWEST);
> }
>
> static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu)
>
On Tue, 2020-04-07 at 01:13 -0500, Suravee Suthikulpanit wrote:
> Current logic incorrectly uses the enum ioapic_irq_destination_types
> to check the posted interrupt destination types. However, the value
> was
> set using APIC_DM_XXX macros, which are left-shifted by 8 bits.
>
> Fixes by using the APIC_DM_FIXED and APIC_DM_LOWEST instead.
>
> Fixes: (fdcf75621375 'KVM: x86: Disable posted interrupts for non-
> standard IRQs delivery modes')
> Cc: Alexander Graf <[email protected]>
> Signed-off-by: Suravee Suthikulpanit <[email protected]>
> ---
> arch/x86/include/asm/kvm_host.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/include/asm/kvm_host.h
> b/arch/x86/include/asm/kvm_host.h
> index 98959e8..f15e5b3 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -1664,8 +1664,8 @@ void kvm_set_msi_irq(struct kvm *kvm, struct
> kvm_kernel_irq_routing_entry *e,
> static inline bool kvm_irq_is_postable(struct kvm_lapic_irq *irq)
> {
> /* We can only post Fixed and LowPrio IRQs */
> - return (irq->delivery_mode == dest_Fixed ||
> - irq->delivery_mode == dest_LowestPrio);
> + return (irq->delivery_mode == APIC_DM_FIXED ||
> + irq->delivery_mode == APIC_DM_LOWEST);
> }
>
> static inline void kvm_arch_vcpu_blocking(struct kvm_vcpu *vcpu)
I confirm that this patch fixes AVIC posted interrupts on my 3970X.
Low byte of the delivery mode is the vector, while high byte is the
delivery mode, and the vector is masked in
kvm_set_msi_irq, thus indeed the delivery mode is in high 8 bytes.
Reviewed-by: Maxim Levitsky <[email protected]>
Tested-by: Maxim Levitsky <[email protected]>
Best regards,
Maxim Levitsky
On 02/05/20 15:13, Maxim Levitsky wrote:
> Reviewed-by: Maxim Levitsky <[email protected]>
> Tested-by: Maxim Levitsky <[email protected]>
Queued, thanks.
Paolo