Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 27 Aug 2004 19:07:11 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        pjd@FreeBSD.org
Cc:        freebsd-current@FreeBSD.org
Subject:   Re: Bogus usage of tsleep(9) in USB.
Message-ID:  <20040827.190711.77422828.imp@bsdimp.com>
In-Reply-To: <20040820090006.GX30151@darkness.comp.waw.pl>
References:  <20040820090006.GX30151@darkness.comp.waw.pl>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20040820090006.GX30151@darkness.comp.waw.pl>
            Pawel Jakub Dawidek <pjd@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040827.190711.77422828.imp>