Module Name:    src
Committed By:   thorpej
Date:           Tue Mar  5 14:39:30 UTC 2024

Modified Files:
        src/sys/kern: init_main.c subr_cpu.c
        src/sys/sys: cpu.h

Log Message:
Early in main(), assert that curcpu() evaluates as the primary CPU and
stash away a pointer to it as the boot CPU for quick reference later.


To generate a diff of this commit:
cvs rdiff -u -r1.547 -r1.548 src/sys/kern/init_main.c
cvs rdiff -u -r1.20 -r1.21 src/sys/kern/subr_cpu.c
cvs rdiff -u -r1.52 -r1.53 src/sys/sys/cpu.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/kern/init_main.c
diff -u src/sys/kern/init_main.c:1.547 src/sys/kern/init_main.c:1.548
--- src/sys/kern/init_main.c:1.547	Wed Jan 17 10:18:41 2024
+++ src/sys/kern/init_main.c	Tue Mar  5 14:39:29 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: init_main.c,v 1.547 2024/01/17 10:18:41 hannken Exp $	*/
+/*	$NetBSD: init_main.c,v 1.548 2024/03/05 14:39:29 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009, 2019, 2023 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.547 2024/01/17 10:18:41 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.548 2024/03/05 14:39:29 thorpej Exp $");
 
 #include "opt_cnmagic.h"
 #include "opt_ddb.h"
@@ -275,7 +275,8 @@ main(void)
 #ifdef DIAGNOSTIC
 	/*
 	 * Verify that CPU_INFO_FOREACH() knows about the boot CPU
-	 * and only the boot CPU at this point.
+	 * and only the boot CPU at this point.  The boot CPU should
+	 * also be marked PRIMARY.
 	 */
 	int cpucount = 0;
 	for (CPU_INFO_FOREACH(cii, ci)) {
@@ -283,8 +284,12 @@ main(void)
 		cpucount++;
 	}
 	KASSERT(cpucount == 1);
+	KASSERT(CPU_IS_PRIMARY(curcpu()));
 #endif
 
+	/* Stash a pointer to the boot CPU for quick reference wheen needed. */
+	boot_cpu = curcpu();
+
 	l = &lwp0;
 #ifndef LWP0_CPU_INFO
 	l->l_cpu = curcpu();

Index: src/sys/kern/subr_cpu.c
diff -u src/sys/kern/subr_cpu.c:1.20 src/sys/kern/subr_cpu.c:1.21
--- src/sys/kern/subr_cpu.c:1.20	Thu Jan  4 11:18:19 2024
+++ src/sys/kern/subr_cpu.c	Tue Mar  5 14:39:29 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_cpu.c,v 1.20 2024/01/04 11:18:19 mlelstv Exp $	*/
+/*	$NetBSD: subr_cpu.c,v 1.21 2024/03/05 14:39:29 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008, 2009, 2010, 2012, 2019, 2020
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_cpu.c,v 1.20 2024/01/04 11:18:19 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_cpu.c,v 1.21 2024/03/05 14:39:29 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -86,6 +86,9 @@ int64_t		cpu_counts[CPU_COUNT_MAX];
 /* An array of CPUs.  There are ncpu entries. */
 struct cpu_info **cpu_infos		__read_mostly;
 
+/* A pointer to the boot CPU, for quick reference when needed. */
+struct cpu_info *boot_cpu		__read_mostly;
+
 /* Note: set on mi_cpu_attach() and idle_loop(). */
 kcpuset_t *	kcpuset_attached	__read_mostly	= NULL;
 kcpuset_t *	kcpuset_running		__read_mostly	= NULL;

Index: src/sys/sys/cpu.h
diff -u src/sys/sys/cpu.h:1.52 src/sys/sys/cpu.h:1.53
--- src/sys/sys/cpu.h:1.52	Sat Jul  8 13:59:05 2023
+++ src/sys/sys/cpu.h	Tue Mar  5 14:39:29 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.52 2023/07/08 13:59:05 riastradh Exp $	*/
+/*	$NetBSD: cpu.h,v 1.53 2024/03/05 14:39:29 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 2007 YAMAMOTO Takashi,
@@ -100,6 +100,7 @@ void	cpu_topology_init(void);
 extern kmutex_t cpu_lock;
 extern u_int maxcpus;
 extern struct cpu_info **cpu_infos;
+extern struct cpu_info *boot_cpu;
 extern kcpuset_t *kcpuset_attached;
 extern kcpuset_t *kcpuset_running;
 

Reply via email to