From f04d6488c12e215e2302b44c77bf66fce4950aef Mon Sep 17 00:00:00 2001 From: liuchao 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 --- 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