]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
cxl/region: Move ready-to-probe state check to a helper
authorDan Williams <dan.j.williams@intel.com>
Fri, 11 Jul 2025 23:49:30 +0000 (16:49 -0700)
committerDave Jiang <dave.jiang@intel.com>
Wed, 16 Jul 2025 18:34:36 +0000 (11:34 -0700)
Rather than unlocking the region rwsem in the middle of cxl_region_probe()
create a helper for determining when the region is ready-to-probe.

Cc: Davidlohr Bueso <dave@stgolabs.net>
Cc: Jonathan Cameron <jonathan.cameron@huawei.com>
Cc: Dave Jiang <dave.jiang@intel.com>
Cc: Alison Schofield <alison.schofield@intel.com>
Cc: Vishal Verma <vishal.l.verma@intel.com>
Cc: Ira Weiny <ira.weiny@intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Reviewed-by: Fabio M. De Francesco <fabio.m.de.francesco@linux.intel.com>
Link: https://patch.msgid.link/20250711234932.671292-7-dan.j.williams@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
drivers/cxl/core/region.c

index 3a77aec2c447ee1822434e6839a7ab87e0ef5255..2a97fa9a394f1d668fe8c9b65c4f45d425a95f15 100644 (file)
@@ -3572,9 +3572,8 @@ static void shutdown_notifiers(void *_cxlr)
        unregister_mt_adistance_algorithm(&cxlr->adist_notifier);
 }
 
-static int cxl_region_probe(struct device *dev)
+static int cxl_region_can_probe(struct cxl_region *cxlr)
 {
-       struct cxl_region *cxlr = to_cxl_region(dev);
        struct cxl_region_params *p = &cxlr->params;
        int rc;
 
@@ -3597,15 +3596,28 @@ static int cxl_region_probe(struct device *dev)
                goto out;
        }
 
-       /*
-        * From this point on any path that changes the region's state away from
-        * CXL_CONFIG_COMMIT is also responsible for releasing the driver.
-        */
 out:
        up_read(&cxl_region_rwsem);
 
        if (rc)
                return rc;
+       return 0;
+}
+
+static int cxl_region_probe(struct device *dev)
+{
+       struct cxl_region *cxlr = to_cxl_region(dev);
+       struct cxl_region_params *p = &cxlr->params;
+       int rc;
+
+       rc = cxl_region_can_probe(cxlr);
+       if (rc)
+               return rc;
+
+       /*
+        * From this point on any path that changes the region's state away from
+        * CXL_CONFIG_COMMIT is also responsible for releasing the driver.
+        */
 
        cxlr->memory_notifier.notifier_call = cxl_region_perf_attrs_callback;
        cxlr->memory_notifier.priority = CXL_CALLBACK_PRI;