| .. SPDX-License-Identifier: GPL-2.0+ | |
| ============================ | |
| DRM RAS over Generic Netlink | |
| ============================ | |
| The DRM RAS (Reliability, Availability, Serviceability) interface provides a | |
| standardized way for GPU/accelerator drivers to expose error counters and | |
| other reliability nodes to user space via Generic Netlink. This allows | |
| diagnostic tools, monitoring daemons, or test infrastructure to query hardware | |
| health in a uniform way across different DRM drivers. | |
| Key Goals: | |
| * Provide a standardized RAS solution for GPU and accelerator drivers, enabling | |
| data center monitoring and reliability operations. | |
| * Implement a single drm-ras Generic Netlink family to meet modern Netlink YAML | |
| specifications and centralize all RAS-related communication in one namespace. | |
| * Support a basic error counter interface, addressing the immediate, essential | |
| monitoring needs. | |
| * Offer a flexible, future-proof interface that can be extended to support | |
| additional types of RAS data in the future. | |
| * Allow multiple nodes per driver, enabling drivers to register separate | |
| nodes for different IP blocks, sub-blocks, or other logical subdivisions | |
| as applicable. | |
| .. contents:: | |
| Nodes | |
| ===== | |
| Nodes are logical abstractions representing an error type or error source within | |
| the device. Currently, only error counter nodes is supported. | |
| Drivers are responsible for registering and unregistering nodes via the | |
| `drm_ras_node_register()` and `drm_ras_node_unregister()` APIs. | |
| Node Management | |
| ------------------- | |
| .. kernel-doc:: drivers/gpu/drm/drm_ras.c | |
| :doc: DRM RAS Node Management | |
| .. kernel-doc:: drivers/gpu/drm/drm_ras.c | |
| :internal: | |
| Generic Netlink Usage | |
| ===================== | |
| The interface is implemented as a Generic Netlink family named ``drm-ras``. | |
| User space tools can: | |
| * List registered nodes with the ``list-nodes`` command. | |
| * List all error counters in an node with the ``get-error-counter`` command with ``node-id`` | |
| as a parameter. | |
| * Query specific error counter values with the ``get-error-counter`` command, using both | |
| ``node-id`` and ``error-id`` as parameters. | |
| * Clear specific error counters with the ``clear-error-counter`` command, using both | |
| ``node-id`` and ``error-id`` as parameters. | |
| YAML-based Interface | |
| -------------------- | |
| The interface is described in a YAML specification ``Documentation/netlink/specs/drm_ras.yaml`` | |
| This YAML is used to auto-generate user space bindings via | |
| ``tools/net/ynl/pyynl/ynl_gen_c.py``, and drives the structure of netlink | |
| attributes and operations. | |
| Usage Notes | |
| ----------- | |
| * User space must first enumerate nodes to obtain their IDs. | |
| * Node IDs or Node names can be used for all further queries, such as error counters. | |
| * Error counters can be queried by either the Error ID or Error name. | |
| * Query Parameters should be defined as part of the uAPI to ensure user interface stability. | |
| * The interface supports future extension by adding new node types and | |
| additional attributes. | |
| Example: List nodes using ynl | |
| .. code-block:: bash | |
| sudo ynl --family drm_ras --dump list-nodes | |
| [{'device-name': '0000:03:00.0', | |
| 'node-id': 0, | |
| 'node-name': 'correctable-errors', | |
| 'node-type': 'error-counter'}, | |
| {'device-name': '0000:03:00.0', | |
| 'node-id': 1, | |
| 'node-name': 'uncorrectable-errors', | |
| 'node-type': 'error-counter'}] | |
| Example: List all error counters using ynl | |
| .. code-block:: bash | |
| sudo ynl --family drm_ras --dump get-error-counter --json '{"node-id":0}' | |
| [{'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}, | |
| {'error-id': 2, 'error-name': 'error_name2', 'error-value': 0}] | |
| Example: Query an error counter for a given node | |
| .. code-block:: bash | |
| sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}' | |
| {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0} | |
| Example: Clear an error counter for a given node | |
| .. code-block:: bash | |
| sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}' | |
| None |