linux/drivers/iommu/intel
Sean Christopherson cb6b9bd661 iommu/vt-d: Wire up irq_ack() to irq_move_irq() for posted MSIs
commit 548183ea38 upstream.

Set the posted MSI irq_chip's irq_ack() hook to irq_move_irq() instead of
a dummy/empty callback so that posted MSIs process pending changes to the
IRQ's SMP affinity.  Failure to honor a pending set-affinity results in
userspace being unable to change the effective affinity of the IRQ, as
IRQD_SETAFFINITY_PENDING is never cleared and so irq_set_affinity_locked()
always defers moving the IRQ.

The issue is most easily reproducible by setting /proc/irq/xx/smp_affinity
multiple times in quick succession, as only the first update is likely to
be handled in process context.

Fixes: ed1e48ea43 ("iommu/vt-d: Enable posted mode for device MSIs")
Cc: Robert Lippert <rlippert@google.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Reported-by: Wentao Yang <wentaoyang@google.com>
Cc: stable@vger.kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20250321194249.1217961-1-seanjc@google.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-04-20 10:15:48 +02:00
..
cache.c iommu/vt-d: Fix qi_batch NULL pointer with nested parent domain 2024-12-19 18:13:06 +01:00
cap_audit.c iommu/vt-d: Remove virtual command interface 2023-03-31 10:03:21 +02:00
cap_audit.h iommu/vt-d: Check FL and SL capability sanity in scalable mode 2021-10-18 12:31:48 +02:00
debugfs.c iommu/vt-d: Remove debugfs use of private data field 2024-04-26 11:57:38 +02:00
dmar.c iommu/vt-d: Fix suspicious RCU usage 2025-03-07 18:25:42 +01:00
iommu.c iommu/vt-d: Fix possible circular locking dependency 2025-04-20 10:15:48 +02:00
iommu.h Performance events changes for v6.12: 2024-09-18 15:03:58 +02:00
irq_remapping.c iommu/vt-d: Wire up irq_ack() to irq_move_irq() for posted MSIs 2025-04-20 10:15:48 +02:00
Kconfig dma-mapping: direct calls for dma-iommu 2024-08-22 06:18:11 +02:00
Makefile iommu/vt-d: Add cache tag assignment interface 2024-04-26 11:57:40 +02:00
nested.c iommu/vt-d: Add qi_batch for dmar_domain 2024-09-02 18:15:02 +02:00
pasid.c Merge branches 'fixes', 'arm/smmu', 'intel/vt-d', 'amd/amd-vi' and 'core' into next 2024-09-13 12:53:05 +02:00
pasid.h iommu/vt-d: Remove control over Execute-Requested requests 2024-07-03 16:39:26 +01:00
perf.c iommu/vt-d: Use kcalloc() instead of kzalloc() 2024-03-01 13:51:18 +01:00
perf.h iommu/vt-d: Remove debugfs use of private data field 2024-04-26 11:57:38 +02:00
perfmon.c iommu/vt-d: Clean up cpumask and hotplug for perfmon 2024-09-10 11:44:13 +02:00
perfmon.h iommu/vt-d: Add IOMMU perfmon support 2023-02-03 11:06:06 +01:00
svm.c iommu/vt-d: Add qi_batch for dmar_domain 2024-09-02 18:15:02 +02:00
trace.c iommu/vt-d: Move trace/events/intel_iommu.h under iommu 2022-07-15 10:21:28 +02:00
trace.h tracing/treewide: Remove second parameter of __assign_str() 2024-05-22 20:14:47 -04:00