head 1.2; access; symbols pkgsrc-2013Q2:1.2.0.48 pkgsrc-2013Q2-base:1.2 pkgsrc-2012Q4:1.2.0.46 pkgsrc-2012Q4-base:1.2 pkgsrc-2011Q4:1.2.0.44 pkgsrc-2011Q4-base:1.2 pkgsrc-2011Q2:1.2.0.42 pkgsrc-2011Q2-base:1.2 pkgsrc-2009Q4:1.2.0.40 pkgsrc-2009Q4-base:1.2 pkgsrc-2008Q4:1.2.0.38 pkgsrc-2008Q4-base:1.2 pkgsrc-2008Q3:1.2.0.36 pkgsrc-2008Q3-base:1.2 cube-native-xorg:1.2.0.34 cube-native-xorg-base:1.2 pkgsrc-2008Q2:1.2.0.32 pkgsrc-2008Q2-base:1.2 pkgsrc-2008Q1:1.2.0.30 pkgsrc-2008Q1-base:1.2 pkgsrc-2007Q4:1.2.0.28 pkgsrc-2007Q4-base:1.2 pkgsrc-2007Q3:1.2.0.26 pkgsrc-2007Q3-base:1.2 pkgsrc-2007Q2:1.2.0.24 pkgsrc-2007Q2-base:1.2 pkgsrc-2007Q1:1.2.0.22 pkgsrc-2007Q1-base:1.2 pkgsrc-2006Q4:1.2.0.20 pkgsrc-2006Q4-base:1.2 pkgsrc-2006Q3:1.2.0.18 pkgsrc-2006Q3-base:1.2 pkgsrc-2006Q2:1.2.0.16 pkgsrc-2006Q2-base:1.2 pkgsrc-2006Q1:1.2.0.14 pkgsrc-2006Q1-base:1.2 pkgsrc-2005Q4:1.2.0.12 pkgsrc-2005Q4-base:1.2 pkgsrc-2005Q3:1.2.0.10 pkgsrc-2005Q3-base:1.2 pkgsrc-2005Q2:1.2.0.8 pkgsrc-2005Q2-base:1.2 pkgsrc-2005Q1:1.2.0.6 pkgsrc-2005Q1-base:1.2 pkgsrc-2004Q4:1.2.0.4 pkgsrc-2004Q4-base:1.2 pkgsrc-2004Q3:1.2.0.2 pkgsrc-2004Q3-base:1.2 pkgsrc-2004Q2:1.1.0.14 pkgsrc-2004Q2-base:1.1 pkgsrc-2004Q1:1.1.0.12 pkgsrc-2004Q1-base:1.1 pkgsrc-2003Q4:1.1.0.10 pkgsrc-2003Q4-base:1.1 netbsd-1-6-1:1.1.0.6 netbsd-1-6-1-base:1.1 netbsd-1-6:1.1.0.8 netbsd-1-6-RELEASE-base:1.1 pkgviews:1.1.0.4 pkgviews-base:1.1 buildlink2:1.1.0.2 buildlink2-base:1.1 netbsd-1-5-PATCH003:1.1 netbsd-1-5-PATCH001:1.1 netbsd-1-5-RELEASE:1.1 netbsd-1-4-PATCH003:1.1 netbsd-1-4-PATCH002:1.1; locks; strict; comment @# @; 1.2 date 2004.07.11.19.53.06; author cube; state dead; branches; next 1.1; 1.1 date 99.12.08.16.18.49; author agc; state Exp; branches; next ; desc @@ 1.2 log @Update to version 3.6alpha7. Thanks to Christos Zoulas for NetBSD support. Fixes PR 26249. @ text @$NetBSD: patch-af,v 1.1 1999/12/08 16:18:49 agc Exp $ --- machine/m_netbsd10.c Fri Jan 26 06:27:18 1996 +++ machine/m_netbsd10.c Sat Oct 4 03:27:03 1997 @@@@ -3,3 +3,3 @@@@ * - * SYNOPSIS: For a NetBSD-1.0 (4.4BSD) system + * SYNOPSIS: For a NetBSD-1.0 through NetBSD-1.2.1 system * Note process resident sizes could be wrong, but ps shows @@@@ -9,5 +9,5 @@@@ * Originally written for BSD4.4 system by Christos Zoulas. - * Based on the FreeBSD 2.0 version by Steven Wallace && Wolfram Schneider - * NetBSD-1.0 port by Arne Helme - * . + * Based on the FreeBSD 2.0 version by Steven Wallace && Wolfram Schneider. + * NetBSD-1.0 port by Arne Helme. Process ordering added by Luke Mewburn. + * * This is the machine-dependent module for NetBSD-1.0 @@@@ -15,2 +15,5 @@@@ * NetBSD-1.0 + * NetBSD-1.1 + * NetBSD-1.2 + * NetBSD-1.2.1 * @@@@ -18,3 +21,3 @@@@ * - * CFLAGS: -DHAVE_GETOPT + * CFLAGS: -DHAVE_GETOPT -DORDER * @@@@ -24,2 +27,4 @@@@ * Arne Helme + * Luke Mewburn + * * @@@@ -30,4 +35,4 @@@@ -#define LASTPID /**/ /* use last pid, compiler depended */ -/* #define LASTPID_FIXED /**/ +/* #define LASTPID */ /* use last pid, compiler depended */ +/* #define LASTPID_FIXED */ #define VM_REAL /**/ /* use the same values as vmstat -s */ @@@@ -53,2 +58,11 @@@@ +#include "os.h" + +#include +#include +#include +#include +#include +#include + #ifdef USE_SWAP @@@@ -87,3 +101,4 @@@@ /* what we consider to be process size: */ -#define PROCSIZE(pp) (VP((pp), vm_tsize) + VP((pp), vm_dsize) + VP((pp), vm_ssize)) +#define PROCSIZE(pp) \ + (VP((pp), vm_tsize) + VP((pp), vm_dsize) + VP((pp), vm_ssize)) @@@@ -171,3 +186,3 @@@@ { - "", "start", "run\0\0\0", "sleep", "stop", "zomb", "WAIT" + "", "start", "run\0\0\0", "sleep", "stop", "zomb" }; @@@@ -196,3 +211,2 @@@@ static unsigned long cnt_offset; -static long cnt; #endif @@@@ -239,2 +253,33 @@@@ + +/* these are names given to allowed sorting orders -- first is default */ +char *ordernames[] = { + "cpu", + "pri", + "res", + "size", + "state", + "time", + NULL +}; + +/* forward definitions for comparison functions */ +int compare_cpu(); +int compare_prio(); +int compare_res(); +int compare_size(); +int compare_state(); +int compare_time(); + +int (*proc_compares[])() = { + compare_cpu, + compare_prio, + compare_res, + compare_size, + compare_state, + compare_time, + NULL +}; + + /* these are for keeping track of the proc array */ @@@@ -260,8 +305,6 @@@@ machine_init(statics) - -struct statics *statics; - + struct statics *statics; { - register int i = 0; - register int pagesize; + int i = 0; + int pagesize; @@@@ -293,6 +336,2 @@@@ -#if (defined DEBUG) - fprintf(stderr, "Hertz: %d\n", hz); -#endif - (void) getkval(nlst[X_CCPU].n_value, (int *)(&ccpu), sizeof(ccpu), @@@@ -333,2 +372,3 @@@@ statics->memory_names = memorynames; + statics->order_names = ordernames; @@@@ -338,8 +378,7 @@@@ -char *format_header(uname_field) - -register char *uname_field; - +char * +format_header(uname_field) + char *uname_field; { - register char *ptr; + char *ptr; @@@@ -360,8 +399,5 @@@@ get_system_info(si) - -struct system_info *si; - + struct system_info *si; { long total; - load_avg avenrun[3]; @@@@ -370,31 +406,13 @@@@ nlst[X_CP_TIME].n_name); - (void) getkval(avenrun_offset, (int *)avenrun, sizeof(avenrun), - nlst[X_AVENRUN].n_name); #ifdef LASTPID - (void) getkval(lastpid_offset, (int *)(&lastpid), sizeof(lastpid), - "!"); + (void) getkval(lastpid_offset, (int *)(&lastpid), sizeof(lastpid), "!"); #endif - /* convert load averages to doubles */ - { - register int i; - register double *infoloadp; - load_avg *avenrunp; + if (getloadavg(si->load_avg, NUM_AVERAGES) < 0) { + int i; -#ifdef notyet - struct loadavg sysload; - int size; - getkerninfo(KINFO_LOADAVG, &sysload, &size, 0); -#endif - - infoloadp = si->load_avg; - avenrunp = avenrun; - for (i = 0; i < 3; i++) - { -#ifdef notyet - *infoloadp++ = ((double) sysload.ldavg[i]) / sysload.fscale; -#endif - *infoloadp++ = loaddouble(*avenrunp++); - } + warn("can't getloadavg"); + for (i = 0; i < NUM_AVERAGES; i++) + si->load_avg[i] = 0.0; } @@@@ -426,4 +444,4 @@@@ memory_stats[7] = pagetok(total.t_free); - } -#else + +#else /* !VM_REAL */ struct vmmeter sum; @@@@ -455,5 +473,5 @@@@ /* swap_delay++; XXX Arne */ -#else +#else /* !USE_SWAP */ memory_stats[4] = 0; -#endif +#endif /* !USE_SWAP */ @@@@ -461,4 +479,5 @@@@ memory_stats[7] = -1; +#endif /* !VM_REAL */ } -#endif + /* set arrays and strings */ @@@@ -480,14 +498,13 @@@@ -caddr_t get_process_info(si, sel, compare) - -struct system_info *si; -struct process_select *sel; -int (*compare)(); - +caddr_t +get_process_info(si, sel, compare) + struct system_info *si; + struct process_select *sel; + int (*compare)(); { - register int i; - register int total_procs; - register int active_procs; - register struct kinfo_proc **prefp; - register struct kinfo_proc *pp; + int i; + int total_procs; + int active_procs; + struct kinfo_proc **prefp; + struct kinfo_proc *pp; @@@@ -564,11 +581,10 @@@@ -char *format_next_process(handle, get_userid) - -caddr_t handle; -char *(*get_userid)(); - +char * +format_next_process(handle, get_userid) + caddr_t handle; + char *(*get_userid)(); { - register struct kinfo_proc *pp; - register long cputime; - register double pct; + struct kinfo_proc *pp; + long cputime; + double pct; struct handle *hp; @@@@ -633,8 +649,7 @@@@ -static int check_nlist(nlst) - -register struct nlist *nlst; - +static int +check_nlist(nlst) + struct nlist *nlst; { - register int i; + int i; @@@@ -672,9 +687,8 @@@@ -static int getkval(offset, ptr, size, refstr) - -unsigned long offset; -int *ptr; -int size; -char *refstr; - +static int +getkval(offset, ptr, size, refstr) + unsigned long offset; + int *ptr; + int size; + char *refstr; { @@@@ -696,12 +710,13 @@@@ -/* comparison routine for qsort */ +/* comparison routines for qsort */ /* - * proc_compare - comparison function for "qsort" - * Compares the resource consumption of two processes using five - * distinct keys. The keys (in descending order of importance) are: - * percent cpu, cpu ticks, state, resident set size, total virtual - * memory usage. The process states are ordered as follows (from least - * to most important): WAIT, zombie, sleep, stop, start, run. The - * array declaration below maps a process state index into a number + * There are currently four possible comparison routines. main selects + * one of these by indexing in to the array proc_compares. + * + * Possible keys are defined as macros below. Currently these keys are + * defined: percent cpu, cpu ticks, process state, resident set size, + * total virtual memory usage. The process states are ordered as follows + * (from least to most important): WAIT, zombie, sleep, stop, start, run. + * The array declaration below maps a process state index into a number * that reflects this ordering. @@@@ -709,24 +724,79 @@@@ -static unsigned char sorted_state[] = -{ - 0, /* not used */ - 3, /* sleep */ - 1, /* ABANDONED (WAIT) */ - 6, /* run */ - 5, /* start */ - 2, /* zombie */ - 4 /* stop */ +/* + * First, the possible comparison keys. These are defined in such a way + * that they can be merely listed in the source code to define the actual + * desired ordering. + */ + +#define ORDERKEY_PCTCPU \ + if (lresult = PP(p2, p_pctcpu) - PP(p1, p_pctcpu),\ + (result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0) + +#define ORDERKEY_CPTICKS \ + if (lresult = PP(p2, p_rtime).tv_sec - PP(p1, p_rtime).tv_sec,\ + (result = lresult > 0 ? 1 : lresult < 0 ? -1 : 0) == 0) + +#define ORDERKEY_STATE \ + if ((result = sorted_state[(int)PP(p2, p_stat)] - \ + sorted_state[(int)PP(p1, p_stat)] ) == 0) + +#define ORDERKEY_PRIO \ + if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0) + +#define ORDERKEY_RSSIZE \ + if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0) + +#define ORDERKEY_MEM \ + if ((result = (PROCSIZE(p2) - PROCSIZE(p1))) == 0) + +/* + * Now the array that maps process state to a weight. + * The order of the elements should match those in state_abbrev[] + */ + +static int sorted_state[] = { + 0, /* (not used) ? */ + 4, /* "start" SIDL */ + 5, /* "run" SRUN */ + 2, /* "sleep" SSLEEP */ + 3, /* "stop" SSTOP */ + 1, /* "zomb" SZOMB */ }; +/* compare_cpu - the comparison function for sorting by cpu percentage */ + int -proc_compare(pp1, pp2) +compare_cpu(pp1, pp2) + struct proc **pp1, **pp2; +{ + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; + + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; -struct proc **pp1; -struct proc **pp2; + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_PRIO + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; + return (result); +} + +/* compare_prio - the comparison function for sorting by process priority */ + +int +compare_prio(pp1, pp2) + struct proc **pp1, **pp2; { - register struct kinfo_proc *p1; - register struct kinfo_proc *p2; - register int result; - register pctcpu lresult; + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; @@@@ -736,31 +806,115 @@@@ - /* compare percent cpu (pctcpu) */ - if ((lresult = PP(p2, p_pctcpu) - PP(p1, p_pctcpu)) == 0) - { - /* use cpticks to break the tie */ - if ((result = PP(p2, p_cpticks) - PP(p1, p_cpticks)) == 0) - { - /* use process state to break the tie */ - if ((result = sorted_state[(unsigned char) PP(p2, p_stat)] - - sorted_state[(unsigned char) PP(p1, p_stat)]) == 0) - { - /* use priority to break the tie */ - if ((result = PP(p2, p_priority) - PP(p1, p_priority)) == 0) - { - /* use resident set size (rssize) to break the tie */ - if ((result = VP(p2, vm_rssize) - VP(p1, vm_rssize)) == 0) - { - /* use total memory to break the tie */ - result = PROCSIZE(p2) - PROCSIZE(p1); - } - } - } - } - } - else - { - result = lresult < 0 ? -1 : 1; - } + ORDERKEY_PRIO + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; - return(result); + return (result); +} + +/* compare_res - the comparison function for sorting by resident set size */ + +int +compare_res(pp1, pp2) + struct proc **pp1, **pp2; +{ + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; + + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; + + ORDERKEY_RSSIZE + ORDERKEY_MEM + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_PRIO + ; + + return (result); +} + +/* compare_size - the comparison function for sorting by total memory usage */ + +int +compare_size(pp1, pp2) + struct proc **pp1, **pp2; +{ + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; + + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; + + ORDERKEY_MEM + ORDERKEY_RSSIZE + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_STATE + ORDERKEY_PRIO + ; + + return (result); +} + +/* compare_state - the comparison function for sorting by process state */ + +int +compare_state(pp1, pp2) + struct proc **pp1, **pp2; +{ + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; + + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; + + ORDERKEY_STATE + ORDERKEY_PCTCPU + ORDERKEY_CPTICKS + ORDERKEY_PRIO + ORDERKEY_RSSIZE + ORDERKEY_MEM + ; + + return (result); +} + +/* compare_time - the comparison function for sorting by total cpu time */ + +int +compare_time(pp1, pp2) + struct proc **pp1, **pp2; +{ + struct kinfo_proc *p1; + struct kinfo_proc *p2; + int result; + pctcpu lresult; + + /* remove one level of indirection */ + p1 = *(struct kinfo_proc **) pp1; + p2 = *(struct kinfo_proc **) pp2; + + ORDERKEY_CPTICKS + ORDERKEY_PCTCPU + ORDERKEY_STATE + ORDERKEY_PRIO + ORDERKEY_MEM + ORDERKEY_RSSIZE + ; + + return (result); } @@@@ -778,10 +932,9 @@@@ -int proc_owner(pid) - -int pid; - +int +proc_owner(pid) + int pid; { - register int cnt; - register struct kinfo_proc **prefp; - register struct kinfo_proc *pp; + int cnt; + struct kinfo_proc **prefp; + struct kinfo_proc *pp; @@@@ -832,2 +985,3 @@@@ + l = 0; KGET(VM_NSWAP, nswap); @@@@ -938,4 +1092,2 @@@@ - -#endif - +#endif /* USE_SWAP */ @ 1.1 log @Split patch-aa into multiple files. Make the patch to util.c apply without fuzz. @ text @d1 1 a1 1 $NetBSD$ @