Oops with IPMI and ACPI disabled on command line
Hi,
I encounter an Oops with IPMI modules using acpi=ht|off,
I fixed it (only the Oops, IPMI is still not available on the system), by two patches which follows.
Here is the Oops messages for reference:
May 16 11:18:29 localhost kernel: ipmi message handler version v33 May 16 11:18:29 localhost kernel: IPMI System Interface driver version v33, KCS version v33, SMIC version v33, BT version v33 May 16 11:18:29 localhost kernel: ACPI-0166: *** Error: Invalid address flags 8 May 16 11:18:29 localhost kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000004 May 16 11:18:29 localhost kernel: printing eip: May 16 11:18:29 localhost kernel: c01ff793 May 16 11:18:29 localhost kernel: *pde = 3764b001 May 16 11:18:29 localhost kernel: Oops: 0000 [#1] May 16 11:18:29 localhost kernel: SMP May 16 11:18:29 localhost kernel: Modules linked in: ipmi_si ipmi_msghandler af_packet floppy bcm5700 isofs nls_base md ehci_ hcd uhci_hcd usbcore genrtc unix sd_mod qla2300 qla2xxx scsi_transport_fc cciss ata_piix libata May 16 11:18:29 localhost kernel: CPU: 0 May 16 11:18:29 localhost kernel: EIP: 0060:[acpi_get_firmware_table+630/694] Not tainted VLI May 16 11:18:29 localhost kernel: EIP: 0060:[<c01ff793>] Not tainted VLI May 16 11:18:29 localhost kernel: EFLAGS: 00010202 (2.6.11.9-mdvc) May 16 11:18:29 localhost kernel: EIP is at acpi_get_firmware_table+0x276/0x2b6 May 16 11:18:29 localhost kernel: eax: 00000000 ebx: c21602c0 ecx: 00000000 edx: c21602c0 May 16 11:18:29 localhost ipmi: Starting IPMI failed May 16 11:18:29 localhost kernel: esi: 00001001 edi: c02bfc49 ebp: 00000008 esp: f7f11eec May 16 11:18:30 localhost kernel: ds: 007b es: 007b ss: 0068 May 16 11:18:30 localhost kernel: Process modprobe (pid: 2413, threadinfo=f7f11000 task=f744d540) May 16 11:18:30 localhost kernel: Stack: c0119583 f76bff44 00000001 00000000 00000000 00000000 00000008 7fff32c0 May 16 11:18:30 localhost kernel: 00000000 f7f11f40 ffffffed 00000000 00000000 00000000 f8b81453 f8b851f9 May 16 11:18:30 localhost kernel: 00000001 00000008 f7f11f3c 000047d9 00000296 ffffffed f7f11f78 00000000 May 16 11:18:30 localhost kernel: Call Trace: May 16 11:18:30 localhost kernel: [__wake_up_common+63/94] __wake_up_common+0x3f/0x5e May 16 11:18:30 localhost kernel: [<c0119583>] __wake_up_common+0x3f/0x5e May 16 11:18:30 localhost kernel: [pg0+947508307/1069655040] try_init_acpi+0x41/0x2a9 [ipmi_si] May 16 11:18:30 localhost kernel: [<f8b81453>] try_init_acpi+0x41/0x2a9 [ipmi_si] May 16 11:18:30 localhost kernel: [pg0+947512705/1069655040] init_one_smi+0x4e2/0x57d [ipmi_si] May 16 11:18:30 localhost kernel: [<f8b82581>] init_one_smi+0x4e2/0x57d [ipmi_si] May 16 11:18:30 localhost kernel: [vprintk+312/367] vprintk+0x138/0x16f May 16 11:18:30 localhost kernel: [<c011dc62>] vprintk+0x138/0x16f May 16 11:18:30 localhost kernel: [pg0+944169095/1069655040] init_ipmi_si+0x87/0x22f [ipmi_si] May 16 11:18:30 localhost kernel: [<f8852087>] init_ipmi_si+0x87/0x22f [ipmi_si] May 16 11:18:30 localhost kernel: [sys_init_module+371/531] sys_init_module+0x173/0x213 May 16 11:18:30 localhost kernel: [<c01361d9>] sys_init_module+0x173/0x213 May 16 11:18:30 localhost kernel: [sysenter_past_esp+82/117] sysenter_past_esp+0x52/0x75 May 16 11:18:30 localhost kernel: [<c0102fd5>] sysenter_past_esp+0x52/0x75 May 16 11:18:30 localhost kernel: Code: ff 83 c4 0c 85 c0 89 c6 75 1e 8b 54 24 10 8b 42 0c 8b 54 24 48 89 02 eb 0f 45 3b 6c 24 0c e9 4e ff ff ff be 06 00 00 00 8b 43 0c <ff> 70 04 50 e8 16 c5 fe ff 53 e8 a7 c4 fe ff 83 c4 0c 83 7c 24
Regards
Signature · 4 lines
Yann Droneaud <[email protected]> Consulting Engineer Professional Services Mandriva http://mandriva.com/ (previously known as Mandrakesoft)
PATCH 1/2 IPMI and acpi=off|ht : acpi-get-firmware-failure.patch
This patch check that rsdt_info->pointer is not NULL before trying to unmap ACPI tables, which can happen if acpi_tb_get_rsdt_address() failed.
In my case, with ipmi_si_intf module and acpi=ht|off parameter, the call failed because acpi_gbl_table_flags is not initialised, so the address.pointer_type is not setup correctly, leading to message like:
May 16 11:18:29 localhost kernel: ACPI-0166: *** Error: Invalid address flags 8
and rsdt_info->pointer equal to NULL leading to the Oops.
drivers/acpi/tables/tbxfroot.c +3 -1
@@ -313,7 +313,9 @@ acpi_get_firmware_table ( cleanup: -acpi_os_unmap_memory (rsdt_info->pointer, (acpi_size ) rsdt_info->pointer->length); +if (rsdt_info->pointer) { +acpi_os_unmap_memory (rsdt_info->pointer, (acpi_size ) rsdt_info->pointer->length); + }ACPI_MEM_FREE (rsdt_info);if (header) {
Signature · 4 lines
Yann Droneaud <[email protected]> Consulting Engineer Professional Services Mandriva http://mandriva.com/ (previously known as Mandrakesoft)
Re: [ACPI] [PATCH 1/2] IPMI and acpi=off|ht : acpi-get-firmware-failure.patch
Hi,
I am CCing to Robert Moore because is about acpi/tables/tbxfroot.c. This is code from ACPICA
http://developer.intel.com/technology/iapc/acpi/downloads.htm
So we have to wait for the next version of ACPICA, on dmesg we can find it, for example:
ACPI: Subsystem revision 20050211
thanks,
Quoted 28 lines · Yann Droneaud
This patch check that
rsdt_info->pointeris not NULL before trying to unmap ACPI tables, which can happen ifacpi_tb_get_rsdt_address()failed.In my case, with
ipmi_si_intfmodule and acpi=ht|off parameter, the call failed becauseacpi_gbl_table_flagsis not initialised, so the address.pointer_type is not setup correctly, leading to message like:May 16 11:18:29 localhost kernel: ACPI-0166: *** Error: Invalid address flags 8and
rsdt_info->pointerequal to NULL leading to the Oops.drivers/acpi/tables/tbxfroot.c +3
-1@@ -313,7 +313,9 @@ acpi_get_firmware_table ( cleanup: -acpi_os_unmap_memory (rsdt_info->pointer, (acpi_size ) rsdt_info->pointer->length); +if (rsdt_info->pointer) { +acpi_os_unmap_memory (rsdt_info->pointer, (acpi_size ) rsdt_info->pointer->length); + }ACPI_MEM_FREE (rsdt_info);if (header) {Signed-off-by ydroneaud-4qZELD6FgxhWk0Htik3J/[email protected]
Signature · 9 lines
Sérgio M.B. ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click
PATCH 2/2 IPMI and acpi=off|ht : ipmi_si_intf-acpi-disabled
In reply to Yann DroneaudThis patch fix ipmi_si_intf to not use ACPI tables if the ACPI subsystem is disabled.
drivers/char/ipmi/ipmi_si_intf.c +3 -0
@@ -1443,6 +1443,9 @@ static int try_init_acpi(int intf_num, schar *io_type;u8 addr_space; +if (acpi_disabled) +return -ENODEV ; +if (acpi_failure)return -ENODEV ;
Signature · 4 lines
Yann Droneaud <[email protected]> Consulting Engineer Professional Services Mandriva http://mandriva.com/ (previously known as Mandrakesoft)
PATCH 1/1 Fix Oops in IPMI with acpi=off|ht : ipmi_si_intf-acpi-disabled
[The patch was dropped in 2.6.12-rc5-mm2 with bk-acpi although it wasn't related to it.
This patch is rediffed against 2.6.12-rc6, please apply]
This patch fix ipmi_si_intf to not use ACPI tables if the ACPI subsystem is disabled, removing a Oops in ACPI layer (which is really fixed by a previous patch sent by me but not confirmed by ACPI team).
Regards
drivers/char/ipmi/ipmi_si_intf.c +3 -0
@@ -1484,6 +1484,9 @@ static int try_init_acpi(int intf_num, schar *io_type;u8 addr_space; +if (acpi_disabled) +return -ENODEV ; +if (acpi_failure)return -ENODEV ;
Signature · 4 lines
Yann Droneaud <[email protected]> Consulting Engineer Professional Services Mandriva http://mandriva.com/ (previously known as Mandrakesoft)
Yes, I noticed this recently, too. It seems to be an ACPI bug, but I'm not 100% sure. Here's my post to lkml:
In 2.6.12-rc4, I added acpi=off to the kernel command line and it panic-ed in acpi_get_firmware_table, called from the IPMI driver.
The attached patch fixes the problem, but it still spits out ugly "ACPI-0166: *** Error: Invalid address flags 8" errors. So I doubt the patch is right, but maybe it points to something else.
Is it legal to call acpi_get_firmware_table if acpi is off? If not, how can I tell that acpi is off?
-Corey
------------------------------------------------------------------------
drivers/acpi/tables/tbxfroot.c +0 -0
@@ -313,7 +313,9 @@
cleanup:
- acpi_os_unmap_memory (rsdt_info->pointer, (acpi_size) rsdt_info->pointer->length);
+ if (rsdt_info->pointer)
+ acpi_os_unmap_memory (rsdt_info->pointer,
+ (acpi_size) rsdt_info->pointer->length);
ACPI_MEM_FREE (rsdt_info);
if (header) {Quoted 53 lines · Yann Droneaud
Hi,
I encounter an Oops with IPMI modules using acpi=ht|off,
I fixed it (only the Oops, IPMI is still not available on the system), by two patches which follows.Here is the Oops messages for reference:
May 16 11:18:29 localhost kernel: ipmi message handler version v33 May 16 11:18:29 localhost kernel: IPMI System Interface driver version v33, KCS version v33, SMIC version v33, BT version v33 May 16 11:18:29 localhost kernel: ACPI-0166: *** Error: Invalid address flags 8 May 16 11:18:29 localhost kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000004 May 16 11:18:29 localhost kernel: printing eip: May 16 11:18:29 localhost kernel: c01ff793 May 16 11:18:29 localhost kernel: *pde = 3764b001 May 16 11:18:29 localhost kernel: Oops: 0000 [#1] May 16 11:18:29 localhost kernel: SMP May 16 11:18:29 localhost kernel: Modules linked in: ipmi_si ipmi_msghandler af_packet floppy bcm5700 isofs nls_base md ehci_ hcd uhci_hcd usbcore genrtc unix sd_mod qla2300 qla2xxx scsi_transport_fc cciss ata_piix libata May 16 11:18:29 localhost kernel: CPU: 0 May 16 11:18:29 localhost kernel: EIP: 0060:[acpi_get_firmware_table+630/694] Not tainted VLI May 16 11:18:29 localhost kernel: EIP: 0060:[<c01ff793>] Not tainted VLI May 16 11:18:29 localhost kernel: EFLAGS: 00010202 (2.6.11.9-mdvc) May 16 11:18:29 localhost kernel: EIP is at acpi_get_firmware_table+0x276/0x2b6 May 16 11:18:29 localhost kernel: eax: 00000000 ebx: c21602c0 ecx: 00000000 edx: c21602c0 May 16 11:18:29 localhost ipmi: Starting IPMI failed May 16 11:18:29 localhost kernel: esi: 00001001 edi: c02bfc49 ebp: 00000008 esp: f7f11eec May 16 11:18:30 localhost kernel: ds: 007b es: 007b ss: 0068 May 16 11:18:30 localhost kernel: Process modprobe (pid: 2413, threadinfo=f7f11000 task=f744d540) May 16 11:18:30 localhost kernel: Stack: c0119583 f76bff44 00000001 00000000 00000000 00000000 00000008 7fff32c0 May 16 11:18:30 localhost kernel: 00000000 f7f11f40 ffffffed 00000000 00000000 00000000 f8b81453 f8b851f9 May 16 11:18:30 localhost kernel: 00000001 00000008 f7f11f3c 000047d9 00000296 ffffffed f7f11f78 00000000 May 16 11:18:30 localhost kernel: Call Trace: May 16 11:18:30 localhost kernel: [__wake_up_common+63/94] __wake_up_common+0x3f/0x5e May 16 11:18:30 localhost kernel: [<c0119583>] __wake_up_common+0x3f/0x5e May 16 11:18:30 localhost kernel: [pg0+947508307/1069655040] try_init_acpi+0x41/0x2a9 [ipmi_si] May 16 11:18:30 localhost kernel: [<f8b81453>] try_init_acpi+0x41/0x2a9 [ipmi_si] May 16 11:18:30 localhost kernel: [pg0+947512705/1069655040] init_one_smi+0x4e2/0x57d [ipmi_si] May 16 11:18:30 localhost kernel: [<f8b82581>] init_one_smi+0x4e2/0x57d [ipmi_si] May 16 11:18:30 localhost kernel: [vprintk+312/367] vprintk+0x138/0x16f May 16 11:18:30 localhost kernel: [<c011dc62>] vprintk+0x138/0x16f May 16 11:18:30 localhost kernel: [pg0+944169095/1069655040] init_ipmi_si+0x87/0x22f [ipmi_si] May 16 11:18:30 localhost kernel: [<f8852087>] init_ipmi_si+0x87/0x22f [ipmi_si] May 16 11:18:30 localhost kernel: [sys_init_module+371/531] sys_init_module+0x173/0x213 May 16 11:18:30 localhost kernel: [<c01361d9>] sys_init_module+0x173/0x213 May 16 11:18:30 localhost kernel: [sysenter_past_esp+82/117] sysenter_past_esp+0x52/0x75 May 16 11:18:30 localhost kernel: [<c0102fd5>] sysenter_past_esp+0x52/0x75 May 16 11:18:30 localhost kernel: Code: ff 83 c4 0c 85 c0 89 c6 75 1e 8b 54 24 10 8b 42 0c 8b 54 24 48 89 02 eb 0f 45 3b 6c 24 0c e9 4e ff ff ff be 06 00 00 00 8b 43 0c <ff> 70 04 50 e8 16 c5 fe ff 53 e8 a7 c4 fe ff 83 c4 0c 83 7c 24Regards