• Ingo Molnar's avatar
    [PATCH] acpi_processor_idle() latency fix · 8bcd4dcd
    Ingo Molnar authored
    We check need_resched() _before_ disabling preemption.  This opens up the
    following scenario:
    
     swapper:	!need_resched()
     [IRQ context]
    		wakes up a task
    		marks idle task as need-resched
    
     swapper:	acpi_processor_idle(); // sleeps until next irq
    
    instant 1msec latency introduced...
    
    normally default_idle() is safe because it re-checks need_resched with
    interrupts disabled before it truly halts the CPU.  But
    acpi_processor_idle() doesnt seem to be doing this!  Your trace clearly
    shows a missed preemption due to ACPI.  I'm wondering why no-one has
    triggered this before, it's a really bad bug that should be fixed in
    2.6.10.
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    Cc: "Brown, Len" <len.brown@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    8bcd4dcd
processor.c 65.9 KB