[SRU][N:linux][PATCH v2 1/2] cxl/pci: Get AER capability address from RCRB only for RCH dport

Thibault Ferrante thibault.ferrante at canonical.com
Fri Jan 9 11:24:42 UTC 2026


From: Li Ming <ming4.li at intel.com>

BugLink: https://bugs.launchpad.net/bugs/2130240

cxl_setup_parent_dport() needs to get RCH dport AER capability address
from RCRB to disable AER interrupt. The function does not check if dport
is RCH dport, it will get a wrong pci_host_bridge structure by dport_dev
in VH case because dport_dev points to a pci device(RP or switch DSP)
rather than a pci host bridge device.

Fixes: f05fd10d138d ("cxl/pci: Add RCH downstream port AER register discovery")
Signed-off-by: Li Ming <ming4.li at intel.com>
Reviewed-by: Dan Williams <dan.j.williams at intel.com>
Reviewed-by: Ira Weiny <ira.weiny at intel.com>
Tested-by: Ira Weiny <ira.weiny at intel.com>
Tested-by: Alison Schofield <alison.schofield at intel.com>
Link: https://patch.msgid.link/20240809082750.3015641-2-ming4.li@intel.com
Signed-off-by: Dave Jiang <dave.jiang at intel.com>
(cherry picked from commit 8c251c5ab1b7cd204231e4ee936bfe078a33f234)
Signed-off-by: Thibault Ferrante <thibault.ferrante at canonical.com>
---
 drivers/cxl/core/pci.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/cxl/core/pci.c b/drivers/cxl/core/pci.c
index 0ecf8df03c6d1..c1e338cd6fe82 100644
--- a/drivers/cxl/core/pci.c
+++ b/drivers/cxl/core/pci.c
@@ -817,11 +817,13 @@ static void cxl_disable_rch_root_ints(struct cxl_dport *dport)
 void cxl_setup_parent_dport(struct device *host, struct cxl_dport *dport)
 {
 	struct device *dport_dev = dport->dport_dev;
-	struct pci_host_bridge *host_bridge;
 
-	host_bridge = to_pci_host_bridge(dport_dev);
-	if (host_bridge->native_aer)
-		dport->rcrb.aer_cap = cxl_rcrb_to_aer(dport_dev, dport->rcrb.base);
+	if (dport->rch) {
+		struct pci_host_bridge *host_bridge = to_pci_host_bridge(dport_dev);
+
+		if (host_bridge->native_aer)
+			dport->rcrb.aer_cap = cxl_rcrb_to_aer(dport_dev, dport->rcrb.base);
+	}
 
 	dport->reg_map.host = host;
 	cxl_dport_map_regs(dport);
-- 
2.51.0




More information about the kernel-team mailing list