]> git.baikalelectronics.ru Git - kernel.git/commit
[PATCH] set_current_state() commentary
authorAndrew Morton <akpm@osdl.org>
Tue, 13 Sep 2005 08:25:14 +0000 (01:25 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 13 Sep 2005 15:22:29 +0000 (08:22 -0700)
commit81e7e4184562dc569e79cf01a3d27f89a531d107
treee155f09b6f5b752171638028e574947e275cc3d9
parent405fb9134a1c09094bfb4005a79533e6c4261d1a
[PATCH] set_current_state() commentary

Explain the mysteries of set_current_state().

Quoth Linus:

 The scheduler itself never needs the memory barrier at all.

 The barrier is needed only if the user itself ends up testing some other
 thing afterwards, ie if you have

  set_process_state(TASK_INTERRUPTIBLE);
  if (still_need_to_sleep())
  schedule();

 then the "still_need_to_sleep()" thing may test flags and wakeup events,
 and then you _may_ want to (and often do) make sure that the write of
 TASK_INTERRUPTIBLE is serialized wrt the reads of any wakeup data (since
 the wakeup may have happened on another CPU).

 So the comment is somewhat wrong. We don't really _care_ whether the state
 propagates out to other CPU's since all of our actions are purely local,
 and there is nothing we do that is conditional on any other CPU: we're
 going to sleep unconditionally, and the scheduler only cares about _our_
 state, not about somebody elses state.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
include/linux/sched.h