Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 5373
b: refs/heads/master
c: 61b1b2d
h: refs/heads/master
i:
  5371: 6e2405d
v: v3
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Jul 29, 2005
1 parent 892fc13 commit d3841c4
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 38 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: 5b943fbfaf0dbdd3cd9ff2dda100f0b8c47a7d8c
refs/heads/master: 61b1b2d0239da82c0bed8adaa1d070c6551d4afd
17 changes: 11 additions & 6 deletions trunk/arch/x86_64/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ static int __init mpf_checksum(unsigned char *mp, int len)

static void __init MP_processor_info (struct mpc_config_processor *m)
{
int ver;
int ver, cpu;
static int found_bsp=0;

if (!(m->mpc_cpuflag & CPU_ENABLED))
Expand All @@ -131,7 +131,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
return;
}

num_processors++;
cpu = num_processors++;

if (m->mpc_apicid > MAX_APICS) {
printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n",
Expand All @@ -155,13 +155,18 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
* in same order as logical cpu numbers. Hence the first
* entry is BSP, and so on.
*/
cpu = 0;

bios_cpu_apicid[0] = m->mpc_apicid;
x86_cpu_to_apicid[0] = m->mpc_apicid;
found_bsp = 1;
} else {
bios_cpu_apicid[num_processors - found_bsp] = m->mpc_apicid;
x86_cpu_to_apicid[num_processors - found_bsp] = m->mpc_apicid;
}
} else
cpu = num_processors - found_bsp;
bios_cpu_apicid[cpu] = m->mpc_apicid;
x86_cpu_to_apicid[cpu] = m->mpc_apicid;

cpu_set(cpu, cpu_possible_map);
cpu_set(cpu, cpu_present_map);
}

static void __init MP_bus_info (struct mpc_config_bus *m)
Expand Down
55 changes: 24 additions & 31 deletions trunk/arch/x86_64/kernel/smpboot.c
Original file line number Diff line number Diff line change
Expand Up @@ -112,24 +112,6 @@ struct task_struct *idle_thread_array[NR_CPUS] __cpuinitdata ;
#define get_idle_for_cpu(x) (idle_thread_array[(x)])
#define set_idle_for_cpu(x,p) (idle_thread_array[(x)] = (p))

/*
* cpu_possible_map should be static, it cannot change as cpu's
* are onlined, or offlined. The reason is per-cpu data-structures
* are allocated by some modules at init time, and dont expect to
* do this dynamically on cpu arrival/departure.
* cpu_present_map on the other hand can change dynamically.
* In case when cpu_hotplug is not compiled, then we resort to current
* behaviour, which is cpu_possible == cpu_present.
* If cpu-hotplug is supported, then we need to preallocate for all
* those NR_CPUS, hence cpu_possible_map represents entire NR_CPUS range.
* - Ashok Raj
*/
#ifdef CONFIG_HOTPLUG_CPU
#define fixup_cpu_possible_map(x) cpu_set((x), cpu_possible_map)
#else
#define fixup_cpu_possible_map(x)
#endif

/*
* Currently trivial. Write the real->protected mode
* bootstrap into the page concerned. The caller
Expand Down Expand Up @@ -924,6 +906,27 @@ static __init void enforce_max_cpus(unsigned max_cpus)
}
}

#ifdef CONFIG_HOTPLUG_CPU
/*
* cpu_possible_map should be static, it cannot change as cpu's
* are onlined, or offlined. The reason is per-cpu data-structures
* are allocated by some modules at init time, and dont expect to
* do this dynamically on cpu arrival/departure.
* cpu_present_map on the other hand can change dynamically.
* In case when cpu_hotplug is not compiled, then we resort to current
* behaviour, which is cpu_possible == cpu_present.
* If cpu-hotplug is supported, then we need to preallocate for all
* those NR_CPUS, hence cpu_possible_map represents entire NR_CPUS range.
* - Ashok Raj
*/
static void prefill_possible_map(void)
{
int i;
for (i = 0; i < NR_CPUS; i++)
cpu_set(i, cpu_possible_map);
}
#endif

/*
* Various sanity checks.
*/
Expand Down Expand Up @@ -987,25 +990,15 @@ static int __init smp_sanity_check(unsigned max_cpus)
*/
void __init smp_prepare_cpus(unsigned int max_cpus)
{
int i;

nmi_watchdog_default();
current_cpu_data = boot_cpu_data;
current_thread_info()->cpu = 0; /* needed? */

enforce_max_cpus(max_cpus);

/*
* Fill in cpu_present_mask
*/
for (i = 0; i < NR_CPUS; i++) {
int apicid = cpu_present_to_apicid(i);
if (physid_isset(apicid, phys_cpu_present_map)) {
cpu_set(i, cpu_present_map);
cpu_set(i, cpu_possible_map);
}
fixup_cpu_possible_map(i);
}
#ifdef CONFIG_HOTPLUG_CPU
prefill_possible_map();
#endif

if (smp_sanity_check(max_cpus) < 0) {
printk(KERN_INFO "SMP disabled\n");
Expand Down

0 comments on commit d3841c4

Please sign in to comment.