lkml.org 
[lkml]   [2012]   [Apr]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [v3.4-rc1] ACPI regression bisected
    From
    I tried that patch, for me it works.

    Thanks, Joerg


    Am 3. April 2012 10:11 schrieb Thomas Gleixner <tglx@linutronix.de>:
    > On Mon, 2 Apr 2012, Andi Kleen wrote:
    >
    >> >  ACPI: Added _OSI(Processor Aggregator Device)
    >> >  ACPI: EC: EC description table is found, configuring boot EC
    >> >
    >> > Comparing this with the displays of kernel v3.3 the next expected
    >> > outputs would be:
    >> >
    >> >  ACPI: Interpreter enabled
    >> >  ACPI: (supports S0 S5)
    >> >
    >> >
    >> > I bisected the problem to commit:
    >> > 6fe0d0628245fdcd6fad8b837c81e8f7ebc3364d  "ACPI: Make ACPI interrupt threaded"
    >>
    >> Hmm, that's odd. It should not really change any semantics. I assume you double
    >> checked you hit the right commit?
    >
    > Well it does change the semantics depending on the type of the
    > interrupt. The above commit does:
    >
    > -       if (request_irq(irq, acpi_irq, IRQF_SHARED, "acpi", acpi_irq)) {
    > +       if (request_threaded_irq(irq, NULL, acpi_irq, IRQF_SHARED, "acpi",
    > +                                acpi_irq)) {
    >
    > which creates a threaded handler and the primary handler is the
    > default core one which merily returns IRQ_WAKE_THREAD. Though that
    > leaves the interrupt line unmasked and for level type interrupts this
    > is not working. So you either need a primary handler which masks the
    > irq at the device level or you can add IRQF_ONESHOT to let the core
    > code deal with the mask/unmask business. See patch below.
    >
    > Now the problem with this approach is that if this is really a shared
    > interrupt the core code will either reject this request or the one of
    > the other device which shares that interrupt line, depending which one
    > request first. The reason is that we require all devices to agree on
    > that flag - otherwise a long running/waiting/sleeping threaded handler
    > might block out the other device for a long time.
    >
    > If it's never shared, nothing to worry about. Otherwise you need to
    > provide a primary handler which silences the interrupt at the device
    > level and unmask it when your threaded handler is done.
    >
    > Thanks,
    >
    >        tglx
    >
    > diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
    > index ba14fb9..1b81bc9 100644
    > --- a/drivers/acpi/osl.c
    > +++ b/drivers/acpi/osl.c
    > @@ -607,7 +607,8 @@ acpi_os_install_interrupt_handler(u32 gsi, acpi_osd_handler handler,
    >
    >        acpi_irq_handler = handler;
    >        acpi_irq_context = context;
    > -       if (request_threaded_irq(irq, NULL, acpi_irq, IRQF_SHARED, "acpi",
    > +       if (request_threaded_irq(irq, NULL, acpi_irq,
    > +                                IRQF_SHARED | IRQF_ONESHOT, "acpi",
    >                                 acpi_irq)) {
    >                printk(KERN_ERR PREFIX "SCI (IRQ%d) allocation failed\n", irq);
    >                acpi_irq_handler = NULL;
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-04-12 10:37    [W:2.776 / U:0.980 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site