1 |
On Thu, May 17, 2012 at 4:56 PM, Paul Hartman |
2 |
<paul.hartman+gentoo@×××××.com> wrote: |
3 |
> [ 6286.707038] ACPI Error: Method parse/execution failed |
4 |
> [\_SB_.PCI0.PIB_.EC0_.SMWR] (Node ffff88007d028348), |
5 |
> AE_AML_INFINITE_LOOP (20120111/psparse-536) |
6 |
> [ 6286.707074] ACPI Error: Method parse/execution failed |
7 |
> [\_SB_.PCI0.PIB_.EC0_.SMSL] (Node ffff88007d028398), |
8 |
> AE_AML_INFINITE_LOOP (20120111/psparse-536) |
9 |
> [ 6286.707096] ACPI Error: Method parse/execution failed |
10 |
> [\_SB_.PCI0.PIB_.EC0_._Q09] (Node ffff88007d028438), |
11 |
> AE_AML_INFINITE_LOOP (20120111/psparse-536) |
12 |
|
13 |
After much trial and error, Googling, reading DSDT for other laptops, |
14 |
and traversing archive.org for old web pages that no longer exist, I |
15 |
think I have figured it out. |
16 |
|
17 |
In the errors above the method SMWR has the real problem, the others |
18 |
shown afterward were the callers and victims of the infinite loop |
19 |
detection in kernel. In the disassembled code for the SMWR method |
20 |
there is a while loop that looks like it could be the cause of an |
21 |
infinite loop: |
22 |
|
23 |
And (SMST, 0x40, SMST) |
24 |
Store (Arg2, SMCM) |
25 |
Store (Arg1, SMAD) |
26 |
Store (Arg0, SMPR) |
27 |
While (LNot (And (SMST, 0xBF, Local1))) |
28 |
{ |
29 |
Sleep (0x02) |
30 |
} |
31 |
|
32 |
This exact same infinite loop condition happened in 2 different |
33 |
methods in my DSDT, both of which gave me ACPI errors and caused |
34 |
battery levels to stop working. |
35 |
|
36 |
After making the change like the one shown below to these two while |
37 |
loops, I have not yet encountered an infinite loop error and my |
38 |
battery reading appears to work properly. Uptime of 2 hours with no |
39 |
ACPI errors yet! |
40 |
|
41 |
And (SMST, 0x40, SMST) |
42 |
Store (Arg2, SMCM) |
43 |
Store (Arg1, SMAD) |
44 |
Store (Arg0, SMPR) |
45 |
Store (0x00, Local3) |
46 |
While (LNot (And (SMST, 0xBF, Local1))) |
47 |
{ |
48 |
Sleep (0x02) |
49 |
Increment (Local3) |
50 |
If (LEqual (Local3, 0x32)) |
51 |
{ |
52 |
And (SMST, 0x40, SMST) |
53 |
Store (Arg2, SMCM) |
54 |
Store (Arg1, SMAD) |
55 |
Store (Arg0, SMPR) |
56 |
Store (0x00, Local3) |
57 |
} |
58 |
} |