svn commit: r217862 - releng/7.4/sys/dev/e1000

Jack F Vogel jfv at FreeBSD.org
Tue Jan 25 22:55:50 UTC 2011


Author: jfv
Date: Tue Jan 25 22:55:50 2011
New Revision: 217862
URL: http://svn.freebsd.org/changeset/base/217862

Log:
  MFC stable/7 r217723
  
  	- Pieces of the failure path in em_xmit got
  	  mangled, correct it.
  	- local_timer had a leftover TX_UNLOCK without
  	  a matching TX_LOCK in the error path, remove it.
  
  Approved by: re (bz)

Modified:
  releng/7.4/sys/dev/e1000/if_em.c
Directory Properties:
  releng/7.4/sys/   (props changed)
  releng/7.4/sys/cddl/contrib/opensolaris/   (props changed)
  releng/7.4/sys/contrib/dev/acpica/   (props changed)
  releng/7.4/sys/contrib/pf/   (props changed)

Modified: releng/7.4/sys/dev/e1000/if_em.c
==============================================================================
--- releng/7.4/sys/dev/e1000/if_em.c	Tue Jan 25 22:35:35 2011	(r217861)
+++ releng/7.4/sys/dev/e1000/if_em.c	Tue Jan 25 22:55:50 2011	(r217862)
@@ -90,7 +90,7 @@ int	em_display_debug_stats = 0;
 /*********************************************************************
  *  Driver version:
  *********************************************************************/
-char em_driver_version[] = "7.1.8";
+char em_driver_version[] = "7.1.9";
 
 /*********************************************************************
  *  PCI Device ID Table
@@ -1788,14 +1788,23 @@ em_xmit(struct tx_ring *txr, struct mbuf
 		error = bus_dmamap_load_mbuf_sg(txr->txtag, map,
 		    *m_headp, segs, &nsegs, BUS_DMA_NOWAIT);
 
-		if (error) {
+		if (error == ENOMEM) {
+			adapter->no_tx_dma_setup++;
+			return (error);
+		} else if (error != 0) {
 			adapter->no_tx_dma_setup++;
 			m_freem(*m_headp);
 			*m_headp = NULL;
 			return (error);
 		}
+
+	} else if (error == ENOMEM) {
+		adapter->no_tx_dma_setup++;
+		return (error);
 	} else if (error != 0) {
 		adapter->no_tx_dma_setup++;
+		m_freem(*m_headp);
+		*m_headp = NULL;
 		return (error);
 	}
 
@@ -2077,7 +2086,6 @@ hung:
 	    txr->me, txr->tx_avail, txr->next_to_clean);
 	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	adapter->watchdog_events++;
-	EM_TX_UNLOCK(txr);
 	em_init_locked(adapter);
 }
 


More information about the svn-src-all mailing list