summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChungkai Mei <chungkai@google.com>2023-05-25 02:48:29 +0000
committerChung-Kai (Michael) Mei <chungkai@google.com>2023-06-17 10:00:08 +0000
commitfd596bbded565d79de1ede9efe93fa34a9667175 (patch)
tree7bfdcab6ca7d36ff61bdffe97f67b0a89cb1a22c
parent8f5ca09a6f41ae7c1dc8a5ccac781c9dc6f0462d (diff)
downloadgs-fd596bbded565d79de1ede9efe93fa34a9667175.tar.gz
vh: sched: add knob to control idle balancer
since camera is highly optimized in launched devices so that we disable idle balancer to avoid influencing previous optimization. Bug: 281489720 Change-Id: I94e6dff184dc2d5bb7cf3a2e64485eed383e9da5 Signed-off-by: Chungkai Mei <chungkai@google.com> (cherry picked from commit e7bb7df5fbf09e794319eb5dd6c078892bc8185e)
-rw-r--r--drivers/soc/google/vh/kernel/sched/fair.c3
-rw-r--r--drivers/soc/google/vh/kernel/sched/procfs_node.c34
2 files changed, 37 insertions, 0 deletions
diff --git a/drivers/soc/google/vh/kernel/sched/fair.c b/drivers/soc/google/vh/kernel/sched/fair.c
index a132945ccda6..714640426c92 100644
--- a/drivers/soc/google/vh/kernel/sched/fair.c
+++ b/drivers/soc/google/vh/kernel/sched/fair.c
@@ -33,6 +33,7 @@ static struct vendor_cfs_util vendor_cfs_util[UG_MAX - 1][CPU_NUM];
extern int vendor_sched_ug_bg_auto_prio;
extern unsigned int vendor_sched_util_post_init_scale;
extern bool vendor_sched_npi_packing;
+extern bool vendor_sched_idle_balancer;
unsigned int sched_capacity_margin[CPU_NUM] = { [0 ... CPU_NUM - 1] = DEF_UTIL_THRESHOLD };
unsigned int sched_dvfs_headroom[CPU_NUM] = { [0 ... CPU_NUM - 1] = DEF_UTIL_THRESHOLD };
@@ -2626,6 +2627,8 @@ void sched_newidle_balance_pixel_mod(void *data, struct rq *this_rq, struct rq_f
atomic_set(&vrq->num_adpf_tasks, 0);
+ if (!vendor_sched_idle_balancer)
+ return;
/*
* We must set idle_stamp _before_ calling idle_balance(), such that we
* measure the duration of idle_balance() as idle time.
diff --git a/drivers/soc/google/vh/kernel/sched/procfs_node.c b/drivers/soc/google/vh/kernel/sched/procfs_node.c
index c51c3d3f8d0d..a1e831d65a9e 100644
--- a/drivers/soc/google/vh/kernel/sched/procfs_node.c
+++ b/drivers/soc/google/vh/kernel/sched/procfs_node.c
@@ -24,6 +24,7 @@ DECLARE_PER_CPU(struct uclamp_stats, uclamp_stats);
unsigned int __read_mostly vendor_sched_util_post_init_scale = DEF_UTIL_POST_INIT_SCALE;
bool __read_mostly vendor_sched_npi_packing = true; //non prefer idle packing
+bool __read_mostly vendor_sched_idle_balancer = true; //prefer vendor idle balancer
bool __read_mostly vendor_sched_reduce_prefer_idle = true;
bool __read_mostly vendor_sched_boost_adpf_prio = true;
struct proc_dir_entry *vendor_sched;
@@ -1381,6 +1382,38 @@ static ssize_t npi_packing_store(struct file *filp,
PROC_OPS_RW(npi_packing);
+static int idle_balancer_show(struct seq_file *m, void *v)
+{
+ seq_printf(m, "%s\n", vendor_sched_idle_balancer ? "true" : "false");
+
+ return 0;
+}
+
+static ssize_t idle_balancer_store(struct file *filp,
+ const char __user *ubuf,
+ size_t count, loff_t *pos)
+{
+ bool enable;
+ char buf[MAX_PROC_SIZE];
+
+ if (count >= sizeof(buf))
+ return -EINVAL;
+
+ if (copy_from_user(buf, ubuf, count))
+ return -EFAULT;
+
+ buf[count] = '\0';
+
+ if (kstrtobool(buf, &enable))
+ return -EINVAL;
+
+ vendor_sched_idle_balancer = enable;
+
+ return count;
+}
+
+PROC_OPS_RW(idle_balancer);
+
static int reduce_prefer_idle_show(struct seq_file *m, void *v)
{
seq_printf(m, "%s\n", vendor_sched_reduce_prefer_idle ? "true" : "false");
@@ -2355,6 +2388,7 @@ static struct pentry entries[] = {
PROC_ENTRY(util_threshold),
PROC_ENTRY(util_post_init_scale),
PROC_ENTRY(npi_packing),
+ PROC_ENTRY(idle_balancer),
PROC_ENTRY(reduce_prefer_idle),
PROC_ENTRY(boost_adpf_prio),
PROC_ENTRY(dump_task),