> -----Original Message-----
> From: Beckett, Robert
> Sent: Saturday, November 29, 2014 0:59
> To: Cheng, Yao; intel-gfx@lists.freedesktop.org; dri-
> de...@lists.freedesktop.org; daniel.vet...@ffwll.ch; Kelley, Sean V; Chehab,
> John
> Cc: emil.l.veli...@gmail.com; Jiang, Fei; dh.herrm...@gmail.com;
> dan...@fooishbar.org
> Subject: Re: [Intel-gfx] [RFC PATCH v3 1/4] drm/i915: add i915_ved.c to setup
> bridge for VED
> > + * Threats:
> > + * Due to the restriction in Linux platform device model, user need
> > +manually
> > + * uninstall ipvr driver before uninstalling i915 module, otherwise
> > +he might
> > + * run into use-after-free issues after i915 removes the platform device.
> 
> Can you go in to more detail on what you consider to be the restriction in the
> platform device model?
> 
> When removing the device via platform_device_unregister, it will call the
> remove callback of any drivers handling this device (via the bus remove
> function). It is then up to the driver to ensure no further usage of the 
> device
> from which it is being removed. This usually involves removing all user input
> vectors, disabling interrupts involved and flushing/canceling any delayed
> work. This should prevent any further use of the device by the driver.
> 
> The driver's remove function is called in a direct call chain from
> platform_device_unregister, so by the time it returns, there should be no
> further chance of accesses.
>

Bob, thx for your review comments.
The symptom is, after "rmmod i915", though drm_drv_release() is also called on 
the child device "ipvr", I still see the module exist in the system (check it 
by "lsmod"). This causes issue when I modprobe i915 and ipvr again later. 
Actually I don't understand why this restriction exists, but accroding to 
Daniel, grabbing a module refcount for the platform device doesn't work (it 
would pin the module forever).
 
> > +void vlv_teardown_ved(struct drm_device *dev) {
> > +   struct drm_i915_private *dev_priv = dev->dev_private;
> 
> you may want to mask the i915 interrupt for the VED block before removing
> the device.
> 

Thx, will add it.

> > +   vlv_ved_platdev_destroy(dev);
> > +   if (dev_priv->ved.irq >= 0)
> > +           irq_free_desc(dev_priv->ved.irq);
> > +}
> >
> 
> 
> Generally it is a nicely interfaced child device.
> 

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to