On Fri, May 22, 2015 at 19:35 +0200, mxb wrote: > > Hey, > got a panic as of todays ‘cvs up’ > trace below > > panic: vmxnet3_rxintr: NULL ring->m[44] > Stopped at Debugger+0x9: leave > RUN AT LEAST 'trace' AND 'ps' AND INCLUDE OUTPUT WHEN REPORTING THIS PANIC! > IF RUNNING SMP, USE 'mach ddbcpu <#>' AND 'trace' ON OTHER PROCESSORS, TOO. > DO NOT EVEN BOTHER REPORTING THIS WITHOUT INCLUDING THAT INFORMATION! > ddb{0}> Debugger() at Debugger+0x9 > panic() at panic+0xfe > vmxnet3_rxintr() at vmxnet3_rxintr+0x284 > vmxnet3_intr() at vmxnet3_intr+0x4a > intr_handler() at intr_handler+0x67 > Xintr_ioapic_level10() at Xintr_ioapic_level10+0xcd > --- interrupt --- > Xspllower() at Xspllower+0xe > if_downall() at if_downall+0x9b > boot() at boot+0xe4 > reboot() at reboot+0x26 > sys_reboot() at sys_reboot+0x5e > syscall() at syscall+0x297 > --- syscall (number 55) --- > end of kernel > end trace frame: 0x7f7ffffd5858, count: -12 > 0x184f48704eda: > ddb{0}> rebooting... > OpenBSD 5.7-current (GENERIC.MP) #0: Fri May 22 16:30:54 CEST 2015 > > //mxb >
vmx doesn't check if it's wasn't stopped before calling rx/tx interrupt routines... the patch below should fix it up. not entirely sure why do they need to re-enable the interrupt every time, but i'm pretty positive you don't want that if you're !IFF_RUNNING. diff --git sys/dev/pci/if_vmx.c sys/dev/pci/if_vmx.c index 925a977..989cae1 100644 --- sys/dev/pci/if_vmx.c +++ sys/dev/pci/if_vmx.c @@ -588,21 +588,24 @@ vmxnet3_disable_all_intrs(struct vmxnet3_softc *sc) int vmxnet3_intr(void *arg) { struct vmxnet3_softc *sc = arg; + struct ifnet *ifp = &sc->sc_arpcom.ac_if; if (READ_BAR1(sc, VMXNET3_BAR1_INTR) == 0) return 0; if (sc->sc_ds->event) vmxnet3_evintr(sc); - vmxnet3_rxintr(sc, &sc->sc_rxq[0]); - vmxnet3_txintr(sc, &sc->sc_txq[0]); #ifdef VMXNET3_STAT vmxstat.intr++; #endif - vmxnet3_enable_intr(sc, 0); + if (ifp->if_flags & IFF_RUNNING) { + vmxnet3_rxintr(sc, &sc->sc_rxq[0]); + vmxnet3_txintr(sc, &sc->sc_txq[0]); + vmxnet3_enable_intr(sc, 0); + } return 1; } void vmxnet3_evintr(struct vmxnet3_softc *sc)