mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 07:01:32 +00:00
irq: call __irq_enter() before calling the tick_idle_check
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>
This commit is contained in:
parent
5ceb1a0418
commit
ee5f80a993
@ -269,10 +269,11 @@ void irq_enter(void)
|
|||||||
{
|
{
|
||||||
int cpu = smp_processor_id();
|
int cpu = smp_processor_id();
|
||||||
|
|
||||||
if (idle_cpu(cpu) && !in_interrupt())
|
if (idle_cpu(cpu) && !in_interrupt()) {
|
||||||
|
__irq_enter();
|
||||||
tick_check_idle(cpu);
|
tick_check_idle(cpu);
|
||||||
|
} else
|
||||||
__irq_enter();
|
__irq_enter();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED
|
#ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED
|
||||||
|
Loading…
Reference in New Issue
Block a user