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 memoryless and cpuless at this time. In such cases, node_to_mem_node() fails to provide a N_MEMORY fallback node.
Mitigate this by having a new API that sets the default node_numa_mem for offline nodes to be first_memory_node. Cc: Andrew Morton <a...@linux-foundation.org> Cc: linux...@kvack.org Cc: Mel Gorman <mgor...@suse.de> Cc: Michael Ellerman <m...@ellerman.id.au> Cc: Sachin Sant <sach...@linux.vnet.ibm.com> Cc: Michal Hocko <mho...@kernel.org> Cc: Christopher Lameter <c...@linux.com> Cc: linuxppc-dev@lists.ozlabs.org Cc: Joonsoo Kim <iamjoonsoo....@lge.com> Cc: Kirill Tkhai <ktk...@virtuozzo.com> Cc: Vlastimil Babka <vba...@suse.cz> Cc: Srikar Dronamraju <sri...@linux.vnet.ibm.com> Cc: Bharata B Rao <bhar...@linux.ibm.com> Cc: Nathan Lynch <nath...@linux.ibm.com> Reported-by: Sachin Sant <sach...@linux.vnet.ibm.com> Tested-by: Sachin Sant <sach...@linux.vnet.ibm.com> Signed-off-by: Srikar Dronamraju <sri...@linux.vnet.ibm.com> --- include/asm-generic/topology.h | 3 +++ include/linux/topology.h | 7 +++++++ 2 files changed, 10 insertions(+) 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) -- 2.18.1