| From: Oscar Salvador <osalvador@suse.de> |
| Subject: drivers,cxl: use node-notifier instead of memory-notifier |
| Date: Mon, 16 Jun 2025 15:51:49 +0200 |
| |
| 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 | 16 ++++++++-------- |
| drivers/cxl/cxl.h | 4 ++-- |
| 2 files changed, 10 insertions(+), 10 deletions(-) |
| |
| --- a/drivers/cxl/core/region.c~driverscxl-use-node-notifier-instead-of-memory-notifier |
| +++ a/drivers/cxl/core/region.c |
| @@ -2451,12 +2451,12 @@ static int cxl_region_perf_attrs_callbac |
| 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 *_cx |
| { |
| 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; |
| --- a/drivers/cxl/cxl.h~driverscxl-use-node-notifier-instead-of-memory-notifier |
| +++ a/drivers/cxl/cxl.h |
| @@ -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; |
| }; |
| |
| _ |