Module Name:    src
Committed By:   mrg
Date:           Mon Sep 23 20:15:31 UTC 2019

Modified Files:
        src/usr.sbin/intrctl: intrctl.8 intrctl.c

Log Message:
add -z flag to intrctl list, which elides all-zero rows.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/usr.sbin/intrctl/intrctl.8
cvs rdiff -u -r1.9 -r1.10 src/usr.sbin/intrctl/intrctl.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.sbin/intrctl/intrctl.8
diff -u src/usr.sbin/intrctl/intrctl.8:1.5 src/usr.sbin/intrctl/intrctl.8:1.6
--- src/usr.sbin/intrctl/intrctl.8:1.5	Mon Sep 23 09:17:19 2019
+++ src/usr.sbin/intrctl/intrctl.8	Mon Sep 23 20:15:31 2019
@@ -1,4 +1,4 @@
-.\" $NetBSD: intrctl.8,v 1.5 2019/09/23 09:17:19 mrg Exp $
+.\" $NetBSD: intrctl.8,v 1.6 2019/09/23 20:15:31 mrg Exp $
 .\"
 .\" Copyright (c) 2015 Internet Initiative Japan Inc.
 .\" All rights reserved.
@@ -24,7 +24,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd September 22, 2019
+.Dd September 23, 2019
 .Dt INTRCTL 8
 .Os
 .Sh NAME
@@ -56,7 +56,7 @@ enable to set an interrupt's affinity to
 If
 .Ar cpu_index
 is already enabled, this command has no effect.
-.It list Oo Fl c Oc Op Fl w Ar wait
+.It list Oo Fl c Oc Oo Fl w Ar wait Oc Op Fl z
 for each intrid in the system, display interrupt counts per CPU.
 The intrid is an interrupt name such as "ioapic0 pin 22" for x86.
 .Pp
@@ -72,6 +72,10 @@ is specified then
 display the data continuously with a
 .Ar wait
 seconds delay between each iteration.
+.Pp
+If
+.Fl z
+is specified then rows with all CPUs having zero interrupts will be skipped.
 .It nointr Fl c Ar cpu_index
 disable to set an interrupt's affinity to
 .Ar cpu_index .

Index: src/usr.sbin/intrctl/intrctl.c
diff -u src/usr.sbin/intrctl/intrctl.c:1.9 src/usr.sbin/intrctl/intrctl.c:1.10
--- src/usr.sbin/intrctl/intrctl.c:1.9	Mon Sep 23 09:17:19 2019
+++ src/usr.sbin/intrctl/intrctl.c	Mon Sep 23 20:15:31 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: intrctl.c,v 1.9 2019/09/23 09:17:19 mrg Exp $	*/
+/*	$NetBSD: intrctl.c,v 1.10 2019/09/23 20:15:31 mrg Exp $	*/
 
 /*
  * Copyright (c) 2015 Internet Initiative Japan Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: intrctl.c,v 1.9 2019/09/23 09:17:19 mrg Exp $");
+__RCSID("$NetBSD: intrctl.c,v 1.10 2019/09/23 20:15:31 mrg Exp $");
 
 #include <sys/param.h>
 #include <sys/sysctl.h>
@@ -99,8 +99,9 @@ usage(void)
 {
 	const char *progname = getprogname();
 
-	fprintf(stderr, "usage: %s list [-c] [-w secs]\n", progname);
-	fprintf(stderr, "       %s affinity -i interrupt_name -c cpu_index\n", progname);
+	fprintf(stderr, "usage: %s list [-c] [-w secs] [-z]\n", progname);
+	fprintf(stderr, "       %s affinity -i interrupt_name -c cpu_index\n",
+	    progname);
 	fprintf(stderr, "       %s intr -c cpu_index\n", progname);
 	fprintf(stderr, "       %s nointr -c cpu_index\n", progname);
 	exit(EXIT_FAILURE);
@@ -110,7 +111,7 @@ usage(void)
 static int intrctl_io_alloc_retry_count = 4;
 
 static void
-intrctl_list_one(int compact)
+intrctl_list_one(bool compact, bool skipzero)
 {
 	char buf[64];
 	struct intrio_list_line *illine;
@@ -169,6 +170,20 @@ intrctl_list_one(int compact)
 	    illine = intrctl_io_nextline(handle, illine)) {
 		struct intrio_list_line_cpu *illc;
 
+		if (skipzero) {
+			bool is_zero = true;
+
+			for (i = 0; i < ncpus; i++) {
+				illc = &illine->ill_cpu[i];
+				if (illc->illc_count != 0) {
+					is_zero = false;
+					break;
+				}
+			}
+			if (is_zero)
+				continue;
+		}
+
 		printf("%-*s ", (int)intridlen, illine->ill_intrid);
 		if (compact) {
 			uint64_t total = 0;
@@ -209,13 +224,17 @@ intrctl_list(int argc, char **argv)
 {
 	int seconds = 0;
 	bool compact = false;
+	bool skipzero = false;
 	int ch;
 
-	while ((ch = getopt(argc, argv, "cw:")) != -1) {
+	while ((ch = getopt(argc, argv, "cw:z")) != -1) {
 		switch (ch) {
 		case 'c':
 			compact = true;
 			break;
+		case 'z':
+			skipzero = true;
+			break;
 		case 'w':
 			seconds = atoi(optarg);
 			if (seconds < 0)
@@ -226,10 +245,12 @@ intrctl_list(int argc, char **argv)
 		}
 	}
 
-	do {
-		intrctl_list_one(compact);
+	for (;;) {
+		intrctl_list_one(compact, skipzero);
+		if (seconds == 0)
+			break;
 		sleep(seconds);
-	} while (seconds);
+	}
 }
 
 static void

Reply via email to