Message ID | 20220314182005.17071-4-ramalingam.c@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | lrc selftest fixes | expand |
On 3/14/22 19:20, Ramalingam C wrote: > From: Chris Wilson <chris@chris-wilson.co.uk> > > When testing whether we can get the GPU to leak information about > non-privileged state, we first need to ensure that the output buffer is > set to a known value as the HW may opt to skip the write into memory for > a non-privileged read of a sensitive register. We chose POISON_INUSE (0x5a) > so that is both non-zero and distinct from the poison values used during > the test. > > Reported-by: CQ Tang <cq.tang@intel.com> > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: CQ Tang <cq.tang@intel.com> > cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> > Signed-off-by: Ramalingam C <ramalingam.c@intel.com> Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> > --- > drivers/gpu/drm/i915/gt/selftest_lrc.c | 32 ++++++++++++++++++++++---- > 1 file changed, 28 insertions(+), 4 deletions(-) > > diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c > index 0a8ed4246082..b9cc89de01bf 100644 > --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c > +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c > @@ -1346,6 +1346,30 @@ static int compare_isolation(struct intel_engine_cs *engine, > return err; > } > > +static struct i915_vma * > +create_result_vma(struct i915_address_space *vm, unsigned long sz) > +{ > + struct i915_vma *vma; > + void *ptr; > + > + vma = create_user_vma(vm, sz); > + if (IS_ERR(vma)) > + return vma; > + > + /* Set the results to a known value distinct from the poison */ > + ptr = i915_gem_object_pin_map(vma->obj, I915_MAP_WC); > + if (IS_ERR(ptr)) { > + i915_vma_put(vma); > + return ERR_CAST(ptr); > + } > + > + memset(ptr, POISON_INUSE, vma->size); > + i915_gem_object_flush_map(vma->obj); > + i915_gem_object_unpin_map(vma->obj); > + > + return vma; > +} > + > static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) > { > u32 *sema = memset32(engine->status_page.addr + 1000, 0, 1); > @@ -1364,13 +1388,13 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) > goto err_A; > } > > - ref[0] = create_user_vma(A->vm, SZ_64K); > + ref[0] = create_result_vma(A->vm, SZ_64K); > if (IS_ERR(ref[0])) { > err = PTR_ERR(ref[0]); > goto err_B; > } > > - ref[1] = create_user_vma(A->vm, SZ_64K); > + ref[1] = create_result_vma(A->vm, SZ_64K); > if (IS_ERR(ref[1])) { > err = PTR_ERR(ref[1]); > goto err_ref0; > @@ -1392,13 +1416,13 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) > } > i915_request_put(rq); > > - result[0] = create_user_vma(A->vm, SZ_64K); > + result[0] = create_result_vma(A->vm, SZ_64K); > if (IS_ERR(result[0])) { > err = PTR_ERR(result[0]); > goto err_ref1; > } > > - result[1] = create_user_vma(A->vm, SZ_64K); > + result[1] = create_result_vma(A->vm, SZ_64K); > if (IS_ERR(result[1])) { > err = PTR_ERR(result[1]); > goto err_result0;
diff --git a/drivers/gpu/drm/i915/gt/selftest_lrc.c b/drivers/gpu/drm/i915/gt/selftest_lrc.c index 0a8ed4246082..b9cc89de01bf 100644 --- a/drivers/gpu/drm/i915/gt/selftest_lrc.c +++ b/drivers/gpu/drm/i915/gt/selftest_lrc.c @@ -1346,6 +1346,30 @@ static int compare_isolation(struct intel_engine_cs *engine, return err; } +static struct i915_vma * +create_result_vma(struct i915_address_space *vm, unsigned long sz) +{ + struct i915_vma *vma; + void *ptr; + + vma = create_user_vma(vm, sz); + if (IS_ERR(vma)) + return vma; + + /* Set the results to a known value distinct from the poison */ + ptr = i915_gem_object_pin_map(vma->obj, I915_MAP_WC); + if (IS_ERR(ptr)) { + i915_vma_put(vma); + return ERR_CAST(ptr); + } + + memset(ptr, POISON_INUSE, vma->size); + i915_gem_object_flush_map(vma->obj); + i915_gem_object_unpin_map(vma->obj); + + return vma; +} + static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) { u32 *sema = memset32(engine->status_page.addr + 1000, 0, 1); @@ -1364,13 +1388,13 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) goto err_A; } - ref[0] = create_user_vma(A->vm, SZ_64K); + ref[0] = create_result_vma(A->vm, SZ_64K); if (IS_ERR(ref[0])) { err = PTR_ERR(ref[0]); goto err_B; } - ref[1] = create_user_vma(A->vm, SZ_64K); + ref[1] = create_result_vma(A->vm, SZ_64K); if (IS_ERR(ref[1])) { err = PTR_ERR(ref[1]); goto err_ref0; @@ -1392,13 +1416,13 @@ static int __lrc_isolation(struct intel_engine_cs *engine, u32 poison) } i915_request_put(rq); - result[0] = create_user_vma(A->vm, SZ_64K); + result[0] = create_result_vma(A->vm, SZ_64K); if (IS_ERR(result[0])) { err = PTR_ERR(result[0]); goto err_ref1; } - result[1] = create_user_vma(A->vm, SZ_64K); + result[1] = create_result_vma(A->vm, SZ_64K); if (IS_ERR(result[1])) { err = PTR_ERR(result[1]); goto err_result0;