highres/dyntick: prevent xtime lock contention
authorThomas Gleixner <tglx@linutronix.de>
Tue, 8 May 2007 07:30:03 +0000 (00:30 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 8 May 2007 18:15:10 +0000 (11:15 -0700)
commitd3ed782458f315c30ea679b919a2cc59f2b82565
treeb87fffc87acf5632566a6384f5c8be8f5c2e03b2
parentd5d3b736e3264934ec832a657a9a434b65f3d51f
highres/dyntick: prevent xtime lock contention

While the !highres/!dyntick code assigns the duty of the do_timer() call to
one specific CPU, this was dropped in the highres/dyntick part during
development.

Steven Rostedt discovered the xtime lock contention on highres/dyntick due
to several CPUs trying to update jiffies.

Add the single CPU assignement back.  In the dyntick case this needs to be
handled carefully, as the CPU which has the do_timer() duty must drop the
assignement and let it be grabbed by another CPU, which is active.
Otherwise the do_timer() calls would not happen during the long sleep.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Ingo Molnar <mingo@elte.hu>
Cc: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Mark Lord <mlord@pobox.com>
Cc: <stable@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
kernel/time/tick-common.c
kernel/time/tick-internal.h
kernel/time/tick-sched.c