From bad4d172b4512bf80adc9f64dbb4bde74cc6bd98 Mon Sep 17 00:00:00 2001 From: Ruslan Ermilov Date: Tue, 28 Nov 2006 12:46:02 +0000 Subject: [PATCH] - Revert signedness type changes to "struct vmtotal"; by making them unsigned I made the possible overflows hard to detect, and it only saved 1 bit which isn't principal, even less now that the underlying issue with the total of virtual memory has been fixed. (For the record, it will overflow with >=2T of VM total, with 32-bit ints used to keep counters in pages.) - While here, fix printing of other "struct vmtotal" members such as t_rq, t_dw, t_pw, and t_sw as they are also signed. Reviewed by: bde MFC after: 3 days --- release/picobsd/tinyware/vm/vm.c | 20 +++--- sbin/sysctl/sysctl.c | 26 ++++---- sys/sys/vmmeter.h | 28 ++++----- usr.bin/systat/vmstat.c | 105 ++++++------------------------- usr.bin/vmstat/vmstat.c | 7 +-- 5 files changed, 55 insertions(+), 131 deletions(-) diff --git a/release/picobsd/tinyware/vm/vm.c b/release/picobsd/tinyware/vm/vm.c index 236020b9e24f..90bb8ddd388d 100644 --- a/release/picobsd/tinyware/vm/vm.c +++ b/release/picobsd/tinyware/vm/vm.c @@ -95,18 +95,14 @@ main(int argc, char *argv[]) printf(" procs kB virt mem real mem shared vm shared real free\n"); printf(" r w l s tot act tot act tot act tot act\n"); } - printf("%2hu%2hu%2hu%2hu",v.t_rq-1,v.t_dw+v.t_pw,v.t_sl,v.t_sw); - printf("%7lu %7lu %7lu%7lu", - (unsigned long)pgtok(v.t_vm), - (unsigned long)pgtok(v.t_avm), - (unsigned long)pgtok(v.t_rm), - (unsigned long)pgtok(v.t_arm)); - printf("%7lu%7lu%7lu%7lu%7lu\n", - (unsigned long)pgtok(v.t_vmshr), - (unsigned long)pgtok(v.t_avmshr), - (unsigned long)pgtok(v.t_rmshr), - (unsigned long)pgtok(v.t_armshr), - (unsigned long)pgtok(v.t_free)); + printf("%2hd%2hd%2hd%2hd",v.t_rq-1,v.t_dw+v.t_pw,v.t_sl,v.t_sw); + printf("%7d %7d %7d%7d", + pgtok(v.t_vm),pgtok(v.t_avm), + pgtok(v.t_rm),pgtok(v.t_arm)); + printf("%7d%7d%7d%7d%7d\n", + pgtok(v.t_vmshr),pgtok(v.t_avmshr), + pgtok(v.t_rmshr),pgtok(v.t_armshr), + pgtok(v.t_free)); sleep(5); i++; if(i>22) i=0; diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c index 7f442a7ec881..3ee565886419 100644 --- a/sbin/sysctl/sysctl.c +++ b/sbin/sysctl/sysctl.c @@ -54,7 +54,6 @@ static const char rcsid[] = #include #include #include -#include #include #include #include @@ -392,22 +391,19 @@ S_vmtotal(int l2, void *p) " (values in kilobytes)\n"); printf("===============================================\n"); printf( - "Processes:\t\t(RUNQ: %hu Disk Wait: %hu Page Wait: " - "%hu Sleep: %hu)\n", + "Processes:\t\t(RUNQ: %hd Disk Wait: %hd Page Wait: " + "%hd Sleep: %hd)\n", v->t_rq, v->t_dw, v->t_pw, v->t_sl); printf( - "Virtual Memory:\t\t(Total: %juK, Active %juK)\n", - (uintmax_t)v->t_vm * pageKilo, - (uintmax_t)v->t_avm * pageKilo); - printf("Real Memory:\t\t(Total: %juK Active %juK)\n", - (uintmax_t)v->t_rm * pageKilo, (uintmax_t)v->t_arm * pageKilo); - printf("Shared Virtual Memory:\t(Total: %juK Active: %juK)\n", - (uintmax_t)v->t_vmshr * pageKilo, - (uintmax_t)v->t_avmshr * pageKilo); - printf("Shared Real Memory:\t(Total: %juK Active: %juK)\n", - (uintmax_t)v->t_rmshr * pageKilo, - (uintmax_t)v->t_armshr * pageKilo); - printf("Free Memory Pages:\t%juK\n", (uintmax_t)v->t_free * pageKilo); + "Virtual Memory:\t\t(Total: %dK, Active %dK)\n", + v->t_vm * pageKilo, v->t_avm * pageKilo); + printf("Real Memory:\t\t(Total: %dK Active %dK)\n", + v->t_rm * pageKilo, v->t_arm * pageKilo); + printf("Shared Virtual Memory:\t(Total: %dK Active: %dK)\n", + v->t_vmshr * pageKilo, v->t_avmshr * pageKilo); + printf("Shared Real Memory:\t(Total: %dK Active: %dK)\n", + v->t_rmshr * pageKilo, v->t_armshr * pageKilo); + printf("Free Memory Pages:\t%dK\n", v->t_free * pageKilo); return (0); } diff --git a/sys/sys/vmmeter.h b/sys/sys/vmmeter.h index a0b8cd24b2a1..793f32d37738 100644 --- a/sys/sys/vmmeter.h +++ b/sys/sys/vmmeter.h @@ -191,20 +191,20 @@ vm_paging_needed(void) /* systemwide totals computed every five seconds */ struct vmtotal { - uint16_t t_rq; /* length of the run queue */ - uint16_t t_dw; /* jobs in ``disk wait'' (neg priority) */ - uint16_t t_pw; /* jobs in page wait */ - uint16_t t_sl; /* jobs sleeping in core */ - uint16_t t_sw; /* swapped out runnable/short block jobs */ - uint32_t t_vm; /* total virtual memory */ - uint32_t t_avm; /* active virtual memory */ - uint32_t t_rm; /* total real memory in use */ - uint32_t t_arm; /* active real memory */ - uint32_t t_vmshr; /* shared virtual memory */ - uint32_t t_avmshr; /* active shared virtual memory */ - uint32_t t_rmshr; /* shared real memory */ - uint32_t t_armshr; /* active shared real memory */ - uint32_t t_free; /* free memory pages */ + int16_t t_rq; /* length of the run queue */ + int16_t t_dw; /* jobs in ``disk wait'' (neg priority) */ + int16_t t_pw; /* jobs in page wait */ + int16_t t_sl; /* jobs sleeping in core */ + int16_t t_sw; /* swapped out runnable/short block jobs */ + int32_t t_vm; /* total virtual memory */ + int32_t t_avm; /* active virtual memory */ + int32_t t_rm; /* total real memory in use */ + int32_t t_arm; /* active real memory */ + int32_t t_vmshr; /* shared virtual memory */ + int32_t t_avmshr; /* active shared virtual memory */ + int32_t t_rmshr; /* shared real memory */ + int32_t t_armshr; /* active shared real memory */ + int32_t t_free; /* free memory pages */ }; #endif diff --git a/usr.bin/systat/vmstat.c b/usr.bin/systat/vmstat.c index 4aac01c3c435..5aa28c15b7cd 100644 --- a/usr.bin/systat/vmstat.c +++ b/usr.bin/systat/vmstat.c @@ -58,7 +58,6 @@ static const char sccsid[] = "@(#)vmstat.c 8.2 (Berkeley) 1/12/94"; #include #include #include -#include #include #include #include @@ -137,8 +136,6 @@ static float cputime(int); static void dinfo(int, int, struct statinfo *, struct statinfo *); static void getinfo(struct Info *); static void putint(int, int, int, int); -static void putuint(unsigned, int, int, int); -static void putuintmax(uintmax_t, int, int, int); static void putfloat(double, int, int, int, int, int); static void putlongdouble(long double, int, int, int, int, int); static int ucount(void); @@ -492,20 +489,20 @@ showkre() putfloat(avenrun[2], STATROW, STATCOL + 32, 5, 2, 0); mvaddstr(STATROW, STATCOL + 55, buf); #define pgtokb(pg) ((pg) * (s.v_page_size / 1024)) - putuintmax(pgtokb(total.t_arm), MEMROW + 2, MEMCOL + 4, 7); - putuintmax(pgtokb(total.t_armshr), MEMROW + 2, MEMCOL + 12, 7); - putuintmax(pgtokb(total.t_avm), MEMROW + 2, MEMCOL + 20, 8); - putuintmax(pgtokb(total.t_avmshr), MEMROW + 2, MEMCOL + 29, 8); - putuintmax(pgtokb(total.t_rm), MEMROW + 3, MEMCOL + 4, 7); - putuintmax(pgtokb(total.t_rmshr), MEMROW + 3, MEMCOL + 12, 7); - putuintmax(pgtokb(total.t_vm), MEMROW + 3, MEMCOL + 20, 8); - putuintmax(pgtokb(total.t_vmshr), MEMROW + 3, MEMCOL + 29, 8); - putuintmax(pgtokb(total.t_free), MEMROW + 2, MEMCOL + 38, 7); - putuint(total.t_rq - 1, PROCSROW + 2, PROCSCOL, 3); - putuint(total.t_pw, PROCSROW + 2, PROCSCOL + 4, 3); - putuint(total.t_dw, PROCSROW + 2, PROCSCOL + 8, 3); - putuint(total.t_sl, PROCSROW + 2, PROCSCOL + 12, 3); - putuint(total.t_sw, PROCSROW + 2, PROCSCOL + 16, 3); + putint(pgtokb(total.t_arm), MEMROW + 2, MEMCOL + 4, 7); + putint(pgtokb(total.t_armshr), MEMROW + 2, MEMCOL + 12, 7); + putint(pgtokb(total.t_avm), MEMROW + 2, MEMCOL + 20, 8); + putint(pgtokb(total.t_avmshr), MEMROW + 2, MEMCOL + 29, 8); + putint(pgtokb(total.t_rm), MEMROW + 3, MEMCOL + 4, 7); + putint(pgtokb(total.t_rmshr), MEMROW + 3, MEMCOL + 12, 7); + putint(pgtokb(total.t_vm), MEMROW + 3, MEMCOL + 20, 8); + putint(pgtokb(total.t_vmshr), MEMROW + 3, MEMCOL + 29, 8); + putint(pgtokb(total.t_free), MEMROW + 2, MEMCOL + 38, 7); + putint(total.t_rq - 1, PROCSROW + 2, PROCSCOL, 3); + putint(total.t_pw, PROCSROW + 2, PROCSCOL + 4, 3); + putint(total.t_dw, PROCSROW + 2, PROCSCOL + 8, 3); + putint(total.t_sl, PROCSROW + 2, PROCSCOL + 12, 3); + putint(total.t_sw, PROCSROW + 2, PROCSCOL + 16, 3); PUTRATE(v_cow_faults, VMSTATROW, VMSTATCOL + 2, 8 - 2); PUTRATE(v_zfod, VMSTATROW + 1, VMSTATCOL + 2, 8 - 2); PUTRATE(v_ozfod, VMSTATROW + 2, VMSTATCOL, 8); @@ -518,11 +515,11 @@ showkre() PUTRATE(v_pdwakeups, VMSTATROW + 8, VMSTATCOL, 8); PUTRATE(v_pdpages, VMSTATROW + 9, VMSTATCOL, 8); PUTRATE(v_intrans, VMSTATROW + 10, VMSTATCOL, 8); - putuintmax(pgtokb(s.v_wire_count), VMSTATROW + 11, VMSTATCOL, 8); - putuintmax(pgtokb(s.v_active_count), VMSTATROW + 12, VMSTATCOL, 8); - putuintmax(pgtokb(s.v_inactive_count), VMSTATROW + 13, VMSTATCOL, 8); - putuintmax(pgtokb(s.v_cache_count), VMSTATROW + 14, VMSTATCOL, 8); - putuintmax(pgtokb(s.v_free_count), VMSTATROW + 15, VMSTATCOL, 8); + putint(pgtokb(s.v_wire_count), VMSTATROW + 11, VMSTATCOL, 8); + putint(pgtokb(s.v_active_count), VMSTATROW + 12, VMSTATCOL, 8); + putint(pgtokb(s.v_inactive_count), VMSTATROW + 13, VMSTATCOL, 8); + putint(pgtokb(s.v_cache_count), VMSTATROW + 14, VMSTATCOL, 8); + putint(pgtokb(s.v_free_count), VMSTATROW + 15, VMSTATCOL, 8); if (LINES - 1 > VMSTATROW + 16) putint(s.bufspace / 1024, VMSTATROW + 16, VMSTATCOL, 8); PUTRATE(v_vnodein, PAGEROW + 2, PAGECOL + 6, 5); @@ -696,70 +693,6 @@ putint(n, l, lc, w) addstr(b); } -static void -putuint(n, l, lc, w) - unsigned n; - int l, lc, w; -{ - int snr; - char b[128]; - - move(l, lc); -#ifdef DEBUG - while (w-- > 0) - addch('*'); - return; -#endif - if (n == 0) { - while (w-- > 0) - addch(' '); - return; - } - snr = snprintf(b, sizeof(b), "%*u", w, n); - if (snr != w) - snr = snprintf(b, sizeof(b), "%*uk", w - 1, n / 1000); - if (snr != w) - snr = snprintf(b, sizeof(b), "%*uM", w - 1, n / 1000000); - if (snr != w) { - while (w-- > 0) - addch('*'); - return; - } - addstr(b); -} - -static void -putuintmax(n, l, lc, w) - uintmax_t n; - int l, lc, w; -{ - int snr; - char b[128]; - - move(l, lc); -#ifdef DEBUG - while (w-- > 0) - addch('*'); - return; -#endif - if (n == 0) { - while (w-- > 0) - addch(' '); - return; - } - snr = snprintf(b, sizeof(b), "%*ju", w, n); - if (snr != w) - snr = snprintf(b, sizeof(b), "%*juk", w - 1, n / 1000); - if (snr != w) - snr = snprintf(b, sizeof(b), "%*juM", w - 1, n / 1000000); - if (snr != w) { - while (w-- > 0) - addch('*'); - return; - } - addstr(b); -} - static void putfloat(f, l, lc, w, d, nz) double f; diff --git a/usr.bin/vmstat/vmstat.c b/usr.bin/vmstat/vmstat.c index ef5ba8abd0a7..efd5b79945ef 100644 --- a/usr.bin/vmstat/vmstat.c +++ b/usr.bin/vmstat/vmstat.c @@ -65,7 +65,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -575,11 +574,11 @@ dovmstat(unsigned int interval, int reps) fill_vmmeter(&sum); fill_vmtotal(&total); - (void)printf("%2u %1u %1u", + (void)printf("%2d %1d %1d", total.t_rq - 1, total.t_dw + total.t_pw, total.t_sw); -#define vmstat_pgtok(a) ((uintmax_t)(a) * (sum.v_page_size >> 10)) +#define vmstat_pgtok(a) ((a) * (sum.v_page_size >> 10)) #define rate(x) (((x) + halfuptime) / uptime) /* round */ - (void)printf(" %7ju %6ju ", vmstat_pgtok(total.t_avm), + (void)printf(" %7d %6d ", vmstat_pgtok(total.t_avm), vmstat_pgtok(total.t_free)); (void)printf("%5lu ", (unsigned long)rate(sum.v_vm_faults - osum.v_vm_faults));