Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 80281
b: refs/heads/master
c: 3b41908
h: refs/heads/master
i:
  80279: c9b5398
v: v3
  • Loading branch information
travis@sgi.com authored and Ingo Molnar committed Jan 30, 2008
1 parent 26eca5a commit f028f1f
Show file tree
Hide file tree
Showing 8 changed files with 20 additions and 35 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 30964d54e94229f567a7312a0e6666f9deb6a488
refs/heads/master: 3b41908902df1dba141cd7de1a727bb03718a654
11 changes: 2 additions & 9 deletions trunk/arch/x86/kernel/genapic_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,10 @@
#include <acpi/acpi_bus.h>
#endif

/*
* which logical CPU number maps to which CPU (physical APIC ID)
*
* The following static array is used during kernel startup
* and the x86_cpu_to_apicid_ptr contains the address of the
* array during this time. Is it zeroed when the per_cpu
* data area is removed.
*/
/* which logical CPU number maps to which CPU (physical APIC ID) */
u16 x86_cpu_to_apicid_init[NR_CPUS] __initdata
= { [0 ... NR_CPUS-1] = BAD_APICID };
void *x86_cpu_to_apicid_ptr;
void *x86_cpu_to_apicid_early_ptr;
DEFINE_PER_CPU(u16, x86_cpu_to_apicid) = BAD_APICID;
EXPORT_PER_CPU_SYMBOL(x86_cpu_to_apicid);

Expand Down
11 changes: 3 additions & 8 deletions trunk/arch/x86/kernel/mpparse_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,14 +125,9 @@ static void __cpuinit MP_processor_info(struct mpc_config_processor *m)
cpu = 0;
}
bios_cpu_apicid[cpu] = m->mpc_apicid;
/*
* We get called early in the the start_kernel initialization
* process when the per_cpu data area is not yet setup, so we
* use a static array that is removed after the per_cpu data
* area is created.
*/
if (x86_cpu_to_apicid_ptr) {
u16 *x86_cpu_to_apicid = (u16 *)x86_cpu_to_apicid_ptr;
/* are we being called early in kernel startup? */
if (x86_cpu_to_apicid_early_ptr) {
u16 *x86_cpu_to_apicid = (u16 *)x86_cpu_to_apicid_early_ptr;
x86_cpu_to_apicid[cpu] = m->mpc_apicid;
} else {
per_cpu(x86_cpu_to_apicid, cpu) = m->mpc_apicid;
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/x86/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ void __init setup_arch(char **cmdline_p)

#ifdef CONFIG_SMP
/* setup to use the static apicid table during kernel startup */
x86_cpu_to_apicid_ptr = (void *)&x86_cpu_to_apicid_init;
x86_cpu_to_apicid_early_ptr = (void *)&x86_cpu_to_apicid_init;
#endif

#ifdef CONFIG_ACPI
Expand Down
9 changes: 2 additions & 7 deletions trunk/arch/x86/kernel/smpboot_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,10 @@ static cpumask_t smp_commenced_mask;
DEFINE_PER_CPU_SHARED_ALIGNED(struct cpuinfo_x86, cpu_info);
EXPORT_PER_CPU_SYMBOL(cpu_info);

/*
* The following static array is used during kernel startup
* and the x86_cpu_to_apicid_ptr contains the address of the
* array during this time. Is it zeroed when the per_cpu
* data area is removed.
*/
/* which logical CPU number maps to which CPU (physical APIC ID) */
u8 x86_cpu_to_apicid_init[NR_CPUS] __initdata =
{ [0 ... NR_CPUS-1] = BAD_APICID };
void *x86_cpu_to_apicid_ptr;
void *x86_cpu_to_apicid_early_ptr;
DEFINE_PER_CPU(u8, x86_cpu_to_apicid) = BAD_APICID;
EXPORT_PER_CPU_SYMBOL(x86_cpu_to_apicid);

Expand Down
16 changes: 9 additions & 7 deletions trunk/arch/x86/kernel/smpboot_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -852,23 +852,25 @@ static int __init smp_sanity_check(unsigned max_cpus)
}

/*
* Copy apicid's found by MP_processor_info from initial array to the per cpu
* data area. The x86_cpu_to_apicid_init array is then expendable and the
* x86_cpu_to_apicid_ptr is zeroed indicating that the static array is no
* longer available.
* Copy data used in early init routines from the initial arrays to the
* per cpu data areas. These arrays then become expendable and the
* *_ptrs are zeroed indicating that the static arrays are gone.
*/
void __init smp_set_apicids(void)
{
int cpu;

for_each_cpu_mask(cpu, cpu_possible_map) {
for_each_possible_cpu(cpu) {
if (per_cpu_offset(cpu))
per_cpu(x86_cpu_to_apicid, cpu) =
x86_cpu_to_apicid_init[cpu];
else
printk(KERN_NOTICE "per_cpu_offset zero for cpu %d\n",
cpu);
}

/* indicate the static array will be going away soon */
x86_cpu_to_apicid_ptr = NULL;
/* indicate the early static arrays are gone */
x86_cpu_to_apicid_early_ptr = NULL;
}

static void __init smp_cpu_index_default(void)
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-x86/smp_32.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ extern void (*mtrr_hook) (void);
extern void zap_low_mappings (void);

extern u8 __initdata x86_cpu_to_apicid_init[];
extern void *x86_cpu_to_apicid_ptr;
extern void *x86_cpu_to_apicid_early_ptr;

DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
DECLARE_PER_CPU(cpumask_t, cpu_core_map);
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/asm-x86/smp_64.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ extern int smp_call_function_mask(cpumask_t mask, void (*func)(void *),
void *info, int wait);

extern u16 __initdata x86_cpu_to_apicid_init[];
extern void *x86_cpu_to_apicid_ptr;
extern void *x86_cpu_to_apicid_early_ptr;
extern u16 bios_cpu_apicid[];

DECLARE_PER_CPU(cpumask_t, cpu_sibling_map);
Expand Down

0 comments on commit f028f1f

Please sign in to comment.