diff options
author | Jack F Vogel <jfv@FreeBSD.org> | 2013-08-13 00:25:39 +0000 |
---|---|---|
committer | Jack F Vogel <jfv@FreeBSD.org> | 2013-08-13 00:25:39 +0000 |
commit | 83cef45266a49c82dcbb3a44c2321570d628778b (patch) | |
tree | d5292fb5851302d75a27a5122c9f20c1fa608103 | |
parent | c68534f1d5bab4ad466384c4fb9bb2956811e8b9 (diff) | |
download | src-83cef45266a49c82dcbb3a44c2321570d628778b.tar.gz src-83cef45266a49c82dcbb3a44c2321570d628778b.zip |
Alter the mq_start routine to do a TRYLOCK and call to the locked routine
rather than just queueing. The former code was an attempt at getting
UDP performance up, but there have been customer reports of problems with it,
so the ixgbe approach seems the best solution for now.
Notes
Notes:
svn path=/head/; revision=254264
-rw-r--r-- | sys/dev/e1000/if_igb.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c index 65f4205af6cb..6887bcf35533 100644 --- a/sys/dev/e1000/if_igb.c +++ b/sys/dev/e1000/if_igb.c @@ -972,7 +972,13 @@ igb_mq_start(struct ifnet *ifp, struct mbuf *m) que = &adapter->queues[i]; err = drbr_enqueue(ifp, txr->br, m); - taskqueue_enqueue(que->tq, &txr->txq_task); + if (err) + return (err); + if (IGB_TX_TRYLOCK(txr)) { + err = igb_mq_start_locked(ifp, txr); + IGB_TX_UNLOCK(txr); + } else + taskqueue_enqueue(que->tq, &txr->txq_task); return (err); } |