--- arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c | 2 - arch/i386/kernel/cpu/cpufreq/powernow-k8.c | 10 +++---- arch/x86_64/kernel/genapic.c | 7 ++-- arch/x86_64/kernel/genapic_flat.c | 4 +- arch/x86_64/kernel/mce_amd.c | 6 ++-- arch/x86_64/kernel/mpparse.c | 2 - arch/x86_64/kernel/setup.c | 2 - arch/x86_64/kernel/smpboot.c | 40 ++++++++++++++-------------- arch/x86_64/mm/numa.c | 2 - drivers/acpi/processor_core.c | 8 ----- include/asm-i386/smp.h | 6 ++-- include/asm-x86_64/smp.h | 12 ++++---- include/asm-x86_64/topology.h | 4 +- include/asm/ipi.h | 2 - 14 files changed, 50 insertions(+), 57 deletions(-) Index: linux-2.6.22-rc6-mm1/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c 2007-07-12 22:02:21.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/i386/kernel/cpu/cpufreq/acpi-cpufreq.c 2007-07-12 22:02:51.000000000 -0700 @@ -609,7 +609,7 @@ static int acpi_cpufreq_cpu_init(struct dmi_check_system(sw_any_bug_dmi_table); if (bios_with_sw_any_bug && cpus_weight(policy->cpus) == 1) { policy->shared_type = CPUFREQ_SHARED_TYPE_ALL; - policy->cpus = cpu_core_map[cpu]; + policy->cpus = per_cpu(cpu_core_map, cpu); } #endif Index: linux-2.6.22-rc6-mm1/arch/i386/kernel/cpu/cpufreq/powernow-k8.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2007-07-12 22:03:02.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/i386/kernel/cpu/cpufreq/powernow-k8.c 2007-07-12 22:44:54.000000000 -0700 @@ -57,7 +57,7 @@ static struct powernow_k8_data *powernow static int cpu_family = CPU_OPTERON; #ifndef CONFIG_SMP -static cpumask_t cpu_core_map[1]; +DEFINE_PER_CPU(cpumask_t, cpu_core_map) #endif /* Return a frequency in MHz, given an input fid */ @@ -661,7 +661,7 @@ static int fill_powernow_table(struct po dprintk("cfid 0x%x, cvid 0x%x\n", data->currfid, data->currvid); data->powernow_table = powernow_table; - if (first_cpu(cpu_core_map[data->cpu]) == data->cpu) + if (first_cpu(per_cpu(cpu_core_map, data->cpu)) == data->cpu) print_basics(data); for (j = 0; j < data->numps; j++) @@ -815,7 +815,7 @@ static int powernow_k8_cpu_init_acpi(str /* fill in data */ data->numps = data->acpi_data.state_count; - if (first_cpu(cpu_core_map[data->cpu]) == data->cpu) + if (first_cpu(per_cpu(cpu_core_map, data->cpu)) == data->cpu) print_basics(data); powernow_k8_acpi_pst_values(data, 0); @@ -1209,7 +1209,7 @@ static int __cpuinit powernowk8_cpu_init if (cpu_family == CPU_HW_PSTATE) pol->cpus = cpumask_of_cpu(pol->cpu); else - pol->cpus = cpu_core_map[pol->cpu]; + pol->cpus = per_cpu(cpu_core_map, pol->cpu); data->available_cores = &(pol->cpus); /* Take a crude guess here. @@ -1276,7 +1276,7 @@ static unsigned int powernowk8_get (unsi cpumask_t oldmask = current->cpus_allowed; unsigned int khz = 0; - data = powernow_data[first_cpu(cpu_core_map[cpu])]; + data = powernow_data[first_cpu(per_cpu(cpu_core_map, cpu))]; if (!data) return -EINVAL; Index: linux-2.6.22-rc6-mm1/arch/x86_64/kernel/genapic_flat.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/kernel/genapic_flat.c 2007-07-12 22:14:07.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/kernel/genapic_flat.c 2007-07-12 22:14:39.000000000 -0700 @@ -52,7 +52,7 @@ static void flat_init_apic_ldr(void) num = smp_processor_id(); id = 1UL << num; - x86_cpu_to_log_apicid[num] = id; + per_cpu(x86_cpu_to_log_apicid, num) = id; apic_write(APIC_DFR, APIC_DFR_FLAT); val = apic_read(APIC_LDR) & ~APIC_LDR_MASK; val |= SET_APIC_LOGICAL_ID(id); @@ -173,7 +173,7 @@ static unsigned int physflat_cpu_mask_to */ cpu = first_cpu(cpumask); if ((unsigned)cpu < NR_CPUS) - return x86_cpu_to_apicid[cpu]; + return per_cpu(x86_cpu_to_apicid, cpu); else return BAD_APICID; } Index: linux-2.6.22-rc6-mm1/arch/x86_64/kernel/mce_amd.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/kernel/mce_amd.c 2007-07-12 22:00:41.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/kernel/mce_amd.c 2007-07-12 22:01:30.000000000 -0700 @@ -472,7 +472,7 @@ static __cpuinit int threshold_create_ba #ifdef CONFIG_SMP if (cpu_data[cpu].cpu_core_id && shared_bank[bank]) { /* symlink */ - i = first_cpu(cpu_core_map[cpu]); + i = first_cpu(per_cpu(cpu_core_map, cpu)); /* first core not up yet */ if (cpu_data[i].cpu_core_id) @@ -492,7 +492,7 @@ static __cpuinit int threshold_create_ba if (err) goto out; - b->cpus = cpu_core_map[cpu]; + b->cpus = per_cpu(cpu_core_map, cpu); per_cpu(threshold_banks, cpu)[bank] = b; goto out; } @@ -509,7 +509,7 @@ static __cpuinit int threshold_create_ba #ifndef CONFIG_SMP b->cpus = CPU_MASK_ALL; #else - b->cpus = cpu_core_map[cpu]; + b->cpus = per_cpu(cpu_core_map, cpu); #endif err = kobject_register(&b->kobj); if (err) Index: linux-2.6.22-rc6-mm1/arch/x86_64/kernel/mpparse.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/kernel/mpparse.c 2007-07-12 22:12:55.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/kernel/mpparse.c 2007-07-12 22:13:07.000000000 -0700 @@ -123,7 +123,7 @@ static void __cpuinit MP_processor_info cpu = 0; } bios_cpu_apicid[cpu] = m->mpc_apicid; - x86_cpu_to_apicid[cpu] = m->mpc_apicid; + per_cpu(x86_cpu_to_apicid, cpu) = m->mpc_apicid; cpu_set(cpu, cpu_possible_map); cpu_set(cpu, cpu_present_map); Index: linux-2.6.22-rc6-mm1/arch/x86_64/kernel/setup.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/kernel/setup.c 2007-07-12 21:59:34.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/kernel/setup.c 2007-07-12 22:00:24.000000000 -0700 @@ -1042,7 +1042,7 @@ static int show_cpuinfo(struct seq_file if (smp_num_siblings * c->x86_max_cores > 1) { int cpu = c - cpu_data; seq_printf(m, "physical id\t: %d\n", c->phys_proc_id); - seq_printf(m, "siblings\t: %d\n", cpus_weight(cpu_core_map[cpu])); + seq_printf(m, "siblings\t: %d\n", cpus_weight(per_cpu(cpu_core_map, cpu))); seq_printf(m, "core id\t\t: %d\n", c->cpu_core_id); seq_printf(m, "cpu cores\t: %d\n", c->booted_cores); } Index: linux-2.6.22-rc6-mm1/arch/x86_64/kernel/smpboot.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/kernel/smpboot.c 2007-07-12 22:04:44.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/kernel/smpboot.c 2007-07-12 23:00:30.000000000 -0700 @@ -84,19 +84,19 @@ cpumask_t cpu_possible_map; EXPORT_SYMBOL(cpu_possible_map); /* Per CPU bogomips and other parameters */ -struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned; +struct cpuinfo_x86 cpu_data[NR_CPUS]; EXPORT_SYMBOL(cpu_data); /* Set when the idlers are all forked */ int smp_threads_ready; /* representing HT siblings of each logical CPU */ -cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly; -EXPORT_SYMBOL(cpu_sibling_map); +DEFINE_PER_CPU(cpumask_t, cpu_sibling_map); +EXPORT_PER_CPU_SYMBOL(cpu_sibling_map); /* representing HT and core siblings of each logical CPU */ -cpumask_t cpu_core_map[NR_CPUS] __read_mostly; -EXPORT_SYMBOL(cpu_core_map); +DEFINE_PER_CPU(cpumask_t, cpu_core_map); +EXPORT_PER_CPU_SYMBOL(cpu_core_map); /* * Trampoline 80x86 program as an array. @@ -243,7 +243,7 @@ cpumask_t cpu_coregroup_map(int cpu) * And for power savings, we return cpu_core_map */ if (sched_mc_power_savings || sched_smt_power_savings) - return cpu_core_map[cpu]; + return per_cpu(cpu_core_map, cpu); else return c->llc_shared_map; } @@ -262,22 +262,22 @@ static inline void set_cpu_sibling_map(i for_each_cpu_mask(i, cpu_sibling_setup_map) { if (c[cpu].phys_proc_id == c[i].phys_proc_id && c[cpu].cpu_core_id == c[i].cpu_core_id) { - cpu_set(i, cpu_sibling_map[cpu]); - cpu_set(cpu, cpu_sibling_map[i]); - cpu_set(i, cpu_core_map[cpu]); - cpu_set(cpu, cpu_core_map[i]); + cpu_set(i, per_cpu(cpu_sibling_map, cpu)); + cpu_set(cpu, per_cpu(cpu_sibling_map, i)); + cpu_set(i, per_cpu(cpu_core_map, cpu)); + cpu_set(cpu, per_cpu(cpu_core_map, i)); cpu_set(i, c[cpu].llc_shared_map); cpu_set(cpu, c[i].llc_shared_map); } } } else { - cpu_set(cpu, cpu_sibling_map[cpu]); + cpu_set(cpu, per_cpu(cpu_sibling_map, cpu)); } cpu_set(cpu, c[cpu].llc_shared_map); if (current_cpu_data.x86_max_cores == 1) { - cpu_core_map[cpu] = cpu_sibling_map[cpu]; + per_cpu(cpu_core_map, cpu) = per_cpu(cpu_sibling_map, cpu); c[cpu].booted_cores = 1; return; } @@ -289,17 +289,17 @@ static inline void set_cpu_sibling_map(i cpu_set(cpu, c[i].llc_shared_map); } if (c[cpu].phys_proc_id == c[i].phys_proc_id) { - cpu_set(i, cpu_core_map[cpu]); - cpu_set(cpu, cpu_core_map[i]); + cpu_set(i, per_cpu(cpu_core_map, cpu)); + cpu_set(cpu, per_cpu(cpu_core_map, i)); /* * Does this new cpu bringup a new core? */ - if (cpus_weight(cpu_sibling_map[cpu]) == 1) { + if (cpus_weight(per_cpu(cpu_sibling_map, cpu)) == 1) { /* * for each core in package, increment * the booted_cores for this new cpu */ - if (first_cpu(cpu_sibling_map[i]) == i) + if (first_cpu(per_cpu(cpu_sibling_map, i)) == i) c[cpu].booted_cores++; /* * increment the core count for all @@ -697,8 +697,8 @@ do_rest: clear_node_cpumask(cpu); /* was set by numa_add_cpu */ cpu_clear(cpu, cpu_present_map); cpu_clear(cpu, cpu_possible_map); - x86_cpu_to_apicid[cpu] = BAD_APICID; - x86_cpu_to_log_apicid[cpu] = BAD_APICID; + per_cpu(x86_cpu_to_apicid, cpu) = BAD_APICID; + per_cpu(x86_cpu_to_log_apicid, cpu) = BAD_APICID; return -EIO; } @@ -738,8 +738,8 @@ static __init void disable_smp(void) phys_cpu_present_map = physid_mask_of_physid(boot_cpu_id); else phys_cpu_present_map = physid_mask_of_physid(0); - cpu_set(0, cpu_sibling_map[0]); - cpu_set(0, cpu_core_map[0]); + cpu_set(0, per_cpu(cpu_sibling_map, 0)); + cpu_set(0, per_cpu(cpu_core_map, 0)); } #ifdef CONFIG_HOTPLUG_CPU Index: linux-2.6.22-rc6-mm1/arch/x86_64/mm/numa.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/mm/numa.c 2007-07-12 22:15:30.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/mm/numa.c 2007-07-12 22:15:52.000000000 -0700 @@ -615,7 +615,7 @@ void __init init_cpu_to_node(void) { int i; for (i = 0; i < NR_CPUS; i++) { - u8 apicid = x86_cpu_to_apicid[i]; + u8 apicid = per_cpu(x86_cpu_to_apicid, i); if (apicid == BAD_APICID) continue; if (apicid_to_node[apicid] == NUMA_NO_NODE) Index: linux-2.6.22-rc6-mm1/include/asm-x86_64/smp.h =================================================================== --- linux-2.6.22-rc6-mm1.orig/include/asm-x86_64/smp.h 2007-07-12 21:51:26.000000000 -0700 +++ linux-2.6.22-rc6-mm1/include/asm-x86_64/smp.h 2007-07-12 22:21:01.000000000 -0700 @@ -38,9 +38,9 @@ extern void unlock_ipi_call_lock(void); extern int smp_num_siblings; extern void smp_send_reschedule(int cpu); -extern cpumask_t cpu_sibling_map[NR_CPUS]; -extern cpumask_t cpu_core_map[NR_CPUS]; -extern u8 cpu_llc_id[NR_CPUS]; +DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); +DECLARE_PER_CPU(cpumask_t, cpu_core_map); +DECLARE_PER_CPU(u8, cpu_llc_id); #define SMP_TRAMPOLINE_BASE 0x6000 @@ -77,8 +77,8 @@ static inline int hard_smp_processor_id( * Some lowlevel functions might want to know about * the real APIC ID <-> CPU # mapping. */ -extern u8 x86_cpu_to_apicid[NR_CPUS]; /* physical ID */ -extern u8 x86_cpu_to_log_apicid[NR_CPUS]; +DECLARE_PER_CPU(u8, x86_cpu_to_apicid); /* physical ID */ +DECLARE_PER_CPU(u8, x86_cpu_to_log_apicid); extern u8 bios_cpu_apicid[]; static inline int cpu_present_to_apicid(int mps_cpu) @@ -109,7 +109,7 @@ static __inline int logical_smp_processo } #ifdef CONFIG_SMP -#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] +#define cpu_physical_id(cpu) per_cpu(x86_cpu_to_apicid, cpu) #else #define cpu_physical_id(cpu) boot_cpu_id #endif /* !CONFIG_SMP */ Index: linux-2.6.22-rc6-mm1/include/asm/ipi.h =================================================================== --- linux-2.6.22-rc6-mm1.orig/include/asm/ipi.h 2007-07-12 22:13:19.000000000 -0700 +++ linux-2.6.22-rc6-mm1/include/asm/ipi.h 2007-07-12 22:13:49.000000000 -0700 @@ -119,7 +119,7 @@ static inline void send_IPI_mask_sequenc */ local_irq_save(flags); for_each_cpu_mask(query_cpu, mask) { - __send_IPI_dest_field(x86_cpu_to_apicid[query_cpu], + __send_IPI_dest_field(per_cpu(x86_cpu_to_apicid, query_cpu), vector, APIC_DEST_PHYSICAL); } local_irq_restore(flags); Index: linux-2.6.22-rc6-mm1/drivers/acpi/processor_core.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/drivers/acpi/processor_core.c 2007-07-12 22:21:18.000000000 -0700 +++ linux-2.6.22-rc6-mm1/drivers/acpi/processor_core.c 2007-07-12 22:53:57.000000000 -0700 @@ -417,12 +417,6 @@ static int map_lsapic_id(struct acpi_sub return 0; } -#ifdef CONFIG_IA64 -#define arch_cpu_to_apicid ia64_cpu_to_sapicid -#else -#define arch_cpu_to_apicid x86_cpu_to_apicid -#endif - static int map_madt_entry(u32 acpi_id) { unsigned long madt_end, entry; @@ -496,7 +490,7 @@ static int get_cpu_id(acpi_handle handle return apic_id; for (i = 0; i < NR_CPUS; ++i) { - if (arch_cpu_to_apicid[i] == apic_id) + if (cpu_physical_id(i) == apic_id) return i; } return -1; Index: linux-2.6.22-rc6-mm1/include/asm-i386/smp.h =================================================================== --- linux-2.6.22-rc6-mm1.orig/include/asm-i386/smp.h 2007-07-12 22:48:17.000000000 -0700 +++ linux-2.6.22-rc6-mm1/include/asm-i386/smp.h 2007-07-12 22:50:18.000000000 -0700 @@ -30,8 +30,8 @@ extern void smp_alloc_memory(void); extern int pic_mode; extern int smp_num_siblings; -extern cpumask_t cpu_sibling_map[]; -extern cpumask_t cpu_core_map[]; +DECLARE_PER_CPU(cpumask_t, cpu_sibling_map); +DECLARE_PER_CPU(cpumask_t, cpu_core_map); extern void (*mtrr_hook) (void); extern void zap_low_mappings (void); @@ -39,7 +39,7 @@ extern void lock_ipi_call_lock(void); extern void unlock_ipi_call_lock(void); #define MAX_APICID 256 -extern u8 x86_cpu_to_apicid[]; +DECLARE_PER_CPU(u8, x86_cpu_to_apicid); #define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] Index: linux-2.6.22-rc6-mm1/include/asm-x86_64/topology.h =================================================================== --- linux-2.6.22-rc6-mm1.orig/include/asm-x86_64/topology.h 2007-07-12 22:37:48.000000000 -0700 +++ linux-2.6.22-rc6-mm1/include/asm-x86_64/topology.h 2007-07-12 22:38:33.000000000 -0700 @@ -58,8 +58,8 @@ extern int __node_distance(int, int); #ifdef CONFIG_SMP #define topology_physical_package_id(cpu) (cpu_data[cpu].phys_proc_id) #define topology_core_id(cpu) (cpu_data[cpu].cpu_core_id) -#define topology_core_siblings(cpu) (cpu_core_map[cpu]) -#define topology_thread_siblings(cpu) (cpu_sibling_map[cpu]) +#define topology_core_siblings(cpu) (per_cpu(cpu_core_map, cpu)) +#define topology_thread_siblings(cpu) (per_cpu(cpu_sibling_map, cpu)) #define mc_capable() (boot_cpu_data.x86_max_cores > 1) #define smt_capable() (smp_num_siblings > 1) #endif Index: linux-2.6.22-rc6-mm1/arch/x86_64/kernel/genapic.c =================================================================== --- linux-2.6.22-rc6-mm1.orig/arch/x86_64/kernel/genapic.c 2007-07-12 22:56:18.000000000 -0700 +++ linux-2.6.22-rc6-mm1/arch/x86_64/kernel/genapic.c 2007-07-12 22:58:45.000000000 -0700 @@ -25,11 +25,10 @@ #endif /* which logical CPU number maps to which CPU (physical APIC ID) */ -u8 x86_cpu_to_apicid[NR_CPUS] __read_mostly - = { [0 ... NR_CPUS-1] = BAD_APICID }; -EXPORT_SYMBOL(x86_cpu_to_apicid); +DEFINE_PER_CPU(u8, x86_cpu_to_apicid) = BAD_APICID; +EXPORT_PER_CPU_SYMBOL(x86_cpu_to_apicid); -u8 x86_cpu_to_log_apicid[NR_CPUS] = { [0 ... NR_CPUS-1] = BAD_APICID }; +DEFINE_PER_CPU(u8, x86_cpu_to_log_apicid) = BAD_APICID; struct genapic __read_mostly *genapic = &apic_flat;