STRUCT DRM_XE_QUERY_CONFIG(9)
๐ struct drm_xe_query_config(9) ๐
okay so bestie, grab your iced coffee โ because this is the page where the Xe driver tells you literally everything about the device you're holding. it's from the Kernel API Manual, and it's giving "spec sheet but make it cute." let's go ๐ซถ
โจ NAME โจ
struct drm_xe_query_config โ describe the device configuration ๐ธ
๐ฆ SYNOPSIS ๐ฆ
struct drm_xe_query_config {
__u32 num_params;
__u32 pad;
#define DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_ID 0;
#define DRM_XE_QUERY_CONFIG_FLAGS 1;
#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_NO_COMPRESSION_HINT (1 << 3);
#define DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX
(1 << 4);
#define DRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORT (1 << 5);
#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;
__u64 info[];
};
yes the DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIX line wraps, and yes we are keeping it exactly like that. do not @ me ๐
๐ Members (the actual members, not like members members) ๐
num_paramsโ how many parameters are coming back to you ininfo. it's the headcount, bestie ๐งฎpadโ MBZ. that's "must be zero." don't touch it, don't fill it, just vibe ๐ซinfoโ the array of elements holding the config info. this is the main character right here ๐
๐ Description ๐
so here's the tea โ: if you do a query with a struct drm_xe_device_query where .query equals DRM_XE_DEVICE_QUERY_CONFIG, the reply comes back using struct drm_xe_query_config in .data. that's it, that's the handshake ๐ค
the index in info can be:
DRM_XE_QUERY_CONFIG_REV_AND_DEVICE_IDโ the Device ID is in the lower 16 bits, and the device revision is the next 8 bits ๐ (two facts in one slot, efficient queen)DRM_XE_QUERY_CONFIG_FLAGSโ flags describing the device configuration, peep the list right below ๐DRM_XE_QUERY_CONFIG_FLAG_HAS_VRAMโ this flag is set if the device has usable VRAM ๐ฅDRM_XE_QUERY_CONFIG_FLAG_HAS_LOW_LATENCYโ set if the device has low latency hint support โกDRM_XE_QUERY_CONFIG_FLAG_HAS_CPU_ADDR_MIRRORโ set if the device has CPU address mirroring support ๐ชDRM_XE_QUERY_CONFIG_FLAG_HAS_NO_COMPRESSION_HINTโ set if the device supports the userspace hintDRM_XE_GEM_CREATE_FLAG_NO_COMPRESSION. this one is exposed only on Xe2+, so don't go looking for it on older silicon ๐DRM_XE_QUERY_CONFIG_FLAG_HAS_DISABLE_STATE_CACHE_PERF_FIXโ set if a queue can be created withDRM_XE_EXEC_QUEUE_SET_DISABLE_STATE_CACHE_PERF_FIX๐ฏDRM_XE_QUERY_CONFIG_MIN_ALIGNMENTโ the minimal memory alignment required by this device, typicallySZ_4KorSZ_64K๐DRM_XE_QUERY_CONFIG_VA_BITSโ maximum bits of a virtual address ๐งDRM_XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITYโ the value of the highest available exec queue priority ๐
ngl, there's alsoDRM_XE_QUERY_CONFIG_FLAG_HAS_PURGING_SUPPORTsitting in the synopsis up there with(1 << 5)energy. it's in the defines, bestie, we don't leave defines behind ๐
๐ SEE ALSO ๐
Kernel file ./include/uapi/drm/xe_drm.h โ plus the whole friend group, no cap:
- Xe Device Block Diagram(9)
- Xe uAPI Overview(9)
- Xe IOCTL Extensions(9)
- struct
drm_xe_user_extension(9) - struct
drm_xe_ext_set_property(9) - struct
drm_xe_engine_class_instance(9) - struct
drm_xe_engine(9) - struct
drm_xe_query_engines(9) - enum
drm_xe_memory_class(9) - struct
drm_xe_mem_region(9) - struct
drm_xe_query_mem_regions(9) - struct
drm_xe_gt(9) - struct
drm_xe_query_gt_list(9) - struct
drm_xe_query_topology_mask(9) - struct
drm_xe_query_engine_cycles(9) - struct
drm_xe_query_uc_fw_version(9) - struct
drm_xe_query_pxp_status(9) - struct
drm_xe_device_query(9) - struct
drm_xe_gem_create(9) - struct
drm_xe_gem_mmap_offset(9) - struct
drm_xe_vm_create(9) - struct
drm_xe_vm_destroy(9) - struct
drm_xe_vm_bind_op(9) - struct
drm_xe_vm_bind(9) - struct
drm_xe_vm_get_property(9) - struct
drm_xe_exec_queue_create(9) - struct
drm_xe_exec_queue_destroy(9) - struct
drm_xe_exec_queue_get_property(9) - struct
drm_xe_sync(9) - struct
drm_xe_exec(9) - struct
drm_xe_wait_user_fence(9) - enum
drm_xe_observation_type(9) - enum
drm_xe_observation_op(9) - struct
drm_xe_observation_param(9) - enum
drm_xe_observation_ioctls(9) - enum
drm_xe_oa_unit_type(9) - struct
drm_xe_oa_unit(9) - struct
drm_xe_query_oa_units(9) - enum
drm_xe_oa_format_type(9) - enum
drm_xe_oa_property_id(9) - struct
drm_xe_oa_config(9) - struct
drm_xe_oa_stream_status(9) - struct
drm_xe_oa_stream_info(9) - enum
drm_xe_pxp_session_type(9) - enum
drm_xe_eu_stall_property_id(9) - struct
drm_xe_query_eu_stall(9) - struct
drm_xe_madvise(9) - struct
drm_xe_mem_range_attr(9) - struct
drm_xe_vm_query_mem_range_attr(9) - struct
drm_xe_exec_queue_set_property(9) - Xe DRM RAS(9)
- enum
drm_xe_ras_error_severity(9) - enum
drm_xe_ras_error_component(9)
and that's the whole page, bestie, you ate that ๐ sign-off time: this little masterpiece lives at ./include/uapi/drm, dated October 2026, and it's struct drm_xe_query_config(9) in the Kernel API Manual โ go forth and query your config, icon ๐
โจ๐
๐ฆ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms