diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2008-10-17 07:59:47 (GMT) |
---|---|---|
committer | Thomas Gleixner <tglx@apollo.(none)> | 2008-10-17 16:13:38 (GMT) |
commit | 719254faa17ffedc87ba0fadb9b34e535c9758d5 (patch) | |
tree | 6afe1e9f2175aa5394cf6e0fc7c84afef0be3e9b /kernel | |
parent | 2e532d68a2b3e2aa6b19731501222069735c741c (diff) | |
download | linux-719254faa17ffedc87ba0fadb9b34e535c9758d5.tar.xz |
NOHZ: unify the nohz function calls in irq_enter()
We have two separate nohz function calls in irq_enter() for no good
reason. Just call a single NOHZ function from irq_enter() and call
the bits in the tick code.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/softirq.c | 10 | ||||
-rw-r--r-- | kernel/time/tick-sched.c | 13 |
2 files changed, 15 insertions, 8 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index 37d67aa..d410014 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -265,16 +265,12 @@ asmlinkage void do_softirq(void) */ void irq_enter(void) { -#ifdef CONFIG_NO_HZ int cpu = smp_processor_id(); + if (idle_cpu(cpu) && !in_interrupt()) - tick_nohz_stop_idle(cpu); -#endif + tick_check_idle(cpu); + __irq_enter(); -#ifdef CONFIG_NO_HZ - if (idle_cpu(cpu)) - tick_nohz_update_jiffies(); -#endif } #ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index b711ffc..fdcf3f9 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -155,7 +155,7 @@ void tick_nohz_update_jiffies(void) touch_softlockup_watchdog(); } -void tick_nohz_stop_idle(int cpu) +static void tick_nohz_stop_idle(int cpu) { struct tick_sched *ts = &per_cpu(tick_cpu_sched, cpu); @@ -559,6 +559,17 @@ static inline void tick_nohz_switch_to_nohz(void) { } #endif /* NO_HZ */ /* + * Called from irq_enter to notify about the possible interruption of idle() + */ +void tick_check_idle(int cpu) +{ +#ifdef CONFIG_NO_HZ + tick_nohz_stop_idle(cpu); + tick_nohz_update_jiffies(); +#endif +} + +/* * High resolution timer specific code */ #ifdef CONFIG_HIGH_RES_TIMERS |