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/edac/scrubmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/zh_TW/edac/scrubmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/it_IT/edac/scrubmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ja_JP/edac/scrubmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/ko_KR/edac/scrubmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget/translations/sp_SP/edac/scrubmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(hCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.2-no-invariants-or-laterh]hCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.2-no-invariants-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh8/var/lib/git/docbuild/linux/Documentation/edac/scrub.rsthKubhsection)}(hhh](htitle)}(h Scrub Controlh]h Scrub Control}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(h*Copyright (c) 2024-2025 HiSilicon Limited.h]h*Copyright (c) 2024-2025 HiSilicon Limited.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh field_list)}(hhh](hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(h"Shiju Jose h]h)}(hhh](h Shiju Jose <}(hhhhhNhNubh reference)}(hshiju.jose@huawei.comh]hshiju.jose@huawei.com}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurimailto:shiju.jose@huawei.comuh1jhhubh>}(hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hhh](h)}(hLicenseh]hLicense}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(hhhKubh)}(hThe GNU Free Documentation License, Version 1.2 without Invariant Sections, Front-Cover Texts nor Back-Cover Texts. (dual licensed under the GPL v2) h]h)}(hThe GNU Free Documentation License, Version 1.2 without Invariant Sections, Front-Cover Texts nor Back-Cover Texts. (dual licensed under the GPL v2)h]hThe GNU Free Documentation License, Version 1.2 without Invariant Sections, Front-Cover Texts nor Back-Cover Texts. (dual licensed under the GPL v2)}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj9ubah}(h]h ]h"]h$]h&]uh1hhj(ubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubeh}(h]h ]h"]h$]h&]uh1hhhhhhhhK ubh bullet_list)}(hhh]h list_item)}(hWritten for: 6.15 h]h)}(hWritten for: 6.15h]hWritten for: 6.15}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjdubah}(h]h ]h"]h$]h&]uh1jbhj_hhhhhNubah}(h]h ]h"]h$]h&]bullet-uh1j]hhhKhhhhubh)}(hhh](h)}(h Introductionh]h Introduction}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hXIncreasing DRAM size and cost have made memory subsystem reliability an important concern. These modules are used where potentially corrupted data could cause expensive or fatal issues. Memory errors are among the top hardware failures that cause server and workload crashes.h]hXIncreasing DRAM size and cost have made memory subsystem reliability an important concern. These modules are used where potentially corrupted data could cause expensive or fatal issues. Memory errors are among the top hardware failures that cause server and workload crashes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hMemory scrubbing is a feature where an ECC (Error-Correcting Code) engine reads data from each memory media location, corrects if necessary and writes the corrected data back to the same memory media location.h]hMemory scrubbing is a feature where an ECC (Error-Correcting Code) engine reads data from each memory media location, corrects if necessary and writes the corrected data back to the same memory media location.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(hDIMMs can be scrubbed at a configurable rate to detect uncorrected memory errors and attempt recovery from detected errors, providing the following benefits:h]hDIMMs can be scrubbed at a configurable rate to detect uncorrected memory errors and attempt recovery from detected errors, providing the following benefits:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubhenumerated_list)}(hhh](jc)}(h^Proactively scrubbing DIMMs reduces the chance of a correctable error becoming uncorrectable. h]h)}(h]Proactively scrubbing DIMMs reduces the chance of a correctable error becoming uncorrectable.h]h]Proactively scrubbing DIMMs reduces the chance of a correctable error becoming uncorrectable.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hWhen detected, uncorrected errors caught in unallocated memory pages are isolated and prevented from being allocated to an application or the OS. h]h)}(hWhen detected, uncorrected errors caught in unallocated memory pages are isolated and prevented from being allocated to an application or the OS.h]hWhen detected, uncorrected errors caught in unallocated memory pages are isolated and prevented from being allocated to an application or the OS.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK#hjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hYThis reduces the likelihood of software or hardware products encountering memory errors. h]h)}(hXThis reduces the likelihood of software or hardware products encountering memory errors.h]hXThis reduces the likelihood of software or hardware products encountering memory errors.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK&hjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hThe additional data on failures in memory may be used to build up statistics that are later used to decide whether to use memory repair technologies such as Post Package Repair or Sparing. h]h)}(hThe additional data on failures in memory may be used to build up statistics that are later used to decide whether to use memory repair technologies such as Post Package Repair or Sparing.h]hThe additional data on failures in memory may be used to build up statistics that are later used to decide whether to use memory repair technologies such as Post Package Repair or Sparing.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hj ubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhjhhhhhK ubh)}(h&There are 2 types of memory scrubbing:h]h&There are 2 types of memory scrubbing:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjhhubj)}(hhh](jc)}(h@Background (patrol) scrubbing while the DRAM is otherwise idle. h]h)}(h?Background (patrol) scrubbing while the DRAM is otherwise idle.h]h?Background (patrol) scrubbing while the DRAM is otherwise idle.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK/hj@ubah}(h]h ]h"]h$]h&]uh1jbhj=hhhhhNubjc)}(hFOn-demand scrubbing for a specific address range or region of memory. h]h)}(hEOn-demand scrubbing for a specific address range or region of memory.h]hEOn-demand scrubbing for a specific address range or region of memory.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjXubah}(h]h ]h"]h$]h&]uh1jbhj=hhhhhNubeh}(h]h ]h"]h$]h&]j*j+j,hj-j.uh1jhjhhhhhK/ubh)}(hSeveral types of interfaces to hardware memory scrubbers have been identified, such as CXL memory device patrol scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing, and ACPI NVDIMM ARS (Address Range Scrub).h]hSeveral types of interfaces to hardware memory scrubbers have been identified, such as CXL memory device patrol scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing, and ACPI NVDIMM ARS (Address Range Scrub).}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK3hjhhubh)}(hThe control mechanisms vary across different memory scrubbers. To enable standardized userspace tooling, there is a need to present these controls through a standardized ABI.h]hThe control mechanisms vary across different memory scrubbers. To enable standardized userspace tooling, there is a need to present these controls through a standardized ABI.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hjhhubh)}(hA generic memory EDAC scrub control allows users to manage underlying scrubbers in the system through a standardized sysfs control interface. It abstracts the management of various scrubbing functionalities into a unified set of functions.h]hA generic memory EDAC scrub control allows users to manage underlying scrubbers in the system through a standardized sysfs control interface. It abstracts the management of various scrubbing functionalities into a unified set of functions.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK;hjhhubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h)Use cases of common scrub control featureh]h)Use cases of common scrub control feature}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKAubj)}(hhh](jc)}(hXSeveral types of interfaces for hardware memory scrubbers have been identified, including the CXL memory device patrol scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing features, ACPI NVDIMM ARS (Address Range Scrub), and software-based memory scrubbers. Of the identified interfaces to hardware memory scrubbers some support control over patrol (background) scrubbing (e.g., ACPI RAS2, CXL) and/or on-demand scrubbing (e.g., ACPI RAS2, ACPI ARS). However, the scrub control interfaces vary between memory scrubbers, highlighting the need for a standardized, generic sysfs scrub control interface that is accessible to userspace for administration and use by scripts/tools. h](h)}(hSeveral types of interfaces for hardware memory scrubbers have been identified, including the CXL memory device patrol scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing features, ACPI NVDIMM ARS (Address Range Scrub), and software-based memory scrubbers.h]hSeveral types of interfaces for hardware memory scrubbers have been identified, including the CXL memory device patrol scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing features, ACPI NVDIMM ARS (Address Range Scrub), and software-based memory scrubbers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKChjubh)}(hXOf the identified interfaces to hardware memory scrubbers some support control over patrol (background) scrubbing (e.g., ACPI RAS2, CXL) and/or on-demand scrubbing (e.g., ACPI RAS2, ACPI ARS). However, the scrub control interfaces vary between memory scrubbers, highlighting the need for a standardized, generic sysfs scrub control interface that is accessible to userspace for administration and use by scripts/tools.h]hXOf the identified interfaces to hardware memory scrubbers some support control over patrol (background) scrubbing (e.g., ACPI RAS2, CXL) and/or on-demand scrubbing (e.g., ACPI RAS2, ACPI ARS). However, the scrub control interfaces vary between memory scrubbers, highlighting the need for a standardized, generic sysfs scrub control interface that is accessible to userspace for administration and use by scripts/tools.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhjubeh}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hUser-space scrub controls allow users to disable scrubbing if necessary, for example, to disable background patrol scrubbing or adjust the scrub rate for performance-aware operations where background activities need to be minimized or disabled. h]h)}(hUser-space scrub controls allow users to disable scrubbing if necessary, for example, to disable background patrol scrubbing or adjust the scrub rate for performance-aware operations where background activities need to be minimized or disabled.h]hUser-space scrub controls allow users to disable scrubbing if necessary, for example, to disable background patrol scrubbing or adjust the scrub rate for performance-aware operations where background activities need to be minimized or disabled.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKOhjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hUser-space tools enable on-demand scrubbing for specific address ranges, provided that the scrubber supports this functionality. h]h)}(hUser-space tools enable on-demand scrubbing for specific address ranges, provided that the scrubber supports this functionality.h]hUser-space tools enable on-demand scrubbing for specific address ranges, provided that the scrubber supports this functionality.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKThjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hXnUser-space tools can also control memory DIMM scrubbing at a configurable scrub rate via sysfs scrub controls. This approach offers several benefits: 4.1. Detects uncorrectable memory errors early, before user access to affected memory, helping facilitate recovery. 4.2. Reduces the likelihood of correctable errors developing into uncorrectable errors. h](h)}(hUser-space tools can also control memory DIMM scrubbing at a configurable scrub rate via sysfs scrub controls. This approach offers several benefits:h]hUser-space tools can also control memory DIMM scrubbing at a configurable scrub rate via sysfs scrub controls. This approach offers several benefits:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKWhjubhdefinition_list)}(hhh](hdefinition_list_item)}(ht4.1. Detects uncorrectable memory errors early, before user access to affected memory, helping facilitate recovery. h](hterm)}(hN4.1. Detects uncorrectable memory errors early, before user access to affectedh]hN4.1. Detects uncorrectable memory errors early, before user access to affected}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1j/hhhK[hj+ubh definition)}(hhh]h)}(h$memory, helping facilitate recovery.h]h$memory, helping facilitate recovery.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK[hjAubah}(h]h ]h"]h$]h&]uh1j?hj+ubeh}(h]h ]h"]h$]h&]uh1j)hhhK[hj&ubj*)}(hX4.2. Reduces the likelihood of correctable errors developing into uncorrectable errors. h](j0)}(hO4.2. Reduces the likelihood of correctable errors developing into uncorrectableh]hO4.2. Reduces the likelihood of correctable errors developing into uncorrectable}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1j/hhhK^hj^ubj@)}(hhh]h)}(herrors.h]herrors.}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK^hjpubah}(h]h ]h"]h$]h&]uh1j?hj^ubeh}(h]h ]h"]h$]h&]uh1j)hhhK^hj&ubeh}(h]h ]h"]h$]h&]uh1j$hjubeh}(h]h ]h"]h$]h&]uh1jbhjhhhNhNubjc)}(hXPolicy control for hotplugged memory is necessary because there may not be a system-wide BIOS or similar control to manage scrub settings for a CXL device added after boot. Determining these settings is a policy decision, balancing reliability against performance, so userspace should control it. Therefore, a unified interface is recommended for handling this function in a way that aligns with other similar interfaces, rather than creating a separate one. h]h)}(hXPolicy control for hotplugged memory is necessary because there may not be a system-wide BIOS or similar control to manage scrub settings for a CXL device added after boot. Determining these settings is a policy decision, balancing reliability against performance, so userspace should control it. Therefore, a unified interface is recommended for handling this function in a way that aligns with other similar interfaces, rather than creating a separate one.h]hXPolicy control for hotplugged memory is necessary because there may not be a system-wide BIOS or similar control to manage scrub settings for a CXL device added after boot. Determining these settings is a policy decision, balancing reliability against performance, so userspace should control it. Therefore, a unified interface is recommended for handling this function in a way that aligns with other similar interfaces, rather than creating a separate one.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK`hjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubeh}(h]h ]h"]h$]h&]j*j+j,hj-j.uh1jhjhhhhhKCubeh}(h])use-cases-of-common-scrub-control-featureah ]h"])use cases of common scrub control featureah$]h&]uh1hhhhhhhhKAubh)}(hhh](h)}(hScrubbing featuresh]hScrubbing features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKiubh)}(hhh](h)}(hCXL Memory Scrubbing featuresh]hCXL Memory Scrubbing features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKlubh)}(hX%CXL spec r3.1 [1]_ section 8.2.9.9.11.1 describes the memory device patrol scrub control feature. The device patrol scrub proactively locates and makes corrections to errors in regular cycle. The patrol scrub control allows the userspace request to change CXL patrol scrubber's configurations.h](hCXL spec r3.1 }(hjhhhNhNubhfootnote_reference)}(h[1]_h]h1}(hjhhhNhNubah}(h]id1ah ]h"]h$]h&]refidid5docname edac/scrubuh1jhjresolvedKubhX section 8.2.9.9.11.1 describes the memory device patrol scrub control feature. The device patrol scrub proactively locates and makes corrections to errors in regular cycle. The patrol scrub control allows the userspace request to change CXL patrol scrubber’s configurations.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKnhjhhubh)}(hX|The patrol scrub control allows the requester to specify the number of hours in which the patrol scrub cycles must be completed, provided that the requested scrub rate must be within the supported range of the scrub rate that the device is capable of. In the CXL driver, the number of seconds per scrub cycles, which user requests via sysfs, is rescaled to hours per scrub cycles.h]hX|The patrol scrub control allows the requester to specify the number of hours in which the patrol scrub cycles must be completed, provided that the requested scrub rate must be within the supported range of the scrub rate that the device is capable of. In the CXL driver, the number of seconds per scrub cycles, which user requests via sysfs, is rescaled to hours per scrub cycles.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKshjhhubh)}(hIn addition, they allow the host to disable the feature in case it interferes with performance-aware operations which require the background operations to be turned off.h]hIn addition, they allow the host to disable the feature in case it interferes with performance-aware operations which require the background operations to be turned off.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKzhjhhubeh}(h]cxl-memory-scrubbing-featuresah ]h"]cxl memory scrubbing featuresah$]h&]uh1hhjhhhhhKlubh)}(hhh](h)}(hError Check Scrub (ECS)h]hError Check Scrub (ECS)}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hhhhhKubh)}(hX2CXL spec r3.1 [1]_ section 8.2.9.9.11.2 describes Error Check Scrub (ECS) - a feature defined in the JEDEC DDR5 SDRAM Specification (JESD79-5) and allowing DRAM to internally read, correct single-bit errors, and write back corrected data bits to the DRAM array while providing transparency to error counts.h](hCXL spec r3.1 }(hj>hhhNhNubj)}(h[1]_h]h1}(hjFhhhNhNubah}(h]id2ah ]h"]h$]h&]jjjjuh1jhj>jKubhX  section 8.2.9.9.11.2 describes Error Check Scrub (ECS) - a feature defined in the JEDEC DDR5 SDRAM Specification (JESD79-5) and allowing DRAM to internally read, correct single-bit errors, and write back corrected data bits to the DRAM array while providing transparency to error counts.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj-hhubh)}(hThe DDR5 device contains number of memory media Field Replaceable Units (FRU) per device. The DDR5 ECS feature and thus the ECS control driver supports configuring the ECS parameters per FRU.h]hThe DDR5 device contains number of memory media Field Replaceable Units (FRU) per device. The DDR5 ECS feature and thus the ECS control driver supports configuring the ECS parameters per FRU.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj-hhubeh}(h]error-check-scrub-ecsah ]h"]error check scrub (ecs)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h)ACPI RAS2 Hardware-based Memory Scrubbingh]h)ACPI RAS2 Hardware-based Memory Scrubbing}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhhhhhKubh)}(hX ACPI spec 6.5 [2]_ section 5.2.21 ACPI RAS2 describes an ACPI RAS2 table which provides interfaces for platform RAS features and supports independent RAS controls and capabilities for a given RAS feature for multiple instances of the same component in a given system.h](hACPI spec 6.5 }(hjhhhNhNubj)}(h[2]_h]h2}(hjhhhNhNubah}(h]id3ah ]h"]h$]h&]jid6jjuh1jhjjKubh section 5.2.21 ACPI RAS2 describes an ACPI RAS2 table which provides interfaces for platform RAS features and supports independent RAS controls and capabilities for a given RAS feature for multiple instances of the same component in a given system.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjuhhubh)}(hMemory RAS features apply to RAS capabilities, controls and operations that are specific to memory. RAS2 PCC sub-spaces for memory-specific RAS features have a Feature Type of 0x00 (Memory).h]hMemory RAS features apply to RAS capabilities, controls and operations that are specific to memory. RAS2 PCC sub-spaces for memory-specific RAS features have a Feature Type of 0x00 (Memory).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjuhhubh)}(hThe platform can use the hardware-based memory scrubbing feature to expose controls and capabilities associated with hardware-based memory scrub engines. The RAS2 memory scrubbing feature supports as per spec,h]hThe platform can use the hardware-based memory scrubbing feature to expose controls and capabilities associated with hardware-based memory scrub engines. The RAS2 memory scrubbing feature supports as per spec,}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjuhhubj)}(hhh](jc)}(hcIndependent memory scrubbing controls for each NUMA domain, identified using its proximity domain. h]h)}(hbIndependent memory scrubbing controls for each NUMA domain, identified using its proximity domain.h]hbIndependent memory scrubbing controls for each NUMA domain, identified using its proximity domain.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubjc)}(hProvision for background (patrol) scrubbing of the entire memory system, as well as on-demand scrubbing for a specific region of memory. h]h)}(hProvision for background (patrol) scrubbing of the entire memory system, as well as on-demand scrubbing for a specific region of memory.h]hProvision for background (patrol) scrubbing of the entire memory system, as well as on-demand scrubbing for a specific region of memory.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jbhjhhhhhNubeh}(h]h ]h"]h$]h&]j*j+j,hj-j.uh1jhjuhhhhhKubeh}(h])acpi-ras2-hardware-based-memory-scrubbingah ]h"])acpi ras2 hardware-based memory scrubbingah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h"ACPI Address Range Scrubbing (ARS)h]h"ACPI Address Range Scrubbing (ARS)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubh)}(hX{ACPI spec 6.5 [2]_ section 9.19.7.2 describes Address Range Scrubbing (ARS). ARS allows the platform to communicate memory errors to system software. This capability allows system software to prevent accesses to addresses with uncorrectable errors in memory. ARS functions manage all NVDIMMs present in the system. Only one scrub can be in progress system wide at any given time.h](hACPI spec 6.5 }(hjhhhNhNubj)}(h[2]_h]h2}(hjhhhNhNubah}(h]id4ah ]h"]h$]h&]jjjjuh1jhjjKubhXi section 9.19.7.2 describes Address Range Scrubbing (ARS). ARS allows the platform to communicate memory errors to system software. This capability allows system software to prevent accesses to addresses with uncorrectable errors in memory. ARS functions manage all NVDIMMs present in the system. Only one scrub can be in progress system wide at any given time.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h?The following functions are supported as per the specification:h]h?The following functions are supported as per the specification:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubj)}(hhh](jc)}(hQuery ARS Capabilities for a given address range, indicates platform supports the ACPI NVDIMM Root Device Unconsumed Error Notification. h]h)}(hQuery ARS Capabilities for a given address range, indicates platform supports the ACPI NVDIMM Root Device Unconsumed Error Notification.h]hQuery ARS Capabilities for a given address range, indicates platform supports the ACPI NVDIMM Root Device Unconsumed Error Notification.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjHubah}(h]h ]h"]h$]h&]uh1jbhjEhhhhhNubjc)}(hStart ARS triggers an Address Range Scrub for the given memory range. Address scrubbing can be done for volatile or persistent memory, or both. h]h)}(hStart ARS triggers an Address Range Scrub for the given memory range. Address scrubbing can be done for volatile or persistent memory, or both.h]hStart ARS triggers an Address Range Scrub for the given memory range. Address scrubbing can be done for volatile or persistent memory, or both.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj`ubah}(h]h ]h"]h$]h&]uh1jbhjEhhhhhNubjc)}(hwQuery ARS Status command allows software to get the status of ARS, including the progress of ARS and ARS error record. h]h)}(hvQuery ARS Status command allows software to get the status of ARS, including the progress of ARS and ARS error record.h]hvQuery ARS Status command allows software to get the status of ARS, including the progress of ARS and ARS error record.}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjxubah}(h]h ]h"]h$]h&]uh1jbhjEhhhhhNubjc)}(hClear Uncorrectable Error. h]h)}(hClear Uncorrectable Error.h]hClear Uncorrectable Error.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jbhjEhhhhhNubjc)}(hTranslate SPA h]h)}(h Translate SPAh]h Translate SPA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jbhjEhhhhhNubjc)}(hARS Error Inject etc. h]h)}(hARS Error Inject etc.h]hARS Error Inject etc.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jbhjEhhhhhNubeh}(h]h ]h"]h$]h&]j*j+j,hj-j.uh1jhjhhhhhKubh)}(h[The kernel supports an existing control for ARS and ARS is currently not supported in EDAC.h]h[The kernel supports an existing control for ARS and ARS is currently not supported in EDAC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubhfootnote)}(h2https://computeexpresslink.org/cxl-specification/ h](hlabel)}(h1h]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h1https://computeexpresslink.org/cxl-specification/h]j)}(hjh]h1https://computeexpresslink.org/cxl-specification/}(hjhhhNhNubah}(h]h ]h"]h$]h&]refurijuh1jhjubah}(h]h ]h"]h$]h&]uh1hhhhKhjubeh}(h]jah ]h"]1ah$]h&](jjPejjuh1jhhhKhjhhjKubj)}(h!https://uefi.org/specs/ACPI/6.5/ h](j)}(h2h]h2}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubh)}(h https://uefi.org/specs/ACPI/6.5/h]j)}(hj5h]h https://uefi.org/specs/ACPI/6.5/}(hj7hhhNhNubah}(h]h ]h"]h$]h&]refurij5uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhhhKhj!ubeh}(h]jah ]h"]2ah$]h&](jj(ejjuh1jhhhKhjhhjKubeh}(h] acpi-address-range-scrubbing-arsah ]h"]"acpi address range scrubbing (ars)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h(Comparison of various scrubbing featuresh]h(Comparison of various scrubbing features}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhhhhhKubh block_quote)}(hX +--------------+-----------+-----------+-----------+-----------+ | | ACPI | CXL patrol| CXL ECS | ARS | | Name | RAS2 | scrub | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | On-demand | Supported | No | No | Supported | | Scrubbing | | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Background | Supported | Supported | Supported | No | | scrubbing | | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Mode of | Scrub ctrl| per device| per memory| Unknown | | scrubbing | per NUMA | | media | | | | domain. | | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Query scrub | Supported | Supported | Supported | Supported | | capabilities | | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Setting | Supported | No | No | Supported | | address range| | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Setting | Supported | Supported | No | No | | scrub rate | | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Unit for | Not | in hours | No | No | | scrub rate | Defined | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ | | Supported | | | | | Scrub | on-demand | No | No | Supported | | status/ | scrubbing | | | | | Completion | only | | | | +--------------+-----------+-----------+-----------+-----------+ | UC error | |CXL general|CXL general| ACPI UCE | | reporting | Exception |media/DRAM |media/DRAM | notify and| | | |event/media|event/media| query | | | |scan? |scan? | ARS status| +--------------+-----------+-----------+-----------+-----------+ | | | | | | | Support for | Supported | Supported | Supported | No | | EDAC control | | | | | | | | | | | +--------------+-----------+-----------+-----------+-----------+ h]htable)}(hhh]htgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j{hjxubj|)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j{hjxubj|)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j{hjxubj|)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j{hjxubj|)}(hhh]h}(h]h ]h"]h$]h&]colwidthK uh1j{hjxubhtbody)}(hhh](hrow)}(hhh](hentry)}(hhh]h)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h ACPI RAS2h]h ACPI RAS2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hCXL patrol scrubh]hCXL patrol scrub}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hCXL ECSh]hCXL ECS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hARSh]hARS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hOn-demand Scrubbingh]hOn-demand Scrubbing}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj7ubah}(h]h ]h"]h$]h&]uh1jhj4ubj)}(hhh]h)}(h Supportedh]h Supported}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjNubah}(h]h ]h"]h$]h&]uh1jhj4ubj)}(hhh]h)}(hNoh]hNo}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjeubah}(h]h ]h"]h$]h&]uh1jhj4ubj)}(hhh]h)}(hNoh]hNo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj|ubah}(h]h ]h"]h$]h&]uh1jhj4ubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hBackground scrubbingh]hBackground scrubbing}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(hNoh]hNo}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hMode of scrubbingh]hMode of scrubbing}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj/ubah}(h]h ]h"]h$]h&]uh1jhj,ubj)}(hhh]h)}(hScrub ctrl per NUMA domain.h]hScrub ctrl per NUMA domain.}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjFubah}(h]h ]h"]h$]h&]uh1jhj,ubj)}(hhh]h)}(h per deviceh]h per device}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj]ubah}(h]h ]h"]h$]h&]uh1jhj,ubj)}(hhh]h)}(hper memory mediah]hper memory media}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjtubah}(h]h ]h"]h$]h&]uh1jhj,ubj)}(hhh]h)}(hUnknownh]hUnknown}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hQuery scrub capabilitiesh]hQuery scrub capabilities}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hSetting address rangeh]hSetting address range}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj' ubah}(h]h ]h"]h$]h&]uh1jhj$ ubj)}(hhh]h)}(h Supportedh]h Supported}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj> ubah}(h]h ]h"]h$]h&]uh1jhj$ ubj)}(hhh]h)}(hNoh]hNo}(hjX hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjU ubah}(h]h ]h"]h$]h&]uh1jhj$ ubj)}(hhh]h)}(hNoh]hNo}(hjo hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjl ubah}(h]h ]h"]h$]h&]uh1jhj$ ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj$ ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hSetting scrub rateh]hSetting scrub rate}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hUnit for scrub rateh]hUnit for scrub rate}(hj" hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Not Definedh]h Not Defined}(hj9 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj6 ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hin hoursh]hin hours}(hjP hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjM ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjd ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hj~ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj{ ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hScrub status/ Completionh]hScrub status/ Completion}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h"Supported on-demand scrubbing onlyh]h"Supported on-demand scrubbing only}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hUC error reportingh]hUC error reporting}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Exceptionh]h Exception}(hj1 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj. ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h(CXL general media/DRAM event/media scan?h]h(CXL general media/DRAM event/media scan?}(hjH hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjE ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h(CXL general media/DRAM event/media scan?h]h(CXL general media/DRAM event/media scan?}(hj_ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj\ ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h$ACPI UCE notify and query ARS statush]h$ACPI UCE notify and query ARS status}(hjv hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjs ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]h)}(hSupport for EDAC controlh]hSupport for EDAC control}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(h Supportedh]h Supported}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubj)}(hhh]h)}(hNoh]hNo}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjxubeh}(h]h ]h"]h$]h&]colsKuh1jvhjsubah}(h]h ]h"]h$]h&]uh1jqhjmubah}(h]h ]h"]h$]h&]uh1jkhhhKhjZhhubeh}(h](comparison-of-various-scrubbing-featuresah ]h"](comparison of various scrubbing featuresah$]h&]uh1hhjhhhhhKubeh}(h]scrubbing-featuresah ]h"]scrubbing featuresah$]h&]uh1hhhhhhhhKiubh)}(hhh](h)}(hThe File Systemh]hThe File System}(hj8 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5 hhhhhKubh)}(hNThe control attributes of a registered scrubber instance could be accessed in:h]hNThe control attributes of a registered scrubber instance could be accessed in:}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj5 hhubh)}(h(/sys/bus/edac/devices//scrubX/h]h(/sys/bus/edac/devices//scrubX/}(hjT hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhj5 hhubeh}(h]the-file-systemah ]h"]the file systemah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hsysfsh]hsysfs}(hjm hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj hhhhhMubh)}(hJSysfs files are documented in `Documentation/ABI/testing/sysfs-edac-scrub`h](hSysfs files are documented in }(hj{ hhhNhNubhtitle_reference)}(h,`Documentation/ABI/testing/sysfs-edac-scrub`h]h*Documentation/ABI/testing/sysfs-edac-scrub}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj{ ubeh}(h]h ]h"]h$]h&]uh1hhhhMhjj hhubh)}(h*`Documentation/ABI/testing/sysfs-edac-ecs`h]j )}(hj h]h(Documentation/ABI/testing/sysfs-edac-ecs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1hhhhM hjj hhubeh}(h]sysfsah ]h"]sysfsah$]h&]uh1hhhhhhhhMubeh}(h] scrub-controlah ]h"] scrub controlah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksjfootnote_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_handlerj error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _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}(1](jjFe2](jjeurefids}nameids}(j j jjjjj2 j/ j*j'jrjojjjWjTjjjOjj* j' jg jd j j u nametypes}(j jjj2 j*jrjjWjjOj* jg j uh}(j hjjjjj/ jj'jjjjoj-jPjFjjujjjTjj(jjjjj!j' jZjd j5 j jj u footnote_refs}(j" ](jjFej$ ](jjeu citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes](jj!e citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j KsRparse_messages]transform_messages] transformerN include_log] decorationNhhub.