Skip to content

Commit dc44170

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: regressions@lists.linux.dev Cc: stable@vger.kernel.org Fixes: a4fdd97 ("iommu: Use flush queue capability") Signed-off-by: Hector Martin <marcan@marcan.st>
1 parent 230e026 commit dc44170

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
@@ -2080,6 +2080,15 @@ static int __iommu_attach_device(struct iommu_domain *domain,
20802080
if (unlikely(domain->ops->attach_dev == NULL))
20812081
return -ENODEV;
20822082

2083+
/*
2084+
* Ensure we do not try to attach devices to FQ domains if the
2085+
* IOMMU does not support them. We can safely fall back to
2086+
* non-FQ.
2087+
*/
2088+
if (domain->type == IOMMU_DOMAIN_DMA_FQ &&
2089+
!device_iommu_capable(dev, IOMMU_CAP_DEFERRED_FLUSH))
2090+
domain->type = IOMMU_DOMAIN_DMA;
2091+
20832092
ret = domain->ops->attach_dev(domain, dev);
20842093
if (ret)
20852094
return ret;

0 commit comments

Comments
 (0)