[Intel-gfx] [PATCH 3/9] drm/i915: Introduce a ww transaction helper

Thomas Hellström thomas.hellstrom at linux.intel.com
Tue Jun 8 19:00:58 UTC 2021


On Tue, 2021-06-08 at 18:17 +0100, Matthew Auld wrote:
> On Tue, 8 Jun 2021 at 10:29, Thomas Hellström
> <thomas.hellstrom at linux.intel.com> wrote:
> > 
> > Introduce a for_i915_gem_ww(){} utility to help make the code
> > around a ww transaction more readable.
> > 
> > Signed-off-by: Thomas Hellström <thomas.hellstrom at linux.intel.com>
> > ---
> >  drivers/gpu/drm/i915/i915_gem_ww.h | 31
> > +++++++++++++++++++++++++++++-
> >  1 file changed, 30 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/drm/i915/i915_gem_ww.h
> > b/drivers/gpu/drm/i915/i915_gem_ww.h
> > index f2d8769e4118..f6b1a796667b 100644
> > --- a/drivers/gpu/drm/i915/i915_gem_ww.h
> > +++ b/drivers/gpu/drm/i915/i915_gem_ww.h
> > @@ -11,11 +11,40 @@ struct i915_gem_ww_ctx {
> >         struct ww_acquire_ctx ctx;
> >         struct list_head obj_list;
> >         struct drm_i915_gem_object *contended;
> > -       bool intr;
> > +       unsigned short intr;
> > +       unsigned short loop;
> 
> Why are these now unsigned short?
> 
That's because I once got a harsh comment making some changes to the
core mutex code where I happened to stuff bools in the struct ww_mutex,
and was told that it was bad style putting bools in compound data types
in the linux kernel.

There's no checkpatch.pl checks for that though...

> Reviewed-by: Matthew Auld <matthew.auld at intel.com>
> 
> >  };
> > 
> >  void i915_gem_ww_ctx_init(struct i915_gem_ww_ctx *ctx, bool intr);
> >  void i915_gem_ww_ctx_fini(struct i915_gem_ww_ctx *ctx);
> >  int __must_check i915_gem_ww_ctx_backoff(struct i915_gem_ww_ctx
> > *ctx);
> >  void i915_gem_ww_unlock_single(struct drm_i915_gem_object *obj);
> > +
> > +/* Internal functions used by the inlines! Don't use. */
> > +static inline int __i915_gem_ww_fini(struct i915_gem_ww_ctx *ww,
> > int err)
> > +{
> > +       ww->loop = 0;
> > +       if (err == -EDEADLK) {
> > +               err = i915_gem_ww_ctx_backoff(ww);
> > +               if (!err)
> > +                       ww->loop = 1;
> > +       }
> > +
> > +       if (!ww->loop)
> > +               i915_gem_ww_ctx_fini(ww);
> > +
> > +       return err;
> > +}
> > +
> > +static inline void
> > +__i915_gem_ww_init(struct i915_gem_ww_ctx *ww, bool intr)
> > +{
> > +       i915_gem_ww_ctx_init(ww, intr);
> > +       ww->loop = 1;
> > +}
> > +
> > +#define for_i915_gem_ww(_ww, _err, _intr)                      \
> > +       for (__i915_gem_ww_init(_ww, _intr); (_ww)->loop;       \
> > +            _err = __i915_gem_ww_fini(_ww, _err))
> > +
> >  #endif
> > --
> > 2.31.1
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/intel-gfx




More information about the Intel-gfx mailing list