svn commit: r321476 - head/sys/dev/ixgbe
Sean Bruno
sbruno at FreeBSD.org
Tue Jul 25 14:38:31 UTC 2017
Author: sbruno
Date: Tue Jul 25 14:38:30 2017
New Revision: 321476
URL: https://svnweb.freebsd.org/changeset/base/321476
Log:
Drop ixgbe RX lock during TCP_LRO processing. This eliminates a "storm"
of LOR detection and a bit of lock release/acquire collision when using LRO.
Submitted by: Kevin Bowling <kevin.bowling at kev009.com>
MFC after: 2 days
Differential Revision: https://reviews.freebsd.org/D11712
Modified:
head/sys/dev/ixgbe/ix_txrx.c
Modified: head/sys/dev/ixgbe/ix_txrx.c
==============================================================================
--- head/sys/dev/ixgbe/ix_txrx.c Tue Jul 25 14:35:44 2017 (r321475)
+++ head/sys/dev/ixgbe/ix_txrx.c Tue Jul 25 14:38:30 2017 (r321476)
@@ -1593,9 +1593,7 @@ ixgbe_rx_input(struct rx_ring *rxr, struct ifnet *ifp,
if (tcp_lro_rx(&rxr->lro, m, 0) == 0)
return;
}
- IXGBE_RX_UNLOCK(rxr);
(*ifp->if_input)(ifp, m);
- IXGBE_RX_LOCK(rxr);
} /* ixgbe_rx_input */
/************************************************************************
@@ -1880,7 +1878,9 @@ next_desc:
/* Now send to the stack or do LRO */
if (sendmp != NULL) {
rxr->next_to_check = i;
+ IXGBE_RX_UNLOCK(rxr);
ixgbe_rx_input(rxr, ifp, sendmp, ptype);
+ IXGBE_RX_LOCK(rxr);
i = rxr->next_to_check;
}
@@ -1897,12 +1897,12 @@ next_desc:
rxr->next_to_check = i;
+ IXGBE_RX_UNLOCK(rxr);
+
/*
* Flush any outstanding LRO work
*/
tcp_lro_flush_all(lro);
-
- IXGBE_RX_UNLOCK(rxr);
/*
* Still have cleaning to do?
More information about the svn-src-all
mailing list