Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7c1632ba authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'timers-fixes-for-linus' of...

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
parents a888f96a 9bcbdd9c
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -244,6 +244,7 @@ unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
				__func__, smp_processor_id(), vector, irq);
				__func__, smp_processor_id(), vector, irq);
	}
	}


	run_local_timers();
	irq_exit();
	irq_exit();


	set_irq_regs(old_regs);
	set_irq_regs(old_regs);
@@ -268,6 +269,7 @@ void smp_generic_interrupt(struct pt_regs *regs)
	if (generic_interrupt_extension)
	if (generic_interrupt_extension)
		generic_interrupt_extension();
		generic_interrupt_extension();


	run_local_timers();
	irq_exit();
	irq_exit();


	set_irq_regs(old_regs);
	set_irq_regs(old_regs);
+1 −0
Original line number Original line Diff line number Diff line
@@ -198,6 +198,7 @@ void smp_reschedule_interrupt(struct pt_regs *regs)
{
{
	ack_APIC_irq();
	ack_APIC_irq();
	inc_irq_stat(irq_resched_count);
	inc_irq_stat(irq_resched_count);
	run_local_timers();
	/*
	/*
	 * KVM uses this interrupt to force a cpu out of guest mode
	 * KVM uses this interrupt to force a cpu out of guest mode
	 */
	 */
+7 −2
Original line number Original line Diff line number Diff line
@@ -231,6 +231,13 @@ void tick_nohz_stop_sched_tick(int inidle)
	if (!inidle && !ts->inidle)
	if (!inidle && !ts->inidle)
		goto end;
		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);
	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))
	if (unlikely(ts->nohz_mode == NOHZ_MODE_INACTIVE))
		goto end;
		goto end;


	ts->inidle = 1;

	if (need_resched())
	if (need_resched())
		goto end;
		goto end;