[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <aJqYL1mq8G8wMJes@slm.duckdns.org>
Date: Mon, 11 Aug 2025 15:26:07 -1000
From: 'Tejun Heo' <tj@...nel.org>
To: liuwenfang <liuwenfang@...or.com>
Cc: 'David Vernet' <void@...ifault.com>, 'Andrea Righi' <arighi@...dia.com>,
'Changwoo Min' <changwoo@...lia.com>,
'Ingo Molnar' <mingo@...hat.com>,
'Peter Zijlstra' <peterz@...radead.org>,
'Juri Lelli' <juri.lelli@...hat.com>,
'Vincent Guittot' <vincent.guittot@...aro.org>,
'Dietmar Eggemann' <dietmar.eggemann@....com>,
'Steven Rostedt' <rostedt@...dmis.org>,
'Ben Segall' <bsegall@...gle.com>, 'Mel Gorman' <mgorman@...e.de>,
'Valentin Schneider' <vschneid@...hat.com>,
"'linux-kernel@...r.kernel.org'" <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v3 2/3] sched_ext: Fix cpu_released while RT task and SCX
task are scheduled concurrently
On Sun, Jul 20, 2025 at 09:38:50AM +0000, liuwenfang wrote:
> Supposed RT task(RT1) is running on CPU0 and RT task(RT2) is awakened on CPU1,
> RT1 becomes sleep and SCX task(SCX1) will be dispatched to CPU0, RT2 will be
> placed on CPU0:
>
> CPU0(schedule) CPU1(try_to_wake_up)
> set_current_state(TASK_INTERRUPTIBLE) try_to_wake_up # RT2
> __schedule select_task_rq # CPU0 is selected
> LOCK rq(0)->lock # lock CPU0 rq ttwu_queue
> deactivate_task # RT1 LOCK rq(0)->lock # busy waiting
> pick_next_task # no more RT tasks on rq |
> prev_balance |
> balance_scx |
> balance_one |
> rq->scx.cpu_released = false; |
> consume_global_dsq |
> consume_dispatch_q |
> consume_remote_task |
> UNLOCK rq(0)->lock V
> LOCK rq(0)->lock # succ
> deactivate_task # SCX1 ttwu_do_activate
> LOCK rq(0)->lock # busy waiting activate_task # RT2 equeued
> | UNLOCK rq(0)->lock
> V
> LOCK rq(0)->lock # succ
> activate_task # SCX1
> pick_task # RT2 is picked
> put_prev_set_next_task # prev is RT1, next is RT2, rq->scx.cpu_released = false;
> UNLOCK rq(0)->lock
>
> At last, RT2 will be running on CPU0 with rq->scx.cpu_released being false!
It'd be better to describe the result of this - ie. cpu_release() /
cpu_acquire() calls being missed.
Thanks.
--
tejun
Powered by blists - more mailing lists