RE: [PATCH v2 2/2] iommu: Probe right iommu_ops for device
From: Tian, Kevin
Date: Mon Jan 29 2024 - 03:07:58 EST
> From: Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx>
> Sent: Friday, January 26, 2024 6:54 PM
>
> Previously, in the iommu probe device path, __iommu_probe_device() gets
> the iommu_ops for the device from dev->iommu->fwspec if this field has
> been initialized before probing. Otherwise, it is assumed that only one
> of Intel, AMD, s390, PAMU or legacy SMMUv2 can be present, hence it's
> feasible to lookup the global iommu device list and use the iommu_ops of
> the first iommu device which has no dev->iommu->fwspec.
>
> The assumption mentioned above is no longer correct with the introduction
> of the IOMMUFD mock device on x86 platforms. There might be multiple
> instances of iommu drivers, none of which have the dev->iommu->fwspec
> field populated.
>
> Probe the right iommu_ops for device by iterating over all the global
> drivers and call their probe function to find a match.
>
> Fixes: 17de3f5fdd35 ("iommu: Retire bus ops")
> Cc: Robin Murphy <robin.murphy@xxxxxxx>
> Signed-off-by: Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx>
Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>, with a nit:
> +
> + mutex_lock(&iommu_device_lock);
> + list_for_each_entry(iter, &iommu_device_list, list) {
> + iommu_dev = __iommu_do_probe_device(dev, iter->ops);
> + if (!IS_ERR(iommu_dev))
> + break;
> + }
here could skip iommu with a valid fwspec.