Re: Bogus usage of tsleep(9) in USB.

From: M. Warner Losh <imp_at_bsdimp.com>
Date: Fri, 27 Aug 2004 19:07:11 -0600 (MDT)
In message: <20040820090006.GX30151_at_darkness.comp.waw.pl>
            Pawel Jakub Dawidek <pjd_at_freebsd.org> writes:
: There are many calls to tsleep(9) with no timeout in our USB code.
: As you all know, it is not permitted and we have KASSERT() for this:
: 
:         KASSERT(timo != 0 || mtx_owned(&Giant) || mtx != NULL,
:             ("sleeping without a mutex"));
: 
: ehci.c:2441:    tsleep(&sc->sc_softwake, PZERO, "ehciab", 0);
: ohci.c:2288:    tsleep(&sc->sc_softwake, PZERO, "ohciab", 0);
: ubser.c:882:            tsleep(&sc->sc_opening, PRIBIO, "ubser_op", 0);
: ucom.c:275:             tsleep(&sc->sc_opening, PRIBIO, "ucomop", 0);
: ugen.c:633:                     error = tsleep(sce, PZERO | PCATCH, "ugenri", 0);
: ugen.c:697:                     error = tsleep(sce, PZERO | PCATCH, "ugenri", 0);
: uhci.c:1982:    tsleep(&sc->sc_softwake, PZERO, "uhciab", 0);
: uhid.c:496:             error = tsleep(&sc->sc_q, PZERO | PCATCH, "uhidrea", 0);
: ums.c:639:              error = tsleep(sc, PZERO | PCATCH, "umsrea", 0);
: usb.c:456:                      tsleep(&usb_all_tasks, PWAIT, "usbtsk", 0);
: usb.c:534:              error = tsleep(&usb_events, PZERO | PCATCH, "usbrea", 0);
: usbdi.c:342:            tsleep(xfer, PRIBIO, "usbsyn", 0);
: usbdi_util.c:435:       error = tsleep(xfer, PZERO | PCATCH, lbl, 0);
: usbdi_util.c:477:       error = tsleep(xfer, PZERO | PCATCH, lbl, 0);
: 
: I saw only panic on tsleep(9) from usbdi.c, so I know for sure we don't
: hold Giant there.

Most of the usb stack will be called with GIANT held, which is likely
why you haven't seen more panics.  I'd suspect that the panic you are
seeing from usbdi() due to other bogosity.

Warner
Received on Fri Aug 27 2004 - 23:07:23 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:09 UTC