Commit dd574d9b authored by Jason Gunthorpe's avatar Jason Gunthorpe Committed by Alex Williamson

vfio/gvt: Fix open/close when multiple device FDs are open

The user can open multiple device FDs if it likes, however the open
function calls vfio_register_notifier() on device global state. Calling
vfio_register_notifier() twice will trigger a WARN_ON from
notifier_chain_register() and the first close will wrongly delete the
notifier and more.

Since these really want the new open/close_device() semantics just change
the function over.
Reviewed-by: default avatarZhenyu Wang <zhenyuw@linux.intel.com>
Reviewed-by: default avatarCornelia Huck <cohuck@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/13-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.comSigned-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 9b0d6b7e
...@@ -885,7 +885,7 @@ static int intel_vgpu_group_notifier(struct notifier_block *nb, ...@@ -885,7 +885,7 @@ static int intel_vgpu_group_notifier(struct notifier_block *nb,
return NOTIFY_OK; return NOTIFY_OK;
} }
static int intel_vgpu_open(struct mdev_device *mdev) static int intel_vgpu_open_device(struct mdev_device *mdev)
{ {
struct intel_vgpu *vgpu = mdev_get_drvdata(mdev); struct intel_vgpu *vgpu = mdev_get_drvdata(mdev);
struct kvmgt_vdev *vdev = kvmgt_vdev(vgpu); struct kvmgt_vdev *vdev = kvmgt_vdev(vgpu);
...@@ -1004,7 +1004,7 @@ static void __intel_vgpu_release(struct intel_vgpu *vgpu) ...@@ -1004,7 +1004,7 @@ static void __intel_vgpu_release(struct intel_vgpu *vgpu)
vgpu->handle = 0; vgpu->handle = 0;
} }
static void intel_vgpu_release(struct mdev_device *mdev) static void intel_vgpu_close_device(struct mdev_device *mdev)
{ {
struct intel_vgpu *vgpu = mdev_get_drvdata(mdev); struct intel_vgpu *vgpu = mdev_get_drvdata(mdev);
...@@ -1753,8 +1753,8 @@ static struct mdev_parent_ops intel_vgpu_ops = { ...@@ -1753,8 +1753,8 @@ static struct mdev_parent_ops intel_vgpu_ops = {
.create = intel_vgpu_create, .create = intel_vgpu_create,
.remove = intel_vgpu_remove, .remove = intel_vgpu_remove,
.open = intel_vgpu_open, .open_device = intel_vgpu_open_device,
.release = intel_vgpu_release, .close_device = intel_vgpu_close_device,
.read = intel_vgpu_read, .read = intel_vgpu_read,
.write = intel_vgpu_write, .write = intel_vgpu_write,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment