[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250826095615.14259d90@gandalf.local.home>
Date: Tue, 26 Aug 2025 09:56:15 -0400
From: Steven Rostedt <rostedt@...dmis.org>
To: cuiguoqi <cuiguoqi@...inos.cn>
Cc: 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>,
Ben Segall <bsegall@...gle.com>, Mel Gorman <mgorman@...e.de>, Valentin
Schneider <vschneid@...hat.com>, Sebastian Andrzej Siewior
<bigeasy@...utronix.de>, Clark Williams <clrkwllms@...nel.org>,
guoqi0226@....com, linux-kernel@...r.kernel.org,
linux-rt-devel@...ts.linux.dev
Subject: Re: [PATCH] sched: Fix race in rt_mutex_pre_schedule by removing
non-atomic fetch_and_set
On Tue, 26 Aug 2025 19:08:33 +0800
cuiguoqi <cuiguoqi@...inos.cn> wrote:
> @@ -7078,11 +7078,11 @@ const struct sched_class *__setscheduler_class(struct task_struct *p, int prio)
> * name such that if someone were to implement this function we get to compare
> * notes.
> */
> -#define fetch_and_set(x, v) ({ int _x = (x); (x) = (v); _x; })
>
> void rt_mutex_pre_schedule(void)
> {
> - lockdep_assert(!fetch_and_set(current->sched_rt_mutex, 1));
> + lockdep_assert(!current->sched_rt_mutex);
> + current->sched_rt_mutex = 1;
> sched_submit_work(current);
> }
>
> @@ -7095,7 +7095,9 @@ void rt_mutex_schedule(void)
> void rt_mutex_post_schedule(void)
> {
> sched_update_worker(current);
> - lockdep_assert(fetch_and_set(current->sched_rt_mutex, 0));
> + lockdep_assert(current->sched_rt_mutex);
> + current->sched_rt_mutex = 0;
> +
> }
Honestly, without adding a READ_ONCE() or barrier() I don't see how your
change would prevent the compiler from making the code any different?
It may have "fixed" your issue because the compiler may have done things
differently, but this change doesn't guarantee anything.
Also, could you show an example of how current->sched_rt_mutex could be
corrupted?
-- Steve
Powered by blists - more mailing lists