!82 irqbalance: upgrade irqbalance to v1.9.2
From: @chinyu0704 Reviewed-by: @SuperSix173 Signed-off-by: @SuperSix173
This commit is contained in:
commit
d4db1b17a7
@ -1,31 +0,0 @@
|
|||||||
From 522883505d3b02e3294f045f49007b61c00e2c31 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chao Liu <liuchao173@huawei.com>
|
|
||||||
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 <liuchao173@huawei.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
||||||
@ -1,76 +0,0 @@
|
|||||||
From bbcd9a42c3cec0935b960b7f2046f1fdfab4f7ef Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vignesh Raghavendra <vigneshr@ti.com>
|
|
||||||
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 <vigneshr@ti.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
From 028082a6a1ff650d5cdf796ac55ac26a3874372a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Liu Chao <liuchao173@huawei.com>
|
|
||||||
Date: Sat, 25 Jun 2022 14:13:10 +0800
|
|
||||||
Subject: [PATCH] add keep_going check to prevent irqbalance from failing to
|
|
||||||
exit after SIGTERM
|
|
||||||
|
|
||||||
Signed-off-by: Liu Chao <liuchao173@huawei.com>
|
|
||||||
---
|
|
||||||
irqbalance.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/irqbalance.c b/irqbalance.c
|
|
||||||
index c520c11..5eae5b6 100644
|
|
||||||
--- a/irqbalance.c
|
|
||||||
+++ b/irqbalance.c
|
|
||||||
@@ -290,7 +290,7 @@ gboolean scan(gpointer data __attribute__((unused)))
|
|
||||||
|
|
||||||
|
|
||||||
/* cope with cpu hotplug -- detected during /proc/interrupts parsing */
|
|
||||||
- while (need_rescan || need_rebuild) {
|
|
||||||
+ while (keep_going && (need_rescan || need_rebuild)) {
|
|
||||||
int try_times = 0;
|
|
||||||
|
|
||||||
need_rescan = 0;
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
@ -1,25 +0,0 @@
|
|||||||
From 0a82dddbaf5702caded0d0d83a6eafaca743254d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Andreas Schwab <schwab@suse.de>
|
|
||||||
Date: Mon, 27 Jun 2022 13:43:04 +0200
|
|
||||||
Subject: [PATCH] parse_proc_interrupts: fix parsing interrupt counts
|
|
||||||
|
|
||||||
The name of an interrupt chip can start with a number, stop before it.
|
|
||||||
---
|
|
||||||
procinterrupts.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/procinterrupts.c b/procinterrupts.c
|
|
||||||
index 57c8801..d90bf6d 100644
|
|
||||||
--- a/procinterrupts.c
|
|
||||||
+++ b/procinterrupts.c
|
|
||||||
@@ -331,7 +331,7 @@ void parse_proc_interrupts(void)
|
|
||||||
while (1) {
|
|
||||||
uint64_t C;
|
|
||||||
C = strtoull(c, &c2, 10);
|
|
||||||
- if (c==c2) /* end of numbers */
|
|
||||||
+ if (c==c2 || !strchr(" \t", *c2)) /* end of numbers */
|
|
||||||
break;
|
|
||||||
count += C;
|
|
||||||
c=c2;
|
|
||||||
--
|
|
||||||
2.23.0
|
|
||||||
@ -8,14 +8,14 @@ the min_load after moving irq. However, we can accept that the delta load become
|
|||||||
---
|
---
|
||||||
irqbalance.c | 8 +++++++-
|
irqbalance.c | 8 +++++++-
|
||||||
irqbalance.h | 1 +
|
irqbalance.h | 1 +
|
||||||
irqlist.c | 6 ++++-
|
irqlist.c | 6 +++++-
|
||||||
3 files changed, 10 insertions(+), 2 deletions(-)
|
3 files changed, 13 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
diff --git a/irqbalance.c b/irqbalance.c
|
diff --git a/irqbalance.c b/irqbalance.c
|
||||||
index 9449e40..82ac3ea 100644
|
index de7f4e4..ee2c988 100644
|
||||||
--- a/irqbalance.c
|
--- a/irqbalance.c
|
||||||
+++ b/irqbalance.c
|
+++ b/irqbalance.c
|
||||||
@@ -72,6 +72,7 @@ GMainLoop *main_loop;
|
@@ -71,6 +71,7 @@ GMainLoop *main_loop;
|
||||||
|
|
||||||
char *cpu_ban_string = NULL;
|
char *cpu_ban_string = NULL;
|
||||||
unsigned long migrate_ratio = 0;
|
unsigned long migrate_ratio = 0;
|
||||||
@ -23,8 +23,7 @@ index 9449e40..82ac3ea 100644
|
|||||||
|
|
||||||
#ifdef HAVE_IRQBALANCEUI
|
#ifdef HAVE_IRQBALANCEUI
|
||||||
int socket_fd;
|
int socket_fd;
|
||||||
char socket_name[64];
|
@@ -111,6 +112,7 @@ struct option lopts[] = {
|
||||||
@@ -106,6 +107,7 @@ struct option lopts[] = {
|
|
||||||
{"hintpolicy", 1, NULL, 'h'},
|
{"hintpolicy", 1, NULL, 'h'},
|
||||||
{"verifyhint", 1, NULL, 'v'},
|
{"verifyhint", 1, NULL, 'v'},
|
||||||
{"notclearhint", 0, NULL, 'n'},
|
{"notclearhint", 0, NULL, 'n'},
|
||||||
@ -32,7 +31,7 @@ index 9449e40..82ac3ea 100644
|
|||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -115,6 +117,7 @@ static void usage(void)
|
@@ -120,6 +122,7 @@ static void usage(void)
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--rulesconfig= | -r <config>] [--hintpolicy | -h <subset>] [--verifyhint= | -v n] [--notclearhint | -n]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--rulesconfig= | -r <config>] [--hintpolicy | -h <subset>] [--verifyhint= | -v n] [--notclearhint | -n]\n");
|
||||||
@ -40,8 +39,8 @@ index 9449e40..82ac3ea 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void version(void)
|
static void version(void)
|
||||||
@@ -129,7 +132,7 @@ static void parse_command_line(int argc, char **argv)
|
@@ -135,7 +138,7 @@ static void parse_command_line(int argc, char **argv)
|
||||||
unsigned long val;
|
char *endptr;
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv,
|
while ((opt = getopt_long(argc, argv,
|
||||||
- "odfjVni:p:s:c:l:m:t:e:r:h:v:",
|
- "odfjVni:p:s:c:l:m:t:e:r:h:v:",
|
||||||
@ -49,7 +48,7 @@ index 9449e40..82ac3ea 100644
|
|||||||
lopts, &longind)) != -1) {
|
lopts, &longind)) != -1) {
|
||||||
|
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
@@ -223,6 +226,9 @@ static void parse_command_line(int argc, char **argv)
|
@@ -233,6 +236,9 @@ static void parse_command_line(int argc, char **argv)
|
||||||
case 'n':
|
case 'n':
|
||||||
clear_affinity_hint = 0;
|
clear_affinity_hint = 0;
|
||||||
break;
|
break;
|
||||||
@ -60,7 +59,7 @@ index 9449e40..82ac3ea 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
diff --git a/irqbalance.h b/irqbalance.h
|
diff --git a/irqbalance.h b/irqbalance.h
|
||||||
index 4a73b83..9ff8f37 100644
|
index 710d496..e8f9fba 100644
|
||||||
--- a/irqbalance.h
|
--- a/irqbalance.h
|
||||||
+++ b/irqbalance.h
|
+++ b/irqbalance.h
|
||||||
@@ -83,6 +83,7 @@ extern cpumask_t banned_cpus;
|
@@ -83,6 +83,7 @@ extern cpumask_t banned_cpus;
|
||||||
@ -72,7 +71,7 @@ index 4a73b83..9ff8f37 100644
|
|||||||
/*
|
/*
|
||||||
* Numa node access routines
|
* Numa node access routines
|
||||||
diff --git a/irqlist.c b/irqlist.c
|
diff --git a/irqlist.c b/irqlist.c
|
||||||
index 9ab321a..98a4224 100644
|
index 4dd4a83..be51c0f 100644
|
||||||
--- a/irqlist.c
|
--- a/irqlist.c
|
||||||
+++ b/irqlist.c
|
+++ b/irqlist.c
|
||||||
@@ -97,7 +97,11 @@ static void move_candidate_irqs(struct irq_info *info, void *data)
|
@@ -97,7 +97,11 @@ static void move_candidate_irqs(struct irq_info *info, void *data)
|
||||||
@ -89,5 +88,5 @@ index 9ab321a..98a4224 100644
|
|||||||
lb_info->min_load += info->load;
|
lb_info->min_load += info->load;
|
||||||
if (lb_info->min_load > lb_info->adjustment_load) {
|
if (lb_info->min_load > lb_info->adjustment_load) {
|
||||||
--
|
--
|
||||||
2.23.0
|
2.33.0
|
||||||
|
|
||||||
|
|||||||
@ -8,36 +8,36 @@ Therefore, we introduce a new user irq policy config rule which avoid policy scr
|
|||||||
for every irq.
|
for every irq.
|
||||||
---
|
---
|
||||||
Makefile.am | 2 +-
|
Makefile.am | 2 +-
|
||||||
classify.c | 21 ++++--
|
classify.c | 13 ++-
|
||||||
irqbalance.c | 15 ++++-
|
irqbalance.c | 15 +++-
|
||||||
irqbalance.h | 1 +
|
irqbalance.h | 1 +
|
||||||
placement.c | 3 +-
|
placement.c | 3 +-
|
||||||
rules_config.c | 174 +++++++++++++++++++++++++++++++++++++++++++++++++
|
rules_config.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
rules_config.h | 40 ++++++++++++
|
rules_config.h | 40 +++++++++
|
||||||
7 files changed, 246 insertions(+), 10 deletions(-)
|
7 files changed, 285 insertions(+), 6 deletions(-)
|
||||||
create mode 100644 rules_config.c
|
create mode 100644 rules_config.c
|
||||||
create mode 100644 rules_config.h
|
create mode 100644 rules_config.h
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
diff --git a/Makefile.am b/Makefile.am
|
||||||
index 73988b3..3086d67 100644
|
index 80d8fee..9f2be54 100644
|
||||||
--- a/Makefile.am
|
--- a/Makefile.am
|
||||||
+++ b/Makefile.am
|
+++ b/Makefile.am
|
||||||
@@ -38,7 +38,7 @@ sbin_PROGRAMS += irqbalance-ui
|
@@ -42,7 +42,7 @@ irqbalance_LDFLAGS = -Wl,-Bstatic
|
||||||
endif
|
endif
|
||||||
|
|
||||||
irqbalance_SOURCES = activate.c bitmap.c classify.c cputree.c irqbalance.c \
|
irqbalance_SOURCES = activate.c bitmap.c classify.c cputree.c irqbalance.c \
|
||||||
- irqlist.c numa.c placement.c procinterrupts.c
|
- irqlist.c numa.c placement.c procinterrupts.c
|
||||||
+ irqlist.c numa.c placement.c procinterrupts.c rules_config.c
|
+ irqlist.c numa.c placement.c procinterrupts.c rules_config.c
|
||||||
irqbalance_LDADD = $(LIBCAP_NG_LIBS) $(GLIB2_LIBS) $(NUMA_LIBS)
|
if THERMAL
|
||||||
if IRQBALANCEUI
|
irqbalance_SOURCES += thermal.c
|
||||||
irqbalance_ui_SOURCES = $(UI_DIR)/helpers.c $(UI_DIR)/irqbalance-ui.c \
|
endif
|
||||||
diff --git a/classify.c b/classify.c
|
diff --git a/classify.c b/classify.c
|
||||||
index 74103bf..254197e 100644
|
index 4ea4b44..0bbe608 100644
|
||||||
--- a/classify.c
|
--- a/classify.c
|
||||||
+++ b/classify.c
|
+++ b/classify.c
|
||||||
@@ -625,12 +625,20 @@ static void add_new_irq(char *path, struct irq_info *hint, GList *proc_interrupt
|
@@ -627,12 +627,20 @@ static void add_new_irq(char *path, struct irq_info *hint)
|
||||||
return;
|
}
|
||||||
|
}
|
||||||
/* Set NULL devpath for the irq has no sysfs entries */
|
/* Set NULL devpath for the irq has no sysfs entries */
|
||||||
- get_irq_user_policy(path, irq, &pol);
|
- get_irq_user_policy(path, irq, &pol);
|
||||||
+ if (user_policy_list == NULL) {
|
+ if (user_policy_list == NULL) {
|
||||||
@ -45,44 +45,32 @@ index 74103bf..254197e 100644
|
|||||||
+ } else {
|
+ } else {
|
||||||
+ memset(&pol, -1, sizeof(struct user_irq_policy));
|
+ memset(&pol, -1, sizeof(struct user_irq_policy));
|
||||||
+ }
|
+ }
|
||||||
if ((pol.ban == 1) || check_for_irq_ban(irq, proc_interrupts)) { /*FIXME*/
|
if ((pol.ban == 1) || check_for_irq_ban(hint, mod)) { /*FIXME*/
|
||||||
__add_banned_irq(irq, &banned_irqs);
|
__add_banned_irq(irq, &banned_irqs);
|
||||||
new = get_irq_info(irq);
|
new = get_irq_info(irq);
|
||||||
- } else
|
- } else
|
||||||
+ } else {
|
+ } else {
|
||||||
new = add_one_irq_to_db(path, hint, &pol);
|
new = add_one_irq_to_db(path, hint, &pol);
|
||||||
+ if ((new != NULL) && (user_policy_list != NULL)) {
|
+ if ((new != NULL) && (user_policy_list != NULL)) {
|
||||||
+ set_usr_irq_policy(hint->name, new);
|
+ set_usr_irq_policy(new);
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
if (!new)
|
if (!new)
|
||||||
log(TO_CONSOLE, LOG_WARNING, "add_new_irq: Failed to add irq %d\n", irq);
|
log(TO_CONSOLE, LOG_WARNING, "add_new_irq: Failed to add irq %d\n", irq);
|
||||||
@@ -781,14 +787,15 @@ int proc_irq_hotplug(char *savedline, int irq, struct irq_info **pinfo)
|
@@ -780,6 +788,7 @@ int proc_irq_hotplug(char *savedline, int irq, struct irq_info **pinfo)
|
||||||
{
|
add_new_irq(NULL, &tmp_info);
|
||||||
struct irq_info tmp_info = {0};
|
|
||||||
|
|
||||||
- /* firstly, init irq info by read device info */
|
|
||||||
+ /* firstly, init irq info by parse savedline */
|
|
||||||
+ init_irq_class_and_type(savedline, &tmp_info, irq);
|
|
||||||
+ /* secondly, 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);
|
*pinfo = get_irq_info(irq);
|
||||||
- }
|
}
|
||||||
+ } else
|
+
|
||||||
+ set_usr_irq_policy(tmp_info.name, *pinfo);
|
|
||||||
if (*pinfo == NULL) {
|
if (*pinfo == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
diff --git a/irqbalance.c b/irqbalance.c
|
diff --git a/irqbalance.c b/irqbalance.c
|
||||||
index 10e2b13..ecc3eca 100644
|
index 2c9e3f3..0749f79 100644
|
||||||
--- a/irqbalance.c
|
--- a/irqbalance.c
|
||||||
+++ b/irqbalance.c
|
+++ b/irqbalance.c
|
||||||
@@ -99,6 +99,7 @@ struct option lopts[] = {
|
@@ -104,6 +104,7 @@ struct option lopts[] = {
|
||||||
{"interval", 1 , NULL, 't'},
|
{"interval", 1 , NULL, 't'},
|
||||||
{"version", 0, NULL, 'V'},
|
{"version", 0, NULL, 'V'},
|
||||||
{"migrateval", 1, NULL, 'e'},
|
{"migrateval", 1, NULL, 'e'},
|
||||||
@ -90,7 +78,7 @@ index 10e2b13..ecc3eca 100644
|
|||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -107,6 +108,7 @@ static void usage(void)
|
@@ -112,6 +113,7 @@ static void usage(void)
|
||||||
log(TO_CONSOLE, LOG_INFO, "irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--journal | -j]\n");
|
log(TO_CONSOLE, LOG_INFO, "irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--journal | -j]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
||||||
@ -98,8 +86,8 @@ index 10e2b13..ecc3eca 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void version(void)
|
static void version(void)
|
||||||
@@ -121,7 +123,7 @@ static void parse_command_line(int argc, char **argv)
|
@@ -127,7 +129,7 @@ static void parse_command_line(int argc, char **argv)
|
||||||
unsigned long val;
|
char *endptr;
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv,
|
while ((opt = getopt_long(argc, argv,
|
||||||
- "odfjVi:p:s:c:l:m:t:e:",
|
- "odfjVi:p:s:c:l:m:t:e:",
|
||||||
@ -107,9 +95,9 @@ index 10e2b13..ecc3eca 100644
|
|||||||
lopts, &longind)) != -1) {
|
lopts, &longind)) != -1) {
|
||||||
|
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
@@ -193,6 +195,9 @@ static void parse_command_line(int argc, char **argv)
|
@@ -203,6 +205,9 @@ static void parse_command_line(int argc, char **argv)
|
||||||
case 'e':
|
exit(1);
|
||||||
migrate_ratio = strtoul(optarg, NULL, 10);
|
}
|
||||||
break;
|
break;
|
||||||
+ case 'r':
|
+ case 'r':
|
||||||
+ rules_config_file = strdup(optarg);
|
+ rules_config_file = strdup(optarg);
|
||||||
@ -117,7 +105,7 @@ index 10e2b13..ecc3eca 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -661,6 +666,14 @@ int main(int argc, char** argv)
|
@@ -670,6 +675,14 @@ int main(int argc, char** argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +121,7 @@ index 10e2b13..ecc3eca 100644
|
|||||||
if (debug_mode)
|
if (debug_mode)
|
||||||
dump_object_tree();
|
dump_object_tree();
|
||||||
diff --git a/irqbalance.h b/irqbalance.h
|
diff --git a/irqbalance.h b/irqbalance.h
|
||||||
index 618f254..78d0adc 100644
|
index e7f6b94..22940b4 100644
|
||||||
--- a/irqbalance.h
|
--- a/irqbalance.h
|
||||||
+++ b/irqbalance.h
|
+++ b/irqbalance.h
|
||||||
@@ -14,6 +14,7 @@
|
@@ -14,6 +14,7 @@
|
||||||
@ -145,7 +133,7 @@ index 618f254..78d0adc 100644
|
|||||||
#ifdef __aarch64__
|
#ifdef __aarch64__
|
||||||
#define AARCH64
|
#define AARCH64
|
||||||
diff --git a/placement.c b/placement.c
|
diff --git a/placement.c b/placement.c
|
||||||
index 17a9f2e..bf27297 100644
|
index 9fde8cb..43ddb81 100644
|
||||||
--- a/placement.c
|
--- a/placement.c
|
||||||
+++ b/placement.c
|
+++ b/placement.c
|
||||||
@@ -52,8 +52,7 @@ static void find_best_object(struct topo_obj *d, void *data)
|
@@ -52,8 +52,7 @@ static void find_best_object(struct topo_obj *d, void *data)
|
||||||
@ -160,10 +148,10 @@ index 17a9f2e..bf27297 100644
|
|||||||
if (d->powersave_mode)
|
if (d->powersave_mode)
|
||||||
diff --git a/rules_config.c b/rules_config.c
|
diff --git a/rules_config.c b/rules_config.c
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..e32a31e
|
index 0000000..0471f30
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/rules_config.c
|
+++ b/rules_config.c
|
||||||
@@ -0,0 +1,174 @@
|
@@ -0,0 +1,217 @@
|
||||||
+/*
|
+/*
|
||||||
+ * Copyright (C) 2019. Huawei Technologies Co., Ltd. All rights reserved.
|
+ * Copyright (C) 2019. Huawei Technologies Co., Ltd. All rights reserved.
|
||||||
+ *
|
+ *
|
||||||
@ -178,6 +166,7 @@ index 0000000..e32a31e
|
|||||||
+ */
|
+ */
|
||||||
+#include <stdio.h>
|
+#include <stdio.h>
|
||||||
+#include <stdlib.h>
|
+#include <stdlib.h>
|
||||||
|
+#include <ctype.h>
|
||||||
+#include "irqbalance.h"
|
+#include "irqbalance.h"
|
||||||
+
|
+
|
||||||
+char *rules_config_file = NULL;
|
+char *rules_config_file = NULL;
|
||||||
@ -192,14 +181,48 @@ index 0000000..e32a31e
|
|||||||
+ user_policy_list = policy;
|
+ user_policy_list = policy;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+USER_IRQ_POLICY *get_usr_irq_policy(char *name)
|
+char *get_irq_line(int irq)
|
||||||
+{
|
+{
|
||||||
+ USER_IRQ_POLICY *p = user_policy_list;
|
+ FILE *file;
|
||||||
+ if (name == NULL) {
|
+ char *line = NULL;
|
||||||
|
+ char *irq_line = NULL;
|
||||||
|
+ size_t size = 0;
|
||||||
|
+ char irq_str[20] = {0};
|
||||||
|
+ char *c = NULL;
|
||||||
|
+
|
||||||
|
+ snprintf(irq_str, 20, "%d:", irq);
|
||||||
|
+
|
||||||
|
+ file = fopen("/proc/interrupts", "r");
|
||||||
|
+ if (getline(&line, &size, file) <= 0) {
|
||||||
|
+ free(line);
|
||||||
|
+ fclose(file);
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+ }
|
+ }
|
||||||
|
+ while (getline(&line, &size, file) > 0) {
|
||||||
|
+ c = line;
|
||||||
|
+ while (isblank(*(c)))
|
||||||
|
+ c++;
|
||||||
|
+ if (!isdigit(*c))
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ if (!strncmp(irq_str, c, strnlen(irq_str, 20))) {
|
||||||
|
+ irq_line = line;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!irq_line)
|
||||||
|
+ free(line);
|
||||||
|
+ fclose(file);
|
||||||
|
+ return irq_line;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+USER_IRQ_POLICY *get_usr_irq_policy(char *irq_line)
|
||||||
|
+{
|
||||||
|
+ USER_IRQ_POLICY *p = user_policy_list;
|
||||||
|
+
|
||||||
+ while (p != NULL) {
|
+ while (p != NULL) {
|
||||||
+ if (strstr(name, p->irq_type) != NULL) {
|
+ if (strstr(irq_line, p->irq_type) != NULL) {
|
||||||
+ return p;
|
+ return p;
|
||||||
+ }
|
+ }
|
||||||
+ p = p->next;
|
+ p = p->next;
|
||||||
@ -207,15 +230,22 @@ index 0000000..e32a31e
|
|||||||
+ return NULL;
|
+ return NULL;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+void set_usr_irq_policy(char *name, struct irq_info *info)
|
+void set_usr_irq_policy(struct irq_info *info)
|
||||||
+{
|
+{
|
||||||
+ USER_IRQ_POLICY *user_policy;
|
+ USER_IRQ_POLICY *user_policy;
|
||||||
|
+ int irq = info->irq;
|
||||||
|
+ char *irq_line = NULL;
|
||||||
+
|
+
|
||||||
+ if (user_policy_list == NULL) {
|
+ if (user_policy_list == NULL) {
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ user_policy = get_usr_irq_policy(name);
|
+ if (irq >= 0)
|
||||||
|
+ irq_line = get_irq_line(irq);
|
||||||
|
+ if (!irq_line)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ user_policy = get_usr_irq_policy(irq_line);
|
||||||
+ if (user_policy != NULL) {
|
+ if (user_policy != NULL) {
|
||||||
+ if (user_policy->numa_node_set) {
|
+ if (user_policy->numa_node_set) {
|
||||||
+ info->numa_node = get_numa_node(user_policy->numa_node);
|
+ info->numa_node = get_numa_node(user_policy->numa_node);
|
||||||
@ -229,6 +259,7 @@ index 0000000..e32a31e
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
+ free(irq_line);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+int read_user_policy_config()
|
+int read_user_policy_config()
|
||||||
@ -340,7 +371,7 @@ index 0000000..e32a31e
|
|||||||
+}
|
+}
|
||||||
diff --git a/rules_config.h b/rules_config.h
|
diff --git a/rules_config.h b/rules_config.h
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
index 0000000..edcac8a
|
index 0000000..42f539d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/rules_config.h
|
+++ b/rules_config.h
|
||||||
@@ -0,0 +1,40 @@
|
@@ -0,0 +1,40 @@
|
||||||
@ -381,9 +412,9 @@ index 0000000..edcac8a
|
|||||||
+
|
+
|
||||||
+int read_user_policy_config();
|
+int read_user_policy_config();
|
||||||
+
|
+
|
||||||
+void set_usr_irq_policy(char *name, struct irq_info *info);
|
+void set_usr_irq_policy(struct irq_info *info);
|
||||||
+
|
+
|
||||||
+#endif
|
+#endif
|
||||||
--
|
--
|
||||||
2.23.0
|
2.33.0
|
||||||
|
|
||||||
|
|||||||
@ -53,7 +53,7 @@ index 3492902..2f895be 100644
|
|||||||
if (hint_has_changed) {
|
if (hint_has_changed) {
|
||||||
hint_has_changed = FALSE;
|
hint_has_changed = FALSE;
|
||||||
diff --git a/irqbalance.c b/irqbalance.c
|
diff --git a/irqbalance.c b/irqbalance.c
|
||||||
index 5985d8d..9449e40 100644
|
index c7a1488..de7f4e4 100644
|
||||||
--- a/irqbalance.c
|
--- a/irqbalance.c
|
||||||
+++ b/irqbalance.c
|
+++ b/irqbalance.c
|
||||||
@@ -54,6 +54,7 @@ int numa_avail;
|
@@ -54,6 +54,7 @@ int numa_avail;
|
||||||
@ -64,7 +64,7 @@ index 5985d8d..9449e40 100644
|
|||||||
unsigned int log_mask = TO_ALL;
|
unsigned int log_mask = TO_ALL;
|
||||||
const char *log_indent;
|
const char *log_indent;
|
||||||
unsigned long power_thresh = ULONG_MAX;
|
unsigned long power_thresh = ULONG_MAX;
|
||||||
@@ -104,6 +105,7 @@ struct option lopts[] = {
|
@@ -109,6 +110,7 @@ struct option lopts[] = {
|
||||||
{"rulesconfig", 1, NULL, 'r'},
|
{"rulesconfig", 1, NULL, 'r'},
|
||||||
{"hintpolicy", 1, NULL, 'h'},
|
{"hintpolicy", 1, NULL, 'h'},
|
||||||
{"verifyhint", 1, NULL, 'v'},
|
{"verifyhint", 1, NULL, 'v'},
|
||||||
@ -72,7 +72,7 @@ index 5985d8d..9449e40 100644
|
|||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -112,7 +114,7 @@ static void usage(void)
|
@@ -117,7 +119,7 @@ static void usage(void)
|
||||||
log(TO_CONSOLE, LOG_INFO, "irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--journal | -j]\n");
|
log(TO_CONSOLE, LOG_INFO, "irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--journal | -j]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
||||||
@ -81,8 +81,8 @@ index 5985d8d..9449e40 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void version(void)
|
static void version(void)
|
||||||
@@ -127,7 +129,7 @@ static void parse_command_line(int argc, char **argv)
|
@@ -133,7 +135,7 @@ static void parse_command_line(int argc, char **argv)
|
||||||
unsigned long val;
|
char *endptr;
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv,
|
while ((opt = getopt_long(argc, argv,
|
||||||
- "odfjVi:p:s:c:l:m:t:e:r:h:v:",
|
- "odfjVi:p:s:c:l:m:t:e:r:h:v:",
|
||||||
@ -90,7 +90,7 @@ index 5985d8d..9449e40 100644
|
|||||||
lopts, &longind)) != -1) {
|
lopts, &longind)) != -1) {
|
||||||
|
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
@@ -218,6 +220,9 @@ static void parse_command_line(int argc, char **argv)
|
@@ -228,6 +230,9 @@ static void parse_command_line(int argc, char **argv)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -101,5 +101,5 @@ index 5985d8d..9449e40 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
--
|
--
|
||||||
2.23.0
|
2.33.0
|
||||||
|
|
||||||
|
|||||||
@ -8,11 +8,11 @@ introduce the periodically affinity hint verify.
|
|||||||
---
|
---
|
||||||
Makefile.am | 2 +-
|
Makefile.am | 2 +-
|
||||||
activate.c | 14 ++++--
|
activate.c | 14 ++++--
|
||||||
classify.c | 5 ++-
|
classify.c | 5 +-
|
||||||
cpumask.h | 7 +++
|
cpumask.h | 7 +++
|
||||||
hint_verify.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
hint_verify.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
hint_verify.h | 21 ++++++++
|
hint_verify.h | 21 ++++++++
|
||||||
irqbalance.c | 43 ++++++++++-----
|
irqbalance.c | 43 +++++++++++-----
|
||||||
irqbalance.h | 5 ++
|
irqbalance.h | 5 ++
|
||||||
placement.c | 14 ++++++
|
placement.c | 14 ++++++
|
||||||
types.h | 1 +
|
types.h | 1 +
|
||||||
@ -21,23 +21,23 @@ introduce the periodically affinity hint verify.
|
|||||||
create mode 100644 hint_verify.h
|
create mode 100644 hint_verify.h
|
||||||
|
|
||||||
diff --git a/Makefile.am b/Makefile.am
|
diff --git a/Makefile.am b/Makefile.am
|
||||||
index 3086d67..aacb399 100644
|
index 9f2be54..bc6be1d 100644
|
||||||
--- a/Makefile.am
|
--- a/Makefile.am
|
||||||
+++ b/Makefile.am
|
+++ b/Makefile.am
|
||||||
@@ -38,7 +38,7 @@ sbin_PROGRAMS += irqbalance-ui
|
@@ -42,7 +42,7 @@ irqbalance_LDFLAGS = -Wl,-Bstatic
|
||||||
endif
|
endif
|
||||||
|
|
||||||
irqbalance_SOURCES = activate.c bitmap.c classify.c cputree.c irqbalance.c \
|
irqbalance_SOURCES = activate.c bitmap.c classify.c cputree.c irqbalance.c \
|
||||||
- irqlist.c numa.c placement.c procinterrupts.c rules_config.c
|
- irqlist.c numa.c placement.c procinterrupts.c rules_config.c
|
||||||
+ irqlist.c numa.c placement.c procinterrupts.c rules_config.c hint_verify.c
|
+ irqlist.c numa.c placement.c procinterrupts.c rules_config.c hint_verify.c
|
||||||
irqbalance_LDADD = $(LIBCAP_NG_LIBS) $(GLIB2_LIBS) $(NUMA_LIBS)
|
if THERMAL
|
||||||
if IRQBALANCEUI
|
irqbalance_SOURCES += thermal.c
|
||||||
irqbalance_ui_SOURCES = $(UI_DIR)/helpers.c $(UI_DIR)/irqbalance-ui.c \
|
endif
|
||||||
diff --git a/activate.c b/activate.c
|
diff --git a/activate.c b/activate.c
|
||||||
index 93fde58..c5859bf 100644
|
index 62cfd08..774a3b2 100644
|
||||||
--- a/activate.c
|
--- a/activate.c
|
||||||
+++ b/activate.c
|
+++ b/activate.c
|
||||||
@@ -78,11 +78,6 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
@@ -51,11 +51,6 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
cpumask_t applied_mask;
|
cpumask_t applied_mask;
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ index 93fde58..c5859bf 100644
|
|||||||
|
|
||||||
if (!info->assigned_obj)
|
if (!info->assigned_obj)
|
||||||
return;
|
return;
|
||||||
@@ -90,6 +85,15 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
@@ -63,6 +58,15 @@ static void activate_mapping(struct irq_info *info, void *data __attribute__((un
|
||||||
/* activate only online cpus, otherwise writing to procfs returns EOVERFLOW */
|
/* activate only online cpus, otherwise writing to procfs returns EOVERFLOW */
|
||||||
cpus_and(applied_mask, cpu_online_map, info->assigned_obj->mask);
|
cpus_and(applied_mask, cpu_online_map, info->assigned_obj->mask);
|
||||||
|
|
||||||
@ -66,10 +66,10 @@ index 93fde58..c5859bf 100644
|
|||||||
* Don't activate anything for which we have an invalid mask
|
* Don't activate anything for which we have an invalid mask
|
||||||
*/
|
*/
|
||||||
diff --git a/classify.c b/classify.c
|
diff --git a/classify.c b/classify.c
|
||||||
index 254197e..e9987ee 100644
|
index 77f4e3f..68a56f7 100644
|
||||||
--- a/classify.c
|
--- a/classify.c
|
||||||
+++ b/classify.c
|
+++ b/classify.c
|
||||||
@@ -263,7 +263,7 @@ static int get_irq_class(const char *devpath)
|
@@ -249,7 +249,7 @@ static int get_irq_class(const char *devpath)
|
||||||
return irq_class;
|
return irq_class;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ index 254197e..e9987ee 100644
|
|||||||
{
|
{
|
||||||
const struct irq_info *ai = a;
|
const struct irq_info *ai = a;
|
||||||
const struct irq_info *bi = b;
|
const struct irq_info *bi = b;
|
||||||
@@ -397,6 +397,9 @@ get_numa_node:
|
@@ -388,6 +388,9 @@ get_numa_node:
|
||||||
process_one_line(path, get_mask_from_bitmap, &new->cpumask);
|
process_one_line(path, get_mask_from_bitmap, &new->cpumask);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,7 +89,7 @@ index 254197e..e9987ee 100644
|
|||||||
return new;
|
return new;
|
||||||
}
|
}
|
||||||
diff --git a/cpumask.h b/cpumask.h
|
diff --git a/cpumask.h b/cpumask.h
|
||||||
index 5bebbeb..bc5f006 100644
|
index 2ec3f79..e0f0d58 100644
|
||||||
--- a/cpumask.h
|
--- a/cpumask.h
|
||||||
+++ b/cpumask.h
|
+++ b/cpumask.h
|
||||||
@@ -30,6 +30,7 @@
|
@@ -30,6 +30,7 @@
|
||||||
@ -100,7 +100,7 @@ index 5bebbeb..bc5f006 100644
|
|||||||
*
|
*
|
||||||
* int cpus_equal(mask1, mask2) Does mask1 == mask2?
|
* int cpus_equal(mask1, mask2) Does mask1 == mask2?
|
||||||
* int cpus_intersects(mask1, mask2) Do mask1 and mask2 intersect?
|
* int cpus_intersects(mask1, mask2) Do mask1 and mask2 intersect?
|
||||||
@@ -142,6 +143,12 @@ static inline void __cpus_complement(cpumask_t *dstp,
|
@@ -143,6 +144,12 @@ static inline void __cpus_complement(cpumask_t *dstp,
|
||||||
bitmap_complement(dstp->bits, srcp->bits, nbits);
|
bitmap_complement(dstp->bits, srcp->bits, nbits);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -283,7 +283,7 @@ index 0000000..7391b32
|
|||||||
+
|
+
|
||||||
+#endif
|
+#endif
|
||||||
diff --git a/irqbalance.c b/irqbalance.c
|
diff --git a/irqbalance.c b/irqbalance.c
|
||||||
index 450a1ff..5985d8d 100644
|
index e2a59f5..c7a1488 100644
|
||||||
--- a/irqbalance.c
|
--- a/irqbalance.c
|
||||||
+++ b/irqbalance.c
|
+++ b/irqbalance.c
|
||||||
@@ -64,6 +64,8 @@ char *polscript = NULL;
|
@@ -64,6 +64,8 @@ char *polscript = NULL;
|
||||||
@ -295,7 +295,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
GMainLoop *main_loop;
|
GMainLoop *main_loop;
|
||||||
|
|
||||||
char *cpu_ban_string = NULL;
|
char *cpu_ban_string = NULL;
|
||||||
@@ -100,6 +102,8 @@ struct option lopts[] = {
|
@@ -105,6 +107,8 @@ struct option lopts[] = {
|
||||||
{"version", 0, NULL, 'V'},
|
{"version", 0, NULL, 'V'},
|
||||||
{"migrateval", 1, NULL, 'e'},
|
{"migrateval", 1, NULL, 'e'},
|
||||||
{"rulesconfig", 1, NULL, 'r'},
|
{"rulesconfig", 1, NULL, 'r'},
|
||||||
@ -304,7 +304,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -108,7 +112,7 @@ static void usage(void)
|
@@ -113,7 +117,7 @@ static void usage(void)
|
||||||
log(TO_CONSOLE, LOG_INFO, "irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--journal | -j]\n");
|
log(TO_CONSOLE, LOG_INFO, "irqbalance [--oneshot | -o] [--debug | -d] [--foreground | -f] [--journal | -j]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--powerthresh= | -p <off> | <n>] [--banirq= | -i <n>] [--banmod= | -m <module>] [--policyscript= | -l <script>]\n");
|
||||||
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
log(TO_CONSOLE, LOG_INFO, " [--pid= | -s <file>] [--deepestcache= | -c <n>] [--interval= | -t <n>] [--migrateval= | -e <n>]\n");
|
||||||
@ -313,8 +313,8 @@ index 450a1ff..5985d8d 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void version(void)
|
static void version(void)
|
||||||
@@ -123,7 +127,7 @@ static void parse_command_line(int argc, char **argv)
|
@@ -129,7 +133,7 @@ static void parse_command_line(int argc, char **argv)
|
||||||
unsigned long val;
|
char *endptr;
|
||||||
|
|
||||||
while ((opt = getopt_long(argc, argv,
|
while ((opt = getopt_long(argc, argv,
|
||||||
- "odfjVi:p:s:c:l:m:t:e:r:",
|
- "odfjVi:p:s:c:l:m:t:e:r:",
|
||||||
@ -322,7 +322,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
lopts, &longind)) != -1) {
|
lopts, &longind)) != -1) {
|
||||||
|
|
||||||
switch(opt) {
|
switch(opt) {
|
||||||
@@ -198,6 +202,22 @@ static void parse_command_line(int argc, char **argv)
|
@@ -208,6 +212,22 @@ static void parse_command_line(int argc, char **argv)
|
||||||
case 'r':
|
case 'r':
|
||||||
rules_config_file = strdup(optarg);
|
rules_config_file = strdup(optarg);
|
||||||
break;
|
break;
|
||||||
@ -345,7 +345,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -261,6 +283,10 @@ void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused)))
|
@@ -270,6 +290,10 @@ void force_rebalance_irq(struct irq_info *info, void *data __attribute__((unused
|
||||||
if (info->level == BALANCE_NONE)
|
if (info->level == BALANCE_NONE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -356,7 +356,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
if (info->assigned_obj == NULL)
|
if (info->assigned_obj == NULL)
|
||||||
rebalance_irq_list = g_list_append(rebalance_irq_list, info);
|
rebalance_irq_list = g_list_append(rebalance_irq_list, info);
|
||||||
else
|
else
|
||||||
@@ -275,7 +299,7 @@ static int check_debug()
|
@@ -301,7 +325,7 @@ static int check_debug()
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,7 +365,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
{
|
{
|
||||||
log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n");
|
log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n");
|
||||||
clear_work_stats();
|
clear_work_stats();
|
||||||
@@ -325,17 +349,9 @@ out:
|
@@ -351,17 +375,9 @@ out:
|
||||||
keep_going = 0;
|
keep_going = 0;
|
||||||
cycle_count++;
|
cycle_count++;
|
||||||
|
|
||||||
@ -383,10 +383,10 @@ index 450a1ff..5985d8d 100644
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -720,9 +736,10 @@ int main(int argc, char** argv)
|
@@ -733,9 +749,10 @@ int main(int argc, char** argv)
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
if (init_thermal())
|
||||||
|
log(TO_ALL, LOG_WARNING, "Failed to initialize thermal events.\n");
|
||||||
+ update_interval_and_count();
|
+ update_interval_and_count();
|
||||||
main_loop = g_main_loop_new(NULL, FALSE);
|
main_loop = g_main_loop_new(NULL, FALSE);
|
||||||
- last_interval = sleep_interval;
|
- last_interval = sleep_interval;
|
||||||
@ -397,7 +397,7 @@ index 450a1ff..5985d8d 100644
|
|||||||
|
|
||||||
g_main_loop_quit(main_loop);
|
g_main_loop_quit(main_loop);
|
||||||
diff --git a/irqbalance.h b/irqbalance.h
|
diff --git a/irqbalance.h b/irqbalance.h
|
||||||
index 78d0adc..4a73b83 100644
|
index 22940b4..710d496 100644
|
||||||
--- a/irqbalance.h
|
--- a/irqbalance.h
|
||||||
+++ b/irqbalance.h
|
+++ b/irqbalance.h
|
||||||
@@ -15,6 +15,7 @@
|
@@ -15,6 +15,7 @@
|
||||||
@ -408,7 +408,7 @@ index 78d0adc..4a73b83 100644
|
|||||||
|
|
||||||
#ifdef __aarch64__
|
#ifdef __aarch64__
|
||||||
#define AARCH64
|
#define AARCH64
|
||||||
@@ -114,6 +115,10 @@ extern void add_banned_irq(int irq);
|
@@ -112,6 +113,10 @@ extern void free_cl_opts(void);
|
||||||
extern void add_cl_banned_module(char *modname);
|
extern void add_cl_banned_module(char *modname);
|
||||||
extern void add_banned_irq(int irq);
|
extern void add_banned_irq(int irq);
|
||||||
extern void remove_one_irq_from_db(int irq);
|
extern void remove_one_irq_from_db(int irq);
|
||||||
@ -420,7 +420,7 @@ index 78d0adc..4a73b83 100644
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/placement.c b/placement.c
|
diff --git a/placement.c b/placement.c
|
||||||
index bf27297..db79b8b 100644
|
index 43ddb81..9414ed9 100644
|
||||||
--- a/placement.c
|
--- a/placement.c
|
||||||
+++ b/placement.c
|
+++ b/placement.c
|
||||||
@@ -41,6 +41,7 @@ static void find_best_object(struct topo_obj *d, void *data)
|
@@ -41,6 +41,7 @@ static void find_best_object(struct topo_obj *d, void *data)
|
||||||
@ -452,10 +452,10 @@ index bf27297..db79b8b 100644
|
|||||||
if (newload < best->best_cost) {
|
if (newload < best->best_cost) {
|
||||||
best->best = d;
|
best->best = d;
|
||||||
diff --git a/types.h b/types.h
|
diff --git a/types.h b/types.h
|
||||||
index fa91561..3a04318 100644
|
index 9693cf4..62cc2bb 100644
|
||||||
--- a/types.h
|
--- a/types.h
|
||||||
+++ b/types.h
|
+++ b/types.h
|
||||||
@@ -67,6 +67,7 @@ struct irq_info {
|
@@ -66,6 +66,7 @@ struct irq_info {
|
||||||
int flags;
|
int flags;
|
||||||
struct topo_obj *numa_node;
|
struct topo_obj *numa_node;
|
||||||
cpumask_t cpumask;
|
cpumask_t cpumask;
|
||||||
@ -464,5 +464,5 @@ index fa91561..3a04318 100644
|
|||||||
uint64_t last_irq_count;
|
uint64_t last_irq_count;
|
||||||
uint64_t load;
|
uint64_t load;
|
||||||
--
|
--
|
||||||
2.23.0
|
2.33.0
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
BIN
irqbalance-1.9.2.tar.gz
Normal file
BIN
irqbalance-1.9.2.tar.gz
Normal file
Binary file not shown.
@ -1,7 +1,7 @@
|
|||||||
Summary: A dynamic adaptive IRQ balancing daemon
|
Summary: A dynamic adaptive IRQ balancing daemon
|
||||||
Name: irqbalance
|
Name: irqbalance
|
||||||
Version: 1.9.0
|
Version: 1.9.2
|
||||||
Release: 3
|
Release: 1
|
||||||
Epoch: 3
|
Epoch: 3
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz
|
Source0: https://github.com/Irqbalance/irqbalance/archive/v%{version}.tar.gz#/irqbalance-%{version}.tar.gz
|
||||||
@ -23,9 +23,6 @@ Requires: numactl-libs
|
|||||||
|
|
||||||
%define _hardened_build 1
|
%define _hardened_build 1
|
||||||
|
|
||||||
Patch6000: bugfix-parse_proc_interrupts-fix-parsing-interrupt-counts.patch
|
|
||||||
Patch6001: bugfix-add-keep_going-check-to-prevent-irqbalance-from-failing-to-exit-after-SIGTERM.patch
|
|
||||||
|
|
||||||
Patch9000: feature-aarch64-add-the-regular-to-get-the-correct-i.patch
|
Patch9000: feature-aarch64-add-the-regular-to-get-the-correct-i.patch
|
||||||
Patch9001: feature-add-new-user-irq-policy-config-rule.patch
|
Patch9001: feature-add-new-user-irq-policy-config-rule.patch
|
||||||
Patch9002: feature-add-the-switch-of-printing-log.patch
|
Patch9002: feature-add-the-switch-of-printing-log.patch
|
||||||
@ -35,9 +32,6 @@ Patch9005: feature-add-new-irq-migrate-rule-to-avoid-high-cpu-i.patch
|
|||||||
Patch9006: feature-enable-irqbalance-to-link-with-multiple-clie.patch
|
Patch9006: feature-enable-irqbalance-to-link-with-multiple-clie.patch
|
||||||
Patch9007: feature-add-ability-to-set-hintpolicy-during-runtime.patch
|
Patch9007: feature-add-ability-to-set-hintpolicy-during-runtime.patch
|
||||||
Patch9008: feature-encapsulate-and-compile-the-functions-in-irqbalance-ui.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
|
%description
|
||||||
Irqbalance is a daemon to help balance the cpu load generated by
|
Irqbalance is a daemon to help balance the cpu load generated by
|
||||||
@ -124,6 +118,12 @@ fi
|
|||||||
/sbin/chkconfig --del %{name} >/dev/null 2>&1 || :
|
/sbin/chkconfig --del %{name} >/dev/null 2>&1 || :
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jan 31 2023 qinyu <qinyu32@huawei.com> - 3:1.9.2-1
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:restart
|
||||||
|
- DESC: upgrade irqbalance to v1.9.2
|
||||||
|
|
||||||
* Thu Dec 8 2022 qinyu <qinyu32@huawei.com> - 3:1.9.0-3
|
* Thu Dec 8 2022 qinyu <qinyu32@huawei.com> - 3:1.9.0-3
|
||||||
- Type:bugfix
|
- Type:bugfix
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user