diff --git a/backport-Add-hot-pull-method-for-irqbalance.patch b/backport-Add-hot-pull-method-for-irqbalance.patch deleted file mode 100644 index 2db673f..0000000 --- a/backport-Add-hot-pull-method-for-irqbalance.patch +++ /dev/null @@ -1,115 +0,0 @@ -From ef9bf64affbca0b030f9128d93f302296d166dac Mon Sep 17 00:00:00 2001 -From: hejingxian 00273181 -Date: Mon, 4 Jan 2021 12:34:02 +0800 -Subject: [PATCH] Add hot pull method for irqbalance - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/ef9bf64affbca0b030f9128d93f302296d166dac ---- - classify.c | 37 +++++++++++++++++++++++++++++++++++++ - irqbalance.h | 1 + - procinterrupts.c | 4 +++- - types.h | 1 + - 4 files changed, 42 insertions(+), 1 deletion(-) - -diff --git a/classify.c b/classify.c -index 4b6ffa8..beb2919 100644 ---- a/classify.c -+++ b/classify.c -@@ -852,3 +852,39 @@ void sort_irq_list(GList **list) - { - *list = g_list_sort(*list, sort_irqs); - } -+ -+static void remove_no_existing_irq(struct irq_info *info, void *data __attribute__((unused))) -+{ -+ GList *entry = NULL; -+ -+ if (info->existing) { -+ /* clear existing flag for next detection */ -+ info->existing = 0; -+ return; -+ } -+ -+ entry = g_list_find_custom(interrupts_db, info, compare_ints); -+ if (entry) -+ interrupts_db = g_list_delete_link(interrupts_db, entry); -+ -+ entry = g_list_find_custom(rebalance_irq_list, info, compare_ints); -+ if (entry) -+ rebalance_irq_list = g_list_delete_link(rebalance_irq_list, entry); -+ -+ if(info->assigned_obj) { -+ entry = g_list_find_custom(info->assigned_obj->interrupts, info, compare_ints); -+ if (entry) { -+ info->assigned_obj->interrupts = g_list_delete_link(info->assigned_obj->interrupts, entry); -+ } -+ } -+ log(TO_CONSOLE, LOG_INFO, "IRQ %d is removed from interrupts_db.\n", info->irq); -+ free_irq(info, NULL); -+} -+ -+void clear_no_existing_irqs(void) -+{ -+ for_each_irq(NULL, remove_no_existing_irq, NULL); -+ if (banned_irqs) { -+ for_each_irq(banned_irqs, remove_no_existing_irq, NULL); -+ } -+} -+ -diff --git a/irqbalance.h b/irqbalance.h -index d8e80a9..e7f6b94 100644 ---- a/irqbalance.h -+++ b/irqbalance.h -@@ -42,6 +42,7 @@ extern void set_interrupt_count(int number, uint64_t count); - extern void set_msi_interrupt_numa(int number); - extern void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq); - extern int proc_irq_hotplug(char *line, int irq, struct irq_info **pinfo); -+extern void clear_no_existing_irqs(void); - - extern GList *rebalance_irq_list; - extern void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused))); -diff --git a/procinterrupts.c b/procinterrupts.c -index 0671be0..854282f 100644 ---- a/procinterrupts.c -+++ b/procinterrupts.c -@@ -248,7 +248,6 @@ GList* collect_full_irq_list() - return tmp_list; - } - -- - void parse_proc_interrupts(void) - { - FILE *file; -@@ -310,6 +309,7 @@ void parse_proc_interrupts(void) - break; - } - } -+ info->existing = 1; - free(savedline); - - count = 0; -@@ -354,6 +354,8 @@ void parse_proc_interrupts(void) - */ - msi_found_in_sysfs = 1; - } -+ if (!need_rescan) -+ clear_no_existing_irqs(); - fclose(file); - free(line); - } -diff --git a/types.h b/types.h -index a01d649..9693cf4 100644 ---- a/types.h -+++ b/types.h -@@ -70,6 +70,7 @@ struct irq_info { - uint64_t last_irq_count; - uint64_t load; - int moved; -+ int existing; - struct topo_obj *assigned_obj; - char *name; - }; --- -2.23.0 - diff --git a/backport-Add-log-for-hotplug-appropriately.patch b/backport-Add-log-for-hotplug-appropriately.patch deleted file mode 100644 index d11c4eb..0000000 --- a/backport-Add-log-for-hotplug-appropriately.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 6ae114f8719a6a49cef73a32d820a77e900ddf08 Mon Sep 17 00:00:00 2001 -From: hejingxian 00273181 -Date: Thu, 17 Dec 2020 17:47:45 +0800 -Subject: [PATCH] Add log for hotplug appropriately - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/6ae114f8719a6a49cef73a32d820a77e900ddf08 ---- - classify.c | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/classify.c b/classify.c -index 0d556e9..4b6ffa8 100644 ---- a/classify.c -+++ b/classify.c -@@ -644,12 +644,13 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs, int build_ - irqnum = strtol(entry->d_name, NULL, 10); - /* If build_irq is valid, only add irq when it's number equals to build_irq */ - if (irqnum && ((build_irq < 0) || (irqnum == build_irq))) { -- printf("add irq:%d %d for %s\n", irqnum, build_irq, path); - hint.irq = irqnum; - hint.type = IRQ_TYPE_MSIX; - add_new_irq(devpath, &hint, tmp_irqs); -- if (build_irq >= 0) -+ if (build_irq >= 0) { -+ log(TO_CONSOLE, LOG_INFO, "Hotplug dev irq: %d finished.\n", irqnum); - break; -+ } - } - } while (entry != NULL); - closedir(msidir); -@@ -674,6 +675,8 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs, int build_ - hint.irq = irqnum; - hint.type = IRQ_TYPE_LEGACY; - add_new_irq(devpath, &hint, tmp_irqs); -+ if (build_irq >= 0) -+ log(TO_CONSOLE, LOG_INFO, "Hotplug dev irq: %d finished.\n", irqnum); - } - } - --- -2.23.0 - diff --git a/backport-Also-fetch-node-info-for-non-PCI-devices.patch b/backport-Also-fetch-node-info-for-non-PCI-devices.patch deleted file mode 100644 index b2c960f..0000000 --- a/backport-Also-fetch-node-info-for-non-PCI-devices.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 31dea01f3a47aa6374560638486879e5129f9c94 Mon Sep 17 00:00:00 2001 -From: Kairui Song -Date: Thu, 28 Jan 2021 15:24:32 +0800 -Subject: [PATCH] Also fetch node info for non-PCI devices - -non-PCI devices could also be bind to a certain node. So if failed to -fetch the info from sysfs, try to get it from /proc/irq//node. - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/31dea01f3a47aa6374560638486879e5129f9c94 ---- - classify.c | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/classify.c b/classify.c -index beb2919..105ecd6 100644 ---- a/classify.c -+++ b/classify.c -@@ -361,9 +361,14 @@ static struct irq_info *add_one_irq_to_db(const char *devpath, struct irq_info * - - get_numa_node: - numa_node = NUMA_NO_NODE; -- if (devpath != NULL && numa_avail) { -- sprintf(path, "%s/numa_node", devpath); -- process_one_line(path, get_int, &numa_node); -+ if (numa_avail) { -+ if (devpath != NULL) { -+ sprintf(path, "%s/numa_node", devpath); -+ process_one_line(path, get_int, &numa_node); -+ } else { -+ sprintf(path, "/proc/irq/%i/node", irq); -+ process_one_line(path, get_int, &numa_node); -+ } - } - - if (pol->numa_node_set == 1) --- -2.23.0 - diff --git a/backport-Hotplug-may-occur-again-during-sleep-so-wait-until-t.patch b/backport-Hotplug-may-occur-again-during-sleep-so-wait-until-t.patch deleted file mode 100644 index 5eced5a..0000000 --- a/backport-Hotplug-may-occur-again-during-sleep-so-wait-until-t.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 518d81cdd8c54c820d16afb73658753b46032676 Mon Sep 17 00:00:00 2001 -From: SuperSix173 -Date: Tue, 6 Apr 2021 10:26:17 +0800 -Subject: [PATCH] Hotplug may occur again during sleep, so wait until there is - no hotplug - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/518d81cdd8c54c820d16afb73658753b46032676 ---- - irqbalance.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/irqbalance.c b/irqbalance.c -index 458bb07..3f94847 100644 ---- a/irqbalance.c -+++ b/irqbalance.c -@@ -285,7 +285,7 @@ gboolean scan(gpointer data __attribute__((unused))) - - - /* cope with cpu hotplug -- detected during /proc/interrupts parsing */ -- if (need_rescan || need_rebuild) { -+ while (need_rescan || need_rebuild) { - int try_times = 0; - - need_rescan = 0; --- -2.23.0 - diff --git a/backport-activate_mapping-activate-only-online-CPUs.patch b/backport-activate_mapping-activate-only-online-CPUs.patch deleted file mode 100644 index 0a50f7e..0000000 --- a/backport-activate_mapping-activate-only-online-CPUs.patch +++ /dev/null @@ -1,56 +0,0 @@ -From c8757c6d870c4788da4980abaf21cb7369702ee9 Mon Sep 17 00:00:00 2001 -From: Paride Legovini -Date: Tue, 25 Aug 2020 23:18:27 +0200 -Subject: [PATCH] activate_mapping: activate only online CPUs - -When echoing a mask to /proc/irq/N/smp_affinity make sure to activate -only CPUs which are online. Activating a CPU which is not online results -in a EOVERFLOW. - -Originally fixed in Debian by Helge Deller . - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/c8757c6d870c4788da4980abaf21cb7369702ee9 ---- - activate.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/activate.c b/activate.c -index 065f880..62cfd08 100644 ---- a/activate.c -+++ b/activate.c -@@ -49,6 +49,7 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un - char buf[PATH_MAX]; - FILE *file; - int ret = 0; -+ cpumask_t applied_mask; - - /* - * only activate mappings for irqs that have moved -@@ -59,10 +60,13 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un - if (!info->assigned_obj) - return; - -+ /* activate only online cpus, otherwise writing to procfs returns EOVERFLOW */ -+ cpus_and(applied_mask, cpu_online_map, info->assigned_obj->mask); -+ - /* - * Don't activate anything for which we have an invalid mask - */ -- if (check_affinity(info, info->assigned_obj->mask)) -+ if (check_affinity(info, applied_mask)) - return; - - sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq); -@@ -70,7 +74,7 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un - if (!file) - return; - -- cpumask_scnprintf(buf, PATH_MAX, info->assigned_obj->mask); -+ cpumask_scnprintf(buf, PATH_MAX, applied_mask); - ret = fprintf(file, "%s", buf); - if (ret < 0) { - log(TO_ALL, LOG_WARNING, "cannot change irq %i's affinity, add it to banned list", info->irq); --- -2.23.0 - diff --git a/backport-add-env-variable-to-ban-cpus-using-cpulist-syntax.patch b/backport-add-env-variable-to-ban-cpus-using-cpulist-syntax.patch deleted file mode 100644 index 477298c..0000000 --- a/backport-add-env-variable-to-ban-cpus-using-cpulist-syntax.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 677b686e223c74e64f5b230bdb4079555a5a62a9 Mon Sep 17 00:00:00 2001 -From: ChanderG -Date: Tue, 25 Aug 2020 15:46:56 +0530 -Subject: [PATCH] add env variable to ban cpus using cpulist syntax - -allows banning of cpus using the taskset cpulist syntax in addition to the -bitmap syntax supported via the existing environment variable -IRQBALANCE_BANNED_CPUS - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/677b686e223c74e64f5b230bdb4079555a5a62a9 ---- - cputree.c | 6 ++++++ - irqbalance.1 | 6 ++++++ - 2 files changed, 12 insertions(+) - -diff --git a/cputree.c b/cputree.c -index 0433657..00cf47f 100644 ---- a/cputree.c -+++ b/cputree.c -@@ -127,6 +127,12 @@ static void setup_banned_cpus(void) - goto out; - } - -+ env = getenv("IRQBALANCE_BANNED_CPULIST"); -+ if (env && strlen(env)) { -+ cpulist_parse(env, strlen(env), banned_cpus); -+ goto out; -+ } -+ - path = "/sys/devices/system/cpu/isolated"; - process_one_line(path, get_mask_from_cpulist, &isolated_cpus); - -diff --git a/irqbalance.1 b/irqbalance.1 -index 3005f6b..33ffd26 100644 ---- a/irqbalance.1 -+++ b/irqbalance.1 -@@ -158,6 +158,12 @@ Provides a mask of CPUs which irqbalance should ignore and never assign interrup - If not specified, irqbalance use mask of isolated and adaptive-ticks CPUs on the - system as the default value. - -+.TP -+.B IRQBALANCE_BANNED_CPULIST -+Provides a cpulist which irqbalance should ignore and never assign interrupts to. -+If not specified, irqbalance use mask of isolated and adaptive-ticks CPUs on the -+system as the default value. -+ - .SH "SIGNALS" - .TP - .B SIGHUP --- -2.23.0 - diff --git a/backport-add-irq-hotplug-feature-for-irqbalance.patch b/backport-add-irq-hotplug-feature-for-irqbalance.patch deleted file mode 100644 index d96b536..0000000 --- a/backport-add-irq-hotplug-feature-for-irqbalance.patch +++ /dev/null @@ -1,352 +0,0 @@ -From 0ba4a60a2a732150e5016389e32b2e81906a72c2 Mon Sep 17 00:00:00 2001 -From: hejingxian 00273181 -Date: Fri, 4 Dec 2020 10:52:57 +0800 -Subject: [PATCH] add irq hotplug feature for irqbalance - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/0ba4a60a2a732150e5016389e32b2e81906a72c2 ---- - classify.c | 70 +++++++++++++++++++++++-------- - irqbalance.c | 2 +- - irqbalance.h | 4 +- - procinterrupts.c | 104 ++++++++++++++++++++++++++++------------------- - 4 files changed, 120 insertions(+), 60 deletions(-) - -diff --git a/classify.c b/classify.c -index 9f588bc..0d556e9 100644 ---- a/classify.c -+++ b/classify.c -@@ -619,7 +619,7 @@ static void add_new_irq(char *path, struct irq_info *hint, GList *proc_interrupt - /* - * Figures out which interrupt(s) relate to the device we"re looking at in dirname - */ --static void build_one_dev_entry(const char *dirname, GList *tmp_irqs) -+static void build_one_dev_entry(const char *dirname, GList *tmp_irqs, int build_irq) - { - struct dirent *entry; - DIR *msidir; -@@ -642,10 +642,14 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs) - if (!entry) - break; - irqnum = strtol(entry->d_name, NULL, 10); -- if (irqnum) { -+ /* If build_irq is valid, only add irq when it's number equals to build_irq */ -+ if (irqnum && ((build_irq < 0) || (irqnum == build_irq))) { -+ printf("add irq:%d %d for %s\n", irqnum, build_irq, path); - hint.irq = irqnum; - hint.type = IRQ_TYPE_MSIX; - add_new_irq(devpath, &hint, tmp_irqs); -+ if (build_irq >= 0) -+ break; - } - } while (entry != NULL); - closedir(msidir); -@@ -665,9 +669,12 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs) - #else - if (irqnum) { - #endif -- hint.irq = irqnum; -- hint.type = IRQ_TYPE_LEGACY; -- add_new_irq(devpath, &hint, tmp_irqs); -+ /* If build_irq is valid, only add irq when it's number equals to build_irq */ -+ if ((build_irq < 0) || (irqnum == build_irq)) { -+ hint.irq = irqnum; -+ hint.type = IRQ_TYPE_LEGACY; -+ add_new_irq(devpath, &hint, tmp_irqs); -+ } - } - - done: -@@ -712,31 +719,60 @@ static void free_tmp_irqs(gpointer data) - free(info); - } - --void rebuild_irq_db(void) -+static struct irq_info * build_dev_irqs(GList *tmp_irqs, int build_irq) - { - DIR *devdir; - struct dirent *entry; -- GList *tmp_irqs = NULL; -- -- free_irq_db(); -- -- tmp_irqs = collect_full_irq_list(); -+ struct irq_info *new_irq = NULL; - - devdir = opendir(SYSPCI_DIR); -- - if (devdir) { - do { - entry = readdir(devdir); -- - if (!entry) - break; -- -- build_one_dev_entry(entry->d_name, tmp_irqs); -- -+ /* when hotplug irqs, we add one irq at one time */ -+ build_one_dev_entry(entry->d_name, tmp_irqs, build_irq); -+ if (build_irq >= 0) { -+ new_irq = get_irq_info(build_irq); -+ if (new_irq) -+ break; -+ } - } while (entry != NULL); -- - closedir(devdir); - } -+ return new_irq; -+} -+ -+int proc_irq_hotplug(char *savedline, int irq, struct irq_info **pinfo) -+{ -+ struct irq_info tmp_info = {0}; -+ -+ /* firstly, init irq info by read device info */ -+ *pinfo = build_dev_irqs(interrupts_db, irq); -+ if (*pinfo == NULL) { -+ /* secondly, init irq info by parse savedline */ -+ init_irq_class_and_type(savedline, &tmp_info, irq); -+ add_new_irq(NULL, &tmp_info, interrupts_db); -+ *pinfo = get_irq_info(irq); -+ } -+ if (*pinfo == NULL) { -+ return -1; -+ } -+ -+ force_rebalance_irq(*pinfo, NULL); -+ return 0; -+} -+ -+void rebuild_irq_db(void) -+{ -+ GList *tmp_irqs = NULL; -+ -+ free_irq_db(); -+ -+ tmp_irqs = collect_full_irq_list(); -+ -+ build_dev_irqs(tmp_irqs, -1); - - for_each_irq(tmp_irqs, add_missing_irq, interrupts_db); - -diff --git a/irqbalance.c b/irqbalance.c -index eaa0ce1..9baa955 100644 ---- a/irqbalance.c -+++ b/irqbalance.c -@@ -249,7 +249,7 @@ static void dump_object_tree(void) - for_each_object(numa_nodes, dump_numa_node_info, NULL); - } - --static void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused))) -+void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused))) - { - if (info->level == BALANCE_NONE) - return; -diff --git a/irqbalance.h b/irqbalance.h -index acf0ed5..d8e80a9 100644 ---- a/irqbalance.h -+++ b/irqbalance.h -@@ -40,8 +40,11 @@ extern GList* collect_full_irq_list(); - extern void parse_proc_stat(void); - extern void set_interrupt_count(int number, uint64_t count); - extern void set_msi_interrupt_numa(int number); -+extern void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq); -+extern int proc_irq_hotplug(char *line, int irq, struct irq_info **pinfo); - - extern GList *rebalance_irq_list; -+extern void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused))); - - void update_migration_status(void); - void dump_workloads(void); -@@ -52,7 +55,6 @@ void dump_tree(void); - void activate_mappings(void); - void clear_cpu_tree(void); - void free_cpu_topo(gpointer data); -- - /*===================NEW BALANCER FUNCTIONS============================*/ - - /* -diff --git a/procinterrupts.c b/procinterrupts.c -index 858b66b..0671be0 100644 ---- a/procinterrupts.c -+++ b/procinterrupts.c -@@ -145,16 +145,59 @@ static void guess_arm_irq_hints(char *name, struct irq_info *info) - } - #endif - -+void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) -+{ -+ char *irq_name = NULL; -+ char *irq_mod = NULL; -+ char *savedptr = NULL; -+ char *last_token = NULL; -+ char *p = NULL; -+ int is_xen_dyn = 0; -+#ifdef AARCH64 -+ char *tmp = NULL; -+#endif -+ -+ irq_name = strtok_r(savedline, " ", &savedptr); -+ if (strstr(irq_name, "xen-dyn") != NULL) -+ is_xen_dyn = 1; -+ last_token = strtok_r(NULL, " ", &savedptr); -+ while ((p = strtok_r(NULL, " ", &savedptr))) { -+ irq_name = last_token; -+ if (strstr(irq_name, "xen-dyn") != NULL) -+ is_xen_dyn = 1; -+ last_token = p; -+ } -+ -+#ifdef AARCH64 -+ irq_name = last_token; -+ tmp = strchr(irq_name, '\n'); -+ if (tmp) -+ *tmp = 0; -+#endif -+ irq_mod = last_token; -+ info->irq = irq; -+ -+ if (strstr(irq_name, "-event") != NULL && is_xen_dyn == 1) { -+ info->type = IRQ_TYPE_VIRT_EVENT; -+ info->class = IRQ_VIRT_EVENT; -+ } else { -+#ifdef AARCH64 -+ guess_arm_irq_hints(irq_name, info); -+#else -+ info->type = IRQ_TYPE_LEGACY; -+ info->class = IRQ_OTHER; -+#endif -+ } -+ info->numa_node = get_numa_node(0); -+ info->name = strdup(irq_mod); -+} -+ - GList* collect_full_irq_list() - { - GList *tmp_list = NULL; - FILE *file; - char *line = NULL; - size_t size = 0; -- char *irq_name, *irq_mod, *savedptr, *last_token, *p; --#ifdef AARCH64 -- char *tmp; --#endif - - file = fopen("/proc/interrupts", "r"); - if (!file) -@@ -169,7 +212,6 @@ GList* collect_full_irq_list() - - while (!feof(file)) { - int number; -- int is_xen_dyn = 0; - struct irq_info *info; - char *c; - char *savedline = NULL; -@@ -191,44 +233,12 @@ GList* collect_full_irq_list() - savedline = strdup(line); - if (!savedline) - break; -- irq_name = strtok_r(savedline, " ", &savedptr); -- if (strstr(irq_name, "xen-dyn") != NULL) -- is_xen_dyn = 1; -- last_token = strtok_r(NULL, " ", &savedptr); -- while ((p = strtok_r(NULL, " ", &savedptr))) { -- irq_name = last_token; -- if (strstr(irq_name, "xen-dyn") != NULL) -- is_xen_dyn = 1; -- last_token = p; -- } -- --#ifdef AARCH64 -- /* Of course the formatting for /proc/interrupts is different on different arches */ -- irq_name = last_token; -- tmp = strchr(irq_name, '\n'); -- if (tmp) -- *tmp = 0; --#endif -- irq_mod = last_token; -- - *c = 0; - number = strtoul(line, NULL, 10); - - info = calloc(1, sizeof(struct irq_info)); - if (info) { -- info->irq = number; -- if (strstr(irq_name, "-event") != NULL && is_xen_dyn == 1) { -- info->type = IRQ_TYPE_VIRT_EVENT; -- info->class = IRQ_VIRT_EVENT; -- } else { --#ifdef AARCH64 -- guess_arm_irq_hints(irq_name, info); --#else -- info->type = IRQ_TYPE_LEGACY; -- info->class = IRQ_OTHER; --#endif -- } -- info->name = strdup(irq_mod); -+ init_irq_class_and_type(savedline, info, number); - tmp_list = g_list_append(tmp_list, info); - } - free(savedline); -@@ -238,11 +248,13 @@ GList* collect_full_irq_list() - return tmp_list; - } - -+ - void parse_proc_interrupts(void) - { - FILE *file; - char *line = NULL; - size_t size = 0; -+ int ret; - - file = fopen("/proc/interrupts", "r"); - if (!file) -@@ -261,6 +273,7 @@ void parse_proc_interrupts(void) - uint64_t count; - char *c, *c2; - struct irq_info *info; -+ char *savedline = NULL; - - if (getline(&line, &size, file)<=0) - break; -@@ -280,15 +293,24 @@ void parse_proc_interrupts(void) - if (!c) - continue; - -+ savedline = strdup(line); -+ if (!savedline) -+ break; - *c = 0; - c++; - number = strtoul(line, NULL, 10); - - info = get_irq_info(number); - if (!info) { -- need_rescan = 1; -- break; -+ ret = proc_irq_hotplug(savedline, number, &info); -+ if (ret < 0) { -+ /* hotplug fail, need to rescan */ -+ need_rescan = 1; -+ free(savedline); -+ break; -+ } - } -+ free(savedline); - - count = 0; - cpunr = 0; -@@ -316,7 +338,7 @@ void parse_proc_interrupts(void) - break; - } - -- info->last_irq_count = info->irq_count; -+ info->last_irq_count = info->irq_count; - info->irq_count = count; - - /* is interrupt MSI based? */ --- -2.23.0 - diff --git a/backport-log-correctly-for-isolated-and-nohz_full-cpus.patch b/backport-log-correctly-for-isolated-and-nohz_full-cpus.patch deleted file mode 100644 index 4dc95b9..0000000 --- a/backport-log-correctly-for-isolated-and-nohz_full-cpus.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 6fe032945b69d8f382fa3e8de8e4fdce84063199 Mon Sep 17 00:00:00 2001 -From: Yunfeng Ye -Date: Fri, 20 Nov 2020 00:15:58 +0800 -Subject: [PATCH] log correctly for isolated and nohz_full cpus - -When the banded CPU is configured, and the "isolcpus" or "nohz_full" -is configured, the log for isolated and nohz CPUs are not correct. - -So only log relevant infomation when isolcpus and nohz_full has been -handled, also put the cpus_clear() closer. - -Conflict:NA -Reference:https://github.com/Irqbalance/irqbalance/commit/6fe032945b69d8f382fa3e8de8e4fdce84063199 ---- - cputree.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/cputree.c b/cputree.c -index 80a6d9d..eed20db 100644 ---- a/cputree.c -+++ b/cputree.c -@@ -112,9 +112,6 @@ static void setup_banned_cpus(void) - cpumask_t isolated_cpus; - char *env = NULL; - -- cpus_clear(isolated_cpus); -- cpus_clear(nohz_full); -- - /* A manually specified cpumask overrides auto-detection. */ - if (cpu_ban_string != NULL && banned_cpumask_from_ui != NULL) { - cpulist_parse(banned_cpumask_from_ui, -@@ -133,6 +130,9 @@ static void setup_banned_cpus(void) - goto out; - } - -+ cpus_clear(isolated_cpus); -+ cpus_clear(nohz_full); -+ - path = "/sys/devices/system/cpu/isolated"; - process_one_line(path, get_mask_from_cpulist, &isolated_cpus); - -@@ -141,11 +141,11 @@ static void setup_banned_cpus(void) - - cpus_or(banned_cpus, nohz_full, isolated_cpus); - --out: - 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); -+out: - cpumask_scnprintf(buffer, 4096, banned_cpus); - log(TO_CONSOLE, LOG_INFO, "Banned CPUs: %s\n", buffer); - } --- -2.23.0 - diff --git a/feature-add-the-switch-of-printing-log.patch b/feature-add-the-switch-of-printing-log.patch index 4adc264..00e7305 100644 --- a/feature-add-the-switch-of-printing-log.patch +++ b/feature-add-the-switch-of-printing-log.patch @@ -17,8 +17,8 @@ index 010e672..48d3d0d 100644 indent[i] = log_indent[0]; indent[i] = '\0'; -- log(TO_CONSOLE, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%lu:%lu) \n", indent, -+ log(TO_ALL, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%lu:%lu) \n", indent, +- log(TO_CONSOLE, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%" PRIu64 ":%" PRIu64 ") \n", indent, ++ log(TO_ALL, LOG_INFO, "%sInterrupt %i node_num is %d (%s/%" PRIu64 ":%" PRIu64 ") \n", indent, info->irq, irq_numa_node(info)->number, classes[info->class], info->load, (info->irq_count - info->last_irq_count)); free(indent); } diff --git a/irqbalance-1.7.0.tar.gz b/irqbalance-1.7.0.tar.gz deleted file mode 100644 index b1bc34c..0000000 Binary files a/irqbalance-1.7.0.tar.gz and /dev/null differ diff --git a/irqbalance-1.8.0.tar.gz b/irqbalance-1.8.0.tar.gz new file mode 100644 index 0000000..a72b1c3 Binary files /dev/null and b/irqbalance-1.8.0.tar.gz differ diff --git a/irqbalance.spec b/irqbalance.spec index 4a6638e..64833bc 100644 --- a/irqbalance.spec +++ b/irqbalance.spec @@ -1,38 +1,28 @@ -Summary: A dynamic adaptive IRQ balancing daemon -Name: irqbalance -Version: 1.7.0 -Release: 5 -Epoch: 3 -License: GPLv2 -Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz +Summary: A dynamic adaptive IRQ balancing daemon +Name: irqbalance +Version: 1.8.0 +Release: 1 +Epoch: 3 +License: GPLv2 +Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz Source1: irqbalance.service Source2: irqbalance.sysconfig Source3: irqbalance.rules Source4: irq_balancer -Url: https://github.com/irqbalance/irqbalance +Url: https://github.com/irqbalance/irqbalance -BuildRequires: autoconf automake libtool libcap-ng systemd -BuildRequires: glib2-devel pkgconf libcap-ng-devel ncurses-devel +BuildRequires: autoconf automake libtool libcap-ng systemd +BuildRequires: glib2-devel pkgconf libcap-ng-devel ncurses-devel Requires: ncurses-libs %ifnarch %{arm} -BuildRequires: numactl-devel -Requires: numactl-libs +BuildRequires: numactl-devel +Requires: numactl-libs %endif %define _hardened_build 1 - -Patch6000: backport-add-env-variable-to-ban-cpus-using-cpulist-syntax.patch -Patch6001: backport-activate_mapping-activate-only-online-CPUs.patch -Patch6002: backport-log-correctly-for-isolated-and-nohz_full-cpus.patch -Patch6003: backport-add-irq-hotplug-feature-for-irqbalance.patch -Patch6004: backport-Add-log-for-hotplug-appropriately.patch -Patch6005: backport-Add-hot-pull-method-for-irqbalance.patch -Patch6006: backport-Also-fetch-node-info-for-non-PCI-devices.patch -Patch6007: backport-Hotplug-may-occur-again-during-sleep-so-wait-until-t.patch - Patch9000: feature-aarch64-add-the-regular-to-get-the-correct-i.patch Patch9001: feature-add-new-user-irq-policy-config-rule.patch Patch9002: feature-add-the-switch-of-printing-log.patch @@ -83,7 +73,8 @@ cd - install -D -p -m 0755 %{name} %{buildroot}%{_sbindir}/%{name} install -D -p -m 0644 %{SOURCE1} %{buildroot}/%{_unitdir}/%{name}.service install -D -p -m 0644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/%{name} -install -D -p -m 0755 %{SOURCE3} %{buildroot}%{_sbindir}/irq_balancer +install -D -p -m 0755 %{SOURCE3} %{buildroot}%{_sysconfdir}/sysconfig/%{name}.rules +install -D -p -m 0755 %{SOURCE4} %{buildroot}%{_sbindir}/irq_balancer install -D -p -m 0755 ui/irqbalance_client.h %{buildroot}/%{_includedir}/irqbalance_client.h install -D -p -m 0755 ui/libirqbalance_client.so %{buildroot}/%{_libdir}/libirqbalance_client.so @@ -99,6 +90,7 @@ make check %{_sbindir}/%{name} %{_unitdir}/%{name}.service %config(noreplace) %{_sysconfdir}/sysconfig/%{name} +%{_sysconfdir}/sysconfig/%{name}.rules %{_sbindir}/irq_balancer %files devel @@ -126,6 +118,12 @@ fi /sbin/chkconfig --del %{name} >/dev/null 2>&1 || : %changelog +* Sat Apr 17 2021 Liu Chao - 3:1.8.0-1 +- Type:enhanced +- ID:NA +- SUG:restart +- DESC:upgrade to v1.8.0 + * Fri Apr 9 2021 Liu Chao - 3:1.7.0-5 - Type:enhanced - ID:NA