aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ixgbe
diff options
context:
space:
mode:
authorSean Bruno <sbruno@FreeBSD.org>2017-07-25 14:38:30 +0000
committerSean Bruno <sbruno@FreeBSD.org>2017-07-25 14:38:30 +0000
commite0ef5a73069bf8d8ab053e8e780e99b470d227a6 (patch)
tree6500f460850a013c4a12679274265b9a254158cc /sys/dev/ixgbe
parent288ebd813a1fbeb4bb60d7efa73d6827b547af40 (diff)
downloadsrc-e0ef5a73069bf8d8ab053e8e780e99b470d227a6.tar.gz
src-e0ef5a73069bf8d8ab053e8e780e99b470d227a6.zip
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@kev009.com> MFC after: 2 days Differential Revision: https://reviews.freebsd.org/D11712
Notes
Notes: svn path=/head/; revision=321476
Diffstat (limited to 'sys/dev/ixgbe')
-rw-r--r--sys/dev/ixgbe/ix_txrx.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/dev/ixgbe/ix_txrx.c b/sys/dev/ixgbe/ix_txrx.c
index 0597493a7ca7..c634afb62e37 100644
--- a/sys/dev/ixgbe/ix_txrx.c
+++ b/sys/dev/ixgbe/ix_txrx.c
@@ -1593,9 +1593,7 @@ ixgbe_rx_input(struct rx_ring *rxr, struct ifnet *ifp, struct mbuf *m,
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,13 +1897,13 @@ 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?
*/