Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: x86, timers: Check for pending timers after (device) interrupts NOHZ: update idle state also when NOHZ is inactive
This commit is contained in:
commit
7c1632ba76
|
@ -244,6 +244,7 @@ unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
|
|||
__func__, smp_processor_id(), vector, irq);
|
||||
}
|
||||
|
||||
run_local_timers();
|
||||
irq_exit();
|
||||
|
||||
set_irq_regs(old_regs);
|
||||
|
@ -268,6 +269,7 @@ void smp_generic_interrupt(struct pt_regs *regs)
|
|||
if (generic_interrupt_extension)
|
||||
generic_interrupt_extension();
|
||||
|
||||
run_local_timers();
|
||||
irq_exit();
|
||||
|
||||
set_irq_regs(old_regs);
|
||||
|
|
|
@ -198,6 +198,7 @@ void smp_reschedule_interrupt(struct pt_regs *regs)
|
|||
{
|
||||
ack_APIC_irq();
|
||||
inc_irq_stat(irq_resched_count);
|
||||
run_local_timers();
|
||||
/*
|
||||
* KVM uses this interrupt to force a cpu out of guest mode
|
||||
*/
|
||||
|
|
|
@ -231,6 +231,13 @@ void tick_nohz_stop_sched_tick(int inidle)
|
|||
if (!inidle && !ts->inidle)
|
||||
goto end;
|
||||
|
||||
/*
|
||||
* Set ts->inidle unconditionally. Even if the system did not
|
||||
* switch to NOHZ mode the cpu frequency governers rely on the
|
||||
* update of the idle time accounting in tick_nohz_start_idle().
|
||||
*/
|
||||
ts->inidle = 1;
|
||||
|
||||
now = tick_nohz_start_idle(ts);
|
||||
|
||||
/*
|
||||
|
@ -248,8 +255,6 @@ void tick_nohz_stop_sched_tick(int inidle)
|
|||
if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE))
|
||||
goto end;
|
||||
|
||||
ts->inidle = 1;
|
||||
|
||||
if (need_resched())
|
||||
goto end;
|
||||
|
||||
|
|
Loading…
Reference in a new issue