Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 13 Oct 2025 20:28:33 GMT
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 0eef2b4a002a - main - tcp: fix a bug in HPTS
Message-ID:  <202510132028.59DKSXC1015036@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=0eef2b4a002aace2ac9cc092bee6e10f6332f5ce

commit 0eef2b4a002aace2ac9cc092bee6e10f6332f5ce
Author:     Nick Banks <nickbanks@netflix.com>
AuthorDate: 2025-10-13 20:27:43 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2025-10-13 20:27:43 +0000

    tcp: fix a bug in HPTS
    
    Reviewed by:    tuexen
    Sponsored by:   Netflix, Inc.
---
 sys/netinet/tcp_hpts.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/sys/netinet/tcp_hpts.c b/sys/netinet/tcp_hpts.c
index fbab912b9a1f..133703a5ede1 100644
--- a/sys/netinet/tcp_hpts.c
+++ b/sys/netinet/tcp_hpts.c
@@ -1445,6 +1445,8 @@ no_one:
 	 * more slots (if we did not hit eno-bufs).
 	 */
 	hpts->p_prev_slot = hpts->p_cur_slot;
+	cts_last_run = cts;
+	cts = tcp_get_usecs(&tv);
 	if (!from_callout || (loop_cnt > max_pacer_loops)) {
 		/*
 		 * Something is serious slow we have
@@ -1465,9 +1467,6 @@ no_one:
 		goto no_run;
 	}
 
-	cts_last_run = tcp_pace.cts_last_ran[hpts->p_num];
-	tcp_pace.cts_last_ran[hpts->p_num] = cts = tcp_get_usecs(&tv);
-
 	hpts->p_cur_slot = cts_to_wheel(cts);
 	if (!seen_endpoint) {
 		/* We saw no endpoint but we may be looping */
@@ -1479,6 +1478,7 @@ no_one:
 		goto again;
 	}
 no_run:
+	tcp_pace.cts_last_ran[hpts->p_num] = cts;
 	/*
 	 * Set flag to tell that we are done for
 	 * any slot input that happens during
@@ -1511,9 +1511,8 @@ no_run:
 		 hpts, hpts->p_prev_slot, hpts->p_cur_slot,
 		 cts_last_run, cts, loop_cnt, wrap_loop_cnt));
 
-	if (from_callout && tcp_hpts_different_slots(cts, cts_last_run)){
-		cts_last_run = tcp_pace.cts_last_ran[hpts->p_num];
-		tcp_pace.cts_last_ran[hpts->p_num] = cts = tcp_get_usecs(&tv);
+	if (from_callout && tcp_hpts_different_slots(cts, cts_last_run)) {
+		cts = tcp_get_usecs(&tv);
 		hpts->p_cur_slot = cts_to_wheel(cts);
 		counter_u64_add(hpts_loops, 1);
 		goto again;


home | help

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