RE: [PATCH v10 00/11] EDAC: Scrub: introduce generic EDAC RAS control feature driver + CXL/ACPI-RAS2 drivers

From: Shiju Jose
Date: Wed Jul 31 2024 - 07:28:53 EST


>-----Original Message-----
>From: Fan Ni <nifan.cxl@xxxxxxxxx>
>Sent: 30 July 2024 22:01
>To: Shiju Jose <shiju.jose@xxxxxxxxxx>
>Cc: linux-edac@xxxxxxxxxxxxxxx; linux-cxl@xxxxxxxxxxxxxxx; linux-
>acpi@xxxxxxxxxxxxxxx; linux-mm@xxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx;
>bp@xxxxxxxxx; tony.luck@xxxxxxxxx; rafael@xxxxxxxxxx; lenb@xxxxxxxxxx;
>mchehab@xxxxxxxxxx; dan.j.williams@xxxxxxxxx; dave@xxxxxxxxxxxx; Jonathan
>Cameron <jonathan.cameron@xxxxxxxxxx>; dave.jiang@xxxxxxxxx;
>alison.schofield@xxxxxxxxx; vishal.l.verma@xxxxxxxxx; ira.weiny@xxxxxxxxx;
>david@xxxxxxxxxx; Vilas.Sridharan@xxxxxxx; leo.duran@xxxxxxx;
>Yazen.Ghannam@xxxxxxx; rientjes@xxxxxxxxxx; jiaqiyan@xxxxxxxxxx;
>Jon.Grimm@xxxxxxx; dave.hansen@xxxxxxxxxxxxxxx;
>naoya.horiguchi@xxxxxxx; james.morse@xxxxxxx; jthoughton@xxxxxxxxxx;
>somasundaram.a@xxxxxxx; erdemaktas@xxxxxxxxxx; pgonda@xxxxxxxxxx;
>duenwen@xxxxxxxxxx; mike.malvestuto@xxxxxxxxx; gthelen@xxxxxxxxxx;
>wschwartz@xxxxxxxxxxxxxxxxxxx; dferguson@xxxxxxxxxxxxxxxxxxx;
>wbs@xxxxxxxxxxxxxxxxxxxxxx; nifan.cxl@xxxxxxxxx; tanxiaofei
><tanxiaofei@xxxxxxxxxx>; Zengtao (B) <prime.zeng@xxxxxxxxxxxxx>; Roberto
>Sassu <roberto.sassu@xxxxxxxxxx>; kangkang.shen@xxxxxxxxxxxxx;
>wanghuiqiang <wanghuiqiang@xxxxxxxxxx>; Linuxarm
><linuxarm@xxxxxxxxxx>
>Subject: Re: [PATCH v10 00/11] EDAC: Scrub: introduce generic EDAC RAS
>control feature driver + CXL/ACPI-RAS2 drivers
>
>On Fri, Jul 26, 2024 at 05:05:44PM +0100, shiju.jose@xxxxxxxxxx wrote:
>> From: Shiju Jose <shiju.jose@xxxxxxxxxx>
>>
>Hi Shiju,
>FYI. Not sure if I missed something, but I hit some issue when compiling the
>patch set.
>
>I tried to apply this patch set on top of fixes branch (tag:
>cxl-fixes-6.10-rc7, origin/fixes), and compile, it fails with following erors.
>
>fan@DT ~/c/linux-fixes (fixes)> make -j 16 mkdir -p /home/fan/cxl/linux-
>fixes/tools/objtool && make O=/home/fan/cxl/linux-fixes subdir=tools/objtool --
>no-print-directory -C objtool
> INSTALL libsubcmd_headers
> CALL scripts/checksyscalls.sh
> CC drivers/ras/acpi_ras2.o
>drivers/ras/acpi_ras2.c: In function ‘ras2_update_patrol_scrub_params_cache’:
>drivers/ras/acpi_ras2.c:64:37: error: implicit declaration of function ‘FIELD_GET’
>[-Werror=implicit-function-declaration]
> 64 | ras2_ctx->min_scrub_cycle =
>FIELD_GET(RAS2_PATROL_SCRUB_MIN_SCHRS_OUT_MASK,
> | ^~~~~~~~~
>drivers/ras/acpi_ras2.c: In function ‘ras2_hw_scrub_set_enabled_bg’:
>drivers/ras/acpi_ras2.c:216:50: error: implicit declaration of function
>‘FIELD_PREP’ [-Werror=implicit-function-declaration]
> 216 | ps_sm->params.scrub_params_in |=
>FIELD_PREP(RAS2_PATROL_SCRUB_SCHRS_IN_MASK,
> | ^~~~~~~~~~
>cc1: all warnings being treated as errors
>make[4]: *** [scripts/Makefile.build:244: drivers/ras/acpi_ras2.o] Error 1
>make[3]: *** [scripts/Makefile.build:485: drivers/ras] Error 2
>make[3]: *** Waiting for unfinished jobs....
>make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
>make[1]: *** [/home/fan/cxl/linux-fixes/Makefile:1934: .] Error 2
>make: *** [Makefile:240: __sub-make] Error 2
>
>
>It seems we need to include "linux/bitfield.h". Fixed the compiling with following
>change:
>
>fan@DT ~/c/linux-fixes (fixes)> git diff diff --git a/drivers/ras/acpi_ras2.c
>b/drivers/ras/acpi_ras2.c index b2381d5b37d0..b4d229e6451f 100644
>--- a/drivers/ras/acpi_ras2.c
>+++ b/drivers/ras/acpi_ras2.c
>@@ -11,6 +11,7 @@
> #include <linux/edac_ras_feature.h>
> #include <linux/platform_device.h>
> #include <acpi/ras2_acpi.h>
>+#include <linux/bitfield.h>
>
> #define RAS2_DEV_NUM_RAS_FEATURES 1
>
>
>
>Fan
Hi Fan,

Thanks for looking into this issue and giving the fix.
The series was tested and produced on mainline v6.10-rc3 with arm64 build.
I checked in the cxl-fixes-6.10-rc7 and mainline v6.10-rc7 for this issue.
For arm64, build is successful, however for X86, build reproduced the build errors
you reported.
I will incorporate the fix in the next version.

Thanks,
Shiju
>
>> Previously known as "ras: scrub: introduce subsystem + CXL/ACPI-RAS2
>drivers".
>>
>> EDAC based Subsystem for controlling RAS Features
>> =================================================
>> The proposed EDAC based subsystem for controlling RAS features and
>> expose the feature's control attributes to the userspace in sysfs.
>> Some Examples:
>> - Scrub control
>> - Error Check Scrub (ECS) control
>> - ACPI RAS2 features
>> - ACPI Address Range Scrubbing (ARS)
>> - Post Package Repair (PPR) etc.
>>
>> High level design is illustrated in the following diagram.
>>
>> _______________________________________________
>> | Userspace - Rasdaemon |
>> | ____________ |
>> | | RAS CXL | _____________ |
>> | | Err Handler|----->| | |
>> | |____________| | RAS Dynamic | |
>> | ____________ | Scrub | |
>> | | RAS Memory |----->| Controller | |
>> | | Err Handler| |_____________| |
>> | |____________| | |
>> |__________________________|____________________|
>> |
>> |
>> _______________________________|______________________________
>> | Kernel EDAC based SubSystem | for RAS Features Control |
>> | ______________________________|____________________________ |
>> || EDAC Core Sysfs EDAC| Bus | |
>> || __________________________|_______ _____________ | |
>> || |/sys/bus/edac/devices/<dev>/scrub/| | EDAC Device | | |
>> || |/sys/bus/edac/devices/<dev>/ecs*/ |<->| EDAC MC | | |
>> || |/sys/bus/edac/devices/<dev>/ars/ | | EDAC Sysfs | | |
>> || |/sys/bus/edac/devices/<dev>/ppr/ | | EDAC Module | | |
>> || |__________________________________| |_____________| | |
>> || | EDAC Bus | |
>> || Get | | |
>> || __________ Feature's | __________ | |
>> || | |Descs _________|______ | | | |
>> || |EDAC Scrub|<-----| EDAC RAS |---->| EDAC ARS | | |
>> || |__________| |Control Feature | |__________| | |
>> || __________ | Driver | __________ | |
>> || | |<-----|________________|---->| | | |
>> || |EDAC ECS | Register RAS | Features | EDAC PPR | | |
>> || |__________| | |__________| | |
>> || ______________________|___________________ | |
>> ||_________|_____________|_____________|____________|________| |
>> | _______|____ _____|______ ____|______ ___|_____ |
>> | | | | CXL Mem | | | | | |
>> | | ACPI RAS2 | | Driver | | ACPI ARS | | PPR | |
>> | | Driver | | Scrub,ECS | | Driver | | Driver | |
>> | |____________| |___________| |___________| |_________| |
>> | | | | | |
>>
>|________|______________|______________|___________|___________|
>> | | | |
>> _______|______________|______________|___________|___________
>> | __|______________|_ ____________|___________|_____ |
>> | | | |
>> | | Platform HW and Firmware | |
>> | |__________________________________________________| |
>>
>|_____________________________________________________________|
>>
>> 1. EDAC Features components - Create feature specific descriptors.
>> 2. EDAC RAS Feature driver - Get feature's attr descriptors from the
>> EDAC RAS feature component and registers device's RAS features with
>> EDAC bus and expose the feature's sysfs attributes under the sysfs
>> EDAC bus.
>> 3. RAS dynamic scrub controller - Userspace sample module added in the
>> rasdaemon to start scrubbing when excess number of related errors
>> are reported in a short span of time.
>>
>> The added EDAC feature specific components (e.g. EDAC scrub, EDAC ECS,
>> EDAC PPR etc) do callbacks to the parent driver (e.g. CXL driver,
>> ACPI RAS driver etc) for the controls rather than just letting the
>> caller deal with it because of the following reasons.
>> 1. Enforces a common API across multiple implementations can do that
>> via review, but that's not generally gone well in the long run for
>> subsystems that have done it (several have later moved to callback
>> and feature list based approaches).
>> 2. Gives a path for 'intercepting' in the EDAC feature driver.
>> An example for this is that we could intercept PPR repair calls
>> and sanity check that the memory in question is offline before
>> passing back to the underlying code. Sure we could rely on doing
>> that via some additional calls from the parent driver, but the
>> ABI will get messier.
>> 3. (Speculative) we may get in kernel users of some features in the
>> long run.
>>
>> More details of the common RAS features are described in the following
>> sections.
>>
>> Memory Scrubbing
>> ================
>> Increasing DRAM size and cost has made memory subsystem reliability an
>> important concern. These modules are used where potentially corrupted
>> data could cause expensive or fatal issues. Memory errors are one of
>> the top hardware failures that cause server and workload crashes.
>>
>> Memory scrub is a feature where an ECC engine reads data from each
>> memory media location, corrects with an ECC if necessary and writes
>> the corrected data back to the same memory media location.
>>
>> The memory DIMMs could be scrubbed at a configurable rate to detect
>> uncorrected memory errors and attempts to recover from detected memory
>> errors providing the following benefits.
>> - Proactively scrubbing memory DIMMs reduces the chance of a correctable
>> error becoming uncorrectable.
>> - Once detected, uncorrected errors caught in unallocated memory pages are
>> isolated and prevented from being allocated to an application or the OS.
>> - The probability of software/hardware products encountering memory
>> errors is reduced.
>> Some details of background can be found in Reference [5].
>>
>> There are 2 types of memory scrubbing, 1. Background (patrol)
>> scrubbing of the RAM whilest the RAM is otherwise
>> idle.
>> 2. On-demand scrubbing for a specific address range/region of memory.
>>
>> There are several types of interfaces to HW memory scrubbers
>> identified such as ACPI NVDIMM ARS(Address Range Scrub), CXL memory
>> device patrol scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing.
>>
>> The scrub control varies between different memory scrubbers. To allow
>> for standard userspace tooling there is a need to present these
>> controls with a standard ABI.
>>
>> Introduce generic memory EDAC scrub control which allows user to
>> control underlying scrubbers in the system via generic sysfs scrub
>> control interface.
>>
>> Use case of common scrub control feature
>> ========================================
>> 1. There are several types of interfaces to HW memory scrubbers identified
>> such as ACPI NVDIMM ARS(Address Range Scrub), CXL memory device patrol
>> scrub, CXL DDR5 ECS, ACPI RAS2 memory scrubbing features and software
>> based memory scrubber(discussed in the community Reference [5]).
>> Also some scrubbers support controlling (background) patrol scrubbing
>> (ACPI RAS2, CXL) and/or on-demand scrubbing(ACPI RAS2, ACPI ARS).
>> However the scrub controls varies between memory scrubbers. Thus there
>> is a requirement for a standard generic sysfs scrub controls exposed
>> to the userspace for the seamless control of the HW/SW scrubbers in
>> the system by admin/scripts/tools etc.
>> 2. Scrub controls in user space allow the user to disable the scrubbing
>> in case disabling of the background patrol scrubbing or changing the
>> scrub rate are needed for other purposes such as performance-aware
>> operations which requires the background operations to be turned off
>> or reduced.
>> 3. Allows to perform on-demand scrubbing for specific address range if
>> supported by the scrubber.
>> 4. User space tools controls scrub the memory DIMMs regularly at a
>> configurable scrub rate using the sysfs scrub controls discussed help,
>> - to detect uncorrectable memory errors early before user accessing
>memory,
>> which helps to recover the detected memory errors.
>> - reduces the chance of a correctable error becoming uncorrectable.
>> 5. Policy control for hotplugged memory. There is not necessarily a system
>> wide bios or similar in the loop to control the scrub settings on a CXL
>> device that wasn't there at boot. What that setting should be is a policy
>> decision as we are trading of reliability vs performance - hence it should
>> be in control of userspace. As such, 'an' interface is needed. Seems more
>> sensible to try and unify it with other similar interfaces than spin
>> yet another one.
>>
>> The draft version of userspace code for dynamic scrub control, based
>> on frequency of memory errors reported to the userspace, is added in
>> rasdaemon and enabled, tested for CXL device based patrol scrubbing
>> feature and ACPI RAS2 based scrubbing feature.
>>
>> https://github.com/shijujose4/rasdaemon/tree/scrub_control_6_june_2024
>>
>> Comparison of scrubbing features
>> ================================
>> ................................................................
>> . . 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.
>> ................................................................
>> . . . . . .
>> . Clear UC . No . No . No . Supported .
>> . error . . . . .
>> . . . . . .
>> ................................................................
>> . . . . . .
>> . Translate . No . No . No . Supported .
>> . *(1)SPA to . . . . .
>> . *(2)DPA . . . . .
>> ................................................................
>> . . . . . .
>> . Error inject . No . Can inject. No . Supported .
>> . . . poison for. . .
>> . . . CXL . . .
>> ................................................................
>> *(1) - SPA - System Physical Address. See section 9.19.7.8
>> Function Index 5 - Translate SPA of ACPI spec r6.5.
>> *(2) - DPA - Device Physical Address. See section 9.19.7.8
>> Function Index 5 - Translate SPA of ACPI spec r6.5.
>>
>> CXL Scrubbing features
>> ======================
>> Add support for control CXL patrol scrubber and ACPI RAS2 HW based
>> memory patrol scrubber and register with the EDAC scrub to expose the
>> scrub controls to the userspace tool.
>>
>> CXL spec r3.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 request to configure patrol scrubber's input configurations.
>>
>> 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 number is not less than the minimum number of hours
>> for the patrol scrub cycle that the device is capable of. In addition,
>> the patrol scrub controls allow the host to disable and enable the
>> feature in case disabling of the feature is needed for other purposes
>> such as performance-aware operations which require the background
>> operations to be turned off.
>>
>> The Error Check Scrub (ECS) is a feature defined in JEDEC DDR5 SDRAM
>> Specification (JESD79-5) and allows the DRAM to internally read,
>> correct single-bit errors, and write back corrected data bits to the
>> DRAM array while providing transparency to error counts.
>>
>> The DDR5 device contains number of memory media FRUs per device. The
>> DDR5 ECS feature and thus the ECS control driver supports configuring
>> the ECS parameters per FRU.
>>
>> ACPI RAS2 Hardware-based Memory Scrubbing
>> =========================================
>> ACPI spec 6.5 section 5.2.21 ACPI RAS2 describes ACPI RAS2 table
>> 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.
>> 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).
>>
>> 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 following as
>> per spec,
>> - Independent memory scrubbing controls for each NUMA domain, identified
>> using its proximity domain.
>> Note: However AmpereComputing has single entry repeated as they have
>> centralized controls.
>> - Provision for background (patrol) scrubbing of the entire memory system,
>> as well as on-demand scrubbing for a specific region of memory.
>>
>> ACPI 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.
>> Following functions are supported as per the specification.
>> 1. Query ARS Capabilities for a given address range, indicates platform
>> supports the ACPI NVDIMM Root Device Unconsumed Error Notification.
>> 2. Start ARS triggers an Address Range Scrub for the given memory range.
>> Address scrubbing can be done for volatile memory, persistent memory,
>> or both.
>> 3. Query ARS Status command allows software to get the status of ARS,
>> including the progress of ARS and ARS error record.
>> 4. Clear Uncorrectable Error.
>> 5. Translate SPA
>> 6. ARS Error Inject etc.
>> Note: Support for ARS is not added in this series because to reduce
>> the line of code for review and could be added after initial code is merged.
>> We'd like feedback on whether this is of interest to ARS community?
>>
>> Series adds,
>> 1. Generic EDAC RAS feature driver, EDAC scrub driver, EDAC ECS driver
>> supports memory scrub control, ECS control and other RAS features
>> in the system.
>> 2. Support for CXL feature mailbox commands, which is used by
>> CXL device scrubbing features.
>> 3. CXL scrub driver supporting patrol scrub control (device and
>> region based).
>> 4. CXL ECS driver supporting ECS control feature.
>> 5. ACPI RAS2 driver adds OS interface for RAS2 communication through
>> PCC mailbox and extracts ACPI RAS2 feature table (RAS2) and
>> create platform device for the RAS memory features, which binds
>> to the memory ACPI RAS2 driver.
>> 7. Memory ACPI RAS2 driver gets the PCC subspace for communicating
>> with the ACPI compliant platform supports ACPI RAS2. Add callback
>> functions and registers with EDAC scrub to support user to
>> control the HW patrol scrubbers exposed to the kernel via the
>> ACPI RAS2 table.
>>
>> The CXL specific scrub and ECS features are supported in
>> https://gitlab.com/qemu-project/qemu.git
>>
>> Open Questions based on feedbacks from the community:
>> 1. Leo: Standardize unit for scrub rate, for example ACPI RAS2 does not define
>> unit for the scrub rate. RAS2 clarification needed.
>> 2. Jonathan: Any need for discoverability of capability to scan different regions,
>> such as global PA space to the userspace. Left as future extension.
>> 3. Jiaqi:
>> - STOP_PATROL_SCRUBBER from RAS2 must be blocked and, must not be
>exposed to
>> OS/userspace. Stopping patrol scrubber is unacceptable for platform where
>> OEM has enabled patrol scrubber, because the patrol scrubber is a key part
>> of logging and is repurposed for other RAS actions.
>> If the OEM does not want to expose this control, they should lock it down so
>the
>> interface is not exposed to the OS. These features are optional afterall.
>> - "Requested Address Range"/"Actual Address Range" (region to scrub) is a
>> similarly bad thing to expose in RAS2.
>> If the OEM does not want to expose this, they should lock it down so the
>> interface is not exposed to the OS. These features are optional afterall.
>> 4. Borislav:
>> - How the scrub control exposed to the userspace will be used?
>> POC added in rasdaemon with dynamic scrub control for CXL memory
>media
>> errors and memory errors reported to the userspace.
>> https://github.com/shijujose4/rasdaemon/tree/scrub_control_6_june_2024
>> - Is the scrub interface is sufficient for the use cases?
>> - Who is going to use scrub controls tools/admin/scripts?
>> 1) Rasdaemon for dynamic control
>> 2) Udev script for more static 'defaults' on hotplug etc.
>>
>> References:
>> 1. ACPI spec r6.5 section 5.2.21 ACPI RAS2.
>> 2. ACPI spec r6.5 section 9.19.7.2 ARS.
>> 3. CXL spec r3.1 8.2.9.9.11.1 Device patrol scrub control feature 4.
>> CXL spec r3.1 8.2.9.9.11.2 DDR5 ECS feature 5. Background information
>> about kernel support for memory scan, memory
>> error detection and ACPI RASF.
>>
>> https://lore.kernel.org/all/20221103155029.2451105-1-jiaqiyan@google.c
>> om/
>> 6. Discussions on RASF:
>>
>> https://lore.kernel.org/lkml/20230915172818.761-1-shiju.jose@xxxxxxxxx
>> m/#r
>>
>> Changes
>> =======
>> v9 -> v10:
>> 1. Feedback from Mauro Carvalho Chehab:
>> - Changes suggested in EDAC RAS feature driver.
>> use uppercase for enums, if else to switch-case, documentation for
>> static scrub and ecs init functions etc.
>> - Changes suggested in EDAC scrub.
>> unit of scrub cycle hour to seconds.
>> attribute node cycle_in_hours_avaiable to min_cycle_duration and
>> max_cycle_duration.
>> attribute node cycle_in_hours to current_cycle_duration.
>> Use base 0 for kstrtou64() and kstrtol() functions.
>> etc.
>> - Changes suggested in EDAC ECS.
>> uppercase for enums
>> add ABI documentation. etc
>>
>> 2. Feedback from Fan:
>> - Changes suggested in EDAC RAS feature driver.
>> use uppercase for enums, change if...else to switch-case.
>> some optimization in edac_ras_dev_register() function
>> add missing goto free_ctx
>> - Changes suggested in the code for feature commands.
>> - CXL driver scrub and ECS code
>> use uppercase for enums, fix typo, use enum type for mode
>> fix lonf lines etc.
>>
>> v8 -> v9:
>> 1. Feedback from Borislav:
>> - Add scrub control driver to the EDAC on feedback from Borislav.
>> - Changed DEVICE_ATTR_..() static.
>> - Changed the write permissions for scrub control sysfs files as
>> root-only.
>> 2. Feedback from Fan:
>> - Optimized cxl_get_feature() function by using min() and removed
>> feat_out_min_size.
>> - Removed unreached return from cxl_set_feature() function.
>> - Changed the term "rate" to "cycle_in_hours" in all the
>> scrub control code.
>> - Allow cxl_mem_probe() continue if cxl_mem_patrol_scrub_init() fail,
>> with just a debug warning.
>>
>> 3. Feedback from Jonathan:
>> - Removed patch __free() based cleanup function for acpi_put_table.
>> and added fix in the acpi ras2 driver.
>>
>> 4. Feedback from Dan Williams:
>> - Allow cxl_mem_probe() continue if cxl_mem_patrol_scrub_init() fail,
>> with just a debug warning.
>> - Add support for CXL region based scrub control.
>>
>> 5. Feedback from Daniel Ferguson on RAS2 drivers:
>> In the ACPI RAS2 driver,
>> - Incorporated the changes given for clearing error reported.
>> - Incorporated the changes given for check the Set RAS Capability
>> status and return an appropriate error.
>> In the RAS2 memory driver,
>> - Added more checks for start/stop bg and on-demand scrubbing
>> so that addr range in cache do not get cleared and restrict
>> permitted operations during scrubbing.
>>
>> v7 -> v8:
>> 1. Add more detailed cover letter and add info for basic analysis
>> of ACPI ARS for comment from Dan Williams.
>> 2. Changed file name etc from ras2 to acpi_ras2 in memory ACPI RAS2
>> driver for comment from Boris.
>> 3. Add documents for usage for comment from Jonathan.
>> 4. Changed logic in memory/acpi_ras2.c for enable background
>> scrubbing to allow setting the scrub rate.
>> 5. Merged memory/acpi_ras2_common.c with memory/acpi_ras2.c and
>> obselete code, suggested by Jonathan.
>> 6. Initial optimizations and cleanup especially in the memory/acpi_ras2.
>> 7. Removed CXL ECS support for time being.
>> 8. Removed support for region based scrub control from the scrub
>> subsytem, which was needed for the CXL ECS, can be added later
>> if required.
>> 9. Fixed the format of few comments and a definition in CXL feature
>> code for the feedbacks from Fan.
>> 11. Jonathan done several optimizations, interface changes and
>> cleanups all over the code.
>> 12. Fixes for feedbacks from Daniel Ferguson(Amperecomputing)
>> for RAS2.
>> 13. Workaround for a RAS2 case of only one actual controller as
>> reported by Daniel Ferguson(AmpereComputing) in their hardware.
>> 14. Feedback from Yazen, move the common scrub and ras2 changes
>> under /drivers/ras/.
>> 15. Drop patch ACPICA: ACPI 6.5: Add support for RAS2 table because
>> Rafael queued the patch.
>>
>> https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git/co
>> mmit/?h=bleeding-edge&id=9726d821f88e284ecd998b76ae5f2174721cd9dc
>>
>> v6 -> v7:
>> 1. Main changes for comments from Jonathan, Thanks.
>> 1.1. CXL
>> - Changes for deal with small mail box and supporting multipart
>> feature data transfers.
>> - Provide more specific parameters to mbox supported/get/set features
>> interface functions.
>> - kvmalloc -> kmalloc in CXL scrub mem allocation for feature commands.
>> - Changed the way using __free(kfree)
>> - Removed readback and verify for setting CXL scrub patrol and ECS
>> parameters. Could be added later if needed.
>> - In is_visible() callback functions for scrub control sysfs attrs
>> changed to writeback the default attribute mode value instead of
>> setting per attrs.
>> - Add documentation for sysfs interfaces for CXL ECS scrub control.
>> 1.2. RAS2
>> - In rasf common code, rename rasf to ras2 because RASF seems obselete.
>> - Replace pr_* with dev_* log function calls from ACPI RAS2 and
>> memory RAS2 drivers.
>> - In rasf common code, rename rasf to ras2.
>> - Removed including unnecessary .h file from memory RAS2 driver.
>> - In is_visible() callback functions for scrub control sysfs attrs
>> changed to writeback the default attribute mode value instead of
>> setting per attribute.
>>
>> 2. Changes for comments from Fan, Thanks.
>> - Add debug message if cxl patrol scrub and ecs init function
>> calls fail.
>> 3. Updated cover letter for feedback from Dan Williams.
>>
>> v5 -> v6:
>> 1. Changes for comments from Davidlohr, Thanks.
>> - Update CXL feature code based on spec 3.1.
>> - attrb -> attr
>> - Use enums with default counting.
>> 2. Rebased to the latest kernel.
>>
>> v4 -> v5:
>> 1. Following are the main changes made based on the feedback from Dan
>Williams on v4.
>> 1.1. In the scrub subsystem the common scrub control attributes are statically
>defined
>> instead of dynamically created.
>> 1.2. Add scrub subsystem support externally defined attribute group.
>> Add CXL ECS driver define ECS specific attribute group and pass to
>> the scrub subsystem.
>> 1.3. Move cxl_mem_ecs_init() to cxl/core/region.c so that the CXL region_id
>> is used in the registration with the scrub subsystem.
>> 1.4. Add previously posted RASF common and RAS2 patches to this scrub
>series.
>>
>> 2. Add support for the 'enable_background_scrub' attribute
>> for RAS2, on request from Bill
>Schwartz(wschwartz@xxxxxxxxxxxxxxxxxxx).
>>
>> v3 -> v4:
>> 1. Fixes for the warnings/errors reported by kernel test robot.
>> 2. Add support for reading the 'enable' attribute of CXL patrol scrub.
>>
>> Changes
>> v2 -> v3:
>> 1. Changes for comments from Davidlohr, Thanks.
>> - Updated cxl scrub kconfig
>> - removed usage of the flag is_support_feature from
>> the function cxl_mem_get_supported_feature_entry().
>> - corrected spelling error.
>> - removed unnecessary debug message.
>> - removed export feature commands to the userspace.
>> 2. Possible fix for the warnings/errors reported by kernel
>> test robot.
>> 3. Add documentation for the common scrub configure attributes.
>>
>> v1 -> v2:
>> 1. Changes for comments from Dave Jiang, Thanks.
>> - Split patches.
>> - reversed xmas tree declarations.
>> - declared flags as enums.
>> - removed few unnecessary variable initializations.
>> - replaced PTR_ERR_OR_ZERO() with IS_ERR() and PTR_ERR().
>> - add auto clean declarations.
>> - replaced while loop with for loop.
>> - Removed allocation from cxl_get_supported_features() and
>> cxl_get_feature() and make change to take allocated memory
>> pointer from the caller.
>> - replaced if/else with switch case.
>> - replaced sprintf() with sysfs_emit() in 2 places.
>> - replaced goto label with return in few functions.
>> 2. removed unused code for supported attributes from ecs.
>> 3. Included following common patch for scrub configure driver
>> to this series.
>> "memory: scrub: Add scrub driver supports configuring memory scrubbers
>> in the system"
>>
>>
>> Jonathan Cameron (1):
>> platform: Add __free() based cleanup function for
>> platform_device_put
>>
>> Shiju Jose (10):
>> EDAC: Add generic EDAC RAS control feature driver
>> EDAC: Add EDAC scrub control driver
>> EDAC: Add EDAC ECS control driver
>> cxl/mbox: Add GET_SUPPORTED_FEATURES mailbox command
>> cxl/mbox: Add GET_FEATURE mailbox command
>> cxl/mbox: Add SET_FEATURE mailbox command
>> cxl/memscrub: Add CXL memory device patrol scrub control feature
>> cxl/memscrub: Add CXL memory device ECS control feature
>> ACPI:RAS2: Add ACPI RAS2 driver
>> ras: scrub: ACPI RAS2: Add memory ACPI RAS2 driver
>>
>> Documentation/ABI/testing/sysfs-edac-ecs | 85 ++
>> Documentation/ABI/testing/sysfs-edac-scrub | 76 ++
>> Documentation/scrub/edac-scrub.rst | 115 +++
>> drivers/acpi/Kconfig | 10 +
>> drivers/acpi/Makefile | 1 +
>> drivers/acpi/ras2.c | 391 +++++++++
>> drivers/cxl/Kconfig | 19 +
>> drivers/cxl/core/Makefile | 1 +
>> drivers/cxl/core/mbox.c | 139 ++++
>> drivers/cxl/core/memscrub.c | 873 +++++++++++++++++++++
>> drivers/cxl/core/region.c | 6 +
>> drivers/cxl/cxlmem.h | 129 +++
>> drivers/cxl/mem.c | 4 +
>> drivers/edac/Makefile | 1 +
>> drivers/edac/edac_ecs.c | 396 ++++++++++
>> drivers/edac/edac_ras_feature.c | 187 +++++
>> drivers/edac/edac_scrub.c | 333 ++++++++
>> drivers/ras/Kconfig | 10 +
>> drivers/ras/Makefile | 1 +
>> drivers/ras/acpi_ras2.c | 415 ++++++++++
>> include/acpi/ras2_acpi.h | 59 ++
>> include/linux/edac_ras_feature.h | 132 ++++
>> include/linux/platform_device.h | 1 +
>> 23 files changed, 3384 insertions(+)
>> create mode 100644 Documentation/ABI/testing/sysfs-edac-ecs
>> create mode 100644 Documentation/ABI/testing/sysfs-edac-scrub
>> create mode 100644 Documentation/scrub/edac-scrub.rst
>> create mode 100755 drivers/acpi/ras2.c create mode 100644
>> drivers/cxl/core/memscrub.c create mode 100755
>> drivers/edac/edac_ecs.c create mode 100755
>> drivers/edac/edac_ras_feature.c create mode 100755
>> drivers/edac/edac_scrub.c create mode 100644 drivers/ras/acpi_ras2.c
>> create mode 100644 include/acpi/ras2_acpi.h create mode 100755
>> include/linux/edac_ras_feature.h
>>
>> --
>> 2.34.1
>>