CXL-INJECT-PROTOCOL-ERROR(1) cxl Manual CXL-INJECT-PROTOCOL-ERROR(1)

# [NAME](#NAME)

cxl-inject-protocol-error - Inject CXL protocol errors into CXL downstream ports

# [SYNOPSIS](#SYNOPSIS)

```
cxl inject-protocol-error <dport> [<options>]
```

**Warning**

Error injection can cause system instability and should only be used  
for debugging hardware and software error recovery flows. Use at your own risk!

Inject a CXL protocol error into a CXL downstream port (dport). Donwstream ports that support error injection will have their *protocol\_injectable* attribute in *cxl-list* set to true.

The *-p*/*--protocol* and *-s*/*--severity* options are required for error injection. The *-p* option is used to specify the CXL protocol to inject an error on; either "mem" (CXL.mem) or "cache" (CXL.cache). The *-s* option specifies the severity of the error and can be one of: "correctable", "uncorrectable", or "fatal".

The types of errors (and severities) available depends on the platform. To find the available error types for injection, see the "injectable\_protocol\_errors" attribute under the applicable CXL bus object in the output of *cxl-list*. For example:

```
# cxl list -B
[


  {


        "bus":"root0",


        "provider":"ACPI.CXL",


        "injectable_protocol_errors":[


          "mem-correctable",


          "mem-fatal",


        ]


  }
]
```

The dport to inject an error into is specified by host name (e.g. "0000:0e:01.1"). Here’s an example injection using the example bus listing above:

```
# cxl list -TP


 [


  {


    "port":"port1",


    "host":"pci0000:e0",


    "depth":1,


    "decoders_committed":1,


    "nr_dports":1,


    "dports":[


      {


        "dport":"0000:e0:01.1",


        "alias":"device:02",


        "id":0,


        "protocol_injectable":true


      }


    ]


  }
]
# cxl inject-protocol-error "0000:e0:01.1" -p mem -s correctable
cxl inject-protocol-error: inject_proto_err: injected mem-correctable protocol error.
```

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 must be enabled. For more information, view the Linux kernel documentation on EINJ.

This command depends on the CXL debug filesystem (normally mounted at "/sys/kernel/debug/cxl") to inject protocol errors. If the CXL debugfs is not accessible the "protocol\_injectable" attribute of dports will always be set to false, and the "injectable\_protocol\_errors" attribute of CXL busses will always be empty.

# [OPTIONS](#OPTIONS)

-p, --protocol

Which CXL protocol to inject an error on. Can be either "mem" (CXL.mem) or "cache (CXL.cache).

-s, --severity

Severity level of error to be injected. Can be one of the following: "correctable", "uncorrectable", or "fatal".

--debug

Enable debug output

# [SEE ALSO](#SEE_ALSO)

[cxl-list(1)](/man/os/ndctl/cxl-list.1)

2026-08-31 cxl

---

Document: cxl-inject-protocol-error(1) from ndctl 85-r2 (Chainguard OS)
Source: https://github.com/pmem/ndctl
