Re: [PATCH 09/14] iommufd: Add iommufd_device_replace()

Baolu Lu
2023-02-26T03:10:38Z

On 2/25/23 8:27 AM, Jason Gunthorpe wrote:
> @@ -437,25 +517,77 @@ int iommufd_device_attach(struct iommufd_device *idev, u32 *pt_id)
> struct iommufd_ioas *ioas =
> container_of(pt_obj, struct iommufd_ioas, obj);
>
> - rc = iommufd_device_auto_get_domain(idev, ioas, pt_id);
> - if (rc)
> + destroy_hwpt = iommufd_device_auto_get_domain(idev, ioas, pt_id,
> + do_attach);
> + if (IS_ERR(destroy_hwpt))
> goto out_put_pt_obj;
> break;
> }
> default:
> - rc = -EINVAL;
> + destroy_hwpt = ERR_PTR(-EINVAL);
> goto out_put_pt_obj;
> }
> + iommufd_put_object(pt_obj);
>
> - refcount_inc(&idev->obj.users);
> - rc = 0;
> + /* This destruction has to be after we unlock everything */
> + if (destroy_hwpt)

Should this be

if (!IS_ERR_OR_NULL(destroy_hwpt))

?

> + iommufd_hw_pagetable_put(idev->ictx, destroy_hwpt);
> + return 0;
>
> out_put_pt_obj:
> iommufd_put_object(pt_obj);
> - return rc;
> + return PTR_ERR(destroy_hwpt);
> +}

Best regards,
baolu