On Mon, Jan 05, 2026 at 03:13:03PM -0600, Cheatham, Benjamin wrote:
>
>
> On 12/18/2025 10:52 PM, Alison Schofield wrote:
> > On Mon, Dec 15, 2025 at 03:36:30PM -0600, Ben Cheatham wrote:
> >> Add man pages for the 'cxl-inject-error' and 'cxl-clear-error' commands.
> >> These man pages show usage and examples for each of their use cases.
> >>
> >> Reviewed-by: Dave Jiang <[email protected]>
> >> Signed-off-by: Ben Cheatham <[email protected]>
> >> ---
> >> Documentation/cxl/cxl-clear-error.txt | 67 +++++++++++++
> >> Documentation/cxl/cxl-inject-error.txt | 129 +++++++++++++++++++++++++
> >> Documentation/cxl/meson.build | 2 +
> >> 3 files changed, 198 insertions(+)
> >> create mode 100644 Documentation/cxl/cxl-clear-error.txt
> >> create mode 100644 Documentation/cxl/cxl-inject-error.txt
> >
> > snip
> >
> >> diff --git a/Documentation/cxl/cxl-inject-error.txt
> >> b/Documentation/cxl/cxl-inject-error.txt
> >> new file mode 100644
> >> index 0000000..e1bebd7
> >> --- /dev/null
> >> +++ b/Documentation/cxl/cxl-inject-error.txt
> >> @@ -0,0 +1,129 @@
> >> +// SPDX-License-Identifier: GPL-2.0
> >> +
> >> +cxl-inject-error(1)
> >> +===================
> >> +
> >> +NAME
> >> +----
> >> +cxl-inject-error - Inject CXL errors into CXL devices
> >> +
> >> +SYNOPSIS
> >> +--------
> >> +[verse]
> >> +'cxl inject-error' <device name> [<options>]
> >> +
> >> +Inject an error into a CXL device. The type of errors supported depend on
> >> the
> >> +device specified. The types of devices supported are:
> >> +
> >> +"Downstream Ports":: A CXL RCH downstream port (dport) or a CXL VH root
> >> port.
> >> +Eligible CXL 2.0+ ports are dports of ports at depth 1 in the output of
> >> cxl-list.
> >> +Dports are specified by host name ("0000:0e:01.1").
> >
> > How are users to find that dport host?
>
> The user needs to know beforehand at the moment. More below.
>
> >
> > Is there a cxl list "show me the dports where i can inject protocol errors"
> > incantation that we can recommend here.
> >
> > I ended up looking at /sys/kernel/debug/cxl/ to find the hosts.
> >
> > Would another attribute added to those dports make sense, be possible?
> > like is done for the poison injectable memdevs? ie 'protocol_injectable:
> > true'
>
> Which ports support error injection depends on the CXL version of the host.
> For CXL 1.1
> hosts it's any memory-mapped downstream port, while for 2.0+ it's only CXL
> root ports
> (ACPI 6.5 Table 18-31).
>
> The kernel adds a debugfs entry for all downstream ports regardless of those
> requirements IIRC.
> Having the extra entries doesn't break anything since the platform firmware
> should reject invalid
> injection targets, but it does add an extra hurdle for the user.
>
> I think what I'll do here is submit a kernel patch to clean up the extra
> entries (needed to be done anyway)
> and add a 'protocol_injectable' attribute for the downstream port when a
> debugfs entry exists. I'll probably
> send out the kernel patch at the same time as v6.
>
> Let me know if any of that sounds unreasonable or you'd rather I do something
> else!
Ben,
That sounds good. I knew that using sysfs to help me figure out how
to use the cxl-cli command was a bad sign ;)
Don't hold back on examples in the man pages docs.
Thanks!
Alison
>
> Thanks,
> Ben
> >
> >
> >> +"memdevs":: A CXL memory device. Memory devices are specified by device
> >> name
> >> +("mem0"), device id ("0"), and/or host device name ("0000:35:00.0").
> >> +
> >> +There are two types of errors which can be injected: CXL protocol errors
> >> +and device poison.
> >> +
> >> +CXL protocol errors can only be used with downstream ports (as defined
> >> above).
> >> +Protocol errors follow the format of "<protocol>-<severity>". For example,
> >> +a "mem-fatal" error is a CXL.mem fatal protocol error. Protocol errors
> >> can be
> >> +found with the '-N' option of 'cxl-list' under a CXL bus object. For
> >> example:
> >> +
> >> +----
> >> +
> >> +# cxl list -NB
> >> +[
> >> + {
> >> + "bus":"root0",
> >> + "provider":"ACPI.CXL",
> >> + "injectable_protocol_errors":[
> >> + "mem-correctable",
> >> + "mem-fatal",
> >> + ]
> >> + }
> >> +]
> >> +
> >> +----
> >> +
> >> +CXL protocol (CXL.cache/mem) error injection requires the platform to
> >> support
> >> +ACPI v6.5+ error injection (EINJ). In addition to platform support, the
> >> +CONFIG_ACPI_APEI_EINJ and CONFIG_ACPI_APEI_EINJ_CXL kernel configuration
> >> options
> >> +will need to be enabled. For more information, view the Linux kernel
> >> documentation
> >> +on EINJ.
> >> +
> >> +Device poison can only by used with CXL memory devices. A device physical
> >> address
> >> +(DPA) is required to do poison injection. DPAs range from 0 to the size of
> >> +device's memory, which can be found using 'cxl-list'. An example
> >> injection:
> >> +
> >> +----
> >> +
> >> +# cxl inject-error mem0 -t poison -a 0x1000
> >> +poison injected at mem0:0x1000
> >> +# cxl list -m mem0 -u --media-errors
> >> +{
> >> + "memdev":"mem0",
> >> + "ram_size":"256.00 MiB (268.44 MB)",
> >> + "serial":"0",
> >> + "host":"0000:0d:00.0",
> >> + "firmware_version":"BWFW VERSION 00",
> >> + "media_errors":[
> >> + {
> >> + "offset":"0x1000",
> >> + "length":64,
> >> + "source":"Injected"
> >> + }
> >> + ]
> >> +}
> >> +
> >> +----
> >> +
> >> +Not all devices support poison injection. To see if a device supports
> >> poison injection
> >> +through debugfs, use 'cxl-list' with the '-N' option and look for the
> >> "poison-injectable"
> >> +attribute under the device. Example:
> >> +
> >> +----
> >> +
> >> +# cxl list -Nu -m mem0
> >> +{
> >> + "memdev":"mem0",
> >> + "ram_size":"256.00 MiB (268.44 MB)",
> >> + "serial":"0",
> >> + "host":"0000:0d:00.0",
> >> + "firmware_version":"BWFW VERSION 00",
> >> + "poison_injectable":true
> >> +}
> >> +
> >> +----
> >> +
> >> +This command depends on the kernel debug filesystem (debugfs) to do CXL
> >> protocol
> >> +error and device poison injection.
> >> +
> >> +OPTIONS
> >> +-------
> >> +-a::
> >> +--address::
> >> + Device physical address (DPA) to use for poison injection. Address can
> >> + be specified in hex or decimal. Required for poison injection.
> >> +
> >> +-t::
> >> +--type::
> >> + Type of error to inject into <device name>. The type of error is
> >> restricted
> >> + by device type. The following shows the possible types under their
> >> associated
> >> + device type(s):
> >> +----
> >> +
> >> +Downstream Ports: ::
> >> + cache-correctable, cache-uncorrectable, cache-fatal, mem-correctable,
> >> + mem-fatal
> >> +
> >> +Memdevs: ::
> >> + poison
> >> +
> >> +----
> >> +
> >> +--debug::
> >> + Enable debug output
> >> +
> >> +SEE ALSO
> >> +--------
> >> +linkcxl:cxl-list[1]
> >> diff --git a/Documentation/cxl/meson.build b/Documentation/cxl/meson.build
> >> index 8085c1c..0b75eed 100644
> >> --- a/Documentation/cxl/meson.build
> >> +++ b/Documentation/cxl/meson.build
> >> @@ -50,6 +50,8 @@ cxl_manpages = [
> >> 'cxl-update-firmware.txt',
> >> 'cxl-set-alert-config.txt',
> >> 'cxl-wait-sanitize.txt',
> >> + 'cxl-inject-error.txt',
> >> + 'cxl-clear-error.txt',
> >> ]
> >>
> >> foreach man : cxl_manpages
> >> --
> >> 2.52.0
> >>
>