Commit 695d9455 authored by Dan Williams's avatar Dan Williams Committed by Dave Jiang
Browse files

cxl/region: Move ready-to-probe state check to a helper



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: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarDave Jiang <dave.jiang@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Reviewed-by: default avatarJonathan Cameron <jonathan.cameron@huawei.com>
Reviewed-by: default avatarFabio 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: default avatarDave Jiang <dave.jiang@intel.com>
parent a235d7d9
Loading
Loading
Loading
Loading
+18 −6
Original line number Diff line number Diff line
@@ -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;