summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-03-21 13:29:04 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-03-21 13:29:03 -0700
commit5a54ca071cfb6d0543920b89ddbe92a074ce3ff9 (patch)
tree543c148ce5c34e1017adbc02297cf22d32a993d1 /drivers
parent09ddd6a693ad81384fb48054c94c0f226f64c57a (diff)
parent4fa55b9ca326d7fe4bdc4663f22eea54c14f2933 (diff)
Merge "drivers: GICv3: Check IRQ state in gic_set_affinity()"
Diffstat (limited to 'drivers')
-rw-r--r--drivers/irqchip/irq-gic-v3.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index c40a9f3b0724..4ff2ee2609ca 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -804,6 +804,14 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
gic_write_irouter(val, reg);
/*
+ * It is possible that irq is disabled from SW perspective only,
+ * because kernel takes lazy disable approach. Therefore check irq
+ * descriptor if it should kept disabled.
+ */
+ if (irqd_irq_disabled(d))
+ enabled = 0;
+
+ /*
* If the interrupt was enabled, enabled it again. Otherwise,
* just wait for the distributor to have digested our changes.
*/