Author: yongari
Date: Sat Aug 28 00:16:49 2010
New Revision: 211909
URL: http://svn.freebsd.org/changeset/base/211909

Log:
  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:
  head/sys/dev/e1000/if_em.c

Modified: head/sys/dev/e1000/if_em.c
==============================================================================
--- head/sys/dev/e1000/if_em.c  Sat Aug 28 00:09:46 2010        (r211908)
+++ head/sys/dev/e1000/if_em.c  Sat Aug 28 00:16:49 2010        (r211909)
@@ -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);
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to