The patch titled voyager: pda fixes has been removed from the -mm tree. Its filename was voyager-pda-fixes.patch This patch was dropped because it is obsolete ------------------------------------------------------ Subject: voyager: pda fixes From: James Bottomley <James.Bottomley@xxxxxxxxxxxx> OK, I found the problem on voyager. It's the way the CPU gets the start pda, which it has to have at start of day because CPU number is in it. I've attached the fix for voyager with the current code. However, I have to say that the current GDT pivot is really nasty. It's horrible to have three separate GDTs: the boot one, the CPU one and then the per-cpu one and to pivot twice. I really think we could avoid changing the PDA for the cpu GDT at all and simply pivot the GDT once in initialize_secondary(). Unless there's a reason not to do this, I'll look into simplifying all this PDA code along those lines. Cc: Andi Kleen <ak@xxxxxxx> Cc: Jeremy Fitzhardinge <jeremy@xxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxx> --- arch/i386/kernel/cpu/common.c | 7 +++++++ arch/i386/mach-voyager/voyager_smp.c | 12 +++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff -puN arch/i386/kernel/cpu/common.c~voyager-pda-fixes arch/i386/kernel/cpu/common.c --- a/arch/i386/kernel/cpu/common.c~voyager-pda-fixes +++ a/arch/i386/kernel/cpu/common.c @@ -780,6 +780,9 @@ void __cpuinit secondary_cpu_init(void) int cpu = smp_processor_id(); struct task_struct *curr = current; + printk("ABOUT TO CALL _CPU_INIT in SECONDARY CPU INIT, CPU%d\n", + cpu); + _cpu_init(cpu, curr); } @@ -794,6 +797,8 @@ void __cpuinit cpu_init(void) int cpu = smp_processor_id(); struct task_struct *curr = current; + printk("PRIMARY CPU ABOUT to INIT to CPU %d\n", cpu); + /* Set up the real GDT and PDA, so we can transition from the boot versions. */ if (!init_gdt(cpu, curr)) { @@ -803,6 +808,8 @@ void __cpuinit cpu_init(void) } _cpu_init(cpu, curr); + + printk("GDT SWITCHED, CPU IS NOW %d\n", smp_processor_id()); } #ifdef CONFIG_HOTPLUG_CPU diff -puN arch/i386/mach-voyager/voyager_smp.c~voyager-pda-fixes arch/i386/mach-voyager/voyager_smp.c --- a/arch/i386/mach-voyager/voyager_smp.c~voyager-pda-fixes +++ a/arch/i386/mach-voyager/voyager_smp.c @@ -421,9 +421,6 @@ find_smp_config(void) /* Finally tell the firmware that we're driving */ outb(inb(VOYAGER_SUS_IN_CONTROL_PORT) | VOYAGER_IN_CONTROL_FLAG, VOYAGER_SUS_IN_CONTROL_PORT); - - current_thread_info()->cpu = boot_cpu_id; - write_pda(cpu_number, boot_cpu_id); } /* @@ -530,6 +527,8 @@ static void __init do_boot_cpu(__u8 cpu) { struct task_struct *idle; + extern struct i386_pda *start_pda; + int timeout; unsigned long flags; int quad_boot = (1<<cpu) & voyager_quad_processors @@ -589,6 +588,7 @@ do_boot_cpu(__u8 cpu) return; } + start_pda = cpu_pda(cpu); irq_ctx_init(cpu); /* Note: Don't modify initial ss override */ @@ -1973,6 +1973,8 @@ smp_cpus_done(unsigned int max_cpus) void __init smp_setup_processor_id(void) { - current_thread_info()->cpu = hard_smp_processor_id(); - write_pda(cpu_number, hard_smp_processor_id()); + u8 cpu = hard_smp_processor_id(); + + current_thread_info()->cpu = cpu; + write_pda(cpu_number, cpu); } _ Patches currently in -mm which might be from James.Bottomley@xxxxxxxxxxxx are origin.patch git-scsi-misc.patch git-scsi-target.patch git-sas.patch voyager-pda-fixes.patch - To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html