Files
linux/kernel
Venkatesh Pallipadi 19d3e3cbe9 sched: Call tick_check_idle before __irq_enter
Commit: d267f87fb8 upstream

When CPU is idle and on first interrupt, irq_enter calls tick_check_idle()
to notify interruption from idle. But, there is a problem if this call
is done after __irq_enter, as all routines in __irq_enter may find
stale time due to yet to be done tick_check_idle.

Specifically, trace calls in __irq_enter when they use global clock and also
account_system_vtime change in this patch as it wants to use sched_clock_cpu()
to do proper irq timing.

But, tick_check_idle was moved after __irq_enter intentionally to
prevent problem of unneeded ksoftirqd wakeups by the commit ee5f80a:

    irq: call __irq_enter() before calling the tick_idle_check
    Impact: avoid spurious ksoftirqd wakeups

Moving tick_check_idle() before __irq_enter and wrapping it with
local_bh_enable/disable would solve both the problems.

Fixed-by: Yong Zhang <yong.zhang0@gmail.com>
Signed-off-by: Venkatesh Pallipadi <venki@google.com>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1286237003-12406-9-git-send-email-venki@google.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Mike Galbraith <efault@gmx.de>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-02-17 15:37:27 -08:00
..
2010-08-13 13:19:50 -07:00
2009-12-18 14:03:52 -08:00
2009-06-24 00:02:38 -04:00
2011-02-17 15:37:19 -08:00
2009-09-18 09:48:52 -07:00
2008-10-16 11:21:30 -07:00
2011-02-17 15:37:19 -08:00
2009-08-29 14:10:07 +02:00
2008-07-28 14:37:38 +02:00
2009-09-19 13:13:17 -07:00
2009-05-15 07:56:24 -05:00
2011-02-17 15:37:19 -08:00
2009-07-24 10:53:29 +02:00
2010-07-05 11:10:31 -07:00
2009-01-14 18:09:02 +01:00
2009-06-18 13:03:56 -07:00
2009-10-29 08:56:20 +10:30
2008-09-02 19:21:40 -07:00
2010-05-26 14:29:18 -07:00
2009-10-07 08:11:20 +02:00
2009-09-23 07:39:41 -07:00
2008-02-06 10:41:02 -08:00
2011-02-17 15:37:19 -08:00
2009-07-12 14:03:27 -07:00
2009-09-23 18:13:10 -07:00
2011-02-17 15:37:19 -08:00
2009-06-18 13:03:55 -07:00