On Mon, Aug 02, 2021 at 06:59:57PM +0800, Desmond Cheong Zhi Xi wrote:
> In drm_is_current_master_locked, accessing drm_file.master should be
> protected by either drm_file.master_lookup_lock or
> drm_device.master_mutex. This was previously awkward to assert with
> lockdep.
> 
> Following patch ("locking/lockdep: Provide lockdep_assert{,_once}()
> helpers"), this assertion is now convenient. So we add in the
> assertion and explain this lock design in the kerneldoc.
> 
> Signed-off-by: Desmond Cheong Zhi Xi <[email protected]>
> Acked-by: Boqun Feng <[email protected]>
> Acked-by: Waiman Long <[email protected]>
> Acked-by: Peter Zijlstra (Intel) <[email protected]>

Both patches pushed to drm-misc-next, thanks.
-Daniel

> ---
>  drivers/gpu/drm/drm_auth.c | 6 +++---
>  include/drm/drm_file.h     | 4 ++++
>  2 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_auth.c b/drivers/gpu/drm/drm_auth.c
> index 9c24b8cc8e36..6f4d7ff23c80 100644
> --- a/drivers/gpu/drm/drm_auth.c
> +++ b/drivers/gpu/drm/drm_auth.c
> @@ -63,9 +63,9 @@
>  
>  static bool drm_is_current_master_locked(struct drm_file *fpriv)
>  {
> -     /* Either drm_device.master_mutex or drm_file.master_lookup_lock
> -      * should be held here.
> -      */
> +     lockdep_assert_once(lockdep_is_held(&fpriv->master_lookup_lock) ||
> +                         lockdep_is_held(&fpriv->minor->dev->master_mutex));
> +
>       return fpriv->is_master && drm_lease_owner(fpriv->master) == 
> fpriv->minor->dev->master;
>  }
>  
> diff --git a/include/drm/drm_file.h b/include/drm/drm_file.h
> index 726cfe0ff5f5..a3acb7ac3550 100644
> --- a/include/drm/drm_file.h
> +++ b/include/drm/drm_file.h
> @@ -233,6 +233,10 @@ struct drm_file {
>        * this only matches &drm_device.master if the master is the currently
>        * active one.
>        *
> +      * To update @master, both &drm_device.master_mutex and
> +      * @master_lookup_lock need to be held, therefore holding either of
> +      * them is safe and enough for the read side.
> +      *
>        * When dereferencing this pointer, either hold struct
>        * &drm_device.master_mutex for the duration of the pointer's use, or
>        * use drm_file_get_master() if struct &drm_device.master_mutex is not
> -- 
> 2.25.1
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch

Reply via email to