From: Dan Williams Date: Sat, 31 Jan 2026 00:03:56 +0000 (-0800) Subject: cxl/port: Reduce number of @dport variables in cxl_port_add_dport() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=83ccbaf1a1075ded82329d27de01d3b2681986ec;p=thirdparty%2Fkernel%2Flinux.git cxl/port: Reduce number of @dport variables in cxl_port_add_dport() In preparation for refactoring cxl_port_add_dport() to add RAS register setup, cleanup the number of dport variables with a dport_exists() helper. Kill the @dport needed to check for duplicates, rename @new_dport to @dport. Reported-by: Jonathan Cameron Closes: http://lore.kernel.org/20260116150119.00003bbd@huawei.com Reviewed-by: Dave Jiang Reviewed-by: Jonathan Cameron Tested-by: Terry Bowman Signed-off-by: Dan Williams Link: https://patch.msgid.link/20260131000403.2135324-3-dan.j.williams@intel.com Signed-off-by: Dave Jiang --- diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c index ff899c690d85d..d7b6f52d0adc1 100644 --- a/drivers/cxl/core/port.c +++ b/drivers/cxl/core/port.c @@ -1587,30 +1587,38 @@ static int update_decoder_targets(struct device *dev, void *data) return 0; } +static bool dport_exists(struct cxl_port *port, struct device *dport_dev) +{ + struct cxl_dport *dport = cxl_find_dport_by_dev(port, dport_dev); + + if (dport) { + dev_dbg(&port->dev, "dport%d:%s already exists\n", + dport->port_id, dev_name(dport_dev)); + return true; + } + + return false; +} + DEFINE_FREE(del_cxl_dport, struct cxl_dport *, if (!IS_ERR_OR_NULL(_T)) del_dport(_T)) static struct cxl_dport *cxl_port_add_dport(struct cxl_port *port, struct device *dport_dev) { - struct cxl_dport *dport; int rc; device_lock_assert(&port->dev); if (!port->dev.driver) return ERR_PTR(-ENXIO); - dport = cxl_find_dport_by_dev(port, dport_dev); - if (dport) { - dev_dbg(&port->dev, "dport%d:%s already exists\n", - dport->port_id, dev_name(dport_dev)); + if (dport_exists(port, dport_dev)) return ERR_PTR(-EBUSY); - } - struct cxl_dport *new_dport __free(del_cxl_dport) = + struct cxl_dport *dport __free(del_cxl_dport) = devm_cxl_add_dport_by_dev(port, dport_dev); - if (IS_ERR(new_dport)) - return new_dport; + if (IS_ERR(dport)) + return dport; - cxl_switch_parse_cdat(new_dport); + cxl_switch_parse_cdat(dport); if (port->nr_dports == 1) { /* @@ -1626,17 +1634,17 @@ static struct cxl_dport *cxl_port_add_dport(struct cxl_port *port, if (rc) return ERR_PTR(rc); dev_dbg(&port->dev, "first dport%d:%s added with decoders\n", - new_dport->port_id, dev_name(dport_dev)); - return no_free_ptr(new_dport); + dport->port_id, dev_name(dport_dev)); + return no_free_ptr(dport); } /* New dport added, update the decoder targets */ - device_for_each_child(&port->dev, new_dport, update_decoder_targets); + device_for_each_child(&port->dev, dport, update_decoder_targets); - dev_dbg(&port->dev, "dport%d:%s added\n", new_dport->port_id, + dev_dbg(&port->dev, "dport%d:%s added\n", dport->port_id, dev_name(dport_dev)); - return no_free_ptr(new_dport); + return no_free_ptr(dport); } static struct cxl_dport *devm_cxl_create_port(struct device *ep_dev,