diff --git a/feature-aarch64-add-the-regular-to-get-the-correct-i.patch b/feature-aarch64-add-the-regular-to-get-the-correct-i.patch new file mode 100644 index 0000000000000000000000000000000000000000..6cbd88600799739be7ddc7718f8cac4ca7ad28ab --- /dev/null +++ b/feature-aarch64-add-the-regular-to-get-the-correct-i.patch @@ -0,0 +1,93 @@ +From c924f1df705a301a0ffc01fce4c7712756c8b1d2 Mon Sep 17 00:00:00 2001 +From: Zengruan Ye +Date: Sat, 13 Jul 2019 19:09:09 +0800 +Subject: [PATCH] feature: aarch64: add the regular to get the correct irq + class on hisi board + +First, get the full irq desc name, include that the name split by blank, just like +(hisi_sas_v2_hw sata). We use the irq type to mark the begin of the name. + +Second, for hisi bord, we consider to match the IRQ_SCSI class (which the +irqbalance service concerned, and the eth device match follow the +open community rule) by keywords group hisi & sas or hisi & sata. + +Signed-off-by: wanghaibin +--- + procinterrupts.c | 33 ++++++++++++++++++++++++++++++++- + 1 file changed, 32 insertions(+), 1 deletion(-) + +diff --git a/procinterrupts.c b/procinterrupts.c +index 854282f..32c5e53 100644 +--- a/procinterrupts.c ++++ b/procinterrupts.c +@@ -108,6 +108,8 @@ static void guess_arm_irq_hints(char *name, struct irq_info *info) + /* Note: Last entry is a catchall */ + static struct irq_match matches[] = { + { "eth.*" ,{NULL} ,NULL, IRQ_TYPE_LEGACY, IRQ_GBETH }, ++ { "hisi\\w*? *sas" ,{NULL} ,NULL, IRQ_TYPE_LEGACY, IRQ_SCSI}, ++ { "hisi\\w*? *sata" ,{NULL} ,NULL, IRQ_TYPE_LEGACY, IRQ_SCSI}, + { "[A-Z0-9]{4}[0-9a-f]{4}", {NULL} ,check_platform_device, IRQ_TYPE_LEGACY, IRQ_OTHER}, + { "PNP[0-9a-f]{4}", {NULL} ,check_platform_device, IRQ_TYPE_LEGACY, IRQ_OTHER}, + { ".*", {NULL}, NULL, IRQ_TYPE_LEGACY, IRQ_OTHER}, +@@ -155,6 +157,8 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) + int is_xen_dyn = 0; + #ifdef AARCH64 + char *tmp = NULL; ++ int irq_fullname_valid = 1; ++ char irq_fullname[PATH_MAX] = {0}; + #endif + + irq_name = strtok_r(savedline, " ", &savedptr); +@@ -166,6 +170,16 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) + if (strstr(irq_name, "xen-dyn") != NULL) + is_xen_dyn = 1; + last_token = p; ++ ++#ifdef AARCH64 ++ /* ++ * /proc/interrupts format defined, after of interrupt type ++ * the reset string is mark the irq desc name. ++ */ ++ if (strncmp(irq_name, "Level", strlen("Level")) == 0 || ++ strncmp(irq_name, "Edge", strlen("Edge")) == 0) ++ break; ++#endif + } + + #ifdef AARCH64 +@@ -173,6 +187,17 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) + tmp = strchr(irq_name, '\n'); + if (tmp) + *tmp = 0; ++ ++ if (strlen(irq_name) + strlen(savedptr) + 1 < PATH_MAX) { ++ strcat(irq_fullname, irq_name); ++ strcat(irq_fullname, " "); ++ strcat(irq_fullname, savedptr); ++ tmp = strchr(irq_fullname, '\n'); ++ if (tmp) ++ *tmp = 0; ++ } else { ++ irq_fullname_valid = 0; ++ } + #endif + irq_mod = last_token; + info->irq = irq; +@@ -182,7 +207,13 @@ void init_irq_class_and_type(char *savedline, struct irq_info *info, int irq) + info->class = IRQ_VIRT_EVENT; + } else { + #ifdef AARCH64 +- guess_arm_irq_hints(irq_name, info); ++ if (irq_fullname_valid) { ++ irq_name = irq_fullname; ++ guess_arm_irq_hints(irq_name, info); ++ } else { ++ info->type = IRQ_TYPE_LEGACY; ++ info->class = IRQ_OTHER; ++ } + #else + info->type = IRQ_TYPE_LEGACY; + info->class = IRQ_OTHER; +-- +2.23.0 + diff --git a/feature-add-ability-to-set-hintpolicy-during-runtime.patch b/feature-add-ability-to-set-hintpolicy-during-runtime.patch new file mode 100644 index 0000000000000000000000000000000000000000..318e12e03ce2a978888a154953a7b191890b673b --- /dev/null +++ b/feature-add-ability-to-set-hintpolicy-during-runtime.patch @@ -0,0 +1,34 @@ +From 7db6af3a25c9742febce616081a723e1c92889d1 Mon Sep 17 00:00:00 2001 +From: BiaoXiang Ye +Date: Wed, 1 Jul 2020 12:05:33 +0800 +Subject: [PATCH] feature: add ability to set hintpolicy during runtime + +irqbalance adds default config --hintpolicy=subset, so we need provide the ability to set +hintpolicy back to ignore during runtime. +--- + irqbalance.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/irqbalance.c b/irqbalance.c +index 859fd6a..ffbb191 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -538,6 +538,15 @@ gboolean sock_handle(gint fd, GIOCondition condition, gpointer user_data __attri + cpu_ban_string = NULL; + } + need_rescan = 1; ++ } else if (!(strncmp(buff + strlen("settings "), "hintpolicy ", ++ strlen("hintpolicy ")))) { ++ if (!(strncmp(buff + strlen("settings hintpolicy "), "ignore", ++ strlen("ignore")))) { ++ hint_enabled = 0; ++ } else if (!(strncmp(buff + strlen("settings hintpolicy "), ++ "subset", strlen("subset")))) { ++ hint_enabled = 1; ++ } + } + } + if (!strncmp(buff, "setup", strlen("setup"))) { +-- +2.23.0 + diff --git a/feature-add-new-irq-migrate-rule-to-avoid-high-cpu-i.patch b/feature-add-new-irq-migrate-rule-to-avoid-high-cpu-i.patch new file mode 100644 index 0000000000000000000000000000000000000000..ae402424af1e281a4872cd8b4b5f88a98ab87813 --- /dev/null +++ b/feature-add-new-irq-migrate-rule-to-avoid-high-cpu-i.patch @@ -0,0 +1,89 @@ +From 84a2df1c9962a87f55e1c0d3bd2118fd754a4b48 Mon Sep 17 00:00:00 2001 +From: hejingxian +Date: Fri, 3 Jan 2020 16:43:28 +0800 +Subject: [PATCH] feature: add new irq migrate rule to avoid high cpu irq load + +By the old irq migrate rule, the irqs cannot be moved if the adjustment_load will become smaller then +the min_load after moving irq. However, we can accept that the delta load become smaller after moving irq. +--- + irqbalance.c | 8 +++++++- + irqbalance.h | 1 + + irqlist.c | 3 ++- + 3 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/irqbalance.c b/irqbalance.c +index 9449e40..82ac3ea 100644 +--- a/irqbalance.c ++++ b/irqbalance.c +@@ -72,6 +72,7 @@ GMainLoop *main_loop; + char *cpu_ban_string = NULL; + char *banned_cpumask_from_ui = NULL; + unsigned long migrate_ratio = 0; ++unsigned long load_limit = 0; + + static void sleep_approx(int seconds) + { +@@ -106,6 +107,7 @@ struct option lopts[] = { + {"hintpolicy", 1, NULL, 'h'}, + {"verifyhint", 1, NULL, 'v'}, + {"notclearhint", 0, NULL, 'n'}, ++ {"loadlimit", 1, NULL, 'g'}, + {0, 0, 0, 0} + }; + +@@ -115,6 +117,7 @@ static void usage(void) + log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p | ] [--banirq= | -i ] [--banmod= | -m ] [--policyscript= | -l