svn commit: r280878 - head/sys/dev/cxgbe/tom

Navdeep Parhar np at FreeBSD.org
Tue Mar 31 01:22:21 UTC 2015


Author: np
Date: Tue Mar 31 01:22:20 2015
New Revision: 280878
URL: https://svnweb.freebsd.org/changeset/base/280878

Log:
  cxgbe/tom: return rx credits promptly if the socket buffer's low water
  mark cannot be reached because the window advertised to the peer isn't
  wide enough.  While here, tweak the normal credit return too.
  
  MFC after:	1 month

Modified:
  head/sys/dev/cxgbe/tom/t4_cpl_io.c

Modified: head/sys/dev/cxgbe/tom/t4_cpl_io.c
==============================================================================
--- head/sys/dev/cxgbe/tom/t4_cpl_io.c	Tue Mar 31 01:08:51 2015	(r280877)
+++ head/sys/dev/cxgbe/tom/t4_cpl_io.c	Tue Mar 31 01:22:20 2015	(r280878)
@@ -390,19 +390,17 @@ t4_rcvd(struct toedev *tod, struct tcpcb
 		toep->rx_credits += toep->sb_cc - sbused(sb);
 		toep->sb_cc = sbused(sb);
 	}
-	credits = toep->rx_credits;
-	SOCKBUF_UNLOCK(sb);
-
-	if (credits > 0 &&
-	    (credits + 16384 >= tp->rcv_wnd || credits >= 15 * 1024)) {
+	if (toep->rx_credits > 0 &&
+	    (tp->rcv_wnd <= 32 * 1024 || toep->rx_credits >= 64 * 1024 ||
+	    (toep->rx_credits >= 16 * 1024 && tp->rcv_wnd <= 128 * 1024) ||
+	    toep->sb_cc + tp->rcv_wnd < sb->sb_lowat)) {
 
-		credits = send_rx_credits(sc, toep, credits);
-		SOCKBUF_LOCK(sb);
+		credits = send_rx_credits(sc, toep, toep->rx_credits);
 		toep->rx_credits -= credits;
-		SOCKBUF_UNLOCK(sb);
 		tp->rcv_wnd += credits;
 		tp->rcv_adv += credits;
 	}
+	SOCKBUF_UNLOCK(sb);
 }
 
 /*
@@ -1606,6 +1604,14 @@ do_rx_data(struct sge_iq *iq, const stru
 	toep->rx_credits += toep->sb_cc - sbused(sb);
 	sbappendstream_locked(sb, m, 0);
 	toep->sb_cc = sbused(sb);
+	if (toep->rx_credits > 0 && toep->sb_cc + tp->rcv_wnd < sb->sb_lowat) {
+		int credits;
+
+		credits = send_rx_credits(sc, toep, toep->rx_credits);
+		toep->rx_credits -= credits;
+		tp->rcv_wnd += credits;
+		tp->rcv_adv += credits;
+	}
 	sorwakeup_locked(so);
 	SOCKBUF_UNLOCK_ASSERT(sb);
 


More information about the svn-src-head mailing list