Commit 41a9344b authored by Oscar Salvador's avatar Oscar Salvador Committed by Andrew Morton
Browse files

drivers,cxl: use node-notifier instead of memory-notifier

memory-tier is only concerned when a numa node changes its memory state,
specifically when a numa node with memory comes into play for the first
time, because it needs to get its performance attributes to build a proper
demotion chain.  So stop using the memory notifier and use the new numa
node notifer instead.

Link: https://lkml.kernel.org/r/20250616135158.450136-7-osalvador@suse.de


Signed-off-by: default avatarOscar Salvador <osalvador@suse.de>
Reviewed-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: default avatarHarry Yoo <harry.yoo@oracle.com>
Reviewed-by: default avatarVlastimil Babka <vbabka@suse.cz>
Acked-by: default avatarDavid Hildenbrand <david@redhat.com>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Rakie Kim <rakie.kim@sk.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent 265ab086
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -2451,12 +2451,12 @@ static int cxl_region_perf_attrs_callback(struct notifier_block *nb,
					  unsigned long action, void *arg)
{
	struct cxl_region *cxlr = container_of(nb, struct cxl_region,
					       memory_notifier);
	struct memory_notify *mnb = arg;
	int nid = mnb->status_change_nid;
					       node_notifier);
	struct node_notify *nn = arg;
	int nid = nn->nid;
	int region_nid;

	if (nid == NUMA_NO_NODE || action != MEM_ONLINE)
	if (action != NODE_ADDED_FIRST_MEMORY)
		return NOTIFY_DONE;

	/*
@@ -3527,7 +3527,7 @@ static void shutdown_notifiers(void *_cxlr)
{
	struct cxl_region *cxlr = _cxlr;

	unregister_memory_notifier(&cxlr->memory_notifier);
	unregister_node_notifier(&cxlr->node_notifier);
	unregister_mt_adistance_algorithm(&cxlr->adist_notifier);
}

@@ -3566,9 +3566,9 @@ static int cxl_region_probe(struct device *dev)
	if (rc)
		return rc;

	cxlr->memory_notifier.notifier_call = cxl_region_perf_attrs_callback;
	cxlr->memory_notifier.priority = CXL_CALLBACK_PRI;
	register_memory_notifier(&cxlr->memory_notifier);
	cxlr->node_notifier.notifier_call = cxl_region_perf_attrs_callback;
	cxlr->node_notifier.priority = CXL_CALLBACK_PRI;
	register_node_notifier(&cxlr->node_notifier);

	cxlr->adist_notifier.notifier_call = cxl_region_calculate_adistance;
	cxlr->adist_notifier.priority = 100;
+2 −2
Original line number Diff line number Diff line
@@ -513,7 +513,7 @@ enum cxl_partition_mode {
 * @flags: Region state flags
 * @params: active + config params for the region
 * @coord: QoS access coordinates for the region
 * @memory_notifier: notifier for setting the access coordinates to node
 * @node_notifier: notifier for setting the access coordinates to node
 * @adist_notifier: notifier for calculating the abstract distance of node
 */
struct cxl_region {
@@ -526,7 +526,7 @@ struct cxl_region {
	unsigned long flags;
	struct cxl_region_params params;
	struct access_coordinate coord[ACCESS_COORDINATE_MAX];
	struct notifier_block memory_notifier;
	struct notifier_block node_notifier;
	struct notifier_block adist_notifier;
};