iommufd: Use the iommufd_group to avoid duplicate MSI setup
authorJason Gunthorpe <jgg@nvidia.com>
Mon, 17 Jul 2023 18:12:02 +0000 (15:12 -0300)
committerJason Gunthorpe <jgg@nvidia.com>
Wed, 26 Jul 2023 13:19:37 +0000 (10:19 -0300)
This only needs to be done once per group, not once per device. The once
per device was a way to make the device list work. Since we are abandoning
this we can optimize things a bit.

Link: https://lore.kernel.org/r/6-v8-6659224517ea+532-iommufd_alloc_jgg@nvidia.com
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/iommufd/device.c

index 7fd5c18..eb90d6f 100644 (file)
@@ -361,10 +361,6 @@ int iommufd_hw_pagetable_attach(struct iommufd_hw_pagetable *hwpt,
        if (rc)
                goto err_unlock;
 
-       rc = iommufd_device_setup_msi(idev, hwpt, sw_msi_start);
-       if (rc)
-               goto err_unresv;
-
        /*
         * Only attach to the group once for the first device that is in the
         * group. All the other devices will follow this attachment. The user
@@ -373,6 +369,10 @@ int iommufd_hw_pagetable_attach(struct iommufd_hw_pagetable *hwpt,
         * attachment.
         */
        if (list_empty(&idev->igroup->device_list)) {
+               rc = iommufd_device_setup_msi(idev, hwpt, sw_msi_start);
+               if (rc)
+                       goto err_unresv;
+
                rc = iommu_attach_group(hwpt->domain, idev->igroup->group);
                if (rc)
                        goto err_unresv;