Module Name:    src
Committed By:   mrg
Date:           Sat Dec 16 00:37:52 UTC 2017

Modified Files:
        src/sys/arch/arm/include: cpu.h
        src/sys/arch/mips/include: cpu.h
        src/sys/sys: cpu.h

Log Message:
CPU_INFO_FOREACH() must always iterate at least the boot cpu.
document this in sys/cpu.h and fix the arm and mips versions
to check ncpu is non zero before using it as an iterator max.

this should fix the new assert in init_main.c.


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/arch/arm/include/cpu.h
cvs rdiff -u -r1.121 -r1.122 src/sys/arch/mips/include/cpu.h
cvs rdiff -u -r1.41 -r1.42 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/arch/arm/include/cpu.h
diff -u src/sys/arch/arm/include/cpu.h:1.93 src/sys/arch/arm/include/cpu.h:1.94
--- src/sys/arch/arm/include/cpu.h:1.93	Tue Apr  4 09:26:32 2017
+++ src/sys/arch/arm/include/cpu.h	Sat Dec 16 00:37:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.93 2017/04/04 09:26:32 sevan Exp $	*/
+/*	$NetBSD: cpu.h,v 1.94 2017/12/16 00:37:51 mrg Exp $	*/
 
 /*
  * Copyright (c) 1994-1996 Mark Brinicombe.
@@ -235,7 +235,7 @@ extern struct cpu_info *cpu_info[];
 #define cpu_number()		(curcpu()->ci_index)
 #define CPU_IS_PRIMARY(ci)	((ci)->ci_index == 0)
 #define CPU_INFO_FOREACH(cii, ci)			\
-	cii = 0, ci = cpu_info[0]; cii < ncpu && (ci = cpu_info[cii]) != NULL; cii++
+	cii = 0, ci = cpu_info[0]; cii < (ncpu ? ncpu : 1) && (ci = cpu_info[cii]) != NULL; cii++
 #else
 #define cpu_number()            0
 

Index: src/sys/arch/mips/include/cpu.h
diff -u src/sys/arch/mips/include/cpu.h:1.121 src/sys/arch/mips/include/cpu.h:1.122
--- src/sys/arch/mips/include/cpu.h:1.121	Mon Oct 31 12:49:04 2016
+++ src/sys/arch/mips/include/cpu.h	Sat Dec 16 00:37:52 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.121 2016/10/31 12:49:04 skrll Exp $	*/
+/*	$NetBSD: cpu.h,v 1.122 2017/12/16 00:37:52 mrg Exp $	*/
 
 /*-
  * Copyright (c) 1992, 1993
@@ -160,7 +160,7 @@ struct cpu_info {
 #ifdef MULTIPROCESSOR
 #define	CPU_INFO_ITERATOR		int
 #define	CPU_INFO_FOREACH(cii, ci)	\
-    cii = 0, ci = cpu_infos[0]; cii < ncpu && (ci = cpu_infos[cii]) != NULL; cii++
+    cii = 0, ci = cpu_infos[0]; cii < (ncpu ? ncpu : 1) && (ci = cpu_infos[cii]) != NULL; cii++
 #else
 #define	CPU_INFO_ITERATOR		int __unused
 #define	CPU_INFO_FOREACH(cii, ci)	\

Index: src/sys/sys/cpu.h
diff -u src/sys/sys/cpu.h:1.41 src/sys/sys/cpu.h:1.42
--- src/sys/sys/cpu.h:1.41	Mon May 19 20:39:23 2014
+++ src/sys/sys/cpu.h	Sat Dec 16 00:37:51 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.41 2014/05/19 20:39:23 rmind Exp $	*/
+/*	$NetBSD: cpu.h,v 1.42 2017/12/16 00:37:51 mrg Exp $	*/
 
 /*-
  * Copyright (c) 2007 YAMAMOTO Takashi,
@@ -63,6 +63,14 @@ void cpu_need_resched(struct cpu_info *,
 #define	cpu_did_resched(l)	/* nothing */
 #endif
 
+/*
+ * CPU_INFO_ITERATOR() may be supplied by machine dependent code as it
+ * controls how the cpu_info structures are allocated.
+ * 
+ * This macro must always iterate just the boot-CPU when the system has
+ * not attached any cpus via mi_cpu_attach() yet, and the "ncpu" variable
+ * is zero.
+ */
 #ifndef CPU_INFO_ITERATOR
 #define	CPU_INFO_ITERATOR		int
 #define	CPU_INFO_FOREACH(cii, ci)	\

Reply via email to