diff options
| author | Jack F Vogel <jfv@FreeBSD.org> | 2012-08-06 20:44:05 +0000 |
|---|---|---|
| committer | Jack F Vogel <jfv@FreeBSD.org> | 2012-08-06 20:44:05 +0000 |
| commit | 6aa4d618ca548af42cf133a550385d62637467dd (patch) | |
| tree | 9c1cd71a69d16afca7d53d7d836825a7ee09f864 /sys/dev/e1000 | |
| parent | d265aafb5a271af5b752e757913bedc21aa41501 (diff) | |
Notes
Diffstat (limited to 'sys/dev/e1000')
| -rw-r--r-- | sys/dev/e1000/if_igb.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c index d81bf0c691c2..d147882d016d 100644 --- a/sys/dev/e1000/if_igb.c +++ b/sys/dev/e1000/if_igb.c @@ -100,7 +100,7 @@ int igb_display_debug_stats = 0; /********************************************************************* * Driver version: *********************************************************************/ -char igb_driver_version[] = "version - 2.3.4"; +char igb_driver_version[] = "version - 2.3.5"; /********************************************************************* @@ -961,7 +961,15 @@ igb_mq_start(struct ifnet *ifp, struct mbuf *m) que = &adapter->queues[i]; if (((txr->queue_status & IGB_QUEUE_DEPLETED) == 0) && IGB_TX_TRYLOCK(txr)) { - err = igb_mq_start_locked(ifp, txr, m); + struct mbuf *pm = NULL; + /* + ** Try to queue first to avoid + ** out-of-order delivery, but + ** settle for it if that fails + */ + if (m && drbr_enqueue(ifp, txr->br, m)) + pm = m; + err = igb_mq_start_locked(ifp, txr, pm); IGB_TX_UNLOCK(txr); } else { err = drbr_enqueue(ifp, txr->br, m); @@ -981,7 +989,7 @@ igb_mq_start_locked(struct ifnet *ifp, struct tx_ring *txr, struct mbuf *m) IGB_TX_LOCK_ASSERT(txr); if (((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) || - (txr->queue_status == IGB_QUEUE_DEPLETED) || + (txr->queue_status & IGB_QUEUE_DEPLETED) || adapter->link_active == 0) { if (m != NULL) err = drbr_enqueue(ifp, txr->br, m); |
