Something went wrong. Try again.
(I'm so sorry!) Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
5.3 kB · 152 lines
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153.. SPDX-License-Identifier: GPL-2.0+
============================DRM RAS over Generic Netlink============================
The DRM RAS (Reliability, Availability, Serviceability) interface provides astandardized way for GPU/accelerator drivers to expose error counters andother reliability nodes to user space via Generic Netlink. This allowsdiagnostic tools, monitoring daemons, or test infrastructure to query hardwarehealth 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 withinthe 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.* Subscribe to the ``error-report`` multicast group to receive ``error-event``.* Query specific error counter threshold with the ``get-error-threshold`` command, using both ``node-id`` and ``error-id`` as parameters.* Set specific error counter threshold with the ``set-error-threshold`` command, using ``node-id``, ``error-id`` and ``error-threshold`` 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 netlinkattributes 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
Example: Subscribe to ``error-report`` multicast group
.. code-block:: bash
sudo ynl --family drm_ras --output-json --subscribe error-report
.. code-block:: json
{ "name": "error-event", "msg": { "device-name": "0000:03:00.0", "node-id": 1, "node-name": "uncorrectable-errors", "error-id": 1, "error-name": "error_name1", "error-value": 1 } }
Example: Query error threshold of a given counter
.. code-block:: bash
sudo ynl --family drm_ras --do get-error-threshold --json '{"node-id":0, "error-id":1}' {'error-id': 1, 'error-name': 'error_name1', 'error-threshold': 16}
Example: Set error threshold of a given counter
.. code-block:: bash
sudo ynl --family drm_ras --do set-error-threshold --json '{"node-id":0, "error-id":1, "error-threshold":8}' None