]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
cxl/port: Unify endpoint and switch port lookup
authorDan Williams <dan.j.williams@intel.com>
Sat, 31 Jan 2026 00:04:03 +0000 (16:04 -0800)
committerDave Jiang <dave.jiang@intel.com>
Mon, 2 Feb 2026 15:46:33 +0000 (08:46 -0700)
In support of generic CXL protocol error handling across various 'struct
cxl_port' types, update find_cxl_port_by_uport() to retrieve endpoint CXL
port companions from endpoint PCIe device instances.

The end result is that upstream switch ports and endpoint ports can share
error handling and eventually delete the misplaced cxl_error_handlers from
the cxl_pci class driver.

Reviewed-by: Terry Bowman <terry.bowman@amd.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Tested-by: Terry Bowman <terry.bowman@amd.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Link: https://patch.msgid.link/20260131000403.2135324-10-dan.j.williams@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/port.c

index 9f56f7e75e81c1d181e7bc4619973479936ba7c8..ee7d145288673331b993019b3b404a707f75fe96 100644 (file)
@@ -1590,10 +1590,20 @@ static int match_port_by_uport(struct device *dev, const void *data)
                return 0;
 
        port = to_cxl_port(dev);
+       /* Endpoint ports are hosted by memdevs */
+       if (is_cxl_memdev(port->uport_dev))
+               return uport_dev == port->uport_dev->parent;
        return uport_dev == port->uport_dev;
 }
 
-/*
+/**
+ * find_cxl_port_by_uport - Find a CXL port device companion
+ * @uport_dev: Device that acts as a switch or endpoint in the CXL hierarchy
+ *
+ * In the case of endpoint ports recall that port->uport_dev points to a 'struct
+ * cxl_memdev' device. So, the @uport_dev argument is the parent device of the
+ * 'struct cxl_memdev' in that case.
+ *
  * Function takes a device reference on the port device. Caller should do a
  * put_device() when done.
  */