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
This commit is contained in:
parent
288ebd813a
commit
e0ef5a7306
@ -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 @@ ixgbe_rxeof(struct ix_queue *que)
|
||||
/* 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 @@ ixgbe_rxeof(struct ix_queue *que)
|
||||
|
||||
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?
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user