[Intel-gfx] [PATCH 2/4] drm/i915: Add per ctx batchbuffer wa for timestamp
Chris Wilson
chris at chris-wilson.co.uk
Fri Apr 24 16:08:52 UTC 2020
Quoting Mika Kuoppala (2020-04-24 17:01:48)
> Restoration of a previous timestamp can collide
> with updating the timestamp, causing a value corruption.
>
> Combat this issue by using indirect ctx bb to
> modify the context image during restoring process.
>
> We can preload value into scratch register. From which
> we then do the actual write with LRR. LRR is faster and
> thus less error prone as probability of race drops.
>
> v2: tidying (Chris)
> v3: lrr for all engines
> v4: grp
>
> References: HSDES#16010904313
> Testcase: igt/i915_selftest/gt_lrc
> Suggested-by: Joseph Koston <joseph.koston at intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Signed-off-by: Mika Kuoppala <mika.kuoppala at linux.intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_context_types.h | 3 +
> drivers/gpu/drm/i915/gt/intel_gpu_commands.h | 3 +-
> drivers/gpu/drm/i915/gt/intel_lrc.c | 158 +++++++++++++++---
> 3 files changed, 144 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_context_types.h b/drivers/gpu/drm/i915/gt/intel_context_types.h
> index 07cb83a0d017..c7573d565f58 100644
> --- a/drivers/gpu/drm/i915/gt/intel_context_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_context_types.h
> @@ -70,6 +70,9 @@ struct intel_context {
>
> u32 *lrc_reg_state;
> u64 lrc_desc;
> +
> + u32 ctx_bb_offset;
> +
> u32 tag; /* cookie passed to HW to track this context on submission */
>
> /* Time on GPU as tracked by the hw. */
> diff --git a/drivers/gpu/drm/i915/gt/intel_gpu_commands.h b/drivers/gpu/drm/i915/gt/intel_gpu_commands.h
> index f04214a54f75..5a04a83bca71 100644
> --- a/drivers/gpu/drm/i915/gt/intel_gpu_commands.h
> +++ b/drivers/gpu/drm/i915/gt/intel_gpu_commands.h
> @@ -138,7 +138,7 @@
> */
> #define MI_LOAD_REGISTER_IMM(x) MI_INSTR(0x22, 2*(x)-1)
> /* Gen11+. addr = base + (ctx_restore ? offset & GENMASK(12,2) : offset) */
> -#define MI_LRI_CS_MMIO (1<<19)
> +#define MI_LRI_LRM_CS_MMIO BIT(19)
We're using REG_BIT() for the fixed size value.
Acked-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris
More information about the Intel-gfx
mailing list