git: 9b8f6e2d759a - stable/15 - vm_domainset: Simplify vm_domainset_iter_next()

From: Olivier Certner <olce_at_FreeBSD.org>
Date: Fri, 19 Sep 2025 10:07:17 UTC
The branch stable/15 has been updated by olce:

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

commit 9b8f6e2d759a357701e641816197fa2fe0386fb5
Author:     Olivier Certner <olce@FreeBSD.org>
AuthorDate: 2025-07-07 20:37:14 +0000
Commit:     Olivier Certner <olce@FreeBSD.org>
CommitDate: 2025-09-19 10:07:03 +0000

    vm_domainset: Simplify vm_domainset_iter_next()
    
    As we are now visiting each domain only once, the test in
    vm_domainset_iter_prefer() about skipping the preferred domain (the one
    initially visited for policy DOMAINSET_POLICY_PREFER) becomes redundant.
    Removing it makes this function essentially the same as
    vm_domainset_iter_rr().
    
    Thus, remove vm_domainset_iter_prefer().  This makes all policies behave
    the same in vm_domainset_iter_next().
    
    No functional change (intended).
    
    PR:             277476
    MFC after:      10 days
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D51250
    
    (cherry picked from commit d0b691a7c1aacf5a3f5ee6fc53f08563744d7203)
---
 sys/vm/vm_domainset.c | 32 ++------------------------------
 1 file changed, 2 insertions(+), 30 deletions(-)

diff --git a/sys/vm/vm_domainset.c b/sys/vm/vm_domainset.c
index bd15449559a5..a46dbe5ae92e 100644
--- a/sys/vm/vm_domainset.c
+++ b/sys/vm/vm_domainset.c
@@ -101,22 +101,11 @@ static void
 vm_domainset_iter_rr(struct vm_domainset_iter *di, int *domain)
 {
 
+	/* Grab the next domain in 'ds_order'. */
 	*domain = di->di_domain->ds_order[
 	    ++(*di->di_iter) % di->di_domain->ds_cnt];
 }
 
-static void
-vm_domainset_iter_prefer(struct vm_domainset_iter *di, int *domain)
-{
-	int d;
-
-	do {
-		d = di->di_domain->ds_order[
-		    ++(*di->di_iter) % di->di_domain->ds_cnt];
-	} while (d == di->di_domain->ds_prefer);
-	*domain = d;
-}
-
 static void
 vm_domainset_iter_interleave(struct vm_domainset_iter *di, int *domain)
 {
@@ -133,24 +122,7 @@ vm_domainset_iter_next(struct vm_domainset_iter *di, int *domain)
 
 	KASSERT(!DOMAINSET_EMPTY(&di->di_remain_mask),
 	    ("%s: Already iterated on all domains", __func__));
-	switch (di->di_policy) {
-	case DOMAINSET_POLICY_FIRSTTOUCH:
-		/*
-		 * To prevent impossible allocations we convert an invalid
-		 * first-touch to round-robin.
-		 */
-		/* FALLTHROUGH */
-	case DOMAINSET_POLICY_INTERLEAVE:
-		/* FALLTHROUGH */
-	case DOMAINSET_POLICY_ROUNDROBIN:
-		vm_domainset_iter_rr(di, domain);
-		break;
-	case DOMAINSET_POLICY_PREFER:
-		vm_domainset_iter_prefer(di, domain);
-		break;
-	default:
-		panic("%s: Unknown policy %d", __func__, di->di_policy);
-	}
+	vm_domainset_iter_rr(di, domain);
 	KASSERT(*domain < vm_ndomains,
 	    ("%s: Invalid domain %d", __func__, *domain));
 }