Locking question for DRM
Alan Cox
alan at lxorguk.ukuu.org.uk
Fri Apr 23 04:00:54 PDT 2010
> > I don't think that works. drm_open_helper doesn't appear to be under the
> > BKL merely the struct mutex.
>
> It blocks the case you specified of two releases happening together.
But not parallel open/release
> > But setmaster can sleep so the BKL is dropped on contention of the
> > struct_mutex, ditto dropmaster
>
> they should only sleep in the mutex lock nuless the driver callback is
> allocating memory. but yeah its a bit of a mess.
With the mutex alone the damage is done. Consider two setmasters and some
other action which is making the mutex contend
CPU1 CPU2
file->priv->minor->master == NULL ?
file_priv->minor->master != file_priv->master
mutex_lock (drop BKL)
file->priv->minor->master === NULL
master != file_priv->master
mutex_lock [drop BKL]
takes mutex
minor->master = drm_master_get
is_master = 1
master_set
drop mutex
return 0
takes mutex
minor->master = drm_master_get
is_master = 1
master_set
drops mutex
return 0
Alan
More information about the dri-devel
mailing list