aboutsummaryrefslogtreecommitdiff
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2020-08-03 14:21:52 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2020-08-03 14:21:52 -0700
commit3b4b84b2ea9938e44fffa356c7b95f496b4246ab (patch)
treeed0478e667174bf7f1e9cf07cc601d1d68852eb0 /kernel/irq/manage.c
parent145ff1ec090dce9beb5a9590b5dc288e7bb2e65d (diff)
parentaa251fc5b936d3ddb4b4c4b36427eb9aa3347c82 (diff)
downloadlinux-3b4b84b2ea9938e44fffa356c7b95f496b4246ab.tar.gz
linux-3b4b84b2ea9938e44fffa356c7b95f496b4246ab.tar.bz2
linux-3b4b84b2ea9938e44fffa356c7b95f496b4246ab.zip
Merge tag 'irq-urgent-2020-08-02' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Ingo Molnar: "Fix a recent IRQ affinities regression, add in a missing debugfs printout that helps the debugging of IRQ affinity logic bugs, and fix a memory leak" * tag 'irq-urgent-2020-08-02' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq/debugfs: Add missing irqchip flags genirq/affinity: Make affinity setting if activated opt-in irqdomain/treewide: Free firmware node after domain removal
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 2a9fec53e159..48c38e09c673 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -320,12 +320,16 @@ static bool irq_set_affinity_deactivated(struct irq_data *data,
struct irq_desc *desc = irq_data_to_desc(data);
/*
+ * Handle irq chips which can handle affinity only in activated
+ * state correctly
+ *
* If the interrupt is not yet activated, just store the affinity
* mask and do not call the chip driver at all. On activation the
* driver has to make sure anyway that the interrupt is in a
* useable state so startup works.
*/
- if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) || irqd_is_activated(data))
+ if (!IS_ENABLED(CONFIG_IRQ_DOMAIN_HIERARCHY) ||
+ irqd_is_activated(data) || !irqd_affinity_on_activate(data))
return false;
cpumask_copy(desc->irq_common_data.affinity, mask);