On Tue, 17 Nov 2020 04:21:39 +0100 Eric Farman <farman@xxxxxxxxxxxxx> wrote: > The device is being unplugged, so pass the request to userspace to > ask for a graceful cleanup. This should free up the thread that > would otherwise loop waiting for the device to be fully released. > > Signed-off-by: Eric Farman <farman@xxxxxxxxxxxxx> > --- > drivers/s390/cio/vfio_ccw_ops.c | 26 ++++++++++++++++++++++++++ > drivers/s390/cio/vfio_ccw_private.h | 4 ++++ > include/uapi/linux/vfio.h | 1 + > 3 files changed, 31 insertions(+) > (...) > @@ -607,6 +611,27 @@ static ssize_t vfio_ccw_mdev_ioctl(struct mdev_device *mdev, > } > } > > +/* Request removal of the device*/ > +static void vfio_ccw_mdev_request(struct mdev_device *mdev, unsigned int count) > +{ > + struct vfio_ccw_private *private = dev_get_drvdata(mdev_parent_dev(mdev)); > + > + if (!private) > + return; > + > + if (private->req_trigger) { > + if (!(count % 10)) > + dev_notice_ratelimited(mdev_dev(private->mdev), > + "Relaying device request to user (#%u)\n", > + count); > + > + eventfd_signal(private->req_trigger, 1); > + } else if (count == 0) { > + dev_notice(mdev_dev(private->mdev), > + "No device request channel registered, blocked until released by user\n"); > + } > +} This looks like the vfio-pci request handler, so probably good :) Still have to read up on the QEMU side, but a LGTM for now.