ssphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget/translations/zh_CN/gpu/drm-rasmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/gpu/drm-rasmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/gpu/drm-rasmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/gpu/drm-rasmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/gpu/drm-rasmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/pt_BR/gpu/drm-rasmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/gpu/drm-rasmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh9/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras.rsthKubhsection)}(hhh](htitle)}(hDRM RAS over Generic Netlinkh]hDRM RAS over Generic Netlink}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXbThe 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.h]hXbThe 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.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(h Key Goals:h]h Key Goals:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh bullet_list)}(hhh](h list_item)}(hProvide a standardized RAS solution for GPU and accelerator drivers, enabling data center monitoring and reliability operations.h]h)}(hProvide a standardized RAS solution for GPU and accelerator drivers, enabling data center monitoring and reliability operations.h]hProvide a standardized RAS solution for GPU and accelerator drivers, enabling data center monitoring and reliability operations.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubj)}(hImplement a single drm-ras Generic Netlink family to meet modern Netlink YAML specifications and centralize all RAS-related communication in one namespace.h]h)}(hImplement a single drm-ras Generic Netlink family to meet modern Netlink YAML specifications and centralize all RAS-related communication in one namespace.h]hImplement a single drm-ras Generic Netlink family to meet modern Netlink YAML specifications and centralize all RAS-related communication in one namespace.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubj)}(h^Support a basic error counter interface, addressing the immediate, essential monitoring needs.h]h)}(h^Support a basic error counter interface, addressing the immediate, essential monitoring needs.h]h^Support a basic error counter interface, addressing the immediate, essential monitoring needs.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj2ubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubj)}(htOffer a flexible, future-proof interface that can be extended to support additional types of RAS data in the future.h]h)}(htOffer a flexible, future-proof interface that can be extended to support additional types of RAS data in the future.h]htOffer a flexible, future-proof interface that can be extended to support additional types of RAS data in the future.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjJubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubj)}(hAllow multiple nodes per driver, enabling drivers to register separate nodes for different IP blocks, sub-blocks, or other logical subdivisions as applicable. h]h)}(hAllow multiple nodes per driver, enabling drivers to register separate nodes for different IP blocks, sub-blocks, or other logical subdivisions as applicable.h]hAllow multiple nodes per driver, enabling drivers to register separate nodes for different IP blocks, sub-blocks, or other logical subdivisions as applicable.}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjbubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1hhhhKhhhhubh)}(hhh](h)}(hNodesh]hNodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hNodes are logical abstractions representing an error type or error source within the device. Currently, only error counter nodes is supported.h]hNodes are logical abstractions representing an error type or error source within the device. Currently, only error counter nodes is supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hDrivers are responsible for registering and unregistering nodes via the `drm_ras_node_register()` and `drm_ras_node_unregister()` APIs.h](hHDrivers are responsible for registering and unregistering nodes via the }(hjhhhNhNubhtitle_reference)}(h`drm_ras_node_register()`h]hdrm_ras_node_register()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h`drm_ras_node_unregister()`h]hdrm_ras_node_unregister()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh APIs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK!hjhhubh)}(hhh](h)}(hNode Managementh]hNode Management}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK%ubh)}(hXThis module provides the infrastructure to manage RAS (Reliability, Availability, and Serviceability) nodes for DRM drivers. Each DRM driver may register one or more RAS nodes, which represent logical components capable of reporting error counters and other reliability metrics.h]hXThis module provides the infrastructure to manage RAS (Reliability, Availability, and Serviceability) nodes for DRM drivers. Each DRM driver may register one or more RAS nodes, which represent logical components capable of reporting error counters and other reliability metrics.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chKhjhhubh)}(hThe nodes are stored in a global xarray `drm_ras_xa` to allow efficient lookup by ID. Nodes can be registered or unregistered dynamically at runtime.h](h(The nodes are stored in a global xarray }(hjhhhNhNubj)}(h `drm_ras_xa`h]h drm_ras_xa}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubha to allow efficient lookup by ID. Nodes can be registered or unregistered dynamically at runtime.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chKhjhhubh)}(hLA Generic Netlink family `drm_ras` exposes two main operations to userspace:h](hA Generic Netlink family }(hjhhhNhNubj)}(h `drm_ras`h]hdrm_ras}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh* exposes two main operations to userspace:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chKhjhhubhenumerated_list)}(hhh](j)}(hoLIST_NODES: Dump all currently registered RAS nodes. The user receives an array of node IDs, names, and types. h]h)}(hnLIST_NODES: Dump all currently registered RAS nodes. The user receives an array of node IDs, names, and types.h]hnLIST_NODES: Dump all currently registered RAS nodes. The user receives an array of node IDs, names, and types.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chKhj<ubah}(h]h ]h"]h$]h&]uh1jhj9ubj)}(hGET_ERROR_COUNTER: Get error counters of a given node. Userspace must provide Node ID, Error ID (Optional for specific counter). Returns all counters of a node if only Node ID is provided or specific error counters. h]h)}(hGET_ERROR_COUNTER: Get error counters of a given node. Userspace must provide Node ID, Error ID (Optional for specific counter). Returns all counters of a node if only Node ID is provided or specific error counters.h]hGET_ERROR_COUNTER: Get error counters of a given node. Userspace must provide Node ID, Error ID (Optional for specific counter). Returns all counters of a node if only Node ID is provided or specific error counters.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK!hjUubah}(h]h ]h"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1j7hjhhhNhNubh)}(hNode registration:h]hNode registration:}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK&hjhhubh)}(hhh](j)}(hWdrm_ras_node_register(): Registers a new node and assigns it a unique ID in the xarray.h]h)}(hWdrm_ras_node_register(): Registers a new node and assigns it a unique ID in the xarray.h]hWdrm_ras_node_register(): Registers a new node and assigns it a unique ID in the xarray.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK(hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hQdrm_ras_node_unregister(): Removes a previously registered node from the xarray. h]h)}(hPdrm_ras_node_unregister(): Removes a previously registered node from the xarray.h]hPdrm_ras_node_unregister(): Removes a previously registered node from the xarray.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j-uh1hhjhK(hjhhubh)}(h Node type:h]h Node type:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK-hjhhubh)}(hhh]j)}(hXcERROR_COUNTER: + Currently, only error counters are supported. + The driver must implement the query_error_counter() callback to provide the name and the value of the error counter. + The driver must provide a error_counter_range.last value informing the last valid error ID. + The driver can provide a error_counter_range.first value informing the first valid error ID. + The error counters in the driver doesn't need to be contiguous, but the driver must return -ENOENT to the query_error_counter as an indication that the ID should be skipped and not listed in the netlink API. h]hdefinition_list)}(hhh]hdefinition_list_item)}(hXOERROR_COUNTER: + Currently, only error counters are supported. + The driver must implement the query_error_counter() callback to provide the name and the value of the error counter. + The driver must provide a error_counter_range.last value informing the last valid error ID. + The driver can provide a error_counter_range.first value informing the first valid error ID. + The error counters in the driver doesn't need to be contiguous, but the driver must return -ENOENT to the query_error_counter as an indication that the ID should be skipped and not listed in the netlink API. h](hterm)}(hERROR_COUNTER:h]hERROR_COUNTER:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK9hjubh definition)}(hhh]h)}(hhh](j)}(h-Currently, only error counters are supported.h]h)}(hjh]h-Currently, only error counters are supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK0hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(htThe driver must implement the query_error_counter() callback to provide the name and the value of the error counter.h]h)}(htThe driver must implement the query_error_counter() callback to provide the name and the value of the error counter.h]htThe driver must implement the query_error_counter() callback to provide the name and the value of the error counter.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK1hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h[The driver must provide a error_counter_range.last value informing the last valid error ID.h]h)}(h[The driver must provide a error_counter_range.last value informing the last valid error ID.h]h[The driver must provide a error_counter_range.last value informing the last valid error ID.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK3hj/ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h\The driver can provide a error_counter_range.first value informing the first valid error ID.h]h)}(h\The driver can provide a error_counter_range.first value informing the first valid error ID.h]h\The driver can provide a error_counter_range.first value informing the first valid error ID.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK5hjHubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hThe error counters in the driver doesn't need to be contiguous, but the driver must return -ENOENT to the query_error_counter as an indication that the ID should be skipped and not listed in the netlink API. h]h)}(hThe error counters in the driver doesn't need to be contiguous, but the driver must return -ENOENT to the query_error_counter as an indication that the ID should be skipped and not listed in the netlink API.h]hThe error counters in the driver doesn’t need to be contiguous, but the driver must return -ENOENT to the query_error_counter as an indication that the ID should be skipped and not listed in the netlink API.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK7hjaubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j+uh1hhjhK0hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK9hjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]jjuh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK/hjhhubh)}(hNetlink handlers:h]hNetlink handlers:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK;hjhhubh)}(hhh](j)}(h_drm_ras_nl_list_nodes_dumpit(): Implements the LIST_NODES operation, iterating over the xarray.h]h)}(h_drm_ras_nl_list_nodes_dumpit(): Implements the LIST_NODES operation, iterating over the xarray.h]h_drm_ras_nl_list_nodes_dumpit(): Implements the LIST_NODES operation, iterating over the xarray.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK=hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hdrm_ras_nl_get_error_counter_dumpit(): Implements the GET_ERROR_COUNTER dumpit operation, fetching all counters from a specific node.h]h)}(hdrm_ras_nl_get_error_counter_dumpit(): Implements the GET_ERROR_COUNTER dumpit operation, fetching all counters from a specific node.h]hdrm_ras_nl_get_error_counter_dumpit(): Implements the GET_ERROR_COUNTER dumpit operation, fetching all counters from a specific node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chK?hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hdrm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit operation, fetching a counter value from a specific node. h]h)}(hdrm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit operation, fetching a counter value from a specific node.h]hdrm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit operation, fetching a counter value from a specific node.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:39: ./drivers/gpu/drm/drm_ras.chKAhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1hhjhK=hjhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single)drm_ras_nl_list_nodes_dumpit (C function)c.drm_ras_nl_list_nodes_dumpithNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hSint drm_ras_nl_list_nodes_dumpit (struct sk_buff *skb, struct netlink_callback *cb)h]hdesc_signature_line)}(hRint drm_ras_nl_list_nodes_dumpit(struct sk_buff *skb, struct netlink_callback *cb)h](hdesc_sig_keyword_type)}(hinth]hint}(hj'hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j%hj!hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKRubhdesc_sig_space)}(h h]h }(hj9hhhNhNubah}(h]h ]wah"]h$]h&]uh1j7hj!hhhj6hKRubh desc_name)}(hdrm_ras_nl_list_nodes_dumpith]h desc_sig_name)}(hdrm_ras_nl_list_nodes_dumpith]hdrm_ras_nl_list_nodes_dumpit}(hjPhhhNhNubah}(h]h ]nah"]h$]h&]uh1jNhjJubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jHhj!hhhj6hKRubhdesc_parameterlist)}(h2(struct sk_buff *skb, struct netlink_callback *cb)h](hdesc_parameter)}(hstruct sk_buff *skbh](hdesc_sig_keyword)}(hstructh]hstruct}(hjuhhhNhNubah}(h]h ]kah"]h$]h&]uh1jshjoubj8)}(h h]h }(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjoubh)}(hhh]jO)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjRsbc.drm_ras_nl_list_nodes_dumpitasbuh1hhjoubj8)}(h h]h }(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjoubhdesc_sig_punctuation)}(hjh]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjoubjO)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjoubeh}(h]h ]h"]h$]h&]noemphhhuh1jmhjiubjn)}(hstruct netlink_callback *cbh](jt)}(hjwh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jshjubj8)}(h h]h }(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubh)}(hhh]jO)}(hnetlink_callbackh]hnetlink_callback}(hjhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jc.drm_ras_nl_list_nodes_dumpitasbuh1hhjubj8)}(h h]h }(hj1hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(hjh]h*}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjO)}(hcbh]hcb}(hjLhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jmhjiubeh}(h]h ]h"]h$]h&]hhuh1jghj!hhhj6hKRubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jsphinx_line_type declaratorhjhhhj6hKRubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhj6hKRhjhhubh desc_content)}(hhh]h)}(hDump all registered RAS nodesh]hDump all registered RAS nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKRhj}hhubah}(h]h ]h"]h$]h&]uh1j{hjhhhj6hKRubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh container)}(hX**Parameters** ``struct sk_buff *skb`` Netlink message buffer ``struct netlink_callback *cb`` Callback context for multi-part dumps **Description** Iterates over all registered RAS nodes in the global xarray and appends their attributes (ID, name, type) to the given netlink message buffer. Uses **cb->ctx** to track progress in case the message buffer fills up, allowing multi-part dump support. On buffer overflow, updates the context to resume from the last node on the next invocation. **Return** 0 if all nodes fit in **skb**, number of bytes added to **skb** if the buffer filled up (requires multi-part continuation), or a negative error code on failure.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKVhjubj)}(hhh](j)}(h/``struct sk_buff *skb`` Netlink message buffer h](j)}(h``struct sk_buff *skb``h]hliteral)}(hjh]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKShjubj)}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKShjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKShjubj)}(hF``struct netlink_callback *cb`` Callback context for multi-part dumps h](j)}(h``struct netlink_callback *cb``h]j)}(hjh]hstruct netlink_callback *cb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKThjubj)}(hhh]h)}(h%Callback context for multi-part dumpsh]h%Callback context for multi-part dumps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKThjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKThjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjAh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKVhjubh)}(hXUIterates over all registered RAS nodes in the global xarray and appends their attributes (ID, name, type) to the given netlink message buffer. Uses **cb->ctx** to track progress in case the message buffer fills up, allowing multi-part dump support. On buffer overflow, updates the context to resume from the last node on the next invocation.h](hIterates over all registered RAS nodes in the global xarray and appends their attributes (ID, name, type) to the given netlink message buffer. Uses }(hjWhhhNhNubj)}(h **cb->ctx**h]hcb->ctx}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjWubh to track progress in case the message buffer fills up, allowing multi-part dump support. On buffer overflow, updates the context to resume from the last node on the next invocation.}(hjWhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKUhjubh)}(h **Return**h]j)}(hjzh]hReturn}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK[hjubh)}(h0 if all nodes fit in **skb**, number of bytes added to **skb** if the buffer filled up (requires multi-part continuation), or a negative error code on failure.h](h0 if all nodes fit in }(hjhhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh, number of bytes added to }(hjhhhNhNubj)}(h**skb**h]hskb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubha if the buffer filled up (requires multi-part continuation), or a negative error code on failure.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK\hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j0drm_ras_nl_get_error_counter_dumpit (C function)%c.drm_ras_nl_get_error_counter_dumpithNtauh1jhjhhhNhNubj)}(hhh](j)}(hZint drm_ras_nl_get_error_counter_dumpit (struct sk_buff *skb, struct netlink_callback *cb)h]j )}(hYint drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb, struct netlink_callback *cb)h](j&)}(hinth]hint}(hjhhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjhhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKubj8)}(h h]h }(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjhhhjhKubjI)}(h#drm_ras_nl_get_error_counter_dumpith]jO)}(h#drm_ras_nl_get_error_counter_dumpith]h#drm_ras_nl_get_error_counter_dumpit}(hjhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubah}(h]h ](jbjceh"]h$]h&]hhuh1jHhjhhhjhKubjh)}(h2(struct sk_buff *skb, struct netlink_callback *cb)h](jn)}(hstruct sk_buff *skbh](jt)}(hjwh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jshjubj8)}(h h]h }(hj-hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubh)}(hhh]jO)}(hsk_buffh]hsk_buff}(hj>hhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhj;ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNjj)}j]j)}jjsb%c.drm_ras_nl_get_error_counter_dumpitasbuh1hhjubj8)}(h h]h }(hj^hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(hjh]h*}(hjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjO)}(hskbh]hskb}(hjyhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jmhjubjn)}(hstruct netlink_callback *cbh](jt)}(hjwh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jshjubj8)}(h h]h }(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubh)}(hhh]jO)}(hnetlink_callbackh]hnetlink_callback}(hjhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jZ%c.drm_ras_nl_get_error_counter_dumpitasbuh1hhjubj8)}(h h]h }(hjhhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjO)}(hcbh]hcb}(hjhhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jmhjubeh}(h]h ]h"]h$]h&]hhuh1jghjhhhjhKubeh}(h]h ]h"]h$]h&]hhjmuh1jjnjohjhhhjhKubah}(h]jah ](jsjteh"]h$]h&]jxjy)jzhuh1jhjhKhjhhubj|)}(hhh]h)}(hDump all Error Countersh]hDump all Error Counters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhjhhubah}(h]h ]h"]h$]h&]uh1j{hjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj+jj+jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct sk_buff *skb`` Netlink message buffer ``struct netlink_callback *cb`` Callback context for multi-part dumps **Description** Iterates over all error counters in a given Node and appends their attributes (ID, name, value) to the given netlink message buffer. Uses **cb->ctx** to track progress in case the message buffer fills up, allowing multi-part dump support. On buffer overflow, updates the context to resume from the last node on the next invocation. **Return** 0 if all errors fit in **skb**, number of bytes added to **skb** if the buffer filled up (requires multi-part continuation), or a negative error code on failure.h](h)}(h**Parameters**h]j)}(hj5h]h Parameters}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhj/ubj)}(hhh](j)}(h/``struct sk_buff *skb`` Netlink message buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjTh]hstruct sk_buff *skb}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhjNubj)}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihKhjjubah}(h]h ]h"]h$]h&]uh1jhjNubeh}(h]h ]h"]h$]h&]uh1jhjihKhjKubj)}(hF``struct netlink_callback *cb`` Callback context for multi-part dumps h](j)}(h``struct netlink_callback *cb``h]j)}(hjh]hstruct netlink_callback *cb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhjubj)}(hhh]h)}(h%Callback context for multi-part dumpsh]h%Callback context for multi-part dumps}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjKubeh}(h]h ]h"]h$]h&]uh1jhj/ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhj/ubh)}(hXKIterates over all error counters in a given Node and appends their attributes (ID, name, value) to the given netlink message buffer. Uses **cb->ctx** to track progress in case the message buffer fills up, allowing multi-part dump support. On buffer overflow, updates the context to resume from the last node on the next invocation.h](hIterates over all error counters in a given Node and appends their attributes (ID, name, value) to the given netlink message buffer. Uses }(hjhhhNhNubj)}(h **cb->ctx**h]hcb->ctx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh to track progress in case the message buffer fills up, allowing multi-part dump support. On buffer overflow, updates the context to resume from the last node on the next invocation.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhj/ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhj/ubh)}(h0 if all errors fit in **skb**, number of bytes added to **skb** if the buffer filled up (requires multi-part continuation), or a negative error code on failure.h](h0 if all errors fit in }(hj hhhNhNubj)}(h**skb**h]hskb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh, number of bytes added to }(hj hhhNhNubj)}(h**skb**h]hskb}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubha if the buffer filled up (requires multi-part continuation), or a negative error code on failure.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhj/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j.drm_ras_nl_get_error_counter_doit (C function)#c.drm_ras_nl_get_error_counter_doithNtauh1jhjhhhNhNubj)}(hhh](j)}(hSint drm_ras_nl_get_error_counter_doit (struct sk_buff *skb, struct genl_info *info)h]j )}(hRint drm_ras_nl_get_error_counter_doit(struct sk_buff *skb, struct genl_info *info)h](j&)}(hinth]hint}(hjj hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j%hjf hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM#ubj8)}(h h]h }(hjy hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hjf hhhjx hM#ubjI)}(h!drm_ras_nl_get_error_counter_doith]jO)}(h!drm_ras_nl_get_error_counter_doith]h!drm_ras_nl_get_error_counter_doit}(hj hhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhj ubah}(h]h ](jbjceh"]h$]h&]hhuh1jHhjf hhhjx hM#ubjh)}(h-(struct sk_buff *skb, struct genl_info *info)h](jn)}(hstruct sk_buff *skbh](jt)}(hjwh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jshj ubj8)}(h h]h }(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj ubh)}(hhh]jO)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sb#c.drm_ras_nl_get_error_counter_doitasbuh1hhj ubj8)}(h h]h }(hj hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjO)}(hskbh]hskb}(hj hhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jmhj ubjn)}(hstruct genl_info *infoh](jt)}(hjwh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jshj ubj8)}(h h]h }(hj& hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj ubh)}(hhh]jO)}(h genl_infoh]h genl_info}(hj7 hhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhj4 ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9 modnameN classnameNjj)}j]j #c.drm_ras_nl_get_error_counter_doitasbuh1hhj ubj8)}(h h]h }(hjU hhhNhNubah}(h]h ]jDah"]h$]h&]uh1j7hj ubj)}(hjh]h*}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjO)}(hinfoh]hinfo}(hjp hhhNhNubah}(h]h ]j[ah"]h$]h&]uh1jNhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jmhj ubeh}(h]h ]h"]h$]h&]hhuh1jghjf hhhjx hM#ubeh}(h]h ]h"]h$]h&]hhjmuh1jjnjohjb hhhjx hM#ubah}(h]j] ah ](jsjteh"]h$]h&]jxjy)jzhuh1jhjx hM#hj_ hhubj|)}(hhh]h)}(h!Query an error counter of an nodeh]h!Query an error counter of an node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM#hj hhubah}(h]h ]h"]h$]h&]uh1j{hj_ hhhjx hM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jhhhjhNhNubj)}(hX**Parameters** ``struct sk_buff *skb`` Netlink message buffer ``struct genl_info *info`` Generic Netlink info containing attributes of the request **Description** Extracts the node ID and error ID from the netlink attributes and retrieves the current value of the corresponding error counter. Sends the result back to the requesting user via the standard Genl reply. **Return** 0 on success, or negative errno on failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM'hj ubj)}(hhh](j)}(h/``struct sk_buff *skb`` Netlink message buffer h](j)}(h``struct sk_buff *skb``h]j)}(hj h]hstruct sk_buff *skb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM$hj ubj)}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM$hj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hM$hj ubj)}(hU``struct genl_info *info`` Generic Netlink info containing attributes of the request h](j)}(h``struct genl_info *info``h]j)}(hj h]hstruct genl_info *info}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM%hj ubj)}(hhh]h)}(h9Generic Netlink info containing attributes of the requesth]h9Generic Netlink info containing attributes of the request}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj) hM%hj* ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj) hM%hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hjO h]h Description}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM'hj ubh)}(hExtracts the node ID and error ID from the netlink attributes and retrieves the current value of the corresponding error counter. Sends the result back to the requesting user via the standard Genl reply.h]hExtracts the node ID and error ID from the netlink attributes and retrieves the current value of the corresponding error counter. Sends the result back to the requesting user via the standard Genl reply.}(hje hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM&hj ubh)}(h **Return**h]j)}(hjv h]hReturn}(hjx hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM*hj ubh)}(h+0 on success, or negative errno on failure.h]h+0 on success, or negative errno on failure.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chM+hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]node-managementah ]h"]node managementah$]h&]uh1hhjhhhhhK%ubeh}(h]nodesah ]h"]nodesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGeneric Netlink Usageh]hGeneric Netlink Usage}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK-ubh)}(haThe interface is implemented as a Generic Netlink family named ``drm-ras``. User space tools can:h](h?The interface is implemented as a Generic Netlink family named }(hj hhhNhNubj)}(h ``drm-ras``h]hdrm-ras}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh. User space tools can:}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK/hj hhubh)}(hhh](j)}(h6List registered nodes with the ``list-nodes`` command.h]h)}(hj h](hList registered nodes with the }(hj hhhNhNubj)}(h``list-nodes``h]h list-nodes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh command.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK2hj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hjList all error counters in an node with the ``get-error-counter`` command with ``node-id`` as a parameter.h]h)}(hjList all error counters in an node with the ``get-error-counter`` command with ``node-id`` as a parameter.h](h,List all error counters in an node with the }(hj hhhNhNubj)}(h``get-error-counter``h]hget-error-counter}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh command with }(hj hhhNhNubj)}(h ``node-id``h]hnode-id}(hj- hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh as a parameter.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK3hj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hQuery specific error counter values with the ``get-error-counter`` command, using both ``node-id`` and ``error-id`` as parameters. h]h)}(hQuery specific error counter values with the ``get-error-counter`` command, using both ``node-id`` and ``error-id`` as parameters.h](h-Query specific error counter values with the }(hjO hhhNhNubj)}(h``get-error-counter``h]hget-error-counter}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh command, using both }(hjO hhhNhNubj)}(h ``node-id``h]hnode-id}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh and }(hjO hhhNhNubj)}(h ``error-id``h]herror-id}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO ubh as parameters.}(hjO hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjK ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhK2hj hhubh)}(hhh](h)}(hYAML-based Interfaceh]hYAML-based Interface}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK9ubh)}(h_The interface is described in a YAML specification ``Documentation/netlink/specs/drm_ras.yaml``h](h3The interface is described in a YAML specification }(hj hhhNhNubj)}(h,``Documentation/netlink/specs/drm_ras.yaml``h]h(Documentation/netlink/specs/drm_ras.yaml}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1hhhhK;hj hhubh)}(hThis 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.h](h;This YAML is used to auto-generate user space bindings via }(hj hhhNhNubj)}(h$``tools/net/ynl/pyynl/ynl_gen_c.py``h]h tools/net/ynl/pyynl/ynl_gen_c.py}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh@, and drives the structure of netlink attributes and operations.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK=hj hhubeh}(h]yaml-based-interfaceah ]h"]yaml-based interfaceah$]h&]uh1hhj hhhhhK9ubh)}(hhh](h)}(h Usage Notesh]h Usage Notes}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKBubh)}(hhh](j)}(h:User space must first enumerate nodes to obtain their IDs.h]h)}(hj h]h:User space must first enumerate nodes to obtain their IDs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKDhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hSNode IDs or Node names can be used for all further queries, such as error counters.h]h)}(hj! h]hSNode IDs or Node names can be used for all further queries, such as error counters.}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKEhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hCError counters can be queried by either the Error ID or Error name.h]h)}(hj8 h]hCError counters can be queried by either the Error ID or Error name.}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKFhj6 ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hZQuery Parameters should be defined as part of the uAPI to ensure user interface stability.h]h)}(hjO h]hZQuery Parameters should be defined as part of the uAPI to ensure user interface stability.}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKGhjM ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(h\The interface supports future extension by adding new node types and additional attributes. h]h)}(h[The interface supports future extension by adding new node types and additional attributes.h]h[The interface supports future extension by adding new node types and additional attributes.}(hjh hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjd ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhKDhj hhubh)}(hExample: List nodes using ynlh]hExample: List nodes using ynl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj hhubh literal_block)}(hXsudo 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'}]h]hXsudo 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'}]}hj sbah}(h]h ]h"]h$]h&]hhƌforcelanguagebashhighlight_args}uh1j hhhKMhj hhubh)}(h*Example: List all error counters using ynlh]h*Example: List all error counters using ynl}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKYhj hhubj )}(hsudo 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}]h]hsudo 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}]}hj sbah}(h]h ]h"]h$]h&]hhj j bashj }uh1j hhhK[hj hhubh)}(h0Example: Query an error counter for a given nodeh]h0Example: Query an error counter for a given node}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKahj hhubj )}(hsudo 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}h]hsudo 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}}hj sbah}(h]h ]h"]h$]h&]hhj j bashj }uh1j hhhKchj hhubeh}(h] usage-notesah ]h"] usage notesah$]h&]uh1hhj hhhhhKBubeh}(h]generic-netlink-usageah ]h"]generic netlink usageah$]h&]uh1hhhhhhhhK-ubeh}(h]drm-ras-over-generic-netlinkah ]h"]drm ras over generic netlinkah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(j j j j j j j j j j j j u nametypes}(j j j j j j uh}(j hj jj jjjjjj] jb j j j j j j u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.