Message ID | 20200318072810.9735-4-srikar@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix kmalloc_node on offline nodes | expand |
On Wed, 18 Mar 2020, Srikar Dronamraju wrote: > For a memoryless or offline nodes, node_numa_mem refers to a N_MEMORY > fallback node. Currently kernel has an API set_numa_mem that sets > node_numa_mem for memoryless node. However this API cannot be used for > offline nodes. Hence all offline nodes will have their node_numa_mem set > to 0. However systems can themselves have node 0 as offline i.e That is a significant change to the basic assumptions for memory less nodes. Node 0 needed to have memory and processors. Not sure what else may break.
On Wed 18-03-20 19:20:41, Cristopher Lameter wrote: > On Wed, 18 Mar 2020, Srikar Dronamraju wrote: > > > For a memoryless or offline nodes, node_numa_mem refers to a N_MEMORY > > fallback node. Currently kernel has an API set_numa_mem that sets > > node_numa_mem for memoryless node. However this API cannot be used for > > offline nodes. Hence all offline nodes will have their node_numa_mem set > > to 0. However systems can themselves have node 0 as offline i.e > > That is a significant change to the basic assumptions for memory less > nodes. Node 0 needed to have memory and processors. Not sure what else > may break. This assumption is simply incorrect. There many examples but just one from top of my head 3e8589963773 ("memcg: make it work on sparse non-0-node systems"). We simply have to forget that some nodes are special.
diff --git a/include/asm-generic/topology.h b/include/asm-generic/topology.h index 238873739550..e803ee7850e6 100644 --- a/include/asm-generic/topology.h +++ b/include/asm-generic/topology.h @@ -68,6 +68,9 @@ #ifndef set_numa_mem #define set_numa_mem(node) #endif +#ifndef reset_numa_mem +#define reset_numa_mem(node) +#endif #ifndef set_cpu_numa_mem #define set_cpu_numa_mem(cpu, node) #endif diff --git a/include/linux/topology.h b/include/linux/topology.h index eb2fe6edd73c..bebda80038bf 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h @@ -147,6 +147,13 @@ static inline int node_to_mem_node(int node) } #endif +#ifndef reset_numa_mem +static inline void reset_numa_mem(int node) +{ + _node_numa_mem_[node] = first_memory_node; +} +#endif + #ifndef numa_mem_id /* Returns the number of the nearest Node with memory */ static inline int numa_mem_id(void)