forked from mirrors/linux
		
	numa: Move numa implementation to common code
ARM64 numa implementation is generic enough that RISC-V can reuse that implementation with very minor cosmetic changes. This will help both ARM64 and RISC-V in terms of maintanace and feature improvement Move the numa implementation code to common directory so that both ISAs can reuse this. This doesn't introduce any function changes for ARM64. Signed-off-by: Atish Patra <atish.patra@wdc.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Tested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: Palmer Dabbelt <palmerdabbelt@google.com>
This commit is contained in:
		
							parent
							
								
									eb75541f8b
								
							
						
					
					
						commit
						ae3c107cd8
					
				
					 7 changed files with 61 additions and 48 deletions
				
			
		| 
						 | 
				
			
			@ -995,6 +995,7 @@ config HOTPLUG_CPU
 | 
			
		|||
# Common NUMA Features
 | 
			
		||||
config NUMA
 | 
			
		||||
	bool "NUMA Memory Allocation and Scheduler Support"
 | 
			
		||||
	select GENERIC_ARCH_NUMA
 | 
			
		||||
	select ACPI_NUMA if ACPI
 | 
			
		||||
	select OF_NUMA
 | 
			
		||||
	help
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,52 +3,6 @@
 | 
			
		|||
#define __ASM_NUMA_H
 | 
			
		||||
 | 
			
		||||
#include <asm/topology.h>
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_NUMA
 | 
			
		||||
 | 
			
		||||
#define NR_NODE_MEMBLKS		(MAX_NUMNODES * 2)
 | 
			
		||||
 | 
			
		||||
int __node_distance(int from, int to);
 | 
			
		||||
#define node_distance(a, b) __node_distance(a, b)
 | 
			
		||||
 | 
			
		||||
extern nodemask_t numa_nodes_parsed __initdata;
 | 
			
		||||
 | 
			
		||||
extern bool numa_off;
 | 
			
		||||
 | 
			
		||||
/* Mappings between node number and cpus on that node. */
 | 
			
		||||
extern cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
 | 
			
		||||
void numa_clear_node(unsigned int cpu);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEBUG_PER_CPU_MAPS
 | 
			
		||||
const struct cpumask *cpumask_of_node(int node);
 | 
			
		||||
#else
 | 
			
		||||
/* Returns a pointer to the cpumask of CPUs on Node 'node'. */
 | 
			
		||||
static inline const struct cpumask *cpumask_of_node(int node)
 | 
			
		||||
{
 | 
			
		||||
	if (node == NUMA_NO_NODE)
 | 
			
		||||
		return cpu_all_mask;
 | 
			
		||||
 | 
			
		||||
	return node_to_cpumask_map[node];
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void __init arch_numa_init(void);
 | 
			
		||||
int __init numa_add_memblk(int nodeid, u64 start, u64 end);
 | 
			
		||||
void __init numa_set_distance(int from, int to, int distance);
 | 
			
		||||
void __init numa_free_distance(void);
 | 
			
		||||
void __init early_map_cpu_to_node(unsigned int cpu, int nid);
 | 
			
		||||
void numa_store_cpu_info(unsigned int cpu);
 | 
			
		||||
void numa_add_cpu(unsigned int cpu);
 | 
			
		||||
void numa_remove_cpu(unsigned int cpu);
 | 
			
		||||
 | 
			
		||||
#else	/* CONFIG_NUMA */
 | 
			
		||||
 | 
			
		||||
static inline void numa_store_cpu_info(unsigned int cpu) { }
 | 
			
		||||
static inline void numa_add_cpu(unsigned int cpu) { }
 | 
			
		||||
static inline void numa_remove_cpu(unsigned int cpu) { }
 | 
			
		||||
static inline void arch_numa_init(void) { }
 | 
			
		||||
static inline void early_map_cpu_to_node(unsigned int cpu, int nid) { }
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_NUMA */
 | 
			
		||||
#include <asm-generic/numa.h>
 | 
			
		||||
 | 
			
		||||
#endif	/* __ASM_NUMA_H */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,7 +6,6 @@ obj-y				:= dma-mapping.o extable.o fault.o init.o \
 | 
			
		|||
obj-$(CONFIG_HUGETLB_PAGE)	+= hugetlbpage.o
 | 
			
		||||
obj-$(CONFIG_PTDUMP_CORE)	+= ptdump.o
 | 
			
		||||
obj-$(CONFIG_PTDUMP_DEBUGFS)	+= ptdump_debugfs.o
 | 
			
		||||
obj-$(CONFIG_NUMA)		+= numa.o
 | 
			
		||||
obj-$(CONFIG_DEBUG_VIRTUAL)	+= physaddr.o
 | 
			
		||||
obj-$(CONFIG_ARM64_MTE)		+= mteswap.o
 | 
			
		||||
KASAN_SANITIZE_physaddr.o	+= n
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -213,4 +213,10 @@ config GENERIC_ARCH_TOPOLOGY
 | 
			
		|||
	  appropriate scaling, sysfs interface for reading capacity values at
 | 
			
		||||
	  runtime.
 | 
			
		||||
 | 
			
		||||
config GENERIC_ARCH_NUMA
 | 
			
		||||
	bool
 | 
			
		||||
	help
 | 
			
		||||
	  Enable support for generic NUMA implementation. Currently, RISC-V
 | 
			
		||||
	  and ARM64 use it.
 | 
			
		||||
 | 
			
		||||
endmenu
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,6 +24,7 @@ obj-$(CONFIG_PINCTRL) += pinctrl.o
 | 
			
		|||
obj-$(CONFIG_DEV_COREDUMP) += devcoredump.o
 | 
			
		||||
obj-$(CONFIG_GENERIC_MSI_IRQ_DOMAIN) += platform-msi.o
 | 
			
		||||
obj-$(CONFIG_GENERIC_ARCH_TOPOLOGY) += arch_topology.o
 | 
			
		||||
obj-$(CONFIG_GENERIC_ARCH_NUMA) += arch_numa.o
 | 
			
		||||
 | 
			
		||||
obj-y			+= test/
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										52
									
								
								include/asm-generic/numa.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								include/asm-generic/numa.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,52 @@
 | 
			
		|||
/* SPDX-License-Identifier: GPL-2.0 */
 | 
			
		||||
#ifndef __ASM_GENERIC_NUMA_H
 | 
			
		||||
#define __ASM_GENERIC_NUMA_H
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_NUMA
 | 
			
		||||
 | 
			
		||||
#define NR_NODE_MEMBLKS		(MAX_NUMNODES * 2)
 | 
			
		||||
 | 
			
		||||
int __node_distance(int from, int to);
 | 
			
		||||
#define node_distance(a, b) __node_distance(a, b)
 | 
			
		||||
 | 
			
		||||
extern nodemask_t numa_nodes_parsed __initdata;
 | 
			
		||||
 | 
			
		||||
extern bool numa_off;
 | 
			
		||||
 | 
			
		||||
/* Mappings between node number and cpus on that node. */
 | 
			
		||||
extern cpumask_var_t node_to_cpumask_map[MAX_NUMNODES];
 | 
			
		||||
void numa_clear_node(unsigned int cpu);
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_DEBUG_PER_CPU_MAPS
 | 
			
		||||
const struct cpumask *cpumask_of_node(int node);
 | 
			
		||||
#else
 | 
			
		||||
/* Returns a pointer to the cpumask of CPUs on Node 'node'. */
 | 
			
		||||
static inline const struct cpumask *cpumask_of_node(int node)
 | 
			
		||||
{
 | 
			
		||||
	if (node == NUMA_NO_NODE)
 | 
			
		||||
		return cpu_all_mask;
 | 
			
		||||
 | 
			
		||||
	return node_to_cpumask_map[node];
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void __init arch_numa_init(void);
 | 
			
		||||
int __init numa_add_memblk(int nodeid, u64 start, u64 end);
 | 
			
		||||
void __init numa_set_distance(int from, int to, int distance);
 | 
			
		||||
void __init numa_free_distance(void);
 | 
			
		||||
void __init early_map_cpu_to_node(unsigned int cpu, int nid);
 | 
			
		||||
void numa_store_cpu_info(unsigned int cpu);
 | 
			
		||||
void numa_add_cpu(unsigned int cpu);
 | 
			
		||||
void numa_remove_cpu(unsigned int cpu);
 | 
			
		||||
 | 
			
		||||
#else	/* CONFIG_NUMA */
 | 
			
		||||
 | 
			
		||||
static inline void numa_store_cpu_info(unsigned int cpu) { }
 | 
			
		||||
static inline void numa_add_cpu(unsigned int cpu) { }
 | 
			
		||||
static inline void numa_remove_cpu(unsigned int cpu) { }
 | 
			
		||||
static inline void arch_numa_init(void) { }
 | 
			
		||||
static inline void early_map_cpu_to_node(unsigned int cpu, int nid) { }
 | 
			
		||||
 | 
			
		||||
#endif	/* CONFIG_NUMA */
 | 
			
		||||
 | 
			
		||||
#endif	/* __ASM_GENERIC_NUMA_H */
 | 
			
		||||
		Loading…
	
		Reference in a new issue