RE: [PATCH] genirq: Give warning when setup an already-setup non-shared irq
> -Original Message- > From: Thomas Gleixner [mailto:t...@linutronix.de] > Sent: Monday, January 14, 2013 7:16 PM > To: Liu, Chuansheng > Cc: linux-kernel@vger.kernel.org > Subject: Re: [PATCH] genirq: Give warning when setup an already-setup > non-shared irq > > On Thu, 10 Jan 2013, Chuansheng Liu wrote: > > > > Meet the case when the request_threaded_irq() with the same irq > > is called twice continually, get the below mismatch info: > > "IRQ handler type mismatch for IRQ 323" > > I have no idea where you get that from. The mismatch is printed with: > > if (!(new->flags & IRQF_PROBE_SHARED)) { > pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n", >irq, new->flags, new->name, old->flags, > old->name); if (!(new->flags & IRQF_PROBE_SHARED)) { printk(KERN_ERR "IRQ handler type mismatch for IRQ %d\n", irq); if (old_name) printk(KERN_ERR "current handler: %s\n", old_name); dump_stack(); } The "IRQ handler type mismatch for IRQ 323" message is coming from the above code, which is something older than you pasted, but it is the same place. > > And its only printed when IRQF_PROBE_SHARED is not set. Your change > would cause printouts where no printouts are due and it'd change the > return value from EBUSY to EINVAL. My test case is below: request_irq(323, func1, IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING, name, dev); After succeeded, then called it again: request_irq(323, func1, IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING, name, dev); After the test case, I will get the "mismatch" info. But in this case, it should not be the "mismatch" case, so I want to give another warning in case of duplicated setup the same irq with non-shared. Not sure if it is right. Thanks your pointing out. > > Thanks, > > tglx -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] genirq: Give warning when setup an already-setup non-shared irq
On Thu, 10 Jan 2013, Chuansheng Liu wrote: > > Meet the case when the request_threaded_irq() with the same irq > is called twice continually, get the below mismatch info: > "IRQ handler type mismatch for IRQ 323" I have no idea where you get that from. The mismatch is printed with: if (!(new->flags & IRQF_PROBE_SHARED)) { pr_err("Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n", irq, new->flags, new->name, old->flags, old->name); And its only printed when IRQF_PROBE_SHARED is not set. Your change would cause printouts where no printouts are due and it'd change the return value from EBUSY to EINVAL. Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] genirq: Give warning when setup an already-setup non-shared irq
On Thu, 10 Jan 2013, Chuansheng Liu wrote: Meet the case when the request_threaded_irq() with the same irq is called twice continually, get the below mismatch info: IRQ handler type mismatch for IRQ 323 I have no idea where you get that from. The mismatch is printed with: if (!(new-flags IRQF_PROBE_SHARED)) { pr_err(Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n, irq, new-flags, new-name, old-flags, old-name); And its only printed when IRQF_PROBE_SHARED is not set. Your change would cause printouts where no printouts are due and it'd change the return value from EBUSY to EINVAL. Thanks, tglx -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
RE: [PATCH] genirq: Give warning when setup an already-setup non-shared irq
-Original Message- From: Thomas Gleixner [mailto:t...@linutronix.de] Sent: Monday, January 14, 2013 7:16 PM To: Liu, Chuansheng Cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] genirq: Give warning when setup an already-setup non-shared irq On Thu, 10 Jan 2013, Chuansheng Liu wrote: Meet the case when the request_threaded_irq() with the same irq is called twice continually, get the below mismatch info: IRQ handler type mismatch for IRQ 323 I have no idea where you get that from. The mismatch is printed with: if (!(new-flags IRQF_PROBE_SHARED)) { pr_err(Flags mismatch irq %d. %08x (%s) vs. %08x (%s)\n, irq, new-flags, new-name, old-flags, old-name); if (!(new-flags IRQF_PROBE_SHARED)) { printk(KERN_ERR IRQ handler type mismatch for IRQ %d\n, irq); if (old_name) printk(KERN_ERR current handler: %s\n, old_name); dump_stack(); } The IRQ handler type mismatch for IRQ 323 message is coming from the above code, which is something older than you pasted, but it is the same place. And its only printed when IRQF_PROBE_SHARED is not set. Your change would cause printouts where no printouts are due and it'd change the return value from EBUSY to EINVAL. My test case is below: request_irq(323, func1, IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING, name, dev); After succeeded, then called it again: request_irq(323, func1, IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_EDGE_RISING, name, dev); After the test case, I will get the mismatch info. But in this case, it should not be the mismatch case, so I want to give another warning in case of duplicated setup the same irq with non-shared. Not sure if it is right. Thanks your pointing out. Thanks, tglx -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] genirq: Give warning when setup an already-setup non-shared irq
Meet the case when the request_threaded_irq() with the same irq is called twice continually, get the below mismatch info: "IRQ handler type mismatch for IRQ 323" Here give a right warning that like below: "Trying to setup already-setup non-shared IRQ 323" Signed-off-by: liu chuansheng --- kernel/irq/manage.c | 10 ++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index e49a288..6802ce1 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -999,6 +999,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) old_ptr = >action; old = *old_ptr; if (old) { + /* Give warning when setup an irq which has been setup +* already. +*/ + if (!(old->flags & IRQF_SHARED)) { + ret = -EINVAL; + WARN(1, "Trying to setup already-setup non-shared IRQ %d\n", + irq); + goto out_mask; + } + /* * Can't share interrupts unless both agree to and are * the same type (level, edge, polarity). So both flag -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] genirq: Give warning when setup an already-setup non-shared irq
Meet the case when the request_threaded_irq() with the same irq is called twice continually, get the below mismatch info: IRQ handler type mismatch for IRQ 323 Here give a right warning that like below: Trying to setup already-setup non-shared IRQ 323 Signed-off-by: liu chuansheng chuansheng@intel.com --- kernel/irq/manage.c | 10 ++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index e49a288..6802ce1 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -999,6 +999,16 @@ __setup_irq(unsigned int irq, struct irq_desc *desc, struct irqaction *new) old_ptr = desc-action; old = *old_ptr; if (old) { + /* Give warning when setup an irq which has been setup +* already. +*/ + if (!(old-flags IRQF_SHARED)) { + ret = -EINVAL; + WARN(1, Trying to setup already-setup non-shared IRQ %d\n, + irq); + goto out_mask; + } + /* * Can't share interrupts unless both agree to and are * the same type (level, edge, polarity). So both flag -- 1.7.0.4 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/