From a699cd93698bca8a94cde07a69571b741a730593 Mon Sep 17 00:00:00 2001 From: Pavankumar Kondeti Date: Thu, 28 Jan 2021 09:22:13 +0530 Subject: [PATCH] sched/walt: Improve the scheduler This change is for general scheduler improvement. Change-Id: I8f521dfd31ff1c8cc1f16805e4e0ac78228d9383 Signed-off-by: Pavankumar Kondeti --- kernel/sched/walt/sysctl.c | 8 ++++++-- kernel/sched/walt/walt.h | 5 ++++- kernel/sched/walt/walt_cfs.c | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/kernel/sched/walt/sysctl.c b/kernel/sched/walt/sysctl.c index 6dd40e05cf13..ded371ed3702 100644 --- a/kernel/sched/walt/sysctl.c +++ b/kernel/sched/walt/sysctl.c @@ -262,7 +262,8 @@ static int sched_task_handler(struct ctl_table *table, int write, 1000000UL); break; case LOW_LATENCY: - pid_and_val[1] = wts->low_latency; + pid_and_val[1] = wts->low_latency & + WALT_LOW_LATENCY_PROCFS; break; default: ret = -EINVAL; @@ -323,7 +324,10 @@ static int sched_task_handler(struct ctl_table *table, int write, wts->boost_expires = sched_clock() + wts->boost_period; break; case LOW_LATENCY: - wts->low_latency = val; + if (val) + wts->low_latency |= WALT_LOW_LATENCY_PROCFS; + else + wts->low_latency &= ~WALT_LOW_LATENCY_PROCFS; break; default: ret = -EINVAL; diff --git a/kernel/sched/walt/walt.h b/kernel/sched/walt/walt.h index be4ce71fbf0a..f551ef30083b 100644 --- a/kernel/sched/walt/walt.h +++ b/kernel/sched/walt/walt.h @@ -69,6 +69,9 @@ enum task_boost_type { #define RAVG_HIST_SIZE_MAX 5 #define NUM_BUSY_BUCKETS 10 +#define WALT_LOW_LATENCY_PROCFS BIT(0) +#define WALT_LOW_LATENCY_BINDER BIT(1) + struct walt_task_struct { /* * 'mark_start' marks the beginning of an event (task waking up, task @@ -120,7 +123,7 @@ struct walt_task_struct { bool wake_up_idle; bool misfit; bool rtg_high_prio; - bool low_latency; + u8 low_latency; u64 boost_period; u64 boost_expires; u64 last_sleep_ts; diff --git a/kernel/sched/walt/walt_cfs.c b/kernel/sched/walt/walt_cfs.c index 6c2c6415e444..9dbc9249ecfc 100644 --- a/kernel/sched/walt/walt_cfs.c +++ b/kernel/sched/walt/walt_cfs.c @@ -784,7 +784,7 @@ static void walt_binder_low_latency_set(void *unused, struct task_struct *task) if (task && current->signal && (current->signal->oom_score_adj == 0) && (current->prio < DEFAULT_PRIO)) - wts->low_latency = true; + wts->low_latency |= WALT_LOW_LATENCY_BINDER; } static void walt_binder_low_latency_clear(void *unused, struct binder_transaction *t) @@ -793,8 +793,8 @@ static void walt_binder_low_latency_clear(void *unused, struct binder_transactio if (static_branch_unlikely(&walt_disabled)) return; - if (wts->low_latency) - wts->low_latency = false; + if (wts->low_latency & WALT_LOW_LATENCY_BINDER) + wts->low_latency &= ~WALT_LOW_LATENCY_BINDER; } void walt_cfs_init(void)