ACPI fundamental locking problems
I used to be pretty excited about ACPI, until today.
I was reading through the ACPI spec, to see what was required to obtain the IRQ routing table from AML. Continued reading... until I hit a section talking about the ACPI global lock.
events/evxface.c:610:acpi_acquire_global_lock -> events/evmisc.c:337:acpi_ev_acquire_global_lock -> include/platform/acgcc.h:52:ACPI_ACQUIRE_GLOBAL_LOCK
My immediate objections are,
(a) acgcc.h is re-implementing spinlocks in a non-standard, non-portable, and expensive way, and (b) this entire code path is incredibly expensive.
But my fundamental objection is,
we are depending on vendors to get locking right in their ACPI tables. And assume by some magic or design that said locking works with whatever unrelated kernel locking is going on.
It is my initial belief that a smaller info query interface that can parse useful ACPI would be more effective. For times like suspend/resume where we would want to execute control methods, well, there's always the disasm -> write-small-driver cycle. Who knows if this is a realistics proposed solution. But it really scares me to depend on vendors to get locking right.
We'll see what 2.5 will bring...
</soapbox>
Signature · 3 lines
Jeff Garzik | "I respect faith, but doubt is Building 1024 | what gives you an education." MandrakeSoft | -- Wilson Mizner
Quoted 2 lines · Jeff Garzik
I was reading through the ACPI spec, to see what was required to obtain the IRQ routing table from AML.
FWIW, ia64 already does this, if you're looking for the code to do it.
JE