NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: port-macppc/54331: macppc MP kernels fail to boot successfully in -current (8.99.49)



>  panic: kernel diagnostic assertion "mutex_owned(&sc->sc_lock)" failed: file "/home/disciple/netbsd-8/src/sys/dev/usb/ohci.c", line 590

i think i see the problem here.

>  Stopped in pid 0.1 (system) at  netbsd:vpanic+0x140:     addi     r4,  r0,  0x0
>  0x00c56a90: at kern_assert+0x68
>  0x00c56ad0: at ohci_reset_std_chain+0x518
>  0x00c56b30: at ohci_device_intr_start+0xd8

ohci_device_intr_start() only takes the lock when not polling, so
this assert needs to be adjusted for that.

can you try this patch?  it probably won't fix the original hang,
but it should fix this issue.  it's against netbsd-8 though i
am fairly sure that the code is the same in -current.


.mrg.


Index: ohci.c
===================================================================
RCS file: /cvsroot/src/sys/dev/usb/ohci.c,v
retrieving revision 1.273.6.4
diff -p -u -r1.273.6.4 ohci.c
--- ohci.c	27 Sep 2018 14:52:26 -0000	1.273.6.4
+++ ohci.c	1 Aug 2019 07:25:46 -0000
@@ -587,7 +587,7 @@ ohci_reset_std_chain(ohci_softc_t *sc, s
 	OHCIHIST_FUNC(); OHCIHIST_CALLED();
 	DPRINTF("start len=%jd", alen, 0, 0, 0);
 
-	KASSERT(mutex_owned(&sc->sc_lock));
+	KASSERT(sc->sc_bus.ub_usepolling || mutex_owned(&sc->sc_lock));
 
 	DPRINTFN(8, "addr=%jd endpt=%jd len=%jd speed=%jd",
 	    xfer->ux_pipe->up_dev->ud_addr,
@@ -1675,7 +1675,7 @@ ohci_device_bulk_done(struct usbd_xfer *
 	int isread =
 	    (UE_GET_DIR(xfer->ux_pipe->up_endpoint->ue_edesc->bEndpointAddress) == UE_DIR_IN);
 
-	KASSERT(mutex_owned(&sc->sc_lock));
+	KASSERT(sc->sc_bus.ub_usepolling || mutex_owned(&sc->sc_lock));
 
 	OHCIHIST_FUNC(); OHCIHIST_CALLED();
 	DPRINTFN(10, "xfer=%#jx, actlen=%jd", (uintptr_t)xfer, xfer->ux_actlen,


Home | Main Index | Thread Index | Old Index