RE: [patch 12/14] ACPI: Clear GPE before disabling it

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Worse, the GPE is already cleared in the edge case, at the start of the
GPE dispatch function:

    /*
     * If edge-triggered, clear the GPE status bit now.  Note that
     * level-triggered events are cleared after the GPE is serviced.
     */
    if ((GpeEventInfo->Flags & ACPI_GPE_XRUPT_TYPE_MASK) ==
            ACPI_GPE_EDGE_TRIGGERED)
    {
        Status = AcpiHwClearGpe (GpeEventInfo);
        if (ACPI_FAILURE (Status))
        {
            ACPI_EXCEPTION ((AE_INFO, Status,
                "Unable to clear GPE[%2X]", GpeNumber));
            return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
        }
    }




> -----Original Message-----
> From: Moore, Robert
> Sent: Wednesday, August 16, 2006 2:50 PM
> To: 'akpm@xxxxxxxx'; Brown, Len
> Cc: linux-acpi@xxxxxxxxxxxxxxx; william.morrow@xxxxxxx;
> jordan.crouse@xxxxxxx; Yu, Luming
> Subject: RE: [patch 12/14] ACPI: Clear GPE before disabling it
> 
> How does this patch relate to level-triggered GPEs, where we have the
> following comment in the code just after the patch:
> 
>         /*
>          * Execute the method associated with the GPE
>          * NOTE: Level-triggered GPEs are cleared after the method
> completes.
>          */
>         Status = AcpiOsExecute (OSL_GPE_HANDLER,
>                     AcpiEvAsynchExecuteGpeMethod, GpeEventInfo);
> 
> > -----Original Message-----
> > From: akpm@xxxxxxxx [mailto:akpm@xxxxxxxx]
> > Sent: Monday, August 14, 2006 10:38 PM
> > To: Brown, Len
> > Cc: linux-acpi@xxxxxxxxxxxxxxx; akpm@xxxxxxxx;
william.morrow@xxxxxxx;
> > jordan.crouse@xxxxxxx; Yu, Luming; Moore, Robert
> > Subject: [patch 12/14] ACPI: Clear GPE before disabling it
> >
> > From: William Morrow <william.morrow@xxxxxxx>
> >
> > On some BIOSen, the GPE bit will remain set even if it is disabled,
> > resulting in a interrupt storm.  This patch clears the bit before
> > disabling
> > it.
> >
> > Signed-off-by: William Morrow <william.morrow@xxxxxxx>
> > Signed-off-by: Jordan Crouse <jordan.crouse@xxxxxxx>
> > Cc: "Yu, Luming" <luming.yu@xxxxxxxxx>
> > Cc: "Brown, Len" <len.brown@xxxxxxxxx>
> > Cc: "Moore, Robert" <robert.moore@xxxxxxxxx>
> > Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
> > ---
> >
> >  drivers/acpi/events/evgpe.c |   14 +++++++++++++-
> >  1 file changed, 13 insertions(+), 1 deletion(-)
> >
> > diff -puN
drivers/acpi/events/evgpe.c~acpi-clear-gpe-before-disabling-it
> > drivers/acpi/events/evgpe.c
> > --- a/drivers/acpi/events/evgpe.c~acpi-clear-gpe-before-disabling-it
> > +++ a/drivers/acpi/events/evgpe.c
> > @@ -677,10 +677,22 @@ acpi_ev_gpe_dispatch(struct acpi_gpe_eve
> >  	case ACPI_GPE_DISPATCH_METHOD:
> >
> >  		/*
> > -		 * Disable GPE, so it doesn't keep firing before the
method
> > has a
> > +		 * Clear GPE, so it doesn't keep firing before the
method has
> > a
> >  		 * chance to run.
> >  		 */
> > +		status = acpi_hw_clear_gpe(gpe_event_info);
> > +		if (ACPI_FAILURE(status)) {
> > +			ACPI_EXCEPTION((AE_INFO, status,
> > +					"Unable to clear GPE[%2X]",
> > +					gpe_number));
> > +			return_UINT32(ACPI_INTERRUPT_NOT_HANDLED);
> > +		}
> > +		/*
> > +		 * Disable GPE, so it doesn't keep happen again.
> > +		 */
> > +
> >  		status = acpi_ev_disable_gpe(gpe_event_info);
> > +
> >  		if (ACPI_FAILURE(status)) {
> >  			ACPI_EXCEPTION((AE_INFO, status,
> >  					"Unable to disable GPE[%2X]",
> > _
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux