ENUM DRM_XE_OA_PROPERTY_ID(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… 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. Peep oa_unit_id in struct drm_xe_oa_unit. If you don't pass it, it defaults to 0.
  • DRM_XE_OA_PROPERTY_SAMPLE_OA β€” set it to 1 and 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 via DRM_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 to 2^(period_exponent + 1) ✨
  • DRM_XE_OA_PROPERTY_OA_DISABLED β€” a value of 1 opens the OA stream in a DISABLED state (check DRM_XE_OBSERVATION_IOCTL_ENABLE for the enabling side of things πŸ‘€).
  • DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID β€” opens the stream for a specific exec_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 with DRM_XE_OA_PROPERTY_EXEC_QUEUE_ID. If you don't, it defaults to 0.
  • 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 in DRM_XE_OA_PROPERTY_SYNCS.
  • DRM_XE_OA_PROPERTY_SYNCS β€” pointer to a struct drm_xe_sync array, with the array size specified via DRM_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. For DRM_XE_SYNC_TYPE_USER_FENCE, addr is 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