svn commit: r271410 - head/usr.bin/vmstat

Hiroki Sato hrs at FreeBSD.org
Wed Sep 10 22:34:09 UTC 2014


Author: hrs
Date: Wed Sep 10 22:34:08 2014
New Revision: 271410
URL: http://svnweb.freebsd.org/changeset/base/271410

Log:
  Fix header output when -P is specified and (ncpus - 1) != maxid.
  
  Reported by:	Hiroaki Shimizu
  PR:		152738

Modified:
  head/usr.bin/vmstat/vmstat.c

Modified: head/usr.bin/vmstat/vmstat.c
==============================================================================
--- head/usr.bin/vmstat/vmstat.c	Wed Sep 10 21:37:47 2014	(r271409)
+++ head/usr.bin/vmstat/vmstat.c	Wed Sep 10 22:34:08 2014	(r271410)
@@ -657,6 +657,8 @@ dovmstat(unsigned int interval, int reps
 	uptime = getuptime();
 	halfuptime = uptime / 2;
 	rate_adj = 1;
+	ncpus = 1;
+	maxid = 0;
 
 	/*
 	 * If the user stops the program (control-Z) and then resumes it,
@@ -702,7 +704,7 @@ dovmstat(unsigned int interval, int reps
 	}
 	for (hdrcnt = 1;;) {
 		if (!--hdrcnt)
-			printhdr(ncpus, cpumask);
+			printhdr(maxid, cpumask);
 		if (kd != NULL) {
 			if (kvm_getcptime(kd, cur.cp_time) < 0)
 				errx(1, "kvm_getcptime: %s", kvm_geterr(kd));
@@ -753,7 +755,7 @@ dovmstat(unsigned int interval, int reps
 				errx(1, "%s", devstat_errbuf);
 				break;
 			case 1:
-				printhdr(ncpus, cpumask);
+				printhdr(maxid, cpumask);
 				break;
 			default:
 				break;
@@ -822,7 +824,7 @@ dovmstat(unsigned int interval, int reps
 }
 
 static void
-printhdr(int ncpus, u_long cpumask)
+printhdr(int maxid, u_long cpumask)
 {
 	int i, num_shown;
 
@@ -834,7 +836,7 @@ printhdr(int ncpus, u_long cpumask)
 		(void)printf("disk");
 	(void)printf("   faults         ");
 	if (Pflag) {
-		for (i = 0; i < ncpus; i++) {
+		for (i = 0; i <= maxid; i++) {
 			if (cpumask & (1ul << i))
 				printf("cpu%-2d    ", i);
 		}
@@ -850,8 +852,10 @@ printhdr(int ncpus, u_long cpumask)
 				     dev_select[i].unit_number);
 	(void)printf("  in   sy   cs");
 	if (Pflag) {
-		for (i = 0; i < ncpus; i++)
-			printf(" us sy id");
+		for (i = 0; i <= maxid; i++) {
+			if (cpumask & (1ul << i))
+				printf(" us sy id");
+		}
 		printf("\n");
 	} else
 		printf(" us sy id\n");


More information about the svn-src-head mailing list