Loading Documentation/ABI/testing/debugfs-cxl +30 −0 Original line number Diff line number Diff line Loading @@ -33,3 +33,33 @@ Description: device cannot clear poison from the address, -ENXIO is returned. The clear_poison attribute is only visible for devices supporting the capability. What: /sys/kernel/debug/cxl/einj_types Date: January, 2024 KernelVersion: v6.9 Contact: linux-cxl@vger.kernel.org Description: (RO) Prints the CXL protocol error types made available by the platform in the format "0x<error number> <error type>". The possible error types are (as of ACPI v6.5): 0x1000 CXL.cache Protocol Correctable 0x2000 CXL.cache Protocol Uncorrectable non-fatal 0x4000 CXL.cache Protocol Uncorrectable fatal 0x8000 CXL.mem Protocol Correctable 0x10000 CXL.mem Protocol Uncorrectable non-fatal 0x20000 CXL.mem Protocol Uncorrectable fatal The <error number> can be written to einj_inject to inject <error type> into a chosen dport. What: /sys/kernel/debug/cxl/$dport_dev/einj_inject Date: January, 2024 KernelVersion: v6.9 Contact: linux-cxl@vger.kernel.org Description: (WO) Writing an integer to this file injects the corresponding CXL protocol error into $dport_dev ($dport_dev will be a device name from /sys/bus/pci/devices). The integer to type mapping for injection can be found by reading from einj_types. If the dport was enumerated in RCH mode, a CXL 1.1 error is injected, otherwise a CXL 2.0 error is injected. Documentation/firmware-guide/acpi/apei/einj.rst +34 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,10 @@ configuration:: CONFIG_ACPI_APEI CONFIG_ACPI_APEI_EINJ ...and to (optionally) enable CXL protocol error injection set:: CONFIG_ACPI_APEI_EINJ_CXL The EINJ user interface is in <debugfs mount point>/apei/einj. The following files belong to it: Loading Loading @@ -118,6 +122,24 @@ The following files belong to it: this actually works depends on what operations the BIOS actually includes in the trigger phase. CXL error types are supported from ACPI 6.5 onwards (given a CXL port is present). The EINJ user interface for CXL error types is at <debugfs mount point>/cxl. The following files belong to it: - einj_types: Provides the same functionality as available_error_types above, but for CXL error types - $dport_dev/einj_inject: Injects a CXL error type into the CXL port represented by $dport_dev, where $dport_dev is the name of the CXL port (usually a PCIe device name). Error injections targeting a CXL 2.0+ port can use the legacy interface under <debugfs mount point>/apei/einj, while CXL 1.1/1.0 port injections must use this file. BIOS versions based on the ACPI 4.0 specification have limited options in controlling where the errors are injected. Your BIOS may support an extension (enabled with the param_extension=1 module parameter, or boot Loading Loading @@ -181,6 +203,18 @@ You should see something like this in dmesg:: [22715.834759] EDAC sbridge MC3: PROCESSOR 0:306e7 TIME 1422553404 SOCKET 0 APIC 0 [22716.616173] EDAC MC3: 1 CE memory read error on CPU_SrcID#0_Channel#0_DIMM#0 (channel:0 slot:0 page:0x12345 offset:0x0 grain:32 syndrome:0x0 - area:DRAM err_code:0001:0090 socket:0 channel_mask:1 rank:0) A CXL error injection example with $dport_dev=0000:e0:01.1:: # cd /sys/kernel/debug/cxl/ # ls 0000:e0:01.1 0000:0c:00.0 # cat einj_types # See which errors can be injected 0x00008000 CXL.mem Protocol Correctable 0x00010000 CXL.mem Protocol Uncorrectable non-fatal 0x00020000 CXL.mem Protocol Uncorrectable fatal # cd 0000:e0:01.1 # Navigate to dport to inject into # echo 0x8000 > einj_inject # Inject error Special notes for injection into SGX enclaves: There may be a separate BIOS setup option to enable SGX injection. Loading MAINTAINERS +1 −0 Original line number Diff line number Diff line Loading @@ -5289,6 +5289,7 @@ M: Dan Williams <dan.j.williams@intel.com> L: linux-cxl@vger.kernel.org S: Maintained F: drivers/cxl/ F: include/linux/cxl-einj.h F: include/linux/cxl-event.h F: include/uapi/linux/cxl_mem.h F: tools/testing/cxl/ Loading drivers/acpi/apei/Kconfig +13 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,19 @@ config ACPI_APEI_EINJ mainly used for debugging and testing the other parts of APEI and some other RAS features. config ACPI_APEI_EINJ_CXL bool "CXL Error INJection Support" default ACPI_APEI_EINJ depends on ACPI_APEI_EINJ depends on CXL_BUS && CXL_BUS <= ACPI_APEI_EINJ help Support for CXL protocol Error INJection through debugfs/cxl. Availability and which errors are supported is dependent on the host platform. Look to ACPI v6.5 section 18.6.4 and kernel EINJ documentation for more information. If unsure say 'n' config ACPI_APEI_ERST_DEBUG tristate "APEI Error Record Serialization Table (ERST) Debug Support" depends on ACPI_APEI Loading drivers/acpi/apei/Makefile +2 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ obj-$(CONFIG_ACPI_APEI) += apei.o obj-$(CONFIG_ACPI_APEI_GHES) += ghes.o obj-$(CONFIG_ACPI_APEI_EINJ) += einj.o einj-y := einj-core.o einj-$(CONFIG_ACPI_APEI_EINJ_CXL) += einj-cxl.o obj-$(CONFIG_ACPI_APEI_ERST_DEBUG) += erst-dbg.o apei-y := apei-base.o hest.o erst.o bert.o Loading
Documentation/ABI/testing/debugfs-cxl +30 −0 Original line number Diff line number Diff line Loading @@ -33,3 +33,33 @@ Description: device cannot clear poison from the address, -ENXIO is returned. The clear_poison attribute is only visible for devices supporting the capability. What: /sys/kernel/debug/cxl/einj_types Date: January, 2024 KernelVersion: v6.9 Contact: linux-cxl@vger.kernel.org Description: (RO) Prints the CXL protocol error types made available by the platform in the format "0x<error number> <error type>". The possible error types are (as of ACPI v6.5): 0x1000 CXL.cache Protocol Correctable 0x2000 CXL.cache Protocol Uncorrectable non-fatal 0x4000 CXL.cache Protocol Uncorrectable fatal 0x8000 CXL.mem Protocol Correctable 0x10000 CXL.mem Protocol Uncorrectable non-fatal 0x20000 CXL.mem Protocol Uncorrectable fatal The <error number> can be written to einj_inject to inject <error type> into a chosen dport. What: /sys/kernel/debug/cxl/$dport_dev/einj_inject Date: January, 2024 KernelVersion: v6.9 Contact: linux-cxl@vger.kernel.org Description: (WO) Writing an integer to this file injects the corresponding CXL protocol error into $dport_dev ($dport_dev will be a device name from /sys/bus/pci/devices). The integer to type mapping for injection can be found by reading from einj_types. If the dport was enumerated in RCH mode, a CXL 1.1 error is injected, otherwise a CXL 2.0 error is injected.
Documentation/firmware-guide/acpi/apei/einj.rst +34 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,10 @@ configuration:: CONFIG_ACPI_APEI CONFIG_ACPI_APEI_EINJ ...and to (optionally) enable CXL protocol error injection set:: CONFIG_ACPI_APEI_EINJ_CXL The EINJ user interface is in <debugfs mount point>/apei/einj. The following files belong to it: Loading Loading @@ -118,6 +122,24 @@ The following files belong to it: this actually works depends on what operations the BIOS actually includes in the trigger phase. CXL error types are supported from ACPI 6.5 onwards (given a CXL port is present). The EINJ user interface for CXL error types is at <debugfs mount point>/cxl. The following files belong to it: - einj_types: Provides the same functionality as available_error_types above, but for CXL error types - $dport_dev/einj_inject: Injects a CXL error type into the CXL port represented by $dport_dev, where $dport_dev is the name of the CXL port (usually a PCIe device name). Error injections targeting a CXL 2.0+ port can use the legacy interface under <debugfs mount point>/apei/einj, while CXL 1.1/1.0 port injections must use this file. BIOS versions based on the ACPI 4.0 specification have limited options in controlling where the errors are injected. Your BIOS may support an extension (enabled with the param_extension=1 module parameter, or boot Loading Loading @@ -181,6 +203,18 @@ You should see something like this in dmesg:: [22715.834759] EDAC sbridge MC3: PROCESSOR 0:306e7 TIME 1422553404 SOCKET 0 APIC 0 [22716.616173] EDAC MC3: 1 CE memory read error on CPU_SrcID#0_Channel#0_DIMM#0 (channel:0 slot:0 page:0x12345 offset:0x0 grain:32 syndrome:0x0 - area:DRAM err_code:0001:0090 socket:0 channel_mask:1 rank:0) A CXL error injection example with $dport_dev=0000:e0:01.1:: # cd /sys/kernel/debug/cxl/ # ls 0000:e0:01.1 0000:0c:00.0 # cat einj_types # See which errors can be injected 0x00008000 CXL.mem Protocol Correctable 0x00010000 CXL.mem Protocol Uncorrectable non-fatal 0x00020000 CXL.mem Protocol Uncorrectable fatal # cd 0000:e0:01.1 # Navigate to dport to inject into # echo 0x8000 > einj_inject # Inject error Special notes for injection into SGX enclaves: There may be a separate BIOS setup option to enable SGX injection. Loading
MAINTAINERS +1 −0 Original line number Diff line number Diff line Loading @@ -5289,6 +5289,7 @@ M: Dan Williams <dan.j.williams@intel.com> L: linux-cxl@vger.kernel.org S: Maintained F: drivers/cxl/ F: include/linux/cxl-einj.h F: include/linux/cxl-event.h F: include/uapi/linux/cxl_mem.h F: tools/testing/cxl/ Loading
drivers/acpi/apei/Kconfig +13 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,19 @@ config ACPI_APEI_EINJ mainly used for debugging and testing the other parts of APEI and some other RAS features. config ACPI_APEI_EINJ_CXL bool "CXL Error INJection Support" default ACPI_APEI_EINJ depends on ACPI_APEI_EINJ depends on CXL_BUS && CXL_BUS <= ACPI_APEI_EINJ help Support for CXL protocol Error INJection through debugfs/cxl. Availability and which errors are supported is dependent on the host platform. Look to ACPI v6.5 section 18.6.4 and kernel EINJ documentation for more information. If unsure say 'n' config ACPI_APEI_ERST_DEBUG tristate "APEI Error Record Serialization Table (ERST) Debug Support" depends on ACPI_APEI Loading
drivers/acpi/apei/Makefile +2 −0 Original line number Diff line number Diff line Loading @@ -2,6 +2,8 @@ obj-$(CONFIG_ACPI_APEI) += apei.o obj-$(CONFIG_ACPI_APEI_GHES) += ghes.o obj-$(CONFIG_ACPI_APEI_EINJ) += einj.o einj-y := einj-core.o einj-$(CONFIG_ACPI_APEI_EINJ_CXL) += einj-cxl.o obj-$(CONFIG_ACPI_APEI_ERST_DEBUG) += erst-dbg.o apei-y := apei-base.o hest.o erst.o bert.o