diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_sched.c | 8 | ||||
-rw-r--r-- | sys/kern/kern_sysctl.c | 4 | ||||
-rw-r--r-- | sys/sys/sched.h | 4 |
3 files changed, 13 insertions, 3 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c index ce9e80066a3..20ae05d0001 100644 --- a/sys/kern/kern_sched.c +++ b/sys/kern/kern_sched.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sched.c,v 1.51 2018/07/12 01:23:38 cheloha Exp $ */ +/* $OpenBSD: kern_sched.c,v 1.52 2018/09/26 17:23:13 cheloha Exp $ */ /* * Copyright (c) 2007, 2008 Artur Grabowski <art@openbsd.org> * @@ -832,6 +832,12 @@ sysctl_hwncpuonline(void) return cpuset_cardinality(&sched_all_cpus); } +int +cpu_is_online(struct cpu_info *ci) +{ + return cpuset_isset(&sched_all_cpus, ci); +} + #ifdef __HAVE_CPU_TOPOLOGY #include <sys/sysctl.h> diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index f83cb70a9a6..8b0da7c6475 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kern_sysctl.c,v 1.347 2018/09/20 18:59:10 bluhm Exp $ */ +/* $OpenBSD: kern_sysctl.c,v 1.348 2018/09/26 17:23:13 cheloha Exp $ */ /* $NetBSD: kern_sysctl.c,v 1.17 1996/05/20 17:49:05 mrg Exp $ */ /*- @@ -2397,6 +2397,8 @@ sysctl_cptime2(int *name, u_int namelen, void *oldp, size_t *oldlenp, } if (!found) return (ENOENT); + if (!cpu_is_online(ci)) + return (ENODEV); return (sysctl_rdstruct(oldp, oldlenp, newp, &ci->ci_schedstate.spc_cp_time, diff --git a/sys/sys/sched.h b/sys/sys/sched.h index 8f80d233ff7..f8f6d7b7af4 100644 --- a/sys/sys/sched.h +++ b/sys/sys/sched.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sched.h,v 1.47 2018/07/12 01:23:38 cheloha Exp $ */ +/* $OpenBSD: sched.h,v 1.48 2018/09/26 17:23:13 cheloha Exp $ */ /* $NetBSD: sched.h,v 1.2 1999/02/28 18:14:58 ross Exp $ */ /*- @@ -155,6 +155,8 @@ int sysctl_hwperfpolicy(void *, size_t *, void *, size_t); int sysctl_hwsmt(void *, size_t *, void *, size_t); int sysctl_hwncpuonline(void); +int cpu_is_online(struct cpu_info *); + #ifdef MULTIPROCESSOR void sched_start_secondary_cpus(void); void sched_stop_secondary_cpus(void); |