Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Sep 2002 08:17:04 -0400
From:      Rahul Siddharthan <rsidd@online.fr>
To:        Julian Elischer <julian@elischer.org>
Cc:        stable@freebsd.org, multimedia@freebsd.org
Subject:   Re: USB audio kernel panics
Message-ID:  <20020913121704.GA286@papagena.rockefeller.edu>
In-Reply-To: <Pine.BSF.4.21.0209122034530.75586-100000@InterJet.elischer.org>
References:  <20020913025715.GA9795@papagena.rockefeller.edu> <Pine.BSF.4.21.0209122034530.75586-100000@InterJet.elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Julian Elischer said on Sep 12, 2002 at 20:36:53:
> > I notice that the USB audio driver has been imported into -STABLE
> > recently.  I've been using this driver for a few months, and get 
> > frequent easily-reproducible kernel panics, which unfortunately I don't
> > have the ability to fix -- but I really don't think the driver is ready
> > for -stable or for 4.7-release.
> > 
> 
> [...]
> can you do a 'list' here?
> as well as "info locals" and
> print anything that looks suspicious?

I don't know what looks suspicious, but here's the whole lot below --
first for the panic I quoted (pulling out the USB cord while busy),
then for a different panic (starting the KDE artsd daemon).

Thanks, I'd definitely like to see this fixed (and if recording
capabilities are added too, I can finally quit rebooting into linux)

Rahul

------------------

First, for what I sent earlier: pulling out the USB cord

------------------

#16 0xc0235813 in uhci_device_isoc_start (xfer=0xc100d300)
    at /usr/src/sys/dev/usb/uhci.c:2097
2097            LIST_INSERT_HEAD(&sc->sc_intrhead, ii, list);
(kgdb) list
2092            if (!ii->isdone) {
2093                    printf("uhci_device_isoc_start: not done, ii=%p\n", ii);
2094            }
2095            ii->isdone = 0;
2096    #endif
2097            LIST_INSERT_HEAD(&sc->sc_intrhead, ii, list);
2098            
2099            splx(s);
2100    
2101            return (USBD_IN_PROGRESS);
(kgdb) info locals
upipe = (struct uhci_pipe *) 0x0
sc = (uhci_softc_t *) 0xc0f9c200
ii = (uhci_intr_info_t *) 0xc0fae8c0
end = (uhci_soft_td_t *) 0x68c840
s = 6867008
i = 0

(kgdb) up
#17 0xc023568f in uhci_device_isoc_transfer (xfer=0xc100d400)
    at /usr/src/sys/dev/usb/uhci.c:1991
1991                    uhci_device_isoc_start(SIMPLEQ_FIRST(&xfer->pipe->queue));
(kgdb) list
1986            /* insert into schedule, */
1987            uhci_device_isoc_enter(xfer);
1988    
1989            /* and put on interrupt list if the pipe wasn't running */
1990            if (!err)
1991                    uhci_device_isoc_start(SIMPLEQ_FIRST(&xfer->pipe->queue));
1992    
1993            return (err);
1994    }
1995    
(kgdb) info locals
xfer = 0xc100d400
err = USBD_NORMAL_COMPLETION

(kgdb) up
#18 0xc023a035 in usbd_transfer (xfer=0xc100d400)
    at /usr/src/sys/dev/usb/usbdi.c:285
285             err = pipe->methods->transfer(xfer);
(kgdb) list
280             /* Copy data if going out. */
281             if (!(xfer->flags & USBD_NO_COPY) && size != 0 && 
282                 !usbd_xfer_isread(xfer))
283                     memcpy(KERNADDR(dmap, 0), xfer->buffer, size);
284     
285             err = pipe->methods->transfer(xfer);
286     
287             if (err != USBD_IN_PROGRESS && err) {
288                     /* The transfer has not been queued, so free buffer. */
289                     if (xfer->rqflags & URQ_AUTO_DMABUF) {
(kgdb) info locals
xfer = 0xc100d400
pipe = 0xc100d200
dmap = (usb_dma_t *) 0xc100d43c
err = 3228685332
size = 0
s = -1058332080


-----------------

Below, a panic generated by starting up KDE's artsd while the USB device
is plugged in securely.

-----------------

#16 0xc029bb93 in trap (frame={tf_fs = 6815760, tf_es = -1056571376, 
      tf_ds = 16, tf_edi = 1, tf_esi = -1056113184, tf_ebp = -1070635404, 
      tf_isp = -1070635452, tf_ebx = -1056138112, tf_edx = 125511200, 
      tf_ecx = -846746112, tf_eax = 2, tf_trapno = 12, tf_err = 0, 
      tf_eip = -1071429335, tf_cs = 8, tf_eflags = 66050, 
      tf_esp = -1057941184, tf_ss = -1056113184})
    at /usr/src/sys/i386/i386/trap.c:466
466                             (void) trap_pfault(&frame, FALSE, eva);

(kgdb) up
#17 0xc0234929 in uhci_idone (ii=0xc10cfde0)
    at /usr/src/sys/dev/usb/uhci.c:1129
1129            for (std = ii->stdstart; std != NULL; std = std->link.std) {
(kgdb) list
1124                    uhci_dump_tds(ii->stdstart);
1125    #endif
1126    
1127            /* The transfer is done, compute actual length and status. */
1128            actlen = 0;
1129            for (std = ii->stdstart; std != NULL; std = std->link.std) {
1130                    nstatus = LE(std->td.td_status);
1131                    if (nstatus & UHCI_TD_ACTIVE)
1132                            break;
1133    
(kgdb) info locals
xfer = 0x68c840
upipe = (struct uhci_pipe *) 0x0
std = (uhci_soft_td_t *) 0x0
status = 1
nstatus = 0
actlen = 194

(kgdb) up
#18 0xc0234864 in uhci_check_intr (sc=0xc0ebb000, ii=0xc10cfde0)
    at /usr/src/sys/dev/usb/uhci.c:1057
1057            uhci_idone(ii);
(kgdb) list
1052                    return;
1053            }
1054    done:
1055    
1056            usb_untimeout(uhci_timeout, ii, ii->timeout_handle);
1057            uhci_idone(ii);
1058    }
1059    
1060    /* Called at splusb() */
1061    void
(kgdb) info locals
ii = (uhci_intr_info_t *) 0xc10cfde0
std = (uhci_soft_td_t *) 0x0
lstd = (uhci_soft_td_t *) 0xc0f11940
status = 0

(kgdb) up
#19 0xc02347cf in uhci_intr (arg=0xc0ebb000) at /usr/src/sys/dev/usb/uhci.c:994
994                     uhci_check_intr(sc, ii);
(kgdb) list
989              * output on a slow console).
990              * We scan all interrupt descriptors to see if any have
991              * completed.
992              */
993             for (ii = LIST_FIRST(&sc->sc_intrhead); ii; ii = LIST_NEXT(ii, list))
994                     uhci_check_intr(sc, ii);
995     
996             DPRINTFN(10, ("%s: uhci_intr: exit\n", USBDEVNAME(sc->sc_bus.bdev)));
997     
998             sc->sc_bus.intr_context--;
(kgdb) info locals
sc = (uhci_softc_t *) 0xc0ebb000
status = -1056113184
ack = 1
ii = (uhci_intr_info_t *) 0xc10cfde0

(kgdb) up
#20 0xc02a6c2d in intr_mux (arg=0xc0714180)
    at /usr/src/sys/i386/isa/intr_machdep.c:582
582                     p->handler(p->argument);
(kgdb) list
577             intrec *p;
578             intrmask_t oldspl;
579     
580             for (p = arg; p != NULL; p = p->next) {
581                     oldspl = splq(p->mask);
582                     p->handler(p->argument);
583                     splx(oldspl);
584             }
585     }
586     
(kgdb) info locals
p = (intrec *) 0xc0714180
oldspl = 4196352


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-multimedia" in the body of the message




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