irqbalance/bugfix-fix-sleep-interval-when-sleep_interval-is-changed-by.patch
2019-12-25 22:08:07 +08:00

80 lines
2.6 KiB
Diff

From f04d6488c12e215e2302b44c77bf66fce4950aef Mon Sep 17 00:00:00 2001
From: liuchao <liuchao173@huawei.com>
Date: Thu, 5 Dec 2019 15:28:14 +0800
Subject: [PATCH] fix sleep interval when sleep_interval is changed by
socket
currently, in scan, irqbalance compare sleep_interval's address to decide if sleep_interval is changed, accutually this judgement is always false now.
Signed-off-by: liuchao <liuchao173@huawei.com>
---
hint_verify.c | 10 ++++++----
irqbalance.c | 5 +++--
2 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/hint_verify.c b/hint_verify.c
index b3175ae..0718078 100644
--- a/hint_verify.c
+++ b/hint_verify.c
@@ -15,6 +15,7 @@
extern int keep_going;
extern GMainLoop *main_loop;
extern gboolean scan();
+extern int last_interval;
int real_sleep_interval;
int sleep_interval_count;
diff --git a/hint_verify.c b/hint_verify.c
index b3175ae..4258557 100644
--- a/hint_verify.c
+++ b/hint_verify.c
@@ -84,7 +84,7 @@ void update_affinity_hint(struct irq_info *info, void *data __attribute__((unuse
* 1. scan opration for irq balancing;
* 2. poll irq affinity hint changes for quickly applying them.
*/
-gboolean poll_hint_affinity_and_scan(gpointer data)
+gboolean poll_hint_affinity_and_scan(gpointer data __attribute__((unused)))
{
gboolean need_verify_flag = FALSE;
gboolean need_scan_flag = FALSE;
@@ -118,9 +118,10 @@ gboolean poll_hint_affinity_and_scan(gpointer data)
}
}
- if (data != &real_sleep_interval) {
- data = &real_sleep_interval;
- g_timeout_add_seconds(real_sleep_interval, poll_hint_affinity_and_scan, data);
+ update_interval_and_count();
+ if (last_interval != real_sleep_interval) {
+ last_interval = real_sleep_interval;
+ g_timeout_add_seconds(real_sleep_interval, poll_hint_affinity_and_scan, NULL);
return FALSE;
}
diff --git a/irqbalance.c b/irqbalance.c
index 3fc00db..05eaa29 100644
--- a/irqbalance.c
+++ b/irqbalance.c
@@ -67,6 +67,7 @@ long HZ;
int sleep_interval = SLEEP_INTERVAL;
int hint_enabled = 0;
int poll_hint_interval = SLEEP_INTERVAL / 5;
+int last_interval;
GMainLoop *main_loop;
char *banned_cpumask_from_ui = NULL;
@@ -641,8 +642,8 @@ int main(int argc, char** argv)
log(TO_ALL, LOG_INFO, "irqbalance start scan.\n");
update_interval_and_count();
main_loop = g_main_loop_new(NULL, FALSE);
- int *last_interval = &real_sleep_interval;
- g_timeout_add_seconds(real_sleep_interval, poll_hint_affinity_and_scan, last_interval);
+ last_interval = real_sleep_interval;
+ g_timeout_add_seconds(real_sleep_interval, poll_hint_affinity_and_scan, NULL);
g_main_loop_run(main_loop);
g_main_loop_quit(main_loop);
--
2.19.1