Skip to content

Commit e10c7ac

Browse files
committed
iommu: Only allocate FQ domains for IOMMUs that support them
Commit a4fdd97 ("iommu: Use flush queue capability") hid the IOMMU_DOMAIN_DMA_FQ domain type from domain allocation. A check was introduced in iommu_dma_init_domain() to fall back if not supported, but this check runs too late: by that point, devices have been attached to the IOMMU, and the IOMMU driver might not expect FQ domains at ops->attach_dev() time. Ensure that we immediately clamp FQ domains to plain DMA if not supported by the driver at device attach time, not later. This regressed apple-dart in v6.5. Cc: [email protected] Cc: [email protected] Fixes: a4fdd97 ("iommu: Use flush queue capability") Signed-off-by: Hector Martin <[email protected]>
1 parent 4ea671e commit e10c7ac

1 file changed

Lines changed: 9 additions & 0 deletions

File tree

drivers/iommu/iommu.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,6 +2040,15 @@ static int __iommu_attach_device(struct iommu_domain *domain,
20402040
if (unlikely(domain->ops->attach_dev == NULL))
20412041
return -ENODEV;
20422042

2043+
/*
2044+
* Ensure we do not try to attach devices to FQ domains if the
2045+
* IOMMU does not support them. We can safely fall back to
2046+
* non-FQ.
2047+
*/
2048+
if (domain->type == IOMMU_DOMAIN_DMA_FQ &&
2049+
!device_iommu_capable(dev, IOMMU_CAP_DEFERRED_FLUSH))
2050+
domain->type = IOMMU_DOMAIN_DMA;
2051+
20432052
ret = domain->ops->attach_dev(domain, dev);
20442053
if (ret)
20452054
return ret;

0 commit comments

Comments
 (0)