irqchip/gic-v4.1: Ensure mutual exclusion between vPE affinity change and RD access
authorMarc Zyngier <maz@kernel.org>
Wed, 4 Mar 2020 20:33:10 +0000 (20:33 +0000)
committerMarc Zyngier <maz@kernel.org>
Thu, 19 Mar 2020 11:21:58 +0000 (11:21 +0000)
commitf3a059219bc718ccc3bf3ff894f089b7e9a93139
tree31f4943e6b75e03a7b7e7a90890ee4f9ff8a3e84
parent28d160de5194c68ff534443d2a8b6f1d10d57c58
irqchip/gic-v4.1: Ensure mutual exclusion between vPE affinity change and RD access

Before GICv4.1, all operations would be serialized with the affinity
changes by virtue of using the same ITS command queue. With v4.1, things
change, as invalidations (and a number of other operations) are issued
using the redistributor MMIO frame.

We must thus make sure that these redistributor accesses cannot race
against aginst the affinity change, or we may end-up talking to the
wrong redistributor.

To ensure this, we expand the irq_to_cpuid() helper to take a spinlock
when the LPI is mapped to a vLPI (a new per-VPE lock) on each operation
that requires mutual exclusion.

Signed-off-by: Marc Zyngier <maz@kernel.org>
Reviewed-by: Zenghui Yu <yuzenghui@huawei.com>
Link: https://lore.kernel.org/r/20200304203330.4967-4-maz@kernel.org
drivers/irqchip/irq-gic-v3-its.c
include/linux/irqchip/arm-gic-v4.h