From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C16B1168AD for ; Fri, 22 Dec 2023 10:32:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=arm.com Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0D8402F4; Fri, 22 Dec 2023 02:33:35 -0800 (PST) Received: from [10.57.87.46] (unknown [10.57.87.46]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4C0B03F738; Fri, 22 Dec 2023 02:32:46 -0800 (PST) Message-ID: <371608cd-9abd-4022-a8a0-3a4aa00f535c@arm.com> Date: Fri, 22 Dec 2023 10:32:44 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v7 18/23] sched: Add push_task_chain helper Content-Language: en-US To: John Stultz , LKML Cc: Joel Fernandes , Qais Yousef , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Valentin Schneider , Steven Rostedt , Ben Segall , Zimuzo Ezeozue , Youssef Esmat , Mel Gorman , Daniel Bristot de Oliveira , Will Deacon , Waiman Long , Boqun Feng , "Paul E. McKenney" , Xuewen Yan , K Prateek Nayak , Thomas Gleixner , kernel-team@android.com References: <20231220001856.3710363-1-jstultz@google.com> <20231220001856.3710363-19-jstultz@google.com> From: Metin Kaya In-Reply-To: <20231220001856.3710363-19-jstultz@google.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 20/12/2023 12:18 am, John Stultz wrote: > From: Connor O'Brien > > Switch logic that deactivates, sets the task cpu, > and reactivates a task on a different rq to use a > helper that will be later extended to push entire > blocked task chains. > > This patch was broken out from a larger chain migration > patch originally by Connor O'Brien. I think the patches #18, #19, #22 can be upstreamed regardless of other Proxy Execution patches. > > Cc: Joel Fernandes > Cc: Qais Yousef > Cc: Ingo Molnar > Cc: Peter Zijlstra > Cc: Juri Lelli > Cc: Vincent Guittot > Cc: Dietmar Eggemann > Cc: Valentin Schneider > Cc: Steven Rostedt > Cc: Ben Segall > Cc: Zimuzo Ezeozue > Cc: Youssef Esmat > Cc: Mel Gorman > Cc: Daniel Bristot de Oliveira > Cc: Will Deacon > Cc: Waiman Long > Cc: Boqun Feng > Cc: "Paul E. McKenney" > Cc: Metin Kaya > Cc: Xuewen Yan > Cc: K Prateek Nayak > Cc: Thomas Gleixner > Cc: kernel-team@android.com > Signed-off-by: Connor O'Brien > [jstultz: split out from larger chain migration patch] > Signed-off-by: John Stultz > --- > kernel/sched/core.c | 4 +--- > kernel/sched/deadline.c | 8 ++------ > kernel/sched/rt.c | 8 ++------ > kernel/sched/sched.h | 9 +++++++++ > 4 files changed, 14 insertions(+), 15 deletions(-) > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 0cd63bd0bdcd..0c212dcd4b7a 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -2721,9 +2721,7 @@ int push_cpu_stop(void *arg) > > // XXX validate p is still the highest prio task > if (task_rq(p) == rq) { > - deactivate_task(rq, p, 0); > - set_task_cpu(p, lowest_rq->cpu); > - activate_task(lowest_rq, p, 0); > + push_task_chain(rq, lowest_rq, p); > resched_curr(lowest_rq); > } > > diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c > index 4f998549ea74..def1eb23318b 100644 > --- a/kernel/sched/deadline.c > +++ b/kernel/sched/deadline.c > @@ -2313,9 +2313,7 @@ static int push_dl_task(struct rq *rq) > goto retry; > } > > - deactivate_task(rq, next_task, 0); > - set_task_cpu(next_task, later_rq->cpu); > - activate_task(later_rq, next_task, 0); > + push_task_chain(rq, later_rq, next_task); > ret = 1; > > resched_curr(later_rq); > @@ -2401,9 +2399,7 @@ static void pull_dl_task(struct rq *this_rq) > if (is_migration_disabled(p)) { > push_task = get_push_task(src_rq); > } else { > - deactivate_task(src_rq, p, 0); > - set_task_cpu(p, this_cpu); > - activate_task(this_rq, p, 0); > + push_task_chain(src_rq, this_rq, p); > dmin = p->dl.deadline; > resched = true; > } > diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c > index a7b51a021111..cf0eb4aac613 100644 > --- a/kernel/sched/rt.c > +++ b/kernel/sched/rt.c > @@ -2128,9 +2128,7 @@ static int push_rt_task(struct rq *rq, bool pull) > goto retry; > } > > - deactivate_task(rq, next_task, 0); > - set_task_cpu(next_task, lowest_rq->cpu); > - activate_task(lowest_rq, next_task, 0); > + push_task_chain(rq, lowest_rq, next_task); > resched_curr(lowest_rq); > ret = 1; > > @@ -2401,9 +2399,7 @@ static void pull_rt_task(struct rq *this_rq) > if (is_migration_disabled(p)) { > push_task = get_push_task(src_rq); > } else { > - deactivate_task(src_rq, p, 0); > - set_task_cpu(p, this_cpu); > - activate_task(this_rq, p, 0); > + push_task_chain(src_rq, this_rq, p); > resched = true; > } > /* > diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h > index 765ba10661de..19afe532771f 100644 > --- a/kernel/sched/sched.h > +++ b/kernel/sched/sched.h > @@ -3546,5 +3546,14 @@ static inline void init_sched_mm_cid(struct task_struct *t) { } > > extern u64 avg_vruntime(struct cfs_rq *cfs_rq); > extern int entity_eligible(struct cfs_rq *cfs_rq, struct sched_entity *se); > +#ifdef CONFIG_SMP > +static inline > +void push_task_chain(struct rq *rq, struct rq *dst_rq, struct task_struct *task) > +{ > + deactivate_task(rq, task, 0); > + set_task_cpu(task, dst_rq->cpu); > + activate_task(dst_rq, task, 0); > +} > +#endif > > #endif /* _KERNEL_SCHED_SCHED_H */