| What: /sys/kernel/debug/cxl/memX/inject_poison | |
| Date: April, 2023 | |
| KernelVersion: v6.4 | |
| Contact: linux-cxl@vger.kernel.org | |
| Description: | |
| (WO) When a Device Physical Address (DPA) is written to this | |
| attribute, the memdev driver sends an inject poison command to | |
| the device for the specified address. The DPA must be 64-byte | |
| aligned and the length of the injected poison is 64-bytes. If | |
| successful, the device returns poison when the address is | |
| accessed through the CXL.mem bus. Injecting poison adds the | |
| address to the device's Poison List and the error source is set | |
| to Injected. In addition, the device adds a poison creation | |
| event to its internal Informational Event log, updates the | |
| Event Status register, and if configured, interrupts the host. | |
| It is not an error to inject poison into an address that | |
| already has poison present and no error is returned. If the | |
| device returns 'Inject Poison Limit Reached' an -EBUSY error | |
| is returned to the user. The inject_poison attribute is only | |
| visible for devices supporting the capability. | |
| TEST-ONLY INTERFACE: This interface is intended for testing | |
| and validation purposes only. It is not a data repair mechanism | |
| and should never be used on production systems or live data. | |
| DATA LOSS RISK: For CXL persistent memory (PMEM) devices, | |
| poison injection can result in permanent data loss. Injected | |
| poison may render data permanently inaccessible even after | |
| clearing, as the clear operation writes zeros and does not | |
| recover original data. | |
| SYSTEM STABILITY RISK: For volatile memory, poison injection | |
| can cause kernel crashes, system instability, or unpredictable | |
| behavior if the poisoned addresses are accessed by running code | |
| or critical kernel structures. | |
| What: /sys/kernel/debug/cxl/memX/clear_poison | |
| Date: April, 2023 | |
| KernelVersion: v6.4 | |
| Contact: linux-cxl@vger.kernel.org | |
| Description: | |
| (WO) When a Device Physical Address (DPA) is written to this | |
| attribute, the memdev driver sends a clear poison command to | |
| the device for the specified address. Clearing poison removes | |
| the address from the device's Poison List and writes 0 (zero) | |
| for 64 bytes starting at address. It is not an error to clear | |
| poison from an address that does not have poison set. If the | |
| device cannot clear poison from the address, -ENXIO is returned. | |
| The clear_poison attribute is only visible for devices | |
| supporting the capability. | |
| TEST-ONLY INTERFACE: This interface is intended for testing | |
| and validation purposes only. It is not a data repair mechanism | |
| and should never be used on production systems or live data. | |
| CLEAR IS NOT DATA RECOVERY: This operation writes zeros to the | |
| specified address range and removes the address from the poison | |
| list. It does NOT recover or restore original data that may have | |
| been present before poison injection. Any original data at the | |
| cleared address is permanently lost and replaced with zeros. | |
| CLEAR IS NOT A REPAIR MECHANISM: This interface is for testing | |
| purposes only and should not be used as a data repair tool. | |
| Clearing poison is fundamentally different from data recovery | |
| or error correction. | |
| What: /sys/kernel/debug/cxl/regionX/inject_poison | |
| Date: August, 2025 | |
| Contact: linux-cxl@vger.kernel.org | |
| Description: | |
| (WO) When a Host Physical Address (HPA) is written to this | |
| attribute, the region driver translates it to a Device | |
| Physical Address (DPA) and identifies the corresponding | |
| memdev. It then sends an inject poison command to that memdev | |
| at the translated DPA. Refer to the memdev ABI entry at: | |
| /sys/kernel/debug/cxl/memX/inject_poison for the detailed | |
| behavior. This attribute is only visible if all memdevs | |
| participating in the region support both inject and clear | |
| poison commands. | |
| TEST-ONLY INTERFACE: This interface is intended for testing | |
| and validation purposes only. It is not a data repair mechanism | |
| and should never be used on production systems or live data. | |
| DATA LOSS RISK: For CXL persistent memory (PMEM) devices, | |
| poison injection can result in permanent data loss. Injected | |
| poison may render data permanently inaccessible even after | |
| clearing, as the clear operation writes zeros and does not | |
| recover original data. | |
| SYSTEM STABILITY RISK: For volatile memory, poison injection | |
| can cause kernel crashes, system instability, or unpredictable | |
| behavior if the poisoned addresses are accessed by running code | |
| or critical kernel structures. | |
| What: /sys/kernel/debug/cxl/regionX/clear_poison | |
| Date: August, 2025 | |
| Contact: linux-cxl@vger.kernel.org | |
| Description: | |
| (WO) When a Host Physical Address (HPA) is written to this | |
| attribute, the region driver translates it to a Device | |
| Physical Address (DPA) and identifies the corresponding | |
| memdev. It then sends a clear poison command to that memdev | |
| at the translated DPA. Refer to the memdev ABI entry at: | |
| /sys/kernel/debug/cxl/memX/clear_poison for the detailed | |
| behavior. This attribute is only visible if all memdevs | |
| participating in the region support both inject and clear | |
| poison commands. | |
| TEST-ONLY INTERFACE: This interface is intended for testing | |
| and validation purposes only. It is not a data repair mechanism | |
| and should never be used on production systems or live data. | |
| CLEAR IS NOT DATA RECOVERY: This operation writes zeros to the | |
| specified address range and removes the address from the poison | |
| list. It does NOT recover or restore original data that may have | |
| been present before poison injection. Any original data at the | |
| cleared address is permanently lost and replaced with zeros. | |
| CLEAR IS NOT A REPAIR MECHANISM: This interface is for testing | |
| purposes only and should not be used as a data repair tool. | |
| Clearing poison is fundamentally different from data recovery | |
| or error correction. | |
| 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. |