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)