CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jmcneill Date: Mon Feb 22 11:38:13 UTC 2021 Modified Files: src/usr.sbin/intrctl: intrctl.8 Log Message: Adjust description of compact list view output. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/usr.sbin/intrctl/intrctl.8 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.7 src/usr.sbin/intrctl/intrctl.8:1.8 --- src/usr.sbin/intrctl/intrctl.8:1.7 Tue Sep 24 11:31:06 2019 +++ src/usr.sbin/intrctl/intrctl.8 Mon Feb 22 11:38:13 2021 @@ -1,4 +1,4 @@ -.\" $NetBSD: intrctl.8,v 1.7 2019/09/24 11:31:06 wiz Exp $ +.\" $NetBSD: intrctl.8,v 1.8 2021/02/22 11:38:13 jmcneill 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 23, 2019 +.Dd February 22, 2021 .Dt INTRCTL 8 .Os .Sh NAME @@ -63,7 +63,7 @@ The intrid is an interrupt name such as If .Fl c is specified, display compact list with total counts per interrupt, -and CPU affinity as comma separated list of CPU indexes. +and CPU affinity as list of CPU indexes. .Pp If .Fl w
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jmcneill Date: Mon Feb 22 11:33:34 UTC 2021 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: In compact view, show the CPUs as a range (0-n) instead of a list (0, 1, 2, ...) when the interrupt is assigned to all CPUs in the system. To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.11 src/usr.sbin/intrctl/intrctl.c:1.12 --- src/usr.sbin/intrctl/intrctl.c:1.11 Tue Sep 24 11:31:06 2019 +++ src/usr.sbin/intrctl/intrctl.c Mon Feb 22 11:33:34 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.11 2019/09/24 11:31:06 wiz Exp $ */ +/* $NetBSD: intrctl.c,v 1.12 2021/02/22 11:33:34 jmcneill Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.11 2019/09/24 11:31:06 wiz Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.12 2021/02/22 11:33:34 jmcneill Exp $"); #include #include @@ -110,6 +110,22 @@ usage(void) static int intrctl_io_alloc_retry_count = 4; +static bool +intrctl_list_line_allcpus(struct intrio_list_line *illine, int ncpus) +{ + struct intrio_list_line_cpu *illc; + int i; + + for (i = 0; i < ncpus; i++) { + illc = &illine->ill_cpu[i]; + if (illc->illc_assigned == false) { + return false; + } + } + + return true; +} + static void intrctl_list_one(bool compact, bool skipzero) { @@ -187,14 +203,20 @@ intrctl_list_one(bool compact, bool skip printf("%-*s ", (int)intridlen, illine->ill_intrid); if (compact) { uint64_t total = 0; + bool allcpus = ncpus > 1 && + intrctl_list_line_allcpus(illine, ncpus); char *affinity = NULL, *oaffinity = NULL; for (i = 0; i < ncpus; i++) { illc = &illine->ill_cpu[i]; total += illc->illc_count; +if (allcpus && i != 0 && i != ncpus - 1) { + continue; +} if (illc->illc_assigned) { + const char *sep = allcpus ? "-" : ", "; asprintf(&affinity, "%s%s%d", oaffinity ? oaffinity : "", - oaffinity ? ", " : "", + oaffinity ? sep : "", i); if (oaffinity) free(oaffinity);
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jdolecek Date: Sat Jun 23 11:11:00 UTC 2018 Modified Files: src/usr.sbin/intrctl: intrctl_io.c Log Message: fix intrctl_io_firstline() to properly return NULL if there are no records to show To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/intrctl/intrctl_io.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_io.c diff -u src/usr.sbin/intrctl/intrctl_io.c:1.3 src/usr.sbin/intrctl/intrctl_io.c:1.4 --- src/usr.sbin/intrctl/intrctl_io.c:1.3 Fri Aug 5 06:58:55 2016 +++ src/usr.sbin/intrctl/intrctl_io.c Sat Jun 23 11:11:00 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl_io.c,v 1.3 2016/08/05 06:58:55 knakahara Exp $ */ +/* $NetBSD: intrctl_io.c,v 1.4 2018/06/23 11:11:00 jdolecek Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl_io.c,v 1.3 2016/08/05 06:58:55 knakahara Exp $"); +__RCSID("$NetBSD: intrctl_io.c,v 1.4 2018/06/23 11:11:00 jdolecek Exp $"); #include #include @@ -108,8 +108,15 @@ struct intrio_list_line * intrctl_io_firstline(void *handle) { struct intrio_list *list = handle; + struct intrio_list_line *next; + char *buf_end; - return (struct intrio_list_line *)((char *)list + list->il_lineoffset); + buf_end = (char *)list + list->il_bufsize; + next = (struct intrio_list_line *)((char *)list + list->il_lineoffset); + if ((char *)next >= buf_end) + return NULL; + + return next; } struct intrio_list_line *
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jdolecek Date: Fri Jun 22 22:50:53 UTC 2018 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: fix free() on unitialized value for list -c when there are no assigned interrupts To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.7 src/usr.sbin/intrctl/intrctl.c:1.8 --- src/usr.sbin/intrctl/intrctl.c:1.7 Wed Nov 2 11:03:33 2016 +++ src/usr.sbin/intrctl/intrctl.c Fri Jun 22 22:50:53 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.7 2016/11/02 11:03:33 ryo Exp $ */ +/* $NetBSD: intrctl.c,v 1.8 2018/06/22 22:50:53 jdolecek Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.7 2016/11/02 11:03:33 ryo Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.8 2018/06/22 22:50:53 jdolecek Exp $"); #include #include @@ -184,7 +184,7 @@ intrctl_list(int argc, char **argv) printf("%-*s ", (int)intridlen, illine->ill_intrid); if (compact) { uint64_t total = 0; - char *affinity, *oaffinity = NULL; + char *affinity = NULL, *oaffinity = NULL; for (i = 0; i < ncpus; i++) { illc = &illine->ill_cpu[i]; total += illc->illc_count; @@ -200,7 +200,8 @@ intrctl_list(int argc, char **argv) } printf("%20" PRIu64 " ", total); printf("%5s ", affinity ? affinity : "none"); - free(affinity); + if (affinity) +free(affinity); } else { for (i = 0; i < ncpus; i++) { illc = &illine->ill_cpu[i];
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: ryo Date: Wed Nov 2 11:03:33 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: fix column alignment of "intrctl list [-c]" To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.6 src/usr.sbin/intrctl/intrctl.c:1.7 --- src/usr.sbin/intrctl/intrctl.c:1.6 Sat Oct 15 22:23:50 2016 +++ src/usr.sbin/intrctl/intrctl.c Wed Nov 2 11:03:33 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.6 2016/10/15 22:23:50 jdolecek Exp $ */ +/* $NetBSD: intrctl.c,v 1.7 2016/11/02 11:03:33 ryo Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.6 2016/10/15 22:23:50 jdolecek Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.7 2016/11/02 11:03:33 ryo Exp $"); #include #include @@ -164,10 +164,10 @@ intrctl_list(int argc, char **argv) } /* header */ - printf("%-*s", (int)intridlen, "interrupt id"); + printf("%-*s ", (int)intridlen, "interrupt id"); if (compact) { - printf(" %20s ", "total"); - printf(" %5s ", "aff"); + printf("%20s ", "total"); + printf("%5s ", "aff"); } else { for (i = 0; i < ncpus; i++) { snprintf(buf, sizeof(buf), "CPU%u", i);
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jdolecek Date: Sat Oct 15 22:23:50 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: getopt() result is int; fixes build on arm, pointed out by Rin Okuyama To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.5 src/usr.sbin/intrctl/intrctl.c:1.6 --- src/usr.sbin/intrctl/intrctl.c:1.5 Sat Oct 15 12:14:00 2016 +++ src/usr.sbin/intrctl/intrctl.c Sat Oct 15 22:23:50 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.5 2016/10/15 12:14:00 jdolecek Exp $ */ +/* $NetBSD: intrctl.c,v 1.6 2016/10/15 22:23:50 jdolecek Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.5 2016/10/15 12:14:00 jdolecek Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.6 2016/10/15 22:23:50 jdolecek Exp $"); #include #include @@ -118,7 +118,7 @@ intrctl_list(int argc, char **argv) void *handle; size_t intridlen; int compact = 0; - char ch; + int ch; while ((ch = getopt(argc, argv, "c")) != -1) { switch (ch) {
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jdolecek Date: Sat Oct 15 12:14:00 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: reduce the affinity column to just 5 chars for compact list To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.4 src/usr.sbin/intrctl/intrctl.c:1.5 --- src/usr.sbin/intrctl/intrctl.c:1.4 Sat Oct 15 12:06:27 2016 +++ src/usr.sbin/intrctl/intrctl.c Sat Oct 15 12:14:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.4 2016/10/15 12:06:27 jdolecek Exp $ */ +/* $NetBSD: intrctl.c,v 1.5 2016/10/15 12:14:00 jdolecek Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.4 2016/10/15 12:06:27 jdolecek Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.5 2016/10/15 12:14:00 jdolecek Exp $"); #include #include @@ -167,7 +167,7 @@ intrctl_list(int argc, char **argv) printf("%-*s", (int)intridlen, "interrupt id"); if (compact) { printf(" %20s ", "total"); - printf(" %20s ", "affinity"); + printf(" %5s ", "aff"); } else { for (i = 0; i < ncpus; i++) { snprintf(buf, sizeof(buf), "CPU%u", i); @@ -199,7 +199,7 @@ intrctl_list(int argc, char **argv) } } printf("%20" PRIu64 " ", total); - printf("%20s ", affinity ? affinity : "none"); + printf("%5s ", affinity ? affinity : "none"); free(affinity); } else { for (i = 0; i < ncpus; i++) {
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jdolecek Date: Sat Oct 15 12:06:27 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.8 intrctl.c Log Message: add -c option to list command for compact list, it displays totals rather then per-CPU stats To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/usr.sbin/intrctl/intrctl.8 \ 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.3 src/usr.sbin/intrctl/intrctl.8:1.4 --- src/usr.sbin/intrctl/intrctl.8:1.3 Wed Oct 12 21:47:37 2016 +++ src/usr.sbin/intrctl/intrctl.8 Sat Oct 15 12:06:27 2016 @@ -1,4 +1,4 @@ -.\" $NetBSD: intrctl.8,v 1.3 2016/10/12 21:47:37 jdolecek Exp $ +.\" $NetBSD: intrctl.8,v 1.4 2016/10/15 12:06:27 jdolecek 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 October 12, 2016 +.Dd October 15, 2016 .Dt INTRCTL 8 .Os .Sh NAME @@ -56,9 +56,14 @@ enable to set an interrupt's affinity to If .Ar cpu_index is already enabled, this command has no effect. -.It list +.It list Op Fl c 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 +If +.Fl c +is specified, display compact list with total counts per interrupt, +and CPU affinity as comma separated list of CPU indexes. .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.3 src/usr.sbin/intrctl/intrctl.c:1.4 --- src/usr.sbin/intrctl/intrctl.c:1.3 Mon Sep 19 18:46:39 2016 +++ src/usr.sbin/intrctl/intrctl.c Sat Oct 15 12:06:27 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.3 2016/09/19 18:46:39 ryo Exp $ */ +/* $NetBSD: intrctl.c,v 1.4 2016/10/15 12:06:27 jdolecek Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.3 2016/09/19 18:46:39 ryo Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.4 2016/10/15 12:06:27 jdolecek Exp $"); #include #include @@ -99,7 +99,7 @@ usage(void) { const char *progname = getprogname(); - fprintf(stderr, "usage: %s list\n", progname); + fprintf(stderr, "usage: %s list [-c]\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); @@ -117,6 +117,18 @@ intrctl_list(int argc, char **argv) int i, ncpus, *cpucol; void *handle; size_t intridlen; + int compact = 0; + char ch; + + while ((ch = getopt(argc, argv, "c")) != -1) { + switch (ch) { + case 'c': + compact = 1; + break; + default: + usage(); + } + } handle = intrctl_io_alloc(intrctl_io_alloc_retry_count); if (handle == NULL) @@ -152,21 +164,49 @@ intrctl_list(int argc, char **argv) } /* header */ - printf("%-*s ", (int)intridlen, "interrupt id"); - for (i = 0; i < ncpus; i++) { - snprintf(buf, sizeof(buf), "CPU%u", i); - printf("%*s ", cpucol[i], buf); + printf("%-*s", (int)intridlen, "interrupt id"); + if (compact) { + printf(" %20s ", "total"); + printf(" %20s ", "affinity"); + } else { + for (i = 0; i < ncpus; i++) { + snprintf(buf, sizeof(buf), "CPU%u", i); + printf("%*s ", cpucol[i], buf); + } } printf("device name(s)\n"); /* body */ for (illine = intrctl_io_firstline(handle); illine != NULL; illine = intrctl_io_nextline(handle, illine)) { - printf("%-*s ", (int)intridlen, illine->ill_intrid); - for (i = 0; i < ncpus; i++) { - struct intrio_list_line_cpu *illc = &illine->ill_cpu[i]; - printf("%*" PRIu64 "%c ", cpucol[i], illc->illc_count, - illc->illc_assigned ? '*' : ' '); + struct intrio_list_line_cpu *illc; + + printf("%-*s ", (int)intridlen, illine->ill_intrid); + if (compact) { + uint64_t total = 0; + char *affinity, *oaffinity = NULL; + for (i = 0; i < ncpus; i++) { +illc = &illine->ill_cpu[i]; +total += illc->illc_count; +if (illc->illc_assigned) { + asprintf(&affinity, "%s%s%d", + oaffinity ? oaffinity : "", + oaffinity ? ", " : "", + i); + if (oaffinity) + free(oaffinity); + oaffinity = affinity; +} + } + printf("%20" PRIu64 " ", total); + printf("%20s ", affinity ? affinity : "none"); + free(affinity); + } else { + for (i = 0; i < ncpus; i++) { +illc = &illine->ill_cpu[i]; +printf("%*" PRIu64 "%c ", cpucol[i], illc->illc_count, +illc->illc_assigned ? '*' : ' '); + } } printf("%s\n", illine->ill_xname); }
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: jdolecek Date: Wed Oct 12 21:47:37 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.8 Log Message: add HISTORY and AUTHORS To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/intrctl/intrctl.8 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.2 src/usr.sbin/intrctl/intrctl.8:1.3 --- src/usr.sbin/intrctl/intrctl.8:1.2 Mon Aug 17 17:47:22 2015 +++ src/usr.sbin/intrctl/intrctl.8 Wed Oct 12 21:47:37 2016 @@ -1,4 +1,4 @@ -.\" $NetBSD: intrctl.8,v 1.2 2015/08/17 17:47:22 wiz Exp $ +.\" $NetBSD: intrctl.8,v 1.3 2016/10/12 21:47:37 jdolecek 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 August 17, 2015 +.Dd October 12, 2016 .Dt INTRCTL 8 .Os .Sh NAME @@ -68,3 +68,9 @@ is already disabled, this command has no .El .Sh SEE ALSO .Xr cpuctl 8 +.Sh HISTORY +.Nm +first appeared in +.Nx 8.0 . +.Sh AUTHORS +.An Kengo NAKAHARA Aq Mt knakah...@netbsd.org
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: ryo Date: Mon Sep 19 18:46:39 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: "intrctl list" auto fit to minimum columns Reviewed by nonaka@ and knakahara@ To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.2 src/usr.sbin/intrctl/intrctl.c:1.3 --- src/usr.sbin/intrctl/intrctl.c:1.2 Wed Aug 3 08:34:21 2016 +++ src/usr.sbin/intrctl/intrctl.c Mon Sep 19 18:46:39 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.2 2016/08/03 08:34:21 knakahara Exp $ */ +/* $NetBSD: intrctl.c,v 1.3 2016/09/19 18:46:39 ryo Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.2 2016/08/03 08:34:21 knakahara Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.3 2016/09/19 18:46:39 ryo Exp $"); #include #include @@ -112,8 +112,9 @@ static int intrctl_io_alloc_retry_count static void intrctl_list(int argc, char **argv) { + char buf[64]; struct intrio_list_line *illine; - int i, ncpus; + int i, ncpus, *cpucol; void *handle; size_t intridlen; @@ -124,34 +125,53 @@ intrctl_list(int argc, char **argv) /* calc columns */ ncpus = intrctl_io_ncpus(handle); intridlen = strlen("interrupt id"); - illine = intrctl_io_firstline(handle); - for (; illine != NULL; illine = intrctl_io_nextline(handle, illine)) { + for (illine = intrctl_io_firstline(handle); illine != NULL; + illine = intrctl_io_nextline(handle, illine)) { size_t len = strlen(illine->ill_intrid); if (intridlen < len) intridlen = len; } + cpucol = malloc(sizeof(*cpucol) * (size_t)ncpus); + if (cpucol == NULL) + err(EXIT_FAILURE, "malloc"); + for (i = 0; i < ncpus; i++) { + snprintf(buf, sizeof(buf), "CPU%u", i); + cpucol[i] = strlen(buf); + } + for (illine = intrctl_io_firstline(handle); illine != NULL; + illine = intrctl_io_nextline(handle, illine)) { + for (i = 0; i < ncpus; i++) { + int len; + snprintf(buf, sizeof(buf), "%" PRIu64, + illine->ill_cpu[i].illc_count); + len = (int)strlen(buf); + if (cpucol[i] < len) +cpucol[i] = len; + } + } + /* header */ - printf("%-*s", (int)intridlen, "interrupt id"); + printf("%-*s ", (int)intridlen, "interrupt id"); for (i = 0; i < ncpus; i++) { - char buf[64]; snprintf(buf, sizeof(buf), "CPU%u", i); - printf(" %20s ", buf); + printf("%*s ", cpucol[i], buf); } - printf(" device name(s)\n"); + printf("device name(s)\n"); /* body */ - illine = intrctl_io_firstline(handle); - for (; illine != NULL; illine = intrctl_io_nextline(handle, illine)) { - printf("%-*s ", (int)intridlen, illine->ill_intrid); + for (illine = intrctl_io_firstline(handle); illine != NULL; + illine = intrctl_io_nextline(handle, illine)) { + printf("%-*s ", (int)intridlen, illine->ill_intrid); for (i = 0; i < ncpus; i++) { struct intrio_list_line_cpu *illc = &illine->ill_cpu[i]; - printf("%20" PRIu64 "%c ", illc->illc_count, + printf("%*" PRIu64 "%c ", cpucol[i], illc->illc_count, illc->illc_assigned ? '*' : ' '); } printf("%s\n", illine->ill_xname); } + free(cpucol); intrctl_io_free(handle); }
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: knakahara Date: Fri Aug 5 06:58:55 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl_io.c Log Message: fix CID 1364766: Resource leaks To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/usr.sbin/intrctl/intrctl_io.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_io.c diff -u src/usr.sbin/intrctl/intrctl_io.c:1.2 src/usr.sbin/intrctl/intrctl_io.c:1.3 --- src/usr.sbin/intrctl/intrctl_io.c:1.2 Wed Aug 3 08:28:09 2016 +++ src/usr.sbin/intrctl/intrctl_io.c Fri Aug 5 06:58:55 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl_io.c,v 1.2 2016/08/03 08:28:09 knakahara Exp $ */ +/* $NetBSD: intrctl_io.c,v 1.3 2016/08/05 06:58:55 knakahara Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl_io.c,v 1.2 2016/08/03 08:28:09 knakahara Exp $"); +__RCSID("$NetBSD: intrctl_io.c,v 1.3 2016/08/05 06:58:55 knakahara Exp $"); #include #include @@ -47,16 +47,16 @@ intrctl_io_alloc(int retry) { size_t buf_size; int i, error; - void *buf; + void *buf = NULL; error = sysctlbyname("kern.intr.list", NULL, &buf_size, NULL, 0); if (error < 0) { - return NULL; + goto error; } buf = malloc(buf_size); if (buf == NULL) { - return NULL; + goto error; } for (i = 0; i < retry; i++) { @@ -68,15 +68,16 @@ intrctl_io_alloc(int retry) temp = realloc(buf, buf_size); if (temp == NULL) { -free(buf); -return NULL; +goto error; } buf = temp; } else { - free(buf); - return NULL; + goto error; } } +error: + if (buf != NULL) + free(buf); return NULL; }
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: knakahara Date: Wed Aug 3 08:34:21 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl.c Log Message: intrctl(8): pretty printing intrctl list. e.g. == before == interrupt id CPU#00 CPU#01device name(s) irq 9 0* 0pq3pcie1 irq 10 0* 0pq3pcie0 irq 1230* 0usb1 irq 1379* 0etsec1-tx irq 14 268* 0etsec1-rx irq 15 0* 0etsec3-tx irq 16 0* 0etsec3-rx irq 17 0* 0etsec3-err irq 18 0* 0etsec1-err irq 26 1030* 0duart irq 27 0* 0i2c irq 56680437* 0esdhc msigroup 0 0* 0msi 0-31 == before == == after == interrupt id CPU0 CPU1 device name(s) irq 9 0*0 pq3pcie1 irq 10 0*0 pq3pcie0 irq 12 30*0 usb1 irq 13 79*0 etsec1-tx irq 14310*0 etsec1-rx irq 15 0*0 etsec3-tx irq 16 0*0 etsec3-rx irq 17 0*0 etsec3-err irq 18 0*0 etsec1-err irq 26 1629*0 duart irq 27 0*0 i2c irq 56 730617*0 esdhc msigroup 0 018* msi 0-31 == after == This patch is implemented by nonaka@n.o. Thanks. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 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.c diff -u src/usr.sbin/intrctl/intrctl.c:1.1 src/usr.sbin/intrctl/intrctl.c:1.2 --- src/usr.sbin/intrctl/intrctl.c:1.1 Mon Aug 17 06:42:46 2015 +++ src/usr.sbin/intrctl/intrctl.c Wed Aug 3 08:34:21 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl.c,v 1.1 2015/08/17 06:42:46 knakahara Exp $ */ +/* $NetBSD: intrctl.c,v 1.2 2016/08/03 08:34:21 knakahara Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl.c,v 1.1 2015/08/17 06:42:46 knakahara Exp $"); +__RCSID("$NetBSD: intrctl.c,v 1.2 2016/08/03 08:34:21 knakahara Exp $"); #include #include @@ -115,29 +115,40 @@ intrctl_list(int argc, char **argv) struct intrio_list_line *illine; int i, ncpus; void *handle; + size_t intridlen; handle = intrctl_io_alloc(intrctl_io_alloc_retry_count); if (handle == NULL) err(EXIT_FAILURE, "intrctl_io_alloc"); - /* header */ + /* calc columns */ ncpus = intrctl_io_ncpus(handle); - printf("interrupt id\t"); + intridlen = strlen("interrupt id"); + illine = intrctl_io_firstline(handle); + for (; illine != NULL; illine = intrctl_io_nextline(handle, illine)) { + size_t len = strlen(illine->ill_intrid); + if (intridlen < len) + intridlen = len; + } + + /* header */ + printf("%-*s", (int)intridlen, "interrupt id"); for (i = 0; i < ncpus; i++) { - printf(" CPU#%02u\t", i); + char buf[64]; + snprintf(buf, sizeof(buf), "CPU%u", i); + printf(" %20s ", buf); } - printf("device name(s)\n"); + printf(" device name(s)\n"); /* body */ illine = intrctl_io_firstline(handle); for (; illine != NULL; illine = intrctl_io_nextline(handle, illine)) { - printf("%s\t", illine->ill_intrid); + printf("%-*s ", (int)intridlen, illine->ill_intrid); for (i = 0; i < ncpus; i++) { struct intrio_list_line_cpu *illc = &illine->ill_cpu[i]; - printf("%8" PRIu64 "%c\t", illc->illc_count, + printf("%20" PRIu64 "%c ", illc->illc_count, illc->illc_assigned ? '*' : ' '); } - printf("%s\n", illine->ill_xname); }
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: knakahara Date: Wed Aug 3 08:28:09 UTC 2016 Modified Files: src/usr.sbin/intrctl: intrctl_io.c Log Message: fix: incorrect sysctlbyname(3) error handling. pointed out by nonaka@n.o To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/usr.sbin/intrctl/intrctl_io.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_io.c diff -u src/usr.sbin/intrctl/intrctl_io.c:1.1 src/usr.sbin/intrctl/intrctl_io.c:1.2 --- src/usr.sbin/intrctl/intrctl_io.c:1.1 Mon Aug 17 06:42:46 2015 +++ src/usr.sbin/intrctl/intrctl_io.c Wed Aug 3 08:28:09 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: intrctl_io.c,v 1.1 2015/08/17 06:42:46 knakahara Exp $ */ +/* $NetBSD: intrctl_io.c,v 1.2 2016/08/03 08:28:09 knakahara Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. @@ -27,7 +27,7 @@ */ #include -__RCSID("$NetBSD: intrctl_io.c,v 1.1 2015/08/17 06:42:46 knakahara Exp $"); +__RCSID("$NetBSD: intrctl_io.c,v 1.2 2016/08/03 08:28:09 knakahara Exp $"); #include #include @@ -63,7 +63,7 @@ intrctl_io_alloc(int retry) error = sysctlbyname("kern.intr.list", buf, &buf_size, NULL, 0); if (error >= 0) return buf; - else if (error == -ENOMEM) { + else if (errno == ENOMEM) { void *temp; temp = realloc(buf, buf_size);
CVS commit: src/usr.sbin/intrctl
Module Name:src Committed By: wiz Date: Mon Aug 17 17:47:22 UTC 2015 Modified Files: src/usr.sbin/intrctl: intrctl.8 Log Message: Fix a typo. Sort commands. End list correctly. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/usr.sbin/intrctl/intrctl.8 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.1 src/usr.sbin/intrctl/intrctl.8:1.2 --- src/usr.sbin/intrctl/intrctl.8:1.1 Mon Aug 17 06:50:03 2015 +++ src/usr.sbin/intrctl/intrctl.8 Mon Aug 17 17:47:22 2015 @@ -1,4 +1,4 @@ -.\" $NetBSD: intrctl.8,v 1.1 2015/08/17 06:50:03 knakahara Exp $ +.\" $NetBSD: intrctl.8,v 1.2 2015/08/17 17:47:22 wiz Exp $ .\" .\" Copyright (c) 2015 Internet Initiative Japan Inc. .\" All rights reserved. @@ -37,7 +37,7 @@ .Sh DESCRIPTION The .Nm -command can be used to control and inspect the state of intrerupts +command can be used to control and inspect the state of interrupts in the system. .Pp The first argument, @@ -45,9 +45,6 @@ The first argument, specifies the action to take. Valid commands are: .Bl -tag -width XofflineXcpunoX -.It list -for each intrid in the system, display interrupt counts per CPU. -The intrid is an interrupt name such as "ioapic0 pin 22" for x86. .It affinity Fl c Ar cpu_index Fl i Ar intrid set an .Ar intrid @@ -59,12 +56,15 @@ enable to set an interrupt's affinity to If .Ar cpu_index is already enabled, this command has no effect. +.It list +for each intrid in the system, display interrupt counts per CPU. +The intrid is an interrupt name such as "ioapic0 pin 22" for x86. .It nointr Fl c Ar cpu_index disable to set an interrupt's affinity to .Ar cpu_index . If .Ar cpu_index is already disabled, this command has no effect. -.Ed +.El .Sh SEE ALSO .Xr cpuctl 8