diff -upN reference/kernel/fork.c current/kernel/fork.c --- reference/kernel/fork.c Wed Jun 16 08:19:27 2004 +++ current/kernel/fork.c Thu Jun 17 12:58:31 2004 @@ -1204,23 +1204,9 @@ long do_fork(unsigned long clone_flags, set_tsk_thread_flag(p, TIF_SIGPENDING); } - if (!(clone_flags & CLONE_STOPPED)) { - /* - * Do the wakeup last. On SMP we treat fork() and - * CLONE_VM separately, because fork() has already - * created cache footprint on this CPU (due to - * copying the pagetables), hence migration would - * probably be costy. Threads on the other hand - * have less traction to the current CPU, and if - * there's an imbalance then the scheduler can - * migrate this fresh thread now, before it - * accumulates a larger cache footprint: - */ - if (clone_flags & CLONE_VM) - wake_up_forked_thread(p); - else - wake_up_forked_process(p); - } else { + if (!(clone_flags & CLONE_STOPPED)) + wake_up_forked_process(p); /* do this last */ + else { int cpu = get_cpu(); p->state = TASK_STOPPED;