On Mon, Jul 10, 2023 at 07:59:24PM -0700, Yi Liu wrote: > +static inline long vfio_df_ioctl_bind_iommufd(struct vfio_device_file *df, > + struct vfio_device_bind_iommufd __user *arg) > +{ > + return -EOPNOTSUPP; > +} This should be -ENOTTY > @@ -1149,6 +1151,9 @@ static long vfio_device_fops_unl_ioctl(struct file *filep, > void __user *uptr = (void __user *)arg; > int ret; > > + if (cmd == VFIO_DEVICE_BIND_IOMMUFD) > + return vfio_df_ioctl_bind_iommufd(df, uptr); > + And this function has a mistake too: default: if (unlikely(!device->ops->ioctl)) ret = -EINVAL; Should also be -ENOTTY All the implementations of the ops already return -ENOTTY However, I think this is all slightly not quite right, the proper return code is supposed to be ENOIOCTLCMD which vfs_ioctl() then translates into ENOTTY for some reason.. It looks Ok otherwise Jason