From 2dc243c1d803ed84cdf0e548bb397098a84d6681 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Fri, 10 Sep 2010 01:51:32 -0700 Subject: [PATCH] systat - Fix overflow in page calculation on display * Fix an overflow that caused large amounts of memory to display incorrectly in the VM page queues column. * Display the Act/All fields from KB to MB. --- usr.bin/systat/vmstat.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/usr.bin/systat/vmstat.c b/usr.bin/systat/vmstat.c index 6c07666537..30cffcf881 100644 --- a/usr.bin/systat/vmstat.c +++ b/usr.bin/systat/vmstat.c @@ -278,7 +278,7 @@ labelkre(void) clear(); mvprintw(STATROW, STATCOL + 4, "users Load"); - mvprintw(MEMROW, MEMCOL, "Mem:KB REAL VIRTUAL"); + mvprintw(MEMROW, MEMCOL, "Mem:MB REAL VIRTUAL"); mvprintw(MEMROW + 1, MEMCOL, " Tot Share Tot Share"); mvprintw(MEMROW + 2, MEMCOL, "Act"); mvprintw(MEMROW + 3, MEMCOL, "All"); @@ -484,16 +484,17 @@ showkre(void) putfloat(avenrun[1], STATROW, STATCOL + 25, 6, 2, 0); putfloat(avenrun[2], STATROW, STATCOL + 32, 6, 2, 0); mvaddstr(STATROW, STATCOL + 53, buf); -#define pgtokb(pg) ((pg) * vms.v_page_size / 1024) - putint(pgtokb(total.t_arm), MEMROW + 2, MEMCOL + 3, 8, 'K'); - putint(pgtokb(total.t_armshr), MEMROW + 2, MEMCOL + 11, 8, 'K'); - putint(pgtokb(total.t_avm), MEMROW + 2, MEMCOL + 19, 9, 'K'); - putint(pgtokb(total.t_avmshr), MEMROW + 2, MEMCOL + 28, 9, 'K'); - putint(pgtokb(total.t_rm), MEMROW + 3, MEMCOL + 3, 8, 'K'); - putint(pgtokb(total.t_rmshr), MEMROW + 3, MEMCOL + 11, 8, 'K'); - putint(pgtokb(total.t_vm), MEMROW + 3, MEMCOL + 19, 9, 'K'); - putint(pgtokb(total.t_vmshr), MEMROW + 3, MEMCOL + 28, 9, 'K'); - putint(pgtokb(total.t_free), MEMROW + 2, MEMCOL + 37, 8, 'K'); +#define pgtokb(pg) (int)((intmax_t)(pg) * vms.v_page_size / 1024) +#define pgtomb(pg) (int)((intmax_t)(pg) * vms.v_page_size / (1024 * 1024)) + putint(pgtomb(total.t_arm), MEMROW + 2, MEMCOL + 3, 8, 'M'); + putint(pgtomb(total.t_armshr), MEMROW + 2, MEMCOL + 11, 8, 'M'); + putint(pgtomb(total.t_avm), MEMROW + 2, MEMCOL + 19, 9, 'M'); + putint(pgtomb(total.t_avmshr), MEMROW + 2, MEMCOL + 28, 9, 'M'); + putint(pgtomb(total.t_rm), MEMROW + 3, MEMCOL + 3, 8, 'M'); + putint(pgtomb(total.t_rmshr), MEMROW + 3, MEMCOL + 11, 8, 'M'); + putint(pgtomb(total.t_vm), MEMROW + 3, MEMCOL + 19, 9, 'M'); + putint(pgtomb(total.t_vmshr), MEMROW + 3, MEMCOL + 28, 9, 'M'); + putint(pgtomb(total.t_free), MEMROW + 2, MEMCOL + 37, 8, 'M'); putint(total.t_rq - 1, PROCSROW + 1, PROCSCOL + 0, 3, 'D'); putint(total.t_pw, PROCSROW + 1, PROCSCOL + 3, 3, 'D'); putint(total.t_dw, PROCSROW + 1, PROCSCOL + 6, 3, 'D'); -- 2.41.0