On Mon, 15 Aug 2022 17:20:06 +0100
Robin Murphy<robin.murphy@xxxxxxx> wrote:
Move the bus setup to iommu_device_register(). This should allowThis introduces the below lockdep spat regression, bisected to commit:
bus_iommu_probe() to be correctly replayed for multiple IOMMU instances,
and leaves bus_set_iommu() as a glorified no-op to be cleaned up next.
At this point we can also handle cleanup better than just rolling back
the most-recently-touched bus upon failure - which may release devices
owned by other already-registered instances, and still leave devices on
other buses with dangling pointers to the failed instance. Now it's easy
to clean up the exact footprint of a given instance, no more, no less.
Tested-by: Marek Szyprowski<m.szyprowski@xxxxxxxxxxx>
Reviewed-By: Krishna Reddy<vdumpa@xxxxxxxxxx>
Reviewed-by: Kevin Tian<kevin.tian@xxxxxxxxx>
Tested-by: Matthew Rosato<mjrosato@xxxxxxxxxxxxx> # s390
Tested-by: Niklas Schnelle<schnelle@xxxxxxxxxxxxx> # s390
Signed-off-by: Robin Murphy<robin.murphy@xxxxxxx>
---
v4: Factor out the ops check in iommu_device_register() to keep the loop
even simpler, and comment the nominal change in behaviour
drivers/iommu/iommu.c | 55 +++++++++++++++++++++++--------------------
1 file changed, 30 insertions(+), 25 deletions(-)
57365a04c921 ("iommu: Move bus setup to IOMMU device registration")
This can be reproduced with simple vfio-pci device assignment to a VM
on x86_64 with VT-d. Thanks,