Odd APM oops

Mike (mike@oxlug.org)
Mon, 23 Aug 1999 18:28:25 +0100 (BST)


Power off on shutdown is consistently making my box oops as it shuts down
in 2.3.1[34]. This worked fine before 2.3.13.

This is an SMP box.

Since the oops happens at power off, it doesn't get logged, but the
important bits are:

general protection fault: 0000
CPU: 0
EIP: 0010:[<c0107a26>] (this is apm_bios_call+50)
EFLAGS: 00010046
eax: 00005037 ebx: 00000001 ecx: 00000003 adx: 00000000
esi: c4a06000 edi: fee1dead epb: bffffd74 esp: c4a07eb0
ds: 0000 es: 0000 ss: 00`8

The call trace goes:
set_power_state, apm_set_power_sate, apm_power_off, machine_power_off,
sys_reboot, ....

which is hardly suprising.

Dump of assembler code for function apm_bios_call_simple:
0xc01079f4 <apm_bios_call_simple>: subl $0xc,%esp
0xc01079f7 <apm_bios_call_simple+3>: pushl %edi
0xc01079f8 <apm_bios_call_simple+4>: pushl %esi
0xc01079f9 <apm_bios_call_simple+5>: pushl %ebx
0xc01079fa <apm_bios_call_simple+6>: movl 0x20(%esp,1),%ebx
0xc01079fe <apm_bios_call_simple+10>: movl 0x24(%esp,1),%ecx
0xc0107a02 <apm_bios_call_simple+14>: pushf
0xc0107a03 <apm_bios_call_simple+15>: popl 0xc(%esp,1)
0xc0107a07 <apm_bios_call_simple+19>: cli
0xc0107a08 <apm_bios_call_simple+20>: movw %fs,0x14(%esp,1)
0xc0107a0c <apm_bios_call_simple+24>: movw %gs,0x10(%esp,1)
0xc0107a10 <apm_bios_call_simple+28>: movl 0x1c(%esp,1),%eax
0xc0107a14 <apm_bios_call_simple+32>: pushl %ds
0xc0107a15 <apm_bios_call_simple+33>: pushl %es
0xc0107a16 <apm_bios_call_simple+34>: xorl %edx,%edx
0xc0107a18 <apm_bios_call_simple+36>: movw %dx,%ds
0xc0107a1b <apm_bios_call_simple+39>: movw %dx,%es
0xc0107a1e <apm_bios_call_simple+42>: movw %dx,%fs
0xc0107a21 <apm_bios_call_simple+45>: movw %dx,%gs
0xc0107a24 <apm_bios_call_simple+48>: pushl %edi
0xc0107a25 <apm_bios_call_simple+49>: pushl %ebp
0xc0107a26 <apm_bios_call_simple+50>: lcall *%cs:0xc021dc4c
(0xc021dc4c corresponds to apm_bios_entry, as expected).
0xc0107a2d <apm_bios_call_simple+57>: setb %bl
0xc0107a30 <apm_bios_call_simple+60>: popl %ebp
0xc0107a31 <apm_bios_call_simple+61>: popl %edi
0xc0107a32 <apm_bios_call_simple+62>: popl %es
0xc0107a33 <apm_bios_call_simple+63>: popl %ds
0xc0107a34 <apm_bios_call_simple+64>: movl 0x28(%esp,1),%edi
0xc0107a38 <apm_bios_call_simple+68>: movl %eax,(%edi)
0xc0107a3a <apm_bios_call_simple+70>: movw 0x14(%esp,1),%fs
0xc0107a3e <apm_bios_call_simple+74>: movw 0x10(%esp,1),%gs
0xc0107a42 <apm_bios_call_simple+78>: pushl 0xc(%esp,1)
0xc0107a46 <apm_bios_call_simple+82>: popf
0xc0107a47 <apm_bios_call_simple+83>: movzbl %bl,%edx
0xc0107a4a <apm_bios_call_simple+86>: movl %edx,%eax
0xc0107a4c <apm_bios_call_simple+88>: popl %ebx
0xc0107a4d <apm_bios_call_simple+89>: popl %esi
0xc0107a4e <apm_bios_call_simple+90>: popl %edi
0xc0107a4f <apm_bios_call_simple+91>: addl $0xc,%esp
0xc0107a52 <apm_bios_call_simple+94>: ret
0xc0107a53 <apm_bios_call_simple+95>: nop

-- 
Mike <rickettm@ox.compsoc.net>

If it is a Miracle, any sort of evidence will answer, but if it is a Fact, proof is necessary. -- Samuel Clemens

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/