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: Zhenyu Wang <zhenyuw@linux.intel.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/13-v4-9ea22c5e6afb+1adf-vfio_reflck_jgg@nvidia.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
parent
9b0d6b7e28
commit
dd574d9b72
@ -885,7 +885,7 @@ static int intel_vgpu_group_notifier(struct notifier_block *nb,
|
||||
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 kvmgt_vdev *vdev = kvmgt_vdev(vgpu);
|
||||
@ -1004,7 +1004,7 @@ static void __intel_vgpu_release(struct intel_vgpu *vgpu)
|
||||
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);
|
||||
|
||||
@ -1753,8 +1753,8 @@ static struct mdev_parent_ops intel_vgpu_ops = {
|
||||
.create = intel_vgpu_create,
|
||||
.remove = intel_vgpu_remove,
|
||||
|
||||
.open = intel_vgpu_open,
|
||||
.release = intel_vgpu_release,
|
||||
.open_device = intel_vgpu_open_device,
|
||||
.close_device = intel_vgpu_close_device,
|
||||
|
||||
.read = intel_vgpu_read,
|
||||
.write = intel_vgpu_write,
|
||||
|
Loading…
Reference in New Issue
Block a user