Skip to content

Commit d919825

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: 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 682115b commit d919825

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
@@ -1978,6 +1978,15 @@ static int __iommu_attach_device(struct iommu_domain *domain,
19781978
if (unlikely(domain->ops->attach_dev == NULL))
19791979
return -ENODEV;
19801980

1981+
/*
1982+
* Ensure we do not try to attach devices to FQ domains if the
1983+
* IOMMU does not support them. We can safely fall back to
1984+
* non-FQ.
1985+
*/
1986+
if (domain->type == IOMMU_DOMAIN_DMA_FQ &&
1987+
!device_iommu_capable(dev, IOMMU_CAP_DEFERRED_FLUSH))
1988+
domain->type = IOMMU_DOMAIN_DMA;
1989+
19811990
ret = domain->ops->attach_dev(domain, dev);
19821991
if (ret)
19831992
return ret;

0 commit comments

Comments
 (0)