Message ID | 20190405130235.7707-2-janusz.krzysztofik@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Stop users from using the device on driver unbind | expand |
On Fri, Apr 05, 2019 at 03:02:34PM +0200, Janusz Krzysztofik wrote: > From: Janusz Krzysztofik <janusz.krzysztofik@intel.com> > > The driver does not currently support unbinding from a device which is > in use. Since open file descriptors may still be pointing into kernel > memory where the device structures used to be, entirely correct kernel > panics protect the driver from being unbound as we should not be > unbinding it before those dangling pointers have been made safe. > > According to the documentation found inside drivers/gpu/drm/drm_drv.c, > drm_dev_unplug() should be used instead of drm_dev_unregister() in > order to make a device inaccessible to users as soon as it is unpluged. > Follow that advice to make those possibly dangling pointers safe, > protected by DRM layer from a user who is otherwise left pointing into > possibly reused kernel memory after the driver has been unbound from > the device. Once done, also cancel inflight operations immediately by > calling i915_gem_set_wedged(). > > Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@intel.com> > Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > --- > drivers/gpu/drm/i915/i915_drv.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index 9df65d386d11..66163378c481 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -1596,7 +1596,7 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv) > i915_pmu_unregister(dev_priv); > > i915_teardown_sysfs(dev_priv); > - drm_dev_unregister(&dev_priv->drm); > + drm_dev_unplug(&dev_priv->drm); > > i915_gem_shrinker_unregister(dev_priv); > } > -- > 2.20.1 >
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 9df65d386d11..66163378c481 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c @@ -1596,7 +1596,7 @@ static void i915_driver_unregister(struct drm_i915_private *dev_priv) i915_pmu_unregister(dev_priv); i915_teardown_sysfs(dev_priv); - drm_dev_unregister(&dev_priv->drm); + drm_dev_unplug(&dev_priv->drm); i915_gem_shrinker_unregister(dev_priv); }