Re: [PATCH] Re: [BUG] acpi_hw_[enable|disable]_non_wakeup_gpe_block

Bruno Ducrot
2004-02-15T20:07:24Z

On Sun, Feb 15, 2004 at 04:47:19PM +0100, Alexander Malysh wrote:
> Hi again,
>
> after some more testing, I have found a cause for this.
> We disable non wakeup gpes (and store those values) with interrupts disabled,
> but enable those with interrupts enabled which were already overwritten while
> handling of wakeup interrupt[1]. So we must restore non wakeup gpes as long
> interrupts are disabled. Attached patch should fix it.
>

> --- linux-2.6.2-linus/drivers/acpi/hardware/hwsleep.c~orig 2004-02-15 16:31:50.928455040 +0100
> +++ linux-2.6.2-linus/drivers/acpi/hardware/hwsleep.c 2004-02-15 16:35:30.030146520 +0100
> @@ -342,6 +342,12 @@
>
> } while (!in_value);
>
> + /* Enable non_wakeup_gpes as long interrupts are disabled */
> + status = acpi_hw_enable_non_wakeup_gpes ();
> + if (ACPI_FAILURE (status)) {
> + return_ACPI_STATUS (status);
> + }
> +
> return_ACPI_STATUS (AE_OK);

First, this path is *never reached* for S3 and S4, so you break somehow S3
and S4 in fact...

Second, the path for which you remove the enable gpes is supposed to be
run with interrupt *dissabled*. If that is not the case, then it is the
real bug in fact.

--
Bruno Ducrot

-- Which is worse: ignorance or apathy?
-- Don't know. Don't care.