All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrea Righi <arighi@nvidia.com>
To: Changwoo Min <changwoo@igalia.com>
Cc: tj@kernel.org, void@manifault.com, kernel-dev@igalia.com,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3] sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass()
Date: Wed, 8 Jan 2025 17:32:53 +0100	[thread overview]
Message-ID: <Z36otdC4RRO4QkY_@gpd3> (raw)
In-Reply-To: <20250108150806.101555-1-changwoo@igalia.com>

On Thu, Jan 09, 2025 at 12:08:06AM +0900, Changwoo Min wrote:
> scx_ops_bypass() iterates all CPUs to re-enqueue all the scx tasks.
> For each CPU, it acquires a lock using rq_lock() regardless of whether
> a CPU is offline or the CPU is currently running a task in a higher
> scheduler class (e.g., deadline). The rq_lock() is supposed to be used
> for online CPUs, and the use of rq_lock() may trigger an unnecessary
> warning in rq_pin_lock(). Therefore, replace rq_lock() to
> raw_spin_rq_lock() in scx_ops_bypass().
> 
> Without this change, we observe the following warning:
> 
> ===== START =====
> [    6.615205] rq->balance_callback && rq->balance_callback != &balance_push_callback
> [    6.615208] WARNING: CPU: 2 PID: 0 at kernel/sched/sched.h:1730 __schedule+0x1130/0x1c90
> =====  END  =====
> 
> Fixes: 0e7ffff1b811 ("scx: Fix raciness in scx_ops_bypass()")
> Signed-off-by: Changwoo Min <changwoo@igalia.com>

Looks good to me.

Acked-by: Andrea Righi <arighi@nvidia.com>

Thanks,
-Andrea

> ---
> 
> ChangeLog v2 -> v3:
>   - Trim long warning messages for readability.
>   - Properly add the Fixes tag.
> 
> ChangeLog v1 -> v2:
>   - Add warning messages without this change.
>   - Use resched_curr() instead of resched_cpu() to avoid redundant locking (Andrea)
> 
>  kernel/sched/ext.c | 12 ++++++------
>  1 file changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
> index 8fe64c27004e..cb6eb49d16be 100644
> --- a/kernel/sched/ext.c
> +++ b/kernel/sched/ext.c
> @@ -4803,10 +4803,9 @@ static void scx_ops_bypass(bool bypass)
>  	 */
>  	for_each_possible_cpu(cpu) {
>  		struct rq *rq = cpu_rq(cpu);
> -		struct rq_flags rf;
>  		struct task_struct *p, *n;
>  
> -		rq_lock(rq, &rf);
> +		raw_spin_rq_lock(rq);
>  
>  		if (bypass) {
>  			WARN_ON_ONCE(rq->scx.flags & SCX_RQ_BYPASSING);
> @@ -4822,7 +4821,7 @@ static void scx_ops_bypass(bool bypass)
>  		 * sees scx_rq_bypassing() before moving tasks to SCX.
>  		 */
>  		if (!scx_enabled()) {
> -			rq_unlock(rq, &rf);
> +			raw_spin_rq_unlock(rq);
>  			continue;
>  		}
>  
> @@ -4842,10 +4841,11 @@ static void scx_ops_bypass(bool bypass)
>  			sched_enq_and_set_task(&ctx);
>  		}
>  
> -		rq_unlock(rq, &rf);
> -
>  		/* resched to restore ticks and idle state */
> -		resched_cpu(cpu);
> +		if (cpu_online(cpu) || cpu == smp_processor_id())
> +			resched_curr(rq);
> +
> +		raw_spin_rq_unlock(rq);
>  	}
>  
>  	atomic_dec(&scx_ops_breather_depth);
> -- 
> 2.47.1
> 

  reply	other threads:[~2025-01-08 16:33 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-08 15:08 [PATCH v3] sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass() Changwoo Min
2025-01-08 16:32 ` Andrea Righi [this message]
2025-01-08 16:49 ` Tejun Heo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z36otdC4RRO4QkY_@gpd3 \
    --to=arighi@nvidia.com \
    --cc=changwoo@igalia.com \
    --cc=kernel-dev@igalia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tj@kernel.org \
    --cc=void@manifault.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.