On Sun, Jan 30 2022, Yishai Hadas <yishaih@xxxxxxxxxx> wrote: > @@ -1582,6 +1760,10 @@ static int vfio_ioctl_device_feature(struct vfio_device *device, > return -EINVAL; > > switch (feature.flags & VFIO_DEVICE_FEATURE_MASK) { > + case VFIO_DEVICE_FEATURE_MIGRATION: > + return vfio_ioctl_device_feature_migration( > + device, feature.flags, arg->data, > + feature.argsz - minsz); > default: > if (unlikely(!device->ops->device_feature)) > return -EINVAL; > @@ -1597,6 +1779,8 @@ static long vfio_device_fops_unl_ioctl(struct file *filep, > struct vfio_device *device = filep->private_data; > > switch (cmd) { > + case VFIO_DEVICE_MIG_SET_STATE: > + return vfio_ioctl_mig_set_state(device, (void __user *)arg); > case VFIO_DEVICE_FEATURE: > return vfio_ioctl_device_feature(device, (void __user *)arg); > default: Not really a critique of this patch, but have we considered how mediated devices will implement migration? I.e. what parts of the ops will need to be looped through the mdev ops? Do we need to consider the scope of some queries/operations (whole device vs subdivisions etc.)? Not trying to distract from the whole new interface here, but I think we should have at least an idea.