diff options
| author | Dan Williams <dan.j.williams@intel.com> | 2026-01-31 03:03:56 +0300 |
|---|---|---|
| committer | Dave Jiang <dave.jiang@intel.com> | 2026-02-02 18:41:29 +0300 |
| commit | 83ccbaf1a1075ded82329d27de01d3b2681986ec (patch) | |
| tree | b07b952dc25ad80b6dbd81a671c172027ed517da | |
| parent | 47fec713d97fb6b823026f723435b58af541bd8d (diff) | |
| download | linux-83ccbaf1a1075ded82329d27de01d3b2681986ec.tar.xz | |
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 <jonathan.cameron@huawei.com>
Closes: http://lore.kernel.org/20260116150119.00003bbd@huawei.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-3-dan.j.williams@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
| -rw-r--r-- | drivers/cxl/core/port.c | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/drivers/cxl/core/port.c b/drivers/cxl/core/port.c index ff899c690d85..d7b6f52d0adc 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, |
