Aneesh Kumar K V <aneesh.kumar@xxxxxxxxxxxxx> writes: > On 8/9/22 10:51 AM, Huang, Ying wrote: >> "Aneesh Kumar K.V" <aneesh.kumar@xxxxxxxxxxxxx> writes: >> >>> Also update different helpes to use NODE_DATA()->memtier. Since >>> node specific memtier can change based on the reassignment of >>> NUMA node to a different memory tiers, accessing NODE_DATA()->memtier >>> needs to happen under an rcu read lock or memory_tier_lock. >>> >>> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxx> >>> --- >>> include/linux/mmzone.h | 3 +++ >>> mm/memory-tiers.c | 38 ++++++++++++++++++++++++++++++++------ >>> 2 files changed, 35 insertions(+), 6 deletions(-) >>> >>> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h >>> index aab70355d64f..353812495a70 100644 >>> --- a/include/linux/mmzone.h >>> +++ b/include/linux/mmzone.h >>> @@ -928,6 +928,9 @@ typedef struct pglist_data { >>> /* Per-node vmstats */ >>> struct per_cpu_nodestat __percpu *per_cpu_nodestats; >>> atomic_long_t vm_stat[NR_VM_NODE_STAT_ITEMS]; >>> +#ifdef CONFIG_NUMA >>> + struct memory_tier __rcu *memtier; >>> +#endif >>> } pg_data_t; >>> >>> #define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages) >>> diff --git a/mm/memory-tiers.c b/mm/memory-tiers.c >>> index 02e514e87d5c..3778ac6a44a1 100644 >>> --- a/mm/memory-tiers.c >>> +++ b/mm/memory-tiers.c >>> @@ -5,6 +5,7 @@ >>> #include <linux/kobject.h> >>> #include <linux/memory.h> >>> #include <linux/random.h> >>> +#include <linux/mmzone.h> >>> #include <linux/memory-tiers.h> >>> >>> #include "internal.h" >>> @@ -137,12 +138,18 @@ static struct memory_tier *find_create_memory_tier(struct memory_dev_type *memty >>> >>> static struct memory_tier *__node_get_memory_tier(int node) >>> { >>> - struct memory_dev_type *memtype; >>> + pg_data_t *pgdat; >>> >>> - memtype = node_memory_types[node]; >>> - if (memtype && node_isset(node, memtype->nodes)) >>> - return memtype->memtier; >>> - return NULL; >> >> After adding pgdat->memtier, it appears there's unnecessary to keep >> memtype->memtier? >> > > It do simplify find_create_memory_tier() where I use if (memtype->memtier) > to check whether the memtype is already added to a memory tier. I could switch > that to list_empty(memtype->tier_sibiling). But I felt the current one is much > cleaner I prefer "list_empty(memtype->tier_sibiling)". But I will let you to decide. Best Regards, Huang, Ying