Skip to content
  • Zhang Yanmin's avatar
    [PATCH] x86: kernel irq balance doesn't work · 1b61b910
    Zhang Yanmin authored
    
    
    On i386, kernel irq balance doesn't work.
    
    1) In function do_irq_balance, after kernel finds the min_loaded cpu but
       before calling set_pending_irq to really pin the selected_irq to the
       target cpu, kernel does a cpus_and with irq_affinity[selected_irq].
       Later on, when the irq is acked, kernel would calls
       move_native_irq=>desc->handler->set_affinity to change the irq affinity.
        However, every function pointed by
       hw_interrupt_type->set_affinity(unsigned int irq, cpumask_t cpumask)
       always changes irq_affinity[irq] to cpumask.  Next time when recalling
       do_irq_balance, it has to do cpu_ands again with
       irq_affinity[selected_irq], but irq_affinity[selected_irq] already
       becomes one cpu selected by the first irq balance.
    
    2) Function balance_irq in file arch/i386/kernel/io_apic.c has the same
       issue.
    
    [akpm@osdl.org: cleanups]
    Signed-off-by: default avatarZhang Yanmin <yanmin.zhang@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    1b61b910