Module Name:    src
Committed By:   ad
Date:           Sat Dec 21 11:54:04 UTC 2019

Modified Files:
        src/sys/kern: kern_synch.c
        src/sys/sys: sched.h

Log Message:
schedstate_percpu: add new flag SPCF_IDLE as a cheap and easy way to
determine that a CPU is currently idle.


To generate a diff of this commit:
cvs rdiff -u -r1.333 -r1.334 src/sys/kern/kern_synch.c
cvs rdiff -u -r1.81 -r1.82 src/sys/sys/sched.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/kern_synch.c
diff -u src/sys/kern/kern_synch.c:1.333 src/sys/kern/kern_synch.c:1.334
--- src/sys/kern/kern_synch.c:1.333	Fri Dec 20 21:52:51 2019
+++ src/sys/kern/kern_synch.c	Sat Dec 21 11:54:04 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_synch.c,v 1.333 2019/12/20 21:52:51 ad Exp $	*/
+/*	$NetBSD: kern_synch.c,v 1.334 2019/12/21 11:54:04 ad Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2004, 2006, 2007, 2008, 2009, 2019
@@ -69,7 +69,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.333 2019/12/20 21:52:51 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_synch.c,v 1.334 2019/12/21 11:54:04 ad Exp $");
 
 #include "opt_kstack.h"
 #include "opt_dtrace.h"
@@ -487,10 +487,13 @@ nextlwp(struct cpu_info *ci, struct sche
 		newl->l_stat = LSONPROC;
 		newl->l_pflag |= LP_RUNNING;
 		lwp_setlock(newl, spc->spc_lwplock);
+		spc->spc_flags &= ~(SPCF_SWITCHCLEAR | SPCF_IDLE);
 	} else {
 		newl = ci->ci_data.cpu_idlelwp;
 		newl->l_stat = LSONPROC;
 		newl->l_pflag |= LP_RUNNING;
+		spc->spc_flags = (spc->spc_flags & ~SPCF_SWITCHCLEAR) |
+		    SPCF_IDLE;
 	}
 
 	/*
@@ -501,7 +504,6 @@ nextlwp(struct cpu_info *ci, struct sche
 	 * the release of spc_mutex becomes globally visible.
 	 */
 	ci->ci_want_resched = ci->ci_data.cpu_softints;
-	spc->spc_flags &= ~SPCF_SWITCHCLEAR;
 	spc->spc_curpriority = lwp_eprio(newl);
 
 	return newl;

Index: src/sys/sys/sched.h
diff -u src/sys/sys/sched.h:1.81 src/sys/sys/sched.h:1.82
--- src/sys/sys/sched.h:1.81	Fri Dec 20 21:05:34 2019
+++ src/sys/sys/sched.h	Sat Dec 21 11:54:04 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: sched.h,v 1.81 2019/12/20 21:05:34 ad Exp $	*/
+/*	$NetBSD: sched.h,v 1.82 2019/12/21 11:54:04 ad Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2007, 2008, 2019
@@ -187,6 +187,7 @@ struct schedstate_percpu {
 #define	SPCF_RUNNING		0x0008	/* CPU is running */
 #define	SPCF_NOINTR		0x0010	/* shielded from interrupts */
 #define	SPCF_SMTPRIMARY		0x0020	/* CPU is first thread in core */
+#define	SPCF_IDLE		0x0040	/* CPU is currently idle */
 
 #define	SPCF_SWITCHCLEAR	(SPCF_SEENRR|SPCF_SHOULDYIELD)
 

Reply via email to