Messages in this thread | | | Subject | Re: [RFC PATCH] introduce sys_membarrier(): process-wide memory barrier (v5) | From | Steven Rostedt <> | Date | Tue, 19 Jan 2010 14:43:44 -0500 |
| |
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
| |