RE: [PATCH 70/73] ACPICA: Fix to disable unknown spurious GPEs

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

 



On Thu, 2008-05-22 at 00:56 +0800, Zhang Rui wrote:
> On Wed, 2008-05-21 at 16:28 +0800, Zhang, Rui wrote:
> > Hi, all,
> > 
> > With Yakui's help, we've root caused this problem.
> > 
> > For the GPEs with _Lxx/_Exx methods, Linux updates the enable mask but
> > doesn't enable them in HW in acpi_ev_gpe_initialize.
> > And in acpi_ev_install_fadt_gpes, the GPEs that are shown in _PRW
> > methods but don't have _Lxx/_Exx methods are disabled in
> > acpi_ev_set_type, before 6217 is applied, the acpi_ev_disable_gpe won't
> > write the GPE enable register and everything goes well.
> > But with 6217 applied, acpi_ev_disable_gpe will write the GPE enable
> > register and enable all the _Lxx/_Exx GPEs as a side effect.
> > 
> > And the error message is printed out if a _Lxx/_Exx GPE is fired and try
> > to access EC address space.
> > 
> > Of cource this can be solved by Alexey's patch which installs the EC
> > address space handler before any GPE is enabled in HW.
> > 
> > But there is still one problem with both 6217 and 9916 applied which
> > I'll talk about in the next email. :)
> Please refer to bug 9781 and 10224, where a GPE is used as a wake GPE
> and a RUN_WAKE GPE at the same time,
> 
> Before 6217 and 9916 are applied, Linux disable the wake GPEs in
> acpi_ev_install_fadt_gpes, call _PSW to disable the device's wakeup
> ability in acpi_scan_init, and re-enable the GPE as a RUN_WAKE GPE in
> acpi_button_add.
> 
> But with both 6217 and 9916 applied, Linux enable all the _Lxx/_Exx GPEs
> in acpi_ec_ecdt_probe, and won't disable it until
> acpi_ev_install_fadt_gpes. And this may bring an interrupt storm because
> the _PSW is not called and the wakeup GPE keeps on firing.
What your said is right.  
The _PRW GPE will be disabled and all the other RUN_TIME GPEs will
enabled in the function of acpi_ev_install_fadt_gpes. 
After the patches in bug 9916 is applied, some _PRW GPEs will be enabled
when EC GPE is enabled in the course of EC initialization. Before the
_PRW GPE is disabled again, maybe there will be interrupt storm.
> IMO, we should revert the 9916 patch because Yakui reproduced the
> problem on T61 and confirm it's fixed by a BIOS update, maybe we should
> ask the bug reporter to test the new BIOS as well. :)
Agree.  It is very lucky that there is T61 notebook in hand. The error
can be fixed by upgrading BIOS. 
The patch in bug 9916 expectes that FADT GPEs are enabled after EC is
initialized. In fact this is applicable only for the bios with ECDT
table.(Of course the EC device with _INI object is also OK.). When there
is no ECDT table and the EC device has no _INI object, the FADT GPEs
still are enabled before EC initialization.

> For bug 6217, we should do the following for stray GPEs:
> 1. get the current value of GPE_ENABLE register
> 2. clear the stray GPE bit of GPE_ENABLE register
> 3. write the value back
Agree. It is reasonable that OS clears the corresponding GPE bit of GPE
enable register when the stray GPE is disabled.
> 
> Any comments on this?
> 
> thanks,
> rui
> 
> > 
> > Thanks,
> > Rui
> > 
> > >-----Original Message-----
> > >From: Moore, Robert
> > >Sent: Friday, April 25, 2008 9:57 AM
> > >To: Zhang, Rui; Len Brown
> > >Cc: Alexey Starikovskiy; linux-acpi@xxxxxxxxxxxxxxx
> > >Subject: RE: [PATCH 70/73] ACPICA: Fix to disable unknown spurious GPEs
> > >
> > >Yes, this is my question also.
> > >
> > >I hope Alexey can help with this. I'm very nervous about any code that
> > works
> > >or does not work for reasons unknown. When this happens in the GPE
> > code, I get
> > >more than nervous.
> > >
> > >Bob
> > >
> > >
> > >-----Original Message-----
> > >From: Zhang, Rui
> > >Sent: Thursday, April 24, 2008 6:53 PM
> > >To: Len Brown
> > >Cc: Moore, Robert; Alexey Starikovskiy; linux-acpi@xxxxxxxxxxxxxxx
> > >Subject: Re: [PATCH 70/73] ACPICA: Fix to disable unknown spurious GPEs
> > >
> > >
> > >On Fri, 2008-04-25 at 09:40 +0800, Len Brown wrote:
> > >> oh goody, i thought this one rang a bell...
> > >>
> > >> I'll apply 6217 on top of 9916 (which was already in the test tree,
> > >> but not on the acpica branch)
> > >>
> > >> the error goes away with both applied.
> > >
> > >I still don't see why the error messages pop up if 6217 is applied.
> > >IMO, 6217 won't enable the EC GPE. :(
> > >
> > >thanks,
> > >rui
> > >
> > >> On Wednesday 23 April 2008, Moore, Robert wrote:
> > >> > Alexey,
> > >> >
> > >> > I remember there was some discussion on this, but I'm still not
> > sure
> > >> why
> > >> > the patch for 6217 (Ignore GPE if valid and not enabled) makes the
> > >> other
> > >> > problem (too early enabling of GPEs) apparent. Please explain.
> > >> >
> > >> > Thanks,
> > >> > Bob
> > >> >
> > >> >
> > >> > >-----Original Message-----
> > >> > >From: Alexey Starikovskiy [mailto:astarikovskiy@xxxxxxx]
> > >> > >Sent: Tuesday, April 22, 2008 10:29 PM
> > >> > >To: Len Brown
> > >> > >Cc: linux-acpi@xxxxxxxxxxxxxxx; Moore, Robert; Zhang, Rui
> > >> > >Subject: Re: [PATCH 70/73] ACPICA: Fix to disable unknown spurious
> > >> GPEs
> > >> > >
> > >> > >Len Brown wrote:
> > >> > >> On Saturday 12 April 2008, Len Brown wrote:
> > >> > >>> From: Bob Moore <robert.moore@xxxxxxxxx>
> > >> > >>>
> > >> > >>> Implemented another change to eliminate/suppress spurious or
> > >> > >>> stray GPEs. The AcpiEvDisableGpe function will now disable GPEs
> > >> > >>> that are neither enabled nor disabled -- meaning that the GPE
> > is
> > >> > >>> unknown to the system. This will prevent future interrupts from
> > >> > >>> that GPE. (Zhang Rui) BZ 6217
> > >> > >>>
> > >> > >>> Signed-off-by: Bob Moore <robert.moore@xxxxxxxxx>
> > >> > >>> Signed-off-by: Alexey Starikovskiy <astarikovskiy@xxxxxxx>
> > >> > >>> Signed-off-by: Len Brown <len.brown@xxxxxxxxx>
> > >> > >>> ---
> > >> > >>>  drivers/acpi/events/evgpe.c |    9 ++++++++-
> > >> > >>>  1 files changed, 8 insertions(+), 1 deletions(-)
> > >> > >>>
> > >> > >>> diff --git a/drivers/acpi/events/evgpe.c
> > >> > b/drivers/acpi/events/evgpe.c
> > >> > >>> index 897baed..6940f5d 100644
> > >> > >>> --- a/drivers/acpi/events/evgpe.c
> > >> > >>> +++ b/drivers/acpi/events/evgpe.c
> > >> > >>> @@ -250,7 +250,14 @@ acpi_status acpi_ev_disable_gpe(struct
> > >> > >acpi_gpe_event_info *gpe_event_info)
> > >> > >>>
> > >> > >>>   ACPI_FUNCTION_TRACE(ev_disable_gpe);
> > >> > >>>
> > >> > >>> - if (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK)) {
> > >> > >>> + /*
> > >> > >>> +  * Ignore this if the GPE is valid and not enabled.
> > >> > >>> +  *
> > >> > >>> +  * Flags is only zero if GPE is neither enabled or disabled
> > --
> > >> > it may
> > >> > >>> +  * be a spurious or stray GPE -- disable it in the default
> > >> case
> > >> > >below.
> > >> > >>> +  */
> > >> > >>> + if (gpe_event_info->flags &&
> > >> > >>> +     (!(gpe_event_info->flags & ACPI_GPE_ENABLE_MASK))) {
> > >> > >>>           return_ACPI_STATUS(AE_OK);
> > >> > >>>   }
> > >> > >>>
> > >> > >>
> > >> > >>
> > >> > >> When applied to 2.6.25, the patch above causes ACPI Error
> > >> messages
> > >> > below
> > >> > >on my T61.
> > >> > >> Certainly this is a case of the EC getting an interrupt (GPE
> > x02)
> > >> > before
> > >> > >it has initialized.
> > >> > >>
> > >> > >> Perhaps it breaks the call of acpi_install_gpe_handler() to
> > >> > >acpi_ev_disable_gpe()?
> > >> > >Congratulations, now you too hit this one, patch is already
> > >> there...
> > >> > >It is wroong to enable GPE before handler for it is installed...
> > >> > >http://bugzilla.kernel.org/show_bug.cgi?id=9916
> > >> > >
> > >> > >>
> > >> > >> -Len
> > >> > >>
> > >> > >>
> > >> > >>  PCI: Using MMCONFIG at f0000000 - f3ffffff
> > >> > >>  PCI: Using configuration type 1
> > >> > >>  evgpeblk-0956 [00] ev_create_gpe_block   : GPE 00 to 1F [_GPE]
> > 4
> > >> > regs on
> > >> > >int 0x9
> > >> > >> +ACPI Error (evregion-0316): No handler for Region [ECOR]
> > >> > >(ffff81007d35dda0) [EmbeddedControl] [20070126]
> > >> > >> +ACPI Error (exfldio-0289): Region EmbeddedControl(3) has no
> > >> handler
> > >> > >[20070126]
> > >> > >> +ACPI Error (psparse-0537): Method parse/execution failed
> > >> > >[\_SB_.PCI0.LPC_.EC__.AC__._PSR] (Node ffff81007d364ab0),
> > >> AE_NOT_EXIST
> > >> > >> +ACPI Error (psparse-0537): Method parse/execution failed
> > >> > >[\_SB_.PCI0.LPC_.EC__.HKEY.CKC4] (Node ffff81007d364f48),
> > >> AE_NOT_EXIST
> > >> > >> +ACPI Error (psparse-0537): Method parse/execution failed
> > >> > [\_GPE._L02]
> > >> > >(Node ffff81007d376420), AE_NOT_EXIST
> > >> > >> +ACPI Exception (evgpe-0584): AE_NOT_EXIST, while evaluating GPE
> > >> > method
> > >> > >[_L02] [20070126]
> > >> > >>  evgpeblk-1052 [00] ev_initialize_gpe_bloc: Found 9 Wake,
> > Enabled
> > >> 3
> > >> > >Runtime GPEs in this block
> > >> > >>  ACPI: EC: EC description table is found, configuring boot EC
> > >> > >> -ACPI: EC: non-query interrupt received, switching to interrupt
> > >> mode
> > >> > >> -Completing Region/Field/Buffer/Package
> > >> >
> > >>
> > >initialization:........................................................
> > >> > ....
> > >> > >............................................................
> > >> > >>
> > >> >
> > >>
> > >.......................................................................
> > >> > ....
> > >> >
> > >>
> > >.......................................................................
> > >> > ....
> > >> > >................
> > >> > >> -Initialized 29/33 Regions 138/138 Fields 64/64 Buffers 55/72
> > >> > Packages
> > >> > >(1888 nodes)
> > >> > >> +Completing Region/Field/Buffer/Package
> > >> >
> > >>
> > >initialization:........................................................
> > >> > ....
> > >> > >............................................................
> > >> > >>
> > >> >
> > >>
> > >.......................................................................
> > >> > ....
> > >> >
> > >>
> > >.......................................................................
> > >> > ....
> > >> > >.................
> > >> > >> +Initialized 30/33 Regions 138/138 Fields 64/64 Buffers 55/72
> > >> > Packages
> > >> > >(1888 nodes)
> > >> > >>  Initializing Device/Processor/Thermal objects by executing _INI
> > >> > >methods:.<5>ACPI: BIOS _OSI(Linux) query honored via DMI
> > >> > >> +ACPI: EC: non-query interrupt received, switching to interrupt
> > >> mode
> > >> > >>  .......
> > >> > >>  Executed 8 _INI methods requiring 2 _STA executions (examined
> > 88
> > >> > >objects)
> > >> > >>  ACPI: Interpreter enabled
> > >> >
> > >> >
> > >>
> > >>
> > >>
> > >>
> > 
> > --
> > 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
> 

--
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