From 1714337153c9b1fc24eb8597e94f6205183227c5 Mon Sep 17 00:00:00 2001 From: Trilok Soni Date: Fri, 30 Sep 2011 10:48:47 +0100 Subject: [PATCH] genirq: percpu: allow interrupt type to be set at enable time The commit 1e7c5fd breaks the build which gets fixed in the next commit 32cffdd. commit 1e7c5fd29487ee88cb3abac945bafa60ae026146 Author: Marc Zyngier Date: Fri Sep 30 10:48:47 2011 +0100 genirq: percpu: allow interrupt type to be set at enable time As request_percpu_irq() doesn't allow for a percpu interrupt to have its type configured (it is generally impossible to configure it on all CPUs at once), add a 'type' argument to enable_percpu_irq(). This allows some low-level, board specific init code to be switched to a generic API. [ tglx: Added WARN_ON argument ] Signed-off-by: Marc Zyngier Cc: Abhijeet Dharmapurikar Signed-off-by: Thomas Gleixner commit 32cffdde4a3ee6c2d9e0f0a94edecf1a9ce7586b Author: Thomas Gleixner Date: Tue Oct 4 18:43:57 2011 +0200 genirq: Fix fatfinered fixup really Putting the argument inside the quote does not really help. Signed-off-by: Thomas Gleixner Change-Id: I1c9e58dd8788b5515f183ec169975d48a329b339 [tsoni@codeaurora.org: Fixup MSM build failure] Signed-off-by: Trilok Soni --- include/linux/interrupt.h | 2 +- kernel/irq/manage.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 7eb516821b5..c22f9b05fd4 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -223,7 +223,7 @@ extern void disable_irq_nosync(unsigned int irq); extern void disable_irq(unsigned int irq); extern void disable_percpu_irq(unsigned int irq); extern void enable_irq(unsigned int irq); -extern void enable_percpu_irq(unsigned int irq); +extern void enable_percpu_irq(unsigned int irq, unsigned int type); /* The following three functions are for the core kernel use only. */ #ifdef CONFIG_GENERIC_HARDIRQS diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 26c58c1637c..1db1dc67f4f 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -1462,7 +1462,7 @@ void irq_set_pending(unsigned int irq) } EXPORT_SYMBOL_GPL(irq_set_pending); -void enable_percpu_irq(unsigned int irq) +void enable_percpu_irq(unsigned int irq, unsigned int type) { unsigned int cpu = smp_processor_id(); unsigned long flags; @@ -1471,7 +1471,20 @@ void enable_percpu_irq(unsigned int irq) if (!desc) return; + type &= IRQ_TYPE_SENSE_MASK; + if (type != IRQ_TYPE_NONE) { + int ret; + + ret = __irq_set_trigger(desc, irq, type); + + if (ret) { + WARN(1, "failed to set type for IRQ%d\n", irq); + goto out; + } + } + irq_percpu_enable(desc, cpu); +out: irq_put_desc_unlock(desc, flags); }