Commit c608aedd authored by James Bottomley's avatar James Bottomley Committed by Linus Torvalds

[PATCH] fix 4k irqstacks on x86 (and add voyager support)

There's a bug in the x86 code in that it sets the boot CPU to zero.

This isn't correct since some subarch's use physically indexed CPUs. 
However, subarchs have either set the boot cpu before irq_INIT() (or
just inherited the default zero from INIT_THREAD_INFO()), so it's safe
to believe current_thread_info()->cpu about the boot cpu.
parent 39d6ca01
...@@ -445,6 +445,5 @@ void __init init_IRQ(void) ...@@ -445,6 +445,5 @@ void __init init_IRQ(void)
if (boot_cpu_data.hard_math && !cpu_has_fpu) if (boot_cpu_data.hard_math && !cpu_has_fpu)
setup_irq(FPU_IRQ, &fpu_irq); setup_irq(FPU_IRQ, &fpu_irq);
current_thread_info()->cpu = 0; irq_ctx_init(current_thread_info()->cpu);
irq_ctx_init(0);
} }
...@@ -599,12 +599,10 @@ do_boot_cpu(__u8 cpu) ...@@ -599,12 +599,10 @@ do_boot_cpu(__u8 cpu)
idle->thread.eip = (unsigned long) start_secondary; idle->thread.eip = (unsigned long) start_secondary;
unhash_process(idle); unhash_process(idle);
/* init_tasks (in sched.c) is indexed logically */ /* init_tasks (in sched.c) is indexed logically */
#if 0 stack_start.esp = (void *) idle->thread.esp;
// for AC kernels
stack_start.esp = (THREAD_SIZE + (__u8 *)TSK_TO_KSTACK(idle)); irq_ctx_init(cpu);
#else
stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle->thread_info);
#endif
/* Note: Don't modify initial ss override */ /* Note: Don't modify initial ss override */
VDEBUG(("VOYAGER SMP: Booting CPU%d at 0x%lx[%x:%x], stack %p\n", cpu, VDEBUG(("VOYAGER SMP: Booting CPU%d at 0x%lx[%x:%x], stack %p\n", cpu,
(unsigned long)hijack_source.val, hijack_source.idt.Segment, (unsigned long)hijack_source.val, hijack_source.idt.Segment,
......
...@@ -135,7 +135,7 @@ thread(void *unused) ...@@ -135,7 +135,7 @@ thread(void *unused)
init_timer(&wakeup_timer); init_timer(&wakeup_timer);
sigfillset(&current->blocked); sigfillset(&current->blocked);
current->tty = NULL; /* get rid of controlling tty */ current->signal->tty = NULL;
printk(KERN_NOTICE "Voyager starting monitor thread\n"); printk(KERN_NOTICE "Voyager starting monitor thread\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment