Mercurial > hg > xemacs-beta
diff src/getloadavg.c @ 4765:1257b938f03a
automatic merge
author | Stephen J. Turnbull <stephen@xemacs.org> |
---|---|
date | Fri, 04 Dec 2009 10:59:45 +0900 |
parents | aa5ed11f473b |
children | 308d34e9f07d 861f2601a38b |
line wrap: on
line diff
--- a/src/getloadavg.c Fri Dec 04 10:56:38 2009 +0900 +++ b/src/getloadavg.c Fri Dec 04 10:59:45 2009 +0900 @@ -27,30 +27,19 @@ Returns a double. LDAV_SYMBOL Name of kernel symbol giving load average. LOAD_AVE_TYPE Type of the load average array in the kernel. - Must be defined unless one of - apollo, DGUX, NeXT, or UMAX is defined; - otherwise, no load average is available. + Must be defined; otherwise, no load average + is available. NLIST_STRUCT Include nlist.h, not a.out.h, and the nlist n_name element is a pointer, not an array. - NLIST_NAME_UNION struct nlist has an n_un member, not n_name. LINUX_LDAV_FILE [__linux__]: File containing load averages. Specific system predefines this file uses, aside from setting default values if not emacs: - apollo BSD Real BSD, not just BSD-like. - convex - DGUX hpux - NeXT sgi - sequent Sequent Dynix 3.x.x (BSD) - _SEQUENT_ Sequent DYNIX/ptx 1.x.x (SYSV) - sony_news NEWS-OS (works at least for 4.1C) - UMAX - UMAX4_3 WIN32_NATIVE No-op for Windows9x/NT. CYGWIN No-op for Cygwin. __linux__ Linux: assumes /proc filesystem mounted. @@ -92,22 +81,6 @@ #include <kstat.h> #endif /* HAVE_KSTAT_H */ -#if !defined (BSD) && defined (ultrix) -/* Ultrix behaves like BSD on Vaxen. */ -#define BSD -#endif - -#ifdef NeXT -/* NeXT in the 2.{0,1,2} releases defines BSD in <sys/param.h>, which - conflicts with the definition understood in this file, that this - really is BSD. */ -#undef BSD - -/* NeXT defines FSCALE in <sys/param.h>. However, we take FSCALE being - defined to mean that the nlist method should be used, which is not true. */ -#undef FSCALE -#endif - /* Set values that are different from the defaults, which are set a little farther down with #ifndef. */ @@ -118,14 +91,6 @@ #define hpux #endif -#if defined(hp300) && !defined(hpux) -#define MORE_BSD -#endif - -#if defined(ultrix) && defined(mips) -#define decstation -#endif - #if (defined(sun) && defined(SVR4)) || defined (SOLARIS2) #define SUNOS_5 #endif @@ -143,21 +108,10 @@ #include <sys/table.h> #endif -/* UTek's /bin/cc on the 4300 has no architecture specific cpp define by - default, but _MACH_IND_SYS_TYPES is defined in <sys/types.h>. Combine - that with a couple of other things and we'll have a unique match. */ -#if !defined (tek4300) && defined (unix) && defined (m68k) && defined (mc68000) && defined (mc68020) && defined (_MACH_IND_SYS_TYPES) -#define tek4300 /* Define by emacs, but not by other users. */ -#endif - /* VAX C can't handle multi-line #ifs, or lines longer than 256 chars. */ #ifndef LOAD_AVE_TYPE -#ifdef MORE_BSD -#define LOAD_AVE_TYPE long -#endif - #ifdef sun #define LOAD_AVE_TYPE long #endif @@ -166,10 +120,6 @@ #define LOAD_AVE_TYPE long #endif -#ifdef _SEQUENT_ -#define LOAD_AVE_TYPE long -#endif - #ifdef sgi #define LOAD_AVE_TYPE long #endif @@ -182,10 +132,6 @@ #define LOAD_AVE_TYPE long #endif -#ifdef sequent -#define LOAD_AVE_TYPE long -#endif - #ifdef OSF_ALPHA #define LOAD_AVE_TYPE long #endif @@ -194,25 +140,10 @@ #define LOAD_AVE_TYPE long #endif -#ifdef tek4300 -#define LOAD_AVE_TYPE long -#endif - -#if defined(alliant) && defined(i860) /* Alliant FX/2800 */ -#define LOAD_AVE_TYPE long -#endif - #ifdef _AIX #define LOAD_AVE_TYPE long #endif -#ifdef convex -#define LOAD_AVE_TYPE double -#ifndef LDAV_CVT -#define LDAV_CVT(n) (n) -#endif -#endif - #endif /* No LOAD_AVE_TYPE. */ #ifdef OSF_ALPHA @@ -222,27 +153,15 @@ #define FSCALE 1024.0 #endif -#if defined(alliant) && defined(i860) /* Alliant FX/2800 */ -/* <sys/param.h> defines an incorrect value for FSCALE on an - Alliant FX/2800 Concentrix 2.2, according to ghazi@noc.rutgers.edu. */ -#undef FSCALE -#define FSCALE 100.0 -#endif - - #ifndef FSCALE /* SunOS and some others define FSCALE in sys/param.h. */ -#ifdef MORE_BSD -#define FSCALE 2048.0 -#endif - #if defined(MIPS) || defined(SVR4) || defined(decstation) #define FSCALE 256 #endif -#if defined (sgi) || defined (sequent) +#if defined (sgi) /* Sometimes both MIPS and sgi are defined, so FSCALE was just defined above under #ifdef MIPS. But we want the sgi value. */ #undef FSCALE @@ -253,10 +172,6 @@ #define FSCALE 65536.0 #endif -#ifdef tek4300 -#define FSCALE 100.0 -#endif - #ifdef _AIX #define FSCALE 65536.0 #endif @@ -270,10 +185,6 @@ /* VAX C can't handle multi-line #ifs, or lines longer that 256 characters. */ #ifndef NLIST_STRUCT -#ifdef MORE_BSD -#define NLIST_STRUCT -#endif - #ifdef sun #define NLIST_STRUCT #endif @@ -286,10 +197,6 @@ #define NLIST_STRUCT #endif -#if defined (_SEQUENT_) || defined (sequent) -#define NLIST_STRUCT -#endif - #ifdef sgi #define NLIST_STRUCT #endif @@ -310,18 +217,10 @@ #define NLIST_STRUCT #endif -#ifdef tek4300 -#define NLIST_STRUCT -#endif - #ifdef butterfly #define NLIST_STRUCT #endif -#if defined(alliant) && defined(i860) /* Alliant FX/2800 */ -#define NLIST_STRUCT -#endif - #ifdef _AIX #define NLIST_STRUCT #endif @@ -333,25 +232,15 @@ #define FIXUP_KERNEL_SYMBOL_ADDR(nl) ((nl)[0].n_value &= ~(1 << 31)) #endif - -#if !defined (KERNEL_FILE) && defined (sequent) -#define KERNEL_FILE "/dynix" -#endif - #if !defined (KERNEL_FILE) && defined (hpux) #define KERNEL_FILE "/hp-ux" #endif -#if !defined(KERNEL_FILE) && (defined(_SEQUENT_) || defined(MIPS) || defined(SVR4) || defined(ISC) || defined (sgi) || defined(SVR4) || (defined (ardent) && defined (titan))) +#if !defined(KERNEL_FILE) && (defined(MIPS) || defined(SVR4) || defined(ISC) || defined (sgi) || defined(SVR4) || (defined (ardent) && defined (titan))) #define KERNEL_FILE "/unix" #endif - -#if !defined (LDAV_SYMBOL) && defined (alliant) -#define LDAV_SYMBOL "_Loadavg" -#endif - -#if !defined(LDAV_SYMBOL) && ((defined(hpux) && !defined(hp9000s300)) || defined(_SEQUENT_) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)) || defined (_AIX)) +#if !defined(LDAV_SYMBOL) && (defined(hpux) || defined(SVR4) || defined(ISC) || defined(sgi) || (defined (ardent) && defined (titan)) || defined (_AIX)) #define LDAV_SYMBOL "avenrun" #endif @@ -394,45 +283,10 @@ #endif /* LOAD_AVE_TYPE */ -#ifdef NeXT -#ifdef HAVE_MACH_MACH_H -#include <mach/mach.h> -#else -#include <mach.h> -#endif -#endif /* NeXT */ - #ifdef sgi #include <sys/sysmp.h> #endif /* sgi */ -#ifdef UMAX -#include <stdio.h> -#include "syssignal.h" -#include <sys/time.h> -#include <sys/wait.h> -#include <sys/syscall.h> - -#ifdef UMAX_43 -#include <machine/cpu.h> -#include <inq_stats/statistics.h> -#include <inq_stats/sysstats.h> -#include <inq_stats/cpustats.h> -#include <inq_stats/procstats.h> -#else /* Not UMAX_43. */ -#include <sys/sysdefs.h> -#include <sys/statistics.h> -#include <sys/sysstats.h> -#include <sys/cpudefs.h> -#include <sys/cpustats.h> -#include <sys/procstats.h> -#endif /* Not UMAX_43. */ -#endif /* UMAX */ - -#ifdef DGUX -#include <sys/dg_sys_info.h> -#endif - #if defined (HAVE_SYS_PSTAT_H) #include <sys/pstat.h> #endif /* HAVE_SYS_PSTAT_H (on HPUX) */ @@ -440,20 +294,6 @@ /* Avoid static vars inside a function since in HPUX they dump as pure. */ -#ifdef NeXT -static processor_set_t default_set; -static int getloadavg_initialized; -#endif /* NeXT */ - -#ifdef UMAX -static unsigned int cpus = 0; -static unsigned int samples; -#endif /* UMAX */ - -#ifdef DGUX -static struct dg_sys_info_load_info load_info; /* what-a-mouthful! */ -#endif /* DGUX */ - #ifdef LOAD_AVE_TYPE /* File descriptor open to /dev/kmem */ static int channel; @@ -617,139 +457,6 @@ loadavg[elem] = (double) load_ave[elem] / (double) scale; #endif /* __NetBSD__ or __OpenBSD__ */ -#if !defined (LDAV_DONE) && defined (NeXT) -#define LDAV_DONE - /* The NeXT code was adapted from iscreen 3.2. */ - - host_t host; - struct processor_set_basic_info info; - unsigned info_count; - - /* We only know how to get the 1-minute average for this system, - so even if the caller asks for more than 1, we only return 1. */ - - if (!getloadavg_initialized) - { - if (processor_set_default (host_self (), &default_set) == KERN_SUCCESS) - getloadavg_initialized = 1; - } - - if (getloadavg_initialized) - { - info_count = PROCESSOR_SET_BASIC_INFO_COUNT; - if (processor_set_info (default_set, PROCESSOR_SET_BASIC_INFO, &host, - (processor_set_info_t) &info, &info_count) - != KERN_SUCCESS) - getloadavg_initialized = 0; - else - { - if (nelem > 0) - loadavg[elem++] = (double) info.load_average / LOAD_SCALE; - } - } - - if (!getloadavg_initialized) - return -1; -#endif /* NeXT */ - -#if !defined (LDAV_DONE) && defined (UMAX) -#define LDAV_DONE -/* UMAX 4.2, which runs on the Encore Multimax multiprocessor, does not - have a /dev/kmem. Information about the workings of the running kernel - can be gathered with inq_stats system calls. - We only know how to get the 1-minute average for this system. */ - - struct proc_summary proc_sum_data; - struct stat_descr proc_info; - double load; - REGISTER unsigned int i, j; - - if (cpus == 0) - { - REGISTER unsigned int c, i; - struct cpu_config conf; - struct stat_descr desc; - - desc.sd_next = 0; - desc.sd_subsys = SUBSYS_CPU; - desc.sd_type = CPUTYPE_CONFIG; - desc.sd_addr = (char *) &conf; - desc.sd_size = sizeof (conf); - - if (inq_stats (1, &desc)) - return -1; - - c = 0; - for (i = 0; i < conf.config_maxclass; ++i) - { - struct class_stats stats; - memset ((char *) &stats, 0, sizeof (stats)); - - desc.sd_type = CPUTYPE_CLASS; - desc.sd_objid = i; - desc.sd_addr = (char *) &stats; - desc.sd_size = sizeof (stats); - - if (inq_stats (1, &desc)) - return -1; - - c += stats.class_numcpus; - } - cpus = c; - samples = cpus < 2 ? 3 : (2 * cpus / 3); - } - - proc_info.sd_next = 0; - proc_info.sd_subsys = SUBSYS_PROC; - proc_info.sd_type = PROCTYPE_SUMMARY; - proc_info.sd_addr = (char *) &proc_sum_data; - proc_info.sd_size = sizeof (struct proc_summary); - proc_info.sd_sizeused = 0; - - if (inq_stats (1, &proc_info) != 0) - return -1; - - load = proc_sum_data.ps_nrunnable; - j = 0; - for (i = samples - 1; i > 0; --i) - { - load += proc_sum_data.ps_nrun[j]; - if (j++ == PS_NRUNSIZE) - j = 0; - } - - if (nelem > 0) - loadavg[elem++] = load / samples / cpus; -#endif /* UMAX */ - -#if !defined (LDAV_DONE) && defined (DGUX) -#define LDAV_DONE - /* This call can return -1 for an error, but with good args - it's not supposed to fail. The first argument is for no - apparent reason of type `long int *'. */ - dg_sys_info ((long int *) &load_info, - DG_SYS_INFO_LOAD_INFO_TYPE, - DG_SYS_INFO_LOAD_VERSION_0); - - if (nelem > 0) - loadavg[elem++] = load_info.one_minute; - if (nelem > 1) - loadavg[elem++] = load_info.five_minute; - if (nelem > 2) - loadavg[elem++] = load_info.fifteen_minute; -#endif /* DGUX */ - -#if !defined (LDAV_DONE) && defined (OSF_MIPS) -#define LDAV_DONE - - struct tbl_loadavg load_ave; - table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); - loadavg[elem++] - = (load_ave.tl_lscale == 0 - ? load_ave.tl_avenrun.d[0] - : (load_ave.tl_avenrun.l[0] / (double) load_ave.tl_lscale)); -#endif /* OSF_MIPS */ - #if !defined (LDAV_DONE) && defined (WIN32_ANY) #define LDAV_DONE @@ -760,18 +467,6 @@ } #endif /* WIN32_NATIVE or CYGWIN */ -#if !defined (LDAV_DONE) && defined (OSF_ALPHA) -#define LDAV_DONE - - struct tbl_loadavg load_ave; - table (TBL_LOADAVG, 0, &load_ave, 1, sizeof (load_ave)); - for (elem = 0; elem < nelem; elem++) - loadavg[elem] - = (load_ave.tl_lscale == 0 - ? load_ave.tl_avenrun.d[elem] - : (load_ave.tl_avenrun.l[elem] / (double) load_ave.tl_lscale)); -#endif /* OSF_ALPHA */ - #if !defined (LDAV_DONE) && defined(LOAD_AVE_TYPE) /* UNIX-specific code -- read the average from /dev/kmem. */ @@ -788,13 +483,8 @@ strcpy (nl[0].n_name, LDAV_SYMBOL); strcpy (nl[1].n_name, ""); #else /* NLIST_STRUCT */ -#ifdef NLIST_NAME_UNION - nl[0].n_un.n_name = LDAV_SYMBOL; - nl[1].n_un.n_name = 0; -#else /* not NLIST_NAME_UNION */ nl[0].n_name = (char *) LDAV_SYMBOL; nl[1].n_name = 0; -#endif /* not NLIST_NAME_UNION */ #endif /* NLIST_STRUCT */ #ifndef SUNOS_5