XE DRM RAS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– Xe DRM RAS πŸ’– (section 9, Kernel API Manual)

okay so bestie, this is the page for Xe DRM RAS β€” the DRM RAS Netlink Interface's whole personality, but in C form 🫢 The enums and strings defined below map to the attributes of the DRM RAS Netlink Interface. For the complete interface specification, go look at Documentation/netlink/specs/drm_ras.yaml β€” that's the full lore, iykyk.


✨ Node Registration ✨

The driver registers DRM RAS nodes for each error severity level, no cap πŸ’…

  • enum drm_xe_ras_error_severity defines the node-id.
  • DRM_XE_RAS_ERROR_SEVERITY_NAMES maps that node-id to the node-name.

main character energy: the enum is the ID, the names array is the glow-up ✨


🌸 Error Classification 🌸

Each node contains a list of error counters. Every single error is identified by an error-id and an error-name β€” like a little name tag for your failures, but make it fashion πŸŽ€

  • enum drm_xe_ras_error_component defines the error-id.
  • DRM_XE_RAS_ERROR_COMPONENT_NAMES maps that error-id to the error-name.

πŸ¦‹ User Interface πŸ¦‹

To retrieve error values of a error counter, userspace applications should follow the below steps β€” literally just these four, bestie, don't skip:

  1. Use command LIST_NODES to enumerate all available nodes
  2. Select node by node-id or node-name
  3. Use command GET_ERROR_COUNTERS to list errors of specific node
  4. Query specific error values using either error-id or error-name

and then you're done, slay πŸ’… Here's the lookup-table moment, keep it exact:

// Lookup tables for ID-to-name resolution
static const char *nodes[] = DRM_XE_RAS_ERROR_SEVERITY_NAMES;
static const char *errors[] = DRM_XE_RAS_ERROR_COMPONENT_NAMES;
🫢 fr fr, those are copied character for character β€” don't go renaming anything, it's giving "undefined behaviour" and we don't do that here.

⭐ SEE ALSO ⭐

the way this list is long β€” but every single one of these is iconic and you're gonna need them πŸ˜­πŸ’–

  • Kernel file ./include/uapi/drm/xe_drm.h
  • 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)
  • 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)
  • enum drm_xe_ras_error_severity(9)
  • enum drm_xe_ras_error_component(9)

✨ sign-off time ✨ this lil gem lives in ./include/uapi/drm, dated October 2026 β€” go forth and query those error counters, bestie, you're gonna eat πŸ’…πŸ”₯

πŸ“¦ where this page comes from