[linux-yocto] [PATCH 077/268 v3] kernel/irq/manage.c: Fix irq_set_affinity to allow use with buslocks

Daniel Dragomir daniel.dragomir at windriver.com
Thu Apr 12 09:29:33 PDT 2018


From: David Mercado <david.mercado at windriver.com>

Modify irq_set_affinity() to allow usage of bus locks with "slow bus" IRQ
controllers.  This only affects those BSPs that use bus locks in their IRQ
controllers, such as the LSI Axxia GIC.  The recommendation for this
change originated from Thomax Gleixner at Linutronix.

Signed-off-by: David Mercado <david.mercado at windriver.com>
Signed-off-by: Daniel Dragomir <daniel.dragomir at windriver.com>
---
 kernel/irq/manage.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 6346a1f..b037857 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -249,6 +249,22 @@ int irq_set_affinity_locked(struct irq_data *data, const struct cpumask *mask,
 	return ret;
 }
 
+#ifdef CONFIG_ARCH_AXXIA
+int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force)
+{
+	unsigned long flags;
+	struct irq_desc *desc = irq_get_desc_buslock(irq, &flags,
+			IRQ_GET_DESC_CHECK_GLOBAL);
+	int ret;
+
+	if (!desc)
+		return -EINVAL;
+
+	ret = irq_set_affinity_locked(irq_desc_get_irq_data(desc), mask, force);
+	irq_put_desc_busunlock(desc, flags);
+	return ret;
+}
+#else
 int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force)
 {
 	struct irq_desc *desc = irq_to_desc(irq);
@@ -263,6 +279,7 @@ int __irq_set_affinity(unsigned int irq, const struct cpumask *mask, bool force)
 	raw_spin_unlock_irqrestore(&desc->lock, flags);
 	return ret;
 }
+#endif
 
 int irq_set_affinity_hint(unsigned int irq, const struct cpumask *m)
 {
-- 
2.7.4



More information about the linux-yocto mailing list