From 902848221fcd6cd29f571f1d6b7b7f97c64ef45a Mon Sep 17 00:00:00 2001 From: Stephen Dickey Date: Fri, 16 Sep 2022 15:15:33 -0700 Subject: [PATCH] kernel/sched/walt: test is walt is enabled Pause will not be invoked through core control until after walt has been initialized. However, the walt_pause apis are made available to other vendor modules, and if those modules attempt to invoke pause prior to walt being initialized, an invalid reference to walt_drain_thread will be made. Prevent the walt_pause and walt_resume apis from being used until after walt has been properly initialized, walt_halt_init has been called, and walt_drain_thread properly created. Change-Id: Iadd764ebfb7402529b49de6ef121d23dfcdc5649 Signed-off-by: Stephen Dickey --- kernel/sched/walt/walt_halt.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/sched/walt/walt_halt.c b/kernel/sched/walt/walt_halt.c index 48a82da53cf5..a6f33d5b7cde 100644 --- a/kernel/sched/walt/walt_halt.c +++ b/kernel/sched/walt/walt_halt.c @@ -306,8 +306,7 @@ static int halt_cpus(struct cpumask *cpus) cpumask_or(&drain_data.cpus_to_drain, &drain_data.cpus_to_drain, cpus); raw_spin_unlock_irqrestore(&walt_drain_pending_lock, flags); - if (!IS_ERR(walt_drain_thread)) - wake_up_process(walt_drain_thread); + wake_up_process(walt_drain_thread); out: trace_halt_cpus(cpus, start_time, 1, ret); @@ -409,6 +408,8 @@ int walt_halt_cpus(struct cpumask *cpus, enum pause_reason reason) int walt_pause_cpus(struct cpumask *cpus, enum pause_reason reason) { + if (walt_disabled) + return -EAGAIN; return walt_halt_cpus(cpus, reason); } EXPORT_SYMBOL(walt_pause_cpus); @@ -443,6 +444,8 @@ int walt_start_cpus(struct cpumask *cpus, enum pause_reason reason) int walt_resume_cpus(struct cpumask *cpus, enum pause_reason reason) { + if (walt_disabled) + return -EAGAIN; return walt_start_cpus(cpus, reason); } EXPORT_SYMBOL(walt_resume_cpus);