diff --git a/SOURCES/irqbalance-1.0.4-env-file-path.patch b/SOURCES/irqbalance-1.0.4-env-file-path.patch new file mode 100644 index 00000000..6a24e26e --- /dev/null +++ b/SOURCES/irqbalance-1.0.4-env-file-path.patch @@ -0,0 +1,12 @@ +diff -up irqbalance-1.0.4/misc/irqbalance.service.orig irqbalance-1.0.4/misc/irqbalance.service +--- irqbalance-1.0.4/misc/irqbalance.service.orig 2012-08-29 16:24:42.011844627 +0200 ++++ irqbalance-1.0.4/misc/irqbalance.service 2012-08-29 16:24:59.817845765 +0200 +@@ -3,7 +3,7 @@ Description=irqbalance daemon + After=syslog.target + + [Service] +-EnvironmentFile=/path/to/irqbalance.env ++EnvironmentFile=/etc/sysconfig/irqbalance + ExecStart=/usr/sbin/irqbalance --foreground $IRQBALANCE_ARGS + + [Install] diff --git a/SOURCES/irqbalance-1.0.6-man_IRQBALANCE_BANNED_CPUS.patch b/SOURCES/irqbalance-1.0.6-man_IRQBALANCE_BANNED_CPUS.patch new file mode 100644 index 00000000..677f938c --- /dev/null +++ b/SOURCES/irqbalance-1.0.6-man_IRQBALANCE_BANNED_CPUS.patch @@ -0,0 +1,17 @@ +diff -up irqbalance-1.0.6/irqbalance.1.orig irqbalance-1.0.6/irqbalance.1 +--- irqbalance-1.0.6/irqbalance.1.orig 2013-10-31 16:13:49.250139242 +0100 ++++ irqbalance-1.0.6/irqbalance.1 2013-10-31 16:44:59.368055192 +0100 +@@ -119,7 +119,12 @@ Same as --debug + + .TP + .B IRQBALANCE_BANNED_CPUS +-Provides a mask of cpus which irqbalance should ignore and never assign interrupts to ++Provides a mask of cpus which irqbalance should ignore and never assign interrupts to. ++This is a hex mask without the leading ’0x’, on systems with large numbers of processors ++each group of eight hex digits is separated by a comma ’,’. i.e. ‘export IRQBALANCE_BANNED_CPUS=fc0‘ ++would prevent irqbalance from assigning irqs to the 7th-12th cpus (cpu6-cpu11) or ++‘export IRQBALANCE_BANNED_CPUS=ff000000,00000001‘ would prevent irqbalance from ++assigning irqs to the 1st (cpu0) and 57th-64th cpus (cpu56-cpu63). + + .SH "SIGNALS" + .TP diff --git a/SOURCES/irqbalance-1.0.7-ignore_affinity_hint.patch b/SOURCES/irqbalance-1.0.7-ignore_affinity_hint.patch new file mode 100644 index 00000000..007b5e77 --- /dev/null +++ b/SOURCES/irqbalance-1.0.7-ignore_affinity_hint.patch @@ -0,0 +1,24 @@ +diff -up irqbalance-1.0.7/irqbalance.1.orig irqbalance-1.0.7/irqbalance.1 +--- irqbalance-1.0.7/irqbalance.1.orig 2014-08-19 14:42:45.760710296 +0200 ++++ irqbalance-1.0.7/irqbalance.1 2014-08-19 14:43:00.246715877 +0200 +@@ -57,6 +57,8 @@ irq is balanced, but the assigned object + .P + .I ignore + irq affinity hint value is completely ignored ++.P ++The default value for hintpolicy is ignore + + .TP + .B -p, --powerthresh= +diff -up irqbalance-1.0.7/irqbalance.c.orig irqbalance-1.0.7/irqbalance.c +--- irqbalance-1.0.7/irqbalance.c.orig 2013-10-10 17:14:07.000000000 +0200 ++++ irqbalance-1.0.7/irqbalance.c 2014-08-19 14:43:00.247715877 +0200 +@@ -48,7 +48,7 @@ int foreground_mode; + int numa_avail; + int need_rescan; + unsigned int log_mask = TO_ALL; +-enum hp_e hint_policy = HINT_POLICY_SUBSET; ++enum hp_e hint_policy = HINT_POLICY_IGNORE; + unsigned long power_thresh = ULONG_MAX; + unsigned long deepest_cache = ULONG_MAX; + unsigned long long cycle_count = 0; diff --git a/SOURCES/irqbalance-1.0.7-manpage-hostname.patch b/SOURCES/irqbalance-1.0.7-manpage-hostname.patch new file mode 100644 index 00000000..67e81a94 --- /dev/null +++ b/SOURCES/irqbalance-1.0.7-manpage-hostname.patch @@ -0,0 +1,11 @@ +diff -up irqbalance-1.0.7/irqbalance.1.orig irqbalance-1.0.7/irqbalance.1 +--- irqbalance-1.0.7/irqbalance.1.orig 2015-01-06 10:47:45.750459727 +0100 ++++ irqbalance-1.0.7/irqbalance.1 2015-01-06 10:48:17.132521825 +0100 +@@ -145,6 +145,6 @@ assigning irqs to the 1st (cpu0) and 57t + Forces a rescan of the available irqs and system topology + + .SH "Homepage" +-http://code.google.com/p/irqbalance ++https://github.com/Irqbalance/irqbalance + + diff --git a/SOURCES/irqbalance-1.0.8-Balance-correctly-IRQs-reappearing.patch b/SOURCES/irqbalance-1.0.8-Balance-correctly-IRQs-reappearing.patch new file mode 100644 index 00000000..6707a887 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-Balance-correctly-IRQs-reappearing.patch @@ -0,0 +1,37 @@ +From 93ed80181e0ce7b81bc88a67fabad1ad829fc460 Mon Sep 17 00:00:00 2001 +From: Frediano Ziglio +Date: Wed, 2 Jul 2014 12:59:34 +0100 +Subject: [PATCH 1/1] Balance correctly IRQs reappearing + +If IRQ disappears and reappears later (this happens frequently for Xen) +the IRQ is not balanced correctly due to overflow in irq_count (as the +counter got smaller and difference cause overflow). +Rescan if this happens fix the problem. + +Signed-off-by: Frediano Ziglio +--- + procinterrupts.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/procinterrupts.c b/procinterrupts.c +index 6a6bdaa..3476473 100644 +--- a/procinterrupts.c ++++ b/procinterrupts.c +@@ -181,6 +181,14 @@ void parse_proc_interrupts(void) + break; + } + ++ /* IRQ removed and reinserted, need restart or this will ++ * cause an overflow and IRQ won't be rebalanced again ++ */ ++ if (count < info->irq_count) { ++ need_rescan = 1; ++ break; ++ } ++ + info->last_irq_count = info->irq_count; + info->irq_count = count; + +-- +2.16.1 + diff --git a/SOURCES/irqbalance-1.0.8-Invalid-parsing-for-isolated-and-nohz_full-cpu-masks.patch b/SOURCES/irqbalance-1.0.8-Invalid-parsing-for-isolated-and-nohz_full-cpu-masks.patch new file mode 100644 index 00000000..4acbc05b --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-Invalid-parsing-for-isolated-and-nohz_full-cpu-masks.patch @@ -0,0 +1,24 @@ +diff --git a/cputree.c b/cputree.c +index fbd03b5..c5ae645 100644 +--- a/cputree.c ++++ b/cputree.c +@@ -88,7 +88,8 @@ static void setup_banned_cpus(void) + goto cmdline; + + if (getline(&line, &size, file) > 0) { +- cpulist_parse(line, size, nohz_full); ++ if (strlen(line) && line[0] != '\n') ++ cpulist_parse(line, strlen(line), nohz_full); + free(line); + line = NULL; + size = 0; +@@ -98,7 +99,8 @@ static void setup_banned_cpus(void) + file = fopen("/sys/devices/system/cpu/isolated", "r"); + if (file) { + if (getline(&line, &size, file) > 0) { +- cpulist_parse(line, size, isolated_cpus); ++ if (strlen(line) && line[0] != '\n') ++ cpulist_parse(line, strlen(line), isolated_cpus); + free(line); + line = NULL; + size = 0; diff --git a/SOURCES/irqbalance-1.0.8-Manpage-note-about-ignoring-of-pid-in-some-cases.patch b/SOURCES/irqbalance-1.0.8-Manpage-note-about-ignoring-of-pid-in-some-cases.patch new file mode 100644 index 00000000..62a806c8 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-Manpage-note-about-ignoring-of-pid-in-some-cases.patch @@ -0,0 +1,26 @@ +From 6ae5196bc35b5bb64f80a4d64d11cd219e5d1fa0 Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Wed, 10 Dec 2014 16:22:47 +0100 +Subject: [PATCH] Manpage note about ignoring of --pid in some cases + +Signed-off-by: Petr Holasek +--- + irqbalance.1 | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/irqbalance.1 b/irqbalance.1 +index ceb4ae2..b6f451a 100644 +--- a/irqbalance.1 ++++ b/irqbalance.1 +@@ -125,7 +125,7 @@ is identical to the --hintpolicy setting, but applied per irq + .B -s, --pid= + Have irqbalance write its process id to the specified file. By default no + pidfile is written. The written pidfile is automatically unlinked when +-irqbalance exits. ++irqbalance exits. It is ignored when used with --debug or --foreground. + + .SH "ENVIRONMENT VARIABLES" + .TP +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-Warning-when-irqbalance-hasn-t-root-privileges.patch b/SOURCES/irqbalance-1.0.8-Warning-when-irqbalance-hasn-t-root-privileges.patch new file mode 100644 index 00000000..c2436a0e --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-Warning-when-irqbalance-hasn-t-root-privileges.patch @@ -0,0 +1,27 @@ +From 1d7890db7ed4ef236103812a6b9fac0d86691154 Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Wed, 10 Dec 2014 18:00:02 +0100 +Subject: [PATCH] Warning when irqbalance hasn't root privileges + +Signed-off-by: Petr Holasek +--- + irqbalance.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/irqbalance.c b/irqbalance.c +index f22ecfb..bb8c3da 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -288,6 +288,9 @@ int main(int argc, char** argv) + } else + log(TO_CONSOLE, LOG_INFO, "This machine seems not NUMA capable.\n"); + ++ if (geteuid() != 0) ++ log(TO_ALL, LOG_WARNING, "Irqbalance hasn't been executed under root privileges, thus it won't in fact balance interrupts.\n"); ++ + if (banscript) { + char *note = "Please note that --banscript is deprecated, please use --policyscript instead"; + log(TO_ALL, LOG_WARNING, "%s\n", note); +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-fix-cpulist_parse-definition-to-match-bitmap_parseli.patch b/SOURCES/irqbalance-1.0.8-fix-cpulist_parse-definition-to-match-bitmap_parseli.patch new file mode 100644 index 00000000..ef487506 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-fix-cpulist_parse-definition-to-match-bitmap_parseli.patch @@ -0,0 +1,36 @@ +From a1646032c65858c33904fa3c8135933446f4bc83 Mon Sep 17 00:00:00 2001 +From: Rik van Riel +Date: Thu, 12 Mar 2015 17:47:00 -0400 +Subject: [PATCH 2/3] fix cpulist_parse definition to match bitmap_parselist + and kernel + +Nobody used cpulist_parse before, so nobody noticed that the parameters +for cpulist_parse and bitmap_parselist did not match the parameters +actually used by bitmap_parselist and related functions. + +Signed-off-by: Rik van Riel +--- + cpumask.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/cpumask.h b/cpumask.h +index 001dda3..0774a88 100644 +--- a/cpumask.h ++++ b/cpumask.h +@@ -281,10 +281,10 @@ static inline int __cpulist_scnprintf(char *buf, int len, + return bitmap_scnlistprintf(buf, len, srcp->bits, nbits); + } + +-#define cpulist_parse(buf, dst) __cpulist_parse((buf), &(dst), NR_CPUS) +-static inline int __cpulist_parse(const char *buf, cpumask_t *dstp, int nbits) ++#define cpulist_parse(buf, len, dst) __cpulist_parse((buf), (len), &(dst), NR_CPUS) ++static inline int __cpulist_parse(const char *buf, int len, cpumask_t *dstp, int nbits) + { +- return bitmap_parselist(buf, dstp->bits, nbits); ++ return bitmap_parselist(buf, len, dstp->bits, nbits); + } + + #define cpu_remap(oldbit, old, new) \ +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-fix-memory-leak-in-classify-code.patch b/SOURCES/irqbalance-1.0.8-fix-memory-leak-in-classify-code.patch new file mode 100644 index 00000000..2413038d --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-fix-memory-leak-in-classify-code.patch @@ -0,0 +1,40 @@ +From 699deffdd881bf4759f3fcc4d6ee3e018e4c266e Mon Sep 17 00:00:00 2001 +From: Tom Li +Date: Fri, 18 Apr 2014 20:06:18 -0400 +Subject: [PATCH] fix memory leak in classify code + +If a system has no pci devices the opening of the pci bus directory in +rebuild_irq_db will fail, leading to a memory leak. Fix it by freeing the list +we create in that function always on exit + +Reported-by: Tom Li +Signed-off-by: Neil Horman +Signed-off-by: Tom Li +--- + classify.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/classify.c b/classify.c +index 1867a94..94b53b8 100644 +--- a/classify.c ++++ b/classify.c +@@ -465,7 +465,7 @@ void rebuild_irq_db(void) + + devdir = opendir(SYSDEV_DIR); + if (!devdir) +- return; ++ goto free; + + do { + entry = readdir(devdir); +@@ -482,6 +482,7 @@ void rebuild_irq_db(void) + + for_each_irq(tmp_irqs, add_missing_irq, NULL); + ++free: + g_list_free_full(tmp_irqs, free); + + } +-- +2.4.3 + diff --git a/SOURCES/irqbalance-1.0.8-import-__bitmap_parselist-from-Linux-kernel.patch b/SOURCES/irqbalance-1.0.8-import-__bitmap_parselist-from-Linux-kernel.patch new file mode 100644 index 00000000..87d90aac --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-import-__bitmap_parselist-from-Linux-kernel.patch @@ -0,0 +1,141 @@ +From 976e741c59b64d51fec0b8c4f5c1c8d3cf8ed3be Mon Sep 17 00:00:00 2001 +From: Rik van Riel +Date: Thu, 12 Mar 2015 17:47:00 -0400 +Subject: [PATCH 1/3] import __bitmap_parselist from Linux kernel + +Import __bitmap_parselist from the Linux kernel, in order to parse +CPU ranges as used in eg. the kernel isolcpus= commandline argument. + +This code appears to have been in the Linux kernel since the initial +git import in 2005, so I do not have attribution of which changeset(s) +introduced it into the kernel. + +Signed-off-by: Rik van Riel +--- + bitmap.c | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + bitmap.h | 10 ++++++-- + 2 files changed, 92 insertions(+), 2 deletions(-) + +diff --git a/bitmap.c b/bitmap.c +index 2f44660..6a7421a 100644 +--- a/bitmap.c ++++ b/bitmap.c +@@ -377,3 +377,87 @@ int __bitmap_parse(const char *buf, unsigned int buflen, + + return 0; + } ++ ++/** ++ * __bitmap_parselist - convert list format ASCII string to bitmap ++ * @buf: read nul-terminated user string from this buffer ++ * @buflen: buffer size in bytes. If string is smaller than this ++ * then it must be terminated with a \0. ++ * @is_user: location of buffer, 0 indicates kernel space ++ * @maskp: write resulting mask here ++ * @nmaskbits: number of bits in mask to be written ++ * ++ * Input format is a comma-separated list of decimal numbers and ++ * ranges. Consecutively set bits are shown as two hyphen-separated ++ * decimal numbers, the smallest and largest bit numbers set in ++ * the range. ++ * ++ * Returns 0 on success, -errno on invalid input strings. ++ * Error values: ++ * %-EINVAL: second number in range smaller than first ++ * %-EINVAL: invalid character in string ++ * %-ERANGE: bit number specified too large for mask ++ */ ++int __bitmap_parselist(const char *buf, unsigned int buflen, ++ int is_user __attribute((unused)), unsigned long *maskp, ++ int nmaskbits) ++{ ++ int a, b, c, old_c, totaldigits; ++ int exp_digit, in_range; ++ ++ totaldigits = c = 0; ++ bitmap_zero(maskp, nmaskbits); ++ do { ++ exp_digit = 1; ++ in_range = 0; ++ a = b = 0; ++ ++ /* Get the next cpu# or a range of cpu#'s */ ++ while (buflen) { ++ old_c = c; ++ c = *buf++; ++ buflen--; ++ if (isspace(c)) ++ continue; ++ ++ /* ++ * If the last character was a space and the current ++ * character isn't '\0', we've got embedded whitespace. ++ * This is a no-no, so throw an error. ++ */ ++ if (totaldigits && c && isspace(old_c)) ++ return -EINVAL; ++ ++ /* A '\0' or a ',' signal the end of a cpu# or range */ ++ if (c == '\0' || c == ',') ++ break; ++ ++ if (c == '-') { ++ if (exp_digit || in_range) ++ return -EINVAL; ++ b = 0; ++ in_range = 1; ++ exp_digit = 1; ++ continue; ++ } ++ ++ if (!isdigit(c)) ++ return -EINVAL; ++ ++ b = b * 10 + (c - '0'); ++ if (!in_range) ++ a = b; ++ exp_digit = 0; ++ totaldigits++; ++ } ++ if (!(a <= b)) ++ return -EINVAL; ++ if (b >= nmaskbits) ++ return -ERANGE; ++ while (a <= b) { ++ set_bit(a, maskp); ++ a++; ++ } ++ } while (buflen && c == ','); ++ return 0; ++} +diff --git a/bitmap.h b/bitmap.h +index 91ed499..7afce59 100644 +--- a/bitmap.h ++++ b/bitmap.h +@@ -185,8 +185,8 @@ extern int __bitmap_parse(const char *buf, unsigned int buflen, int is_user, + unsigned long *dst, int nbits); + extern int bitmap_scnlistprintf(char *buf, unsigned int len, + const unsigned long *src, int nbits); +-extern int bitmap_parselist(const char *buf, unsigned long *maskp, +- int nmaskbits); ++extern int __bitmap_parselist(const char *buf, unsigned int buflen, int is_user, ++ unsigned long *dst, int nbits); + extern void bitmap_remap(unsigned long *dst, const unsigned long *src, + const unsigned long *old, const unsigned long *new, int bits); + extern int bitmap_bitremap(int oldbit, +@@ -351,6 +351,12 @@ static inline int bitmap_parse(const char *buf, unsigned int buflen, + return __bitmap_parse(buf, buflen, 0, maskp, nmaskbits); + } + ++static inline int bitmap_parselist(const char *buf, unsigned int buflen, ++ unsigned long *maskp, int nmaskbits) ++{ ++ return __bitmap_parselist(buf, buflen, 0, maskp, nmaskbits); ++} ++ + #endif /* __ASSEMBLY__ */ + + #endif /* __LINUX_BITMAP_H */ +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-irqbalance-signal-handling-tuning.patch b/SOURCES/irqbalance-1.0.8-irqbalance-signal-handling-tuning.patch new file mode 100644 index 00000000..7fe88cb6 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-irqbalance-signal-handling-tuning.patch @@ -0,0 +1,82 @@ +From a37e7a0ab152fe6c88d49d8c99200f4d26672e63 Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Wed, 10 Dec 2014 17:23:30 +0100 +Subject: [PATCH] irqbalance signal handling tuning + +Added sigaction for SIGTERM, SIGUSR1 and SIGUSR2 using the same handler +like SIGINT, i.e. stop and cleanup after finishing of current balancing +iteration. + +Signed-off-by: Petr Holasek +--- + irqbalance.c | 33 +++++++++++++++++++++++---------- + 1 file changed, 23 insertions(+), 10 deletions(-) + +diff --git a/irqbalance.c b/irqbalance.c +index 670e688..f22ecfb 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -238,6 +238,15 @@ static void force_rescan(int signum) + int main(int argc, char** argv) + { + struct sigaction action, hupaction; ++ sigset_t sigset, old_sigset; ++ ++ sigemptyset(&sigset); ++ sigaddset(&sigset,SIGINT); ++ sigaddset(&sigset,SIGHUP); ++ sigaddset(&sigset,SIGTERM); ++ sigaddset(&sigset,SIGUSR1); ++ sigaddset(&sigset,SIGUSR2); ++ sigprocmask(SIG_BLOCK, &sigset, &old_sigset); + + #ifdef HAVE_GETOPT_LONG + parse_command_line(argc, argv); +@@ -290,11 +299,6 @@ int main(int argc, char** argv) + HZ = 100; + } + +- action.sa_handler = handler; +- sigemptyset(&action.sa_mask); +- action.sa_flags = 0; +- sigaction(SIGINT, &action, NULL); +- + build_object_tree(); + if (debug_mode) + dump_object_tree(); +@@ -324,6 +328,20 @@ int main(int argc, char** argv) + } + } + ++ action.sa_handler = handler; ++ sigemptyset(&action.sa_mask); ++ action.sa_flags = 0; ++ sigaction(SIGINT, &action, NULL); ++ sigaction(SIGTERM, &action, NULL); ++ sigaction(SIGUSR1, &action, NULL); ++ sigaction(SIGUSR2, &action, NULL); ++ ++ hupaction.sa_handler = force_rescan; ++ sigemptyset(&hupaction.sa_mask); ++ hupaction.sa_flags = 0; ++ sigaction(SIGHUP, &hupaction, NULL); ++ ++ sigprocmask(SIG_SETMASK, &old_sigset, NULL); + + #ifdef HAVE_LIBCAP_NG + // Drop capabilities +@@ -337,11 +355,6 @@ int main(int argc, char** argv) + parse_proc_interrupts(); + parse_proc_stat(); + +- hupaction.sa_handler = force_rescan; +- sigemptyset(&hupaction.sa_mask); +- hupaction.sa_flags = 0; +- sigaction(SIGHUP, &hupaction, NULL); +- + while (keep_going) { + sleep_approx(SLEEP_INTERVAL); + log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n"); +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-parse-isolcpus-and-nohz-cpus-from-sysfs.patch b/SOURCES/irqbalance-1.0.8-parse-isolcpus-and-nohz-cpus-from-sysfs.patch new file mode 100644 index 00000000..f1d48afa --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-parse-isolcpus-and-nohz-cpus-from-sysfs.patch @@ -0,0 +1,96 @@ +diff -up irqbalance-1.0.7/cputree.c.orig irqbalance-1.0.7/cputree.c +--- irqbalance-1.0.7/cputree.c.orig 2016-01-09 20:15:41.928969895 +0100 ++++ irqbalance-1.0.7/cputree.c 2016-01-09 20:16:23.502347264 +0100 +@@ -59,8 +59,8 @@ cpumask_t cpu_possible_map; + cpumask_t unbanned_cpus; + + /* +- * By default do not place IRQs on CPUs the kernel keeps isolated, +- * as specified through the isolcpus= boot commandline. Users can ++ * By default do not place IRQs on CPUs the kernel keeps isolated or ++ * nohz_full, as specified through the boot commandline. Users can + * override this with the IRQBALANCE_BANNED_CPUS environment variable. + */ + static void setup_banned_cpus(void) +@@ -69,7 +69,13 @@ static void setup_banned_cpus(void) + char *c, *line = NULL; + size_t size = 0; + const char *isolcpus = "isolcpus="; ++ const char *nohz_full_s = "nohz_full="; + char buffer[4096]; ++ cpumask_t nohz_full; ++ cpumask_t isolated_cpus; ++ ++ cpus_clear(isolated_cpus); ++ cpus_clear(nohz_full); + + /* A manually specified cpumask overrides auto-detection. */ + if (getenv("IRQBALANCE_BANNED_CPUS")) { +@@ -77,6 +83,33 @@ static void setup_banned_cpus(void) + goto out; + } + ++ file = fopen("/sys/devices/system/cpu/nohz_full", "r"); ++ if (!file) ++ goto cmdline; ++ ++ if (getline(&line, &size, file) > 0) { ++ cpulist_parse(line, size, nohz_full); ++ free(line); ++ line = NULL; ++ size = 0; ++ } ++ fclose(file); ++ ++ file = fopen("/sys/devices/system/cpu/isolated", "r"); ++ if (file) { ++ if (getline(&line, &size, file) > 0) { ++ cpulist_parse(line, size, isolated_cpus); ++ free(line); ++ line = NULL; ++ size = 0; ++ } ++ fclose(file); ++ } ++ ++ goto out2; ++ ++ cmdline: ++ + file = fopen("/proc/cmdline", "r"); + if (!file) + goto out; +@@ -92,12 +125,31 @@ static void setup_banned_cpus(void) + for (end = c; *end != ' ' && *end != '\0' && *end != '\n'; end++); + len = end - c; + +- cpulist_parse(c, len, banned_cpus); ++ cpulist_parse(c, len, isolated_cpus); + } + ++ if ((c = strstr(line, nohz_full_s))) { ++ char *end; ++ int len; ++ ++ c += strlen(nohz_full_s); ++ for (end = c; *end != ' ' && *end != '\0' && *end != '\n'; end++); ++ len = end - c; ++ ++ cpulist_parse(c, len, nohz_full); ++ } ++ ++ free(line); ++ fclose(file); ++ ++ out2: ++ cpus_or(banned_cpus, nohz_full, isolated_cpus); ++ + out: +- cpumask_scnprintf(buffer, 4096, banned_cpus); ++ cpumask_scnprintf(buffer, 4096, isolated_cpus); + log(TO_CONSOLE, LOG_INFO, "Isolated CPUs: %s\n", buffer); ++ cpumask_scnprintf(buffer, 4096, nohz_full); ++ log(TO_CONSOLE, LOG_INFO, "Adaptive-ticks CPUs: %s\n", buffer); + } + + static struct topo_obj* add_cache_domain_to_package(struct topo_obj *cache, diff --git a/SOURCES/irqbalance-1.0.8-parse-isolcpus-from-proc-cmdline-to-set-up-banned_cp.patch b/SOURCES/irqbalance-1.0.8-parse-isolcpus-from-proc-cmdline-to-set-up-banned_cp.patch new file mode 100644 index 00000000..edee5d16 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-parse-isolcpus-from-proc-cmdline-to-set-up-banned_cp.patch @@ -0,0 +1,101 @@ +From ca5a3f13bf247561e64ef2323b3dd28a2c3b880d Mon Sep 17 00:00:00 2001 +From: Rik van Riel +Date: Thu, 12 Mar 2015 17:47:00 -0400 +Subject: [PATCH 3/3] parse isolcpus= from /proc/cmdline to set up banned_cpus + +When the user specifies a range of CPUs to be isolated from system +tasks with isolcpus= on the kernel command line, it would be nice +if those CPUs could automatically be excluded from getting interrupts +routed to them, as well. + +This patch does that, by looking at /proc/cmdline + +The environment variable IRQBALANCE_BANNED_CPUS will override the +automatically detectable banned_cpus. + +Signed-off-by: Rik van Riel +--- + cputree.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ + irqbalance.c | 4 ---- + 2 files changed, 44 insertions(+), 4 deletions(-) + +diff --git a/cputree.c b/cputree.c +index 8b8cf5e..cfa70b6 100644 +--- a/cputree.c ++++ b/cputree.c +@@ -58,6 +58,48 @@ cpumask_t cpu_possible_map; + */ + cpumask_t unbanned_cpus; + ++/* ++ * By default do not place IRQs on CPUs the kernel keeps isolated, ++ * as specified through the isolcpus= boot commandline. Users can ++ * override this with the IRQBALANCE_BANNED_CPUS environment variable. ++ */ ++static void setup_banned_cpus(void) ++{ ++ FILE *file; ++ char *c, *line = NULL; ++ size_t size = 0; ++ const char *isolcpus = "isolcpus="; ++ char buffer[4096]; ++ ++ /* A manually specified cpumask overrides auto-detection. */ ++ if (getenv("IRQBALANCE_BANNED_CPUS")) { ++ cpumask_parse_user(getenv("IRQBALANCE_BANNED_CPUS"), strlen(getenv("IRQBALANCE_BANNED_CPUS")), banned_cpus); ++ goto out; ++ } ++ ++ file = fopen("/proc/cmdline", "r"); ++ if (!file) ++ goto out; ++ ++ if (getline(&line, &size, file) <= 0) ++ goto out; ++ ++ if ((c = strstr(line, isolcpus))) { ++ char *end; ++ int len; ++ ++ c += strlen(isolcpus); ++ for (end = c; *end != ' ' && *end != '\0' && *end != '\n'; end++); ++ len = end - c; ++ ++ cpulist_parse(c, len, banned_cpus); ++ } ++ ++ out: ++ cpumask_scnprintf(buffer, 4096, banned_cpus); ++ log(TO_CONSOLE, LOG_INFO, "Isolated CPUs: %s\n", buffer); ++} ++ + static struct topo_obj* add_cache_domain_to_package(struct topo_obj *cache, + int packageid, cpumask_t package_mask) + { +@@ -372,6 +414,8 @@ void parse_cpu_tree(void) + DIR *dir; + struct dirent *entry; + ++ setup_banned_cpus(); ++ + cpus_complement(unbanned_cpus, banned_cpus); + + dir = opendir("/sys/devices/system/cpu"); +diff --git a/irqbalance.c b/irqbalance.c +index a5079b9..e4f3b93 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -276,10 +276,6 @@ int main(int argc, char** argv) + */ + openlog(argv[0], 0, LOG_DAEMON); + +- if (getenv("IRQBALANCE_BANNED_CPUS")) { +- cpumask_parse_user(getenv("IRQBALANCE_BANNED_CPUS"), strlen(getenv("IRQBALANCE_BANNED_CPUS")), banned_cpus); +- } +- + if (getenv("IRQBALANCE_ONESHOT")) + one_shot_mode=1; + +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-removing-unused-variable-cache_stat.patch b/SOURCES/irqbalance-1.0.8-removing-unused-variable-cache_stat.patch new file mode 100644 index 00000000..fa94c433 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-removing-unused-variable-cache_stat.patch @@ -0,0 +1,25 @@ +From 854425506dc26d1e118122b2f87f1b7f5641ee35 Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Wed, 10 Dec 2014 15:12:10 +0100 +Subject: [PATCH] removing unused variable cache_stat + +Signed-off-by: Petr Holasek +--- + cputree.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/cputree.c b/cputree.c +index caedbb6..c56b1be 100644 +--- a/cputree.c ++++ b/cputree.c +@@ -234,7 +234,6 @@ static void do_one_cpu(char *path) + cpu_set(cpu->number, cache_mask); + max_cache_index = 0; + cache_index = 1; +- cache_stat = 0; + do { + struct stat sb; + snprintf(new_path, PATH_MAX, "%s/cache/index%d/shared_cpu_map", path, cache_index); +-- +2.1.0 + diff --git a/SOURCES/irqbalance-1.0.8-separate-cmomand-line-banned-irqs.patch b/SOURCES/irqbalance-1.0.8-separate-cmomand-line-banned-irqs.patch new file mode 100644 index 00000000..0c1f85d1 --- /dev/null +++ b/SOURCES/irqbalance-1.0.8-separate-cmomand-line-banned-irqs.patch @@ -0,0 +1,152 @@ +From 7f072d94c93174d30eb18426ee8f8727a9081c40 Mon Sep 17 00:00:00 2001 +From: Neil Horman +Date: Fri, 16 May 2014 10:10:36 -0400 +Subject: [PATCH] irqbalance: separate cmomand line banned irqs from listed + banned irqs + +irqbalance was using one list for tracking banned irqs, but the list was being +used for disperate pruposes in different places. It was tracking command line +banned irqs and irqs that were banned via banscript and policyscript. The +former needs to be remembered accross db rebuilds, while the latter needs to be +rebuilt every time. This patch separates the two in to two lists, so that we +don't stop banning command line specified irqs after the first db rebuild. + +Signed-off-by: Neil Horman +--- + classify.c | 38 +++++++++++++++++++++++++++++--------- + irqbalance.c | 2 +- + irqbalance.h | 2 +- + 3 files changed, 31 insertions(+), 11 deletions(-) + +diff --git a/classify.c b/classify.c +index 94b53b8..8c7d482 100644 +--- a/classify.c ++++ b/classify.c +@@ -59,8 +59,9 @@ struct user_irq_policy { + int numa_node; + }; + +-static GList *interrupts_db; +-static GList *banned_irqs; ++static GList *interrupts_db = NULL; ++static GList *banned_irqs = NULL; ++static GList *cl_banned_irqs = NULL; + + #define SYSDEV_DIR "/sys/bus/pci/devices" + +@@ -72,13 +73,13 @@ static gint compare_ints(gconstpointer a, gconstpointer b) + return ai->irq - bi->irq; + } + +-void add_banned_irq(int irq) ++void add_banned_irq(int irq, GList **list) + { + struct irq_info find, *new; + GList *entry; + + find.irq = irq; +- entry = g_list_find_custom(banned_irqs, &find, compare_ints); ++ entry = g_list_find_custom(*list, &find, compare_ints); + if (entry) + return; + +@@ -91,10 +92,16 @@ void add_banned_irq(int irq) + new->irq = irq; + new->flags |= IRQ_FLAG_BANNED; + +- banned_irqs = g_list_append(banned_irqs, new); ++ *list = g_list_append(*list, new); + return; + } + ++void add_cl_banned_irq(int irq) ++{ ++ add_banned_irq(irq, &cl_banned_irqs); ++} ++ ++ + static int is_banned_irq(int irq) + { + GList *entry; +@@ -324,10 +331,23 @@ static int check_for_irq_ban(char *path, int irq) + { + char *cmd; + int rc; ++ struct irq_info find; ++ GList *entry; ++ ++ /* ++ * Check to see if we banned this irq on the command line ++ */ ++ find.irq = irq; ++ entry = g_list_find_custom(cl_banned_irqs, &find, compare_ints); ++ if (entry) ++ return 1; + + if (!banscript) + return 0; + ++ if (!path) ++ return 0; ++ + cmd = alloca(strlen(path)+strlen(banscript)+32); + if (!cmd) + return 0; +@@ -382,7 +402,7 @@ static void build_one_dev_entry(const char *dirname) + continue; + get_irq_user_policy(devpath, irqnum, &pol); + if ((pol.ban == 1) || (check_for_irq_ban(devpath, irqnum))) { +- add_banned_irq(irqnum); ++ add_banned_irq(irqnum, &banned_irqs); + continue; + } + new = add_one_irq_to_db(devpath, irqnum, &pol); +@@ -411,7 +431,7 @@ static void build_one_dev_entry(const char *dirname) + goto done; + get_irq_user_policy(devpath, irqnum, &pol); + if ((pol.ban == 1) || (check_for_irq_ban(path, irqnum))) { +- add_banned_irq(irqnum); ++ add_banned_irq(irqnum, &banned_irqs); + goto done; + } + +@@ -497,8 +517,8 @@ struct irq_info *add_new_irq(int irq, struct irq_info *hint) + return NULL; + + get_irq_user_policy("/sys", irq, &pol); +- if (pol.ban == 1) { +- add_banned_irq(irq); ++ if ((pol.ban == 1) || check_for_irq_ban(NULL, irq)) { ++ add_banned_irq(irq, &banned_irqs); + new = get_irq_info(irq); + } else + new = add_one_irq_to_db("/sys", irq, &pol); +diff --git a/irqbalance.c b/irqbalance.c +index 2532242..e0b3cbe 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -151,7 +151,7 @@ static void parse_command_line(int argc, char **argv) + usage(); + exit(1); + } +- add_banned_irq((int)val); ++ add_cl_banned_irq((int)val); + break; + case 'l': + polscript = strdup(optarg); +diff --git a/irqbalance.h b/irqbalance.h +index 04cf9d8..cb648a5 100644 +--- a/irqbalance.h ++++ b/irqbalance.h +@@ -106,7 +106,7 @@ extern int get_cpu_count(void); + */ + extern void rebuild_irq_db(void); + extern void free_irq_db(void); +-extern void add_banned_irq(int irq); ++extern void add_cl_banned_irq(int irq); + extern void for_each_irq(GList *list, void (*cb)(struct irq_info *info, void *data), void *data); + extern struct irq_info *get_irq_info(int irq); + extern void migrate_irq(GList **from, GList **to, struct irq_info *info); +-- +2.4.3 + diff --git a/SOURCES/irqbalance-1.0.9-irqbalance-set-IRQBALANCE_DEBUG-variable-implies-for.patch b/SOURCES/irqbalance-1.0.9-irqbalance-set-IRQBALANCE_DEBUG-variable-implies-for.patch new file mode 100644 index 00000000..cba34b90 --- /dev/null +++ b/SOURCES/irqbalance-1.0.9-irqbalance-set-IRQBALANCE_DEBUG-variable-implies-for.patch @@ -0,0 +1,30 @@ +From a0811c1ad96236fefc8eebe7a79a9b86ee654892 Mon Sep 17 00:00:00 2001 +From: Petr Holasek +Date: Thu, 19 Mar 2015 14:58:35 +0100 +Subject: [PATCH 1/1] irqbalance: set IRQBALANCE_DEBUG variable implies + foreground mode + +Signed-off-by: Petr Holasek +--- + irqbalance.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/irqbalance.c b/irqbalance.c +index 29967ba..226fcc6 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -269,8 +269,10 @@ int main(int argc, char** argv) + if (getenv("IRQBALANCE_ONESHOT")) + one_shot_mode=1; + +- if (getenv("IRQBALANCE_DEBUG")) ++ if (getenv("IRQBALANCE_DEBUG")) { + debug_mode=1; ++ foreground_mode=1; ++ } + + /* + * If we are't in debug mode, don't dump anything to the console +-- +2.12.2 + diff --git a/SOURCES/irqbalance-node-package.patch b/SOURCES/irqbalance-node-package.patch new file mode 100644 index 00000000..234bf3f1 --- /dev/null +++ b/SOURCES/irqbalance-node-package.patch @@ -0,0 +1,26 @@ +diff --git a/cputree.c b/cputree.c +index 4d09c0e..0f14cfb 100644 +--- a/cputree.c ++++ b/cputree.c +@@ -357,6 +357,8 @@ static void do_one_cpu(char *path) + + nodeid=-1; + if (numa_avail) { ++ struct topo_obj *node; ++ + dir = opendir(path); + do { + entry = readdir(dir); +@@ -368,6 +370,12 @@ static void do_one_cpu(char *path) + } + } while (entry); + closedir(dir); ++ ++ node = get_numa_node(nodeid); ++ if (node && (cpus_weight(package_mask) > cpus_weight(node->mask))) { ++ cpus_and(package_mask, package_mask, node->mask); ++ packageid = nodeid; ++ } + } + + /* diff --git a/SOURCES/irqbalance.sysconfig b/SOURCES/irqbalance.sysconfig new file mode 100644 index 00000000..8ac7a296 --- /dev/null +++ b/SOURCES/irqbalance.sysconfig @@ -0,0 +1,28 @@ +# irqbalance is a daemon process that distributes interrupts across +# CPUS on SMP systems. The default is to rebalance once every 10 +# seconds. This is the environment file that is specified to systemd via the +# EnvironmentFile key in the service unit file (or via whatever method the init +# system you're using has. +# +# ONESHOT=yes +# after starting, wait for a minute, then look at the interrupt +# load and balance it once; after balancing exit and do not change +# it again. +#IRQBALANCE_ONESHOT= + +# +# IRQBALANCE_BANNED_CPUS +# 64 bit bitmask which allows you to indicate which cpu's should +# be skipped when reblancing irqs. Cpu numbers which have their +# corresponding bits set to one in this mask will not have any +# irq's assigned to them on rebalance +# +#IRQBALANCE_BANNED_CPUS= + +# +# IRQBALANCE_ARGS +# append any args here to the irqbalance daemon as documented in the man page +# +#IRQBALANCE_ARGS= + + diff --git a/SPECS/irqbalance.spec b/SPECS/irqbalance.spec new file mode 100644 index 00000000..4cda5516 --- /dev/null +++ b/SPECS/irqbalance.spec @@ -0,0 +1,390 @@ +Name: irqbalance +Version: 1.0.7 +Release: 11%{?dist} +Epoch: 3 +Summary: IRQ balancing daemon + +Group: System Environment/Base +License: GPLv2 +Url: https://github.com/Irqbalance/irqbalance +Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz +Source1: irqbalance.sysconfig + +BuildRequires: autoconf automake libtool libcap-ng +BuildRequires: glib2-devel pkgconfig libcap-ng-devel +%ifnarch %{arm} +BuildRequires: numactl-devel +BuildRequires: systemd-units +Requires: numactl-libs +%endif +Requires(post): systemd-units +Requires(postun):systemd-units +Requires(preun):systemd-units +#Requires(triggerun):systemd-units + +%define _hardened_build 1 + +ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 ppc64le %{arm} aarch64 + +Patch1: irqbalance-1.0.4-env-file-path.patch +Patch2: irqbalance-1.0.6-man_IRQBALANCE_BANNED_CPUS.patch +Patch3: irqbalance-1.0.7-ignore_affinity_hint.patch +Patch4: irqbalance-1.0.8-removing-unused-variable-cache_stat.patch +Patch5: irqbalance-1.0.8-Manpage-note-about-ignoring-of-pid-in-some-cases.patch +Patch6: irqbalance-1.0.8-irqbalance-signal-handling-tuning.patch +Patch7: irqbalance-1.0.8-Warning-when-irqbalance-hasn-t-root-privileges.patch +Patch8: irqbalance-1.0.7-manpage-hostname.patch +Patch9: irqbalance-1.0.8-import-__bitmap_parselist-from-Linux-kernel.patch +Patch10:irqbalance-1.0.8-fix-cpulist_parse-definition-to-match-bitmap_parseli.patch +Patch11:irqbalance-1.0.8-parse-isolcpus-from-proc-cmdline-to-set-up-banned_cp.patch +Patch12:irqbalance-1.0.8-fix-memory-leak-in-classify-code.patch +Patch13:irqbalance-1.0.8-separate-cmomand-line-banned-irqs.patch +Patch14:irqbalance-1.0.8-parse-isolcpus-and-nohz-cpus-from-sysfs.patch +Patch15:irqbalance-1.0.8-Invalid-parsing-for-isolated-and-nohz_full-cpu-masks.patch +Patch16:irqbalance-1.0.9-irqbalance-set-IRQBALANCE_DEBUG-variable-implies-for.patch +Patch17:irqbalance-node-package.patch +Patch18:irqbalance-1.0.8-Balance-correctly-IRQs-reappearing.patch + +%description +irqbalance is a daemon that evenly distributes IRQ load across +multiple CPUs for enhanced performance. + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 +%patch6 -p1 +%patch7 -p1 +%patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 + +%build +./autogen.sh +%{configure} +CFLAGS="%{optflags}" make %{?_smp_mflags} + +%install +install -D -p -m 0755 %{name} %{buildroot}%{_sbindir}/%{name} +install -D -p -m 0644 ./misc/irqbalance.service %{buildroot}%{_unitdir}/irqbalance.service +install -D -p -m 0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/sysconfig/%{name} + +install -d %{buildroot}%{_mandir}/man1/ +install -p -m 0644 ./irqbalance.1 %{buildroot}%{_mandir}/man1/ + +%files +%defattr(-,root,root) +%doc COPYING AUTHORS +%{_sbindir}/irqbalance +%{_unitdir}/irqbalance.service +%{_mandir}/man1/* +%config(noreplace) %{_sysconfdir}/sysconfig/irqbalance + +%post +%systemd_post irqbalance.service + +%preun +%systemd_preun irqbalance.service + +%postun +%systemd_postun_with_restart irqbalance.service + +%triggerun -- irqbalance < 2:0.56-3 +if /sbin/chkconfig --level 3 irqbalance ; then + /bin/systemctl enable irqbalance.service >/dev/null 2>&1 || : +fi +/sbin/chkconfig --del irqbalance >/dev/null 2>&1 || : + +%changelog +* Mon Feb 05 2018 Petr Oros - 3:1.0.7-11 +- Balance correctly IRQs reappearing +- Resolves: #1536373 + +* Tue May 16 2017 Petr Oros - 3:1.0.7-10 +- irqbalance node package patch +- Resolves: #1444195 + +* Tue Apr 4 2017 Petr Oros - 3:1.0.7-9 +- set IRQBALANCE_DEBUG variable implies foreground mode +- Resolves: #1361211 + +* Tue Dec 20 2016 Petr Oros - 3:1.0.7-8 +- Fix Epoch in version +- Resolves: #1393539 + +* Wed Nov 30 2016 Petr Oros - 2:1.0.7-7 +- Fix Invalid parsing for isolated and nohz_full cpu masks +- Resolves: #1393539 + +* Tue Feb 02 2016 Petr Holasek - 2:1.0.7-6 +- nohz and isolated cpus are read from sysfs (#1264130) + +* Mon Jul 13 2015 Petr Holasek - 2:1.0.7-5 +- banned irqs aren't touched (#1237356) + +* Fri Jun 12 2015 Petr Holasek - 2:1.0.7-4 +- fixed memory leak in pci bus parsing code (#1225319) + +* Tue May 05 2015 Petr Holasek - 2:1.0.7-3 +- fixed putting irqs on isolated cpus (#1201552) + +* Tue Jan 06 2015 Petr Holasek - 2:1.0.7-2 +- fixed unused variable revealed by covscan +- fixed ignored pid argument (#1155632) +- warning when irqbalance started under non-root (#1155799) +- more robust signal handling (#1158937) +- fixed hostname in manpage (#1162251) + +* Tue Aug 19 2014 Petr Holasek - 2:1.0.7-1 +- Rebased to version 1.0.7 (#1018140) + +* Mon Aug 04 2014 Petr Holasek - 2:1.0.6-7 +- ppc64le has been added to exclusive archs (#1125551) + +* Tue Jul 29 2014 Petr Holasek - 2:1.0.6-6 +- aarch64 has been added to exclusive archs (#1055729) + +* Mon Feb 10 2014 Petr Holasek - 2:1.0.6-5 +- Fixed irqbalance web adresses in spec (bz1060810) +- Default hintpolicy adjusted (bz1060814) +- Missing autogen.sh call fixed + +* Fri Dec 27 2013 Daniel Mach - 2:1.0.6-4 +- Mass rebuild 2013-12-27 + +* Thu Oct 31 2013 Petr Holasek - 2:1.0.6-3 +- Fixed env variable man page description (bz1020633) + +* Tue Sep 10 2013 Petr Holasek - 2:1.0.6-2 +- Fixed CPU hotplug/hotunplug sigsegv (bz998494) + +* Mon Aug 12 2013 Petr Holasek - 2:1.0.6-1 +- Rebased to version 1.0.6 (bz996171) + +* Tue Jul 30 2013 Petr Holasek - 2:1.0.5-5 +- Man page and --help output were fixed (bz948372) + +* Fri Jul 26 2013 Petr Holasek - 2:1.0.5-4 +- Hardened build + +* Thu Feb 14 2013 Fedora Release Engineering - 2:1.0.5-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Mon Jan 21 2013 Petr Holasek - 2:1.0.5-1 +- Rebased to version 1.0.5 + +* Wed Aug 29 2012 Petr Holasek - 2:1.0.4-2 +- Env file path edited + +* Mon Aug 27 2012 Petr Holasek - 2:1.0.4-1 +- Rebased to version 1.0.4 + +* Wed Aug 22 2012 Petr Holasek - 2:1.0.3-5 +- Make irqbalance scan for new irqs when it detects new irqs (bz832815) +- Fixes SIGFPE crash for some banning configuration (bz849792) +- Fixes affinity_hint values processing (bz832815) +- Adds banirq and bansript options (bz837049) +- imake isn't needed for building any more (bz844359) +- Fixes clogging of syslog (bz837646) +- Added IRQBALANCE_ARGS variable for passing arguments via systemd(bz837048) +- Fixes --hint-policy=subset behavior (bz844381) + +* Sun Apr 15 2012 Petr Holasek - 2:1.0.3-4 +- Updated libnuma dependencies + +* Sun Feb 5 2012 Peter Robinson - 2:1.0.3-3 +- Build on ARM + +* Fri Jan 13 2012 Fedora Release Engineering - 2:1.0.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Fri Dec 02 2011 Neil Horman - 2:1.0.3-1 +- Updated to latest upstream release + +* Fri Nov 04 2011 Neil Horman - 2:1.0.2-1 +- Updated to latest upstream release + +* Wed Oct 26 2011 Fedora Release Engineering - 2:1.0-4 +- Rebuilt for glibc bug#747377 + +* Fri Oct 21 2011 Neil Horman - 2:1.0-3 +- Fix another crash on non-numa systems (bz 748070) + +* Mon Oct 17 2011 Neil Horman - 2:1.0-2 +- Fix crash for systems with no numa node support + +* Wed Oct 12 2011 Neil Horman - 2:1.0-1 +- Update irqbalance to latest upstream version + +* Fri May 6 2011 Bill Nottingham - 2:0.56-4 +- fix upgrade trigger + +* Fri Apr 8 2011 Peter Robinson - 2:0.56-3 +- Fix build in rawhide +- Add license file to rpm +- Cleanup spec file + +* Fri Mar 25 2011 Anton Arapov - 2:0.56-3 +- rework init in order to respect systemd. (bz 659622) + +* Wed Feb 09 2011 Fedora Release Engineering - 2:0.56-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jun 10 2010 Neil Horman - 2:0.56-1 +- Updated to latest upstream version + +* Wed Sep 09 2009 Neil Horman - 2:0.55-25 +- Fixing BuildRequires + +* Fri Sep 04 2009 Neil Horman - 2:0.55-24 +- Fixing irqbalance initscript (bz 521246) + +* Wed Sep 02 2009 Neil Horman - 2:0.55-23 +- Fixing BuildRequires for new config script + +* Tue Sep 01 2009 Neil Horman - 2:0.55-22 +- Fixing BuildRequires for new config script + +* Tue Sep 01 2009 Neil Horman - 2:0.55-21 +- Fixing BuildRequires for new config script + +* Tue Sep 01 2009 Neil Horman - 2:0.55-20 +- Fixing BuildRequires for new config script + +* Tue Sep 01 2009 Neil Horman - 2:0.55-19 +- Incorporate capng (bz 520699) + +* Fri Jul 31 2009 Peter Lemenkov - 2:0.55-18 +- Added back accidentaly forgotten imake + +* Fri Jul 31 2009 Peter Lemenkov - 2:0.55-17 +- Cosmetic fixes in spec-file +- Fixed rpmlint error in the init-script + +* Tue Jul 28 2009 Peter Lemenkov - 2:0.55-16 +- Many imrovements in spec-file + +* Fri Jul 24 2009 Fedora Release Engineering - 2:0.55-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Fri Mar 6 2009 Neil Horman +- Update spec file to build for i586 as per new build guidelines (bz 488849) + +* Wed Feb 25 2009 Fedora Release Engineering - 2:0.55-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Fri Dec 12 2008 Neil Norman - 2:0.55-12 +- Remove odd Netorking dependence from irqbalance (bz 476179) + +* Fri Aug 01 2008 Tom "spot" Callaway - 2:0.55-11 +- fix license tag + +* Wed Jun 04 2008 Neil Horman - 2:0.55-10 +- Update man page to explain why irqbalance exits on single cache (bz 449949) + +* Tue Mar 18 2008 Neil Horman - 2:0.55-9 +- Rediff pid-file patch to not remove initial parse_cpu_tree (bz 433270) + +* Tue Feb 19 2008 Fedora Release Engineering - 2:0.55-8 +- Autorebuild for GCC 4.3 + +* Thu Nov 01 2007 Neil Horman - 2:0.55-7 +- Update to properly hadndle pid files (bz 355231) + +* Thu Oct 04 2007 Neil Horman - 2:0.55-6 +- Fix irqbalance init script (bz 317219) + +* Fri Sep 28 2007 Neil Horman - 2:0.55-5 +- Install pie patch +- Grab Ulis cpuparse cleanup (bz 310821) + +* Wed Aug 29 2007 Fedora Release Engineering - 2:0.55-4 +- Rebuild for selinux ppc32 issue. + +* Thu Jul 05 2007 Neil Horman - 0.55.3 +- Fixing LSB requirements (bz 246959) + +* Tue Dec 12 2006 Neil Horman - 0.55-2 +- Fixing typos in spec file (bz 219301) + +* Tue Dec 12 2006 Neil Horman - 0.55-1 +- Updating to version 0.55 + +* Mon Dec 11 2006 Neil Horman - 0.54-1 +- Update irqbalance to new version released at www.irqbalance.org + +* Wed Nov 15 2006 Neil Horman - 1.13-8 +- Add ability to set default affinity mask (bz 211148) + +* Wed Nov 08 2006 Neil Horman - 1.13-7 +- fix up irqbalance to detect multicore (not ht) (bz 211183) + +* Thu Nov 02 2006 Neil Horman - 1.13-6 +- bumping up MAX_INTERRUPTS to support xen kernels +- rediffing patch1 and patch3 to remove fuzz + +* Tue Oct 17 2006 Neil Horman - 1.13-5 +- Making oneshot mean oneshot always (bz 211178) + +* Wed Sep 13 2006 Peter Jones - 1.13-4 +- Fix subsystem locking + +* Fri Aug 18 2006 Jesse Keating - 1.13-2 +- rebuilt with latest binutils to pick up 64K -z commonpagesize on ppc* + (#203001) +- Remove hack to use cvs checkin ID as release as it doesn't follow + packaging guidelines + +* Tue Aug 01 2006 Neil Horman +- Change license to GPL in version 0.13 + +* Sat Jul 29 2006 Dave Jones +- identify a bunch more classes. + +* Fri Jul 14 2006 Jesse Keating +- rebuild + +* Tue Jul 11 2006 Dave Jones +- Further lazy rebalancing tweaks. + +* Sun Feb 26 2006 Dave Jones +- Don't rebalance IRQs where no interrupts have occured. + +* Sun Feb 12 2006 Dave Jones +- Build for ppc[64] too. + +* Thu Feb 09 2006 Dave Jones +- rebuild. + +* Fri Dec 16 2005 Jesse Keating +- rebuilt for new gcj + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Tue Mar 1 2005 Dave Jones +- Rebuild with gcc4 + +* Tue Feb 8 2005 Dave Jones +- Build as pie, also -D_FORTIFY_SOURCE=2 + +* Tue Jan 11 2005 Dave Jones +- Add missing Obsoletes: kernel-utils. + +* Mon Jan 10 2005 Dave Jones +- Start irqbalance in runlevel 2 too. (#102064) + +* Sat Dec 18 2004 Dave Jones +- Initial packaging, based on kernel-utils. +