panic when removing pccard
Niki Denev
nike_d at cytexbg.com
Mon Jun 25 10:15:38 UTC 2007
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Niki Denev wrote:
> M. Warner Losh wrote:
>> I've done some testing with the recently improved in-tree usb stack,
>> and it doesn't panic for me when I remove a CardBus USB card, both
>> with and without devices. It also does remove the extra /dev/usb*
>> entries properly. I couldn't cause any crashes with the latest
>> -current.
>
>> Warner
>
> Unfortunately it still does panic for me by simply inserting the card
> (Huawei E630 3g card a.k.a Vodafone Mobile Connect), waiting for the
> usb busses to be added and the ucom0 device to be recognized ( it takes
> a few seconds) and then ejecting the card.
> Again the message is :
>
> ucom0: detached
> (null): at uhub2 port 1 (addr 2) disconnected
>
> Fatal trap 12: page fault while in kernel mode
> fault virtual address = 0x400
> fault code = supervisor read, page not presend
> instruction pointer = 0x20:0xc0595b2d
> stack pointer = 0x28:0xd2f4db34
> frame pointer = 0x28:0xd2f4db5c
> code segment = base 0x0, limit 0xfffff, type 0x1b
> = DPL 0, pres 1, def32 1, gran 1
> processor eflags = interrupt enabled, resume, IOPL = 0
> current process = 28 (cbb0 event thread)
> trap number = 12
> panic: page fault
>
> This problem does not exist if i compile my kernel with the HPS Usb Stack.
>
>
I temporarily "fixed" the problem here with this leaking resources :
- --- usb_subr.c Mon Jun 25 13:09:12 2007
+++ usb_subr.c.ugly Mon Jun 25 13:03:42 2007
@@ -11,7 +11,7 @@
*/
#include <sys/cdefs.h>
- -__FBSDID("$FreeBSD: /repoman/r/ncvs/src/sys/dev/usb/usb_subr.c,v 1.94 2007/06/20 05:10:54 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.94 2007/06/20 05:10:54 imp Exp $");
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -1354,6 +1354,10 @@
if (dev->subdevs != NULL) {
DPRINTFN(3,("usb_disconnect_port: disconnect ubdevs\n"));
for (i = 0; dev->subdevs[i]; i++) {
+ if (device_get_nameunit(dev->subdevs[i]) == NULL) {
+ printf("usb_disconnect_port: no subdevice, leaking\n");
+ return;
+ }
printf("%s: at %s", device_get_nameunit(dev->subdevs[i]),
hubname);
if (up->portno != 0)
With this my system survives several card insert/removals only to panic after this with ohci_rem_ed: no ED found :)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.7 (FreeBSD)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGf5XHHNAJ/fLbfrkRAsgRAJ9WTqocfJzHrH+qBBV0H/d6qIyvUQCfaxT/
WE/U0hGPpSBeHcbPR7GdFTo=
=cW/3
-----END PGP SIGNATURE-----
More information about the freebsd-current
mailing list