]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drivers,cxl: use node-notifier instead of memory-notifier
authorOscar Salvador <osalvador@suse.de>
Mon, 16 Jun 2025 13:51:49 +0000 (15:51 +0200)
committerAndrew Morton <akpm@linux-foundation.org>
Sun, 13 Jul 2025 23:38:15 +0000 (16:38 -0700)
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: Oscar Salvador <osalvador@suse.de>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Harry Yoo <harry.yoo@oracle.com>
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Hyeonggon Yoo <42.hyeyoo@gmail.com>
Cc: Rakie Kim <rakie.kim@sk.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
drivers/cxl/core/region.c
drivers/cxl/cxl.h

index 6e5e1460068d639c465f0006c8347818cfe3e4c8..ba42259c3701b752e0d6552f3a2d77d339fcefd9 100644 (file)
@@ -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 @@ out:
        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;
index 3f1695c96abca99bb3484304e813cce3b74e4f13..c487445214cc64dd49164a4392303c06a604fb50 100644 (file)
@@ -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;
 };