If em(4) failed to allocate RX buffers, do not call panic(9).

Just showing some buffer allocation error is more appropriate
action for drivers. This should fix occasional panic reported on
em(4) when driver encountered resource shortage.

Reviewed by:	jfv
This commit is contained in:
Pyun YongHyeon 2010-08-28 00:16:49 +00:00
parent 6d23f8741b
commit 880a50b513

View file

@ -3843,7 +3843,7 @@ em_setup_receive_ring(struct rx_ring *rxr)
rxbuf = &rxr->rx_buffers[j];
rxbuf->m_head = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
if (rxbuf->m_head == NULL)
panic("RX ring hdr initialization failed!\n");
return (ENOBUFS);
rxbuf->m_head->m_len = MCLBYTES;
rxbuf->m_head->m_flags &= ~M_HASFCS; /* we strip it */
rxbuf->m_head->m_pkthdr.len = MCLBYTES;
@ -3852,8 +3852,11 @@ em_setup_receive_ring(struct rx_ring *rxr)
error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
rxbuf->map, rxbuf->m_head, seg,
&nsegs, BUS_DMA_NOWAIT);
if (error != 0)
panic("RX ring dma initialization failed!\n");
if (error != 0) {
m_freem(rxbuf->m_head);
rxbuf->m_head = NULL;
return (error);
}
bus_dmamap_sync(rxr->rxtag,
rxbuf->map, BUS_DMASYNC_PREREAD);