]> git.baikalelectronics.ru Git - kernel.git/commit
arm64: use irq_set_affinity with force=false when migrating irqs
authorSudeep Holla <sudeep.holla@arm.com>
Tue, 2 Sep 2014 10:35:24 +0000 (11:35 +0100)
committerWill Deacon <will.deacon@arm.com>
Wed, 3 Sep 2014 18:24:38 +0000 (19:24 +0100)
commitd0907c3f75f3eb0def10fe46b324cc32c26e7379
tree72b4d7359ec928d4cf0f1557edb268fb22c3ed70
parent351949448a548962583336619af56c15c341a62b
arm64: use irq_set_affinity with force=false when migrating irqs

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 93bc938a7105 ("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 de70c71d6f7a
("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 6adce7f8547c("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 6adce7f8547c as it's no longer needed.

Tested on Juno platform.

Fixes: 6adce7f8547c("arm64: use cpu_online_mask when using forced
irq_set_affinity")
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Mark 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: Will Deacon <will.deacon@arm.com>
arch/arm64/kernel/irq.c