mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 09:09:55 -04:00
cxl/core: Use guard() to drop the goto pattern of cxl_dpa_free()
cxl_dpa_free() has a goto pattern to call up_write() for cxl_dpa_rwsem, it can be removed by using a guard() to replace the down_write() and up_write(). Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Alison Schofield <alison.schofield@intel.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Acked-by: Davidlohr Bueso <dave@stgolabs.net> Signed-off-by: Li Ming <ming.li@zohomail.com> Link: https://patch.msgid.link/20250221012453.126366-5-ming.li@zohomail.com Signed-off-by: Dave Jiang <dave.jiang@intel.com>
This commit is contained in:
@@ -382,35 +382,27 @@ int cxl_dpa_free(struct cxl_endpoint_decoder *cxled)
|
||||
{
|
||||
struct cxl_port *port = cxled_to_port(cxled);
|
||||
struct device *dev = &cxled->cxld.dev;
|
||||
int rc;
|
||||
|
||||
down_write(&cxl_dpa_rwsem);
|
||||
if (!cxled->dpa_res) {
|
||||
rc = 0;
|
||||
goto out;
|
||||
}
|
||||
guard(rwsem_write)(&cxl_dpa_rwsem);
|
||||
if (!cxled->dpa_res)
|
||||
return 0;
|
||||
if (cxled->cxld.region) {
|
||||
dev_dbg(dev, "decoder assigned to: %s\n",
|
||||
dev_name(&cxled->cxld.region->dev));
|
||||
rc = -EBUSY;
|
||||
goto out;
|
||||
return -EBUSY;
|
||||
}
|
||||
if (cxled->cxld.flags & CXL_DECODER_F_ENABLE) {
|
||||
dev_dbg(dev, "decoder enabled\n");
|
||||
rc = -EBUSY;
|
||||
goto out;
|
||||
return -EBUSY;
|
||||
}
|
||||
if (cxled->cxld.id != port->hdm_end) {
|
||||
dev_dbg(dev, "expected decoder%d.%d\n", port->id,
|
||||
port->hdm_end);
|
||||
rc = -EBUSY;
|
||||
goto out;
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
devm_cxl_dpa_release(cxled);
|
||||
rc = 0;
|
||||
out:
|
||||
up_write(&cxl_dpa_rwsem);
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int cxl_dpa_set_mode(struct cxl_endpoint_decoder *cxled,
|
||||
|
||||
Reference in New Issue
Block a user