2006-03-15 08:04:29

by Luming Yu

[permalink] [raw]
Subject: RE: 2.6.16-rc5: known regressions [TP 600X S3, vanilla DSDT]

>So, before I begin that search, which THM0 methods can I safely get
>rid of? All of AC0M, AC1M, PSL, TC1, TC2, TSP, TBL0, MODP, _CRT, AL0,
>PSL? That'll leave MODE, _TMP, _AC0, _SCP, PSV to bisect among.

for example, I would fake these methods in this way:

Method (_TMP, 0, NotSerialized)
{
Return (0x0BB8)
}

Method (_PSV, 0, NotSerialized)
{
Return (0)
}
Execute Method: [\_TZ_.THM0._TMP] (Node c157bf88)
Execute Method: [\_TZ_.THM0._PSV] (Node c157be48)
Execute Method: [\_TZ_.THM0._TC1] (Node c157bdc8)
Execute Method: [\_TZ_.THM0._TC2] (Node c157bd88)
Execute Method: [\_TZ_.THM0._TSP] (Node c157bd48)
Execute Method: [\_TZ_.THM0._AC0] (Node c157bf48)
Execute Method: [\_TZ_.THM0._SCP] (Node c157bec8)
Execute Method: [\_TZ_.THM0._TMP] (Node c157bf88)


2006-03-16 00:03:15

by Sanjoy Mahajan

[permalink] [raw]
Subject: Re: 2.6.16-rc5: known regressions [TP 600X S3, vanilla DSDT]

Your intuition was right. Testing by changing only the DSDT gives
slightly different results than by changing the kernel drivers. So
far the results:

with only THM0 in the DSDT: HANGS (but only on the second sleep, not
the first one, so a slight difference with the kernel-testing data)

with only THM0 and all methods doing nothing (either returning 0 or,
for _TMP, 0xBB8): NO hang

with only THM0 and all methods except _TMP doing nothing, but _TMP
doing its normal code: NO hang [that's the difference between DSDT
and kernel testing]

More bisection coming.

-Sanjoy

`Never underestimate the evil of which men of power are capable.'
--Bertrand Russell, _War Crimes in Vietnam_, chapter 1.

2006-03-16 05:47:53

by Sanjoy Mahajan

[permalink] [raw]
Subject: Re: 2.6.16-rc5: known regressions [TP 600X S3, vanilla DSDT]

Here the test results on the DSDT variants, as a tree. THM0 is the
root (meaning a DSDT with only THM0). -XYZ means 'fake the method XYZ
in THM0, relative to the situation in the parent DSDT':

hang: THM0
okay: -TMP
hang: -PSV
okay: -AC0 (i.e. THM0 methods but no PSV, no AC0)
hang: -SCP
hang: -AC0

The first two results are consistent with the view that TMP is the
problem.

>From the first five results, I convinced myself that TMP needed AC0
around to cause a problem, and vice versa: hang iff (TMP & AC0). But
the last result (-AC0) surprised me. Now I think:
hang iff (TMP & (PSV | AC0)).

The -PSV-AC0 DSDT, which did not hang, seemed close to hanging. After
a few cycles, it became very sluggish and the load was 8.2 on wakeup.
But the sluggishness disappeared after a couple more cycles, and I
couldn't produce a hang (tried two reboots, each with different
permutations of sleep.sh or "echo 1 > THM0/polling_frequency").

The -AC0 DSDT hung upon doing

echo 1 > THM0/polling_frequency ; sleep.sh; sleep.sh

and it got in an endless loop that showed it sluggishly executing
(over and over again) THM0._TMP.

It's probably not coincidence that TMP and AC0 both use the EC.
Although PSV doesn't.

I didn't make any tests on the MODP method. And the TC1, TC2, and TSP
methods seemed to trivial (just returning a constant) that it didn't
seem worth testing them.

I keep the kernels around for each permutation, so I can retest any of
the above, or send the THM0 portions of the .dsl files.

-Sanjoy

`Never underestimate the evil of which men of power are capable.'
--Bertrand Russell, _War Crimes in Vietnam_, chapter 1.

2006-03-16 06:46:31

by Sanjoy Mahajan

[permalink] [raw]
Subject: Re: 2.6.16-rc5: known regressions [TP 600X S3, vanilla DSDT]

I started subdividing the _TMP method, and found that

hangs: -AC0 (as reported in the last email)
okay: -AC0-TMP (also in last email)

but

okay: -AC0-one line of TMP, by which I mean getting rid of the
EC0.UPDT() line below:

Method (_TMP, 0, NotSerialized)
{
\_SB.PCI0.ISA0.EC0.UPDT ()
Store (\_SB.PCI0.ISA0.EC0.TMP0, Local0)
If (LGreater (Local0, 0x0AAC))
{
Return (Local0)
}
Else
{
Return (0x0BB8)
}
}

So that's a small change in which having a line means the hang
happens, and not having the line means it goes away.

By the way, I just checked -AC0-TMP and it was okay (no hang). That
data point is consistent with TMP & (PSV | AC0).

> I found the common code in _PSV and _AC0
> Store (DerefOf (Index (DerefOf (MODP (0x01)), Local1)), Local0)
> Could you just comment out that?

I will try that right now (leaving TMP as in the vanilla DSDT).

-Sanjoy

`Never underestimate the evil of which men of power are capable.'
--Bertrand Russell, _War Crimes in Vietnam_, chapter 1.