diff -ur orig/arch/i386/kernel/process.c new/arch/i386/kernel/process.c --- orig/arch/i386/kernel/process.c Tue Jul 13 00:33:09 1999 +++ new/arch/i386/kernel/process.c Wed Jul 21 22:00:54 1999 @@ -111,7 +111,6 @@ /* endless idle loop with no priority at all */ current->priority = 0; current->counter = -100; - init_idle(); for (;;) { if (work) @@ -141,7 +140,6 @@ /* endless idle loop with no priority at all */ current->priority = 0; current->counter = -100; - init_idle(); while(1) { if (current_cpu_data.hlt_works_ok && !hlt_counter && diff -ur orig/arch/i386/kernel/smp.c new/arch/i386/kernel/smp.c --- orig/arch/i386/kernel/smp.c Wed Jul 21 22:07:04 1999 +++ new/arch/i386/kernel/smp.c Wed Jul 21 22:00:49 1999 @@ -884,6 +884,7 @@ * things done here to the most necessary things. */ smp_callin(); + init_idle(); while (!atomic_read(&smp_commenced)) /* nothing */ ; return cpu_idle(NULL); diff -ur orig/kernel/sched.c new/kernel/sched.c --- orig/kernel/sched.c Wed Jul 21 22:07:13 1999 +++ new/kernel/sched.c Wed Jul 21 22:09:59 1999 @@ -278,7 +278,7 @@ int this_cpu = smp_processor_id(); struct task_struct *tsk; - tsk = cpu_curr(this_cpu); + tsk = current; if (preemption_goodness(tsk, p, this_cpu) > 0) tsk->need_resched = 1; #endif