From 5a3056646c96e99b495ad472f2762fc7b8e37770 Mon Sep 17 00:00:00 2001 From: qinyu Date: Thu, 8 Dec 2022 21:18:19 +0800 Subject: [PATCH] irqbalance: procinterrupts: Fix IRQ name parsing on certain arm64 SoC procinterrupts: Fix IRQ name parsing on certain arm64 SoC Signed-off-by: qinyu --- ...vedptr-is-NULL-before-invoking-strle.patch | 31 ++++++++ ...ix-IRQ-name-parsing-on-certain-arm64.patch | 76 +++++++++++++++++++ irqbalance.spec | 10 ++- 3 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 backport-check-whether-savedptr-is-NULL-before-invoking-strle.patch create mode 100644 backport-procinterrupts-Fix-IRQ-name-parsing-on-certain-arm64.patch diff --git a/backport-check-whether-savedptr-is-NULL-before-invoking-strle.patch b/backport-check-whether-savedptr-is-NULL-before-invoking-strle.patch new file mode 100644 index 0000000..1057ba1 --- /dev/null +++ b/backport-check-whether-savedptr-is-NULL-before-invoking-strle.patch @@ -0,0 +1,31 @@ +From 522883505d3b02e3294f045f49007b61c00e2c31 Mon Sep 17 00:00:00 2001 +From: Chao Liu +Date: Wed, 8 Jun 2022 10:04:02 +0800 +Subject: [PATCH] check whether savedptr is NULL before invoking strlen + +Reference: https://github.com/Irqbalance/irqbalance/commit/522883505d3b02e3294f045f49007b61c00e2c31 +Conflict: NA + +savedptr can be null in musl libc, so the strlen(NULL) will segfault + +Signed-off-by: Chao Liu +--- + procinterrupts.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/procinterrupts.c b/procinterrupts.c +index 9015177..57c8801 100644 +--- a/procinterrupts.c ++++ b/procinterrupts.c +@@ -178,7 +178,7 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) + } + + #ifdef AARCH64 +- if (strlen(savedptr) > 0) { ++ if (savedptr && strlen(savedptr) > 0) { + snprintf(irq_fullname, PATH_MAX, "%s %s", last_token, savedptr); + tmp = strchr(irq_fullname, '\n'); + if (tmp) +-- +2.33.0 + diff --git a/backport-procinterrupts-Fix-IRQ-name-parsing-on-certain-arm64.patch b/backport-procinterrupts-Fix-IRQ-name-parsing-on-certain-arm64.patch new file mode 100644 index 0000000..714efa2 --- /dev/null +++ b/backport-procinterrupts-Fix-IRQ-name-parsing-on-certain-arm64.patch @@ -0,0 +1,76 @@ +From bbcd9a42c3cec0935b960b7f2046f1fdfab4f7ef Mon Sep 17 00:00:00 2001 +From: Vignesh Raghavendra +Date: Wed, 7 Dec 2022 19:46:19 +0530 +Subject: [PATCH] procinterrupts: Fix IRQ name parsing on certain arm64 SoC + +Reference: https://github.com/Irqbalance/irqbalance/commit/bbcd9a42c3cec0935b960b7f2046f1fdfab4f7ef +Conflict: NA + +On arm64 SoCs like TI's K3 SoC and few other SoCs, IRQ names don't get +parsed correct due to which they end up being classified into wrong +class. Fix this by considering last token to contain IRQ name always. + +Eg.: /proc/interrupt + +cat /proc/interrupts + CPU0 CPU1 CPU2 CPU3 + 11: 7155 8882 7235 7791 GICv3 30 Level arch_timer + 14: 0 0 0 0 GICv3 23 Level arm-pmu + 15: 0 0 0 0 GICv3 208 Level 4b00000.spi + 16: 0 0 0 0 GICv3 209 Level 4b10000.spi +116: 0 0 0 0 MSI-INTA 1716234 Level 485c0100.dma-controller chan6 +134: 166 0 0 0 MSI-INTA 1970707 Level 8000000.ethernet-tx0 +224: 149 0 0 0 MSI-INTA 1971731 Level 8000000.ethernet + +W/o patch irqbalance -d +IRQ (11) guessed as class 0 +IRQ (14) guessed as class 0 +IRQ (15) guessed as class 0 +IRQ (16) guessed as class 0 +IRQ 485c0100.dma-controller chan6(116) guessed as class 0 +IRQ (134) guessed as class 0 +IRQ (224) guessed as class 0 + +W/ this patch +IRQ arch_timer(11) guessed as class 0 +IRQ arm-pmu(14) guessed as class 0 +IRQ 4b00000.spi(15) guessed as class 0 +IRQ 4b10000.spi(16) guessed as class 0 +IRQ 485c0100.dma-controller chan6(116) guessed as class 0 +IRQ 8000000.ethernet-tx0(134) guessed as class 5 +IRQ 8000000.ethernet(224) guessed as class 5 +IRQ 8000000.ethernet(257) guessed as class 5 +IRQ -davinci_gpio wl18xx(362) guessed as class + +Signed-off-by: Vignesh Raghavendra +--- + procinterrupts.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/procinterrupts.c b/procinterrupts.c +index e91b203..ec7a52b 100644 +--- a/procinterrupts.c ++++ b/procinterrupts.c +@@ -178,12 +178,14 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) + } + + #ifdef AARCH64 +- if (savedptr && strlen(savedptr) > 0) { ++ if (savedptr && strlen(savedptr) > 0) + snprintf(irq_fullname, PATH_MAX, "%s %s", last_token, savedptr); +- tmp = strchr(irq_fullname, '\n'); +- if (tmp) +- *tmp = 0; +- } ++ else ++ snprintf(irq_fullname, PATH_MAX, "%s", last_token); ++ ++ tmp = strchr(irq_fullname, '\n'); ++ if (tmp) ++ *tmp = 0; + #else + snprintf(irq_fullname, PATH_MAX, "%s", last_token); + #endif +-- +2.33.0 + diff --git a/irqbalance.spec b/irqbalance.spec index be63af0..eeb01ce 100644 --- a/irqbalance.spec +++ b/irqbalance.spec @@ -1,7 +1,7 @@ Summary: A dynamic adaptive IRQ balancing daemon Name: irqbalance Version: 1.9.0 -Release: 2 +Release: 3 Epoch: 3 License: GPLv2 Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz @@ -36,6 +36,8 @@ Patch9006: feature-enable-irqbalance-to-link-with-multiple-clie.patch Patch9007: feature-add-ability-to-set-hintpolicy-during-runtime.patch Patch9008: feature-encapsulate-and-compile-the-functions-in-irqbalance-ui.patch Patch9010: bugfix-set-hint-name-in-add_new_irq-to-avoid-segment.patch +Patch9011: backport-check-whether-savedptr-is-NULL-before-invoking-strle.patch +Patch9012: backport-procinterrupts-Fix-IRQ-name-parsing-on-certain-arm64.patch %description Irqbalance is a daemon to help balance the cpu load generated by @@ -122,6 +124,12 @@ fi /sbin/chkconfig --del %{name} >/dev/null 2>&1 || : %changelog +* Thu Dec 8 2022 qinyu - 3:1.9.0-3 +- Type:bugfix +- ID:NA +- SUG:restart +- DESC: procinterrupts: Fix IRQ name parsing on certain arm64 SoC + * Tue Jul 12 2022 qinyu - 3:1.9.0-2 - Type:bugfix - ID:NA