* [PATCH] cxl/port: Unmask AER internal errors for VH endpoints
@ 2026-10-30 9:59 Richard Cheng
2026-10-30 18:28 ` Bowman, Terry
2026-10-30 19:11 ` Li Ming
0 siblings, 2 replies; 5+ messages in thread
From: Richard Cheng @ 2026-10-30 9:59 UTC (permalink / raw)
To: dave, jic23, dave.jiang, alison.schofield, vishal.l.verma
Cc: iweiny, ming.li, icheng, linux-cxl, linux-kernel, kaihengf,
kobak, newtonl, kristinc
CXL protocol errors are reported through PCIe AER internal errors.
Unmasking the endpoint's CXL RAS register alone leaves the AER internal
errors masked, thus the notification can't reach the Root Port.
Unmask AER internal errors during native endpoint RAS setup for VH
devices. Allow cxl_port to use pci_aer_unmask_internal_errors() through
its module-restricted export.
Verified with QEMU mem-data-ecc injection: the Root Port AER interrupt
fires, the CXL correctable-error trace is emitted, and the endpoint's
CorrIntErr counter increments.
Signed-off-by: Richard Cheng <icheng@nvidia.com>
---
drivers/cxl/port.c | 7 +++++++
drivers/pci/pcie/aer.c | 3 ++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
index c48216e5078f..c94a310061b0 100644
--- a/drivers/cxl/port.c
+++ b/drivers/cxl/port.c
@@ -121,6 +121,13 @@ static int cxl_ras_unmask(struct cxl_port *port)
orig_val, val);
}
+ /*
+ * RCH errors are reported by the RCEC. VH endpoints report CXL
+ * protocol errors as PCIe AER internal errors.
+ */
+ if (!is_cxl_restricted(pdev))
+ pci_aer_unmask_internal_errors(pdev);
+
return 0;
}
diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
index db4f607f889c..94eca22422b7 100644
--- a/drivers/pci/pcie/aer.c
+++ b/drivers/pci/pcie/aer.c
@@ -1287,7 +1287,8 @@ void pci_aer_unmask_internal_errors(struct pci_dev *dev)
* Internal errors are too device-specific to enable generally, however for CXL
* their behavior is standardized for conveying CXL protocol errors.
*/
-EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors, "cxl_core");
+EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors,
+ "cxl_core,cxl_port");
#ifdef CONFIG_CXL_RAS
bool is_aer_internal_error(struct aer_err_info *info)
base-commit: f0c48323b0402349530abc60ea908b5f5f40c395
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] cxl/port: Unmask AER internal errors for VH endpoints
2026-10-30 9:59 [PATCH] cxl/port: Unmask AER internal errors for VH endpoints Richard Cheng
@ 2026-10-30 18:28 ` Bowman, Terry
2026-11-03 7:25 ` Richard Cheng
2026-10-30 19:11 ` Li Ming
1 sibling, 1 reply; 5+ messages in thread
From: Bowman, Terry @ 2026-10-30 18:28 UTC (permalink / raw)
To: Richard Cheng, dave, jic23, dave.jiang, alison.schofield, vishal.l.verma
Cc: iweiny, ming.li, linux-cxl, linux-kernel, kaihengf, kobak,
newtonl, kristinc
On 10/30/2026 4:59 AM, Richard Cheng wrote:
> CXL protocol errors are reported through PCIe AER internal errors.
> Unmasking the endpoint's CXL RAS register alone leaves the AER internal
> errors masked, thus the notification can't reach the Root Port.
>
> Unmask AER internal errors during native endpoint RAS setup for VH
> devices. Allow cxl_port to use pci_aer_unmask_internal_errors() through
> its module-restricted export.
>
> Verified with QEMU mem-data-ecc injection: the Root Port AER interrupt
> fires, the CXL correctable-error trace is emitted, and the endpoint's
> CorrIntErr counter increments.
>
> Signed-off-by: Richard Cheng <icheng@nvidia.com>
> ---
> drivers/cxl/port.c | 7 +++++++
> drivers/pci/pcie/aer.c | 3 ++-
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
> index c48216e5078f..c94a310061b0 100644
> --- a/drivers/cxl/port.c
> +++ b/drivers/cxl/port.c
> @@ -121,6 +121,13 @@ static int cxl_ras_unmask(struct cxl_port *port)
> orig_val, val);
> }
>
> + /*
> + * RCH errors are reported by the RCEC. VH endpoints report CXL
> + * protocol errors as PCIe AER internal errors.
> + */
> + if (!is_cxl_restricted(pdev))
> + pci_aer_unmask_internal_errors(pdev);
> +
> return 0;
> }
>
Hi Richard,
The unmasking needs to cover the RCD case as well. The RCD AER is used to mask reporting.
The is_cxl_restricted() gate should be removed so the pci_aer_unmask_internal_errors()
is called for both the VH and RCD cases.
I confirmed Sashiko's finding that the unmasking will never execute, thanks to this early
return:
if (!dev_is_pci(port->uport_dev)) <<== Fails here
return 0;
pdev = to_pci_dev(port->uport_dev);
For an endpoint port, port->uport_dev is the cxl_memdev, not a PCI device. So dev_is_pci()
is false and we return early. The PCI device is `port->uport_dev->parent`.
Note, I used base v7.3-rc7. I couldn't find f0c48323b040.
- Terry
> diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
> index db4f607f889c..94eca22422b7 100644
> --- a/drivers/pci/pcie/aer.c
> +++ b/drivers/pci/pcie/aer.c
> @@ -1287,7 +1287,8 @@ void pci_aer_unmask_internal_errors(struct pci_dev *dev)
> * Internal errors are too device-specific to enable generally, however for CXL
> * their behavior is standardized for conveying CXL protocol errors.
> */
> -EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors, "cxl_core");
> +EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors,
> + "cxl_core,cxl_port");
>
> #ifdef CONFIG_CXL_RAS
> bool is_aer_internal_error(struct aer_err_info *info)
>
> base-commit: f0c48323b0402349530abc60ea908b5f5f40c395
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] cxl/port: Unmask AER internal errors for VH endpoints
2026-10-30 9:59 [PATCH] cxl/port: Unmask AER internal errors for VH endpoints Richard Cheng
2026-10-30 18:28 ` Bowman, Terry
@ 2026-10-30 19:11 ` Li Ming
2026-11-03 7:17 ` Richard Cheng
1 sibling, 1 reply; 5+ messages in thread
From: Li Ming @ 2026-10-30 19:11 UTC (permalink / raw)
To: Richard Cheng, dave, jic23, dave.jiang, alison.schofield, vishal.l.verma
Cc: iweiny, linux-cxl, linux-kernel, kaihengf, kobak, newtonl, kristinc
On 10/30/2026 5:59 PM, Richard Cheng wrote:
> CXL protocol errors are reported through PCIe AER internal errors.
> Unmasking the endpoint's CXL RAS register alone leaves the AER internal
> errors masked, thus the notification can't reach the Root Port.
>
> Unmask AER internal errors during native endpoint RAS setup for VH
> devices. Allow cxl_port to use pci_aer_unmask_internal_errors() through
> its module-restricted export.
>
> Verified with QEMU mem-data-ecc injection: the Root Port AER interrupt
> fires, the CXL correctable-error trace is emitted, and the endpoint's
> CorrIntErr counter increments.
I found the similiar implementation[1] in CXL RAS support for VH patchset[2], seems like it is under review.
[1]: https://lore.kernel.org/linux-cxl/20260902133933.2992457-9-terry.bowman@amd.com/
[2]: https://lore.kernel.org/linux-cxl/20260902133933.2992457-1-terry.bowman@amd.com/
Ming
>
> Signed-off-by: Richard Cheng <icheng@nvidia.com>
> ---
> drivers/cxl/port.c | 7 +++++++
> drivers/pci/pcie/aer.c | 3 ++-
> 2 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
> index c48216e5078f..c94a310061b0 100644
> --- a/drivers/cxl/port.c
> +++ b/drivers/cxl/port.c
> @@ -121,6 +121,13 @@ static int cxl_ras_unmask(struct cxl_port *port)
> orig_val, val);
> }
>
> + /*
> + * RCH errors are reported by the RCEC. VH endpoints report CXL
> + * protocol errors as PCIe AER internal errors.
> + */
> + if (!is_cxl_restricted(pdev))
> + pci_aer_unmask_internal_errors(pdev);
> +
> return 0;
> }
>
> diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
> index db4f607f889c..94eca22422b7 100644
> --- a/drivers/pci/pcie/aer.c
> +++ b/drivers/pci/pcie/aer.c
> @@ -1287,7 +1287,8 @@ void pci_aer_unmask_internal_errors(struct pci_dev *dev)
> * Internal errors are too device-specific to enable generally, however for CXL
> * their behavior is standardized for conveying CXL protocol errors.
> */
> -EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors, "cxl_core");
> +EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors,
> + "cxl_core,cxl_port");
>
> #ifdef CONFIG_CXL_RAS
> bool is_aer_internal_error(struct aer_err_info *info)
>
> base-commit: f0c48323b0402349530abc60ea908b5f5f40c395
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] cxl/port: Unmask AER internal errors for VH endpoints
2026-10-30 19:11 ` Li Ming
@ 2026-11-03 7:17 ` Richard Cheng
0 siblings, 0 replies; 5+ messages in thread
From: Richard Cheng @ 2026-11-03 7:17 UTC (permalink / raw)
To: Li Ming
Cc: dave, jic23, dave.jiang, alison.schofield, vishal.l.verma,
iweiny, linux-cxl, linux-kernel, kaihengf, kobak, newtonl,
kristinc
On Sat, Oct 31, 2026 at 03:11:29AM +0800, Li Ming wrote:
> On 10/30/2026 5:59 PM, Richard Cheng wrote:
> > CXL protocol errors are reported through PCIe AER internal errors.
> > Unmasking the endpoint's CXL RAS register alone leaves the AER internal
> > errors masked, thus the notification can't reach the Root Port.
> >
> > Unmask AER internal errors during native endpoint RAS setup for VH
> > devices. Allow cxl_port to use pci_aer_unmask_internal_errors() through
> > its module-restricted export.
> >
> > Verified with QEMU mem-data-ecc injection: the Root Port AER interrupt
> > fires, the CXL correctable-error trace is emitted, and the endpoint's
> > CorrIntErr counter increments.
>
> I found the similiar implementation[1] in CXL RAS support for VH patchset[2], seems like it is under review.
>
Ohh ok, then I think we can drop this one.
Thanks.
>
> [1]: https://lore.kernel.org/linux-cxl/20260902133933.2992457-9-terry.bowman@amd.com/
>
> [2]: https://lore.kernel.org/linux-cxl/20260902133933.2992457-1-terry.bowman@amd.com/
>
>
> Ming
>
> >
> > Signed-off-by: Richard Cheng <icheng@nvidia.com>
> > ---
> > drivers/cxl/port.c | 7 +++++++
> > drivers/pci/pcie/aer.c | 3 ++-
> > 2 files changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
> > index c48216e5078f..c94a310061b0 100644
> > --- a/drivers/cxl/port.c
> > +++ b/drivers/cxl/port.c
> > @@ -121,6 +121,13 @@ static int cxl_ras_unmask(struct cxl_port *port)
> > orig_val, val);
> > }
> >
> > + /*
> > + * RCH errors are reported by the RCEC. VH endpoints report CXL
> > + * protocol errors as PCIe AER internal errors.
> > + */
> > + if (!is_cxl_restricted(pdev))
> > + pci_aer_unmask_internal_errors(pdev);
> > +
> > return 0;
> > }
> >
> > diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
> > index db4f607f889c..94eca22422b7 100644
> > --- a/drivers/pci/pcie/aer.c
> > +++ b/drivers/pci/pcie/aer.c
> > @@ -1287,7 +1287,8 @@ void pci_aer_unmask_internal_errors(struct pci_dev *dev)
> > * Internal errors are too device-specific to enable generally, however for CXL
> > * their behavior is standardized for conveying CXL protocol errors.
> > */
> > -EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors, "cxl_core");
> > +EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors,
> > + "cxl_core,cxl_port");
> >
> > #ifdef CONFIG_CXL_RAS
> > bool is_aer_internal_error(struct aer_err_info *info)
> >
> > base-commit: f0c48323b0402349530abc60ea908b5f5f40c395
>
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] cxl/port: Unmask AER internal errors for VH endpoints
2026-10-30 18:28 ` Bowman, Terry
@ 2026-11-03 7:25 ` Richard Cheng
0 siblings, 0 replies; 5+ messages in thread
From: Richard Cheng @ 2026-11-03 7:25 UTC (permalink / raw)
To: Bowman, Terry
Cc: dave, jic23, dave.jiang, alison.schofield, vishal.l.verma,
iweiny, ming.li, linux-cxl, linux-kernel, kaihengf, kobak,
newtonl, kristinc
On Fri, Oct 30, 2026 at 01:28:14PM +0800, Bowman, Terry wrote:
> On 10/30/2026 4:59 AM, Richard Cheng wrote:
> > CXL protocol errors are reported through PCIe AER internal errors.
> > Unmasking the endpoint's CXL RAS register alone leaves the AER internal
> > errors masked, thus the notification can't reach the Root Port.
> >
> > Unmask AER internal errors during native endpoint RAS setup for VH
> > devices. Allow cxl_port to use pci_aer_unmask_internal_errors() through
> > its module-restricted export.
> >
> > Verified with QEMU mem-data-ecc injection: the Root Port AER interrupt
> > fires, the CXL correctable-error trace is emitted, and the endpoint's
> > CorrIntErr counter increments.
> >
> > Signed-off-by: Richard Cheng <icheng@nvidia.com>
> > ---
> > drivers/cxl/port.c | 7 +++++++
> > drivers/pci/pcie/aer.c | 3 ++-
> > 2 files changed, 9 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/cxl/port.c b/drivers/cxl/port.c
> > index c48216e5078f..c94a310061b0 100644
> > --- a/drivers/cxl/port.c
> > +++ b/drivers/cxl/port.c
> > @@ -121,6 +121,13 @@ static int cxl_ras_unmask(struct cxl_port *port)
> > orig_val, val);
> > }
> >
> > + /*
> > + * RCH errors are reported by the RCEC. VH endpoints report CXL
> > + * protocol errors as PCIe AER internal errors.
> > + */
> > + if (!is_cxl_restricted(pdev))
> > + pci_aer_unmask_internal_errors(pdev);
> > +
> > return 0;
> > }
> >
>
> Hi Richard,
>
> The unmasking needs to cover the RCD case as well. The RCD AER is used to mask reporting.
> The is_cxl_restricted() gate should be removed so the pci_aer_unmask_internal_errors()
> is called for both the VH and RCD cases.
>
> I confirmed Sashiko's finding that the unmasking will never execute, thanks to this early
> return:
> if (!dev_is_pci(port->uport_dev)) <<== Fails here
> return 0;
> pdev = to_pci_dev(port->uport_dev);
>
> For an endpoint port, port->uport_dev is the cxl_memdev, not a PCI device. So dev_is_pci()
> is false and we return early. The PCI device is `port->uport_dev->parent`.
>
Hi Terry,
Thanks for the headup, and I've also send a patch to fix this issue [1].
And seems like your patch mentioned by Li Ming is already covering
this bug ? if that's the case we can focus on yours, if not I would love
to make the fix in.
Best regards,
Richard Cheng.
[1]: https://lore.kernel.org/linux-cxl/20261103063409.18275-1-icheng@nvidia.com/
> Note, I used base v7.3-rc7. I couldn't find f0c48323b040.
>
> - Terry
>
> > diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c
> > index db4f607f889c..94eca22422b7 100644
> > --- a/drivers/pci/pcie/aer.c
> > +++ b/drivers/pci/pcie/aer.c
> > @@ -1287,7 +1287,8 @@ void pci_aer_unmask_internal_errors(struct pci_dev *dev)
> > * Internal errors are too device-specific to enable generally, however for CXL
> > * their behavior is standardized for conveying CXL protocol errors.
> > */
> > -EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors, "cxl_core");
> > +EXPORT_SYMBOL_FOR_MODULES(pci_aer_unmask_internal_errors,
> > + "cxl_core,cxl_port");
> >
> > #ifdef CONFIG_CXL_RAS
> > bool is_aer_internal_error(struct aer_err_info *info)
> >
> > base-commit: f0c48323b0402349530abc60ea908b5f5f40c395
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-11-03 7:25 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-30 9:59 [PATCH] cxl/port: Unmask AER internal errors for VH endpoints Richard Cheng
2026-10-30 18:28 ` Bowman, Terry
2026-11-03 7:25 ` Richard Cheng
2026-10-30 19:11 ` Li Ming
2026-11-03 7:17 ` Richard Cheng
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®