€• Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ/translations/zh_CN/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/zh_TW/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/pt_BR/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/sp_SP/gpu/drm-ras”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ!SPDX-License-Identifier: GPL-2.0+”h]”hŒ!SPDX-License-Identifier: GPL-2.0+”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ9/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒDRM RAS over Generic Netlink”h]”hŒDRM RAS over Generic Netlink”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œid1”uh1hÍhhÊh²hh³hÇh´KubhŒ 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.”…”�”}”(hháh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KhhÊh²hubhà)�”}”(hŒ Key Goals:”h]”hŒ Key Goals:”…”�”}”(hhïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K hhÊh²hubhŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ€Provide a standardized RAS solution for GPU and accelerator drivers, enabling data center monitoring and reliability operations.”h]”hà)�”}”(hŒ€Provide a standardized RAS solution for GPU and accelerator drivers, enabling data center monitoring and reliability operations.”h]”hŒ€Provide a standardized RAS solution for GPU and accelerator drivers, enabling data center monitoring and reliability operations.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿh²hh³hÇh´Nubj)�”}”(hŒ›Implement a single drm-ras Generic Netlink family to meet modern Netlink YAML specifications and centralize all RAS-related communication in one namespace.”h]”hà)�”}”(hŒ›Implement a single drm-ras Generic Netlink family to meet modern Netlink YAML specifications and centralize all RAS-related communication in one namespace.”h]”hŒ›Implement a single drm-ras Generic Netlink family to meet modern Netlink YAML specifications and centralize all RAS-related communication in one namespace.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿh²hh³hÇh´Nubj)�”}”(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.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿh²hh³hÇh´Nubj)�”}”(hŒtOffer a flexible, future-proof interface that can be extended to support additional types of RAS data in the future.”h]”hà)�”}”(hŒtOffer a flexible, future-proof interface that can be extended to support additional types of RAS data in the future.”h]”hŒtOffer a flexible, future-proof interface that can be extended to support additional types of RAS data in the future.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿh²hh³hÇh´Nubj)�”}”(hŒŸAllow multiple nodes per driver, enabling drivers to register separate nodes for different IP blocks, sub-blocks, or other logical subdivisions as applicable. ”h]”hà)�”}”(hŒžAllow multiple nodes per driver, enabling drivers to register separate nodes for different IP blocks, sub-blocks, or other logical subdivisions as applicable.”h]”hŒžAllow multiple nodes per driver, enabling drivers to register separate nodes for different IP blocks, sub-blocks, or other logical subdivisions as applicable.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´Khjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhÿh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ*”uh1hýh³hÇh´KhhÊh²hubhŒtopic”“”)�”}”(hŒ Contents ”h]”(hÎ)�”}”(hŒContents”h]”hŒContents”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj†h³hÇh´Kubhþ)�”}”(hhh]”j)�”}”(hhh]”(hà)�”}”(hhh]”hŒ reference”“”)�”}”(hhh]”hŒDRM RAS over Generic Netlink”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”hÞah ]”h"]”h$]”h&]”Œrefid”Œdrm-ras-over-generic-netlink”uh1j¡hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj›ubhþ)�”}”(hhh]”(j)�”}”(hhh]”(hà)�”}”(hhh]”j¢)�”}”(hhh]”hŒNodes”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”Œrefid”Œnodes”uh1j¡hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj»ubhþ)�”}”(hhh]”j)�”}”(hhh]”hà)�”}”(hhh]”j¢)�”}”(hhh]”hŒNode Management”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”Œrefid”Œnode-management”uh1j¡hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýhj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸ubj)�”}”(hhh]”(hà)�”}”(hhh]”j¢)�”}”(hhh]”hŒGeneric Netlink Usage”…”�”}”(hjh²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”Œrefid”Œgeneric-netlink-usage”uh1j¡hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjubhþ)�”}”(hhh]”(j)�”}”(hhh]”hà)�”}”(hhh]”j¢)�”}”(hhh]”hŒYAML-based Interface”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”Œid5”ah ]”h"]”h$]”h&]”Œrefid”Œyaml-based-interface”uh1j¡hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubj)�”}”(hhh]”hà)�”}”(hhh]”j¢)�”}”(hhh]”hŒ Usage Notes”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”Œid6”ah ]”h"]”h$]”h&]”Œrefid”Œ usage-notes”uh1j¡hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1hßhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hýhj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hýhj†h²hh³Nh´Nubeh}”(h]”Œcontents”ah ]”Œcontents”ah"]”Œcontents”ah$]”h&]”uh1j„h³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒNodes”h]”hŒNodes”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjÊuh1hÍhj’h²hh³hÇh´Kubhà)�”}”(hŒŽNodes are logical abstractions representing an error type or error source within the device. Currently, only error counter nodes is supported.”h]”hŒŽNodes are logical abstractions representing an error type or error source within the device. Currently, only error counter nodes is supported.”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K hj’h²hubhà)�”}”(hŒ‡Drivers are responsible for registering and unregistering nodes via the `drm_ras_node_register()` and `drm_ras_node_unregister()` APIs.”h]”(hŒHDrivers are responsible for registering and unregistering nodes via the ”…”�”}”(hj±h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`drm_ras_node_register()`”h]”hŒdrm_ras_node_register()”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj±ubhŒ and ”…”�”}”(hj±h²hh³Nh´Nubjº)�”}”(hŒ`drm_ras_node_unregister()`”h]”hŒdrm_ras_node_unregister()”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj±ubhŒ APIs.”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K#hj’h²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒNode Management”h]”hŒNode Management”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjéuh1hÍhjåh²hh³hÇh´K'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.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´Khjåh²hubhà)�”}”(hŒ•The 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 ”…”�”}”(hjh²hh³Nh´Nubjº)�”}”(hŒ `drm_ras_xa`”h]”hŒ drm_ras_xa”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hjubhŒa to allow efficient lookup by ID. Nodes can be registered or unregistered dynamically at runtime.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´Khjåh²hubhà)�”}”(hŒMA Generic Netlink family `drm_ras` exposes the below operations to userspace:”h]”(hŒA Generic Netlink family ”…”�”}”(hj&h²hh³Nh´Nubjº)�”}”(hŒ `drm_ras`”h]”hŒdrm_ras”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j¹hj&ubhŒ+ exposes the below operations to userspace:”…”�”}”(hj&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´Khjåh²hubhŒenumerated_list”“”)�”}”(hhh]”(j)�”}”(hŒoLIST_NODES: Dump all currently registered RAS nodes. The user receives an array of node IDs, names, and types. ”h]”hà)�”}”(hŒnLIST_NODES: Dump all currently registered RAS nodes. The user receives an array of node IDs, names, and types.”h]”hŒnLIST_NODES: Dump all currently registered RAS nodes. The user receives an array of node IDs, names, and types.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´KhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubj)�”}”(hŒØGET_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à)�”}”(hŒ×GET_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Œ×GET_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.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K!hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubj)�”}”(hŒšCLEAR_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à)�”}”(hŒ™CLEAR_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Œ™CLEAR_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.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K&hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jGhjåh²hh³Nh´Nubhà)�”}”(hŒNode registration:”h]”hŒNode registration:”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K*hjåh²hubhþ)�”}”(hhh]”(j)�”}”(hŒWdrm_ras_node_register(): Registers a new node and assigns it a unique ID in the xarray.”h]”hà)�”}”(hŒWdrm_ras_node_register(): Registers a new node and assigns it a unique ID in the xarray.”h]”hŒWdrm_ras_node_register(): Registers a new node and assigns it a unique ID in the xarray.”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K,hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubj)�”}”(hŒQdrm_ras_node_unregister(): Removes a previously registered node from the xarray. ”h]”hà)�”}”(hŒPdrm_ras_node_unregister(): Removes a previously registered node from the xarray.”h]”hŒPdrm_ras_node_unregister(): Removes a previously registered node from the xarray.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K.hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubeh}”(h]”h ]”h"]”h$]”h&]”j‚Œ-”uh1hýh³jÆh´K,hjåh²hubhà)�”}”(hŒ Node type:”h]”hŒ Node type:”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K1hjåh²hubhþ)�”}”(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]”hŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_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]”(hŒterm”“”)�”}”(hŒERROR_COUNTER:”h]”hŒERROR_COUNTER:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K=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+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K4hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubj)�”}”(hŒtThe driver must implement the query_error_counter() callback to provide the name and the value of the error counter.”h]”hà)�”}”(hŒtThe driver must implement the query_error_counter() callback to provide the name and the value of the error counter.”h]”hŒtThe driver must implement the query_error_counter() callback to provide the name and the value of the error counter.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K5hj?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\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K7hjXubah}”(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.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K9hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubj)�”}”(hŒÐ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]”hà)�”}”(hŒÏ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]”hŒÑ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.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K;hjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubeh}”(h]”h ]”h"]”h$]”h&]”j‚Œ+”uh1hýh³j8h´K4hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´K=hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüubah}”(h]”h ]”h"]”h$]”h&]”j‚jìuh1hýh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K3hjåh²hubhà)�”}”(hŒNetlink handlers:”h]”hŒNetlink handlers:”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´K?hjåh²hubhþ)�”}”(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.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´KAhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubj)�”}”(hŒ…drm_ras_nl_get_error_counter_dumpit(): Implements the GET_ERROR_COUNTER dumpit operation, fetching all counters from a specific node.”h]”hà)�”}”(hŒ…drm_ras_nl_get_error_counter_dumpit(): Implements the GET_ERROR_COUNTER dumpit operation, fetching all counters from a specific node.”h]”hŒ…drm_ras_nl_get_error_counter_dumpit(): Implements the GET_ERROR_COUNTER dumpit operation, fetching all counters from a specific node.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´KChjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubj)�”}”(hŒ„drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit operation, fetching a counter value from a specific node.”h]”hà)�”}”(hŒ„drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit operation, fetching a counter value from a specific node.”h]”hŒ„drm_ras_nl_get_error_counter_doit(): Implements the GET_ERROR_COUNTER doit operation, fetching a counter value from a specific node.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´KEhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubj)�”}”(hŒŠdrm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit operation, clearing a counter value from a specific node. ”h]”hà)�”}”(hŒˆdrm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit operation, clearing a counter value from a specific node.”h]”hŒˆdrm_ras_nl_clear_error_counter_doit(): Implements the CLEAR_ERROR_COUNTER doit operation, clearing a counter value from a specific node.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:41: ./drivers/gpu/drm/drm_ras.c”h´KGhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubeh}”(h]”h ]”h"]”h$]”h&]”j‚jìuh1hýh³jíh´KAhjåh²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œ)drm_ras_nl_list_nodes_dumpit (C function)”Œc.drm_ras_nl_list_nodes_dumpit”hNt”auh1jEhjåh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒSint drm_ras_nl_list_nodes_dumpit (struct sk_buff *skb, struct netlink_callback *cb)”h]”hŒdesc_signature_line”“”)�”}”(hŒRint drm_ras_nl_list_nodes_dumpit(struct sk_buff *skb, struct netlink_callback *cb)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒint”h]”hŒint”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jghjch²hh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´KXubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jyhjch²hh³jxh´KXubhŒ desc_name”“”)�”}”(hŒdrm_ras_nl_list_nodes_dumpit”h]”hŒ desc_sig_name”“”)�”}”(hŒdrm_ras_nl_list_nodes_dumpit”h]”hŒdrm_ras_nl_list_nodes_dumpit”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j�hjŒubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”hÅhÆuh1jŠhjch²hh³jxh´KXubhŒdesc_parameterlist”“”)�”}”(hŒ2(struct sk_buff *skb, struct netlink_callback *cb)”h]”(hŒdesc_parameter”“”)�”}”(hŒstruct sk_buff *skb”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1jµhj±ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj±ubh)�”}”(hhh]”j‘)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”Œc”Œreftype”Œ identifier”Œ reftarget”jÙŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jóŒ ASTIdentifier”“”)�”}”jîj”sbŒc.drm_ras_nl_list_nodes_dumpit”†”asbuh1hhj±ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj±ubhŒdesc_sig_punctuation”“”)�”}”(hjƒh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jhj±ubj‘)�”}”(hŒskb”h]”hŒskb”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hj«ubj°)�”}”(hŒstruct netlink_callback *cb”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj3ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj3ubh)�”}”(hhh]”j‘)�”}”(hŒnetlink_callback”h]”hŒnetlink_callback”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”jWŒmodname”NŒ classname”Njòjõ)�”}”jø]”jüŒc.drm_ras_nl_list_nodes_dumpit”†”asbuh1hhj3ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj3ubj)�”}”(hjƒh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubj‘)�”}”(hŒcb”h]”hŒcb”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hj«ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j©hjch²hh³jxh´KXubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆŒ add_permalink”ˆuh1jaŒsphinx_line_type”Œ declarator”hj]h²hh³jxh´KXubah}”(h]”jTah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1j[h³jxh´KXhjXh²hubhŒ desc_content”“”)�”}”(hhh]”hà)�”}”(hŒDump all registered RAS nodes”h]”hŒDump all registered RAS nodes”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´KXhj¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjXh²hh³jxh´KXubeh}”(h]”h ]”(jìŒfunction”eh"]”h$]”h&]”Œdomain”jìŒobjtype”jÚŒdesctype”jÚŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jVh²hhjåh³Nh´NubhŒ 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]”hŒstrong”“”)�”}”(hjìh]”hŒ Parameters”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´K\hjæubj)�”}”(hhh]”(j )�”}”(hŒ/``struct sk_buff *skb`` Netlink message buffer ”h]”(j)�”}”(hŒ``struct sk_buff *skb``”h]”hŒliteral”“”)�”}”(hj h]”hŒstruct sk_buff *skb”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´KYhjubj )�”}”(hhh]”hà)�”}”(hŒNetlink message buffer”h]”hŒNetlink message buffer”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³j$h´KYhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$h´KYhjubj )�”}”(hŒF``struct netlink_callback *cb`` Callback context for multi-part dumps ”h]”(j)�”}”(hŒ``struct netlink_callback *cb``”h]”j)�”}”(hjHh]”hŒstruct netlink_callback *cb”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´KZhjBubj )�”}”(hhh]”hà)�”}”(hŒ%Callback context for multi-part dumps”h]”hŒ%Callback context for multi-part dumps”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³j]h´KZhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]h´KZhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjæubhà)�”}”(hŒ**Description**”h]”jï)�”}”(hjƒh]”hŒ Description”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´K\hjæubhà)�”}”(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]”(hŒ”Iterates over all registered RAS nodes in the global xarray and appends their attributes (ID, name, type) to the given netlink message buffer. Uses ”…”�”}”(hj™h²hh³Nh´Nubjï)�”}”(hŒ **cb->ctx**”h]”hŒcb->ctx”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj™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™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´K[hjæubhà)�”}”(hŒ **Return**”h]”jï)�”}”(hj¼h]”hŒReturn”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kahjæubhà)�”}”(hŒ 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Œ0 if all nodes fit in ”…”�”}”(hjÒh²hh³Nh´Nubjï)�”}”(hŒ**skb**”h]”hŒskb”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjÒubhŒ, number of bytes added to ”…”�”}”(hjÒh²hh³Nh´Nubjï)�”}”(hŒ**skb**”h]”hŒskb”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjÒubhŒa if the buffer filled up (requires multi-part continuation), or a negative error code on failure.”…”�”}”(hjÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kbhjæubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jähjåh²hh³Nh´NubjF)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jRŒ0drm_ras_nl_get_error_counter_dumpit (C function)”Œ%c.drm_ras_nl_get_error_counter_dumpit”hNt”auh1jEhjåh²hh³Nh´NubjW)�”}”(hhh]”(j\)�”}”(hŒZint drm_ras_nl_get_error_counter_dumpit (struct sk_buff *skb, struct netlink_callback *cb)”h]”jb)�”}”(hŒYint drm_ras_nl_get_error_counter_dumpit(struct sk_buff *skb, struct netlink_callback *cb)”h]”(jh)�”}”(hŒint”h]”hŒint”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jtah"]”h$]”h&]”uh1jghj!h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kâubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj!h²hh³j3h´Kâubj‹)�”}”(hŒ#drm_ras_nl_get_error_counter_dumpit”h]”j‘)�”}”(hŒ#drm_ras_nl_get_error_counter_dumpit”h]”hŒ#drm_ras_nl_get_error_counter_dumpit”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjBubah}”(h]”h ]”(j¤j¥eh"]”h$]”h&]”hÅhÆuh1jŠhj!h²hh³j3h´Kâubjª)�”}”(hŒ2(struct sk_buff *skb, struct netlink_callback *cb)”h]”(j°)�”}”(hŒstruct sk_buff *skb”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj^ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj^ubh)�”}”(hhh]”j‘)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”j‚Œmodname”NŒ classname”Njòjõ)�”}”jø]”jû)�”}”jîjHsbŒ%c.drm_ras_nl_get_error_counter_dumpit”†”asbuh1hhj^ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj^ubj)�”}”(hjƒh]”hŒ*”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^ubj‘)�”}”(hŒskb”h]”hŒskb”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hjZubj°)�”}”(hŒstruct netlink_callback *cb”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjÐubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjÐubh)�”}”(hhh]”j‘)�”}”(hŒnetlink_callback”h]”hŒnetlink_callback”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”jôŒmodname”NŒ classname”Njòjõ)�”}”jø]”jœŒ%c.drm_ras_nl_get_error_counter_dumpit”†”asbuh1hhjÐubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjÐubj)�”}”(hjƒh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐubj‘)�”}”(hŒcb”h]”hŒcb”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hjZubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j©hj!h²hh³j3h´Kâubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¯ˆuh1jaj°j±hjh²hh³j3h´Kâubah}”(h]”jah ]”(jµj¶eh"]”h$]”h&]”jºˆj»)j¼huh1j[h³j3h´Kâhjh²hubj¾)�”}”(hhh]”hà)�”}”(hŒDump all Error Counters”h]”hŒDump all Error Counters”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´KâhjR h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjh²hh³j3h´Kâubeh}”(h]”h ]”(jìŒfunction”eh"]”h$]”h&]”jÞjìjßjm jàjm já‰jâ‰jã‰uh1jVh²hhjåh³Nh´Nubjå)�”}”(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 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhju ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kæhjq ubj)�”}”(hhh]”(j )�”}”(hŒ/``struct sk_buff *skb`` Netlink message buffer ”h]”(j)�”}”(hŒ``struct sk_buff *skb``”h]”j)�”}”(hj– h]”hŒstruct sk_buff *skb”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj” ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kãhj� ubj )�”}”(hhh]”hà)�”}”(hŒNetlink message buffer”h]”hŒNetlink message buffer”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³j« h´Kãhj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j« h´Kãhj� ubj )�”}”(hŒF``struct netlink_callback *cb`` Callback context for multi-part dumps ”h]”(j)�”}”(hŒ``struct netlink_callback *cb``”h]”j)�”}”(hjÏ h]”hŒstruct netlink_callback *cb”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´KähjÉ ubj )�”}”(hhh]”hà)�”}”(hŒ%Callback context for multi-part dumps”h]”hŒ%Callback context for multi-part dumps”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³jä h´Kähjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jä h´Kähj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjq ubhà)�”}”(hŒ**Description**”h]”jï)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kæhjq 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]”(hŒŠIterates over all error counters in a given Node and appends their attributes (ID, name, value) to the given netlink message buffer. Uses ”…”�”}”(hj h²hh³Nh´Nubjï)�”}”(hŒ **cb->ctx**”h]”hŒcb->ctx”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj 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 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kåhjq ubhà)�”}”(hŒ **Return**”h]”jï)�”}”(hjC h]”hŒReturn”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjA ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Këhjq ubhà)�”}”(hŒ¡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Œ0 if all errors fit in ”…”�”}”(hjY h²hh³Nh´Nubjï)�”}”(hŒ**skb**”h]”hŒskb”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjY ubhŒ, number of bytes added to ”…”�”}”(hjY h²hh³Nh´Nubjï)�”}”(hŒ**skb**”h]”hŒskb”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjY ubhŒa if the buffer filled up (requires multi-part continuation), or a negative error code on failure.”…”�”}”(hjY h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´Kìhjq ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jähjåh²hh³Nh´NubjF)�”}”(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_doit”hNt”auh1jEhjåh²hh³Nh´NubjW)�”}”(hhh]”(j\)�”}”(hŒSint drm_ras_nl_get_error_counter_doit (struct sk_buff *skb, struct genl_info *info)”h]”jb)�”}”(hŒRint drm_ras_nl_get_error_counter_doit(struct sk_buff *skb, struct genl_info *info)”h]”(jh)�”}”(hŒint”h]”hŒint”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”jtah"]”h$]”h&]”uh1jghj¨ h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M)ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj¨ h²hh³jº h´M)ubj‹)�”}”(hŒ!drm_ras_nl_get_error_counter_doit”h]”j‘)�”}”(hŒ!drm_ras_nl_get_error_counter_doit”h]”hŒ!drm_ras_nl_get_error_counter_doit”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjÉ ubah}”(h]”h ]”(j¤j¥eh"]”h$]”h&]”hÅhÆuh1jŠhj¨ h²hh³jº h´M)ubjª)�”}”(hŒ-(struct sk_buff *skb, struct genl_info *info)”h]”(j°)�”}”(hŒstruct sk_buff *skb”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjå ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjå ubh)�”}”(hhh]”j‘)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”j Œmodname”NŒ classname”Njòjõ)�”}”jø]”jû)�”}”jîjÏ sbŒ#c.drm_ras_nl_get_error_counter_doit”†”asbuh1hhjå ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjå ubj)�”}”(hjƒh]”hŒ*”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå ubj‘)�”}”(hŒskb”h]”hŒskb”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjå ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hjá ubj°)�”}”(hŒstruct genl_info *info”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhjW ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjW ubh)�”}”(hhh]”j‘)�”}”(hŒ genl_info”h]”hŒ genl_info”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjv ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”j{ Œmodname”NŒ classname”Njòjõ)�”}”jø]”j# Œ#c.drm_ras_nl_get_error_counter_doit”†”asbuh1hhjW ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjW ubj)�”}”(hjƒh]”hŒ*”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW ubj‘)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjW ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hjá ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j©hj¨ h²hh³jº h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¯ˆuh1jaj°j±hj¤ h²hh³jº h´M)ubah}”(h]”jŸ ah ]”(jµj¶eh"]”h$]”h&]”jºˆj»)j¼huh1j[h³jº h´M)hj¡ h²hubj¾)�”}”(hhh]”hà)�”}”(hŒ!Query an error counter of an node”h]”hŒ!Query an error counter of an node”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M)hjÙ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hj¡ h²hh³jº h´M)ubeh}”(h]”h ]”(jìŒfunction”eh"]”h$]”h&]”jÞjìjßjô jàjô já‰jâ‰jã‰uh1jVh²hhjåh³Nh´Nubjå)�”}”(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 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M-hjø ubj)�”}”(hhh]”(j )�”}”(hŒ/``struct sk_buff *skb`` Netlink message buffer ”h]”(j)�”}”(hŒ``struct sk_buff *skb``”h]”j)�”}”(hj h]”hŒstruct sk_buff *skb”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M*hj ubj )�”}”(hhh]”hà)�”}”(hŒNetlink message buffer”h]”hŒNetlink message buffer”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³j2 h´M*hj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2 h´M*hj ubj )�”}”(hŒU``struct genl_info *info`` Generic Netlink info containing attributes of the request ”h]”(j)�”}”(hŒ``struct genl_info *info``”h]”j)�”}”(hjV h]”hŒstruct genl_info *info”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M+hjP ubj )�”}”(hhh]”hà)�”}”(hŒ9Generic Netlink info containing attributes of the request”h]”hŒ9Generic Netlink info containing attributes of the request”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³jk h´M+hjl ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjP ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jk h´M+hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjø ubhà)�”}”(hŒ**Description**”h]”jï)�”}”(hj‘ h]”hŒ Description”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M-hjø ubhà)�”}”(hŒË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.”h]”hŒË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.”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M,hjø ubhà)�”}”(hŒ **Return**”h]”jï)�”}”(hj¸ h]”hŒReturn”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M0hjø ubhà)�”}”(hŒ+0 on success, or negative errno on failure.”h]”hŒ+0 on success, or negative errno on failure.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´M1hjø ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jähjåh²hh³Nh´NubjF)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jRŒ0drm_ras_nl_clear_error_counter_doit (C function)”Œ%c.drm_ras_nl_clear_error_counter_doit”hNt”auh1jEhjåh²hh³Nh´NubjW)�”}”(hhh]”(j\)�”}”(hŒUint drm_ras_nl_clear_error_counter_doit (struct sk_buff *skb, struct genl_info *info)”h]”jb)�”}”(hŒTint drm_ras_nl_clear_error_counter_doit(struct sk_buff *skb, struct genl_info *info)”h]”(jh)�”}”(hŒint”h]”hŒint”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jtah"]”h$]”h&]”uh1jghjù h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MDubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhjù h²hh³j h´MDubj‹)�”}”(hŒ#drm_ras_nl_clear_error_counter_doit”h]”j‘)�”}”(hŒ#drm_ras_nl_clear_error_counter_doit”h]”hŒ#drm_ras_nl_clear_error_counter_doit”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”(j¤j¥eh"]”h$]”h&]”hÅhÆuh1jŠhjù h²hh³j h´MDubjª)�”}”(hŒ-(struct sk_buff *skb, struct genl_info *info)”h]”(j°)�”}”(hŒstruct sk_buff *skb”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj6 ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj6 ubh)�”}”(hhh]”j‘)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjU ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”jZ Œmodname”NŒ classname”Njòjõ)�”}”jø]”jû)�”}”jîj sbŒ%c.drm_ras_nl_clear_error_counter_doit”†”asbuh1hhj6 ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj6 ubj)�”}”(hjƒh]”hŒ*”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6 ubj‘)�”}”(hŒskb”h]”hŒskb”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj6 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hj2 ubj°)�”}”(hŒstruct genl_info *info”h]”(j¶)�”}”(hj¹h]”hŒstruct”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”jÂah"]”h$]”h&]”uh1jµhj¨ ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj¨ ubh)�”}”(hhh]”j‘)�”}”(hŒ genl_info”h]”hŒ genl_info”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hjÇ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jìŒreftype”jîŒ reftarget”jÌ Œmodname”NŒ classname”Njòjõ)�”}”jø]”jt Œ%c.drm_ras_nl_clear_error_counter_doit”†”asbuh1hhj¨ ubjz)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”j†ah"]”h$]”h&]”uh1jyhj¨ ubj)�”}”(hjƒh]”hŒ*”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨ ubj‘)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j�hj¨ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j¯hj2 ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j©hjù h²hh³j h´MDubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¯ˆuh1jaj°j±hjõ h²hh³j h´MDubah}”(h]”jð ah ]”(jµj¶eh"]”h$]”h&]”jºˆj»)j¼huh1j[h³j h´MDhjò h²hubj¾)�”}”(hhh]”hà)�”}”(hŒ Clear an error counter of a node”h]”hŒ Clear an error counter of a node”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MDhj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j½hjò h²hh³j h´MDubeh}”(h]”h ]”(jìŒfunction”eh"]”h$]”h&]”jÞjìjßjEjàjEjá‰jâ‰jã‰uh1jVh²hhjåh³Nh´Nubjå)�”}”(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”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MHhjIubj)�”}”(hhh]”(j )�”}”(hŒ/``struct sk_buff *skb`` Netlink message buffer ”h]”(j)�”}”(hŒ``struct sk_buff *skb``”h]”j)�”}”(hjnh]”hŒstruct sk_buff *skb”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MEhjhubj )�”}”(hhh]”hà)�”}”(hŒNetlink message buffer”h]”hŒNetlink message buffer”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³jƒh´MEhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒh´MEhjeubj )�”}”(hŒU``struct genl_info *info`` Generic Netlink info containing attributes of the request ”h]”(j)�”}”(hŒ``struct genl_info *info``”h]”j)�”}”(hj§h]”hŒstruct genl_info *info”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MFhj¡ubj )�”}”(hhh]”hà)�”}”(hŒ9Generic Netlink info containing attributes of the request”h]”hŒ9Generic Netlink info containing attributes of the request”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³j¼h´MFhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼h´MFhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubhà)�”}”(hŒ**Description**”h]”jï)�”}”(hjâh]”hŒ Description”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MHhjIubhà)�”}”(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.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MGhjIubhà)�”}”(hŒ **Return**”h]”jï)�”}”(hj h]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jîhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MJhjIubhà)�”}”(hŒ+0 on success, or negative errno on failure.”h]”hŒ+0 on success, or negative errno on failure.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³ŒU/var/lib/git/docbuild/linux/Documentation/gpu/drm-ras:43: ./drivers/gpu/drm/drm_ras.c”h´MKhjIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jähjåh²hh³Nh´Nubeh}”(h]”jïah ]”h"]”Œnode management”ah$]”h&]”uh1hÈhj’h²hh³hÇh´K'ubeh}”(h]”jÐah ]”h"]”Œnodes”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒGeneric Netlink Usage”h]”hŒGeneric Netlink Usage”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjuh1hÍhjCh²hh³hÇh´K/ubhà)�”}”(hŒaThe 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 ”…”�”}”(hjTh²hh³Nh´Nubj)�”}”(hŒ ``drm-ras``”h]”hŒdrm-ras”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubhŒ. User space tools can:”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K1hjCh²hubhþ)�”}”(hhh]”(j)�”}”(hŒ6List registered nodes with the ``list-nodes`` command.”h]”hà)�”}”(hjyh]”(hŒList registered nodes with the ”…”�”}”(hj{h²hh³Nh´Nubj)�”}”(hŒ``list-nodes``”h]”hŒ list-nodes”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ubhŒ command.”…”�”}”(hj{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K4hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjth²hh³hÇh´Nubj)�”}”(hŒjList all error counters in an node with the ``get-error-counter`` command with ``node-id`` as a parameter.”h]”hà)�”}”(hŒjList 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¤h²hh³Nh´Nubj)�”}”(hŒ``get-error-counter``”h]”hŒget-error-counter”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubhŒ command with ”…”�”}”(hj¤h²hh³Nh´Nubj)�”}”(hŒ ``node-id``”h]”hŒnode-id”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubhŒ as a parameter.”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K5hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjth²hh³hÇh´Nubj)�”}”(hŒ‚Query specific error counter values with the ``get-error-counter`` command, using both ``node-id`` and ``error-id`` as parameters.”h]”hà)�”}”(hŒ‚Query 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 ”…”�”}”(hjàh²hh³Nh´Nubj)�”}”(hŒ``get-error-counter``”h]”hŒget-error-counter”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubhŒ command, using both ”…”�”}”(hjàh²hh³Nh´Nubj)�”}”(hŒ ``node-id``”h]”hŒnode-id”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubhŒ and ”…”�”}”(hjàh²hh³Nh´Nubj)�”}”(hŒ ``error-id``”h]”hŒerror-id”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubhŒ as parameters.”…”�”}”(hjàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K7hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjth²hh³hÇh´Nubj)�”}”(hŒClear 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.h²hh³Nh´Nubj)�”}”(hŒ``clear-error-counter``”h]”hŒclear-error-counter”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubhŒ command, using both ”…”�”}”(hj.h²hh³Nh´Nubj)�”}”(hŒ ``node-id``”h]”hŒnode-id”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubhŒ and ”…”�”}”(hj.h²hh³Nh´Nubj)�”}”(hŒ ``error-id``”h]”hŒerror-id”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubhŒ as parameters.”…”�”}”(hj.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K9hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjth²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1hýh³hÇh´K4hjCh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒYAML-based Interface”h]”hŒYAML-based Interface”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝj6uh1hÍhj~h²hh³hÇh´K=ubhà)�”}”(hŒ_The interface is described in a YAML specification ``Documentation/netlink/specs/drm_ras.yaml``”h]”(hŒ3The interface is described in a YAML specification ”…”�”}”(hj�h²hh³Nh´Nubj)�”}”(hŒ,``Documentation/netlink/specs/drm_ras.yaml``”h]”hŒ(Documentation/netlink/specs/drm_ras.yaml”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K?hj~h²hubhà)�”}”(hŒŸThis YAML is used to auto-generate user space bindings via ``tools/net/ynl/pyynl/ynl_gen_c.py``, and drives the structure of netlink attributes and operations.”h]”(hŒ;This YAML is used to auto-generate user space bindings via ”…”�”}”(hj«h²hh³Nh´Nubj)�”}”(hŒ$``tools/net/ynl/pyynl/ynl_gen_c.py``”h]”hŒ tools/net/ynl/pyynl/ynl_gen_c.py”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ubhŒ@, and drives the structure of netlink attributes and operations.”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KAhj~h²hubeh}”(h]”j<ah ]”h"]”Œyaml-based interface”ah$]”h&]”uh1hÈhjCh²hh³hÇh´K=ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Usage Notes”h]”hŒ Usage Notes”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”hÝjXuh1hÍhjÒh²hh³hÇh´KFubhþ)�”}”(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êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KHhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãh²hh³hÇh´Nubj)�”}”(hŒSNode IDs or Node names can be used for all further queries, such as error counters.”h]”hà)�”}”(hjÿh]”hŒSNode IDs or Node names can be used for all further queries, such as error counters.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KIhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãh²hh³hÇh´Nubj)�”}”(hŒCError counters can be queried by either the Error ID or Error name.”h]”hà)�”}”(hjh]”hŒCError counters can be queried by either the Error ID or Error name.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KJhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãh²hh³hÇh´Nubj)�”}”(hŒZQuery Parameters should be defined as part of the uAPI to ensure user interface stability.”h]”hà)�”}”(hj-h]”hŒZQuery Parameters should be defined as part of the uAPI to ensure user interface stability.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KKhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãh²hh³hÇh´Nubj)�”}”(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.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KLhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1hýh³hÇh´KHhjÒh²hubhà)�”}”(hŒExample: List nodes using ynl”h]”hŒExample: List nodes using ynl”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KOhjÒh²hubhŒ 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&]”hÅhÆŒforce”‰Œlanguage”Œbash”Œhighlight_args”}”uh1jnh³hÇh´KQhjÒh²hubhà)�”}”(hŒ*Example: List all error counters using ynl”h]”hŒ*Example: List all error counters using ynl”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´K]hjÒh²hubjo)�”}”(hŒÊsudo ynl --family drm_ras --dump get-error-counter --json '{"node-id":0}' [{'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}, {'error-id': 2, 'error-name': 'error_name2', 'error-value': 0}]”h]”hŒÊsudo ynl --family drm_ras --dump get-error-counter --json '{"node-id":0}' [{'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}, {'error-id': 2, 'error-name': 'error_name2', 'error-value': 0}]”…”�”}”hj‘sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~‰jŒbash”j�}”uh1jnh³hÇh´K_hjÒh²hubhà)�”}”(hŒ0Example: Query an error counter for a given node”h]”hŒ0Example: Query an error counter for a given node”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KehjÒh²hubjo)�”}”(hŒ”sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}' {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}”h]”hŒ”sudo ynl --family drm_ras --do get-error-counter --json '{"node-id":0, "error-id":1}' {'error-id': 1, 'error-name': 'error_name1', 'error-value': 0}”…”�”}”hj¯sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~‰jŒbash”j�}”uh1jnh³hÇh´KghjÒh²hubhà)�”}”(hŒ0Example: Clear an error counter for a given node”h]”hŒ0Example: Clear an error counter for a given node”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hßh³hÇh´KlhjÒh²hubjo)�”}”(hŒ\sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}' None”h]”hŒ\sudo ynl --family drm_ras --do clear-error-counter --json '{"node-id":0, "error-id":1}' None”…”�”}”hjÍsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj~‰jŒbash”j�}”uh1jnh³hÇh´KnhjÒh²hubeh}”(h]”j^ah ]”h"]”Œ usage notes”ah$]”h&]”uh1hÈhjCh²hh³hÇh´KFubeh}”(h]”jah ]”h"]”Œgeneric netlink usage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K/ubeh}”(h]”j±ah ]”h"]”Œdrm ras over generic netlink”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”•íNŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jïj±j�j‹j@jÐj9jïjèjjÏj<jáj^uŒ nametypes”}”(jï‰j�‰j@‰j9‰jè‰jωjá‰uh}”(j±hÊj‹j†jÐj’jïjåjTj]jjjŸ j¤ jð jõ jjCj<j~j^jÒhÞj£jÊjÁjéjàjjj6j-jXjOuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”j#Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.