Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 27 Jul 2017 23:01:07 +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: r321631 - head/sys/dev/ixl
Message-ID:  <201707272301.v6RN17oh028568@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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@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);
 }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201707272301.v6RN17oh028568>