summaryrefslogtreecommitdiffstats
path: root/kernel/irq/irqdomain.c
diff options
context:
space:
mode:
authorPaul Burton <paul.burton@imgtec.com>2017-09-21 23:24:40 -0700
committerThomas Gleixner <tglx@linutronix.de>2017-09-25 21:23:44 +0200
commitd9f82930a5b41f28fadb1e4838b877ae528456d3 (patch)
tree1225da7010ce0e34ad09bba08ea28a2bbf045ea0 /kernel/irq/irqdomain.c
parenta08588ea486a5590b50c36f437dc86350271b250 (diff)
downloadblackbird-op-linux-d9f82930a5b41f28fadb1e4838b877ae528456d3.tar.gz
blackbird-op-linux-d9f82930a5b41f28fadb1e4838b877ae528456d3.zip
irqchip/mips-gic: Use effective affinity to unmask
Commit 7778c4b27cbe ("irqchip: mips-gic: Use pcpu_masks to avoid reading GIC_SH_MASK*") adjusted the way we handle masking interrupts to set & clear the interrupt's bit in each pcpu_mask. This allows us to avoid needing to read the GIC mask registers and perform a bitwise and of their values with the pending & pcpu_masks. Unfortunately this didn't quite work for IPIs, which were mapped to a particular CPU/VP during initialisation but never set the affinity or effective_affinity fields of their struct irq_desc. This led to them losing their affinity when gic_unmask_irq() was called for them, and they'd all become affine to cpu0. Fix this by: 1) Setting the effective affinity of interrupts in gic_shared_irq_domain_map(), which is where we actually map an interrupt to a CPU/VP. This ensures that the effective affinity mask is always valid, not just after explicitly setting affinity. 2) Using an interrupt's effective affinity when unmasking it, which prevents gic_unmask_irq() from unintentionally changing which pcpu_mask includes an interrupt. Fixes: 7778c4b27cbe ("irqchip: mips-gic: Use pcpu_masks to avoid reading GIC_SH_MASK*") Signed-off-by: Paul Burton <paul.burton@imgtec.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: Jason Cooper <jason@lakedaemon.net> Link: https://lkml.kernel.org/r/20170922062440.23701-3-paul.burton@imgtec.com
Diffstat (limited to 'kernel/irq/irqdomain.c')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud