* [patch 0/2] PNPACPI: fix IRQ encoding problems @ 2008-05-27 22:49 Bjorn Helgaas 2008-05-27 22:49 ` [patch 1/2] PNPACPI: fix IRQ flag decoding Bjorn Helgaas 2008-05-27 22:49 ` [patch 2/2] PNPACPI: fix shareable IRQ encode/decode Bjorn Helgaas 0 siblings, 2 replies; 8+ messages in thread From: Bjorn Helgaas @ 2008-05-27 22:49 UTC (permalink / raw) To: Len Brown Cc: linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman, Andrew Morton, Tom Jaeger These patches fix some IRQ encoding problems in PNPACPI. I don't have reports of people hitting these specific problems, but they could easily cause hard-to-debug suspend/resume failures or failures when enabling devices left disabled by the BIOS. I think these changes should go into 2.6.26. Bjorn -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* [patch 1/2] PNPACPI: fix IRQ flag decoding 2008-05-27 22:49 [patch 0/2] PNPACPI: fix IRQ encoding problems Bjorn Helgaas @ 2008-05-27 22:49 ` Bjorn Helgaas 2008-05-28 20:53 ` Rene Herman 2008-05-27 22:49 ` [patch 2/2] PNPACPI: fix shareable IRQ encode/decode Bjorn Helgaas 1 sibling, 1 reply; 8+ messages in thread From: Bjorn Helgaas @ 2008-05-27 22:49 UTC (permalink / raw) To: Len Brown Cc: linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman, Andrew Morton, Tom Jaeger [-- Attachment #1: pnpacpi-fix-decode-irq --] [-- Type: text/plain, Size: 2644 bytes --] When decoding IRQ trigger mode and polarity, it is not enough to mask by IORESOURCE_BITS because there are now additional bits defined. For example, if IORESOURCE_IRQ_SHAREABLE was set, we failed to set *triggering and *polarity at all. I can't point to a failure that this patch fixes, but bugs in this area have caused problems when resuming after suspend, for example: http://bugzilla.kernel.org/show_bug.cgi?id=6316 http://bugzilla.kernel.org/show_bug.cgi?id=9487 https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/152187 This is based on a patch by Tom Jaeger <ThJaeger@gmail.com>: http://bugzilla.kernel.org/show_bug.cgi?id=9487#c32 Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Index: work11/drivers/pnp/pnpacpi/rsparser.c =================================================================== --- work11.orig/drivers/pnp/pnpacpi/rsparser.c 2008-05-27 15:50:04.000000000 -0600 +++ work11/drivers/pnp/pnpacpi/rsparser.c 2008-05-27 15:53:21.000000000 -0600 @@ -56,9 +56,11 @@ static int irq_flags(int triggering, int return flags; } -static void decode_irq_flags(int flag, int *triggering, int *polarity) +static void decode_irq_flags(struct pnp_dev *dev, int flags, int *triggering, + int *polarity) { - switch (flag) { + switch (flags & (IORESOURCE_IRQ_LOWLEVEL | IORESOURCE_IRQ_HIGHLEVEL | + IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE)) { case IORESOURCE_IRQ_LOWLEVEL: *triggering = ACPI_LEVEL_SENSITIVE; *polarity = ACPI_ACTIVE_LOW; @@ -75,6 +77,12 @@ static void decode_irq_flags(int flag, i *triggering = ACPI_EDGE_SENSITIVE; *polarity = ACPI_ACTIVE_HIGH; break; + default: + dev_err(&dev->dev, "can't encode invalid IRQ mode %#x\n", + flags); + *triggering = ACPI_EDGE_SENSITIVE; + *polarity = ACPI_ACTIVE_HIGH; + break; } } @@ -793,7 +801,7 @@ static void pnpacpi_encode_irq(struct pn struct acpi_resource_irq *irq = &resource->data.irq; int triggering, polarity; - decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity); + decode_irq_flags(dev, p->flags, &triggering, &polarity); irq->triggering = triggering; irq->polarity = polarity; if (triggering == ACPI_EDGE_SENSITIVE) @@ -818,7 +826,7 @@ static void pnpacpi_encode_ext_irq(struc struct acpi_resource_extended_irq *extended_irq = &resource->data.extended_irq; int triggering, polarity; - decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity); + decode_irq_flags(dev, p->flags, &triggering, &polarity); extended_irq->producer_consumer = ACPI_CONSUMER; extended_irq->triggering = triggering; extended_irq->polarity = polarity; -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch 1/2] PNPACPI: fix IRQ flag decoding 2008-05-27 22:49 ` [patch 1/2] PNPACPI: fix IRQ flag decoding Bjorn Helgaas @ 2008-05-28 20:53 ` Rene Herman 0 siblings, 0 replies; 8+ messages in thread From: Rene Herman @ 2008-05-28 20:53 UTC (permalink / raw) To: Bjorn Helgaas Cc: Len Brown, linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Andrew Morton, Tom Jaeger [-- Attachment #1: Type: text/plain, Size: 355 bytes --] On 28-05-08 00:49, Bjorn Helgaas wrote: > When decoding IRQ trigger mode and polarity, it is not enough to mask > by IORESOURCE_BITS because there are now additional bits defined. > For example, if IORESOURCE_IRQ_SHAREABLE was set, we failed to set > *triggering and *polarity at all. Ack. This would also imply the attached is a comment fix... Rene. [-- Attachment #2: pnp-non-isa-specific-ioresource_bits.diff --] [-- Type: text/plain, Size: 1285 bytes --] diff --git a/include/linux/ioport.h b/include/linux/ioport.h index d5d40a9..c6801bf 100644 --- a/include/linux/ioport.h +++ b/include/linux/ioport.h @@ -53,14 +53,14 @@ struct resource_list { #define IORESOURCE_AUTO 0x40000000 #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ -/* ISA PnP IRQ specific bits (IORESOURCE_BITS) */ +/* PnP IRQ specific bits (IORESOURCE_BITS) */ #define IORESOURCE_IRQ_HIGHEDGE (1<<0) #define IORESOURCE_IRQ_LOWEDGE (1<<1) #define IORESOURCE_IRQ_HIGHLEVEL (1<<2) #define IORESOURCE_IRQ_LOWLEVEL (1<<3) #define IORESOURCE_IRQ_SHAREABLE (1<<4) -/* ISA PnP DMA specific bits (IORESOURCE_BITS) */ +/* PnP DMA specific bits (IORESOURCE_BITS) */ #define IORESOURCE_DMA_TYPE_MASK (3<<0) #define IORESOURCE_DMA_8BIT (0<<0) #define IORESOURCE_DMA_8AND16BIT (1<<0) @@ -76,7 +76,7 @@ struct resource_list { #define IORESOURCE_DMA_TYPEB (2<<6) #define IORESOURCE_DMA_TYPEF (3<<6) -/* ISA PnP memory I/O specific bits (IORESOURCE_BITS) */ +/* PnP memory I/O specific bits (IORESOURCE_BITS) */ #define IORESOURCE_MEM_WRITEABLE (1<<0) /* dup: IORESOURCE_READONLY */ #define IORESOURCE_MEM_CACHEABLE (1<<1) /* dup: IORESOURCE_CACHEABLE */ #define IORESOURCE_MEM_RANGELENGTH (1<<2) /* dup: IORESOURCE_RANGELENGTH */ ^ permalink raw reply related [flat|nested] 8+ messages in thread
* [patch 2/2] PNPACPI: fix shareable IRQ encode/decode 2008-05-27 22:49 [patch 0/2] PNPACPI: fix IRQ encoding problems Bjorn Helgaas 2008-05-27 22:49 ` [patch 1/2] PNPACPI: fix IRQ flag decoding Bjorn Helgaas @ 2008-05-27 22:49 ` Bjorn Helgaas 2008-05-28 20:58 ` Rene Herman 1 sibling, 1 reply; 8+ messages in thread From: Bjorn Helgaas @ 2008-05-27 22:49 UTC (permalink / raw) To: Len Brown Cc: linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman, Andrew Morton, Tom Jaeger [-- Attachment #1: pnpacpi-encode-irq --] [-- Type: text/plain, Size: 2742 bytes --] When we encode IRQ resources, we should use the "shareable" flag we got from _PRS rather than guessing based on the IRQ trigger mode. This is based on a patch by Tom Jaeger <ThJaeger@gmail.com>: http://bugzilla.kernel.org/show_bug.cgi?id=9487#c32 Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Index: work11/drivers/pnp/pnpacpi/rsparser.c =================================================================== --- work11.orig/drivers/pnp/pnpacpi/rsparser.c 2008-05-27 15:53:21.000000000 -0600 +++ work11/drivers/pnp/pnpacpi/rsparser.c 2008-05-27 15:58:29.000000000 -0600 @@ -50,14 +50,14 @@ static int irq_flags(int triggering, int flags = IORESOURCE_IRQ_HIGHEDGE; } - if (shareable) + if (shareable == ACPI_SHARED) flags |= IORESOURCE_IRQ_SHAREABLE; return flags; } static void decode_irq_flags(struct pnp_dev *dev, int flags, int *triggering, - int *polarity) + int *polarity, int *shareable) { switch (flags & (IORESOURCE_IRQ_LOWLEVEL | IORESOURCE_IRQ_HIGHLEVEL | IORESOURCE_IRQ_LOWEDGE | IORESOURCE_IRQ_HIGHEDGE)) { @@ -84,6 +84,11 @@ static void decode_irq_flags(struct pnp_ *polarity = ACPI_ACTIVE_HIGH; break; } + + if (flags & IORESOURCE_IRQ_SHAREABLE) + *shareable = ACPI_SHARED; + else + *shareable = ACPI_EXCLUSIVE; } static void pnpacpi_parse_allocated_irqresource(struct pnp_dev *dev, @@ -799,15 +804,12 @@ static void pnpacpi_encode_irq(struct pn struct resource *p) { struct acpi_resource_irq *irq = &resource->data.irq; - int triggering, polarity; + int triggering, polarity, shareable; - decode_irq_flags(dev, p->flags, &triggering, &polarity); + decode_irq_flags(dev, p->flags, &triggering, &polarity, &shareable); irq->triggering = triggering; irq->polarity = polarity; - if (triggering == ACPI_EDGE_SENSITIVE) - irq->sharable = ACPI_EXCLUSIVE; - else - irq->sharable = ACPI_SHARED; + irq->sharable = shareable; irq->interrupt_count = 1; irq->interrupts[0] = p->start; @@ -824,16 +826,13 @@ static void pnpacpi_encode_ext_irq(struc struct resource *p) { struct acpi_resource_extended_irq *extended_irq = &resource->data.extended_irq; - int triggering, polarity; + int triggering, polarity, shareable; - decode_irq_flags(dev, p->flags, &triggering, &polarity); + decode_irq_flags(dev, p->flags, &triggering, &polarity, &shareable); extended_irq->producer_consumer = ACPI_CONSUMER; extended_irq->triggering = triggering; extended_irq->polarity = polarity; - if (triggering == ACPI_EDGE_SENSITIVE) - extended_irq->sharable = ACPI_EXCLUSIVE; - else - extended_irq->sharable = ACPI_SHARED; + extended_irq->sharable = shareable; extended_irq->interrupt_count = 1; extended_irq->interrupts[0] = p->start; -- ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch 2/2] PNPACPI: fix shareable IRQ encode/decode 2008-05-27 22:49 ` [patch 2/2] PNPACPI: fix shareable IRQ encode/decode Bjorn Helgaas @ 2008-05-28 20:58 ` Rene Herman 2008-05-28 22:05 ` Bjorn Helgaas 0 siblings, 1 reply; 8+ messages in thread From: Rene Herman @ 2008-05-28 20:58 UTC (permalink / raw) To: Bjorn Helgaas Cc: Len Brown, linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Andrew Morton, Tom Jaeger On 28-05-08 00:49, Bjorn Helgaas wrote: > When we encode IRQ resources, we should use the "shareable" > flag we got from _PRS rather than guessing based on the > IRQ trigger mode. > > This is based on a patch by Tom Jaeger <ThJaeger@gmail.com>: > http://bugzilla.kernel.org/show_bug.cgi?id=9487#c32 > > Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Not-commented-on-by: Rene Herman <rene.herman@gmail.com> Makes sense patchwise but one would expect that it wasn't that way to start with due to perhaps some/many/most BIOSen not encoding the flag correctly in _PRS. Don't know ACPI though... Rene. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch 2/2] PNPACPI: fix shareable IRQ encode/decode 2008-05-28 20:58 ` Rene Herman @ 2008-05-28 22:05 ` Bjorn Helgaas 2008-05-28 23:14 ` Rene Herman 0 siblings, 1 reply; 8+ messages in thread From: Bjorn Helgaas @ 2008-05-28 22:05 UTC (permalink / raw) To: Rene Herman Cc: Len Brown, linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Andrew Morton, Tom Jaeger On Wednesday 28 May 2008 02:58:47 pm Rene Herman wrote: > On 28-05-08 00:49, Bjorn Helgaas wrote: > > > When we encode IRQ resources, we should use the "shareable" > > flag we got from _PRS rather than guessing based on the > > IRQ trigger mode. > > > > This is based on a patch by Tom Jaeger <ThJaeger@gmail.com>: > > http://bugzilla.kernel.org/show_bug.cgi?id=9487#c32 > > > > Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> > > Not-commented-on-by: Rene Herman <rene.herman@gmail.com> > > Makes sense patchwise but one would expect that it wasn't that way to > start with due to perhaps some/many/most BIOSen not encoding the flag > correctly in _PRS. Don't know ACPI though... I added IORESOURCE_IRQ_SHAREABLE recently: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c32928c579d88acd43981b59e86900da65f40762 and I just didn't notice these places at the time. If I had, I would have made this change then. It's possible we could trip over a BIOS issue, but I don't *think* that's why it's been this way in the past. Bjorn ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch 2/2] PNPACPI: fix shareable IRQ encode/decode 2008-05-28 22:05 ` Bjorn Helgaas @ 2008-05-28 23:14 ` Rene Herman 2008-05-29 14:41 ` Bjorn Helgaas 0 siblings, 1 reply; 8+ messages in thread From: Rene Herman @ 2008-05-28 23:14 UTC (permalink / raw) To: Bjorn Helgaas Cc: Len Brown, linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Andrew Morton, Tom Jaeger On 29-05-08 00:05, Bjorn Helgaas wrote: > On Wednesday 28 May 2008 02:58:47 pm Rene Herman wrote: >> On 28-05-08 00:49, Bjorn Helgaas wrote: >> >>> When we encode IRQ resources, we should use the "shareable" >>> flag we got from _PRS rather than guessing based on the >>> IRQ trigger mode. >>> >>> This is based on a patch by Tom Jaeger <ThJaeger@gmail.com>: >>> http://bugzilla.kernel.org/show_bug.cgi?id=9487#c32 >>> >>> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> >> Not-commented-on-by: Rene Herman <rene.herman@gmail.com> >> >> Makes sense patchwise but one would expect that it wasn't that way to >> start with due to perhaps some/many/most BIOSen not encoding the flag >> correctly in _PRS. Don't know ACPI though... > > I added IORESOURCE_IRQ_SHAREABLE recently: > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c32928c579d88acd43981b59e86900da65f40762 > > and I just didn't notice these places at the time. If I had, > I would have made this change then. It's possible we could > trip over a BIOS issue, but I don't *think* that's why it's > been this way in the past. Ah, I see. Was likely just a matter of originally not having a place to stash it then (by the way, time flies; "recently" is almost two years ago...) Rene. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [patch 2/2] PNPACPI: fix shareable IRQ encode/decode 2008-05-28 23:14 ` Rene Herman @ 2008-05-29 14:41 ` Bjorn Helgaas 0 siblings, 0 replies; 8+ messages in thread From: Bjorn Helgaas @ 2008-05-29 14:41 UTC (permalink / raw) To: Rene Herman Cc: Len Brown, linux-acpi, Adam Belay, Adam M Belay, Li Shaohua, Matthieu Castet, Thomas Renninger, Andrew Morton, Tom Jaeger On Wednesday 28 May 2008 05:14:49 pm Rene Herman wrote: > On 29-05-08 00:05, Bjorn Helgaas wrote: > > > On Wednesday 28 May 2008 02:58:47 pm Rene Herman wrote: > >> On 28-05-08 00:49, Bjorn Helgaas wrote: > >> > >>> When we encode IRQ resources, we should use the "shareable" > >>> flag we got from _PRS rather than guessing based on the > >>> IRQ trigger mode. > >>> > >>> This is based on a patch by Tom Jaeger <ThJaeger@gmail.com>: > >>> http://bugzilla.kernel.org/show_bug.cgi?id=9487#c32 > >>> > >>> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> > >> Not-commented-on-by: Rene Herman <rene.herman@gmail.com> > >> > >> Makes sense patchwise but one would expect that it wasn't that way to > >> start with due to perhaps some/many/most BIOSen not encoding the flag > >> correctly in _PRS. Don't know ACPI though... > > > > I added IORESOURCE_IRQ_SHAREABLE recently: > > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c32928c579d88acd43981b59e86900da65f40762 > > > > and I just didn't notice these places at the time. If I had, > > I would have made this change then. It's possible we could > > trip over a BIOS issue, but I don't *think* that's why it's > > been this way in the past. > > Ah, I see. Was likely just a matter of originally not having a place to > stash it then (by the way, time flies; "recently" is almost two years > ago...) Yep. Time does fly when you're having fun :-) ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2008-05-29 14:41 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-05-27 22:49 [patch 0/2] PNPACPI: fix IRQ encoding problems Bjorn Helgaas 2008-05-27 22:49 ` [patch 1/2] PNPACPI: fix IRQ flag decoding Bjorn Helgaas 2008-05-28 20:53 ` Rene Herman 2008-05-27 22:49 ` [patch 2/2] PNPACPI: fix shareable IRQ encode/decode Bjorn Helgaas 2008-05-28 20:58 ` Rene Herman 2008-05-28 22:05 ` Bjorn Helgaas 2008-05-28 23:14 ` Rene Herman 2008-05-29 14:41 ` Bjorn Helgaas
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox