From: Natalie Protasevich The patch allows physical bring-up of new processors (not initially present in the configuration) from facilities such as driver/utility implemented on a platform. The actual method of making processors available is up to the platform implementation. Signed-off-by: Natalie Protasevich Cc: Shaohua Li Cc: Ashok Raj Cc: Zwane Mwaikambo Signed-off-by: Andrew Morton --- arch/i386/kernel/irq.c | 8 ++++---- arch/i386/kernel/mpparse.c | 6 +++--- arch/i386/kernel/smpboot.c | 4 ++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff -puN arch/i386/kernel/irq.c~x86-hot-plug-cpu-to-support-physical-add-of-new-processors arch/i386/kernel/irq.c --- devel/arch/i386/kernel/irq.c~x86-hot-plug-cpu-to-support-physical-add-of-new-processors 2005-10-11 00:34:42.000000000 -0700 +++ devel-akpm/arch/i386/kernel/irq.c 2005-10-11 00:34:42.000000000 -0700 @@ -218,7 +218,7 @@ int show_interrupts(struct seq_file *p, if (i == 0) { seq_printf(p, " "); - for_each_cpu(j) + for_each_online_cpu(j) seq_printf(p, "CPU%d ",j); seq_putc(p, '\n'); } @@ -232,7 +232,7 @@ int show_interrupts(struct seq_file *p, #ifndef CONFIG_SMP seq_printf(p, "%10u ", kstat_irqs(i)); #else - for_each_cpu(j) + for_each_online_cpu(j) seq_printf(p, "%10u ", kstat_cpu(j).irqs[i]); #endif seq_printf(p, " %14s", irq_desc[i].handler->typename); @@ -246,12 +246,12 @@ skip: spin_unlock_irqrestore(&irq_desc[i].lock, flags); } else if (i == NR_IRQS) { seq_printf(p, "NMI: "); - for_each_cpu(j) + for_each_online_cpu(j) seq_printf(p, "%10u ", nmi_count(j)); seq_putc(p, '\n'); #ifdef CONFIG_X86_LOCAL_APIC seq_printf(p, "LOC: "); - for_each_cpu(j) + for_each_online_cpu(j) seq_printf(p, "%10u ", per_cpu(irq_stat,j).apic_timer_irqs); seq_putc(p, '\n'); diff -puN arch/i386/kernel/mpparse.c~x86-hot-plug-cpu-to-support-physical-add-of-new-processors arch/i386/kernel/mpparse.c --- devel/arch/i386/kernel/mpparse.c~x86-hot-plug-cpu-to-support-physical-add-of-new-processors 2005-10-11 00:34:42.000000000 -0700 +++ devel-akpm/arch/i386/kernel/mpparse.c 2005-10-11 00:34:42.000000000 -0700 @@ -69,7 +69,7 @@ unsigned int def_to_bigsmp = 0; /* Processor that is doing the boot up */ unsigned int boot_cpu_physical_apicid = -1U; /* Internal processor count */ -static unsigned int __initdata num_processors; +static unsigned int __devinitdata num_processors; /* Bitmask of physically existing CPUs */ physid_mask_t phys_cpu_present_map; @@ -119,7 +119,7 @@ static int MP_valid_apicid(int apicid, i } #endif -static void __init MP_processor_info (struct mpc_config_processor *m) +static void __devinit MP_processor_info (struct mpc_config_processor *m) { int ver, apicid; physid_mask_t phys_cpu; @@ -834,7 +834,7 @@ void __init mp_register_lapic_address ( } -void __init mp_register_lapic ( +void __devinit mp_register_lapic ( u8 id, u8 enabled) { diff -puN arch/i386/kernel/smpboot.c~x86-hot-plug-cpu-to-support-physical-add-of-new-processors arch/i386/kernel/smpboot.c --- devel/arch/i386/kernel/smpboot.c~x86-hot-plug-cpu-to-support-physical-add-of-new-processors 2005-10-11 00:34:42.000000000 -0700 +++ devel-akpm/arch/i386/kernel/smpboot.c 2005-10-11 00:34:42.000000000 -0700 @@ -87,7 +87,11 @@ EXPORT_SYMBOL(cpu_online_map); cpumask_t cpu_callin_map; cpumask_t cpu_callout_map; EXPORT_SYMBOL(cpu_callout_map); +#ifdef CONFIG_HOTPLUG_CPU +cpumask_t cpu_possible_map = CPU_MASK_ALL; +#else cpumask_t cpu_possible_map; +#endif EXPORT_SYMBOL(cpu_possible_map); static cpumask_t smp_commenced_mask; _