ACPI acpi_scan_rsdp() breaks some PCs by not honouring ACPI specification
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux-source-2.6.22 (Ubuntu) |
Fix Released
|
High
|
Unassigned |
Bug Description
Binary package hint: linux-source-2.6.22
I've been debugging an ACPI-disabled-
[ 0.000000] DMI 2.3 present.
[ 0.000000] ACPI: RSDP 000EC2D0, 0014 (r0 Acer )
[ 0.000000] ACPI: 00000000, F000FF5A (r195 Zÿ F000FF57 Zÿ F000FEA5)
[ 27.751333] ACPI: Core revision 20070126
[ 27.751501] ACPI Exception (tbxface-0618): AE_NO_ACPI_TABLES, While loading namespace from ACPI tables [20070126]
[ 27.751654] ACPI: Unable to load the System Description Tables
[ 27.783596] ACPI: Interpreter disabled.
There are several references to this problem around the net and a couple of invasive kernel patches that don't address the cause.
I wrote a user-space application that scans memory using the method described in the ACPI specifications. It reports:
$ sudo ./find-RSDP
find-RSDP version 0.1 © 2007 TJ http://
Licensed on the terms of GPL version 3
Finds ACPI Root System Descriptor Pointer (for supported BIOS's only).
0x00000000FFFFFFFF Memory size
0x00000000000EC2D0 "RSD PTR "
0x00000000000FE030 "RSD PTR " RSDT @ 0FFE0000 OEM: "Acer " sum: 0
0x0000000005FBFE10 "RSD PTR "
Unfortunately the kernel function arch/i386/
Because this series of BIOSs happen to have multiple instances of "RSD PTR " and an invalid instance appears first in memory, the kernel tries to use an invalid pointer to the RSDT, leading to the problems.
I've prepared a simple patch that calculates the checksum and only returns an RSDT pointer if the checksum == 0.
Related branches
Changed in linux-source-2.6.22 (Ubuntu): | |
assignee: | Registry Administrators (registry) → nobody |
I am submitting this patch to the kernel linux-acpi mailing list for inclusion in the mainline.