sphinx.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&]refidid1uh1hhhhhhhhKubh 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.}(hj hhhNhNubah}(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.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj4ubah}(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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjLubah}(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.}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjdubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1hhhhKhhhhubhtopic)}(h Contents h](h)}(hContentsh]hContents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhKubh)}(hhh]j)}(hhh](h)}(hhh]h reference)}(hhh]hDRM RAS over Generic Netlink}(hjhhhNhNubah}(h]hah ]h"]h$]h&]refiddrm-ras-over-generic-netlinkuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh](j)}(hhh](h)}(hhh]j)}(hhh]hNodes}(hjhhhNhNubah}(h]id2ah ]h"]h$]h&]refidnodesuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh]j)}(hhh]h)}(hhh]j)}(hhh]hNode Management}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]refidnode-managementuh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](h)}(hhh]j)}(hhh]hGeneric Netlink Usage}(hjhhhNhNubah}(h]id4ah ]h"]h$]h&]refidgeneric-netlink-usageuh1jhj ubah}(h]h ]h"]h$]h&]uh1hhjubh)}(hhh](j)}(hhh]h)}(hhh]j)}(hhh]hYAML-based Interface}(hj-hhhNhNubah}(h]id5ah ]h"]h$]h&]refidyaml-based-interfaceuh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]h)}(hhh]j)}(hhh]h Usage Notes}(hjOhhhNhNubah}(h]id6ah ]h"]h$]h&]refid usage-notesuh1jhjLubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhjhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1jhhhKhhhhubh)}(hhh](h)}(hNodesh]hNodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjhhhhhKubh)}(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&]uh1hhhhK hjhhubh)}(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&]hjuh1hhjhhhhhK'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:41: ./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}(hj hhhNhNubah}(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:41: ./drivers/gpu/drm/drm_ras.chKhjhhubh)}(hMA Generic Netlink family `drm_ras` exposes the below operations to userspace:h](hA Generic Netlink family }(hj&hhhNhNubj)}(h `drm_ras`h]hdrm_ras}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh+ exposes the below operations to userspace:}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./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.}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKhjLubah}(h]h ]h"]h$]h&]uh1jhjIubj)}(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.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK!hjeubah}(h]h ]h"]h$]h&]uh1jhjIubj)}(hCLEAR_ERROR_COUNTER: Clear error counter of a given node. Userspace must provide Node ID, Error ID. Clears specific error counter of a node if supported. h]h)}(hCLEAR_ERROR_COUNTER: Clear error counter of a given node. Userspace must provide Node ID, Error ID. Clears specific error counter of a node if supported.h]hCLEAR_ERROR_COUNTER: Clear error counter of a given node. Userspace must provide Node ID, Error ID. Clears specific error counter of a node if supported.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK&hj~ubah}(h]h ]h"]h$]h&]uh1jhjIubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jGhjhhhNhNubh)}(hNode registration:h]hNode registration:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./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:41: ./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:41: ./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:41: ./drivers/gpu/drm/drm_ras.chK1hjhhubh)}(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:41: ./drivers/gpu/drm/drm_ras.chK=hj ubh definition)}(hhh]h)}(hhh](j)}(h-Currently, only error counters are supported.h]h)}(hj)h]h-Currently, only error counters are supported.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK4hj'ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(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.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK5hj?ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(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.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK7hjXubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(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.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK9hjqubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chK;hjubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]j+uh1hhj8hK4hj!ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhK=hjubah}(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:41: ./drivers/gpu/drm/drm_ras.chK3hjhhubh)}(hNetlink handlers:h]hNetlink handlers:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./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:41: ./drivers/gpu/drm/drm_ras.chKAhjubah}(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:41: ./drivers/gpu/drm/drm_ras.chKChjubah}(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:41: ./drivers/gpu/drm/drm_ras.chKEhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hdrm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit operation, clearing a counter value from a specific node. h]h)}(hdrm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit operation, clearing a counter value from a specific node.h]hdrm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit operation, clearing a counter value from a specific node.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.chKGhj&ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jjuh1hhjhKAhjhhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](single)drm_ras_nl_list_nodes_dumpit (C function)c.drm_ras_nl_list_nodes_dumpithNtauh1jEhjhhhNhNubhdesc)}(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}(hjihhhNhNubah}(h]h ]ktah"]h$]h&]uh1jghjchhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKXubhdesc_sig_space)}(h h]h }(hj{hhhNhNubah}(h]h ]wah"]h$]h&]uh1jyhjchhhjxhKXubh desc_name)}(hdrm_ras_nl_list_nodes_dumpith]h desc_sig_name)}(hdrm_ras_nl_list_nodes_dumpith]hdrm_ras_nl_list_nodes_dumpit}(hjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jhjchhhjxhKXubhdesc_parameterlist)}(h2(struct sk_buff *skb, struct netlink_callback *cb)h](hdesc_parameter)}(hstruct sk_buff *skbh](hdesc_sig_keyword)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubjz)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomaincreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.drm_ras_nl_list_nodes_dumpitasbuh1hhjubjz)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubhdesc_sig_punctuation)}(hjh]h*}(hjhhhNhNubah}(h]h ]pah"]h$]h&]uh1jhjubj)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(hstruct netlink_callback *cbh](j)}(hjh]hstruct}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubjz)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj3ubh)}(hhh]j)}(hnetlink_callbackh]hnetlink_callback}(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNjj)}j]jc.drm_ras_nl_list_nodes_dumpitasbuh1hhj3ubjz)}(h h]h }(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj3ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubj)}(hcbh]hcb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjchhhjxhKXubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1jasphinx_line_type declaratorhj]hhhjxhKXubah}(h]jTah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j[hjxhKXhjXhhubh 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:43: ./drivers/gpu/drm/drm_ras.chKXhjhhubah}(h]h ]h"]h$]h&]uh1jhjXhhhjxhKXubeh}(h]h ](jfunctioneh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1jVhhhjhNhNubh 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:43: ./drivers/gpu/drm/drm_ras.chK\hjubj)}(hhh](j )}(h/``struct sk_buff *skb`` Netlink message buffer h](j)}(h``struct sk_buff *skb``h]hliteral)}(hj h]hstruct sk_buff *skb}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKYhjubj )}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$hKYhj%ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj$hKYhjubj )}(hF``struct netlink_callback *cb`` Callback context for multi-part dumps h](j)}(h``struct netlink_callback *cb``h]j)}(hjHh]hstruct netlink_callback *cb}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKZhjBubj )}(hhh]h)}(h%Callback context for multi-part dumpsh]h%Callback context for multi-part dumps}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hKZhj^ubah}(h]h ]h"]h$]h&]uh1jhjBubeh}(h]h ]h"]h$]h&]uh1jhj]hKZhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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:43: ./drivers/gpu/drm/drm_ras.chK\hjubh)}(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 }(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:43: ./drivers/gpu/drm/drm_ras.chK[hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKahjubh)}(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:43: ./drivers/gpu/drm/drm_ras.chKbhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjF)}(hhh]h}(h]h ]h"]h$]h&]entries](jR0drm_ras_nl_get_error_counter_dumpit (C function)%c.drm_ras_nl_get_error_counter_dumpithNtauh1jEhjhhhNhNubjW)}(hhh](j\)}(hZint drm_ras_nl_get_error_counter_dumpit (struct sk_buff *skb, struct netlink_callback *cb)h]jb)}(hYint drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb, struct netlink_callback *cb)h](jh)}(hinth]hint}(hj%hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj!hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKubjz)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj!hhhj3hKubj)}(h#drm_ras_nl_get_error_counter_dumpith]j)}(h#drm_ras_nl_get_error_counter_dumpith]h#drm_ras_nl_get_error_counter_dumpit}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBubah}(h]h ](jjeh"]h$]h&]hhuh1jhj!hhhj3hKubj)}(h2(struct sk_buff *skb, struct netlink_callback *cb)h](j)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubjz)}(h h]h }(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj^ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j)}jjHsb%c.drm_ras_nl_get_error_counter_dumpitasbuh1hhj^ubjz)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj^ubj)}(hjh]h*}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubj)}(hskbh]hskb}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZubj)}(hstruct netlink_callback *cbh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjz)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubh)}(hhh]j)}(hnetlink_callbackh]hnetlink_callback}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j%c.drm_ras_nl_get_error_counter_dumpitasbuh1hhjubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hcbh]hcb}(hj+ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZubeh}(h]h ]h"]h$]h&]hhuh1jhj!hhhj3hKubeh}(h]h ]h"]h$]h&]hhjuh1jajjhjhhhj3hKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j[hj3hKhjhhubj)}(hhh]h)}(hDump all Error Countersh]hDump all Error Counters}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhjR hhubah}(h]h ]h"]h$]h&]uh1jhjhhhj3hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjm jjm jjjuh1jVhhhjhNhNubj)}(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)}(hjw h]h Parameters}(hjy hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhjq 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:43: ./drivers/gpu/drm/drm_ras.chKhj ubj )}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj )}(hF``struct netlink_callback *cb`` Callback context for multi-part dumps h](j)}(h``struct netlink_callback *cb``h]j)}(hj h]hstruct netlink_callback *cb}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhj ubj )}(hhh]h)}(h%Callback context for multi-part dumpsh]h%Callback context for multi-part dumps}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubeh}(h]h ]h"]h$]h&]uh1jhjq ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhjq 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 }(hj hhhNhNubj)}(h **cb->ctx**h]hcb->ctx}(hj( hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh 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.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhjq ubh)}(h **Return**h]j)}(hjC h]hReturn}(hjE hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhjq 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 }(hjY hhhNhNubj)}(h**skb**h]hskb}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY ubh, number of bytes added to }(hjY hhhNhNubj)}(h**skb**h]hskb}(hjs hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY ubha if the buffer filled up (requires multi-part continuation), or a negative error code on failure.}(hjY hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chKhjq ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjF)}(hhh]h}(h]h ]h"]h$]h&]entries](jR.drm_ras_nl_get_error_counter_doit (C function)#c.drm_ras_nl_get_error_counter_doithNtauh1jEhjhhhNhNubjW)}(hhh](j\)}(hSint drm_ras_nl_get_error_counter_doit (struct sk_buff *skb, struct genl_info *info)h]jb)}(hRint drm_ras_nl_get_error_counter_doit(struct sk_buff *skb, struct genl_info *info)h](jh)}(hinth]hint}(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chM)ubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj hhhj hM)ubj)}(h!drm_ras_nl_get_error_counter_doith]j)}(h!drm_ras_nl_get_error_counter_doith]h!drm_ras_nl_get_error_counter_doit}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hM)ubj)}(h-(struct sk_buff *skb, struct genl_info *info)h](j)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j)}jj sb#c.drm_ras_nl_get_error_counter_doitasbuh1hhj ubjz)}(h h]h }(hj' hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubj)}(hjh]h*}(hj5 hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hskbh]hskb}(hjB hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hstruct genl_info *infoh](j)}(hjh]hstruct}(hj[ hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubjz)}(h h]h }(hjh hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjW ubh)}(hhh]j)}(h genl_infoh]h genl_info}(hjy hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjv ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj{ modnameN classnameNjj)}j]j# #c.drm_ras_nl_get_error_counter_doitasbuh1hhjW ubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhjW ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubj)}(hinfoh]hinfo}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hM)ubeh}(h]h ]h"]h$]h&]hhjuh1jajjhj hhhj hM)ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j[hj 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:43: ./drivers/gpu/drm/drm_ras.chM)hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hM)ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1jVhhhjhNhNubj)}(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:43: ./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:43: ./drivers/gpu/drm/drm_ras.chM*hj ubj )}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hj6 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2 hM*hj3 ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj2 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)}(hjV h]hstruct genl_info *info}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT ubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chM+hjP ubj )}(hhh]h)}(h9Generic Netlink info containing attributes of the requesth]h9Generic Netlink info containing attributes of the request}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk hM+hjl ubah}(h]h ]h"]h$]h&]uh1jhjP ubeh}(h]h ]h"]h$]h&]uh1jhjk hM+hj ubeh}(h]h ]h"]h$]h&]uh1jhj ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./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.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chM,hj ubh)}(h **Return**h]j)}(hj h]hReturn}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chM0hj 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:43: ./drivers/gpu/drm/drm_ras.chM1hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubjF)}(hhh]h}(h]h ]h"]h$]h&]entries](jR0drm_ras_nl_clear_error_counter_doit (C function)%c.drm_ras_nl_clear_error_counter_doithNtauh1jEhjhhhNhNubjW)}(hhh](j\)}(hUint drm_ras_nl_clear_error_counter_doit (struct sk_buff *skb, struct genl_info *info)h]jb)}(hTint drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb, struct genl_info *info)h](jh)}(hinth]hint}(hj hhhNhNubah}(h]h ]jtah"]h$]h&]uh1jghj hhhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMDubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj hhhj hMDubj)}(h#drm_ras_nl_clear_error_counter_doith]j)}(h#drm_ras_nl_clear_error_counter_doith]h#drm_ras_nl_clear_error_counter_doit}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ](jjeh"]h$]h&]hhuh1jhj hhhj hMDubj)}(h-(struct sk_buff *skb, struct genl_info *info)h](j)}(hstruct sk_buff *skbh](j)}(hjh]hstruct}(hj: hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 ubjz)}(h h]h }(hjG hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj6 ubh)}(hhh]j)}(hsk_buffh]hsk_buff}(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjZ modnameN classnameNjj)}j]j)}jj sb%c.drm_ras_nl_clear_error_counter_doitasbuh1hhj6 ubjz)}(h h]h }(hjx hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj6 ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 ubj)}(hskbh]hskb}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6 ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj2 ubj)}(hstruct genl_info *infoh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubh)}(hhh]j)}(h genl_infoh]h genl_info}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jt %c.drm_ras_nl_clear_error_counter_doitasbuh1hhj ubjz)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jyhj ubj)}(hjh]h*}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hinfoh]hinfo}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj2 ubeh}(h]h ]h"]h$]h&]hhuh1jhj hhhj hMDubeh}(h]h ]h"]h$]h&]hhjuh1jajjhj hhhj hMDubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j[hj hMDhj hhubj)}(hhh]h)}(h Clear an error counter of a nodeh]h Clear an error counter of a node}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMDhj*hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hMDubeh}(h]h ](jfunctioneh"]h$]h&]jjjjEjjEjjjuh1jVhhhjhNhNubj)}(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 clears the current value. **Return** 0 on success, or negative errno on failure.h](h)}(h**Parameters**h]j)}(hjOh]h Parameters}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMHhjIubj)}(hhh](j )}(h/``struct sk_buff *skb`` Netlink message buffer h](j)}(h``struct sk_buff *skb``h]j)}(hjnh]hstruct sk_buff *skb}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMEhjhubj )}(hhh]h)}(hNetlink message bufferh]hNetlink message buffer}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMEhjubah}(h]h ]h"]h$]h&]uh1jhjhubeh}(h]h ]h"]h$]h&]uh1jhjhMEhjeubj )}(hU``struct genl_info *info`` Generic Netlink info containing attributes of the request h](j)}(h``struct genl_info *info``h]j)}(hjh]hstruct genl_info *info}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMFhjubj )}(hhh]h)}(h9Generic Netlink info containing attributes of the requesth]h9Generic Netlink info containing attributes of the request}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMFhjeubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(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:43: ./drivers/gpu/drm/drm_ras.chMHhjIubh)}(h[Extracts the node ID and error ID from the netlink attributes and clears the current value.h]h[Extracts the node ID and error ID from the netlink attributes and clears the current value.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMGhjIubh)}(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:43: ./drivers/gpu/drm/drm_ras.chMJhjIubh)}(h+0 on success, or negative errno on failure.h]h+0 on success, or negative errno on failure.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.chMKhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]jah ]h"]node managementah$]h&]uh1hhjhhhhhK'ubeh}(h]jah ]h"]nodesah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hGeneric Netlink Usageh]hGeneric Netlink Usage}(hjFhhhNhNubah}(h]h ]h"]h$]h&]hjuh1hhjChhhhhK/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 }(hjThhhNhNubj)}(h ``drm-ras``h]hdrm-ras}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjTubh. User space tools can:}(hjThhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK1hjChhubh)}(hhh](j)}(h6List registered nodes with the ``list-nodes`` command.h]h)}(hjyh](hList registered nodes with the }(hj{hhhNhNubj)}(h``list-nodes``h]h list-nodes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubh command.}(hj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK4hjwubah}(h]h ]h"]h$]h&]uh1jhjthhhhhNubj)}(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 }(hjhhhNhNubj)}(h``get-error-counter``h]hget-error-counter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh command with }(hjhhhNhNubj)}(h ``node-id``h]hnode-id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh as a parameter.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK5hjubah}(h]h ]h"]h$]h&]uh1jhjthhhhhNubj)}(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 }(hjhhhNhNubj)}(h``get-error-counter``h]hget-error-counter}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh command, using both }(hjhhhNhNubj)}(h ``node-id``h]hnode-id}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h ``error-id``h]herror-id}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh as parameters.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK7hjubah}(h]h ]h"]h$]h&]uh1jhjthhhhhNubj)}(hClear specific error counters with the ``clear-error-counter`` command, using both ``node-id`` and ``error-id`` as parameters. h]h)}(h~Clear specific error counters with the ``clear-error-counter`` command, using both ``node-id`` and ``error-id`` as parameters.h](h'Clear specific error counters with the }(hj.hhhNhNubj)}(h``clear-error-counter``h]hclear-error-counter}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh command, using both }(hj.hhhNhNubj)}(h ``node-id``h]hnode-id}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh and }(hj.hhhNhNubj)}(h ``error-id``h]herror-id}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubh as parameters.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK9hj*ubah}(h]h ]h"]h$]h&]uh1jhjthhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhK4hjChhubh)}(hhh](h)}(hYAML-based Interfaceh]hYAML-based Interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]hj6uh1hhj~hhhhhK=ubh)}(h_The interface is described in a YAML specification ``Documentation/netlink/specs/drm_ras.yaml``h](h3The interface is described in a YAML specification }(hjhhhNhNubj)}(h,``Documentation/netlink/specs/drm_ras.yaml``h]h(Documentation/netlink/specs/drm_ras.yaml}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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 }(hjhhhNhNubj)}(h$``tools/net/ynl/pyynl/ynl_gen_c.py``h]h tools/net/ynl/pyynl/ynl_gen_c.py}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh@, and drives the structure of netlink attributes and operations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKAhj~hhubeh}(h]j<ah ]h"]yaml-based interfaceah$]h&]uh1hhjChhhhhK=ubh)}(hhh](h)}(h Usage Notesh]h Usage Notes}(hjhhhNhNubah}(h]h ]h"]h$]h&]hjXuh1hhjhhhhhKFubh)}(hhh](j)}(h:User space must first enumerate nodes to obtain their IDs.h]h)}(hjh]h:User space must first enumerate nodes to obtain their IDs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hSNode IDs or Node names can be used for all further queries, such as error counters.h]h)}(hjh]hSNode IDs or Node names can be used for all further queries, such as error counters.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKIhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hCError counters can be queried by either the Error ID or Error name.h]h)}(hjh]hCError counters can be queried by either the Error ID or Error name.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKJhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hZQuery Parameters should be defined as part of the uAPI to ensure user interface stability.h]h)}(hj-h]hZQuery Parameters should be defined as part of the uAPI to ensure user interface stability.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj+ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(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.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKLhjBubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jjuh1hhhhKHhjhhubh)}(hExample: List nodes using ynlh]hExample: List nodes using ynl}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjhhubh 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'}]}hjpsbah}(h]h ]h"]h$]h&]hhƌforcelanguagebashhighlight_args}uh1jnhhhKQhjhhubh)}(h*Example: List all error counters using ynlh]h*Example: List all error counters using ynl}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK]hjhhubjo)}(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}]}hjsbah}(h]h ]h"]h$]h&]hhj~jbashj}uh1jnhhhK_hjhhubh)}(h0Example: Query an error counter for a given nodeh]h0Example: Query an error counter for a given node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKehjhhubjo)}(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}}hjsbah}(h]h ]h"]h$]h&]hhj~jbashj}uh1jnhhhKghjhhubh)}(h0Example: Clear an error counter for a given nodeh]h0Example: Clear an error counter for a given node}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKlhjhhubjo)}(h\sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}' Noneh]h\sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}' None}hjsbah}(h]h ]h"]h$]h&]hhj~jbashj}uh1jnhhhKnhjhhubeh}(h]j^ah ]h"] usage notesah$]h&]uh1hhjChhhhhKFubeh}(h]jah ]h"]generic netlink usageah$]h&]uh1hhhhhhhhK/ubeh}(h]jah ]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}(jjjjj@jj9jjjjj<jj^u nametypes}(jjj@j9jjjuh}(jhjjjjjjjTj]jjj j j j jjCj<j~j^jhjjjjjjjj6j-jXjOu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j#KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.