Panic on post-freeze current with ucom
M. Warner Losh
imp at bsdimp.com
Wed Jun 20 21:57:53 UTC 2007
In message: <4678D5FA.000001.31958 at pantene.yandex.ru>
"R.Mahmatkhanov" <cvs-src at yandex.ru> writes:
: >In message: <46790374.8040903 at yandex.ru>
: > "R.Mahmatkhanov" <cvs-src at yandex.ru> writes:
: >: Good Day.
: >:
: >: I just move to latest -current/i386 after the code freeze. And i catch
: >: 100% reproduceble panic condition. It happens when i plug my mobile
: >: phone to USB port. How it does:
: >:
: >: ucom0: <CURITEL Incorporated CURITEL HX-550C USB Modem, class 2/0, rev
: >: 1.10/0.00, addr 2> on uhub1
: >: Fatal trap 12: page fault while in kernel mode cpuid = 0; apic id = 00
: >: fault virtual address = 0x4
: >: fault code = supervisor read, page not present
: >: instruction pointer = 0x20: 0xc06ca396
: >: stack pointer = 0x28: 0xdd30a760
: >: frame pointer = 0x28: 0xdd30a760
: >: 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 (usb1)
: >: [thread pid 28 tid 100023]
: >: Stopped at usb_get_interface_descruptor+0x6: movl 0x4(%eax), %eax
: >
: >This looks like a null modem dereference. Which driver is causing
: >this?
: >
: >Warner
:
: It's umodem.
doh!
Consider applying
Index: umodem.c
===================================================================
RCS file: /cache/ncvs/src/sys/dev/usb/umodem.c,v
retrieving revision 1.67
diff -c -u -r1.67 umodem.c
cvs diff: conflicting specifications of output style
--- umodem.c 20 Jun 2007 05:10:53 -0000 1.67
+++ umodem.c 20 Jun 2007 21:57:17 -0000
@@ -284,9 +284,6 @@
int i;
struct ucom_softc *ucom;
- id = usbd_get_interface_descriptor(sc->sc_ctl_iface);
- device_printf(self, "iclass %d/%d", id->bInterfaceClass,
- id->bInterfaceSubClass);
ucom = &sc->sc_ucom;
ucom->sc_dev = self;
sc->sc_dev = self;
@@ -296,6 +293,9 @@
sc->sc_udev = dev;
sc->sc_ctl_iface = uaa->iface;
sc->sc_ctl_iface_no = id->bInterfaceNumber;
+ id = usbd_get_interface_descriptor(sc->sc_ctl_iface);
+ device_printf(self, "iclass %d/%d", id->bInterfaceClass,
+ id->bInterfaceSubClass);
umodem_get_caps(dev, &sc->sc_cm_cap, &sc->sc_acm_cap);
and letting me know the results.
Warner
More information about the freebsd-usb
mailing list