DF-3758 / fix.diff
--- a/sys/dev/netif/de/if_de.c +++ b/sys/dev/netif/de/if_de.c @@ -3131,11 +3131,17 @@ tulip_rx_intr(tulip_softc_t *sc) error = bus_dmamap_load_mbuf(ri->ri_data_tag, *nextout->di_map, ms, tulip_dma_map_rxbuf, nextout->di_desc, BUS_DMA_NOWAIT); if (error) { device_printf(sc->tulip_dev, "unable to load rx map, error = %d\n", error); - panic("tulip_rx_intr"); /* XXX */ + /* + * Back off instead of panicking: drop this chain and let + * the watchdog retry replenishing, exactly like the + * m_getcl() failure path above. + */ + m_freem(ms); + ms = NULL; + fillok = 0; + sc->tulip_flags |= TULIP_RXBUFSLOW; + break; } nextout->di_desc->d_status = TULIP_DSTS_OWNER; |