[PATCH] tests/intel/xe_exec_store: Modify test for Priority Mem Read feature

Mishra, Pallavi pallavi.mishra at intel.com
Mon Jul 29 15:40:05 UTC 2024



-----Original Message-----
From: Roper, Matthew D <matthew.d.roper at intel.com> 
Sent: Friday, July 26, 2024 2:29 PM
To: Mishra, Pallavi <pallavi.mishra at intel.com>
Cc: igt-dev at lists.freedesktop.org
Subject: Re: [PATCH] tests/intel/xe_exec_store: Modify test for Priority Mem Read feature

On Thu, Jul 25, 2024 at 01:10:06AM +0530, Pallavi Mishra wrote:
> Now that KMD supports Priority Mem Read feature, care needs to be 
> taken to avoid RAW hazards which may get introduced due to unordered 
> read and writes. Inorder to prevent this insert MI_MEM_FENCE which 
> will ensure data coherency in such scenarios.
> 
> KMD patch to enable Priority Mem Read:
> https://patchwork.freedesktop.org/series/134038/
> 
> Signed-off-by: Pallavi Mishra <pallavi.mishra at intel.com>
> ---
>  include/intel_gpu_commands.h | 2 ++
>  tests/intel/xe_exec_store.c  | 1 +
>  2 files changed, 3 insertions(+)
> 
> diff --git a/include/intel_gpu_commands.h 
> b/include/intel_gpu_commands.h index fe734c4bb..cd281ba89 100644
> --- a/include/intel_gpu_commands.h
> +++ b/include/intel_gpu_commands.h
> @@ -89,6 +89,7 @@
>  #define   MI_DISPLAY_FLIP_SKL_PLANE_3_A	(7 << 8)
>  #define   MI_DISPLAY_FLIP_SKL_PLANE_3_B	(8 << 8)
>  #define   MI_DISPLAY_FLIP_SKL_PLANE_3_C	(9 << 8)
> +#define   MI_MEM_FENCE		MI_INSTR(0x09, 0)
>  #define MI_SEMAPHORE_MBOX	MI_INSTR(0x16, 1) /* gen6, gen7 */
>  #define   MI_SEMAPHORE_GLOBAL_GTT    (1<<22)
>  #define   MI_SEMAPHORE_UPDATE	    (1<<21)
> @@ -192,6 +193,7 @@
>  #define MI_OPCODE(x)		(((x) >> 23) & 0x3f)
>  #define IS_MI_LRI_CMD(x)	(MI_OPCODE(x) == MI_OPCODE(MI_INSTR(0x22, 0)))
>  #define MI_LRI_LEN(x)		(((x) & 0xff) + 1)
> +#define MI_WRITE_FENCE			(3 << 0)
>  
>  /*
>   * 3D instructions used by the kernel diff --git 
> a/tests/intel/xe_exec_store.c b/tests/intel/xe_exec_store.c index 
> c872c22d5..fb99e53b7 100644
> --- a/tests/intel/xe_exec_store.c
> +++ b/tests/intel/xe_exec_store.c
> @@ -63,6 +63,7 @@ static void cond_batch(struct data *data, uint64_t addr, int value)
>  	data->batch[b++] = MI_ATOMIC | MI_ATOMIC_INC;
>  	data->batch[b++] = sdi_addr;
>  	data->batch[b++] = sdi_addr >> 32;
> +	data->batch[b++] = MI_MEM_FENCE | MI_WRITE_FENCE;

Does this need to be conditional?  I don't think the MI_MEM_FENCE instruction existed before PVC, so I'm not sure what will happen if the test executes this opcode on an older platform.

Will add a platform check here.

Thanks,
Pallavi


Matt

>  	data->batch[b++] = MI_CONDITIONAL_BATCH_BUFFER_END | MI_DO_COMPARE | 5 << 12 | 2;
>  	data->batch[b++] = value;
>  	data->batch[b++] = sdi_addr;
> --
> 2.25.1
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the igt-dev mailing list