On Mon, Jun 05, 2023 at 09:59:38PM -0300, Jason Gunthorpe wrote: > Now that the domain allocation path is less duplicated we can tackle the > probe_device path. Details of this are spread across several functions, > broadly move most of the code into __iommu_probe_device() and organize it > more strictly in terms of paired do/undo functions. > > Make the locking simpler by obtaining the group->mutex fewer times and > avoiding adding a half-initialized device to an initialized > group. Previously we would lock/unlock the group three times on these > paths. > > This locking change is the primary point of the series, creating the > paired do/undo functions is a path to being able to organize the setup > code under a single lock and still have a logical, not duplicated, error > unwind. > > The reorganizing is done with the idea that a following series will > consolidate all of the different places calling arm_iommu_create_mapping() > and iommu_setup_dma_ops() into the new consolidated probe path and get rid > of probe_finalize. > > This is on github: https://github.com/jgunthorpe/linux/commits/iommu_probe > > v3: > - Rebase to Joerg's tree with both iommu_group_add/remove patchsets and > the iommu_err_unwind series > - Remove redundant lockdep_assert_held() > - No functional change from v2 > v2: https://lore.kernel.org/r/0-v2-3c3bb7aa6e48+1916b-iommu_probe_jgg@xxxxxxxxxx > - Rebase to v6.4-rc2 > - Move the POWER cleanup to an independent -rc fix due to the iommu driver > being merged > - Update commit messages > - Rename iommu_init_driver() to iommu_init_device() > - Simplify __iommu_group_remove_device() > v1: https://lore.kernel.org/r/0-v1-8aecc628b904+2f42-iommu_probe_jgg@xxxxxxxxxx > > Cc: Nicolin Chen <nicolinc@xxxxxxxxxx> > Cc: Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx> > Cc: Kevin Tian <kevin.tian@xxxxxxxxx> > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > > Jason Gunthorpe (10): > iommu: Have __iommu_probe_device() check for already probed devices > iommu: Use iommu_group_ref_get/put() for dev->iommu_group > iommu: Inline iommu_group_get_for_dev() into __iommu_probe_device() > iommu: Simplify the __iommu_group_remove_device() flow > iommu: Add iommu_init/deinit_device() paired functions > iommu: Move the iommu driver sysfs setup into > iommu_init/deinit_device() > iommu: Do not export iommu_device_link/unlink() > iommu: Always destroy the iommu_group during iommu_release_device() > iommu: Split iommu_group_add_device() > iommu: Avoid locking/unlocking for iommu_probe_device() Joerg? I think we are good on this one now, it has been quite for two weeks Thanks, Jason