From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (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 9229B3890E1 for ; Sat, 27 Jun 2026 08:17:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782548236; cv=none; b=FPXl/MHiFiL1TUGbE01dQUgrEW9h8Y/BCroW/KikDrhxiDX+aLYbxrIEVxBoWp/w07FZbY9E7CBSY09HGPuBbewF3mM1WJkegjoRXHd4CGyM3EqCmPntvrlVDk8EGHgKZBQwjyFifwwVdA1BiKy+13tmjCgMsp4scQnr8MQmZVc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782548236; c=relaxed/simple; bh=qTbay2ZdkA/bcQtE7XC9I4fvAAay6MOfpSLKTT0J+X4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=dq+l8gkcy/xfqUoxrOqw3A5wTi3Ox61ATW6d8JiN2xKJLwvrYXZPG5law9pkINCW/gC1ntMBCla4ig0E6Wr4aAOdJS7sICOdQEHEeL94ee0VPOw/aCSbJQy8L8y8easSHaelUlceEX3GyJiEI7g/+swlINIYa7AO8/pesO0lSHk= 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=RWYGEh74; arc=none smtp.client-ip=209.85.214.176 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="RWYGEh74" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-2c9b1edf2bdso1787255ad.1 for ; Sat, 27 Jun 2026 01:17:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1782548233; x=1783153033; 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=NjGM27HnP31Af+QtYvbZDXXH5OlQ+xr0Sg9rbUSG1rs=; b=RWYGEh74O9/kZH8BQLmNyQuLT8IuhhQ43wPNwngv/rx4L8PCGbslsmrhqtoWmC+CdU vQLGUx3wif2+kv+GKSGRChHzuTuXOjwpVNW0exL/Wil8RGD23BypSHOCagq5KA2NB4NF EYdkTPSEJIWCsVCFgGFdfVvuBOys7AyJHGhYTWhH0AXgksT1519M+lJGi5ydsNPeLnhO Vt9k17uADf7/dH8e+sT6DsppAKkyUwbhTh8scR+HzngBzIE8hUIDfhN84aWyCZgmsbMO hqTvDN8Yk/DnqGvMBoQePcZlySgFnXl2iAjcfCD4b2Cks+DXCOm1vR/43INrG+vAyBHY Debg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782548233; x=1783153033; 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=NjGM27HnP31Af+QtYvbZDXXH5OlQ+xr0Sg9rbUSG1rs=; b=HEiaroII+b7/i0P42uQqh93fwH5GvXbgAUvoZUz44nq2p9EBNXHgjehMu5vNnbJJ1D VJxi2aOjD8d4fogaFeTwnTbUEeisXGxIZySgNaI+u9AKIz4qi45IWkkzn/MybEvadyS2 o4swI4sghQLLI5f0y16K1HHOQNwoEk3Y3K6sVAsTvYNkypO8KjeE6qyV8kIlDyk9gKET fiTcyzzarYK8fnMCSXDYdBNLsGvzCEi1wqMWkaS6Z2vxP/sA+o4Xt6VmEU3YR3RtKGok UPki3OA8nZeERprjaivsxsY7iu+cFxDALwl3e8eIepHp7jO8e7KElcV7xCWChyppuwRt TErQ== X-Forwarded-Encrypted: i=1; AHgh+Roya/gGc4eMhFY+HgILHZponZPK7S7WBayc+NqJX4HU+tHk4TevRQr9EfsdXgbUSCdgwR+18oyYGUTdcEU=@vger.kernel.org X-Gm-Message-State: AOJu0YxtrEFi+K/FSAGppQhIlT40r9H7PwveG3wUIrhAzxEvLSHgrjRs jil2NNrGVZ53LXQ8n3/X+6ncFu2mKY4wOACC70/Gj06MBzFdh597Bywz X-Gm-Gg: AfdE7clXyO7IDXEKsk0Nf77TwUzTVeRnXSZERPSthCfS+GhdfzEt+y3vA6IGkT0p6P1 l0JfYv/8CNwFoPBLoOs7yyIbhA5C822arTHmUe4TYyQepxbQBnvH5JLP3ezTVg29VUuAp1IHwIe 70NxEtI+xBPMK2UEARV7Na+406bBWN8WxWJEvyXTr/JX+vh0Kb/gvO1tns+NDhfplwSxDxNMUy8 ilinu/Urjxa8DLxoMDDL8maRIA8MVZ0E6o7ndGSGCrW8qwH88UvBrncWsGcOrdGkQ4qNmCx9/OL aEeIWBZzwOz7B3kU7JSkHWJ1hBBazkVmfr8Nve43sw0x2GpdSV9GXlM3t85O0nlQhbD3NLnuUtz tO7SiQ06/AxsBtVl/80oufzGzlAzIpEbc+TTUgJauv9ssEzbtbZ211iOufV7G7MNk3wtOmx+D04 C+9aBQujZ5RLk8ifB0zsbtNLQ2GEPT2OrKFcl1jArhaftuZZoCGZw= X-Received: by 2002:a17:903:1b4b:b0:2bf:9760:b94d with SMTP id d9443c01a7336-2c9854c82dbmr29448415ad.15.1782548232679; Sat, 27 Jun 2026 01:17:12 -0700 (PDT) Received: from cps-manycore-1.. ([147.46.174.222]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2c99e2955e3sm12331525ad.9.2026.06.27.01.17.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Jun 2026 01:17:12 -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 v2] sched: set TIF_NEED_RESCHED before calling __trace_set_need_resched() Date: Sat, 27 Jun 2026 08:16:43 +0000 Message-ID: <20260627081657.499781-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 --- v2: - also fix __resched_curr (Peter Zijlstra) 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..b358fac315d0 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1172,6 +1172,7 @@ static void __resched_curr(struct rq *rq, int tif) struct task_struct *curr = rq->curr; struct thread_info *cti = task_thread_info(curr); int cpu; + bool need_ipi; 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