From 5a4738726dd4c2663ab864c0d50eb586643dc7df Mon Sep 17 00:00:00 2001 From: Pavankumar Kondeti Date: Thu, 27 May 2021 07:14:06 +0530 Subject: [PATCH] sched/walt: Fix locking issue in MVP tasks update Protect MVP tasks list access in the tick path with rq lock. Change-Id: I387aa104cbacaf445bf739b8fb6d631283bd0ada Signed-off-by: Pavankumar Kondeti --- kernel/sched/walt/walt_cfs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/sched/walt/walt_cfs.c b/kernel/sched/walt/walt_cfs.c index a647b7a726e7..93eaf6cbd584 100644 --- a/kernel/sched/walt/walt_cfs.c +++ b/kernel/sched/walt/walt_cfs.c @@ -828,6 +828,8 @@ static void walt_cfs_account_mvp_runtime(struct rq *rq, struct task_struct *curr s64 delta; unsigned int limit; + lockdep_assert_held(&rq->lock); + /* sum_exec_snapshot can be ahead. See below increment */ delta = curr->se.sum_exec_runtime - wts->sum_exec_snapshot; if (delta < 0) @@ -905,8 +907,10 @@ void walt_cfs_tick(struct rq *rq) if (unlikely(walt_disabled)) return; + raw_spin_lock(&rq->lock); + if (list_empty(&wts->mvp_list)) - return; + goto out; walt_cfs_account_mvp_runtime(rq, rq->curr); /* @@ -915,6 +919,9 @@ void walt_cfs_tick(struct rq *rq) */ if ((wrq->mvp_tasks.next != &wts->mvp_list) && rq->cfs.h_nr_running > 1) resched_curr(rq); + +out: + raw_spin_unlock(&rq->lock); } /*