2013-04-29 21:16:15

by Dave Jones

[permalink] [raw]
Subject: dummy irq trace 'Flags mismatch'

When set to built-in, the dummy irq driver causes this trace when I boot..

[ 3.996055] genirq: Flags mismatch irq 0. 00000080 (dummy_irq) vs. 00015a20 (timer)
[ 3.997055] Pid: 1, comm: swapper/0 Not tainted 3.9.0+ #29
[ 3.997768] Call Trace:
[ 3.998127] [<ffffffff810f8635>] __setup_irq+0x515/0x550
[ 3.998827] [<ffffffff81f00e8c>] ? loop_init+0x150/0x150
[ 3.999530] [<ffffffff8146adf0>] ? transfer_xor+0x160/0x160
[ 4.000259] [<ffffffff810f8809>] request_threaded_irq+0xf9/0x1a0
[ 4.001041] [<ffffffff81f00e8c>] ? loop_init+0x150/0x150
[ 4.001740] [<ffffffff81f00eb8>] dummy_irq_init+0x2c/0x60
[ 4.002450] [<ffffffff810002e2>] do_one_initcall+0x122/0x170
[ 4.003191] [<ffffffff81ecef5c>] kernel_init_freeable+0x15b/0x1db
[ 4.003978] [<ffffffff81ece7da>] ? do_early_param+0x88/0x88
[ 4.004710] [<ffffffff816a87e0>] ? rest_init+0x140/0x140
[ 4.005413] [<ffffffff816a87ee>] kernel_init+0xe/0x180
[ 4.006094] [<ffffffff816ce91c>] ret_from_fork+0x7c/0xb0
[ 4.006789] [<ffffffff816a87e0>] ? rest_init+0x140/0x140
[ 4.007561] dummy-irq: cannot register IRQ 0


2013-04-30 04:59:28

by Jiri Kosina

[permalink] [raw]
Subject: Re: dummy irq trace 'Flags mismatch'

On Mon, 29 Apr 2013, Dave Jones wrote:

> When set to built-in, the dummy irq driver causes this trace when I boot..
>
> [ 3.996055] genirq: Flags mismatch irq 0. 00000080 (dummy_irq) vs. 00015a20 (timer)
> [ 3.997055] Pid: 1, comm: swapper/0 Not tainted 3.9.0+ #29
> [ 3.997768] Call Trace:
> [ 3.998127] [<ffffffff810f8635>] __setup_irq+0x515/0x550
> [ 3.998827] [<ffffffff81f00e8c>] ? loop_init+0x150/0x150
> [ 3.999530] [<ffffffff8146adf0>] ? transfer_xor+0x160/0x160
> [ 4.000259] [<ffffffff810f8809>] request_threaded_irq+0xf9/0x1a0
> [ 4.001041] [<ffffffff81f00e8c>] ? loop_init+0x150/0x150
> [ 4.001740] [<ffffffff81f00eb8>] dummy_irq_init+0x2c/0x60
> [ 4.002450] [<ffffffff810002e2>] do_one_initcall+0x122/0x170
> [ 4.003191] [<ffffffff81ecef5c>] kernel_init_freeable+0x15b/0x1db
> [ 4.003978] [<ffffffff81ece7da>] ? do_early_param+0x88/0x88
> [ 4.004710] [<ffffffff816a87e0>] ? rest_init+0x140/0x140
> [ 4.005413] [<ffffffff816a87ee>] kernel_init+0xe/0x180
> [ 4.006094] [<ffffffff816ce91c>] ret_from_fork+0x7c/0xb0
> [ 4.006789] [<ffffffff816a87e0>] ? rest_init+0x140/0x140
> [ 4.007561] dummy-irq: cannot register IRQ 0

Thanks for the report, Dave. That's actually kind of expected -- when one
of the handlers on the IRQ line that is being debugged doesn't share IRQs,
this is exactly what you want to get by the dummy-irq debugging facility.

In this case you haven't specified any IRQ# to the dummy-irq driver via
kernel commandline, i.e. IRQ# is 0, and timer is not sharing IRQs,
therefore dummy-irq debugging facility did its job, and you know that the
IRQ can't be shared.

Not really sure whether this is something to fix. We could make dummy-irq
a module-only thing, but that might be counter-productive in cases you
really want to debug very early problems.

Or have it depend on CONFIG_EXPERT would probably make most sense ... ?

Thanks,

--
Jiri Kosina
SUSE Labs

2013-04-30 14:00:15

by Jonathan Corbet

[permalink] [raw]
Subject: Re: dummy irq trace 'Flags mismatch'

On Tue, 30 Apr 2013 06:59:22 +0200 (CEST)
Jiri Kosina <[email protected]> wrote:

> Or have it depend on CONFIG_EXPERT would probably make most sense ... ?

We could also just have it tell you when you screwed up? Something like
the following (compile tested only)?

jon
---
dummy-irq: require the user to specify an IRQ number

Reported-by: Dave Jones <[email protected]>
Signed-off-by: Jonathan Corbet <[email protected]>

diff --git a/drivers/misc/dummy-irq.c b/drivers/misc/dummy-irq.c
index 7014167..c37eeed 100644
--- a/drivers/misc/dummy-irq.c
+++ b/drivers/misc/dummy-irq.c
@@ -19,7 +19,7 @@
#include <linux/irq.h>
#include <linux/interrupt.h>

-static int irq;
+static int irq = -1;

static irqreturn_t dummy_interrupt(int irq, void *dev_id)
{
@@ -36,6 +36,10 @@ static irqreturn_t dummy_interrupt(int irq, void *dev_id)

static int __init dummy_irq_init(void)
{
+ if (irq < 0) {
+ printk(KERN_ERR "dummy-irq: no IRQ given. Use irq=N\n");
+ return -EIO;
+ }
if (request_irq(irq, &dummy_interrupt, IRQF_SHARED, "dummy_irq", &irq)) {
printk(KERN_ERR "dummy-irq: cannot register IRQ %d\n", irq);
return -EIO;

2013-04-30 20:42:37

by Jiri Kosina

[permalink] [raw]
Subject: [PATCH] dummy-irq: require the user to specify an IRQ number

From: Jonathan Corbet <[email protected]>
Subject: [PATCH] dummy-irq: require the user to specify an IRQ number

Make sure that we let the user know that without specifying IRQ#,
dummy-irq driver is useless.

Reported-by: Dave Jones <[email protected]>
Signed-off-by: Jonathan Corbet <[email protected]>
Signed-off-by: Jiri Kosina <[email protected]>

diff --git a/drivers/misc/dummy-irq.c b/drivers/misc/dummy-irq.c
index 7014167..c37eeed 100644
--- a/drivers/misc/dummy-irq.c
+++ b/drivers/misc/dummy-irq.c
@@ -19,7 +19,7 @@
#include <linux/irq.h>
#include <linux/interrupt.h>

-static int irq;
+static int irq = -1;

static irqreturn_t dummy_interrupt(int irq, void *dev_id)
{
@@ -36,6 +36,10 @@ static irqreturn_t dummy_interrupt(int irq, void *dev_id)

static int __init dummy_irq_init(void)
{
+ if (irq < 0) {
+ printk(KERN_ERR "dummy-irq: no IRQ given. Use irq=N\n");
+ return -EIO;
+ }
if (request_irq(irq, &dummy_interrupt, IRQF_SHARED, "dummy_irq", &irq)) {
printk(KERN_ERR "dummy-irq: cannot register IRQ %d\n", irq);
return -EIO;
--
Jiri Kosina
SUSE Labs

2013-04-30 20:50:21

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] dummy-irq: require the user to specify an IRQ number

On Tue, Apr 30, 2013 at 10:42:33PM +0200, Jiri Kosina wrote:
> From: Jonathan Corbet <[email protected]>
> Subject: [PATCH] dummy-irq: require the user to specify an IRQ number
>
> Make sure that we let the user know that without specifying IRQ#,
> dummy-irq driver is useless.
>
> Reported-by: Dave Jones <[email protected]>
> Signed-off-by: Jonathan Corbet <[email protected]>
> Signed-off-by: Jiri Kosina <[email protected]>

Nice, I'll queue this up after 3.10-rc1 is out, thanks.

greg k-h

2013-04-30 21:12:08

by Jiri Kosina

[permalink] [raw]
Subject: Re: [PATCH] dummy-irq: require the user to specify an IRQ number

On Tue, 30 Apr 2013, Greg Kroah-Hartman wrote:

> > From: Jonathan Corbet <[email protected]>
> > Subject: [PATCH] dummy-irq: require the user to specify an IRQ number
> >
> > Make sure that we let the user know that without specifying IRQ#,
> > dummy-irq driver is useless.
> >
> > Reported-by: Dave Jones <[email protected]>
> > Signed-off-by: Jonathan Corbet <[email protected]>
> > Signed-off-by: Jiri Kosina <[email protected]>
>
> Nice, I'll queue this up after 3.10-rc1 is out, thanks.

Thanks Greg.

Do you want me to resend this after rc1, or is it somewhere in your
post-rc1 queue already?

--
Jiri Kosina
SUSE Labs

2013-04-30 23:53:17

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] dummy-irq: require the user to specify an IRQ number

On Tue, Apr 30, 2013 at 11:12:04PM +0200, Jiri Kosina wrote:
> On Tue, 30 Apr 2013, Greg Kroah-Hartman wrote:
>
> > > From: Jonathan Corbet <[email protected]>
> > > Subject: [PATCH] dummy-irq: require the user to specify an IRQ number
> > >
> > > Make sure that we let the user know that without specifying IRQ#,
> > > dummy-irq driver is useless.
> > >
> > > Reported-by: Dave Jones <[email protected]>
> > > Signed-off-by: Jonathan Corbet <[email protected]>
> > > Signed-off-by: Jiri Kosina <[email protected]>
> >
> > Nice, I'll queue this up after 3.10-rc1 is out, thanks.
>
> Thanks Greg.
>
> Do you want me to resend this after rc1, or is it somewhere in your
> post-rc1 queue already?

It's in my queue already, no need for you to resend this.

thanks,

greg k-h