RE: [PATCH] genirq: Give warning when setup an already-setup non-shared irq

2013-01-14 Thread Liu, Chuansheng


> -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

2013-01-14 Thread Thomas Gleixner
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

2013-01-14 Thread Thomas Gleixner
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

2013-01-14 Thread Liu, Chuansheng


 -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

2013-01-09 Thread Chuansheng Liu

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

2013-01-09 Thread Chuansheng Liu

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/