linux/drivers/iommu
Lu Baolu dc46e9ca38 iommu/vt-d: PRS isn't usable if PDS isn't supported
commit 5ef7e24c74 upstream.

The specification, Section 7.10, "Software Steps to Drain Page Requests &
Responses," requires software to submit an Invalidation Wait Descriptor
(inv_wait_dsc) with the Page-request Drain (PD=1) flag set, along with
the Invalidation Wait Completion Status Write flag (SW=1). It then waits
for the Invalidation Wait Descriptor's completion.

However, the PD field in the Invalidation Wait Descriptor is optional, as
stated in Section 6.5.2.9, "Invalidation Wait Descriptor":

"Page-request Drain (PD): Remapping hardware implementations reporting
 Page-request draining as not supported (PDS = 0 in ECAP_REG) treat this
 field as reserved."

This implies that if the IOMMU doesn't support the PDS capability, software
can't drain page requests and group responses as expected.

Do not enable PCI/PRI if the IOMMU doesn't support PDS.

Reported-by: Joel Granados <joel.granados@kernel.org>
Closes: https://lore.kernel.org/r/20250909-jag-pds-v1-1-ad8cba0e494e@kernel.org
Fixes: 66ac4db36f ("iommu/vt-d: Add page request draining support")
Cc: stable@vger.kernel.org
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20250915062946.120196-1-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-10-19 16:37:27 +02:00
..
amd iommu/amd/pgtbl: Fix possible race while increase page table level 2025-09-19 09:39:40 +02:00
arm iommu/arm-smmu-v3: Fix smmu_domain->nr_ats_masters decrement 2025-08-22 08:41:20 +02:00
intel iommu/vt-d: PRS isn't usable if PDS isn't supported 2025-10-19 16:37:27 +02:00
iommufd iommufd: Register iommufd mock devices with fwspec 2025-10-15 12:04:13 +02:00
riscv iommu/riscv: prevent NULL deref in iova_to_phys 2025-08-22 08:51:49 +02:00
apple-dart.c iommu: Remove ops.pgsize_bitmap from drivers that don't use it 2025-06-27 08:55:56 +02:00
dma-iommu.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
dma-iommu.h iommu: Drop sw_msi from iommu_domain 2025-03-25 10:18:19 -03:00
exynos-iommu.c Merge branch 'samsung/exynos' into next 2025-07-24 11:17:34 +01:00
fsl_pamu.c iommu/fsl: fix all kernel-doc warnings in fsl_pamu.c 2023-03-22 14:50:15 +01:00
fsl_pamu.h iommu/fsl_pamu: hardcode the window address and size in pamu_config_ppaace 2021-04-07 10:56:52 +02:00
fsl_pamu_domain.c iommu/fsl_pamu: remove trailing space after \n 2025-05-16 08:39:04 +02:00
fsl_pamu_domain.h iommu/fsl_pamu: remove the snoop_id field 2021-04-07 10:56:52 +02:00
hyperv-iommu.c x86/hyperv: Clean up hv_map/unmap_interrupt() return values 2025-07-09 23:49:25 +00:00
io-pgfault.c iommu: Fix potential memory leak in iopf_queue_remove_device() 2025-02-10 14:49:30 +01:00
io-pgtable-arm-v7s.c iommu/io-pgtable-arm-v7s: Remove split on unmap behavior 2024-11-06 15:42:36 +00:00
io-pgtable-arm.c iommu/io-pgtable-arm: Remove unused macro iopte_prot 2025-07-14 12:12:22 +01:00
io-pgtable-arm.h iommu/io-pgtable-arm: Move some definitions to a header 2020-09-28 23:48:06 +01:00
io-pgtable-dart.c iommu: Update various drivers to pass in lg2sz instead of order to iommu pages 2025-04-17 16:22:48 +02:00
io-pgtable.c iommu: Allow passing custom allocators to pgtable drivers 2023-11-27 11:10:12 +01:00
iommu-debugfs.c iommu: Fix IOMMU debugfs fallout 2019-02-26 11:15:58 +01:00
iommu-pages.c iommu: Clear the freelist after iommu_put_pages_list() 2025-05-16 14:29:16 +02:00
iommu-pages.h iommu/vtd: Remove iommu_alloc_pages_node() 2025-04-17 16:22:54 +02:00
iommu-priv.h iommufd: Register iommufd mock devices with fwspec 2025-10-15 12:04:13 +02:00
iommu-sva.c iommu: Do not call domain_alloc() in iommu_sva_domain_alloc() 2025-04-28 13:14:59 +02:00
iommu-sysfs.c iommu/sysfs: constify the class struct 2024-10-29 09:50:24 +01:00
iommu-traces.c iommu: Remove detach_dev callback 2023-01-13 16:39:18 +01:00
iommu.c iommufd: Register iommufd mock devices with fwspec 2025-10-15 12:04:13 +02:00
iova.c - The series "zram: optimal post-processing target selection" from 2024-11-23 09:58:07 -08:00
ipmmu-vmsa.c iommu: Remove iommu_ops pgsize_bitmap from simple drivers 2025-06-27 08:55:57 +02:00
irq_remapping.c IOMMU Updates for Linux v6.10 2024-05-18 10:55:13 -07:00
irq_remapping.h iommu/vt-d: Allocate DMAR fault interrupts locally 2024-04-26 11:57:36 +02:00
Kconfig Merge branch 'apple/dart' into next 2025-07-24 11:18:16 +01:00
Makefile iommu: make inclusion of riscv directory conditional 2025-05-16 08:46:47 +02:00
msm_iommu.c iommu/msm: Remove ops->pgsize_bitmap 2025-06-27 17:34:10 +02:00
msm_iommu.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 267 2019-06-05 17:30:29 +02:00
msm_iommu_hw-8xxx.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 267 2019-06-05 17:30:29 +02:00
mtk_iommu.c iommu/mtk: Remove iommu_ops pgsize_bitmap 2025-06-27 08:56:00 +02:00
mtk_iommu_v1.c Merge branch 'mediatek' into next 2025-07-24 11:18:05 +01:00
of_iommu.c iommu: Get DT/ACPI parsing into the proper probe path 2025-03-11 14:05:43 +01:00
omap-iommu-debug.c iommu/omap: Fix buffer overflow in debugfs 2022-09-07 10:42:28 +02:00
omap-iommu.c Merge branch 'ti/omap' into next 2025-07-24 11:18:11 +01:00
omap-iommu.h iommu/omap: Convert to generic_single_device_group() 2023-09-25 11:52:08 +02:00
omap-iopgtable.h iommu/omap: Fix -Woverflow warnings when compiling on 64-bit architectures 2020-03-04 16:24:46 +01:00
rockchip-iommu.c IOMMU Updates for Linux v6.17: 2025-07-30 10:42:00 -07:00
s390-iommu.c iommu/s390: Make attach succeed when the device was surprise removed 2025-09-05 15:11:09 +02:00
sprd-iommu.c iommu: Remove iommu_ops pgsize_bitmap from simple drivers 2025-06-27 08:55:57 +02:00
sun50i-iommu.c iommu: Remove iommu_ops pgsize_bitmap from simple drivers 2025-06-27 08:55:57 +02:00
tegra-smmu.c iommu: Remove iommu_ops pgsize_bitmap from simple drivers 2025-06-27 08:55:57 +02:00
virtio-iommu.c iommu/virtio: Make instance lookup robust 2025-08-22 08:43:23 +02:00