Messages in this thread Patch in this message | | | Date | Thu, 12 Oct 2023 14:05:14 +0800 | Subject | Re: [PATCH v5 2/7] iommu: Decouple iommu_present() from bus ops | From | Baolu Lu <> |
| |
On 10/12/23 2:14 AM, Robin Murphy wrote: > Much as I'd like to remove iommu_present(), the final remaining users > are proving stubbornly difficult to clean up, so kick that can down the > road and just rework it to preserve the current behaviour without > depending on bus ops. Since commit 57365a04c921 ("iommu: Move bus setup
The iommu_present() is only used in below two drivers.
$ git grep iommu_present drivers/gpu/drm/mediatek/mtk_drm_drv.c: if (!iommu_present(&platform_bus_type)) drivers/gpu/drm/tegra/drm.c: if (host1x_drm_wants_iommu(dev) && iommu_present(&platform_bus_type)) {
Both are platform drivers and have the device pointer passed in. Just out of curiosity, why not replacing them with device_iommu_mapped() instead? Sorry if I overlooked previous discussion.
Best regards, baolu
> to IOMMU device registration"), any registered IOMMU instance is already > considered "present" for every entry in iommu_buses, so it's simply a > case of validating the bus and checking we have at least once IOMMU. > > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> > Signed-off-by: Robin Murphy <robin.murphy@arm.com> > > --- > > v3: Tweak to use the ops-based check rather than group-based, to > properly match the existing behaviour > v4: Just look for IOMMU instances instead of managed devices > --- > drivers/iommu/iommu.c | 21 ++++++++++++++++++++- > 1 file changed, 20 insertions(+), 1 deletion(-) > > diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c > index 5a3ce293a5de..7bb92e8b7a49 100644 > --- a/drivers/iommu/iommu.c > +++ b/drivers/iommu/iommu.c > @@ -2000,9 +2000,28 @@ int bus_iommu_probe(const struct bus_type *bus) > return 0; > } > > +/** > + * iommu_present() - make platform-specific assumptions about an IOMMU > + * @bus: bus to check > + * > + * Do not use this function. You want device_iommu_mapped() instead. > + * > + * Return: true if some IOMMU is present and aware of devices on the given bus; > + * in general it may not be the only IOMMU, and it may not have anything to do > + * with whatever device you are ultimately interested in. > + */ > bool iommu_present(const struct bus_type *bus) > { > - return bus->iommu_ops != NULL; > + bool ret = false; > + > + for (int i = 0; i < ARRAY_SIZE(iommu_buses); i++) { > + if (iommu_buses[i] == bus) { > + spin_lock(&iommu_device_lock); > + ret = !list_empty(&iommu_device_list); > + spin_unlock(&iommu_device_lock); > + } > + } > + return ret; > } > EXPORT_SYMBOL_GPL(iommu_present); >
| |