diff options
| author | Jesse Larrew <jlarrew@linux.vnet.ibm.com> | 2010-12-17 17:07:47 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2011-01-11 00:06:16 -0500 |
| commit | 39bf990ead35c7263652ca5dd8262b2b2cd147ac (patch) | |
| tree | 2aac1543090234a97d4b67f1871bbfcd857359e2 | |
| parent | eed0ba0b4ab2d1668588219a8efa81bf8636a12d (diff) | |
powerpc/pseries: Fix VPHN build errors on non-SMP systems
The header asm/hvcall.h was previously included indirectly via
smp.h. On non-SMP systems, however, these declarations are excluded
and the build breaks. This is easily fixed by including asm/hvcall.h
directly.
The VPHN feature is only meaningful on NUMA systems that implement
the SPLPAR option, so exclude the VPHN code on systems without
SPLPAR enabled.
Also, expose unmap_cpu_from_node() on systems with SPLPAR enabled,
even if CONFIG_HOTPLUG_CPU is disabled.
Lastly, map_cpu_to_node() is now needed by VPHN to manipulate the
node masks after boot time, so remove the __cpuinit annotation to
fix a section mismatch.
Signed-off-by: Jesse Larrew <jlarrew@linux.vnet.ibm.com>
| -rw-r--r-- | arch/powerpc/include/asm/topology.h | 20 | ||||
| -rw-r--r-- | arch/powerpc/mm/numa.c | 9 |
2 files changed, 17 insertions, 12 deletions
diff --git a/arch/powerpc/include/asm/topology.h b/arch/powerpc/include/asm/topology.h index aed188bd70db..fbfcfd04d25a 100644 --- a/arch/powerpc/include/asm/topology.h +++ b/arch/powerpc/include/asm/topology.h | |||
| @@ -93,9 +93,20 @@ extern void __init dump_numa_cpu_topology(void); | |||
| 93 | extern int sysfs_add_device_to_node(struct sys_device *dev, int nid); | 93 | extern int sysfs_add_device_to_node(struct sys_device *dev, int nid); |
| 94 | extern void sysfs_remove_device_from_node(struct sys_device *dev, int nid); | 94 | extern void sysfs_remove_device_from_node(struct sys_device *dev, int nid); |
| 95 | 95 | ||
| 96 | #ifdef CONFIG_PPC_SPLPAR | ||
| 96 | extern int start_topology_update(void); | 97 | extern int start_topology_update(void); |
| 97 | extern int stop_topology_update(void); | 98 | extern int stop_topology_update(void); |
| 98 | #else | 99 | #else |
| 100 | static inline int start_topology_update(void) | ||
| 101 | { | ||
| 102 | return 0; | ||
| 103 | } | ||
| 104 | static inline int stop_topology_update(void) | ||
| 105 | { | ||
| 106 | return 0; | ||
| 107 | } | ||
| 108 | #endif /* CONFIG_PPC_SPLPAR */ | ||
| 109 | #else | ||
| 99 | 110 | ||
| 100 | static inline void dump_numa_cpu_topology(void) {} | 111 | static inline void dump_numa_cpu_topology(void) {} |
| 101 | 112 | ||
| @@ -108,15 +119,6 @@ static inline void sysfs_remove_device_from_node(struct sys_device *dev, | |||
| 108 | int nid) | 119 | int nid) |
| 109 | { | 120 | { |
| 110 | } | 121 | } |
| 111 | |||
| 112 | static inline int start_topology_update(void) | ||
| 113 | { | ||
| 114 | return 0; | ||
| 115 | } | ||
| 116 | static inline int stop_topology_update(void) | ||
| 117 | { | ||
| 118 | return 0; | ||
| 119 | } | ||
| 120 | #endif /* CONFIG_NUMA */ | 122 | #endif /* CONFIG_NUMA */ |
| 121 | 123 | ||
| 122 | #include <asm-generic/topology.h> | 124 | #include <asm-generic/topology.h> |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index d644ba7e8aba..3c0d20c9161a 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <asm/smp.h> | 28 | #include <asm/smp.h> |
| 29 | #include <asm/firmware.h> | 29 | #include <asm/firmware.h> |
| 30 | #include <asm/paca.h> | 30 | #include <asm/paca.h> |
| 31 | #include <asm/hvcall.h> | ||
| 31 | 32 | ||
| 32 | static int numa_enabled = 1; | 33 | static int numa_enabled = 1; |
| 33 | 34 | ||
| @@ -167,7 +168,7 @@ static void __init get_node_active_region(unsigned long start_pfn, | |||
| 167 | work_with_active_regions(nid, get_active_region_work_fn, node_ar); | 168 | work_with_active_regions(nid, get_active_region_work_fn, node_ar); |
| 168 | } | 169 | } |
| 169 | 170 | ||
| 170 | static void __cpuinit map_cpu_to_node(int cpu, int node) | 171 | static void map_cpu_to_node(int cpu, int node) |
| 171 | { | 172 | { |
| 172 | numa_cpu_lookup_table[cpu] = node; | 173 | numa_cpu_lookup_table[cpu] = node; |
| 173 | 174 | ||
| @@ -177,7 +178,7 @@ static void __cpuinit map_cpu_to_node(int cpu, int node) | |||
| 177 | cpumask_set_cpu(cpu, node_to_cpumask_map[node]); | 178 | cpumask_set_cpu(cpu, node_to_cpumask_map[node]); |
| 178 | } | 179 | } |
| 179 | 180 | ||
| 180 | #ifdef CONFIG_HOTPLUG_CPU | 181 | #if defined(CONFIG_HOTPLUG_CPU) || defined(CONFIG_PPC_SPLPAR) |
| 181 | static void unmap_cpu_from_node(unsigned long cpu) | 182 | static void unmap_cpu_from_node(unsigned long cpu) |
| 182 | { | 183 | { |
| 183 | int node = numa_cpu_lookup_table[cpu]; | 184 | int node = numa_cpu_lookup_table[cpu]; |
| @@ -191,7 +192,7 @@ static void unmap_cpu_from_node(unsigned long cpu) | |||
| 191 | cpu, node); | 192 | cpu, node); |
| 192 | } | 193 | } |
| 193 | } | 194 | } |
| 194 | #endif /* CONFIG_HOTPLUG_CPU */ | 195 | #endif /* CONFIG_HOTPLUG_CPU || CONFIG_PPC_SPLPAR */ |
| 195 | 196 | ||
| 196 | /* must hold reference to node during call */ | 197 | /* must hold reference to node during call */ |
| 197 | static const int *of_get_associativity(struct device_node *dev) | 198 | static const int *of_get_associativity(struct device_node *dev) |
| @@ -1289,6 +1290,7 @@ u64 memory_hotplug_max(void) | |||
| 1289 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 1290 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
| 1290 | 1291 | ||
| 1291 | /* Vrtual Processor Home Node (VPHN) support */ | 1292 | /* Vrtual Processor Home Node (VPHN) support */ |
| 1293 | #ifdef CONFIG_PPC_SPLPAR | ||
| 1292 | #define VPHN_NR_CHANGE_CTRS (8) | 1294 | #define VPHN_NR_CHANGE_CTRS (8) |
| 1293 | static u8 vphn_cpu_change_counts[NR_CPUS][VPHN_NR_CHANGE_CTRS]; | 1295 | static u8 vphn_cpu_change_counts[NR_CPUS][VPHN_NR_CHANGE_CTRS]; |
| 1294 | static cpumask_t cpu_associativity_changes_mask; | 1296 | static cpumask_t cpu_associativity_changes_mask; |
| @@ -1531,3 +1533,4 @@ int stop_topology_update(void) | |||
| 1531 | vphn_enabled = 0; | 1533 | vphn_enabled = 0; |
| 1532 | return del_timer_sync(&topology_timer); | 1534 | return del_timer_sync(&topology_timer); |
| 1533 | } | 1535 | } |
| 1536 | #endif /* CONFIG_PPC_SPLPAR */ | ||
