Spotted by Andrea: we need the barriers in there to prevent reads passing ahead of the setting of current->state. --- 25-akpm/kernel/softirq.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff -puN kernel/softirq.c~ksoftirqd-barrier kernel/softirq.c --- 25/kernel/softirq.c~ksoftirqd-barrier Mon Mar 29 15:32:29 2004 +++ 25-akpm/kernel/softirq.c Mon Mar 29 16:27:56 2004 @@ -342,7 +342,7 @@ static int ksoftirqd(void * __bind_cpu) cond_resched(); } - __set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_INTERRUPTIBLE); } __set_current_state(TASK_RUNNING); return 0; @@ -350,10 +350,10 @@ static int ksoftirqd(void * __bind_cpu) wait_to_die: preempt_enable(); /* Wait for kthread_stop */ - __set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_INTERRUPTIBLE); while (!kthread_should_stop()) { schedule(); - __set_current_state(TASK_INTERRUPTIBLE); + set_current_state(TASK_INTERRUPTIBLE); } __set_current_state(TASK_RUNNING); return 0; _