Module Name:    src
Committed By:   rmind
Date:           Sun Jan 29 22:55:40 UTC 2012

Modified Files:
        src/sys/kern: init_main.c kern_cpu.c kern_idle.c subr_pserialize.c
            sys_sched.c
        src/sys/sys: cpu.h cpu_data.h

Log Message:
- Add mi_cpu_init() and initialise cpu_lock and kcpuset_attached/running there.
- Add kcpuset_running which gets set in idle_loop().
- Use kcpuset_running in pserialize_perform().


To generate a diff of this commit:
cvs rdiff -u -r1.439 -r1.440 src/sys/kern/init_main.c
cvs rdiff -u -r1.54 -r1.55 src/sys/kern/kern_cpu.c
cvs rdiff -u -r1.24 -r1.25 src/sys/kern/kern_idle.c
cvs rdiff -u -r1.4 -r1.5 src/sys/kern/subr_pserialize.c
cvs rdiff -u -r1.38 -r1.39 src/sys/kern/sys_sched.c
cvs rdiff -u -r1.34 -r1.35 src/sys/sys/cpu.h
cvs rdiff -u -r1.33 -r1.34 src/sys/sys/cpu_data.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.439 src/sys/kern/init_main.c:1.440
--- src/sys/kern/init_main.c:1.439	Tue Jan 24 20:03:36 2012
+++ src/sys/kern/init_main.c	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: init_main.c,v 1.439 2012/01/24 20:03:36 christos Exp $	*/
+/*	$NetBSD: init_main.c,v 1.440 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.439 2012/01/24 20:03:36 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: init_main.c,v 1.440 2012/01/29 22:55:40 rmind Exp $");
 
 #include "opt_ddb.h"
 #include "opt_ipsec.h"
@@ -304,7 +304,7 @@ main(void)
 	kernel_lock_init();
 	once_init();
 
-	mutex_init(&cpu_lock, MUTEX_DEFAULT, IPL_NONE);
+	mi_cpu_init();
 	kernconfig_lock_init();
 	kthread_sysinit();
 

Index: src/sys/kern/kern_cpu.c
diff -u src/sys/kern/kern_cpu.c:1.54 src/sys/kern/kern_cpu.c:1.55
--- src/sys/kern/kern_cpu.c:1.54	Tue Jan 17 10:47:27 2012
+++ src/sys/kern/kern_cpu.c	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_cpu.c,v 1.54 2012/01/17 10:47:27 cegger Exp $	*/
+/*	$NetBSD: kern_cpu.c,v 1.55 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008, 2009, 2010, 2012 The NetBSD Foundation, Inc.
@@ -56,7 +56,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.54 2012/01/17 10:47:27 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_cpu.c,v 1.55 2012/01/29 22:55:40 rmind Exp $");
 
 #include "opt_cpu_ucode.h"
 
@@ -110,13 +110,31 @@ int		ncpu			__read_mostly;
 int		ncpuonline		__read_mostly;
 bool		mp_online		__read_mostly;
 
-kcpuset_t *	kcpuset_attached	__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;
 
 struct cpuqueue	cpu_queue		__cacheline_aligned
     = CIRCLEQ_HEAD_INITIALIZER(cpu_queue);
 
 static struct cpu_info **cpu_infos	__read_mostly;
 
+/*
+ * mi_cpu_init: early initialisation of MI CPU related structures.
+ *
+ * Note: may not block and memory allocator is not yet available.
+ */
+void
+mi_cpu_init(void)
+{
+
+	mutex_init(&cpu_lock, MUTEX_DEFAULT, IPL_NONE);
+
+	kcpuset_create(&kcpuset_attached, true);
+	kcpuset_create(&kcpuset_running, true);
+	kcpuset_set(kcpuset_running, 0);
+}
+
 int
 mi_cpu_attach(struct cpu_info *ci)
 {
@@ -125,6 +143,8 @@ mi_cpu_attach(struct cpu_info *ci)
 	KASSERT(maxcpus > 0);
 
 	ci->ci_index = ncpu;
+	kcpuset_set(kcpuset_attached, cpu_index(ci));
+
 	CIRCLEQ_INSERT_TAIL(&cpu_queue, ci, ci_data.cpu_qchain);
 	TAILQ_INIT(&ci->ci_data.cpu_ld_locks);
 	__cpu_simple_lock_init(&ci->ci_data.cpu_ld_lock);
@@ -136,10 +156,8 @@ mi_cpu_attach(struct cpu_info *ci)
 	if (__predict_false(cpu_infos == NULL)) {
 		cpu_infos =
 		    kmem_zalloc(sizeof(cpu_infos[0]) * maxcpus, KM_SLEEP);
-		kcpuset_create(&kcpuset_attached, true);
 	}
 	cpu_infos[cpu_index(ci)] = ci;
-	kcpuset_set(kcpuset_attached, ci->ci_index);
 
 	sched_cpuattach(ci);
 

Index: src/sys/kern/kern_idle.c
diff -u src/sys/kern/kern_idle.c:1.24 src/sys/kern/kern_idle.c:1.25
--- src/sys/kern/kern_idle.c:1.24	Mon Jan 17 07:13:31 2011
+++ src/sys/kern/kern_idle.c	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_idle.c,v 1.24 2011/01/17 07:13:31 uebayasi Exp $	*/
+/*	$NetBSD: kern_idle.c,v 1.25 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*-
  * Copyright (c)2002, 2006, 2007 YAMAMOTO Takashi,
@@ -28,7 +28,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(0, "$NetBSD: kern_idle.c,v 1.24 2011/01/17 07:13:31 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_idle.c,v 1.25 2012/01/29 22:55:40 rmind Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
@@ -49,6 +49,7 @@ idle_loop(void *dummy)
 	struct schedstate_percpu *spc;
 	struct lwp *l = curlwp;
 
+	kcpuset_atomic_set(kcpuset_running, cpu_index(ci));
 	ci->ci_data.cpu_onproc = l;
 
 	/* Update start time for this thread. */

Index: src/sys/kern/subr_pserialize.c
diff -u src/sys/kern/subr_pserialize.c:1.4 src/sys/kern/subr_pserialize.c:1.5
--- src/sys/kern/subr_pserialize.c:1.4	Sun Aug  7 21:38:32 2011
+++ src/sys/kern/subr_pserialize.c	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_pserialize.c,v 1.4 2011/08/07 21:38:32 rmind Exp $	*/
+/*	$NetBSD: subr_pserialize.c,v 1.5 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2010, 2011 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: subr_pserialize.c,v 1.4 2011/08/07 21:38:32 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_pserialize.c,v 1.5 2012/01/29 22:55:40 rmind Exp $");
 
 #include <sys/param.h>
 
@@ -156,7 +156,7 @@ pserialize_perform(pserialize_t psz)
 	 * other processors.
 	 */
 	psz->psz_owner = curlwp;
-	kcpuset_copy(psz->psz_target, kcpuset_attached);
+	kcpuset_copy(psz->psz_target, kcpuset_running);
 	kcpuset_zero(psz->psz_pass);
 
 	mutex_spin_enter(&psz_lock);

Index: src/sys/kern/sys_sched.c
diff -u src/sys/kern/sys_sched.c:1.38 src/sys/kern/sys_sched.c:1.39
--- src/sys/kern/sys_sched.c:1.38	Sun Aug  7 21:38:32 2011
+++ src/sys/kern/sys_sched.c	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: sys_sched.c,v 1.38 2011/08/07 21:38:32 rmind Exp $	*/
+/*	$NetBSD: sys_sched.c,v 1.39 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*
  * Copyright (c) 2008, 2011 Mindaugas Rasiukevicius <rmind at NetBSD org>
@@ -42,7 +42,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sys_sched.c,v 1.38 2011/08/07 21:38:32 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sys_sched.c,v 1.39 2012/01/29 22:55:40 rmind Exp $");
 
 #include <sys/param.h>
 
@@ -353,8 +353,9 @@ sys__sched_setaffinity(struct lwp *l,
 	for (CPU_INFO_FOREACH(cii, ici)) {
 		struct schedstate_percpu *ispc;
 
-		if (kcpuset_isset(kcset, cpu_index(ici)) == 0)
+		if (!kcpuset_isset(kcset, cpu_index(ici))) {
 			continue;
+		}
 
 		ispc = &ici->ci_schedstate;
 		/* Check that CPU is not in the processor-set */

Index: src/sys/sys/cpu.h
diff -u src/sys/sys/cpu.h:1.34 src/sys/sys/cpu.h:1.35
--- src/sys/sys/cpu.h:1.34	Fri Jan 13 16:05:16 2012
+++ src/sys/sys/cpu.h	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.h,v 1.34 2012/01/13 16:05:16 cegger Exp $	*/
+/*	$NetBSD: cpu.h,v 1.35 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2007 YAMAMOTO Takashi,
@@ -94,7 +94,8 @@ extern kmutex_t cpu_lock;
 extern u_int maxcpus;
 extern struct cpuqueue cpu_queue;
 extern kcpuset_t *kcpuset_attached;
-  
+extern kcpuset_t *kcpuset_running;
+
 static inline u_int
 cpu_index(struct cpu_info *ci)
 {

Index: src/sys/sys/cpu_data.h
diff -u src/sys/sys/cpu_data.h:1.33 src/sys/sys/cpu_data.h:1.34
--- src/sys/sys/cpu_data.h:1.33	Thu Feb 17 18:32:29 2011
+++ src/sys/sys/cpu_data.h	Sun Jan 29 22:55:40 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu_data.h,v 1.33 2011/02/17 18:32:29 rmind Exp $	*/
+/*	$NetBSD: cpu_data.h,v 1.34 2012/01/29 22:55:40 rmind Exp $	*/
 
 /*-
  * Copyright (c) 2004, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -125,6 +125,7 @@ struct cpu_data {
 #define	ci_core_id		ci_data.cpu_core_id
 #define	ci_smt_id		ci_data.cpu_smt_id
 
-int mi_cpu_attach(struct cpu_info *ci);
+void	mi_cpu_init(void);
+int	mi_cpu_attach(struct cpu_info *);
 
 #endif /* _SYS_CPU_DATA_H_ */

Reply via email to