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)