Loading arch/x86/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -1705,7 +1705,7 @@ config HAVE_ARCH_EARLY_PFN_TO_NID depends on NUMA config USE_PERCPU_NUMA_NODE_ID def_bool X86_64 def_bool y depends on NUMA menu "Power management and ACPI options" Loading arch/x86/include/asm/apic.h +23 −13 Original line number Diff line number Diff line Loading @@ -306,8 +306,6 @@ struct apic { void (*setup_apic_routing)(void); int (*multi_timer_check)(int apic, int irq); int (*apicid_to_node)(int logical_apicid); int (*cpu_to_logical_apicid)(int cpu); int (*cpu_present_to_apicid)(int mps_cpu); void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *retmap); void (*setup_portio_remap)(void); Loading Loading @@ -355,6 +353,23 @@ struct apic { void (*icr_write)(u32 low, u32 high); void (*wait_icr_idle)(void); u32 (*safe_wait_icr_idle)(void); #ifdef CONFIG_X86_32 /* * Called very early during boot from get_smp_config(). It should * return the logical apicid. x86_[bios]_cpu_to_apicid is * initialized before this function is called. * * If logical apicid can't be determined that early, the function * may return BAD_APICID. Logical apicid will be configured after * init_apic_ldr() while bringing up CPUs. Note that NUMA affinity * won't be applied properly during early boot in this case. */ int (*x86_32_early_logical_apicid)(int cpu); /* determine CPU -> NUMA node mapping */ int (*x86_32_numa_cpu_node)(int cpu); #endif }; /* Loading Loading @@ -502,6 +517,11 @@ extern struct apic apic_noop; extern struct apic apic_default; static inline int noop_x86_32_early_logical_apicid(int cpu) { return BAD_APICID; } /* * Set up the logical destination ID. * Loading @@ -521,7 +541,7 @@ static inline int default_phys_pkg_id(int cpuid_apic, int index_msb) return cpuid_apic >> index_msb; } extern int default_apicid_to_node(int logical_apicid); extern int default_x86_32_numa_cpu_node(int cpu); #endif Loading Loading @@ -557,12 +577,6 @@ static inline void default_ioapic_phys_id_map(physid_mask_t *phys_map, physid_ma *retmap = *phys_map; } /* Mapping from cpu number to logical apicid */ static inline int default_cpu_to_logical_apicid(int cpu) { return 1 << cpu; } static inline int __default_cpu_present_to_apicid(int mps_cpu) { if (mps_cpu < nr_cpu_ids && cpu_present(mps_cpu)) Loading Loading @@ -595,8 +609,4 @@ extern int default_check_phys_apicid_present(int phys_apicid); #endif /* CONFIG_X86_LOCAL_APIC */ #ifdef CONFIG_X86_32 extern u8 cpu_2_logical_apicid[NR_CPUS]; #endif #endif /* _ASM_X86_APIC_H */ arch/x86/include/asm/ipi.h +4 −4 Original line number Diff line number Diff line Loading @@ -123,10 +123,6 @@ extern void default_send_IPI_mask_sequence_phys(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_allbutself_phys(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector); /* Avoid include hell */ #define NMI_VECTOR 0x02 Loading @@ -150,6 +146,10 @@ static inline void __default_local_send_IPI_all(int vector) } #ifdef CONFIG_X86_32 extern void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_allbutself(int vector); Loading arch/x86/include/asm/mpspec.h +0 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ extern int pic_mode; #define MAX_IRQ_SOURCES 256 extern unsigned int def_to_bigsmp; extern u8 apicid_2_node[]; #ifdef CONFIG_X86_NUMAQ extern int mp_bus_id_to_node[MAX_MP_BUSSES]; Loading @@ -33,8 +32,6 @@ extern int mp_bus_id_to_local[MAX_MP_BUSSES]; extern int quad_local_to_mp_bus_id [NR_CPUS/4][4]; #endif #define MAX_APICID 256 #else /* CONFIG_X86_64: */ #define MAX_MP_BUSSES 256 Loading arch/x86/include/asm/numa.h +49 −0 Original line number Diff line number Diff line #ifndef _ASM_X86_NUMA_H #define _ASM_X86_NUMA_H #include <asm/topology.h> #include <asm/apicdef.h> #ifdef CONFIG_NUMA /* * __apicid_to_node[] stores the raw mapping between physical apicid and * node and is used to initialize cpu_to_node mapping. * * The mapping may be overridden by apic->numa_cpu_node() on 32bit and thus * should be accessed by the accessors - set_apicid_to_node() and * numa_cpu_node(). */ extern s16 __apicid_to_node[MAX_LOCAL_APIC]; static inline void set_apicid_to_node(int apicid, s16 node) { __apicid_to_node[apicid] = node; } #else /* CONFIG_NUMA */ static inline void set_apicid_to_node(int apicid, s16 node) { } #endif /* CONFIG_NUMA */ #ifdef CONFIG_X86_32 # include "numa_32.h" #else # include "numa_64.h" #endif #ifdef CONFIG_NUMA extern void __cpuinit numa_set_node(int cpu, int node); extern void __cpuinit numa_clear_node(int cpu); extern void __init numa_init_array(void); extern void __init init_cpu_to_node(void); extern void __cpuinit numa_add_cpu(int cpu); extern void __cpuinit numa_remove_cpu(int cpu); #else /* CONFIG_NUMA */ static inline void numa_set_node(int cpu, int node) { } static inline void numa_clear_node(int cpu) { } static inline void numa_init_array(void) { } static inline void init_cpu_to_node(void) { } static inline void numa_add_cpu(int cpu) { } static inline void numa_remove_cpu(int cpu) { } #endif /* CONFIG_NUMA */ #ifdef CONFIG_DEBUG_PER_CPU_MAPS struct cpumask __cpuinit *debug_cpumask_set_cpu(int cpu, int enable); #endif #endif /* _ASM_X86_NUMA_H */ Loading
arch/x86/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -1705,7 +1705,7 @@ config HAVE_ARCH_EARLY_PFN_TO_NID depends on NUMA config USE_PERCPU_NUMA_NODE_ID def_bool X86_64 def_bool y depends on NUMA menu "Power management and ACPI options" Loading
arch/x86/include/asm/apic.h +23 −13 Original line number Diff line number Diff line Loading @@ -306,8 +306,6 @@ struct apic { void (*setup_apic_routing)(void); int (*multi_timer_check)(int apic, int irq); int (*apicid_to_node)(int logical_apicid); int (*cpu_to_logical_apicid)(int cpu); int (*cpu_present_to_apicid)(int mps_cpu); void (*apicid_to_cpu_present)(int phys_apicid, physid_mask_t *retmap); void (*setup_portio_remap)(void); Loading Loading @@ -355,6 +353,23 @@ struct apic { void (*icr_write)(u32 low, u32 high); void (*wait_icr_idle)(void); u32 (*safe_wait_icr_idle)(void); #ifdef CONFIG_X86_32 /* * Called very early during boot from get_smp_config(). It should * return the logical apicid. x86_[bios]_cpu_to_apicid is * initialized before this function is called. * * If logical apicid can't be determined that early, the function * may return BAD_APICID. Logical apicid will be configured after * init_apic_ldr() while bringing up CPUs. Note that NUMA affinity * won't be applied properly during early boot in this case. */ int (*x86_32_early_logical_apicid)(int cpu); /* determine CPU -> NUMA node mapping */ int (*x86_32_numa_cpu_node)(int cpu); #endif }; /* Loading Loading @@ -502,6 +517,11 @@ extern struct apic apic_noop; extern struct apic apic_default; static inline int noop_x86_32_early_logical_apicid(int cpu) { return BAD_APICID; } /* * Set up the logical destination ID. * Loading @@ -521,7 +541,7 @@ static inline int default_phys_pkg_id(int cpuid_apic, int index_msb) return cpuid_apic >> index_msb; } extern int default_apicid_to_node(int logical_apicid); extern int default_x86_32_numa_cpu_node(int cpu); #endif Loading Loading @@ -557,12 +577,6 @@ static inline void default_ioapic_phys_id_map(physid_mask_t *phys_map, physid_ma *retmap = *phys_map; } /* Mapping from cpu number to logical apicid */ static inline int default_cpu_to_logical_apicid(int cpu) { return 1 << cpu; } static inline int __default_cpu_present_to_apicid(int mps_cpu) { if (mps_cpu < nr_cpu_ids && cpu_present(mps_cpu)) Loading Loading @@ -595,8 +609,4 @@ extern int default_check_phys_apicid_present(int phys_apicid); #endif /* CONFIG_X86_LOCAL_APIC */ #ifdef CONFIG_X86_32 extern u8 cpu_2_logical_apicid[NR_CPUS]; #endif #endif /* _ASM_X86_APIC_H */
arch/x86/include/asm/ipi.h +4 −4 Original line number Diff line number Diff line Loading @@ -123,10 +123,6 @@ extern void default_send_IPI_mask_sequence_phys(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_allbutself_phys(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector); /* Avoid include hell */ #define NMI_VECTOR 0x02 Loading @@ -150,6 +146,10 @@ static inline void __default_local_send_IPI_all(int vector) } #ifdef CONFIG_X86_32 extern void default_send_IPI_mask_sequence_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_allbutself_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_mask_logical(const struct cpumask *mask, int vector); extern void default_send_IPI_allbutself(int vector); Loading
arch/x86/include/asm/mpspec.h +0 −3 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ extern int pic_mode; #define MAX_IRQ_SOURCES 256 extern unsigned int def_to_bigsmp; extern u8 apicid_2_node[]; #ifdef CONFIG_X86_NUMAQ extern int mp_bus_id_to_node[MAX_MP_BUSSES]; Loading @@ -33,8 +32,6 @@ extern int mp_bus_id_to_local[MAX_MP_BUSSES]; extern int quad_local_to_mp_bus_id [NR_CPUS/4][4]; #endif #define MAX_APICID 256 #else /* CONFIG_X86_64: */ #define MAX_MP_BUSSES 256 Loading
arch/x86/include/asm/numa.h +49 −0 Original line number Diff line number Diff line #ifndef _ASM_X86_NUMA_H #define _ASM_X86_NUMA_H #include <asm/topology.h> #include <asm/apicdef.h> #ifdef CONFIG_NUMA /* * __apicid_to_node[] stores the raw mapping between physical apicid and * node and is used to initialize cpu_to_node mapping. * * The mapping may be overridden by apic->numa_cpu_node() on 32bit and thus * should be accessed by the accessors - set_apicid_to_node() and * numa_cpu_node(). */ extern s16 __apicid_to_node[MAX_LOCAL_APIC]; static inline void set_apicid_to_node(int apicid, s16 node) { __apicid_to_node[apicid] = node; } #else /* CONFIG_NUMA */ static inline void set_apicid_to_node(int apicid, s16 node) { } #endif /* CONFIG_NUMA */ #ifdef CONFIG_X86_32 # include "numa_32.h" #else # include "numa_64.h" #endif #ifdef CONFIG_NUMA extern void __cpuinit numa_set_node(int cpu, int node); extern void __cpuinit numa_clear_node(int cpu); extern void __init numa_init_array(void); extern void __init init_cpu_to_node(void); extern void __cpuinit numa_add_cpu(int cpu); extern void __cpuinit numa_remove_cpu(int cpu); #else /* CONFIG_NUMA */ static inline void numa_set_node(int cpu, int node) { } static inline void numa_clear_node(int cpu) { } static inline void numa_init_array(void) { } static inline void init_cpu_to_node(void) { } static inline void numa_add_cpu(int cpu) { } static inline void numa_remove_cpu(int cpu) { } #endif /* CONFIG_NUMA */ #ifdef CONFIG_DEBUG_PER_CPU_MAPS struct cpumask __cpuinit *debug_cpumask_set_cpu(int cpu, int enable); #endif #endif /* _ASM_X86_NUMA_H */