On Fri, Feb 21, 2014 at 08:34:15AM +0100, David Herrmann wrote: > Hi > > On Fri, Feb 21, 2014 at 8:09 AM, Thierry Reding > <thierry.reding@xxxxxxxxx> wrote: > > On Wed, Jan 29, 2014 at 03:01:53PM +0100, David Herrmann wrote: > > [...] > >> diff --git a/drivers/gpu/drm/drm_stub.c b/drivers/gpu/drm/drm_stub.c > >> index c51333e..d3232b6 100644 > >> --- a/drivers/gpu/drm/drm_stub.c > >> +++ b/drivers/gpu/drm/drm_stub.c > >> @@ -356,6 +356,45 @@ static void drm_unplug_minor(struct drm_minor *minor) > >> } > >> > >> /** > >> + * drm_minor_acquire - Acquire a DRM minor > >> + * @minor_id: Minor ID of the DRM-minor > >> + * > >> + * Looks up the given minor-ID and returns the respective DRM-minor object. The > >> + * refence-count of the underlying device is increased so you must release this > >> + * object with drm_minor_release(). > >> + * > >> + * As long as you hold this minor, it is guaranteed that the object and the > >> + * minor->dev pointer will stay valid! However, the device may get unplugged and > >> + * unregistered while you hold the minor. > >> + * > >> + * Returns: > >> + * Pointer to minor-object with increased device-refcount, or PTR_ERR on > >> + * failure. > >> + */ > >> +struct drm_minor *drm_minor_acquire(unsigned int minor_id) > >> +{ > >> + struct drm_minor *minor; > >> + > >> + minor = idr_find(&drm_minors_idr, minor_id); > >> + if (!minor) > >> + return ERR_PTR(-ENODEV); > >> + > >> + drm_dev_ref(minor->dev); > > > > Is it possible that somebody would drop the last reference on the device > > right between the idr_find() call and drm_dev_ref()? In which case both > > the device and the minor will have become invalid when drm_dev_ref() is > > called. > > No, it's locked via the drm_global_mutex. And later I introduce a > spinlock here that protects this in case we remove the global lock. Indeed. Thanks for clarifying. Thierry
Attachment:
pgpk78M8IOgSN.pgp
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel