diff -urN wt13-preempt/drivers/ieee1394/csr.c wt13-preempt-fix/drivers/ieee1394/csr.c --- wt13-preempt/drivers/ieee1394/csr.c Wed Apr 23 10:52:22 2003 +++ wt13-preempt-fix/drivers/ieee1394/csr.c Wed Apr 23 10:54:38 2003 @@ -19,6 +19,7 @@ #include #include /* needed for MODULE_PARM */ +#include #include "ieee1394_types.h" #include "hosts.h" diff -urN wt13-preempt/include/linux/sched.h wt13-preempt-fix/include/linux/sched.h --- wt13-preempt/include/linux/sched.h Wed Apr 23 10:52:22 2003 +++ wt13-preempt-fix/include/linux/sched.h Wed Apr 23 10:54:38 2003 @@ -352,6 +352,7 @@ struct task_struct *next_task, *prev_task; struct mm_struct *active_mm; struct local_page local_page; + unsigned long flags; /* task state */ struct linux_binfmt *binfmt; diff -urN wt13-preempt/kernel/sched.c wt13-preempt-fix/kernel/sched.c --- wt13-preempt/kernel/sched.c Wed Apr 23 10:52:22 2003 +++ wt13-preempt-fix/kernel/sched.c Wed Apr 23 10:53:52 2003 @@ -1400,6 +1400,13 @@ sched_data->curr = current; sched_data->last_schedule = get_cycles(); clear_bit(task_cpu(current), &wait_init_idle); +#ifdef CONFIG_PREEMPT + /* + * fix up the preempt_count for non-CPU0 idle threads + */ + if (current->processor) + current->preempt_count = 0; +#endif } extern void init_timervecs (void);