svn commit: r321631 - head/sys/dev/ixl
Sean Bruno
sbruno at FreeBSD.org
Thu Jul 27 23:01:09 UTC 2017
Author: sbruno
Date: Thu Jul 27 23:01:07 2017
New Revision: 321631
URL: https://svnweb.freebsd.org/changeset/base/321631
Log:
Drop IXL RX lock during TCP_LRO, fixes LOR mahem while holding the RX
queue lock when the uppoer stack is called inside TCP_LRO
Submitted by: Kevin Bowling <kevin.bowling at kev009.com>
Reviewed by: erj
Sponsored by: Limelight Networks
Differential Revision: https://reviews.freebsd.org/D11724
Modified:
head/sys/dev/ixl/ixl_txrx.c
Modified: head/sys/dev/ixl/ixl_txrx.c
==============================================================================
--- head/sys/dev/ixl/ixl_txrx.c Thu Jul 27 22:53:47 2017 (r321630)
+++ head/sys/dev/ixl/ixl_txrx.c Thu Jul 27 23:01:07 2017 (r321631)
@@ -1400,9 +1400,7 @@ ixl_rx_input(struct rx_ring *rxr, struct ifnet *ifp, s
return;
}
#endif
- IXL_RX_UNLOCK(rxr);
(*ifp->if_input)(ifp, m);
- IXL_RX_LOCK(rxr);
}
@@ -1730,7 +1728,9 @@ next_desc:
/* Now send to the stack or do LRO */
if (sendmp != NULL) {
rxr->next_check = i;
+ IXL_RX_UNLOCK(rxr);
ixl_rx_input(rxr, ifp, sendmp, ptype);
+ IXL_RX_LOCK(rxr);
i = rxr->next_check;
}
@@ -1747,6 +1747,8 @@ next_desc:
rxr->next_check = i;
+ IXL_RX_UNLOCK(rxr);
+
#if defined(INET6) || defined(INET)
/*
* Flush any outstanding LRO work
@@ -1762,7 +1764,6 @@ next_desc:
#endif
#endif /* defined(INET6) || defined(INET) */
- IXL_RX_UNLOCK(rxr);
return (FALSE);
}
More information about the svn-src-all
mailing list