iommu/amd: WARN if KVM attempts to set vCPU affinity without posted intrrupts
authorSean Christopherson <seanjc@google.com>
Fri, 4 Apr 2025 19:38:21 +0000 (12:38 -0700)
committerPaolo Bonzini <pbonzini@redhat.com>
Thu, 24 Apr 2025 13:52:31 +0000 (09:52 -0400)
WARN if KVM attempts to set vCPU affinity when posted interrupts aren't
enabled, as KVM shouldn't try to enable posting when they're unsupported,
and the IOMMU driver darn well should only advertise posting support when
AMD_IOMMU_GUEST_IR_VAPIC() is true.

Note, KVM consumes is_guest_mode only on success.

Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-ID: <20250404193923.1413163-7-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
drivers/iommu/amd/iommu.c

index 00965518b8020b09d9d83213acb73dc12d31e1b1..f34209b08b4c54adef269c18c801a917df9644e5 100644 (file)
@@ -3869,6 +3869,9 @@ static int amd_ir_set_vcpu_affinity(struct irq_data *data, void *vcpu_info)
        struct irq_2_irte *irte_info = &ir_data->irq_2_irte;
        struct iommu_dev_data *dev_data;
 
+       if (WARN_ON_ONCE(!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir)))
+               return -EINVAL;
+
        if (ir_data->iommu == NULL)
                return -EINVAL;
 
@@ -3884,16 +3887,6 @@ static int amd_ir_set_vcpu_affinity(struct irq_data *data, void *vcpu_info)
        ir_data->cfg = irqd_cfg(data);
        pi_data->ir_data = ir_data;
 
-       /* Note:
-        * SVM tries to set up for VAPIC mode, but we are in
-        * legacy mode. So, we force legacy mode instead.
-        */
-       if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir)) {
-               pr_debug("%s: Fall back to using intr legacy remap\n",
-                        __func__);
-               pi_data->is_guest_mode = false;
-       }
-
        pi_data->prev_ga_tag = ir_data->cached_ga_tag;
        if (pi_data->is_guest_mode) {
                ir_data->ga_root_ptr = (pi_data->base >> 12);