From 6ef341b3569bc8cc194eba807f0ff09c1bb022d1 Mon Sep 17 00:00:00 2001 From: deraadt Date: Mon, 19 Jan 2015 01:53:18 +0000 Subject: [PATCH] like in ps(1), fetch the FSCALE value using sysctl rather than using the header version ok guenther --- usr.bin/top/loadavg.h | 7 ++++++- usr.bin/top/machine.c | 17 ++++++++++++++++- usr.bin/top/machine.h | 3 ++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/usr.bin/top/loadavg.h b/usr.bin/top/loadavg.h index 0dffd40713a..af1b692a91c 100644 --- a/usr.bin/top/loadavg.h +++ b/usr.bin/top/loadavg.h @@ -1,4 +1,4 @@ -/* $OpenBSD: loadavg.h,v 1.3 2002/07/15 17:20:36 deraadt Exp $ */ +/* $OpenBSD: loadavg.h,v 1.4 2015/01/19 01:53:18 deraadt Exp $ */ /* * Top users/processes display for Unix @@ -56,6 +56,11 @@ # endif #endif +#ifdef __OpenBSD__ +#undef FSCALE +#define FSCALE fscale /* fetched via sysctl(3) */ +#endif + #ifdef FSCALE # define FIXED_LOADAVG FSCALE # define FIXED_PCTCPU FSCALE diff --git a/usr.bin/top/machine.c b/usr.bin/top/machine.c index fc87693b614..88969f8ebd0 100644 --- a/usr.bin/top/machine.c +++ b/usr.bin/top/machine.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machine.c,v 1.81 2015/01/16 06:40:13 deraadt Exp $ */ +/* $OpenBSD: machine.c,v 1.82 2015/01/19 01:53:18 deraadt Exp $ */ /*- * Copyright (c) 1994 Thorsten Lockert @@ -138,9 +138,22 @@ static int pageshift; /* log base 2 of the pagesize */ #define pagetok(size) ((size) << pageshift) int ncpu; +int fscale; unsigned int maxslp; +int +getfscale(void) +{ + int mib[] = { CTL_KERN, KERN_FSCALE }; + size_t size = sizeof(fscale); + + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), + &fscale, &size, NULL, 0) < 0) + return (-1); + return fscale; +} + int getncpu(void) { @@ -163,6 +176,8 @@ machine_init(struct statics *statics) ncpu = getncpu(); if (ncpu == -1) return (-1); + if (getfscale() == -1) + return (-1); cpu_states = calloc(ncpu, CPUSTATES * sizeof(int64_t)); if (cpu_states == NULL) err(1, NULL); diff --git a/usr.bin/top/machine.h b/usr.bin/top/machine.h index 312d382101e..b1eb86ee90b 100644 --- a/usr.bin/top/machine.h +++ b/usr.bin/top/machine.h @@ -1,4 +1,4 @@ -/* $OpenBSD: machine.h,v 1.18 2014/09/17 01:56:54 dlg Exp $ */ +/* $OpenBSD: machine.h,v 1.19 2015/01/19 01:53:18 deraadt Exp $ */ /* * Top users/processes display for Unix @@ -95,3 +95,4 @@ extern uid_t proc_owner(pid_t); extern struct kinfo_proc *getprocs(int, int, int *); int getncpu(void); +int getfscale(void); -- 2.20.1