Skip to content

Commit

Permalink
[PATCH] x86_64: cleanup allocating logical cpu numbers in x86_64
Browse files Browse the repository at this point in the history
Minor cleanup to lend better for physical CPU hotplug.
Earlier way of using num_processors as index doesnt
fit if CPUs come and go. This makes the code little bit better
to read, and helps physical hotplug use the same functions as boot.

Reserving CPU0 for BSP is too late to be done in smp_prepare_boot_cpu().
Since logical assignments from MADT is already done via
setup_arch()->acpi_boot_init()->parse lapic

Signed-off-by: Ashok Raj <ashok.raj@intel.com>
Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Ashok Raj authored and Linus Torvalds committed Mar 25, 2006
1 parent 45948d7 commit 51f62e1
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
19 changes: 8 additions & 11 deletions arch/x86_64/kernel/mpparse.c
Original file line number Diff line number Diff line change
Expand Up @@ -106,11 +106,11 @@ static int __init mpf_checksum(unsigned char *mp, int len)
return sum & 0xFF;
}

static void __init MP_processor_info (struct mpc_config_processor *m)
static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
{
int cpu;
unsigned char ver;
static int found_bsp=0;
cpumask_t tmp_map;

if (!(m->mpc_cpuflag & CPU_ENABLED)) {
disabled_cpus++;
Expand All @@ -133,8 +133,10 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
return;
}

cpu = num_processors++;

num_processors++;
cpus_complement(tmp_map, cpu_present_map);
cpu = first_cpu(tmp_map);

#if MAX_APICS < 255
if ((int)m->mpc_apicid > MAX_APICS) {
printk(KERN_ERR "Processor #%d INVALID. (Max ID: %d).\n",
Expand All @@ -160,12 +162,7 @@ static void __init MP_processor_info (struct mpc_config_processor *m)
* 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
cpu = num_processors - found_bsp;
}
bios_cpu_apicid[cpu] = m->mpc_apicid;
x86_cpu_to_apicid[cpu] = m->mpc_apicid;

Expand Down Expand Up @@ -691,7 +688,7 @@ void __init mp_register_lapic_address (
}


void __init mp_register_lapic (
void __cpuinit mp_register_lapic (
u8 id,
u8 enabled)
{
Expand Down
6 changes: 6 additions & 0 deletions arch/x86_64/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -708,6 +708,12 @@ void __init setup_arch(char **cmdline_p)

check_ioapic();

/*
* set this early, so we dont allocate cpu0
* if MADT list doesnt list BSP first
* mpparse.c/MP_processor_info() allocates logical cpu numbers.
*/
cpu_set(0, cpu_present_map);
#ifdef CONFIG_ACPI
/*
* Read APIC and some other early information from ACPI tables.
Expand Down

0 comments on commit 51f62e1

Please sign in to comment.