PERFORCE change 167179 for review

Fang Wang fangwang at FreeBSD.org
Mon Aug 10 17:06:03 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=167179

Change 167179 by fangwang at fangwang_utobsd on 2009/08/10 17:05:59

	Fix bug.

Affected files ...

.. //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_timer.c#7 edit
.. //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_timer.h#6 edit
.. //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_usrreq.c#9 edit
.. //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_var.h#13 edit

Differences ...

==== //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_timer.c#7 (text+ko) ====

@@ -492,16 +492,7 @@
 	tcp_free_sackholes(tp);
 
 	if (tp->t_rxtshift == 0) {
-		if (tp->uto_flags & TCPUTO_ENABLE &&
-		    tp->uto_flags & TCPUTO_RCVD &&
-		    tp->uto_flags & TCPUTO_CHANGEABLE) {
-			u_int utoval;
-			TCPT_UTOGET(utoval, tp->rcv_uto);
-			tp->t_uto_impl = min(tcp_uto_max,
-			    max(tp->t_uto_adv, max(utoval, tcp_uto_min)));
-			tp->uto_flags &= ~TCPUTO_RCVD;
-			tp->uto_flags |= TCPUTO_IMPL;
-		}
+		TCPT_RESOLVE_UTO(tp);
 		tp->t_uto_left = tp->t_uto_impl / hz;
 	}
 	/*

==== //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_timer.h#6 (text+ko) ====

@@ -93,7 +93,7 @@
 
 #define	TCPTV_UTO_MIN		( 120*hz)	/* min user timeout */
 #define	TCPTV_UTO_MAX		(1020*hz)	/* max user timeout */
-#define	TCPTV_UTO_DEFAULT	( 511*hz)	/* default user timeout */
+#define	TCPTV_UTO_DEFAULT	( 447*hz)	/* default user timeout */
 
 /*
  * Minimum retransmit timer is 3 ticks, for algorithmic stability.
@@ -143,16 +143,6 @@
 		(tv) = (tvmax); \
 } while(0)
 
-/*
-* Get user timeout value(ticks).
-*/
-#define	TCPT_UTOGET(utoval, uto) do { \
-	(utoval) = (uto) >> 1; \
-	if ((uto) & 1) \
-		(utoval) *= 60; \
-	(utoval) *= hz; \
-} while(0)
-
 #ifdef _KERNEL
 
 struct tcp_timer {

==== //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_usrreq.c#9 (text+ko) ====

@@ -1211,7 +1211,8 @@
 		ti->tcpi_options |= TCPI_OPT_WSCALE;
 		ti->tcpi_snd_wscale = tp->snd_scale;
 		ti->tcpi_rcv_wscale = tp->rcv_scale;
-	}
+	}	
+	TCPT_RESOLVE_UTO(tp);
 	if (tp->uto_flags & TCPUTO_IMPL) {
 		ti->tcpi_options |= TCPI_OPT_UTO;
 		ti->tcpi_uto = tp->t_uto_impl / hz;
@@ -1403,8 +1404,7 @@
 						tp->uto_flags &= ~TCPUTO_CHANGEABLE;
 						tp->uto_flags |= TCPUTO_IMPL;
 					}
-				}
-				else
+				} else
 					error = EINVAL;
 			}
 			if ( tu.flags & ENABLE_CHANGE)
@@ -1461,18 +1461,10 @@
 				tu.flags |= ENABLE_UTO;
 			if (tp->uto_flags & TCPUTO_CHANGEABLE)
 				tu.flags |= ENABLE_CHANGE;
-			if (tp->uto_flags & TCPUTO_ENABLE &&
-			    tp->uto_flags & TCPUTO_RCVD &&
-			    tp->uto_flags & TCPUTO_CHANGEABLE) {
-				TCPT_UTOGET(tp->t_uto_impl, tp->rcv_uto);
-				tp->t_uto_impl = min(tcp_uto_max,
-				    max(tp->t_uto_adv, max(tp->t_uto_impl, tcp_uto_min)));
-				tp->uto_flags &= ~TCPUTO_RCVD;
-				tp->uto_flags |= TCPUTO_IMPL;
-			}
+			TCPT_RESOLVE_UTO(tp);
 			if (tp->uto_flags & TCPUTO_IMPL) {
 				tu.flags |= STORE_UTO;
-				tu.uto = tp->t_uto_impl;
+				tu.uto = tp->t_uto_impl / hz;
 			}
 			INP_WUNLOCK(inp);
 			error = sooptcopyout(sopt, &tu, sizeof tu);

==== //depot/projects/soc2009/tcputo/src/sys/netinet/tcp_var.h#13 (text+ko) ====

@@ -251,6 +251,24 @@
 #define	TCPUTO_NEED	0x10	/* user timeout need to be sent */
 #define	TCPUTO_SENDING	0x20	/* user timeout is in the process of sending */
 
+/*
+* Resolve user timeout value(ticks).
+*/
+#define	TCPT_RESOLVE_UTO(tp) do { \
+	if ((tp)->uto_flags & TCPUTO_ENABLE && \
+	    (tp)->uto_flags & TCPUTO_RCVD && \
+	    (tp)->uto_flags & TCPUTO_CHANGEABLE) { \
+		(tp)->t_uto_impl = (tp)->rcv_uto >> 1; \
+		if ((tp)->rcv_uto & 1) \
+			(tp)->t_uto_impl *= 60; \
+		(tp)->t_uto_impl *= hz; \
+		(tp)->t_uto_impl = min(tcp_uto_max, \
+		    max((tp)->t_uto_adv, max((tp)->t_uto_impl, tcp_uto_min))); \
+		(tp)->uto_flags &= ~TCPUTO_RCVD; \
+		(tp)->uto_flags |= TCPUTO_IMPL; \
+	} \
+} while(0)
+
 #ifdef TCP_SIGNATURE
 /*
  * Defines which are needed by the xform_tcp module and tcp_[in|out]put


More information about the p4-projects mailing list