[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