[PATCH] drm/xe/uapi: Add DRM_XE_QUERY_CONFIG_FLAG_HAS_DIS_NULL_QUERY

Upadhyay, Tejas tejas.upadhyay at intel.com
Mon Jun 23 06:51:16 UTC 2025



> -----Original Message-----
> From: Gote, Nitin R <nitin.r.gote at intel.com>
> Sent: 23 June 2025 12:11
> To: intel-xe at lists.freedesktop.org
> Cc: joonas.lahtinen at linux.intel.com; Vivi, Rodrigo <rodrigo.vivi at intel.com>;
> Ghimiray, Himal Prasad <himal.prasad.ghimiray at intel.com>; Upadhyay, Tejas
> <tejas.upadhyay at intel.com>; Gote, Nitin R <nitin.r.gote at intel.com>
> Subject: [PATCH] drm/xe/uapi: Add
> DRM_XE_QUERY_CONFIG_FLAG_HAS_DIS_NULL_QUERY
> 
> Add the DRM_XE_QUERY_CONFIG_FLAG_HAS_DIS_NULL_QUERY device
> query flag which indicates whether a device supports DIS_NULL_QUERY
> (Disable null anyhit shader query mechanism). The intent is for UMDs to use
> this query and opt-in DRM_XE_EXEC_QUEUE_DIS_NULL_QUERY flag to disable
> null query mechanism for anyhit shader by setting DIS_NULL_QUERY bit of
> RT_CTRL register for Xe2 IP.
> 
> Signed-off-by: Nitin Gote <nitin.r.gote at intel.com>
> ---
>  drivers/gpu/drm/xe/xe_exec_queue.c | 9 +++++++++
>  drivers/gpu/drm/xe/xe_query.c      | 3 ++-
>  include/uapi/drm/xe_drm.h          | 8 ++++++++
>  3 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/xe/xe_exec_queue.c
> b/drivers/gpu/drm/xe/xe_exec_queue.c
> index fee22358cc09..519f36db7cd0 100644
> --- a/drivers/gpu/drm/xe/xe_exec_queue.c
> +++ b/drivers/gpu/drm/xe/xe_exec_queue.c
> @@ -26,6 +26,8 @@
>  #include "xe_trace.h"
>  #include "xe_vm.h"
>  #include "xe_pxp.h"
> +#include "xe_gt_mcr.h"
> +#include "regs/xe_gt_regs.h"
> 
>  enum xe_exec_queue_sched_prop {
>  	XE_EXEC_QUEUE_JOB_TIMEOUT = 0,
> @@ -693,6 +695,13 @@ int xe_exec_queue_create_ioctl(struct drm_device
> *dev, void *data,
>  		}
>  	}
> 
> +	if (((GRAPHICS_VER(xe) >= 20) && (GRAPHICS_VER(xe) < 30)) &&
> +	    (args->flags & DRM_XE_EXEC_QUEUE_DIS_NULL_QUERY) &&

Some other bits can sneak in, I think you need to something like args->flags & ~(DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT | DRM_XE_EXEC_QUEUE_DIS_NULL_QUERY). Also this should be checked first up as other flags are validated.

> +	    (eci[0].engine_class == DRM_XE_ENGINE_CLASS_RENDER ||
> +	    eci[0].engine_class == DRM_XE_ENGINE_CLASS_COMPUTE)) {

I think there is API to check render_or_compute()

> +		xe_gt_mcr_multicast_write(q->gt, RT_CTRL,
> DIS_NULL_QUERY);

If this setting is effective post xe_exec call, that is post queue execution then its fine. Otherwise need to find alternative placement. To me it looks like placement is ok.

Tejas
> +	}
> +
>  	q->xef = xe_file_get(xef);
> 
>  	/* user id alloc must always be last in ioctl to prevent UAF */ diff --git
> a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c index
> e8e1743dcb1e..c5002b8c9ac0 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -344,7 +344,8 @@ static int query_config(struct xe_device *xe, struct
> drm_xe_device_query *query)
>  		config->info[DRM_XE_QUERY_CONFIG_FLAGS] |=
> 
> 	DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR;
>  	config->info[DRM_XE_QUERY_CONFIG_FLAGS] |=
> -			DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY;
> +
> 	(DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY |
> +
> 	DRM_XE_QUERY_CONFIG_FLAG_HAS_DIS_NULL_QUERY);
>  	config->info[DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT] =
>  		xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K ? SZ_64K :
> SZ_4K;
>  	config->info[DRM_XE_QUERY_CONFIG_VA_BITS] = xe->info.va_bits;
> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h index
> 8e8bbdec8c5c..a5bfba121360 100644
> --- a/include/uapi/drm/xe_drm.h
> +++ b/include/uapi/drm/xe_drm.h
> @@ -397,6 +397,8 @@ struct drm_xe_query_mem_regions {
>   *      has low latency hint support
>   *    - %DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR - Flag is
> set if the
>   *      device has CPU address mirroring support
> + *    - %DRM_XE_QUERY_CONFIG_FLAG_HAS_DIS_NULL_QUERY - Flag is set if
> the
> + *      device has null query support for anyhit shader.
>   *  - %DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT - Minimal memory
> alignment
>   *    required by this device, typically SZ_4K or SZ_64K
>   *  - %DRM_XE_QUERY_CONFIG_VA_BITS - Maximum bits of a virtual address
> @@ -415,6 +417,7 @@ struct drm_xe_query_config {
>  	#define DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAM	(1 << 0)
>  	#define DRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCY	(1 <<
> 1)
>  	#define DRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRROR
> 	(1 << 2)
> +	#define DRM_XE_QUERY_CONFIG_FLAG_HAS_DIS_NULL_QUERY
> 	(1 << 3)
>  #define DRM_XE_QUERY_CONFIG_MIN_ALIGNMENT		2
>  #define DRM_XE_QUERY_CONFIG_VA_BITS			3
>  #define DRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY	4
> @@ -1271,6 +1274,11 @@ struct drm_xe_exec_queue_create {
>  	__u32 vm_id;
> 
>  #define DRM_XE_EXEC_QUEUE_LOW_LATENCY_HINT	(1 << 0)
> +	/*
> +	 * DRM_XE_EXEC_QUEUE_DIS_NULL_QUERY flag is
> +	 * use to disable null query check for Anyhit shader
> +	 */
> +#define DRM_XE_EXEC_QUEUE_DIS_NULL_QUERY	(1 << 1)
>  	/** @flags: flags to use for this exec queue */
>  	__u32 flags;
> 
> --
> 2.25.1



More information about the Intel-xe mailing list