Date: Tue, 25 Jul 2017 14:38:30 +0000 (UTC) From: Sean Bruno <sbruno@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r321476 - head/sys/dev/ixgbe Message-ID: <201707251438.v6PEcUAC026283@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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@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?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201707251438.v6PEcUAC026283>