git: a77edeb0e54a - main - SYSINIT: add SI_SUB_KENV

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Mon, 17 Aug 2026 19:41:19 UTC
The branch main has been updated by glebius:

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

commit a77edeb0e54ad3e96e2a6c685d5c26eac4ba190a
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2026-08-17 19:40:49 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2026-08-17 19:40:49 +0000

    SYSINIT: add SI_SUB_KENV
    
    Since the kernel environment has its own dependencies, lurking at the end
    of the SI_SUB_KMEM sequence appeared to be fragile.  Provide own subsystem
    for it.  The init_dynamic_kenv() goes SI_ORDER_FIRST, and two modules that
    depend on it go SI_ORDER_ANY.
    
    PR:                     297492
    Reviewed by:            imp, markj, emaste
    Differential Revision:  https://reviews.freebsd.org/D58836
---
 sys/geom/eli/g_eli.c        | 2 +-
 sys/kern/kern_environment.c | 2 +-
 sys/kern/subr_hints.c       | 2 +-
 sys/sys/kernel.h            | 1 +
 4 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c
index 622aa87d4e81..6430d4485395 100644
--- a/sys/geom/eli/g_eli.c
+++ b/sys/geom/eli/g_eli.c
@@ -165,7 +165,7 @@ fetch_loader_passphrase(void * dummy)
 		kern_unsetenv("kern.geom.eli.passphrase");
 	}
 }
-SYSINIT(geli_fetch_loader_passphrase, SI_SUB_KMEM, SI_ORDER_LAST,
+SYSINIT(geli_fetch_loader_passphrase, SI_SUB_KENV, SI_ORDER_ANY,
     fetch_loader_passphrase, NULL);
 
 static void
diff --git a/sys/kern/kern_environment.c b/sys/kern/kern_environment.c
index bf459a38107a..b348f318785e 100644
--- a/sys/kern/kern_environment.c
+++ b/sys/kern/kern_environment.c
@@ -511,7 +511,7 @@ init_dynamic_kenv(void *data __unused)
 	mtx_init(&kenv_lock, "kernel environment", NULL, MTX_DEF);
 	dynamic_kenv = true;
 }
-SYSINIT(kenv, SI_SUB_KMEM, SI_ORDER_LAST, init_dynamic_kenv, NULL);
+SYSINIT(kenv, SI_SUB_KENV, SI_ORDER_FIRST, init_dynamic_kenv, NULL);
 
 void
 freeenv(char *env)
diff --git a/sys/kern/subr_hints.c b/sys/kern/subr_hints.c
index e2577aa9a9b2..7f71ce55307f 100644
--- a/sys/kern/subr_hints.c
+++ b/sys/kern/subr_hints.c
@@ -88,7 +88,7 @@ static_hints_to_env(void *data __unused)
 }
 
 /* Any time after dynamic env is setup */
-SYSINIT(hintenv, SI_SUB_KMEM, SI_ORDER_LAST, static_hints_to_env, NULL);
+SYSINIT(hintenv, SI_SUB_KENV, SI_ORDER_ANY, static_hints_to_env, NULL);
 
 /*
  * Checks the environment to see if we even have any hints.  If it has no hints,
diff --git a/sys/sys/kernel.h b/sys/sys/kernel.h
index 01673ac3395e..c38b778f54e3 100644
--- a/sys/sys/kernel.h
+++ b/sys/sys/kernel.h
@@ -101,6 +101,7 @@ enum sysinit_sub_id {
 	SI_SUB_VM		= 0x1000000,	/* virtual memory system init */
 	SI_SUB_COUNTER		= 0x1100000,	/* counter(9) is initialized */
 	SI_SUB_KMEM		= 0x1800000,	/* kernel memory */
+	SI_SUB_KENV		= 0x1900000,	/* kernel environment */
 	SI_SUB_HYPERVISOR	= 0x1A40000,	/*
 						 * Hypervisor detection and
 						 * virtualization support