Skip to content

Commit 8c5609b

Browse files
marcanjannau
authored andcommitted
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 08c58aa commit 8c5609b

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
@@ -2066,6 +2066,15 @@ static int __iommu_attach_device(struct iommu_domain *domain,
20662066
if (unlikely(domain->ops->attach_dev == NULL))
20672067
return -ENODEV;
20682068

2069+
/*
2070+
* Ensure we do not try to attach devices to FQ domains if the
2071+
* IOMMU does not support them. We can safely fall back to
2072+
* non-FQ.
2073+
*/
2074+
if (domain->type == IOMMU_DOMAIN_DMA_FQ &&
2075+
!device_iommu_capable(dev, IOMMU_CAP_DEFERRED_FLUSH))
2076+
domain->type = IOMMU_DOMAIN_DMA;
2077+
20692078
ret = domain->ops->attach_dev(domain, dev);
20702079
if (ret)
20712080
return ret;

0 commit comments

Comments
 (0)