]> www.infradead.org Git - users/willy/linux.git/commitdiff
cxl/core: Use guard() to drop the goto pattern of cxl_dpa_free()
authorLi Ming <ming.li@zohomail.com>
Fri, 21 Feb 2025 01:24:50 +0000 (09:24 +0800)
committerDave Jiang <dave.jiang@intel.com>
Fri, 14 Mar 2025 21:37:54 +0000 (14:37 -0700)
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>
drivers/cxl/core/hdm.c

index 4a578092377e57e98e7a4f174989897dce9e4eb2..874a791f829242e687ea706214188a14621616ef 100644 (file)
@@ -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,