* Bug in "genirq: record trigger type" [not found] <200810202205.m9KM5une024759@hera.kernel.org> @ 2008-10-21 6:32 ` Benjamin Herrenschmidt 2008-10-21 7:22 ` Yinghai Lu ` (2 more replies) 0 siblings, 3 replies; 8+ messages in thread From: Benjamin Herrenschmidt @ 2008-10-21 6:32 UTC (permalink / raw) To: Linux Kernel Mailing List Cc: linuxppc-dev list, Ingo Molnar, David Brownell, Linus Torvalds, Thomas Gleixner On Mon, 2008-10-20 at 22:05 +0000, Linux Kernel Mailing List wrote: > Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0c5d1eb77a8be917b638344a22afe1398236482b > Commit: 0c5d1eb77a8be917b638344a22afe1398236482b > Parent: d6d5aeb661fc14655c417f3582ae7ec52985d2a8 > Author: David Brownell <dbrownell@users.sourceforge.net> > AuthorDate: Wed Oct 1 14:46:18 2008 -0700 > Committer: Ingo Molnar <mingo@elte.hu> > CommitDate: Thu Oct 2 10:24:09 2008 +0200 This one is obviously broken and breaks booting on a whole bunch of machines (including powermac's and thus my G5, it's never good when my own machine breaks !). Nice to see 3 SOB's and one Ack and nobody caught the obvious bug :-) > desc = irq_desc + irq; > - if (desc->chip->set_type) { > - spin_lock_irqsave(&desc->lock, flags); > - ret = desc->chip->set_type(irq, type); > - spin_unlock_irqrestore(&desc->lock, flags); > - } > + if (type == IRQ_TYPE_NONE) > + return 0; > + > + spin_lock_irqsave(&desc->lock, flags); > + ret = __irq_set_trigger(desc, irq, flags); ^^^^ type maybe ? > + spin_unlock_irqrestore(&desc->lock, flags); > return ret; > } I have to run so no patch until tomorrow unless somebody beats me to it. Cheers, Ben. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bug in "genirq: record trigger type" 2008-10-21 6:32 ` Bug in "genirq: record trigger type" Benjamin Herrenschmidt @ 2008-10-21 7:22 ` Yinghai Lu 2008-10-21 7:28 ` Ingo Molnar 2008-10-21 7:23 ` [PATCH] genirq: fix set_irq_type() when recording trigger type Ingo Molnar 2008-10-21 8:01 ` Bug in "genirq: record trigger type" David Brownell 2 siblings, 1 reply; 8+ messages in thread From: Yinghai Lu @ 2008-10-21 7:22 UTC (permalink / raw) To: benh Cc: David Brownell, Linux Kernel Mailing List, linuxppc-dev list, Ingo Molnar, Linus Torvalds, Thomas Gleixner On Mon, Oct 20, 2008 at 11:32 PM, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote: > On Mon, 2008-10-20 at 22:05 +0000, Linux Kernel Mailing List wrote: >> Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0c5d1eb77a8be917b638344a22afe1398236482b >> Commit: 0c5d1eb77a8be917b638344a22afe1398236482b >> Parent: d6d5aeb661fc14655c417f3582ae7ec52985d2a8 >> Author: David Brownell <dbrownell@users.sourceforge.net> >> AuthorDate: Wed Oct 1 14:46:18 2008 -0700 >> Committer: Ingo Molnar <mingo@elte.hu> >> CommitDate: Thu Oct 2 10:24:09 2008 +0200 > > This one is obviously broken and breaks booting on a whole bunch of > machines (including powermac's and thus my G5, it's never good when my > own machine breaks !). > > Nice to see 3 SOB's and one Ack and nobody caught the obvious bug :-) > >> desc = irq_desc + irq; >> - if (desc->chip->set_type) { >> - spin_lock_irqsave(&desc->lock, flags); >> - ret = desc->chip->set_type(irq, type); >> - spin_unlock_irqrestore(&desc->lock, flags); >> - } >> + if (type == IRQ_TYPE_NONE) >> + return 0; >> + >> + spin_lock_irqsave(&desc->lock, flags); >> + ret = __irq_set_trigger(desc, irq, flags); > ^^^^ type maybe ? > >> + spin_unlock_irqrestore(&desc->lock, flags); >> return ret; >> } > > I have to run so no patch until tomorrow unless somebody beats me to it. there is patch about it, but somehow get lost. YH ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bug in "genirq: record trigger type" 2008-10-21 7:22 ` Yinghai Lu @ 2008-10-21 7:28 ` Ingo Molnar 2008-10-21 7:32 ` Benjamin Herrenschmidt 0 siblings, 1 reply; 8+ messages in thread From: Ingo Molnar @ 2008-10-21 7:28 UTC (permalink / raw) To: Yinghai Lu Cc: David Brownell, Linux Kernel Mailing List, linuxppc-dev list, Thomas Gleixner, Linus Torvalds * Yinghai Lu <yinghai@kernel.org> wrote: > On Mon, Oct 20, 2008 at 11:32 PM, Benjamin Herrenschmidt > <benh@kernel.crashing.org> wrote: > > On Mon, 2008-10-20 at 22:05 +0000, Linux Kernel Mailing List wrote: > >> Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0c5d1eb77a8be917b638344a22afe1398236482b > >> Commit: 0c5d1eb77a8be917b638344a22afe1398236482b > >> Parent: d6d5aeb661fc14655c417f3582ae7ec52985d2a8 > >> Author: David Brownell <dbrownell@users.sourceforge.net> > >> AuthorDate: Wed Oct 1 14:46:18 2008 -0700 > >> Committer: Ingo Molnar <mingo@elte.hu> > >> CommitDate: Thu Oct 2 10:24:09 2008 +0200 > > > > This one is obviously broken and breaks booting on a whole bunch of > > machines (including powermac's and thus my G5, it's never good when my > > own machine breaks !). > > > > Nice to see 3 SOB's and one Ack and nobody caught the obvious bug :-) > > > >> desc = irq_desc + irq; > >> - if (desc->chip->set_type) { > >> - spin_lock_irqsave(&desc->lock, flags); > >> - ret = desc->chip->set_type(irq, type); > >> - spin_unlock_irqrestore(&desc->lock, flags); > >> - } > >> + if (type == IRQ_TYPE_NONE) > >> + return 0; > >> + > >> + spin_lock_irqsave(&desc->lock, flags); > >> + ret = __irq_set_trigger(desc, irq, flags); > > ^^^^ type maybe ? > > > >> + spin_unlock_irqrestore(&desc->lock, flags); > >> return ret; > >> } > > > > I have to run so no patch until tomorrow unless somebody beats me to it. > > there is patch about it, but somehow get lost. should be all sorted now, the fix is below. Ingo ------------------> >From aac4ddd11a8d0e402ddc3fbc75204cb64efa0aac Mon Sep 17 00:00:00 2001 From: Chris Friesen <cfriesen@nortel.com> Date: Mon, 20 Oct 2008 12:41:58 -0600 Subject: [PATCH] genirq: fix set_irq_type() when recording trigger type In set_irq_type() we want to pass the type rather than the current interrupt state. Signed-off-by: Chris Friesen <cfriesen@nortel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- kernel/irq/chip.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 4895fde..3de6ea3 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -127,7 +127,7 @@ int set_irq_type(unsigned int irq, unsigned int type) return 0; spin_lock_irqsave(&desc->lock, flags); - ret = __irq_set_trigger(desc, irq, flags); + ret = __irq_set_trigger(desc, irq, type); spin_unlock_irqrestore(&desc->lock, flags); return ret; } ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: Bug in "genirq: record trigger type" 2008-10-21 7:28 ` Ingo Molnar @ 2008-10-21 7:32 ` Benjamin Herrenschmidt 2008-10-21 7:33 ` Ingo Molnar 0 siblings, 1 reply; 8+ messages in thread From: Benjamin Herrenschmidt @ 2008-10-21 7:32 UTC (permalink / raw) To: Ingo Molnar Cc: David Brownell, Yinghai Lu, Linux Kernel Mailing List, linuxppc-dev list, Thomas Gleixner, Linus Torvalds On Tue, 2008-10-21 at 09:28 +0200, Ingo Molnar wrote: > From: Chris Friesen <cfriesen@nortel.com> > Date: Mon, 20 Oct 2008 12:41:58 -0600 > Subject: [PATCH] genirq: fix set_irq_type() when recording trigger type > > In set_irq_type() we want to pass the type rather than the current > interrupt state. > > Signed-off-by: Chris Friesen <cfriesen@nortel.com> > Signed-off-by: Ingo Molnar <mingo@elte.hu> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> > --- > kernel/irq/chip.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c > index 4895fde..3de6ea3 100644 > --- a/kernel/irq/chip.c > +++ b/kernel/irq/chip.c > @@ -127,7 +127,7 @@ int set_irq_type(unsigned int irq, unsigned int type) > return 0; > > spin_lock_irqsave(&desc->lock, flags); > - ret = __irq_set_trigger(desc, irq, flags); > + ret = __irq_set_trigger(desc, irq, type); > spin_unlock_irqrestore(&desc->lock, flags); > return ret; > } ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bug in "genirq: record trigger type" 2008-10-21 7:32 ` Benjamin Herrenschmidt @ 2008-10-21 7:33 ` Ingo Molnar 0 siblings, 0 replies; 8+ messages in thread From: Ingo Molnar @ 2008-10-21 7:33 UTC (permalink / raw) To: Benjamin Herrenschmidt Cc: David Brownell, Yinghai Lu, Linux Kernel Mailing List, linuxppc-dev list, Thomas Gleixner, Linus Torvalds * Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote: > On Tue, 2008-10-21 at 09:28 +0200, Ingo Molnar wrote: > > > From: Chris Friesen <cfriesen@nortel.com> > > Date: Mon, 20 Oct 2008 12:41:58 -0600 > > Subject: [PATCH] genirq: fix set_irq_type() when recording trigger type > > > > In set_irq_type() we want to pass the type rather than the current > > interrupt state. > > > > Signed-off-by: Chris Friesen <cfriesen@nortel.com> > > Signed-off-by: Ingo Molnar <mingo@elte.hu> > > Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> thx, added your ack to the commit as well. Ingo ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] genirq: fix set_irq_type() when recording trigger type 2008-10-21 6:32 ` Bug in "genirq: record trigger type" Benjamin Herrenschmidt 2008-10-21 7:22 ` Yinghai Lu @ 2008-10-21 7:23 ` Ingo Molnar 2008-10-21 8:01 ` Bug in "genirq: record trigger type" David Brownell 2 siblings, 0 replies; 8+ messages in thread From: Ingo Molnar @ 2008-10-21 7:23 UTC (permalink / raw) To: Benjamin Herrenschmidt Cc: David Brownell, Linux Kernel Mailing List, linuxppc-dev list, H. Peter Anvin, Thomas Gleixner, Linus Torvalds * Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote: > On Mon, 2008-10-20 at 22:05 +0000, Linux Kernel Mailing List wrote: > > Gitweb: http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0c5d1eb77a8be917b638344a22afe1398236482b > > Commit: 0c5d1eb77a8be917b638344a22afe1398236482b > > Parent: d6d5aeb661fc14655c417f3582ae7ec52985d2a8 > > Author: David Brownell <dbrownell@users.sourceforge.net> > > AuthorDate: Wed Oct 1 14:46:18 2008 -0700 > > Committer: Ingo Molnar <mingo@elte.hu> > > CommitDate: Thu Oct 2 10:24:09 2008 +0200 [...] > > Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> > > Signed-off-by: Andrew Morton <akpm@linux-foundation.org> > > Acked-by: Thomas Gleixner <tglx@linutronix.de> > > Signed-off-by: Ingo Molnar <mingo@elte.hu> > > This one is obviously broken and breaks booting on a whole bunch of > machines (including powermac's and thus my G5, it's never good when my > own machine breaks !). > > Nice to see 3 SOB's and one Ack and nobody caught the obvious bug :-) that patch came from -mm towards us shortly before the merge window. Once we had it integrated Chris Friesen reported a boot hang on a G5, and there's a fix pending for the bug, see it below. Will send it to Linus expressly. Fortunately only a minority of Linux users will ever run a box that uses set_irq_type() - but yes it needs to be fixed. Ingo ------------------------------> >From aac4ddd11a8d0e402ddc3fbc75204cb64efa0aac Mon Sep 17 00:00:00 2001 From: Chris Friesen <cfriesen@nortel.com> Date: Mon, 20 Oct 2008 12:41:58 -0600 Subject: [PATCH] genirq: fix set_irq_type() when recording trigger type In set_irq_type() we want to pass the type rather than the current interrupt state. Signed-off-by: Chris Friesen <cfriesen@nortel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> --- kernel/irq/chip.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 4895fde..3de6ea3 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -127,7 +127,7 @@ int set_irq_type(unsigned int irq, unsigned int type) return 0; spin_lock_irqsave(&desc->lock, flags); - ret = __irq_set_trigger(desc, irq, flags); + ret = __irq_set_trigger(desc, irq, type); spin_unlock_irqrestore(&desc->lock, flags); return ret; } ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: Bug in "genirq: record trigger type" 2008-10-21 6:32 ` Bug in "genirq: record trigger type" Benjamin Herrenschmidt 2008-10-21 7:22 ` Yinghai Lu 2008-10-21 7:23 ` [PATCH] genirq: fix set_irq_type() when recording trigger type Ingo Molnar @ 2008-10-21 8:01 ` David Brownell 2008-10-21 8:29 ` Benjamin Herrenschmidt 2 siblings, 1 reply; 8+ messages in thread From: David Brownell @ 2008-10-21 8:01 UTC (permalink / raw) To: benh Cc: Linus Torvalds, Ingo Molnar, Thomas Gleixner, Linux Kernel Mailing List, linuxppc-dev list On Monday 20 October 2008, Benjamin Herrenschmidt wrote: > This one is obviously broken and breaks booting on a whole bunch of > machines (including powermac's and thus my G5, it's never good when my > own machine breaks !). > > Nice to see 3 SOB's and one Ack and nobody caught the obvious bug :-) As you saw, that one's fixed. Chris' patch unfortunately didn't get integrated right away. I'm a bit more curious about another potential issue though ... as described in the patch comment: - Make set_irq_type() usage match request_irq() usage: * IRQ_TYPE_NONE should be a NOP; succeed, so irq_chip methods won't have to handle that case any more (many do it wrong). It might be a bit more accurate to say irq_chip.set_type() methods are *inconsistent* in handling IRQ_TYPE_NONE. Previously the set_irq_type() method would pass that down to irq_chip code. I had observed two behaviors, but I thought I observed a third one in some of the PowerPC code: (1) ignore it ... matching request_irq() usage (2) return an error ... nasty (3) assign some irq_chip-specific trigger mode That third behavior might cause a bit of trouble, but I think it was only used during platform init. Someone more attuned to PowerPC might want to check ... - Dave ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Bug in "genirq: record trigger type" 2008-10-21 8:01 ` Bug in "genirq: record trigger type" David Brownell @ 2008-10-21 8:29 ` Benjamin Herrenschmidt 0 siblings, 0 replies; 8+ messages in thread From: Benjamin Herrenschmidt @ 2008-10-21 8:29 UTC (permalink / raw) To: David Brownell Cc: Linus Torvalds, Ingo Molnar, Thomas Gleixner, Linux Kernel Mailing List, linuxppc-dev list On Tue, 2008-10-21 at 01:01 -0700, David Brownell wrote: > > I'm a bit more curious about another potential issue though ... as > described in the patch comment: > > - Make set_irq_type() usage match request_irq() usage: > * IRQ_TYPE_NONE should be a NOP; succeed, so irq_chip methods > won't have to handle that case any more (many do it wrong). > > It might be a bit more accurate to say irq_chip.set_type() methods > are *inconsistent* in handling IRQ_TYPE_NONE. Previously the > set_irq_type() method would pass that down to irq_chip code. > > I had observed two behaviors, but I thought I observed a third one > in some of the PowerPC code: > > (1) ignore it ... matching request_irq() usage > (2) return an error ... nasty > (3) assign some irq_chip-specific trigger mode > > That third behavior might cause a bit of trouble, but I think > it was only used during platform init. Someone more attuned > to PowerPC might want to check ... Ok, I wrote a lot of the port of powerpc stuff to genirq so I supposed I'm the person to do that sweep :-) I'll have a look tomorrow. Thanks for the heads up, Cheers, Ben. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-10-21 8:31 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <200810202205.m9KM5une024759@hera.kernel.org> 2008-10-21 6:32 ` Bug in "genirq: record trigger type" Benjamin Herrenschmidt 2008-10-21 7:22 ` Yinghai Lu 2008-10-21 7:28 ` Ingo Molnar 2008-10-21 7:32 ` Benjamin Herrenschmidt 2008-10-21 7:33 ` Ingo Molnar 2008-10-21 7:23 ` [PATCH] genirq: fix set_irq_type() when recording trigger type Ingo Molnar 2008-10-21 8:01 ` Bug in "genirq: record trigger type" David Brownell 2008-10-21 8:29 ` Benjamin Herrenschmidt
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).