[Intel-gfx] [PATCH 06/38] drm/i915/selftests: Check that whitelisted registers are accessible
Chris Wilson
chris at chris-wilson.co.uk
Fri Mar 1 15:25:48 UTC 2019
Quoting Michał Winiarski (2019-03-01 15:18:58)
> On Fri, Mar 01, 2019 at 02:03:32PM +0000, Chris Wilson wrote:
> > +static struct i915_vma *create_scratch(struct i915_gem_context *ctx)
> > +{
> > + struct drm_i915_gem_object *obj;
> > + struct i915_vma *vma;
> > + void *ptr;
> > + int err;
> > +
> > + obj = i915_gem_object_create_internal(ctx->i915, PAGE_SIZE);
> > + if (IS_ERR(obj))
> > + return ERR_CAST(obj);
> > +
> > + i915_gem_object_set_cache_level(obj, I915_CACHE_LLC);
>
> Check return value.
Can't fail, but transform it into set_coherency which is void so you
can't complain :-p
> > + ptr = i915_gem_object_pin_map(obj, I915_MAP_WB);
> > + if (IS_ERR(ptr)) {
> > + err = PTR_ERR(ptr);
> > + goto err_obj;
> > + }
> > + memset(ptr, 0xc5, PAGE_SIZE);
> > + i915_gem_object_unpin_map(obj);
> > +
> > + vma = i915_vma_instance(obj, &ctx->ppgtt->vm, NULL);
> > + if (IS_ERR(vma)) {
> > + err = PTR_ERR(vma);
> > + goto err_obj;
> > + }
> > +
> > + err = i915_vma_pin(vma, 0, 0, PIN_USER);
> > + if (err)
> > + goto err_obj;
> > +
> > + err = i915_gem_object_set_to_cpu_domain(obj, false);
> > + if (err)
> > + goto err_obj;
> > +
> > + return vma;
> > +
> > +err_obj:
> > + i915_gem_object_put(obj);
> > + return ERR_PTR(err);
> > +}
> > +
[more snip]
> > + if (wo_register(engine, reg))
> > + continue;
> > +
> > + srm = MI_STORE_REGISTER_MEM;
> > + lrm = MI_LOAD_REGISTER_MEM;
> > + if (INTEL_GEN(ctx->i915) >= 8)
> > + lrm++, srm++;
> > +
> > + pr_debug("%s: Writing garbage to %x {srm=0x%08x, lrm=0x%08x}\n",
> > + engine->name, reg, srm, lrm);
>
> Why are we printing opcodes (srm/lrm)?
In a debug, can you guess? Because despite making a lrm variable I used
MI_LRM later on and spent a few runs wondering why the GPU kept hanging
with the wrong opcode. Consider it gone.
> > + cs = i915_gem_object_pin_map(scratch->obj, I915_MAP_WB);
> > + if (IS_ERR(cs)) {
> > + err = PTR_ERR(cs);
> > + goto out_batch;
> > + }
>
> We're already using cs for batch! Extra pointer pls.
Will someone think of the poor electrons! Or is more, jobs for all!
> > +
> > + GEM_BUG_ON(values[ARRAY_SIZE(values) - 1] != 0xffffffff);
> > + rsvd = cs[ARRAY_SIZE(values)]; /* detect write masking */
>
> So we're writing 0xffffffff to get the mask. And there's a comment. And it will
> explode if someone changes the last value.
>
> Reviewed-by: Michał Winiarski <michal.winiarski at intel.com>
It'll do for now, there's a bit more I think we can improve on, but
incremental steps.
-Chris
More information about the Intel-gfx
mailing list