> From: Robin Murphy <robin.murphy@xxxxxxx> > Sent: Wednesday, July 6, 2022 1:08 AM > > @@ -202,12 +210,32 @@ int iommu_device_register(struct iommu_device > *iommu, > spin_lock(&iommu_device_lock); > list_add_tail(&iommu->list, &iommu_device_list); > spin_unlock(&iommu_device_lock); > + > + for (int i = 0; i < ARRAY_SIZE(iommu_buses); i++) { > + struct bus_type *bus = iommu_buses[i]; > + int err; > + > + if (bus->iommu_ops && bus->iommu_ops != ops) { > + err = -EBUSY; > + } else { > + bus->iommu_ops = ops; > + err = bus_iommu_probe(bus); > + } > + if (err) { > + iommu_device_unregister(iommu); > + return err; > + } > + } > + Probably move above into a new function bus_iommu_probe_all(): /* probe all buses for devices associated with this iommu */ err = bus_iommu_probe_all(); if (err) { iommu_device_unregister(iommu); return err; } Just my personal preference on leaving logic in iommu_device_register() more relevant to the iommu instance itself. Apart from that: Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>