From d44f14b5e33cf4c2074fd90d382c22f9be6d217d Mon Sep 17 00:00:00 2001 From: Marc Zyngier Date: Fri, 30 Sep 2011 10:48:47 +0100 Subject: [PATCH] --- yaml --- r: 268990 b: refs/heads/master c: 1e7c5fd29487ee88cb3abac945bafa60ae026146 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/interrupt.h | 2 +- trunk/kernel/irq/manage.c | 15 ++++++++++++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 2460a3e3437e..39bd851bc708 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 31d9d9b6d83030f748d013e61502fa5477e2ac0e +refs/heads/master: 1e7c5fd29487ee88cb3abac945bafa60ae026146 diff --git a/trunk/include/linux/interrupt.h b/trunk/include/linux/interrupt.h index 1cdfd09c8abc..664544ff77d5 100644 --- a/trunk/include/linux/interrupt.h +++ b/trunk/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/trunk/kernel/irq/manage.c b/trunk/kernel/irq/manage.c index 7b4b156d065c..2bc86869859e 100644 --- a/trunk/kernel/irq/manage.c +++ b/trunk/kernel/irq/manage.c @@ -1419,7 +1419,7 @@ int request_any_context_irq(unsigned int irq, irq_handler_t handler, } EXPORT_SYMBOL_GPL(request_any_context_irq); -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; @@ -1428,7 +1428,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); }