€•ÇóŒ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/edac/scrub”Œ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/edac/scrub”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/it_IT/edac/scrub”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ja_JP/edac/scrub”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ/translations/ko_KR/edac/scrub”Œ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/edac/scrub”Œ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/edac/scrub”Œ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ŒCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.2-no-invariants-or-later”h]”hŒCSPDX-License-Identifier: GPL-2.0 OR GFDL-1.2-no-invariants-or-later”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³Œ8/var/lib/git/docbuild/linux/Documentation/edac/scrub.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ Scrub Control”h]”hŒ Scrub Control”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ paragraph”“”)�”}”(hŒ*Copyright (c) 2024-2025 HiSilicon Limited.”h]”hŒ*Copyright (c) 2024-2025 HiSilicon Limited.”…”�”}”(hhßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KhhÊh²hubhŒ field_list”“”)�”}”(hhh]”(hŒfield”“”)�”}”(hhh]”(hŒ field_name”“”)�”}”(hŒAuthor”h]”hŒAuthor”…”�”}”(hhùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hhôh³hÇh´KubhŒ field_body”“”)�”}”(hŒ"Shiju Jose ”h]”hÞ)�”}”(hj h]”(hŒ Shiju Jose <”…”�”}”(hj h²hh³Nh´NubhŒ reference”“”)�”}”(hŒshiju.jose@huawei.com”h]”hŒshiju.jose@huawei.com”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”Œmailto:shiju.jose@huawei.com”uh1jhj ubhŒ>”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhôubeh}”(h]”h ]”h"]”h$]”h&]”uh1hòh³hÇh´K hhïh²hubhó)�”}”(hhh]”(hø)�”}”(hŒLicense”h]”hŒLicense”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1h÷hj<h³hÇh´Kubj)�”}”(hŒ•The 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Þ)�”}”(hŒ”The 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Œ”The GNU Free Documentation License, Version 1.2 without Invariant Sections, Front-Cover Texts nor Back-Cover Texts. (dual licensed under the GPL v2)”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hòh³hÇh´K hhïh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1híhhÊh²hh³hÇh´K ubhŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒWritten for: 6.15 ”h]”hÞ)�”}”(hŒWritten for: 6.15”h]”hŒWritten for: 6.15”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjsh²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jqh³hÇh´KhhÊh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj˜h²hh³hÇh´KubhÞ)�”}”(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.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj˜h²hubhÞ)�”}”(hŒÑMemory 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]”hŒÑMemory 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.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj˜h²hubhÞ)�”}”(hŒ�DIMMs can be scrubbed at a configurable rate to detect uncorrected memory errors and attempt recovery from detected errors, providing the following benefits:”h]”hŒ�DIMMs can be scrubbed at a configurable rate to detect uncorrected memory errors and attempt recovery from detected errors, providing the following benefits:”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Khj˜h²hubhŒenumerated_list”“”)�”}”(hhh]”(jw)�”}”(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.”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÕh²hh³hÇh´Nubjw)�”}”(hŒ’When detected, uncorrected errors caught in unallocated memory pages are isolated and prevented from being allocated to an application or the OS. ”h]”hÞ)�”}”(hŒ‘When detected, uncorrected errors caught in unallocated memory pages are isolated and prevented from being allocated to an application or the OS.”h]”hŒ‘When detected, uncorrected errors caught in unallocated memory pages are isolated and prevented from being allocated to an application or the OS.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K#hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÕh²hh³hÇh´Nubjw)�”}”(hŒYThis reduces the likelihood of software or hardware products encountering memory errors. ”h]”hÞ)�”}”(hŒXThis reduces the likelihood of software or hardware products encountering memory errors.”h]”hŒXThis reduces the likelihood of software or hardware products encountering memory errors.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÕh²hh³hÇh´Nubjw)�”}”(hŒ½The 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Þ)�”}”(hŒ¼The 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Œ¼The 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.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÕh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jÓhj˜h²hh³hÇh´K ubhÞ)�”}”(hŒ&There are 2 types of memory scrubbing:”h]”hŒ&There are 2 types of memory scrubbing:”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K-hj˜h²hubjÔ)�”}”(hhh]”(jw)�”}”(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.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K/hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjQh²hh³hÇh´Nubjw)�”}”(hŒFOn-demand scrubbing for a specific address range or region of memory. ”h]”hÞ)�”}”(hŒEOn-demand scrubbing for a specific address range or region of memory.”h]”hŒEOn-demand scrubbing for a specific address range or region of memory.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K1hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjQh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBuh1jÓhj˜h²hh³hÇh´K/ubhÞ)�”}”(hŒËSeveral 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]”hŒËSeveral 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).”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K3hj˜h²hubhÞ)�”}”(hŒ®The 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]”hŒ®The control mechanisms vary across different memory scrubbers. To enable standardized userspace tooling, there is a need to present these controls through a standardized ABI.”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K7hj˜h²hubhÞ)�”}”(hŒðA 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]”hŒðA 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.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K;hj˜h²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ)Use cases of common scrub control feature”h]”hŒ)Use cases of common scrub control feature”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj¼h²hh³hÇh´KAubjÔ)�”}”(hhh]”(jw)�”}”(hX¡Several 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Þ)�”}”(hŒüSeveral 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]”hŒüSeveral 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.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KChjÐubhÞ)�”}”(hX¢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]”hX¢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.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KHhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÍh²hh³hÇh´Nubjw)�”}”(hŒõUser-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Þ)�”}”(hŒôUser-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ŒôUser-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.”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KOhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÍh²hh³hÇh´Nubjw)�”}”(hŒ�User-space tools enable on-demand scrubbing for specific address ranges, provided that the scrubber supports this functionality. ”h]”hÞ)�”}”(hŒ€User-space tools enable on-demand scrubbing for specific address ranges, provided that the scrubber supports this functionality.”h]”hŒ€User-space tools enable on-demand scrubbing for specific address ranges, provided that the scrubber supports this functionality.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KThjubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÍh²hh³hÇh´Nubjw)�”}”(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Þ)�”}”(hŒ•User-space tools can also control memory DIMM scrubbing at a configurable scrub rate via sysfs scrub controls. This approach offers several benefits:”h]”hŒ•User-space tools can also control memory DIMM scrubbing at a configurable scrub rate via sysfs scrub controls. This approach offers several benefits:”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KWhj&ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒt4.1. Detects uncorrectable memory errors early, before user access to affected memory, helping facilitate recovery. ”h]”(hŒterm”“”)�”}”(hŒN4.1. Detects uncorrectable memory errors early, before user access to affected”h]”hŒN4.1. Detects uncorrectable memory errors early, before user access to affected”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jCh³hÇh´K[hj?ubhŒ definition”“”)�”}”(hhh]”hÞ)�”}”(hŒ$memory, helping facilitate recovery.”h]”hŒ$memory, helping facilitate recovery.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K[hjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jShj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=h³hÇh´K[hj:ubj>)�”}”(hŒX4.2. Reduces the likelihood of correctable errors developing into uncorrectable errors. ”h]”(jD)�”}”(hŒO4.2. Reduces the likelihood of correctable errors developing into uncorrectable”h]”hŒO4.2. Reduces the likelihood of correctable errors developing into uncorrectable”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jCh³hÇh´K^hjrubjT)�”}”(hhh]”hÞ)�”}”(hŒerrors.”h]”hŒerrors.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K^hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jShjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1j=h³hÇh´K^hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j8hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÍh²hh³Nh´Nubjw)�”}”(hXËPolicy 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Þ)�”}”(hXÊPolicy 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]”hXÊPolicy 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.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K`hj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjÍh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBuh1jÓhj¼h²hh³hÇh´KCubeh}”(h]”Œ)use-cases-of-common-scrub-control-feature”ah ]”h"]”Œ)use cases of common scrub control feature”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KAubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒScrubbing features”h]”hŒScrubbing features”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÓh²hh³hÇh´KiubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒCXL Memory Scrubbing features”h]”hŒCXL Memory Scrubbing features”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjäh²hh³hÇh´KlubhÞ)�”}”(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]”(hŒCXL spec r3.1 ”…”�”}”(hjõh²hh³Nh´NubhŒfootnote_reference”“”)�”}”(hŒ[1]_”h]”hŒ1”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œrefid”Œid5”Œdocname”Œ edac/scrub”uh1jýhjõŒresolved”KubhX 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.”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Knhjäh²hubhÞ)�”}”(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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kshjäh²hubhÞ)�”}”(hŒ©In 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]”hŒ©In 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.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kzhjäh²hubeh}”(h]”Œcxl-memory-scrubbing-features”ah ]”h"]”Œcxl memory scrubbing features”ah$]”h&]”uh1hÈhjÓh²hh³hÇh´KlubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒError Check Scrub (ECS)”h]”hŒError Check Scrub (ECS)”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjAh²hh³hÇh´KubhÞ)�”}”(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]”(hŒCXL spec r3.1 ”…”�”}”(hjRh²hh³Nh´Nubjþ)�”}”(hŒ[1]_”h]”hŒ1”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”jjjjuh1jýhjRjKubhX  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.”…”�”}”(hjRh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K�hjAh²hubhÞ)�”}”(hŒ¿The 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]”hŒ¿The 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.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K‡hjAh²hubeh}”(h]”Œerror-check-scrub-ecs”ah ]”h"]”Œerror check scrub (ecs)”ah$]”h&]”uh1hÈhjÓh²hh³hÇh´KubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ)ACPI RAS2 Hardware-based Memory Scrubbing”h]”hŒ)ACPI RAS2 Hardware-based Memory Scrubbing”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj‰h²hh³hÇh´KŒubhÞ)�”}”(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]”(hŒACPI spec 6.5 ”…”�”}”(hjšh²hh³Nh´Nubjþ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”Œid3”ah ]”h"]”h$]”h&]”jŒid6”jjuh1jýhjšjKubhŒù 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.”…”�”}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KŽhj‰h²hubhÞ)�”}”(hŒ¾Memory 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]”hŒ¾Memory 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).”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K“hj‰h²hubhÞ)�”}”(hŒÑThe 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]”hŒÑThe 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,”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K—hj‰h²hubjÔ)�”}”(hhh]”(jw)�”}”(hŒcIndependent memory scrubbing controls for each NUMA domain, identified using its proximity domain. ”h]”hÞ)�”}”(hŒbIndependent memory scrubbing controls for each NUMA domain, identified using its proximity domain.”h]”hŒbIndependent memory scrubbing controls for each NUMA domain, identified using its proximity domain.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K›hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjØh²hh³hÇh´Nubjw)�”}”(hŒ‰Provision for background (patrol) scrubbing of the entire memory system, as well as on-demand scrubbing for a specific region of memory. ”h]”hÞ)�”}”(hŒˆProvision for background (patrol) scrubbing of the entire memory system, as well as on-demand scrubbing for a specific region of memory.”h]”hŒˆProvision for background (patrol) scrubbing of the entire memory system, as well as on-demand scrubbing for a specific region of memory.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kžhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjØh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBuh1jÓhj‰h²hh³hÇh´K›ubeh}”(h]”Œ)acpi-ras2-hardware-based-memory-scrubbing”ah ]”h"]”Œ)acpi ras2 hardware-based memory scrubbing”ah$]”h&]”uh1hÈhjÓh²hh³hÇh´KŒubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ"ACPI Address Range Scrubbing (ARS)”h]”hŒ"ACPI Address Range Scrubbing (ARS)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K¢ubhÞ)�”}”(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]”(hŒACPI spec 6.5 ”…”�”}”(hj*h²hh³Nh´Nubjþ)�”}”(hŒ[2]_”h]”hŒ2”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”Œid4”ah ]”h"]”h$]”h&]”jj±jjuh1jýhj*jKubhXi 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.”…”�”}”(hj*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¤hjh²hubhÞ)�”}”(hŒ?The following functions are supported as per the specification:”h]”hŒ?The following functions are supported as per the specification:”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kªhjh²hubjÔ)�”}”(hhh]”(jw)�”}”(hŒ‰Query ARS Capabilities for a given address range, indicates platform supports the ACPI NVDIMM Root Device Unconsumed Error Notification. ”h]”hÞ)�”}”(hŒˆQuery ARS Capabilities for a given address range, indicates platform supports the ACPI NVDIMM Root Device Unconsumed Error Notification.”h]”hŒˆQuery ARS Capabilities for a given address range, indicates platform supports the ACPI NVDIMM Root Device Unconsumed Error Notification.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¬hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjYh²hh³hÇh´Nubjw)�”}”(hŒ�Start 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Þ)�”}”(hŒ�Start 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Œ�Start ARS triggers an Address Range Scrub for the given memory range. Address scrubbing can be done for volatile or persistent memory, or both.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¯hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjYh²hh³hÇh´Nubjw)�”}”(hŒwQuery ARS Status command allows software to get the status of ARS, including the progress of ARS and ARS error record. ”h]”hÞ)�”}”(hŒvQuery ARS Status command allows software to get the status of ARS, including the progress of ARS and ARS error record.”h]”hŒvQuery ARS Status command allows software to get the status of ARS, including the progress of ARS and ARS error record.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K²hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjYh²hh³hÇh´Nubjw)�”}”(hŒClear Uncorrectable Error. ”h]”hÞ)�”}”(hŒClear Uncorrectable Error.”h]”hŒClear Uncorrectable Error.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kµhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjYh²hh³hÇh´Nubjw)�”}”(hŒTranslate SPA ”h]”hÞ)�”}”(hŒ Translate SPA”h]”hŒ Translate SPA”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K·hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjYh²hh³hÇh´Nubjw)�”}”(hŒARS Error Inject etc. ”h]”hÞ)�”}”(hŒARS Error Inject etc.”h]”hŒARS Error Inject etc.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¹hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjYh²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBuh1jÓhjh²hh³hÇh´K¬ubhÞ)�”}”(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.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K»hjh²hubhŒfootnote”“”)�”}”(hŒ2https://computeexpresslink.org/cxl-specification/ ”h]”(hŒlabel”“”)�”}”(hŒ1”h]”hŒ1”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhÞ)�”}”(hŒ1https://computeexpresslink.org/cxl-specification/”h]”j)�”}”(hjh]”hŒ1https://computeexpresslink.org/cxl-specification/”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”juh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K¾hjubeh}”(h]”jah ]”h"]”Œ1”ah$]”h&]”(j jdejjuh1jh³hÇh´K¾hjh²hjKubj)�”}”(hŒ!https://uefi.org/specs/ACPI/6.5/ ”h]”(j)�”}”(hŒ2”h]”hŒ2”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5ubhÞ)�”}”(hŒ https://uefi.org/specs/ACPI/6.5/”h]”j)�”}”(hjIh]”hŒ https://uefi.org/specs/ACPI/6.5/”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œrefuri”jIuh1jhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÀhj5ubeh}”(h]”j±ah ]”h"]”Œ2”ah$]”h&]”(j¬j<ejjuh1jh³hÇh´KÀhjh²hjKubeh}”(h]”Œ acpi-address-range-scrubbing-ars”ah ]”h"]”Œ"acpi address range scrubbing (ars)”ah$]”h&]”uh1hÈhjÓh²hh³hÇh´K¢ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒ(Comparison of various scrubbing features”h]”hŒ(Comparison of various scrubbing features”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjnh²hh³hÇh´KÃubhŒ 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]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1j�hjŒubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1j�hjŒubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1j�hjŒubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1j�hjŒubj�)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1j�hjŒubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÞ)�”}”(hŒName”h]”hŒName”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÇhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÊubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ ACPI RAS2”h]”hŒ ACPI RAS2”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÊubjÎ)�”}”(hhh]”hÞ)�”}”(hŒCXL patrol scrub”h]”hŒCXL patrol scrub”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÊubjÎ)�”}”(hhh]”hÞ)�”}”(hŒCXL ECS”h]”hŒCXL ECS”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÊubjÎ)�”}”(hhh]”hÞ)�”}”(hŒARS”h]”hŒARS”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÆhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒOn-demand Scrubbing”h]”hŒOn-demand Scrubbing”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjHubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjHubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjHubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjHubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÊhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒBackground scrubbing”h]”hŒBackground scrubbing”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÄubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÄubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÄubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÄubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÏhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒMode of scrubbing”h]”hŒMode of scrubbing”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÔhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj@ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒScrub ctrl per NUMA domain.”h]”hŒScrub ctrl per NUMA domain.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÔhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj@ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ per device”h]”hŒ per device”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÔhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj@ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒper memory media”h]”hŒper memory media”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÔhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj@ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒUnknown”h]”hŒUnknown”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÔhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒQuery scrub capabilities”h]”hŒQuery scrub capabilities”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÙhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¼ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÙhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¼ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÙhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¼ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÙhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¼ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÙhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒSetting address range”h]”hŒSetting address range”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÞhj; ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj8 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÞhjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj8 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÞhji ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj8 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÞhj€ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj8 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÞhj— ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒSetting scrub rate”h]”hŒSetting scrub rate”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kãhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj´ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KãhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj´ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kãhjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj´ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kãhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj´ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kãhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj´ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒUnit for scrub rate”h]”hŒUnit for scrub rate”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kèhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj0 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Not Defined”h]”hŒ Not Defined”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KèhjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj0 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒin hours”h]”hŒin hours”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kèhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj0 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kèhjx ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj0 ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kèhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj0 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒScrub status/ Completion”h]”hŒScrub status/ Completion”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kíhj¯ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¬ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ"Supported on-demand scrubbing only”h]”hŒ"Supported on-demand scrubbing only”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KìhjÆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¬ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KíhjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¬ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kíhjô ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¬ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kíhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¬ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒUC error reporting”h]”hŒUC error reporting”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kñhj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj( ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Exception”h]”hŒ Exception”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KòhjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj( ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ(CXL general media/DRAM event/media scan?”h]”hŒ(CXL general media/DRAM event/media scan?”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KñhjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj( ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ(CXL general media/DRAM event/media scan?”h]”hŒ(CXL general media/DRAM event/media scan?”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kñhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj( ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ$ACPI UCE notify and query ARS status”h]”hŒ$ACPI UCE notify and query ARS status”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Kñhj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj( ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubjÉ)�”}”(hhh]”(jÎ)�”}”(hhh]”hÞ)�”}”(hŒSupport for EDAC control”h]”hŒSupport for EDAC control”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K÷hj§ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¤ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K÷hj¾ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¤ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K÷hjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¤ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒ Supported”h]”hŒ Supported”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K÷hjì ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¤ ubjÎ)�”}”(hhh]”hÞ)�”}”(hŒNo”h]”hŒNo”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´K÷hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÍhj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÃhjŒubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jŠhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j…hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³hÇh´KÅhjnh²hubeh}”(h]”Œ(comparison-of-various-scrubbing-features”ah ]”h"]”Œ(comparison of various scrubbing features”ah$]”h&]”uh1hÈhjÓh²hh³hÇh´KÃubeh}”(h]”Œscrubbing-features”ah ]”h"]”Œscrubbing features”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KiubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒThe File System”h]”hŒThe File System”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjI h²hh³hÇh´KýubhÞ)�”}”(hŒNThe control attributes of a registered scrubber instance could be accessed in:”h]”hŒNThe control attributes of a registered scrubber instance could be accessed in:”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´KÿhjI h²hubhÞ)�”}”(hŒ(/sys/bus/edac/devices//scrubX/”h]”hŒ(/sys/bus/edac/devices//scrubX/”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjI h²hubeh}”(h]”Œthe-file-system”ah ]”h"]”Œthe file system”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KýubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒsysfs”h]”hŒsysfs”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj~ h²hh³hÇh´MubhÞ)�”}”(hŒJSysfs files are documented in `Documentation/ABI/testing/sysfs-edac-scrub`”h]”(hŒSysfs files are documented in ”…”�”}”(hj� h²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ,`Documentation/ABI/testing/sysfs-edac-scrub`”h]”hŒ*Documentation/ABI/testing/sysfs-edac-scrub”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j— hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj~ h²hubhÞ)�”}”(hŒ*`Documentation/ABI/testing/sysfs-edac-ecs`”h]”j˜ )�”}”(hj¯ h]”hŒ(Documentation/ABI/testing/sysfs-edac-ecs”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j— hj­ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M hj~ h²hubeh}”(h]”Œsysfs”ah ]”h"]”Œsysfs”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´MubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒExamples”h]”hŒExamples”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÌ h²hh³hÇh´M ubhÞ)�”}”(hŒ1The usage takes the form shown in these examples:”h]”hŒ1The usage takes the form shown in these examples:”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÌ h²hubjÔ)�”}”(hhh]”jw)�”}”(hŒCXL memory Patrol Scrub ”h]”hÞ)�”}”(hŒCXL memory Patrol Scrub”h]”hŒCXL memory Patrol Scrub”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhjî ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjë h²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBuh1jÓhjÌ h²hh³hÇh´MubhÞ)�”}”(hŒPThe following are the use cases identified why we might increase the scrub rate.”h]”hŒPThe following are the use cases identified why we might increase the scrub rate.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÌ h²hubjr)�”}”(hhh]”(jw)�”}”(hŒ`Scrubbing is needed at device granularity because a device is showing unexpectedly high errors. ”h]”hÞ)�”}”(hŒ_Scrubbing is needed at device granularity because a device is showing unexpectedly high errors.”h]”hŒ_Scrubbing is needed at device granularity because a device is showing unexpectedly high errors.”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhj h²hh³hÇh´Nubjw)�”}”(hŒrScrubbing may apply to memory that isn't online at all yet. Likely this is a system wide default setting on boot. ”h]”hÞ)�”}”(hŒqScrubbing may apply to memory that isn't online at all yet. Likely this is a system wide default setting on boot.”h]”hŒsScrubbing may apply to memory that isn’t online at all yet. Likely this is a system wide default setting on boot.”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´Mhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhj h²hh³hÇh´Nubjw)�”}”(hŒ°Scrubbing at a higher rate because the monitor software has determined that more reliability is necessary for a particular data set. This is called Differentiated Reliability. ”h]”hÞ)�”}”(hŒ¯Scrubbing at a higher rate because the monitor software has determined that more reliability is necessary for a particular data set. This is called Differentiated Reliability.”h]”hŒ¯Scrubbing at a higher rate because the monitor software has determined that more reliability is necessary for a particular data set. This is called Differentiated Reliability.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhj h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j–j—uh1jqh³hÇh´MhjÌ h²hubhÞ)�”}”(hŒ1.1. Device based scrubbing”h]”hŒ1.1. Device based scrubbing”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MhjÌ h²hubhÞ)�”}”(hŒÆCXL memory is exposed to memory management subsystem and ultimately userspace via CXL devices. Device-based scrubbing is used for the first use case described in "Section 1 CXL Memory Patrol Scrub".”h]”hŒÊCXL memory is exposed to memory management subsystem and ultimately userspace via CXL devices. Device-based scrubbing is used for the first use case described in “Section 1 CXL Memory Patrol Scrubâ€�.”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M!hjÌ h²hubhÞ)�”}”(hŒqWhen combining control via the device interfaces and region interfaces, "see Section 1.2 Region based scrubbing".”h]”hŒuWhen combining control via the device interfaces and region interfaces, “see Section 1.2 Region based scrubbingâ€�.”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M%hjÌ h²hubhÞ)�”}”(hŒXSysfs files for scrubbing are documented in `Documentation/ABI/testing/sysfs-edac-scrub`”h]”(hŒ,Sysfs files for scrubbing are documented in ”…”�”}”(hj• h²hh³Nh´Nubj˜ )�”}”(hŒ,`Documentation/ABI/testing/sysfs-edac-scrub`”h]”hŒ*Documentation/ABI/testing/sysfs-edac-scrub”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j— hj• ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M(hjÌ h²hubhÞ)�”}”(hŒ1.2. Region based scrubbing”h]”hŒ1.2. Region based scrubbing”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M+hjÌ h²hubhÞ)�”}”(hX›CXL memory is exposed to memory management subsystem and ultimately userspace via CXL regions. CXL Regions represent mapped memory capacity in system physical address space. These can incorporate one or more parts of multiple CXL memory devices with traffic interleaved across them. The user may want to control the scrub rate via this more abstract region instead of having to figure out the constituent devices and program them separately. The scrub rate for each device covers the whole device. Thus if multiple regions use parts of that device then requests for scrubbing of other regions may result in a higher scrub rate than requested for this specific region.”h]”hX›CXL memory is exposed to memory management subsystem and ultimately userspace via CXL regions. CXL Regions represent mapped memory capacity in system physical address space. These can incorporate one or more parts of multiple CXL memory devices with traffic interleaved across them. The user may want to control the scrub rate via this more abstract region instead of having to figure out the constituent devices and program them separately. The scrub rate for each device covers the whole device. Thus if multiple regions use parts of that device then requests for scrubbing of other regions may result in a higher scrub rate than requested for this specific region.”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M-hjÌ h²hubhÞ)�”}”(hŒgRegion-based scrubbing is used for the third use case described in "Section 1 CXL Memory Patrol Scrub".”h]”hŒkRegion-based scrubbing is used for the third use case described in “Section 1 CXL Memory Patrol Scrubâ€�.”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M7hjÌ h²hubhÞ)�”}”(hŒgUserspace must follow below set of rules on how to set the scrub rates for any mixture of requirements.”h]”hŒgUserspace must follow below set of rules on how to set the scrub rates for any mixture of requirements.”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M:hjÌ h²hubjÔ)�”}”(hhh]”(jw)�”}”(hŒÇTaking each region in turn from lowest desired scrub rate to highest and set their scrub rates. Later regions may override the scrub rate on individual devices (and hence potentially whole regions). ”h]”hÞ)�”}”(hŒÆTaking each region in turn from lowest desired scrub rate to highest and set their scrub rates. Later regions may override the scrub rate on individual devices (and hence potentially whole regions).”h]”hŒÆTaking each region in turn from lowest desired scrub rate to highest and set their scrub rates. Later regions may override the scrub rate on individual devices (and hence potentially whole regions).”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´M=hjì ubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjé h²hh³hÇh´Nubjw)�”}”(hXTake each device for which enhanced scrubbing is required (higher rate) and set those scrub rates. This will override the scrub rates of individual devices, setting them to the maximum rate required for any of the regions they help back, unless a specific rate is already defined. ”h]”hÞ)�”}”(hXTake each device for which enhanced scrubbing is required (higher rate) and set those scrub rates. This will override the scrub rates of individual devices, setting them to the maximum rate required for any of the regions they help back, unless a specific rate is already defined.”h]”hXTake each device for which enhanced scrubbing is required (higher rate) and set those scrub rates. This will override the scrub rates of individual devices, setting them to the maximum rate required for any of the regions they help back, unless a specific rate is already defined.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MAhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhjé h²hh³hÇh´Nubeh}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBuh1jÓhjÌ h²hh³hÇh´M=ubhÞ)�”}”(hŒXSysfs files for scrubbing are documented in `Documentation/ABI/testing/sysfs-edac-scrub`”h]”(hŒ,Sysfs files for scrubbing are documented in ”…”�”}”(hj"h²hh³Nh´Nubj˜ )�”}”(hŒ,`Documentation/ABI/testing/sysfs-edac-scrub`”h]”hŒ*Documentation/ABI/testing/sysfs-edac-scrub”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j— hj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MFhjÌ h²hubjÔ)�”}”(hhh]”jw)�”}”(hŒ#CXL memory Error Check Scrub (ECS) ”h]”hÞ)�”}”(hŒ"CXL memory Error Check Scrub (ECS)”h]”hŒ"CXL memory Error Check Scrub (ECS)”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MIhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jvhj>h²hh³hÇh´Nubah}”(h]”h ]”h"]”h$]”h&]”j>j?j@hjAjBŒstart”Kuh1jÓhjÌ h²hh³hÇh´MIubhÞ)�”}”(hX�The Error Check Scrub (ECS) feature enables a memory device to perform error checking and correction (ECC) and count single-bit errors. The associated memory controller sets the ECS mode with a trigger sent to the memory device. CXL ECS control allows the host, thus the userspace, to change the attributes for error count mode, threshold number of errors per segment (indicating how many segments have at least that number of errors) for reporting errors, and reset the ECS counter. Thus the responsibility for initiating Error Check Scrub on a memory device may lie with the memory controller or platform when unexpectedly high error rates are detected.”h]”hX�The Error Check Scrub (ECS) feature enables a memory device to perform error checking and correction (ECC) and count single-bit errors. The associated memory controller sets the ECS mode with a trigger sent to the memory device. CXL ECS control allows the host, thus the userspace, to change the attributes for error count mode, threshold number of errors per segment (indicating how many segments have at least that number of errors) for reporting errors, and reset the ECS counter. Thus the responsibility for initiating Error Check Scrub on a memory device may lie with the memory controller or platform when unexpectedly high error rates are detected.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MKhjÌ h²hubhÞ)�”}”(hŒVSysfs files for scrubbing are documented in `Documentation/ABI/testing/sysfs-edac-ecs`”h]”(hŒ,Sysfs files for scrubbing are documented in ”…”�”}”(hjnh²hh³Nh´Nubj˜ )�”}”(hŒ*`Documentation/ABI/testing/sysfs-edac-ecs`”h]”hŒ(Documentation/ABI/testing/sysfs-edac-ecs”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j— hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³hÇh´MUhjÌ h²hubeh}”(h]”Œexamples”ah ]”h"]”Œexamples”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´M ubeh}”(h]”Œ scrub-control”ah ]”h"]”Œ scrub control”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”jÍŒ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”}”(Œ1”]”(jÿjZeŒ2”]”(j¢j2euŒrefids”}”Œnameids”}”(j—j”j¹j¶jÐjÍjF jC j>j;j†jƒjjjkjhj2jjcj±j> j; j{ jx jÉ jÆ j�jŒuŒ nametypes”}”(j—‰j¹‰jЉjF ‰j>‰j†‰j‰jk‰j2ˆjcˆj> ‰j{ ‰jÉ ‰j�‰uh}”(j”hÊj¶j˜jÍj¼jC jÓj;jäj jÿjƒjAjdjZjj‰j¬j¢jhjj<j2jjj±j5j; jnjx jI jÆ j~ jŒjÌ uŒ footnote_refs”}”(jü]”(jÿjZejþ]”(j¢j2euŒ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”(jj5eŒ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jÊKs…”R”Œparse_messages”]”hŒsystem_message”“”)�”}”(hhh]”hÞ)�”}”(hŒ:Enumerated list start value not ordinal-1: "2" (ordinal 2)”h]”hŒ>Enumerated list start value not ordinal-1: “2â€� (ordinal 2)”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝhj&ubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÇŒline”Kuh1j$hjÌ h²hh³hÇh´MIubaŒtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.