aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJack F Vogel <jfv@FreeBSD.org>2011-01-25 22:55:50 +0000
committerJack F Vogel <jfv@FreeBSD.org>2011-01-25 22:55:50 +0000
commit5c210ab5d58f71e0c90f811674571b355b7d7bd3 (patch)
tree35b48af1455354c0639c611252407fe63172985a
parentf9b9d97e2e1c78951e3236299f00442ef19e4249 (diff)
downloadsrc-5c210ab5d58f71e0c90f811674571b355b7d7bd3.tar.gz
src-5c210ab5d58f71e0c90f811674571b355b7d7bd3.zip
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)
Notes
Notes: svn path=/releng/7.4/; revision=217862
-rw-r--r--sys/dev/e1000/if_em.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 6bc0936ac86d..759a55dc958d 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -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 **m_headp)
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);
}