svn commit: r213217 - stable/8/sys/dev/e1000

Pyun YongHyeon yongari at FreeBSD.org
Mon Sep 27 17:50:58 UTC 2010


Author: yongari
Date: Mon Sep 27 17:50:56 2010
New Revision: 213217
URL: http://svn.freebsd.org/changeset/base/213217

Log:
  MFC r211909:
    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

Modified:
  stable/8/sys/dev/e1000/if_em.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Modified: stable/8/sys/dev/e1000/if_em.c
==============================================================================
--- stable/8/sys/dev/e1000/if_em.c	Mon Sep 27 17:49:05 2010	(r213216)
+++ stable/8/sys/dev/e1000/if_em.c	Mon Sep 27 17:50:56 2010	(r213217)
@@ -3843,7 +3843,7 @@ em_setup_receive_ring(struct rx_ring *rx
 		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 *rx
 		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);
 


More information about the svn-src-all mailing list