On Wed, 5 Oct 2022 14:17:17 -0600 Alex Williamson <alex.williamson@xxxxxxxxxx> wrote: > On Thu, 29 Sep 2022 14:48:35 -0300 > Jason Gunthorpe <jgg@xxxxxxxxxx> wrote: > > > When converting to directly create the vfio_device the mdev driver has to > > put a vfio_register_emulated_iommu_dev() in the probe() and a pairing > > vfio_unregister_group_dev() in the remove. > > > > This was missed for gvt, add it. > > > > Cc: stable@xxxxxxxxxxxxxxx > > Fixes: 978cf586ac35 ("drm/i915/gvt: convert to use vfio_register_emulated_iommu_dev") > > Reported-by: Alex Williamson <alex.williamson@xxxxxxxxxx> > > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > > --- > > drivers/gpu/drm/i915/gvt/kvmgt.c | 1 + > > 1 file changed, 1 insertion(+) > > > > Should go through Alex's tree. > > > > diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c > > index 41bba40feef8f4..9003145adb5a93 100644 > > --- a/drivers/gpu/drm/i915/gvt/kvmgt.c > > +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c > > @@ -1615,6 +1615,7 @@ static void intel_vgpu_remove(struct mdev_device *mdev) > > if (WARN_ON_ONCE(vgpu->attached)) > > return; Actually, what's the purpose of this ^^^^ ? We can't have a .remove callback that does nothing, this breaks removing the device while it's in use. Once we have the vfio_unregister_group_dev() fix below, we'll block until the device is unused, at which point vgpu->attached becomes false. Unless I'm missing something, I think we should also follow-up with a patch to remove that bogus warn-on branch, right? Thanks, Alex > > > > + vfio_unregister_group_dev(&vgpu->vfio_device); > > vfio_put_device(&vgpu->vfio_device); > > } > > > > > > base-commit: c72e0034e6d4c36322d958b997d11d2627c6056c > > This is marked for stable, but I think the stable backport for > existing kernels is actually: > > diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c > index e3cd58946477..de89946c4817 100644 > --- a/drivers/gpu/drm/i915/gvt/kvmgt.c > +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c > @@ -1595,6 +1595,9 @@ static void intel_vgpu_remove(struct mdev_device *mdev) > > if (WARN_ON_ONCE(vgpu->attached)) > return; > + > + vfio_unregister_group_dev(&vgpu->vfio_device); > + vfio_uninit_group_dev(&vgpu->vfio_device); > intel_gvt_destroy_vgpu(vgpu); > }