Re: [RFC PATCH] introduce sys_membarrier(): process-wide memory barrier (v5)

Steven Rostedt
2010-01-19T19:43:51Z

On Tue, 2010-01-19 at 19:37 +0100, Peter Zijlstra wrote:

> So about that [*], Oleg, kernel/signal.c:SYSCALL_DEFINE0(pause) does:
>
> SYSCALL_DEFINE0(pause)
> {
> current->state = TASK_INTERRUPTIBLE;
> schedule();
> return -ERESTARTNOHAND;
> }
>
> Isn't that ->state assignment buggy? If so, there appear to be quite a
> few such sites, which worries me.
>

That looks buggy to me. Isn't this the reason we have
set_current_state()?

Although, since it is not checking any condition, it may not be buggy.
The check inside scheduler for state != TASK_RUNNING is protected inside
the rq locks, and any other task must grab the rq lock of the task
before it can change the task's state. schedule() also checks for
signals which would force schedule() to wake it up.

But that said, I still think that should be changed to
set_current_state(TASK_INTERRUPTIBLE).

-- Steve