http://bugzilla.kernel.org/show_bug.cgi?id=5534





------- Additional Comments From [EMAIL PROTECTED]  2006-03-01 03:20 -------
OK, I've been tearing out my remaining hair and have spent the last
couple of weekends trying to track down the problem, though I knew
absolutely zilch about ACPI when I started.

However, here is my speculation, based on reading the DSDT, available
at http://acpi.sourceforge.net/dsdt/view.php?id=558, and the kernel
source.

I am hoping that some kernel expert will jump in and tell
me if I'm right or wrong.

Asynchronous notification of thermal events is handled by a
level-triggered interrupt which causes execution of the ACPI control
method _L19 (defined by AML code in the DSDT).  This method enters a
loop which polls the temperature sensor via the SMBus (I assume this
is something similar to
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2408).  If the status
bits of the temperature sensor indicate a trip point has been exceeded
a thermal Notify() event is generated.

At the end of the loop, the control method relinquishes control via a
Sleep() call for 100 microseconds before polling again.  In this
interval, one would hope that the OS would take control and process
the outstanding Notify() events.

HOWEVER, as far as I can tell from the kernel source, both the _L19
interrupt and the Notify handlers are run from a single workqueue in
the thread known as "kacpid".  This means the Notify() events do not
get processed until the _L19 method has completed. They just pile
up in the queue.

Presumably reading the temperature (using cat
/proc/acpi/thermal_zone/*/temperature or acpi -t) causes the queue to
be flushed immediately.

The question is: does the DSDT or the kernel behaviour better
represent the ACPI spec?

According to the ACPI spec: "When a control method does block, the
operating software can initiate or continue the execution of a
different control method.  A control method can only assume that
access to global objects is exclusive for any period the control
method does not block.".  I take this to mean that it would be
acceptable to process the thermal Notify() events as they occur, and
before the interrupt handler _L19 returns.  This would presumably
require a separate kernel thread.

Does this make sense?





------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to