• Thomas Gleixner's avatar
    genirq/matrix: Deal with the sillyness of for_each_cpu() on UP · 784a0830
    Thomas Gleixner authored
    Most of the CPU mask operations behave the same way, but for_each_cpu() and
    it's variants ignore the cpumask argument and claim that CPU0 is always in
    the mask. This is historical, inconsistent and annoying behaviour.
    
    The matrix allocator uses for_each_cpu() and can be called on UP with an
    empty cpumask. The calling code does not expect that this succeeds but
    until commit e027ffff ("x86/irq: Unbreak interrupt affinity setting")
    this went unnoticed. That commit added a WARN_ON() to catch cases which
    move an interrupt from one vector to another on the same CPU. The warning
    triggers on UP.
    
    Add a check for the cpumask being empty to prevent this.
    
    Fixes: 2f75d9e1 ("genirq: Implement bitmap matrix allocator")
    Reported-by: default avatarkernel test robot <rong.a.chen@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    784a0830
matrix.c 13.2 KB