On Tue, Nov 01, 2022 at 08:21:20AM +0000, Tian, Kevin wrote: > > From: Jason Gunthorpe <jgg@xxxxxxxxxx> > > Sent: Wednesday, October 26, 2022 2:51 AM > > > > +int vfio_iommufd_bind(struct vfio_device *vdev, struct iommufd_ctx *ictx) > > +{ > > + u32 ioas_id; > > + u32 device_id; > > + int ret; > > + > > + lockdep_assert_held(&vdev->dev_set->lock); > > + > > + /* > > + * If the driver doesn't provide this op then it means the device does > > + * not do DMA at all. So nothing to do. > > + */ > > + if (!vdev->ops->bind_iommufd) > > + return 0; > > Nothing to do or return -EOPNOTSUPP? As in the other email, nothing to do, driver is "bound" but doesn't actually need iommufd at all. > > + ret = vdev->ops->bind_iommufd(vdev, ictx, &device_id); > > + if (ret) > > + return ret; > > + > > + if (vdev->ops->attach_ioas) { > > __vfio_register_dev() already verifies that all three callbacks must > co-exist. Then no need to check it again here and later. Ok > > +void vfio_iommufd_unbind(struct vfio_device *vdev) > > +{ > > + lockdep_assert_held(&vdev->dev_set->lock); > > + > > + if (!vdev->iommufd_device) > > + return; > > there is no iommufd_device in the emulated path... Yes, this if should just be deleted Thanks, Jason