From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5AD1F327C18 for ; Tue, 30 Jun 2026 08:48:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782809283; cv=none; b=sI0pWTgdfUMGHoAqveLEyi2yAZ04iZQOengUvd0JDr/7Jbc6dPNp6gBII+4hHB7B0r9/AkupZLmrR5iq7jHsy4Ti0ljQgJ2eyuSqpIKydlxmHwfB7OgO670yqun92+Oo+NSup28DIFQadJnlpcvkL79Z7llFnOkRyKQ3kvZcXZw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782809283; c=relaxed/simple; bh=8ODbFoDnGAMzPmn7+GcRU69aZywl7i+fTdFCoMqBOCU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=Dgu+KcI3RcTydVZrAw//PKmty1xu4AouDl1P/zJZPnpH9zIZfcaQAgoSjkufB2tiP6Psh5NDW5ssKeqSbCkLokKxY6HQzDf99IVDHod3bwJlC4iyYWDngSWf3FPSloaZopGyMV789/o5SFUWLmDgrdZ5oYapyxoPjnILpT9rVMo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XRfq7D3n; arc=none smtp.client-ip=209.85.216.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XRfq7D3n" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-37fb434c547so2005438a91.0 for ; Tue, 30 Jun 2026 01:48:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782809281; x=1783414081; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=KVmemvIMubyVfZQrsZWyTy+8qqfqjY2oHq1PKUJFqZA=; b=XRfq7D3nOsy/TaG7bhZHfl+RSGUcmZ0FybhI4Ygqs0d/HXHvIXz4Nf9oj5YqS4/8fO 2jKi9g0/sMBoaCad+ac7S3ojXOA3pU5Qepu/qtTWgLHfIWmfW/GTWMRXVkp1ogVKiwAb 1lxA7lsZrftD5p7eMH0yggSLtj/vE+flJJeUxU7d8oDZF8a45NXz7XWwj2YmwgLR2h6x B+9BJ8h/LhGx25KSroqJLdGyvXnPlSTpMUQT5xVyvgGiQiOR9CZOPcoPQ7jDmCZI3Vr1 BAFN6PmPCJo7oTpl7a6Uqg/Y89zpcO8aFKEZtnpLht4zTvCycbDLWe/5Tikz0OhZhmEZ cM2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782809281; x=1783414081; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=KVmemvIMubyVfZQrsZWyTy+8qqfqjY2oHq1PKUJFqZA=; b=Ey85yqAGGUMMeoJ19ZP9EImtnIhZMjypri//VzgdZrjjjzmoCTU81KY7RFgSLALL4l twyHtBko0sasXT3l3VYFq37eWRtyj2GLSEWVjBimkBrtcSeoREE/+HZPm2Ax3Az8oezY NXqnofPgNjm6ZJZRFT+BAtYJ2rG+QPL3toaJvBNWEHfGx9lxox3zdKeR+f2mSC0rkMZe hRY8RMYgJtA7PcZF6sWNvukdjHjh6Zhg2bKpFFGvcbTNs+mJjsZ18bvRM5ubiP8SuRTD Br1lSfLiWxLiSyuV0uUHz8iGkvLW4q0AanQAxxQOKOt2a0Y6HLHlxr9FLEcSEG5tdPvJ gzxA== X-Forwarded-Encrypted: i=1; AHgh+Rp8+DcG4oltlUjTLlFxulCacoPqnOoQPX8dNXCK6fBGirKqbTbVLmD7t0UNzgzMnCsQbH+EXzfYZ1T0EoQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzIvCHqyrkm7H30BRZEyLNK642c5Oe4gI+K+EuVQLkHQUkKuoXq smqaNL+H3HUzZDVtQSG2tHAKvRfBInLFMwwEfy3zri9vfD+V7ra7cduP X-Gm-Gg: AfdE7cmqhqcoHGoqm6w0mIDDvLKn81Z1SyBEytUCsrnmCFHTqsd+SBrAcD2T8P48lN3 EFn3UI1n3fIUhyZD7c/m6fCjyNgdgSw9DTUWaM/Rw++nYlp1DyDTdBLJ2tpiBP3KHSr+oCApYbJ euVV+3kUkIUlgw+xbsIjAKJBD+QSOx4E9pKJ6OIQpeM4fyOTYyhHYDcETd8FyCh3f0nQ9wA+G8Y o2QjUrUAtgQBIOJfOuzLirh8KHSUEuCeu3uVmjaEYpCH+iJADaM3WgHQRr5eAvLwPp4UIbRZ5kG clYym0bRFr0VySlT/wAz7+X7SzyI1L4djNZ1A7rOJAowmyy9oImPm618/GYgFsOhtKMRvMCk8+u 1F6D+CtWTUveEfsuTK+DvRcXAFU5qmulHXqFvM0oXmiZyXg2l/Hr2y9Orw4lfVU7bGIWgWG0tXy jQ8AkExw8meeHsw1+c7JZ2lIQbqYQF+IQFkOWaUEo81z2jS4fQu88= X-Received: by 2002:a17:90b:5251:b0:36d:8e49:d8 with SMTP id 98e67ed59e1d1-380526df382mr1825959a91.15.1782809281342; Tue, 30 Jun 2026 01:48:01 -0700 (PDT) Received: from cps-manycore-1.. ([147.46.174.222]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3805b6e5bd2sm436689a91.0.2026.06.30.01.47.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jun 2026 01:48:01 -0700 (PDT) From: Sechang Lim To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot Cc: Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , K Prateek Nayak , Gabriele Monaco , linux-kernel@vger.kernel.org Subject: [PATCH v3] sched: set TIF_NEED_RESCHED before calling __trace_set_need_resched() Date: Tue, 30 Jun 2026 08:47:37 +0000 Message-ID: <20260630084750.2792851-1-rhkrqnwk98@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit set_tsk_need_resched() tests TIF_NEED_RESCHED, calls __trace_set_need_resched() if the flag is clear, then sets it via set_tsk_thread_flag(). A BPF raw_tp program attached to sched_set_need_resched executes synchronously inside __bpf_trace_run(). On return, __bpf_trace_run() drops the RCU lock with rcu_read_unlock_migrate(), which on the preempt-or-BH-disabled path calls set_need_resched_current() -> set_tsk_need_resched() again. set_tsk_thread_flag() follows the tracepoint call, so every re-entrant frame sees TIF_NEED_RESCHED clear and calls __trace_set_need_resched() again: BUG: TASK stack guard page was hit at ffffc9001224ff98 Oops: stack guard page: 0000 [#1] SMP KASAN PTI RIP: 0010:__bpf_trace_sched_set_need_resched_tp+0x1c/0x190 Call Trace: trace_sched_set_need_resched_tp+0x110/0x130 set_tsk_need_resched include/linux/sched.h:2076 set_need_resched_current include/linux/sched.h:2094 rcu_read_unlock_special+0x43a/0x440 __rcu_read_unlock+0x9e/0x120 rcu_read_unlock_migrate+0xa9/0x240 __bpf_trace_run+0x131/0x180 bpf_trace_run3+0x333/0x430 __bpf_trace_sched_set_need_resched_tp+0x13a/0x190 trace_sched_set_need_resched_tp+0x110/0x130 set_tsk_need_resched include/linux/sched.h:2076 ... __resched_curr() has the same ordering, firing the tracepoint before setting the flag via set_ti_thread_flag() or set_nr_and_not_polling(). Fix it for consistency. Replace the separate test_tsk_thread_flag() + set_tsk_thread_flag() pair in set_tsk_need_resched() with test_and_set_tsk_thread_flag(). In __resched_curr(), move the tracepoint call after the flag is set in each path. Fixes: adcc3bfa8806 ("sched: Adapt sched tracepoints for RV task model") Signed-off-by: Sechang Lim --- v3: - reorder need_ipi variable. (K Prateek Nayak) v2: - https://lore.kernel.org/all/20260627081657.499781-1-rhkrqnwk98@gmail.com/ v1: - https://lore.kernel.org/all/20260625065656.392182-1-rhkrqnwk98@gmail.com/ include/linux/sched.h | 5 ++--- kernel/sched/core.c | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index ee06cba5c6f5..c9efd08dae92 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2071,10 +2071,9 @@ static inline int test_tsk_thread_flag(struct task_struct *tsk, int flag) static inline void set_tsk_need_resched(struct task_struct *tsk) { - if (tracepoint_enabled(sched_set_need_resched_tp) && - !test_tsk_thread_flag(tsk, TIF_NEED_RESCHED)) + if (!test_and_set_tsk_thread_flag(tsk, TIF_NEED_RESCHED) && + tracepoint_enabled(sched_set_need_resched_tp)) __trace_set_need_resched(tsk, TIF_NEED_RESCHED); - set_tsk_thread_flag(tsk,TIF_NEED_RESCHED); } static inline void clear_tsk_need_resched(struct task_struct *tsk) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index b8871449d3c6..19de28f0d85a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1171,6 +1171,7 @@ static void __resched_curr(struct rq *rq, int tif) { struct task_struct *curr = rq->curr; struct thread_info *cti = task_thread_info(curr); + bool need_ipi; int cpu; lockdep_assert_rq_held(rq); @@ -1187,15 +1188,17 @@ static void __resched_curr(struct rq *rq, int tif) cpu = cpu_of(rq); - trace_sched_set_need_resched_tp(curr, cpu, tif); if (cpu == smp_processor_id()) { set_ti_thread_flag(cti, tif); if (tif == TIF_NEED_RESCHED) set_preempt_need_resched(); + trace_sched_set_need_resched_tp(curr, cpu, tif); return; } - if (set_nr_and_not_polling(cti, tif)) { + need_ipi = set_nr_and_not_polling(cti, tif); + trace_sched_set_need_resched_tp(curr, cpu, tif); + if (need_ipi) { if (tif == TIF_NEED_RESCHED) smp_send_reschedule(cpu); } else { -- 2.43.0