git: 4f2465260f03 - main - SYSINIT: add SI_SUB_FIRST

From: Gleb Smirnoff <glebius_at_FreeBSD.org>
Date: Tue, 11 Aug 2026 14:41:00 UTC
The branch main has been updated by glebius:

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

commit 4f2465260f035fa0095e73b34a74851ef2efaa83
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2026-08-11 14:40:06 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2026-08-11 14:40:06 +0000

    SYSINIT: add SI_SUB_FIRST
    
    This allows to initialize mp_maxid, mp_ncpus and register APICs at the
    most early stage, guaranteeing that those values will already be available
    at SI_SUB_TUNABLES.
    
    Reviewed by:            markj
    Differential Revision:  https://reviews.freebsd.org/D58712
---
 sys/kern/subr_smp.c      | 2 +-
 sys/sys/kernel.h         | 1 +
 sys/x86/acpica/madt.c    | 2 +-
 sys/x86/x86/local_apic.c | 2 +-
 sys/x86/x86/mptable.c    | 3 +--
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/sys/kern/subr_smp.c b/sys/kern/subr_smp.c
index dd2e829aefbf..a58a179336f3 100644
--- a/sys/kern/subr_smp.c
+++ b/sys/kern/subr_smp.c
@@ -179,7 +179,7 @@ mp_setmaxid(void *dummy)
 
 	cpusetsizemin = howmany(mp_maxid + 1, NBBY);
 }
-SYSINIT(cpu_mp_setmaxid, SI_SUB_TUNABLES, SI_ORDER_FIRST, mp_setmaxid, NULL);
+SYSINIT(cpu_mp_setmaxid, SI_SUB_FIRST, SI_ORDER_ANY, mp_setmaxid, NULL);
 
 /*
  * Call the MD SMP initialization code.
diff --git a/sys/sys/kernel.h b/sys/sys/kernel.h
index 139a570c7ac6..2e1b1bd537cd 100644
--- a/sys/sys/kernel.h
+++ b/sys/sys/kernel.h
@@ -94,6 +94,7 @@ extern volatile long ticksl;
  */
 enum sysinit_sub_id {
 	SI_SUB_DUMMY		= 0x0000000,	/* not executed; for linker */
+	SI_SUB_FIRST		= 0x0600000,	/* mp_maxid, etc... */
 	SI_SUB_TUNABLES		= 0x0700000,	/* establish tunable values */
 	SI_SUB_COPYRIGHT	= 0x0800001,	/* first use of console */
 	SI_SUB_VM		= 0x1000000,	/* virtual memory system init */
diff --git a/sys/x86/acpica/madt.c b/sys/x86/acpica/madt.c
index a593028ffb5a..0b3d07e54f8a 100644
--- a/sys/x86/acpica/madt.c
+++ b/sys/x86/acpica/madt.c
@@ -327,7 +327,7 @@ madt_register(void *dummy __unused)
 
 	apic_register_enumerator(&madt_enumerator);
 }
-SYSINIT(madt_register, SI_SUB_TUNABLES - 1, SI_ORDER_FIRST, madt_register, NULL);
+SYSINIT(madt_register, SI_SUB_FIRST, SI_ORDER_FIRST, madt_register, NULL);
 
 /*
  * Call the handler routine for each entry in the MADT table.
diff --git a/sys/x86/x86/local_apic.c b/sys/x86/x86/local_apic.c
index 405db4fcc550..824ff6b3c37b 100644
--- a/sys/x86/x86/local_apic.c
+++ b/sys/x86/x86/local_apic.c
@@ -2142,7 +2142,7 @@ apic_init(void *dummy __unused)
 		    best_enum->apic_name, retval);
 
 }
-SYSINIT(apic_init, SI_SUB_TUNABLES - 1, SI_ORDER_SECOND, apic_init, NULL);
+SYSINIT(apic_init, SI_SUB_FIRST, SI_ORDER_SECOND, apic_init, NULL);
 
 /*
  * Setup the local APIC.  We have to do this prior to starting up the APs
diff --git a/sys/x86/x86/mptable.c b/sys/x86/x86/mptable.c
index 4f078fd05ec6..9df200320ecb 100644
--- a/sys/x86/x86/mptable.c
+++ b/sys/x86/x86/mptable.c
@@ -466,8 +466,7 @@ mptable_register(void *dummy __unused)
 
 	apic_register_enumerator(&mptable_enumerator);
 }
-SYSINIT(mptable_register, SI_SUB_TUNABLES - 1, SI_ORDER_FIRST, mptable_register,
-    NULL);
+SYSINIT(mptable_register, SI_SUB_FIRST, SI_ORDER_FIRST, mptable_register, NULL);
 
 /*
  * Call the handler routine for each entry in the MP config base table.