mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-08 15:04:45 +00:00
s390/vfio-ap: wire in the vfio_device_ops request callback
The mdev device is being removed, 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: Tony Krowiak <akrowiak@linux.ibm.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com> Tested-by: Matthew Rosato <mjrosato@linux.ibm.com> Acked-by: Alex Williamson <alex.williamson@redhat.com> Link: https://lore.kernel.org/r/20230530223538.279198-4-akrowiak@linux.ibm.com Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
This commit is contained in:
parent
bf48961f6f
commit
2e3d8d71e2
@ -1736,6 +1736,26 @@ static void vfio_ap_mdev_close_device(struct vfio_device *vdev)
|
||||
vfio_ap_mdev_unset_kvm(matrix_mdev);
|
||||
}
|
||||
|
||||
static void vfio_ap_mdev_request(struct vfio_device *vdev, unsigned int count)
|
||||
{
|
||||
struct device *dev = vdev->dev;
|
||||
struct ap_matrix_mdev *matrix_mdev;
|
||||
|
||||
matrix_mdev = container_of(vdev, struct ap_matrix_mdev, vdev);
|
||||
|
||||
if (matrix_mdev->req_trigger) {
|
||||
if (!(count % 10))
|
||||
dev_notice_ratelimited(dev,
|
||||
"Relaying device request to user (#%u)\n",
|
||||
count);
|
||||
|
||||
eventfd_signal(matrix_mdev->req_trigger, 1);
|
||||
} else if (count == 0) {
|
||||
dev_notice(dev,
|
||||
"No device request registered, blocked until released by user\n");
|
||||
}
|
||||
}
|
||||
|
||||
static int vfio_ap_mdev_get_device_info(unsigned long arg)
|
||||
{
|
||||
unsigned long minsz;
|
||||
@ -1955,6 +1975,7 @@ static const struct vfio_device_ops vfio_ap_matrix_dev_ops = {
|
||||
.bind_iommufd = vfio_iommufd_emulated_bind,
|
||||
.unbind_iommufd = vfio_iommufd_emulated_unbind,
|
||||
.attach_ioas = vfio_iommufd_emulated_attach_ioas,
|
||||
.request = vfio_ap_mdev_request
|
||||
};
|
||||
|
||||
static struct mdev_driver vfio_ap_matrix_driver = {
|
||||
|
Loading…
Reference in New Issue
Block a user