Repeatable GPF in 2.0.32

Ian Collier (imc@comlab.ox.ac.uk)
Wed, 26 Nov 1997 15:09:27 +0000 (GMT)


I am running Red Hat 4.2 with a 2.0.32 kernel which is standard except for
an APM patch from http://www.arctic.org/~dgaudet/tp560/linux-apm.patch . I
am having problems with APM. My machine is an IBM ThinkPad 380D (machine
specs and kernel config available on request). In my recent tests of the
suspend/resume facility I've noticed GPFs being reported in the syslog
whenever my PCMCIA modem is installed. Here is a typical session.

First I reboot the machine.

01:00:06 syslogd 1.3-3: restart.
01:00:06 kernel: klogd 1.3-3, log source = /proc/kmsg started.
01:00:06 kernel: Loaded 4672 symbols from /boot/System.map.
01:00:06 kernel: Symbols match kernel version 2.0.32.
01:00:06 kernel: No module symbols loaded.
01:00:06 kernel: Linux version 2.0.32 (root@localhost.localdomain) (gcc version 2.7.2.1) #6 Wed Nov 26 00:25:38 GMT 1997
01:00:06 kernel: Serial driver version 4.13 with no serial options enabled
01:00:06 kernel: tty00 at 0x03f8 (irq = 4) is a 16550A
01:00:06 kernel: APM BIOS version 1.2 Flags 0x03 (Driver version 1.2)
01:00:06 kernel: Entry f75c:0 cseg16 f000 dseg 9fc0 cseg len ffff, dseg len 400
01:00:06 kernel: Connection version 1.1
01:00:06 kernel: AC on line, battery status high, battery life 100
01:00:06 kernel: battery flag 0x01, battery life unknown
01:00:08 kernel: Linux PCMCIA Card Services 2.9.8
01:00:08 kernel: Intel PCIC probe:
01:00:08 kernel: Cirrus PD6729 PCI at 0x3e0 ofs 0x00, 2 sockets
01:00:08 kernel: host opts: [ring] [1/6/16] [1/20/16]
01:00:08 kernel: irq mask (default) = 0x1c98, status change on irq 11
01:00:09 apmd[125]: Version 2.4 (APM BIOS 1.1, Linux driver 1.2)
01:00:09 apmd[125]: Battery: * * * (100% 0:01)
01:00:10 cardmgr[134]: starting, version is 2.9.8
01:00:10 modprobe: Can't locate module binfmt-0
01:00:10 modprobe: Can't locate module binfmt-0
01:00:10 cardmgr[134]: watching 2 sockets
01:00:10 kernel: cs: IO port probe 0x0100-0x03ff: excluding 0x220-0x22f 0x378-0x37f
01:00:10 kernel: cs: IO port probe 0x0a20-0x0a27: clean.
01:00:10 kernel: cs: memory probe 0x0c0000-0x0fffff: excluding 0xc0000-0xc7fff 0xf0000-0xfffff
01:00:10 cardmgr[134]: initializing socket 0
01:00:10 cardmgr[134]: socket 0: Serial or Modem Card
01:00:10 kernel: tty01 at 0x02f8 (irq = 3) is a 16550A
01:00:10 cardmgr[134]: executing: 'insmod /lib/modules/2.0.32/pcmcia/serial_cs.o'
01:00:10 cardmgr[134]: executing: './serial start ttyS1'
01:00:30 syslog: ROOT LOGIN ON tty1

[That was the edited highlights. Full boot messages available on request.]

Next I `cardctl eject' the PCMCIA card, since the machine won't suspend with
it active.

01:01:45 cardmgr[134]: executing: './serial check ttyS1'
01:01:45 cardmgr[134]: shutting down socket 0
01:01:45 cardmgr[134]: executing: './serial stop ttyS1'
01:01:46 kernel: tty01 unloaded
01:01:46 cardmgr[134]: executing: 'rmmod serial_cs'

Then I suspend the machine by pressing Fn-F4. Now the fun starts. I resume
the machine and apmd (or someone) attempts to restart the PCMCIA card, with
hilarious results...

01:02:56 apmd[125]: Resume after 00:00:57 (100% 0:01)
01:02:56 kernel: general protection: 0000
01:02:56 kernel: CPU: 0
01:02:56 kernel: EIP: 0010:[<018214dc>]
01:02:56 kernel: EFLAGS: 00010246
01:02:56 kernel: eax: f000f902 ebx: 00c12018 ecx: 00caf3ac edx: 00000000
01:02:56 kernel: esi: 00000000 edi: 00000001 ebp: 001e3c98 esp: 001e3c74
01:02:56 kernel: ds: 0018 es: 0018 fs: 002b gs: 0018 ss: 0018
01:02:56 kernel: Process swapper (pid: 0, process nr: 0, stackpage=001e1d78)
01:02:56 kernel: Stack: 00001000 00000000 00000020 00c12018 00000400 00000000 00000000 01821434
01:02:56 kernel: 000001c1 001e3cb8 001127a5 00000000 00000001 ffffffff 00000001 00000001
01:02:56 kernel: 00009000 0020d3e0 00117fdb 00003478 00000717 00000000 001e3cfc 001117e7
01:02:56 kernel: Call Trace: [<01821434>] [timer_bh+749/820] [do_bottom_half+59/96] [schedule+63/652] [hard_idle+75/92] [sys_idle+59/112] [system_call+85/124]
01:02:56 cardmgr[134]: initializing socket 0
01:02:56 cardmgr[134]: socket 0: Serial or Modem Card
01:02:57 cardmgr[134]: executing: 'insmod /lib/modules/2.0.32/pcmcia/serial_cs.o'
01:02:57 cardmgr[134]: executing: './serial start ttyS1'
01:02:57 cardmgr[134]: + usage: ./serial [action] [device name]
01:02:57 cardmgr[134]: + actions: start check stop suspend resume
01:02:57 cardmgr[134]: start cmd exited with status 1
01:02:56 kernel: [init+0/612] [start_kernel+429/440]
01:02:56 kernel: Code: ff d0 81 63 1c 2f ff ff ff eb 3c 90 8b 43 54 39 05 fc 72 82
01:02:56 kernel: Aiee, killing interrupt handler
01:02:56 kernel: kfree of non-kmalloced memory: 001e3dc0, next= 00000000, order=0
01:02:56 kernel: kfree of non-kmalloced memory: 001e3db0, next= 00000000, order=0
01:02:56 kernel: kfree of non-kmalloced memory: 001e42c4, next= 00000000, order=0
01:02:56 kernel: idle task may not sleep
01:02:56 last message repeated 4 times
01:02:57 kernel: tty01 at 0x02f8 (irq = 3) is a 16550A
01:02:57 kerneld: error: exit: Identifier removed

Now the PCMCIA card is in a funnny state where it can't be ejected and I'm
getting syntax errors reported in the syslog.

# cardctl eject
ioctl(): Device or resource busy

01:03:36 cardmgr[134]: executing: './serial check ttyS1'
01:03:36 cardmgr[134]: + usage: ./serial [action] [device name]
01:03:36 cardmgr[134]: + actions: start check stop suspend resume
01:03:36 cardmgr[134]: check cmd exited with status 1

# cat /var/run/stab
Socket 0: empty
Socket 1: empty
# cardctl status
Socket 0:
Function 0:
card present, ready
Socket 1:

But the modem still works, although the /dev/modem symlink is missing.

01:08:02 kernel: registered device ppp0
01:08:02 pppd[1167]: pppd 2.2.0 started by root, uid 0
01:08:30 pppd[1167]: Serial connection established.
01:08:31 pppd[1167]: Using interface ppp0
01:08:31 pppd[1167]: Connect: ppp0 <--> /dev/ttyS1
01:08:32 pppd[1167]: Remote message:
01:08:32 pppd[1167]: local IP address 192.76.27.61
01:08:32 pppd[1167]: remote IP address 192.76.27.252

Other effects of the suspend are: the sound driver doesn't work properly,
and the machine is unable to suspend again without rebooting (this happens
even if the PCMCIA card is not present).

imc