• Sudeep Holla's avatar
    arm64: use irq_set_affinity with force=false when migrating irqs · 3d8afe30
    Sudeep Holla authored
    The arm64 interrupt migration code on cpu offline calls
    irqchip.irq_set_affinity() with the argument force=true. Originally
    this argument had no effect because it was not used by any interrupt
    chip driver and there was no semantics defined.
    
    This changed with commit 01f8fa4f ("genirq: Allow forcing cpu
    affinity of interrupts") which made the force argument useful to route
    interrupts to not yet online cpus without checking the target cpu
    against the cpu online mask. The following commit ffde1de6
    ("irqchip: gic: Support forced affinity setting") implemented this for
    the GIC interrupt controller.
    
    As a consequence the cpu offline irq migration fails if CPU0 is
    offlined, because CPU0 is still set in the affinity mask and the
    validation against cpu online mask is skipped to the force argument
    being true. The following first_cpu(mask) selection always selects
    CPU0 as the target.
    
    Commit 601c9421("arm64: use cpu_online_mask when using forced
    irq_set_affinity") intended to fix the above mentioned issue but
    introduced another issue where affinity can be migrated to a wrong
    CPU due to unconditional copy of cpu_online_mask.
    
    As with for arm, solve the issue by calling irq_set_affinity() with
    force=false from the CPU offline irq migration code so the GIC driver
    validates the affinity mask against CPU online mask and therefore
    removes CPU0 from the possible target candidates. Also revert the
    changes done in the commit 601c9421 as it's no longer needed.
    
    Tested on Juno platform.
    
    Fixes: 601c9421("arm64: use cpu_online_mask when using forced
    	irq_set_affinity")
    Signed-off-by: default avatarSudeep Holla <sudeep.holla@arm.com>
    Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: <stable@vger.kernel.org> # 3.10.x
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    3d8afe30
irq.c 3.72 KB