summaryrefslogtreecommitdiff
path: root/extra/irqbalance/Special-interrupt-counts-line-NMI-may-start-with-a-s.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/irqbalance/Special-interrupt-counts-line-NMI-may-start-with-a-s.patch')
-rw-r--r--extra/irqbalance/Special-interrupt-counts-line-NMI-may-start-with-a-s.patch67
1 files changed, 67 insertions, 0 deletions
diff --git a/extra/irqbalance/Special-interrupt-counts-line-NMI-may-start-with-a-s.patch b/extra/irqbalance/Special-interrupt-counts-line-NMI-may-start-with-a-s.patch
new file mode 100644
index 000000000..c2e69c218
--- /dev/null
+++ b/extra/irqbalance/Special-interrupt-counts-line-NMI-may-start-with-a-s.patch
@@ -0,0 +1,67 @@
+From: Shawn Bohrer <sbohrer@rgmadvisors.com>
+
+Special interrupt counts line NMI may start with a space
+
+The kernel determines the maximum number of possible IRQs and pads the
+first field of /proc/interrupts appropriately. With four or more digits
+of precession the special interrupt counts all start with a space
+instead of a letter. This caused the special interrupt counts to be
+counted on my system and that caused the cpunr count to be off when it
+reached the ERR and MIS lines forcing a CPU rescan.
+
+Signed-off-by: Shawn Bohrer <sbohrer@rgmadvisors.com>
+---
+ procinterrupts.c | 24 +++++++++++-------------
+ 1 files changed, 11 insertions(+), 13 deletions(-)
+
+diff --git a/procinterrupts.c b/procinterrupts.c
+index e336efe..322f4de 100644
+--- a/procinterrupts.c
++++ b/procinterrupts.c
+@@ -55,20 +55,18 @@ void parse_proc_interrupts(void)
+ if (getline(&line, &size, file)==0)
+ break;
+
+-
++ number = strtoul(line, &c, 10);
+ /* lines with letters in front are special, like NMI count. Ignore */
+- if (!(line[0]==' ' || (line[0]>='0' && line[0]<='9')))
+- break;
+- c = strchr(line, ':');
+- if (!c)
++ if (line == c)
++ continue;
++
++ if (c[0] == ':')
++ ++c;
++ else
+ continue;
+- *c = 0;
+- c++;
+- number = strtoul(line, NULL, 10);
++
+ count = 0;
+ cpunr = 0;
+-
+- c2=NULL;
+ while (1) {
+ uint64_t C;
+ C = strtoull(c, &c2, 10);
+@@ -78,11 +76,11 @@ void parse_proc_interrupts(void)
+ c=c2;
+ cpunr++;
+ }
+- if (cpunr != core_count)
++ if (cpunr != core_count)
+ need_cpu_rescan = 1;
+-
++
+ set_interrupt_count(number, count);
+- }
++ }
+ fclose(file);
+ free(line);
+ }
+--
+1.6.5.2
+