Skip to content

Commit

Permalink
irq: call __irq_enter() before calling the tick_idle_check
Browse files Browse the repository at this point in the history
Impact: avoid spurious ksoftirqd wakeups

The tick idle check which is called from irq_enter() was run before
the call to __irq_enter() which did not set the in_interrupt() bits in
preempt_count. That way the raise of a softirq woke up softirqd for
nothing as the softirq was handled on return from interrupt.

Call __irq_enter() before calling into the tick idle check code.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
  • Loading branch information
Thomas Gleixner authored and Thomas Gleixner committed Nov 10, 2008
1 parent 5ceb1a0 commit ee5f80a
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions kernel/softirq.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,10 +269,11 @@ void irq_enter(void)
{
int cpu = smp_processor_id();

if (idle_cpu(cpu) && !in_interrupt())
if (idle_cpu(cpu) && !in_interrupt()) {
__irq_enter();
tick_check_idle(cpu);

__irq_enter();
} else
__irq_enter();
}

#ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED
Expand Down

0 comments on commit ee5f80a

Please sign in to comment.