The patch titled Subject: mm/demotion: add hotplug callbacks to handle new numa node onlined has been added to the -mm mm-unstable branch. Its filename is mm-demotion-add-hotplug-callbacks-to-handle-new-numa-node-onlined.patch This patch will shortly appear at https://git.kernel.org/pub/scm/linux/kernel/git/akpm/25-new.git/tree/patches/mm-demotion-add-hotplug-callbacks-to-handle-new-numa-node-onlined.patch This patch will later appear in the mm-unstable branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next via the mm-everything branch at git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm and is updated there every 2-3 working days ------------------------------------------------------ From: "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxx> Subject: mm/demotion: add hotplug callbacks to handle new numa node onlined Date: Thu, 18 Aug 2022 18:40:35 +0530 If the new NUMA node onlined doesn't have a abstract distance assigned, the kernel adds the NUMA node to default memory tier. Link: https://lkml.kernel.org/r/20220818131042.113280-4-aneesh.kumar@xxxxxxxxxxxxx Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxx> Reviewed-by: "Huang, Ying" <ying.huang@xxxxxxxxx> Cc: Alistair Popple <apopple@xxxxxxxxxx> Cc: Bharata B Rao <bharata@xxxxxxx> Cc: Dan Williams <dan.j.williams@xxxxxxxxx> Cc: Dave Hansen <dave.hansen@xxxxxxxxx> Cc: Davidlohr Bueso <dave@xxxxxxxxxxxx> Cc: Hesham Almatary <hesham.almatary@xxxxxxxxxx> Cc: Jagdish Gediya <jvgediya.oss@xxxxxxxxx> Cc: Johannes Weiner <hannes@xxxxxxxxxxx> Cc: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxxxx> Cc: Tim Chen <tim.c.chen@xxxxxxxxx> Cc: Wei Xu <weixugc@xxxxxxxxxx> Cc: Yang Shi <shy828301@xxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- include/linux/memory-tiers.h | 1 mm/memory-tiers.c | 68 +++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) --- a/include/linux/memory-tiers.h~mm-demotion-add-hotplug-callbacks-to-handle-new-numa-node-onlined +++ a/include/linux/memory-tiers.h @@ -14,6 +14,7 @@ * the same memory tier. */ #define MEMTIER_ADISTANCE_DRAM ((4 * MEMTIER_CHUNK_SIZE) + (MEMTIER_CHUNK_SIZE >> 1)) +#define MEMTIER_HOTPLUG_PRIO 100 #ifdef CONFIG_NUMA #include <linux/types.h> --- a/mm/memory-tiers.c~mm-demotion-add-hotplug-callbacks-to-handle-new-numa-node-onlined +++ a/mm/memory-tiers.c @@ -5,6 +5,7 @@ #include <linux/lockdep.h> #include <linux/sysfs.h> #include <linux/kobject.h> +#include <linux/memory.h> #include <linux/memory-tiers.h> struct memory_tier { @@ -105,6 +106,72 @@ static struct memory_tier *set_node_memo return memtier; } +static struct memory_tier *__node_get_memory_tier(int node) +{ + struct memory_dev_type *memtype; + + memtype = node_memory_types[node]; + if (memtype && node_isset(node, memtype->nodes)) + return memtype->memtier; + return NULL; +} + +static void destroy_memory_tier(struct memory_tier *memtier) +{ + list_del(&memtier->list); + kfree(memtier); +} + +static bool clear_node_memory_tier(int node) +{ + bool cleared = false; + struct memory_tier *memtier; + + memtier = __node_get_memory_tier(node); + if (memtier) { + struct memory_dev_type *memtype; + + memtype = node_memory_types[node]; + node_clear(node, memtype->nodes); + if (nodes_empty(memtype->nodes)) { + list_del(&memtype->tier_sibiling); + memtype->memtier = NULL; + if (list_empty(&memtier->memory_types)) + destroy_memory_tier(memtier); + } + cleared = true; + } + return cleared; +} + +static int __meminit memtier_hotplug_callback(struct notifier_block *self, + unsigned long action, void *_arg) +{ + struct memory_notify *arg = _arg; + + /* + * Only update the node migration order when a node is + * changing status, like online->offline. + */ + if (arg->status_change_nid < 0) + return notifier_from_errno(0); + + switch (action) { + case MEM_OFFLINE: + mutex_lock(&memory_tier_lock); + clear_node_memory_tier(arg->status_change_nid); + mutex_unlock(&memory_tier_lock); + break; + case MEM_ONLINE: + mutex_lock(&memory_tier_lock); + set_node_memory_tier(arg->status_change_nid); + mutex_unlock(&memory_tier_lock); + break; + } + + return notifier_from_errno(0); +} + static int __init memory_tier_init(void) { int node; @@ -126,6 +193,7 @@ static int __init memory_tier_init(void) } mutex_unlock(&memory_tier_lock); + hotplug_memory_notifier(memtier_hotplug_callback, MEMTIER_HOTPLUG_PRIO); return 0; } subsys_initcall(memory_tier_init); _ Patches currently in -mm which might be from aneesh.kumar@xxxxxxxxxxxxx are mm-demotion-add-support-for-explicit-memory-tiers.patch mm-demotion-move-memory-demotion-related-code.patch mm-demotion-add-hotplug-callbacks-to-handle-new-numa-node-onlined.patch mm-demotion-dax-kmem-set-nodes-abstract-distance-to-memtier_default_dax_adistance.patch mm-demotion-build-demotion-targets-based-on-explicit-memory-tiers.patch mm-demotion-add-pg_data_t-member-to-track-node-memory-tier-details.patch mm-demotion-drop-memtier-from-memtype.patch mm-demotion-update-node_is_toptier-to-work-with-memory-tiers.patch lib-nodemask-optimize-node_random-for-nodemask-with-single-numa-node.patch