ENUM DRM_XE_OA_PROPERTY_ID(9)
π enum drm_xe_oa_property_id (9) β Kernel API Manual energy
Okay bestie, buckle up π this is the enum drm_xe_oa_property_id page from the Kernel API Manual, and it's literally the master list of OA stream property IDs. Yes, every single one. No cap.
β¨ NAME β¨
enum drm_xe_oa_property_id β OA stream property IDs π¦
πΈ SYNOPSIS πΈ
enum drm_xe_oa_property_id {
DRM_XE_OA_PROPERTY_OA_UNIT_ID ,
DRM_XE_OA_PROPERTY_SAMPLE_OA ,
DRM_XE_OA_PROPERTY_OA_METRIC_SET ,
DRM_XE_OA_PROPERTY_OA_FORMAT ,
DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENT ,
DRM_XE_OA_PROPERTY_OA_DISABLED ,
DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID ,
DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCE ,
DRM_XE_OA_PROPERTY_NO_PREEMPT ,
DRM_XE_OA_PROPERTY_NUM_SYNCS ,
DRM_XE_OA_PROPERTY_SYNCS ,
DRM_XE_OA_PROPERTY_OA_BUFFER_SIZE ,
DRM_XE_OA_PROPERTY_WAIT_NUM_REPORTS
};
π Constants π
Thirteen of them, all iconic, no skips π
DRM_XE_OA_PROPERTY_OA_UNIT_IDβ the ID of the OA unit you're opening the OA stream on. Peepoa_unit_idinstruct drm_xe_oa_unit. If you don't pass it, it defaults to0.DRM_XE_OA_PROPERTY_SAMPLE_OAβ set it to1and you're requesting that raw OA unit reports or stream samples get included in a global buffer attached to an OA unit. slay.DRM_XE_OA_PROPERTY_OA_METRIC_SETβ the OA metrics that define what's actually inside the OA reports. These were previously added viaDRM_XE_OBSERVATION_OP_ADD_CONFIG.DRM_XE_OA_PROPERTY_OA_FORMATβ the OA counter report format, periodt.DRM_XE_OA_PROPERTY_OA_PERIOD_EXPONENTβ requests periodic OA unit sampling, with the sampling frequency proportional to2^(period_exponent + 1)β¨DRM_XE_OA_PROPERTY_OA_DISABLEDβ a value of1opens the OA stream in a DISABLED state (checkDRM_XE_OBSERVATION_IOCTL_ENABLEfor the enabling side of things π).DRM_XE_OA_PROPERTY_EXEC_QUEUE_IDβ opens the stream for a specificexec_queue_id. OA queries can be executed on this exec queue, iykyk.DRM_XE_OA_PROPERTY_OA_ENGINE_INSTANCEβ an optional engine instance you pass along withDRM_XE_OA_PROPERTY_EXEC_QUEUE_ID. If you don't, it defaults to0.DRM_XE_OA_PROPERTY_NO_PREEMPTβ lets preemption and timeslicing be disabled for the stream exec queue π«ΆDRM_XE_OA_PROPERTY_NUM_SYNCSβ the number of syncs in the sync array you specified inDRM_XE_OA_PROPERTY_SYNCS.DRM_XE_OA_PROPERTY_SYNCSβ pointer to astruct drm_xe_syncarray, with the array size specified viaDRM_XE_OA_PROPERTY_NUM_SYNCS. The OA configuration will wait till the input fences signal. Output fences signal after the new OA configuration takes effect. ForDRM_XE_SYNC_TYPE_USER_FENCE,addris a user pointer β same vibe as the VM bind case.DRM_XE_OA_PROPERTY_OA_BUFFER_SIZEβ size of the OA buffer the driver allocates, in bytes. Supported sizes are powers of 2 from 128 KiB to 128 MiB. If you don't specify it, a 16 MiB OA buffer gets allocated by default πDRM_XE_OA_PROPERTY_WAIT_NUM_REPORTSβ how many reports to wait for before unblocking poll or read.
π§ Description π§
So here's the whole vibe: stream params get specified as a chain of struct drm_xe_ext_set_property structs, with property values coming from enum drm_xe_oa_property_id, and the struct drm_xe_user_extension base.name set to DRM_XE_OA_EXTENSION_SET_PROPERTY. The param field in struct drm_xe_observation_param points to that first struct drm_xe_ext_set_property struct. Cute, right? π
Exactly the same mechanism is also used for stream reconfiguration, using the DRM_XE_OBSERVATION_IOCTL_CONFIG observation stream fd ioctl β though fr fr only a subset of the properties above can be specified for stream reconfiguration. Don't come for me, that's just how it is π
π SEE ALSO π
Kernel file ./include/uapi/drm/xe_drm.h, plus the whole friend group: 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_query_config(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), 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).
That's the whole page bestie, every flag accounted for, nothing dropped πβ¨
Signed off from ./include/uapi/drm, dated October 2026, and yes β it's still enum drm_xe_oa_property_id(9) at the bottom, exactly where it belongs π«Ά
π¦ 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