[Intel-gfx] [PATCH 1/7] drm/i915: Record GT workarounds in a list
Chris Wilson
chris at chris-wilson.co.uk
Mon Dec 3 12:38:50 UTC 2018
Quoting Tvrtko Ursulin (2018-12-03 12:34:24)
>
> On 03/12/2018 11:54, Chris Wilson wrote:
> > Quoting Tvrtko Ursulin (2018-12-03 11:46:11)
> >> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> >> @@ -575,160 +587,240 @@ int intel_ctx_workarounds_emit(struct i915_request *rq)
> >> return 0;
> >> }
> >>
> >> -static void bdw_gt_workarounds_apply(struct drm_i915_private *dev_priv)
> >> +static void
> >> +wal_add(struct i915_wa_list *wal, const struct i915_wa *wa)
> >> +{
> >> + const unsigned int grow = 1 << 4;
> >> +
> >> + GEM_BUG_ON(!is_power_of_2(grow));
> >> +
> >> + if (IS_ALIGNED(wal->count, grow)) { /* Either uninitialized or full. */
> >
> > Neat.
> >
> >> + struct i915_wa *list;
> >> +
> >> + list = kcalloc(ALIGN(wal->count + 1, grow), sizeof(*wa),
> >> + GFP_KERNEL);
> >
> > (Quietly comments on the calloc here ;)
>
> Oh I don't want to complicate things with zeroing the tail. Or you
> wouldn't bother with zeroing at all since I always copy over used
> entries? So unused, who cares about them?
Exactly, nothing after wal->count is accessed, so no need to zero it as
it will always be initialised by wal_add().
> >> +struct i915_wa_list {
> >> + const char *name;
> >> + unsigned int count;
> >> + struct i915_wa *list;
> >
> > Oh well, didn't save anything after all.
>
> How nothing, one unsigned int per wa_list instance! :)
struct is padded to 8 bytes for the pointer. There's a hole after count,
even if we place it at the end. :|
-Chris
More information about the Intel-gfx
mailing list