From 7c2e7bb8801f9ef8e3e4ab93dc153e7901f3338e Mon Sep 17 00:00:00 2001 From: ken Date: Sun, 20 Sep 1998 00:11:23 +0000 Subject: Change the devstat generation number from an int to a long. The int-sized generation was causing unaligned access faults on the Alpha. I have incremented the devstat version number, since this is an interface change. You'll need to recompile libdevstat, systat, iostat, vmstat and rpc.rstatd along with your kernel. Partially Submitted by: Andrew Gallatin --- lib/libdevstat/devstat.3 | 10 +++++----- lib/libdevstat/devstat.c | 27 ++++++++++++++------------- lib/libdevstat/devstat.h | 10 +++++----- sys/kern/subr_devstat.c | 10 +++++----- sys/sys/devicestat.h | 4 ++-- usr.bin/systat/devs.c | 8 +++++--- usr.bin/systat/extern.h | 4 ++-- usr.bin/vmstat/vmstat.c | 8 +++++--- usr.sbin/iostat/iostat.c | 9 +++++---- 9 files changed, 48 insertions(+), 42 deletions(-) diff --git a/lib/libdevstat/devstat.3 b/lib/libdevstat/devstat.3 index 189f703..6da22aa 100644 --- a/lib/libdevstat/devstat.3 +++ b/lib/libdevstat/devstat.3 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $Id$ +.\" $Id: devstat.3,v 1.1 1998/09/15 06:23:21 gibbs Exp $ .\" .Dd May 21, 1998 .Dt DEVSTAT 3 @@ -37,7 +37,7 @@ .Fd #include .Ft int .Fn getnumdevs "void" -.Ft int +.Ft long .Fn getgeneration "void" .Ft int .Fn getversion "void" @@ -50,8 +50,8 @@ .Fa "struct device_selection **dev_select" .Fa "int *num_selected" .Fa "int *num_selections" -.Fa "int *select_generation" -.Fa "int current_generation" +.Fa "long *select_generation" +.Fa "long current_generation" .Fa "struct devstat *devices" .Fa "int numdevs" .Fa "struct devstat_match *matches" @@ -146,7 +146,7 @@ subelement contains the following elements: struct devinfo { struct devstat *devices; u_int8_t *mem_ptr; - int generation; + long generation; int numdevs; }; .Ed diff --git a/lib/libdevstat/devstat.c b/lib/libdevstat/devstat.c index 4c40d85..6211909 100644 --- a/lib/libdevstat/devstat.c +++ b/lib/libdevstat/devstat.c @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: devstat.c,v 1.1 1998/09/15 06:23:21 gibbs Exp $ + * $Id: devstat.c,v 1.2 1998/09/18 02:35:25 ken Exp $ */ #include @@ -101,14 +101,14 @@ getnumdevs(void) * the device list and the generation could change between the time that * this function is called and the device list is retreived. */ -int +long getgeneration(void) { size_t gensize; - int generation; + long generation; char *func_name = "getgeneration"; - gensize = sizeof(int); + gensize = sizeof(long); /* * Get the current generation number. @@ -234,7 +234,8 @@ getdevs(struct statinfo *stats) { int error; size_t dssize; - int oldnumdevs, oldgeneration; + int oldnumdevs; + long oldgeneration; int retval = 0; struct devinfo *dinfo; char *func_name = "getdevs"; @@ -266,10 +267,10 @@ getdevs(struct statinfo *stats) * number, as well as all the devices. So we need four * bytes more. */ - dssize =(dinfo->numdevs * sizeof(struct devstat)) + sizeof(int); + dssize =(dinfo->numdevs * sizeof(struct devstat)) +sizeof(long); dinfo->mem_ptr = (u_int8_t *)malloc(dssize); } else - dssize =(dinfo->numdevs * sizeof(struct devstat)) + sizeof(int); + dssize =(dinfo->numdevs * sizeof(struct devstat)) +sizeof(long); /* Get the current time when we get the stats */ gettimeofday(&stats->busy_time, NULL); @@ -298,7 +299,7 @@ getdevs(struct statinfo *stats) return(-1); dssize = (dinfo->numdevs * sizeof(struct devstat)) + - sizeof(int); + sizeof(long); dinfo->mem_ptr = (u_int8_t *)realloc(dinfo->mem_ptr, dssize); if ((error = sysctlbyname("kern.devstat.all", @@ -322,7 +323,7 @@ getdevs(struct statinfo *stats) * The sysctl spits out the generation as the first four bytes, * then all of the device statistics structures. */ - dinfo->generation = *(int *)dinfo->mem_ptr; + dinfo->generation = *(long *)dinfo->mem_ptr; /* * If the generation has changed, and if the current number of @@ -344,14 +345,14 @@ getdevs(struct statinfo *stats) if ((dinfo->numdevs = getnumdevs()) < 0) return(-1); dssize = (dinfo->numdevs * sizeof(struct devstat)) + - sizeof(int); + sizeof(long); dinfo->mem_ptr = (u_int8_t *)realloc(dinfo->mem_ptr, dssize); } retval = 1; } - dinfo->devices = (struct devstat *)(dinfo->mem_ptr + sizeof(int)); + dinfo->devices = (struct devstat *)(dinfo->mem_ptr + sizeof(long)); return(retval); } @@ -419,8 +420,8 @@ getdevs(struct statinfo *stats) */ int selectdevs(struct device_selection **dev_select, int *num_selected, - int *num_selections, int *select_generation, - int current_generation, struct devstat *devices, int numdevs, + int *num_selections, long *select_generation, + long current_generation, struct devstat *devices, int numdevs, struct devstat_match *matches, int num_matches, char **dev_selections, int num_dev_selections, devstat_select_mode select_mode, int maxshowdevs, int perf_select) diff --git a/lib/libdevstat/devstat.h b/lib/libdevstat/devstat.h index b2f1543..e0a54d0 100644 --- a/lib/libdevstat/devstat.h +++ b/lib/libdevstat/devstat.h @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: devstat.h,v 1.1 1998/09/15 06:23:21 gibbs Exp $ */ #ifndef _DEVSTAT_H @@ -68,7 +68,7 @@ struct device_selection { struct devinfo { struct devstat *devices; u_int8_t *mem_ptr; - int generation; + long generation; int numdevs; }; @@ -89,13 +89,13 @@ typedef enum { __BEGIN_DECLS int getnumdevs(void); -int getgeneration(void); +long getgeneration(void); int getversion(void); int checkversion(void); int getdevs(struct statinfo *stats); int selectdevs(struct device_selection **dev_select, int *num_selected, - int *num_selections, int *select_generation, - int current_generation, struct devstat *devices, int numdevs, + int *num_selections, long *select_generation, + long current_generation, struct devstat *devices, int numdevs, struct devstat_match *matches, int num_matches, char **dev_selections, int num_dev_selections, devstat_select_mode select_mode, int maxshowdevs, diff --git a/sys/kern/subr_devstat.c b/sys/kern/subr_devstat.c index fe1f832..21c3881 100644 --- a/sys/kern/subr_devstat.c +++ b/sys/kern/subr_devstat.c @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: subr_devstat.c,v 1.1 1998/09/15 08:16:09 gibbs Exp $ */ #include @@ -38,7 +38,7 @@ #include static int devstat_num_devs; -static int devstat_generation; +static long devstat_generation; static int devstat_version = DEVSTAT_VERSION; static int devstat_current_devnumber; @@ -212,7 +212,7 @@ sysctl_devstat SYSCTL_HANDLER_ARGS /* * First push out the generation number. */ - error = SYSCTL_OUT(req, &devstat_generation, sizeof(int)); + error = SYSCTL_OUT(req, &devstat_generation, sizeof(long)); /* * Now push out all the devices. @@ -239,7 +239,7 @@ SYSCTL_PROC(_kern_devstat, OID_AUTO, all, CTLFLAG_RD|CTLTYPE_OPAQUE, */ SYSCTL_INT(_kern_devstat, OID_AUTO, numdevs, CTLFLAG_RD, &devstat_num_devs, 0, "Number of devices in the devstat list"); -SYSCTL_INT(_kern_devstat, OID_AUTO, generation, CTLFLAG_RD, &devstat_generation, - 0, "Devstat list generation"); +SYSCTL_LONG(_kern_devstat, OID_AUTO, generation, CTLFLAG_RD, + &devstat_generation, 0, "Devstat list generation"); SYSCTL_INT(_kern_devstat, OID_AUTO, version, CTLFLAG_RD, &devstat_version, 0, "Devstat list version number"); diff --git a/sys/sys/devicestat.h b/sys/sys/devicestat.h index 7a52b53..03d106a 100644 --- a/sys/sys/devicestat.h +++ b/sys/sys/devicestat.h @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: devicestat.h,v 1.1 1998/09/15 08:16:17 gibbs Exp $ */ #ifndef _DEVICESTAT_H @@ -45,7 +45,7 @@ * userland utilities to determine whether or not they are in sync with the * kernel. */ -#define DEVSTAT_VERSION 1 +#define DEVSTAT_VERSION 2 /* * These flags specify which statistics features are supported or not diff --git a/usr.bin/systat/devs.c b/usr.bin/systat/devs.c index 42cc88a..9e846db 100644 --- a/usr.bin/systat/devs.c +++ b/usr.bin/systat/devs.c @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id$ + * $Id: devs.c,v 1.1 1998/09/15 08:16:40 gibbs Exp $ */ /* * Some code and ideas taken from the old disks.c. @@ -81,8 +81,10 @@ typedef enum { last_match_type last_type; struct device_selection *dev_select; -int generation, num_devices, num_selected; -int num_selections, select_generation; +long generation; +int num_devices, num_selected; +int num_selections; +long select_generation; struct devstat_match *matches = NULL; int num_matches = 0; char **specified_devices; diff --git a/usr.bin/systat/extern.h b/usr.bin/systat/extern.h index 3b44cd9..d6e3887 100644 --- a/usr.bin/systat/extern.h +++ b/usr.bin/systat/extern.h @@ -61,11 +61,11 @@ extern int verbose; struct inpcb; extern struct device_selection *dev_select; -extern int generation; +extern long generation; extern int num_devices; extern int num_selected; extern int num_selections; -extern int select_generation; +extern long select_generation; int checkhost __P((struct inpcb *)); int checkport __P((struct inpcb *)); diff --git a/usr.bin/vmstat/vmstat.c b/usr.bin/vmstat/vmstat.c index 6119fb7..3e6b65a 100644 --- a/usr.bin/vmstat/vmstat.c +++ b/usr.bin/vmstat/vmstat.c @@ -42,7 +42,7 @@ static const char copyright[] = static char sccsid[] = "@(#)vmstat.c 8.1 (Berkeley) 6/6/93"; #endif static const char rcsid[] = - "$Id: vmstat.c,v 1.25 1998/09/15 08:16:43 gibbs Exp $"; + "$Id: vmstat.c,v 1.26 1998/09/16 18:20:23 dillon Exp $"; #endif /* not lint */ #include @@ -142,12 +142,14 @@ struct nlist namelist[] = { }; struct statinfo cur, last; -int num_devices, maxshowdevs, generation; +int num_devices, maxshowdevs; +long generation; struct device_selection *dev_select; int num_selected; struct devstat_match *matches; int num_matches = 0; -int num_devices_specified, num_selections, select_generation; +int num_devices_specified, num_selections; +long select_generation; char **specified_devices; devstat_select_mode select_mode; diff --git a/usr.sbin/iostat/iostat.c b/usr.sbin/iostat/iostat.c index 8a9368c..e961725 100644 --- a/usr.sbin/iostat/iostat.c +++ b/usr.sbin/iostat/iostat.c @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: iostat.c,v 1.10 1998/09/16 18:03:44 dillon Exp $ + * $Id: iostat.c,v 1.11 1998/09/16 23:14:47 ken Exp $ */ /* * Parts of this program are derived from the original FreeBSD iostat @@ -155,7 +155,7 @@ usage(void) * This isn't mentioned in the man page, or the usage statement, * but it is supported. */ - fprintf(stderr, "usage: iostat [-CdhIoT?] [-c count] [-M core]" + fprintf(stderr, "usage: iostat [-CdhIKoT?] [-c count] [-M core]" " [-n devs] [-N system]\n" "\t [-t type,if,pass] [-w wait] [drives]\n"); } @@ -175,9 +175,10 @@ main(int argc, char **argv) kvm_t *kd; int hz, stathz; int headercount; - int generation; + long generation; int num_devices_specified; - int num_selected, num_selections, select_generation; + int num_selected, num_selections; + long select_generation; char **specified_devices; devstat_select_mode select_mode; -- cgit v1.1