Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 May 2023 12:48:29 GMT
From:      Mateusz Guzik <mjg@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: e0c86f5c2feb - main - td: line up with other clean up in thread_reap_domain
Message-ID:  <202305201248.34KCmTGC034042@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by mjg:

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

commit e0c86f5c2feb95d687eeedb0eafe14c3f76bff41
Author:     Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2022-08-19 19:51:53 +0000
Commit:     Mateusz Guzik <mjg@FreeBSD.org>
CommitDate: 2023-05-20 12:48:15 +0000

    td: line up with other clean up in thread_reap_domain
    
    NFC
---
 sys/kern/kern_thread.c | 55 +++++++++++++++++++++++++++++++++++++++++---------
 1 file changed, 45 insertions(+), 10 deletions(-)

diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index 585531d3ab3a..67712450c128 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -338,6 +338,46 @@ tidbatch_final(struct tidbatch *tb)
 	}
 }
 
+/*
+ * Batching thread count free, for consistency
+ */
+struct tdcountbatch {
+	int n;
+};
+
+static void
+tdcountbatch_prep(struct tdcountbatch *tb)
+{
+
+	tb->n = 0;
+}
+
+static void
+tdcountbatch_add(struct tdcountbatch *tb, struct thread *td __unused)
+{
+
+	tb->n++;
+}
+
+static void
+tdcountbatch_process(struct tdcountbatch *tb)
+{
+
+	if (tb->n == 32) {
+		thread_count_sub(tb->n);
+		tb->n = 0;
+	}
+}
+
+static void
+tdcountbatch_final(struct tdcountbatch *tb)
+{
+
+	if (tb->n != 0) {
+		thread_count_sub(tb->n);
+	}
+}
+
 /*
  * Prepare a thread for use.
  */
@@ -589,7 +629,7 @@ thread_reap_domain(struct thread_domain_data *tdd)
 	struct tidbatch tidbatch;
 	struct credbatch credbatch;
 	struct limbatch limbatch;
-	int tdcount;
+	struct tdcountbatch tdcountbatch;
 
 	/*
 	 * Reading upfront is pessimal if followed by concurrent atomic_swap,
@@ -612,7 +652,7 @@ thread_reap_domain(struct thread_domain_data *tdd)
 	tidbatch_prep(&tidbatch);
 	credbatch_prep(&credbatch);
 	limbatch_prep(&limbatch);
-	tdcount = 0;
+	tdcountbatch_prep(&tdcountbatch);
 
 	while (itd != NULL) {
 		ntd = itd->td_zombie;
@@ -621,17 +661,14 @@ thread_reap_domain(struct thread_domain_data *tdd)
 		tidbatch_add(&tidbatch, itd);
 		credbatch_add(&credbatch, itd);
 		limbatch_add(&limbatch, itd);
+		tdcountbatch_add(&tdcountbatch, itd);
 
 		thread_free_batched(itd);
 
 		tidbatch_process(&tidbatch);
 		credbatch_process(&credbatch);
 		limbatch_process(&limbatch);
-		tdcount++;
-		if (tdcount == 32) {
-			thread_count_sub(tdcount);
-			tdcount = 0;
-		}
+		tdcountbatch_process(&tdcountbatch);
 
 		itd = ntd;
 	}
@@ -639,9 +676,7 @@ thread_reap_domain(struct thread_domain_data *tdd)
 	tidbatch_final(&tidbatch);
 	credbatch_final(&credbatch);
 	limbatch_final(&limbatch);
-	if (tdcount != 0) {
-		thread_count_sub(tdcount);
-	}
+	tdcountbatch_final(&tdcountbatch);
 }
 
 /*



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