usbcore deregistering driver stir4200 cause Oops
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Invalid
|
Undecided
|
Unassigned | ||
linux-source-2.6.22 (Ubuntu) |
Won't Fix
|
Undecided
|
Unassigned |
Bug Description
Binary package hint: linux-source-2.6.22
DISTRIB_ID=Ubuntu
DISTRIB_
DISTRIB_
DISTRIB_
kernel 2.6.22-14-generic (package linux-image-
Steps to reproduce:
1. plug SigmaTel 4200 to USB
2. # irattach irda0
# modprobe ircomm_tty
3. $ pilot-xfer --list -p /dev/ircomm0
4. unplug SigmaTel4200 dongle (just remove USB device)
dmesg:
[18355.608000] usb 2-2: new full speed USB device using ohci_hcd and address 3
[18355.820000] usb 2-2: configuration #1 chosen from 1 choice
[18355.828000] SigmaTel STIr4200 IRDA/USB found at address 3, Vendor: 66f, Product: 4200
[18355.828000] /build/
[18355.952000] irlap_change_
[18387.780000] ircomm_
[18387.780000] ircomm_
[18388.524000] irlap_change_
[18390.612000] irlap_change_
[18393.112000] irlap_change_
[18393.744000] irlmp_state_dtr(), Unknown event LM_LAP_
[18393.744000] ircomm_
[18393.744000] ircomm_
[18393.784000] ircomm_
[18393.784000] ircomm_
[18393.784000] ircomm_
[18394.192000] ircomm_
[18394.192000] ircomm_
[18394.192000] ircomm_
[18394.548000] ircomm_
[18394.548000] ircomm_
[18394.548000] ircomm_
[18400.288000] ircomm_tty_close()
[18400.288000] ircomm_
[18400.288000] ircomm_
[18400.288000] ircomm_close()
[18400.336000] irlap_change_
[18462.676000] usb 2-2: USB disconnect, address 3
[18462.724000] usbcore: deregistering interface driver stir4200
[18462.728000] BUG: unable to handle kernel paging request at virtual address f8c66d4e
[18462.728000] printing eip:
[18462.728000] f8c66d4e
[18462.728000] *pde = 351fd067
[18462.728000] *pte = 00000000
[18462.728000] Oops: 0000 [#1]
[18462.728000] SMP
[18462.728000] Modules linked in: ircomm_tty ircomm nls_iso8859_1 vfat fat usb_storage libusual snd_rtctimer vmnet(P) vmmon(P) binfmt_misc rfcomm l2cap bluetooth vboxdrv af_packet cifs irda crc_ccitt iptable_filter ip_tables x_tables ppdev cpufreq_stats cpufreq_ondemand cpufreq_powersave freq_table cpufreq_userspace cpufreq_
[18462.728000] CPU: 1
[18462.728000] EIP: 0060:[<f8c66d4e>] Tainted: P VLI
[18462.728000] EFLAGS: 00010282 (2.6.22-14-generic #1)
[18462.728000] EIP is at 0xf8c66d4e
[18462.728000] eax: c03c5ff4 ebx: d7e06500 ecx: dfa4dea0 edx: 00000000
[18462.728000] esi: f412a800 edi: f8c68f20 ebp: 00000000 esp: dfa4debc
[18462.728000] ds: 007b es: 007b fs: 00d8 gs: 0000 ss: 0068
[18462.728000] Process khubd (pid: 2212, ti=dfa4c000 task=f7c9d9f0 task.ti=dfa4c000)
[18462.728000] Stack: f412a800 f412a818 f8889000 f3f93400 f412a818 f8c68f50 f412a890 f3f93458
[18462.728000] c0260fd8 f412a818 f412a818 c0261443 f412a890 c02608ac f412a818 f412a818
[18462.728000] c025ea10 f412a818 f3f93400 00000001 f3f93544 f888629e f3f9370c 0000001f
[18462.728000] Call Trace:
[18462.728000] [<f8889000>] usb_unbind_
[18462.728000] [<c0260fd8>] __device_
[18462.728000] [<c0261443>] device_
[18462.728000] [<c02608ac>] bus_remove_
[18462.728000] [<c025ea10>] device_
[18462.728000] [<f888629e>] usb_disable_
[18462.728000] [<f88823a7>] usb_disconnect+
[18462.728000] [<f8882a4f>] hub_thread+
[18462.728000] [<c02f20ea>] schedule+
[18462.728000] [<c013bdd0>] autoremove_
[18462.728000] [<f88827e0>] hub_thread+
[18462.728000] [<c013bb12>] kthread+0x42/0x70
[18462.728000] [<c013bad0>] kthread+0x0/0x70
[18462.728000] [<c0105487>] kernel_
[18462.728000] =======
[18462.728000] Code: Bad EIP value.
[18462.728000] EIP: [<f8c66d4e>] 0xf8c66d4e SS:ESP 0068:dfa4debc
[18462.760000] __ircomm_
[18462.760000] ircomm_
After this USB is unusable: nothing about new USB devices in dmesg.
$ lsmod | grep usb
usb_storage 73024 0
libusual 18448 1 usb_storage
scsi_mod 147084 4 usb_storage,
ide_core 116804 2 usb_storage,amd74xx
usbcore 138632 6 stir4200,
$ lsmod | grep ir
stir4200 13976 1
ircomm 23812 0
irda 202300 4 stir4200,ircomm
crc_ccitt 3072 1 irda
usbcore 138632 6 stir4200,
$ sudo rmmod ircomm_tty # ok
$ sudo rmmod irda
ERROR: Module irda is in use by stir4200
$ sudo rmmod stir4200 # seems marked as used but really not.
ERROR: Module stir4200 is in use
lsusb hangs:
$ pidof lsusb
31750
$ ps -p 31750 -o pid,stat,wchan
PID STAT WCHAN
31750 D+ -
$ lsof -p 31750
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
lsusb 31750 alex cwd DIR 8,8 12288 1064993 /home/alex
lsusb 31750 alex rtd DIR 8,5 4096 2 /
lsusb 31750 alex txt REG 8,5 84316 229364 /usr/sbin/lsusb
lsusb 31750 alex mem REG 8,5 1339816 374028 /lib/tls/
lsusb 31750 alex mem REG 8,5 28376 340841 /lib/libusb-
lsusb 31750 alex mem REG 8,5 80504 229234 /usr/lib/
lsusb 31750 alex mem REG 8,5 109148 340717 /lib/ld-2.6.1.so
lsusb 31750 alex 0u CHR 136,6 8 /dev/pts/6
lsusb 31750 alex 1u CHR 136,6 8 /dev/pts/6
lsusb 31750 alex 2u CHR 136,6 8 /dev/pts/6
lsusb 31750 alex 3r DIR 0,14 80 8198 /dev/bus/usb/002
lsusb 31750 alex 4r CHR 189,130 80186 /dev/bus/
Changed in linux-source-2.6.22: | |
status: | New → Confirmed |
I found workaround:
I change (my) scritp /etc/udev/ rules.d/ 55-irda- stir4200. rules to:
#!/bin/sh
killall irattach # kill irattach first and wait
sleep 1
rmmod stir4200
sleep 1
rmmod ircomm_tty
now plug/unplug IRDA dongle don't crash USB subsystem.