Distribution: Mandrake Cooker Hardware Environment: Hitachi laptop, Intel USB controller/PIIX4 chipset Software Environment: pilot-link/kpilot,nodevfs, nohotplug running Problem Description: oops when unloading visor module Steps to reproduce: Plug in your palm (I use a clie T615C). Press the hotsync button. Then modprobe visor module. Press cancel on the palm. rmmod visor and it rmmod segfault. On the other hand, if I modprobe visor first, then press the button, then run kpilot, then it works perfectly. dmesg gives: Unable to handle kernel NULL pointer dereference at virtual address 00000004 printing eip: c01f577b *pde = 00000000 Oops: 0002 CPU: 0 EIP: 0060:[<c01f577b>] Not tainted EFLAGS: 00010246 EIP is at devclass_remove_driver+0x4b/0x90 eax: d0915c04 ebx: c03605c4 ecx: 00000000 edx: 00000000 esi: c0360580 edi: d0915bbc ebp: c42d7f14 esp: c42d7f00 ds: 007b es: 007b ss: 0068 Process rmmod (pid: 20800, threadinfo=c42d6000 task=c74bd2e0) Stack: c030c1ff 00000042 d090fa80 d090fa40 d0915bbc c42d7f30 c01f4fbf d0915bbc 00000042 d0915bc8 d0915bbc d0915d60 c42d7f48 c01f53fa d0915bbc c0358ab8 c0358ab8 00000880 c42d7f54 d09137ce d0915bbc c42d7fbc c012df1e c030c008 Call Trace: [<d090fa80>] usb_serial_bus_type+0x40/0xe0 [usbserial] [<d090fa40>] usb_serial_bus_type+0x0/0xe0 [usbserial] [<d0915bbc>] handspring_device+0x1c/0xe0 [visor] [<c01f4fbf>] bus_remove_driver+0x5f/0xa0 [<d0915bbc>] handspring_device+0x1c/0xe0 [visor] [<d0915bc8>] handspring_device+0x28/0xe0 [visor] [<d0915bbc>] handspring_device+0x1c/0xe0 [visor] [<d0915d60>] +0x0/0x100 [visor] [<c01f53fa>] driver_unregister+0x1a/0x44 [<d0915bbc>] handspring_device+0x1c/0xe0 [visor] [<d09137ce>] +0x1e/0x30 [visor] [<d0915bbc>] handspring_device+0x1c/0xe0 [visor] [<c012df1e>] sys_delete_module+0x1de/0x240 [<c0142317>] sys_munmap+0x57/0x80 [<c010948b>] syscall_call+0x7/0xb Code: 89 4a 04 89 11 89 40 04 89 47 48 89 3c 24 e8 42 fe ff ff 89 I use a vanilla 2.5.65, modules-init-tools 0.9.9.
Why are you trying to unload the module? What happens if you do not unload it, but just try to sync again?
If I do the steps in the wrong order as explained above, then the hotsync fails, complaining "ERROR: No such device (19)" device. If I sync again it complains with the same error message. Then I tried to unload the module and reload it... :)
Actually, the problem is the same if I hotsync twice. The first time it works, the second it doesn't. So I unload (without oops) the module. Then I load it again. Try to hotsync, it still doesn't work. The I remove the module and kaboom. For the whole session, dmesg gives me: hub 1-0:0: debounce: port 2: delay 100ms stable 4 status 0x101 hub 1-0:0: new USB device on port 2, assigned address 2 usb 1-2: palm_os_4_probe - error -32 getting connection info usbserial 1-2:0: Handspring Visor / Treo / Palm 4.0 / Cli
Ok, so without unloading the driver, it works, right? My suggestion would be to not unload the driver until way after the device has been removed from the system (there's still a module reference count missing on the usb packets...)
Sure it works, but only _once_. After this, it doesn't work anymore (that's why I was trying to reload the module). Which means I have to reboot everytime I do a hotsync with my palm :( Will try tomorrow to unload the device after some long delay. I don't seem to have this problem with 2.4 (I do manage to make it oops as well, but removing the module in 2.4 is not necessary, so it's less disturbing). Thanks.
Does this still happen on 2.5.69?
Hi, Sorry for the delay, In kernel 2.5.69 it's better ... and worse :( Better because the module can be load and unloaded at will, without oopsing. Worse because the visor module doesn't work _at all_ not even once like it used to do with 2.5.65 when I submitted this bug.
Does this still happen on 2.5.73?