From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05EC57262D for ; Tue, 1 Jul 2025 00:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; cv=none; b=HO+u9QyQH5u06bmNmaCDexae8dwCYaRRH2VCKqTYnldYkp6yYnw2dooYELGcV+I5WGQlKv0ODCWD191V9+jivSKsTLkEoGUFByAX2O+qqum4qNVgN2kZNBSAx1nRTSVHr7cfHMKkZkLp369kygB+NbDRwAQFcCZtscT7GmKSahs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; c=relaxed/simple; bh=VM98nG9RMAaSCDNbOBXWSZ3xBVU+qY6HahsHH7Iq2ZE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zv50C/OgBnpDKBVIjdQLVUeagkVxePHRq8POoA8JbrHJOTY7vpwXvkMcOgb7ODSRSgZ4yipii7jm0vx8w+zjcvyIjFGQePjAcM2S7U6Un9z3Pbw26wkJaYpgtkGIzyalz5pDXqM9kVJXTbmh3k8lSYlUr3WF+tigkLg/er+iOPk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=I0JtpC1v; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="I0JtpC1v" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UICTae009257; Tue, 1 Jul 2025 00:38:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=5wVau 4frThra4IIaVTN42HDNJrcOHXq9wQ3WDLDMRgs=; b=I0JtpC1vChazTuW79R3jA 1NxhVA5xnE3ejd8jPp9K5B20YEoRzxLyv3AxAkW4ti5YEM7PS/4EQ6/Iss+kZUpY xoRtbzYb4tib0URBkUqr3V5Wo6yoFygJD8gH54Kb5hmqnfdDN9hI6zY/tvtyyZw6 ElENU6nWjyCu/5QERHpFPxsOyFJ3ZEv7X9ydL7+Rx1y0fo1EvRPsyRwQTRFA1zpd cLtiCsERF1PJHKiQyVdAMbRTsif0f1ifRE2hPPXSyRJSZFqFxPv6PyCvBaOAGkNQ TrNt349BZZWJfbWChlECnmBDIKIGvFoC4bUB3InMkkUuGpSm/36B80uawXaVd5kK g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j766bmwm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:07 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNX009139; Tue, 1 Jul 2025 00:38:07 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:07 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 1/7] Sched: Scheduler time slice extension Date: Tue, 1 Jul 2025 00:37:43 +0000 Message-ID: <20250701003749.50525-2-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Proofpoint-GUID: ezY0yrPBOuYBPVl-BPUi7J-Z3ZFyY2ih X-Proofpoint-ORIG-GUID: ezY0yrPBOuYBPVl-BPUi7J-Z3ZFyY2ih X-Authority-Analysis: v=2.4 cv=b82y4sGx c=1 sm=1 tr=0 ts=68632def b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=JfrnYn6hAAAA:8 a=yPCof4ZbAAAA:8 a=YwOZqi3bz92sgb8OmFgA:9 a=1CNFftbPRP8L7MoqJWF3:22 cc=ntf awl=host:14723 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfX83GrU2We6ULP WFu8PwrxaFJkWdY/Cifb4wQe09D3BIejJGUodJaBbVwyIflfmCcta9y8a8bzKgeHbvZ8nvQCFkf 7NPCH2tzD8ZgSvHPW2tfhS81/O06lpf3I+GDTNlVHrKpABtt0h5PW5yPO9L02xHIVlRmzUZELci zu3E3pmvXq446SbOEuG/HXiH4lyVvTmFg6rg3eWk9VdunKH87lSjtcceY74Acp/BQMatIGIuwSH jG3z/mPWvIm6pka6vdeysZGkSMTvwrQyttjCVh8Kd1nL8J6OKVl1gYoTNH4Ofo3XHbwZwc660Hu 3ybdRkxQ60BFeUILMlv21Es7iIpMcrDu2R3MzScmW5DGX0LGe4OM4ViB+XGqY0Bai/eiv0jtSDH ul/D8CimR4A5c5tRcVcZAVLitgFkL7khbbow60sNUrqybIY2XWs38ro8AFLl706Fm5847Z6u Content-Type: text/plain; charset="utf-8" Add support for a thread to request extending its execution time slice on the cpu. The extra cpu time granted would help in allowing the thread to complete executing the critical section and drop any locks without getting preempted. The thread would request this cpu time extension, by setting a bit in the restartable sequences(rseq) structure registered with the kernel. Kernel will grant a 30us extension on the cpu, when it sees the bit set. With the help of a timer, kernel force preempts the thread if it is still running on the cpu when the 30us timer expires. The thread should yield the cpu by making a system call after completing the critical section. Suggested-by: Peter Ziljstra Signed-off-by: Prakash Sangappa --- include/linux/entry-common.h | 17 ++++++++--- include/linux/sched.h | 16 +++++++++++ include/uapi/linux/rseq.h | 7 +++++ kernel/entry/common.c | 13 ++++++--- kernel/rseq.c | 56 ++++++++++++++++++++++++++++++++++++ kernel/sched/core.c | 14 +++++++++ kernel/sched/syscalls.c | 5 ++++ 7 files changed, 120 insertions(+), 8 deletions(-) diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index f94f3fdf15fc..d4fa952e394e 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -304,7 +304,8 @@ void arch_do_signal_or_restart(struct pt_regs *regs); * exit_to_user_mode_loop - do any pending work before leaving to user spa= ce */ unsigned long exit_to_user_mode_loop(struct pt_regs *regs, - unsigned long ti_work); + unsigned long ti_work, + bool irq); =20 /** * exit_to_user_mode_prepare - call exit_to_user_mode_loop() if required @@ -316,7 +317,8 @@ unsigned long exit_to_user_mode_loop(struct pt_regs *re= gs, * EXIT_TO_USER_MODE_WORK are set * 4) check that interrupts are still disabled */ -static __always_inline void exit_to_user_mode_prepare(struct pt_regs *regs) +static __always_inline void exit_to_user_mode_prepare(struct pt_regs *regs, + bool irq) { unsigned long ti_work; =20 @@ -327,7 +329,10 @@ static __always_inline void exit_to_user_mode_prepare(= struct pt_regs *regs) =20 ti_work =3D read_thread_flags(); if (unlikely(ti_work & EXIT_TO_USER_MODE_WORK)) - ti_work =3D exit_to_user_mode_loop(regs, ti_work); + ti_work =3D exit_to_user_mode_loop(regs, ti_work, irq); + + if (irq) + rseq_delay_resched_fini(); =20 arch_exit_to_user_mode_prepare(regs, ti_work); =20 @@ -396,6 +401,10 @@ static __always_inline void syscall_exit_to_user_mode_= work(struct pt_regs *regs) =20 CT_WARN_ON(ct_state() !=3D CT_STATE_KERNEL); =20 + /* reschedule if sched delay was granted */ + if (IS_ENABLED(CONFIG_RSEQ) && current->sched_time_delay) + set_tsk_need_resched(current); + if (IS_ENABLED(CONFIG_PROVE_LOCKING)) { if (WARN(irqs_disabled(), "syscall %lu left IRQs disabled", nr)) local_irq_enable(); @@ -411,7 +420,7 @@ static __always_inline void syscall_exit_to_user_mode_w= ork(struct pt_regs *regs) if (unlikely(work & SYSCALL_WORK_EXIT)) syscall_exit_work(regs, work); local_irq_disable_exit_to_user(); - exit_to_user_mode_prepare(regs); + exit_to_user_mode_prepare(regs, false); } =20 /** diff --git a/include/linux/sched.h b/include/linux/sched.h index 5bcf44ae6c79..9b4670d85131 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -338,6 +338,7 @@ extern int __must_check io_schedule_prepare(void); extern void io_schedule_finish(int token); extern long io_schedule_timeout(long timeout); extern void io_schedule(void); +extern void hrtick_local_start(u64 delay); =20 /* wrapper function to trace from this header file */ DECLARE_TRACEPOINT(sched_set_state_tp); @@ -1263,6 +1264,7 @@ struct task_struct { int softirq_context; int irq_config; #endif + unsigned sched_time_delay:1; #ifdef CONFIG_PREEMPT_RT int softirq_disable_cnt; #endif @@ -2245,6 +2247,20 @@ static inline bool owner_on_cpu(struct task_struct *= owner) unsigned long sched_cpu_util(int cpu); #endif /* CONFIG_SMP */ =20 +#ifdef CONFIG_RSEQ + +extern bool rseq_delay_resched(void); +extern void rseq_delay_resched_fini(void); +extern void rseq_delay_resched_tick(void); + +#else + +static inline bool rseq_delay_resched(void) { return false; } +static inline void rseq_delay_resched_fini(void) { } +static inline void rseq_delay_resched_tick(void) { } + +#endif + #ifdef CONFIG_SCHED_CORE extern void sched_core_free(struct task_struct *tsk); extern void sched_core_fork(struct task_struct *p); diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index c233aae5eac9..25fc636b17d5 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -26,6 +26,7 @@ enum rseq_cs_flags_bit { RSEQ_CS_FLAG_NO_RESTART_ON_PREEMPT_BIT =3D 0, RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT =3D 1, RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT =3D 2, + RSEQ_CS_FLAG_DELAY_RESCHED_BIT =3D 3, }; =20 enum rseq_cs_flags { @@ -35,6 +36,8 @@ enum rseq_cs_flags { (1U << RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT), RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE =3D (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT), + RSEQ_CS_FLAG_DELAY_RESCHED =3D + (1U << RSEQ_CS_FLAG_DELAY_RESCHED_BIT), }; =20 /* @@ -128,6 +131,10 @@ struct rseq { * - RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE * Inhibit instruction sequence block restart on migration for * this thread. + * - RSEQ_CS_FLAG_DELAY_RESCHED + * Request by user thread to delay preemption. With use + * of a timer, kernel grants extra cpu time upto 30us for this + * thread before being rescheduled. */ __u32 flags; =20 diff --git a/kernel/entry/common.c b/kernel/entry/common.c index a8dd1f27417c..8769c3592e26 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -88,7 +88,8 @@ void __weak arch_do_signal_or_restart(struct pt_regs *reg= s) { } * @ti_work: TIF work flags as read by the caller */ __always_inline unsigned long exit_to_user_mode_loop(struct pt_regs *regs, - unsigned long ti_work) + unsigned long ti_work, + bool irq) { /* * Before returning to user space ensure that all pending work @@ -98,8 +99,12 @@ __always_inline unsigned long exit_to_user_mode_loop(str= uct pt_regs *regs, =20 local_irq_enable_exit_to_user(ti_work); =20 - if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) - schedule(); + if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) { + if (irq && rseq_delay_resched()) + clear_tsk_need_resched(current); + else + schedule(); + } =20 if (ti_work & _TIF_UPROBE) uprobe_notify_resume(regs); @@ -181,7 +186,7 @@ noinstr void irqentry_enter_from_user_mode(struct pt_re= gs *regs) noinstr void irqentry_exit_to_user_mode(struct pt_regs *regs) { instrumentation_begin(); - exit_to_user_mode_prepare(regs); + exit_to_user_mode_prepare(regs, true); instrumentation_end(); exit_to_user_mode(); } diff --git a/kernel/rseq.c b/kernel/rseq.c index b7a1ec327e81..dba44ca9f624 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -448,6 +448,62 @@ void __rseq_handle_notify_resume(struct ksignal *ksig,= struct pt_regs *regs) force_sigsegv(sig); } =20 +bool rseq_delay_resched(void) +{ + struct task_struct *t =3D current; + u32 flags; + + if (!IS_ENABLED(CONFIG_SCHED_HRTICK)) + return false; + + if (!t->rseq) + return false; + + if (t->sched_time_delay) + return false; + + if (copy_from_user_nofault(&flags, &t->rseq->flags, sizeof(flags))) + return false; + + if (!(flags & RSEQ_CS_FLAG_DELAY_RESCHED)) + return false; + + flags &=3D ~RSEQ_CS_FLAG_DELAY_RESCHED; + if (copy_to_user_nofault(&t->rseq->flags, &flags, sizeof(flags))) + return false; + + t->sched_time_delay =3D 1; + + return true; +} + +void rseq_delay_resched_fini(void) +{ +#ifdef CONFIG_SCHED_HRTICK + extern void hrtick_local_start(u64 delay); + struct task_struct *t =3D current; + /* + * IRQs off, guaranteed to return to userspace, start timer on this CPU + * to limit the resched-overdraft. + * + * If your critical section is longer than 30 us you get to keep the + * pieces. + */ + if (t->sched_time_delay) + hrtick_local_start(30 * NSEC_PER_USEC); +#endif +} + +void rseq_delay_resched_tick(void) +{ +#ifdef CONFIG_SCHED_HRTICK + struct task_struct *t =3D current; + + if (t->sched_time_delay) + set_tsk_need_resched(t); +#endif +} + #ifdef CONFIG_DEBUG_RSEQ =20 /* diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4ad7cf3cfdca..c1b64879115f 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -845,6 +845,8 @@ static enum hrtimer_restart hrtick(struct hrtimer *time= r) =20 WARN_ON_ONCE(cpu_of(rq) !=3D smp_processor_id()); =20 + rseq_delay_resched_tick(); + rq_lock(rq, &rf); update_rq_clock(rq); rq->donor->sched_class->task_tick(rq, rq->curr, 1); @@ -918,6 +920,16 @@ void hrtick_start(struct rq *rq, u64 delay) =20 #endif /* CONFIG_SMP */ =20 +void hrtick_local_start(u64 delay) +{ + struct rq *rq =3D this_rq(); + struct rq_flags rf; + + rq_lock(rq, &rf); + hrtick_start(rq, delay); + rq_unlock(rq, &rf); +} + static void hrtick_rq_init(struct rq *rq) { #ifdef CONFIG_SMP @@ -6740,6 +6752,8 @@ static void __sched notrace __schedule(int sched_mode) picked: clear_tsk_need_resched(prev); clear_preempt_need_resched(); + if (IS_ENABLED(CONFIG_RSEQ)) + prev->sched_time_delay =3D 0; rq->last_seen_need_resched_ns =3D 0; =20 is_switch =3D prev !=3D next; diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c index ee5641757838..d9a4e3a2e064 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -1379,6 +1379,11 @@ static void do_sched_yield(void) */ SYSCALL_DEFINE0(sched_yield) { + if (IS_ENABLED(CONFIG_RSEQ) && current->sched_time_delay) { + schedule(); + return 0; + } + do_sched_yield(); return 0; } --=20 2.43.5 From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05F3186328 for ; Tue, 1 Jul 2025 00:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; cv=none; b=F0IXHDd1AIcoO4D5IpIoXK4pfk4QzUulc4/IMEI2d4T3qF98ENf01cB8Q7ydYZjz+mcGpY4SjEvqkI0j1qacRpsjoy7A8vF63f4cIjJDG3vpOo/k7/+3cbDlCjz/+i/TwqOWT4G6SQttWNaWCW/iyZC/JRt7oOyzr4PHQIG9eTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; c=relaxed/simple; bh=cB+AyQBm3Vfw1IrDC1azeCRsmvjxinflrt0ymlU5Yrk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IyhJP7zSwTmZOjrsOgXDde/bzuSQorFjjfjF+l5BbY+bS/vAursJzumB7mFdayvMly/cYIZxQ4qH8c+kHCdEGeNTgOYRLk4x1/JnQJWCOo8cO2Z7R2gLTt65l1Bw9ot1KWoRAHQKjjVR0ld5o9CaG23MxDaIO+7eDQFONW9Sox8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=gMPBJMUU; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="gMPBJMUU" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UIBxpL003650; Tue, 1 Jul 2025 00:38:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=FsY2D KKLC/0tkiNL1jCbJcYDiNBCsD6bXamS8zhaBV0=; b=gMPBJMUUb8jcKH8qPTgiK TX4IzAWpNYjcCDFJm7aXBAntmr9pLpi/lW8YkigvPREmuDjb9MJbil9lS7ZKuzjk ExMITAgLT9Rzyah/hsPGJsL76v6ha2IgVEJLXSaJOg4VswY2GRFqT0j1gkM/UywO h6rwaW3jEWCDJUUi5bmmfexRmyfT85UHZHcB4wVT6QpDBu1XmmxUsE43fvkFpuz6 yVOhivleryLwCsMRHAOA4NDtEldyszLGOpSHMSp48NIKWcLR15PPG3sD2GcKecjf D652uvbGwyIRA7JP/vqWsoEqorNdlqr2jRxZZiGuAX6yH6DHZ2BG52fCGhTgAqrH Q== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j80w3k31-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:08 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNY009139; Tue, 1 Jul 2025 00:38:07 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:07 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 2/7] Sched: Indicate if thread got rescheduled Date: Tue, 1 Jul 2025 00:37:44 +0000 Message-ID: <20250701003749.50525-3-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Proofpoint-GUID: rlaOoYskALshdZfrp_gZQ07_gQ9Fv-4a X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfXy9e0Tb92UX8i QAsGFTYCOMiCo9tZJYdOJDOf+2SnIXSlhPVQB+/P9+jkP4bdNWC3Gai3Wfs5+ca6jW3edKGZZKB F4lUz/zTqm797RvKW9KSNCFKrNRYG5tiJcsgG+AiFlK3/je3c+mmAEG1kjhP8vFoluV1tEVIT8V TU29wBCvIuB/8REO8UvRRk5EsjxRbP3O5tEYJTXvXo5XB6SpkLkeJHqdAFnbkxd1QOl5iL8ksjd 7b0eV6NfAR5ZZ6sYC9E139g1+oGaJFl2Ylw8wEau4yXAKSomIFEuCGtai2QnhQIOgjSu7XZZied emiZUfYTqi8Kbby88lMI5NtEOc78YxgKBaPnoxh+CUo6MXGkTnv8uU+xb7kErl/cj/cRNTeaZ5L ch5IplX0tLADdFDvyTWUCyrFajrr0co0REaQZCm+7cFfR6heduaUTbOLI6sjRbzoT8kz4A/l X-Authority-Analysis: v=2.4 cv=D6hHKuRj c=1 sm=1 tr=0 ts=68632df0 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=qx7APbdOUbj-W9D39agA:9 cc=ntf awl=host:14723 X-Proofpoint-ORIG-GUID: rlaOoYskALshdZfrp_gZQ07_gQ9Fv-4a Content-Type: text/plain; charset="utf-8" Use a bit in rseq flags to indicate if the thread got rescheduled after the cpu time extension was graned. The user thread can check this flag before calling sched_yield() to yield the cpu. Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 2 ++ include/uapi/linux/rseq.h | 10 ++++++++++ kernel/rseq.c | 19 +++++++++++++++++++ kernel/sched/core.c | 3 +-- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/include/linux/sched.h b/include/linux/sched.h index 9b4670d85131..0a6d564d2745 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -2252,12 +2252,14 @@ unsigned long sched_cpu_util(int cpu); extern bool rseq_delay_resched(void); extern void rseq_delay_resched_fini(void); extern void rseq_delay_resched_tick(void); +extern void rseq_delay_schedule(struct task_struct *tsk); =20 #else =20 static inline bool rseq_delay_resched(void) { return false; } static inline void rseq_delay_resched_fini(void) { } static inline void rseq_delay_resched_tick(void) { } +static inline void rseq_delay_schedule(struct task_struct *tsk) { } =20 #endif =20 diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index 25fc636b17d5..f4813d931387 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -27,6 +27,7 @@ enum rseq_cs_flags_bit { RSEQ_CS_FLAG_NO_RESTART_ON_SIGNAL_BIT =3D 1, RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT =3D 2, RSEQ_CS_FLAG_DELAY_RESCHED_BIT =3D 3, + RSEQ_CS_FLAG_RESCHEDULED_BIT =3D 4, }; =20 enum rseq_cs_flags { @@ -38,6 +39,9 @@ enum rseq_cs_flags { (1U << RSEQ_CS_FLAG_NO_RESTART_ON_MIGRATE_BIT), RSEQ_CS_FLAG_DELAY_RESCHED =3D (1U << RSEQ_CS_FLAG_DELAY_RESCHED_BIT), + RSEQ_CS_FLAG_RESCHEDULED =3D + (1U << RSEQ_CS_FLAG_RESCHEDULED_BIT), + }; =20 /* @@ -135,6 +139,12 @@ struct rseq { * Request by user thread to delay preemption. With use * of a timer, kernel grants extra cpu time upto 30us for this * thread before being rescheduled. + * - RSEQ_CS_FLAG_RESCHEDULED + * Set by kernel if the thread was rescheduled in the extra time + * granted due to request RSEQ_CS_DELAY_RESCHED. This bit is + * checked by the thread before calling sched_yield() to yield + * cpu. User thread sets this bit to 0, when setting + * RSEQ_CS_DELAY_RESCHED to request preemption delay. */ __u32 flags; =20 diff --git a/kernel/rseq.c b/kernel/rseq.c index dba44ca9f624..eb20622634ef 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -504,6 +504,25 @@ void rseq_delay_resched_tick(void) #endif } =20 +void rseq_delay_schedule(struct task_struct *tsk) +{ +#ifdef CONFIG_SCHED_HRTICK + u32 flags; + + if (tsk->sched_time_delay) { + tsk->sched_time_delay =3D 0; + if (!tsk->rseq) + return; + if (copy_from_user_nofault(&flags, &tsk->rseq->flags, + sizeof(flags))) + return; + flags |=3D RSEQ_CS_FLAG_RESCHEDULED; + copy_to_user_nofault(&tsk->rseq->flags, &flags, + sizeof(flags)); + } +#endif +} + #ifdef CONFIG_DEBUG_RSEQ =20 /* diff --git a/kernel/sched/core.c b/kernel/sched/core.c index c1b64879115f..e163822d5381 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6752,8 +6752,7 @@ static void __sched notrace __schedule(int sched_mode) picked: clear_tsk_need_resched(prev); clear_preempt_need_resched(); - if (IS_ENABLED(CONFIG_RSEQ)) - prev->sched_time_delay =3D 0; + rseq_delay_schedule(prev); rq->last_seen_need_resched_ns =3D 0; =20 is_switch =3D prev !=3D next; --=20 2.43.5 From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C6FC469D for ; Tue, 1 Jul 2025 00:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330319; cv=none; b=hvwH78yXdkgW6m3ChSf8/2o2l9M/KWqHcpFtu59FT6HqWkbDPNoE9oaPE8rbiGpHG68fYHo7GRoDic5gmxzJOmZwCBImK55TGmakWh2cerFDmkc2pN1A6waSClLZ4HFN9RE0x6e0ccLoaU7MhFKxJDOwAYoYk6xHsYrvWOunlZs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330319; c=relaxed/simple; bh=0N+geEJZC9bxJsprhJXBQmWk03ePIjN+UbskQ8v6fXc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JGLs/tX04Zn7dk+fRv36/ea0EKA4lV1PYJq5MChcsUAEa79/Ns2CYPlmqDeHpQGve/ALq8DcxlMWu5bNfkb8M6rOikiHGP7Ji0eu9yiUajzmIbV9VFrCivwsllV+UQdir/QHIsssqPtzfvl3qaOwxWuVhE2YhOkkuYVnOR38xX8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=UHg1KOYB; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="UHg1KOYB" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UIBx3d012330; Tue, 1 Jul 2025 00:38:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=k+YGq wjnxQblgAVUYVpPFdXsdNqALvGFMzuBJFXvJm4=; b=UHg1KOYB/q+w4/UDnS+Bx v+oLzU5e4gOYbaIa9txJG1t6/kCUQPf6RGNE3ZihIw7a/DJwgGv3/rxKU9Bew7LY k4riKaQgoMGuWj8kvX+kRQrw6uPuTR8/OvIyhXptA04cpUf+cwf+D2gGx2KZEtSh BA+BY+ECQbJZm9hA0Eow6edt1HjBa2S7nPZAZ5CNn6TnAjZosx+41SKiaPGwq95K wHX7/845QGe64CqyD/5XcDenP48KGojWmd2TodmGccuZXsTAEclZ/qsrwHq2r7Bx y4KROaRpiYEnwW43ChzQoEIdTXooHy1uOdiRGRaU6JCYENGhYYKvPIahd59DfBle w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j6tfbkvw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:08 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNZ009139; Tue, 1 Jul 2025 00:38:08 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:07 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 3/7] Sched: Tunable to specify duration of time slice extension Date: Tue, 1 Jul 2025 00:37:45 +0000 Message-ID: <20250701003749.50525-4-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Authority-Analysis: v=2.4 cv=CMMqXQrD c=1 sm=1 tr=0 ts=68632df0 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=p7qRMtwlg9ZQNcIIFPQA:9 cc=ntf awl=host:14723 X-Proofpoint-GUID: arnoM5LtkQM_lMdmb62Rv17LFT97urPj X-Proofpoint-ORIG-GUID: arnoM5LtkQM_lMdmb62Rv17LFT97urPj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfX/j5YKwae8K3/ pyGqJK92QgIfKVEyfG3Y2VvnRif9aFYS60+vg06H2sIhZzHEXE2/sD2O+noV6kH6+FksSJIPuRE ncWyElXSsBp694oSTO7pYvkarKfe/Etxx/gfn6dGNBSsDbX72A7y58vocitLZtDmRXPWQcyjdN7 B+suHo0+Ag01wCmR9vDKHo69rPXuMBEuiv3GQnDE7fWbsy56ihuB3XLZ+4xRDILlC41Rbjl5h1i 6Acyfipco9UmnSL2Hais5dDrqkDlox+VndJqwCGGsdjK+L/7hEhMK1BVQt59ie2vHwU2rIgi2SF axIsTfVS0RTGVo7rD2w8PQVbLXf/qzOw2gZPvDIZkDKqp4pRrDhkUd8+ZbYQ1P+aVrElPtukXDv 5eFJTUFwm8lKajvsWDsJAPifeCitRk/cBtIOFNVep9bX9E85XHbyWRPuUPI+waORtC4k3Tkx Content-Type: text/plain; charset="utf-8" Add a tunable to specify duration of scheduler time slice extension. The default will be set to 30us and the max value that can be specified is 100us. Setting it to 0, disables scheduler time slice extension. Signed-off-by: Prakash Sangappa --- v5 -> v6 - Added documentation for tunable 'sysctl_sched_preempt_delay_us'. --- .../admin-guide/kernel-parameters.txt | 8 ++++ include/linux/sched.h | 5 +++ include/uapi/linux/rseq.h | 5 ++- kernel/rseq.c | 7 +++- kernel/sched/core.c | 40 +++++++++++++++++++ 5 files changed, 61 insertions(+), 4 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 0ee6c5314637..1e0f86cda0db 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -6398,6 +6398,14 @@ =20 sched_verbose [KNL,EARLY] Enables verbose scheduler debug messages. =20 + sched_preempt_delay_us=3D [KNL] + Scheduler preemption delay in microseconds. + Allowed range is 0 to 100us. A thread can request + extending its scheduler time slice on the cpu by + delaying preemption. Duration of preemption delay + granted is specified by this parameter. Setting it + to 0 will disable this feature. + schedstats=3D [KNL,X86] Enable or disable scheduled statistics. Allowed values are enable and disable. This feature incurs a small amount of overhead in the scheduler diff --git a/include/linux/sched.h b/include/linux/sched.h index 0a6d564d2745..a0661f1d423b 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -406,6 +406,11 @@ static inline void sched_domains_mutex_lock(void) { } static inline void sched_domains_mutex_unlock(void) { } #endif =20 +#ifdef CONFIG_RSEQ +/* Scheduler time slice extension */ +extern unsigned int sysctl_sched_preempt_delay_us; +#endif + struct sched_param { int sched_priority; }; diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index f4813d931387..015534f064af 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -137,8 +137,9 @@ struct rseq { * this thread. * - RSEQ_CS_FLAG_DELAY_RESCHED * Request by user thread to delay preemption. With use - * of a timer, kernel grants extra cpu time upto 30us for this - * thread before being rescheduled. + * of a timer, kernel grants extra cpu time upto the tunable + * 'sched_preempt_delay_us' value for this thread before it gets + * rescheduled. * - RSEQ_CS_FLAG_RESCHEDULED * Set by kernel if the thread was rescheduled in the extra time * granted due to request RSEQ_CS_DELAY_RESCHED. This bit is diff --git a/kernel/rseq.c b/kernel/rseq.c index eb20622634ef..545123ca60b0 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -456,6 +456,8 @@ bool rseq_delay_resched(void) if (!IS_ENABLED(CONFIG_SCHED_HRTICK)) return false; =20 + if (!sysctl_sched_preempt_delay_us) + return false; if (!t->rseq) return false; =20 @@ -489,8 +491,9 @@ void rseq_delay_resched_fini(void) * If your critical section is longer than 30 us you get to keep the * pieces. */ - if (t->sched_time_delay) - hrtick_local_start(30 * NSEC_PER_USEC); + if (sysctl_sched_preempt_delay_us && t->sched_time_delay) + hrtick_local_start(sysctl_sched_preempt_delay_us * + NSEC_PER_USEC); #endif } =20 diff --git a/kernel/sched/core.c b/kernel/sched/core.c index e163822d5381..6d50eff9be8c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -149,6 +149,17 @@ __read_mostly int sysctl_resched_latency_warn_once =3D= 1; */ __read_mostly unsigned int sysctl_sched_nr_migrate =3D SCHED_NR_MIGRATE_BR= EAK; =20 +#ifdef CONFIG_RSEQ +/* + * Scheduler time slice extension, duration in microsecs. + * Max value allowed 100us, default is 30us. + * If set to 0, scheduler time slice extension is disabled. + */ +#define SCHED_PREEMPT_DELAY_DEFAULT_US 30 +__read_mostly unsigned int sysctl_sched_preempt_delay_us =3D + SCHED_PREEMPT_DELAY_DEFAULT_US; +#endif + __read_mostly int scheduler_running; =20 #ifdef CONFIG_SCHED_CORE @@ -4678,6 +4689,24 @@ static int sysctl_schedstats(const struct ctl_table = *table, int write, void *buf #endif /* CONFIG_PROC_SYSCTL */ #endif /* CONFIG_SCHEDSTATS */ =20 +#ifdef CONFIG_PROC_SYSCTL +#ifdef CONFIG_RSEQ +static int sysctl_sched_preempt_delay(const struct ctl_table *table, int w= rite, + void *buffer, size_t *lenp, loff_t *ppos) +{ + int err; + + err =3D proc_dointvec_minmax(table, write, buffer, lenp, ppos); + if (err < 0) + return err; + if (sysctl_sched_preempt_delay_us > SCHED_PREEMPT_DELAY_DEFAULT_US) + pr_warn("Sched preemption delay time set higher then default value %d us= \n", + SCHED_PREEMPT_DELAY_DEFAULT_US); + return err; +} +#endif /* CONFIG_RSEQ */ +#endif /* CONFIG_PROC_SYSCTL */ + #ifdef CONFIG_SYSCTL static const struct ctl_table sched_core_sysctls[] =3D { #ifdef CONFIG_SCHEDSTATS @@ -4725,6 +4754,17 @@ static const struct ctl_table sched_core_sysctls[] = =3D { .extra2 =3D SYSCTL_FOUR, }, #endif /* CONFIG_NUMA_BALANCING */ +#ifdef CONFIG_RSEQ + { + .procname =3D "sched_preempt_delay_us", + .data =3D &sysctl_sched_preempt_delay_us, + .maxlen =3D sizeof(unsigned int), + .mode =3D 0644, + .proc_handler =3D sysctl_sched_preempt_delay, + .extra1 =3D SYSCTL_ZERO, + .extra2 =3D SYSCTL_ONE_HUNDRED, + }, +#endif /* CONFIG_RSEQ */ }; static int __init sched_core_sysctl_init(void) { --=20 2.43.5 From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05F7A12D1F1 for ; Tue, 1 Jul 2025 00:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330321; cv=none; b=q98Sy12KkIt4GgdywmOyZIce4xpg4wSaIV0QuEoLxnHckbTjRIPh9aPZxhnEkPokFWKraYS1E9Hc/xwZX0qZmfgPvRKe+Cb6xWwIM2FsBUvQaiiLznYRsCX32AgtSJoWRsIVwH/LuJzJG2TbxXA41IHtB5SlMAjrFkWwafb8CnQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330321; c=relaxed/simple; bh=EZlHI3AyZZK47wa6IArP7bBLMoai9emuvFkF8uXxd2A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q/Nv1D23MZcrBehrKy8YiTQD8rYlRmnnn8czR19QGDcujJM42uTCb9qF5lX9qvg0J3wt3bEWlpesniwrbx9kajdqbq2aDfkdSvEcLEhF7lDrxW/g9OPh8wXXRHaecCN5EAPyANYt+UVrrDTPuvHSvwLM0RQG8iMYqHDSQnALVjg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Pn13kk2Q; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Pn13kk2Q" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UIC8cN003843; Tue, 1 Jul 2025 00:38:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=r/TQj 5217mubelqEr+IAQuWUykYsQHPEzX3vIPhbFlY=; b=Pn13kk2Q73GG1se65q79O 938B+LAjrrx4LK8zSMJdqecTapMjVCL8mHN2s/lug8AGXNYDOHWbtEGok7bYvWiE LE5sKPr76e+bjAkfcNpCiAp+oxfMSqDus3Ila7+RRpvkPF0JBWvOOsdFR1//KfDk G9JGZuf2w9knIpf8AuCqkZC05S81u85xaENXlqyQiNjeBB28ltzBPh5IMu5Z44CJ G6kPv2zW7byou4mbMujwGEZCvBx3DHnEJs1b2Bb6wA6EBRdVNJxludC2p7fCnjmj ukSdyzY5A88pC3NBUL2Dgkg/E/6xE185VTx9nweGi+3+Q1w2YGNAxiAGpfbFMtxH g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j80w3k32-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:08 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNa009139; Tue, 1 Jul 2025 00:38:08 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-5 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:08 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 4/7] Sched: Add scheduler stat for cpu time slice extension Date: Tue, 1 Jul 2025 00:37:46 +0000 Message-ID: <20250701003749.50525-5-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Proofpoint-GUID: iFKrfZETNWp0LnT9hczTZXNzD0sgkYJj X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfX6EsREupSKwA0 Drx+r75NOoVpqcpQFUrlPT/h8G6HsY3O+c0qrUC9TgzLAfNiLBVsnxQGiPydCe3cndjXwHjyYuv v1lApPWqhGKnTs7D6W7KcHo0ZaK1u8tXnvzomTm0gshY7rDR19MMbr61qyMllhtC7hymoyUipYi cGdN1/g+MjyvQnNNrtWLaRloImWmu56yt/0d/EuegbIkq8z0Jr1nkPaasibo1Fhv/b3hz0rHGBh gy8bV3azBEN4H+TtqX/mRJzMRxoXdHn20zCqucu5IMSwno74x7h7AmxeV7Qsqxa0p47SzNYYZLv vxEDCF3uBtkXezYh6WoSnpvWB5SrVIf+o6ZUDJLsL8yQiwXh3WmTDq1dJ62nRifAHWTUNY+bWUM 1ue4F4zvZwdbvpoGNXo1I99Ofb7g7mvwy+E1vXVKrbseoUW6MwP9tlhOlnvvjYla1xnBS1Tk X-Authority-Analysis: v=2.4 cv=D6hHKuRj c=1 sm=1 tr=0 ts=68632df1 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=OT5oSfvlyc5tXnlsM0wA:9 cc=ntf awl=host:14723 X-Proofpoint-ORIG-GUID: iFKrfZETNWp0LnT9hczTZXNzD0sgkYJj Content-Type: text/plain; charset="utf-8" Add scheduler stat to record number of times the thread was granted cpu time slice extension. Signed-off-by: Prakash Sangappa --- include/linux/sched.h | 7 +++++++ kernel/rseq.c | 1 + kernel/sched/core.c | 7 +++++++ kernel/sched/debug.c | 4 ++++ 4 files changed, 19 insertions(+) diff --git a/include/linux/sched.h b/include/linux/sched.h index a0661f1d423b..90d7989a0185 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -339,6 +339,9 @@ extern void io_schedule_finish(int token); extern long io_schedule_timeout(long timeout); extern void io_schedule(void); extern void hrtick_local_start(u64 delay); +#ifdef CONFIG_RSEQ +extern void update_stat_preempt_delayed(struct task_struct *t); +#endif =20 /* wrapper function to trace from this header file */ DECLARE_TRACEPOINT(sched_set_state_tp); @@ -569,6 +572,10 @@ struct sched_statistics { u64 nr_wakeups_passive; u64 nr_wakeups_idle; =20 +#ifdef CONFIG_RSEQ + u64 nr_preempt_delay_granted; +#endif + #ifdef CONFIG_SCHED_CORE u64 core_forceidle_sum; #endif diff --git a/kernel/rseq.c b/kernel/rseq.c index 545123ca60b0..99aa263c3a07 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -475,6 +475,7 @@ bool rseq_delay_resched(void) return false; =20 t->sched_time_delay =3D 1; + update_stat_preempt_delayed(t); =20 return true; } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 6d50eff9be8c..fd572053a955 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -941,6 +941,13 @@ void hrtick_local_start(u64 delay) rq_unlock(rq, &rf); } =20 +#ifdef CONFIG_RSEQ +void update_stat_preempt_delayed(struct task_struct *t) +{ + schedstat_inc(t->stats.nr_preempt_delay_granted); +} +#endif + static void hrtick_rq_init(struct rq *rq) { #ifdef CONFIG_SMP diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 9135d5c2edea..3a2efd9505e1 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1225,6 +1225,10 @@ void proc_sched_show_task(struct task_struct *p, str= uct pid_namespace *ns, P_SCHEDSTAT(nr_wakeups_passive); P_SCHEDSTAT(nr_wakeups_idle); =20 +#ifdef CONFIG_RSEQ + P_SCHEDSTAT(nr_preempt_delay_granted); +#endif + avg_atom =3D p->se.sum_exec_runtime; if (nr_switches) avg_atom =3D div64_ul(avg_atom, nr_switches); --=20 2.43.5 From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05FC1136352 for ; Tue, 1 Jul 2025 00:38:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; cv=none; b=MJv6cZ+s7H4Cvg8ihWUi2gb+t9fZGfYKow5wTh6SEQG/5a6Y7VlyQrm2Teej56f+HIVkAdmqw+0GFl2R2c0gdaNvjBUgFaZM+oZiktEa3mh/ceSiTpPJRDxzULVngPbxHOPXTps+qj6aWLEMrMNmlBkrVRl0hWyai3lKMjrJi/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; c=relaxed/simple; bh=IRnyvt+7jl3BW7QGojcwKSgx4PX0gGxlwsOqFULkOR8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tM+QITlkRBLZEor7OMUWnU/0QyTfPQO5MZnEMZyHlPPxWzBlvmZ03SxZUnlk4eVn5vGAfixXTGlUtvJyCmTIR+RxrYZP0VLDJh2NS+CZuk6s0V7fqCooOJpVk9kG91UX20KU+8RW3fEqFKnp/T7Wj+S+NF5z5R35HxCReP9evIA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=RD5+D9Ql; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="RD5+D9Ql" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UICIeN013322; Tue, 1 Jul 2025 00:38:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=suaLR 58JSndY28lBIAWZHxUetHyvOEwZ6/3F7a6zJdg=; b=RD5+D9QlchJpwjpf2bqiB 3/lHylW5WIMJjUCIDKy3t08ik9V48Sh0eiKbvPUGS7x30uYJKBHJgw0uaJ3hEL49 iQxtbjYu20WUiB9/tIhsh2u70y1rvkMDa12NrYHl80UGtOR5TiHIrwa/qD41UvC6 PX3f6YihE3MASi1ae1z0doUxh5G2hF3zCyJXpAwafWQwRoz6YL252ebf4/CgUe5o cVuFyXoNrNLQxofRINzwtouzHTQcAZnMSNaaIOlPe+g+dbv5bJ+aL5t1GMEp/PX+ XsroNhJgvqGacS+ATO7ZjEQK594PO6wwu2p/hcHnHB2JOvtrWcSwbkOvfj/ZNmKx g== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j6tfbkvx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:09 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNb009139; Tue, 1 Jul 2025 00:38:08 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-6 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:08 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 5/7] Sched: Add tracepoint for sched time slice extension Date: Tue, 1 Jul 2025 00:37:47 +0000 Message-ID: <20250701003749.50525-6-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Authority-Analysis: v=2.4 cv=CMMqXQrD c=1 sm=1 tr=0 ts=68632df1 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=iS32z0vWAbCrL6C1AdEA:9 cc=ntf awl=host:14723 X-Proofpoint-GUID: kNcHrIudpwk8ewwSpiqmBMPaBPw9ypKL X-Proofpoint-ORIG-GUID: kNcHrIudpwk8ewwSpiqmBMPaBPw9ypKL X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfX6LUWlgMM7IvE 3Ewirw4HZ1bajTPlayYTUGC3s9fkziyqKFXylmh5iHPqCJXhzJgHHUXkufV1codD9xNmAKt2Njm YyHeVuVSttQuc710x5+r1tMOGl18K6+i2uJdwm7vGt9u71DjyyzOcqM+fXt+ksK4kHeO6/OEA4Q FINk3AeME6Ma49pCDPELoP+LrLe1d3jk3PpJYwW4RC4dKLvn3OhYAiDQ+vSlOayhS/jUdB7yMhx filRADbDsIfqIgQyQWLiDxHI9XbV4RuABLWZVnO4KjsU4hTrx1dMRopzPdsVd8rHNcDAIvV1Uw/ PToFs0YP/A9xRHvYrCZS8g0DrpERjD5NLET0D/uQYYzu5Z7GX2mkge3cR1rAlJDFRng5FUkhpmE 8qLPUzb0pOo7Bn/+AbbJLFfjHC54/JYXX2lnHwdFBedG6P1wI+vuIr1J+CWHJWhOJHDs4bEw Content-Type: text/plain; charset="utf-8" Trace thread's preemption getting delayed. Which can occur if the running thread requested extra time on cpu. Also, indicate the NEED_RESCHED flag, that is set on the thread, getting cleared. Suggested-by: Sebastian Andrzej Siewior Signed-off-by: Prakash Sangappa --- v5 -> v6 - Changed tracepoint to tracepoint condition. --- include/trace/events/sched.h | 31 +++++++++++++++++++++++++++++++ kernel/entry/common.c | 10 ++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/include/trace/events/sched.h b/include/trace/events/sched.h index 4e6b2910cec3..a4846579f377 100644 --- a/include/trace/events/sched.h +++ b/include/trace/events/sched.h @@ -296,6 +296,37 @@ TRACE_EVENT(sched_migrate_task, __entry->orig_cpu, __entry->dest_cpu) ); =20 +/* + * Tracepoint for delayed resched requested by task: + */ +TRACE_EVENT_CONDITION(sched_delay_resched, + + TP_PROTO(struct task_struct *p, unsigned int ti_work_cleared), + + TP_ARGS(p, ti_work_cleared), + + TP_CONDITION(ti_work_cleared), + + TP_STRUCT__entry( + __array( char, comm, TASK_COMM_LEN ) + __field( pid_t, pid ) + __field( int, cpu ) + __field( int, flg ) + ), + + TP_fast_assign( + memcpy(__entry->comm, p->comm, TASK_COMM_LEN); + __entry->pid =3D p->pid; + __entry->cpu =3D task_cpu(p); + __entry->flg =3D ti_work_cleared & (_TIF_NEED_RESCHED | + _TIF_NEED_RESCHED_LAZY); + ), + + TP_printk("comm=3D%s pid=3D%d cpu=3D%d resched_flg_cleared=3D0x%x", + __entry->comm, __entry->pid, __entry->cpu, __entry->flg) + +); + DECLARE_EVENT_CLASS(sched_process_template, =20 TP_PROTO(struct task_struct *p), diff --git a/kernel/entry/common.c b/kernel/entry/common.c index 8769c3592e26..ca3c91f0ea99 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c @@ -12,6 +12,7 @@ =20 #include "common.h" =20 +#include #define CREATE_TRACE_POINTS #include =20 @@ -91,6 +92,7 @@ __always_inline unsigned long exit_to_user_mode_loop(stru= ct pt_regs *regs, unsigned long ti_work, bool irq) { + unsigned long ti_work_cleared =3D 0; /* * Before returning to user space ensure that all pending work * items have been completed. @@ -100,10 +102,12 @@ __always_inline unsigned long exit_to_user_mode_loop(= struct pt_regs *regs, local_irq_enable_exit_to_user(ti_work); =20 if (ti_work & (_TIF_NEED_RESCHED | _TIF_NEED_RESCHED_LAZY)) { - if (irq && rseq_delay_resched()) + if (irq && rseq_delay_resched()) { clear_tsk_need_resched(current); - else + ti_work_cleared =3D ti_work; + } else { schedule(); + } } =20 if (ti_work & _TIF_UPROBE) @@ -134,6 +138,8 @@ __always_inline unsigned long exit_to_user_mode_loop(st= ruct pt_regs *regs, ti_work =3D read_thread_flags(); } =20 + trace_sched_delay_resched(current, ti_work_cleared); + /* Return the latest work state for arch_exit_to_user_mode() */ return ti_work; } --=20 2.43.5 From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0600013B58C for ; Tue, 1 Jul 2025 00:38:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; cv=none; b=qzEysD1+0hPvTzUJfRGAn0HqDUpy8uYXFsjqba4Y3JUVOGaq4OUro2G6hItuxEEWfIRvJLM/XAdXjOd/WF0xXXNnDb4URgfGGpQz1kNFMcMePm4fFua/pufhVK53vuspRWBWISy6qMhRLipXEP5388muVVxFnoXVMQocfQ+cXpQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330320; c=relaxed/simple; bh=JmIFNVOCR4f+zxjdByCuOfbZcElgnNMfOwmqmNcdgQU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=offsW6kKBZ2zlppdzGQnBENUJXsCS2XaFQL2dTnsnGxbXfQrUayNyEK7Xfw1Jt0v78JtXquNqo7yxLXH2y7TZLkDe7OILsIVbvHKi/17ksUwwhoJwR/K30QSaKTnkN1vegAhTC1EDzs0M55XyradA+N4U/SqtHpvXZmN7PgLPEI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=PJ7ylUsd; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="PJ7ylUsd" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UIBu7S008757; Tue, 1 Jul 2025 00:38:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=W9q+f pNkcPhzhcIY94lwtSqZPlyU3ObG42XmnMIrhc0=; b=PJ7ylUsdHILznrnRVmghk FRPApsv11oY7534g/MmSFY4/0AJpvrWKvl9+JApj2bq/qSwqevjgdx+ZuWOmSv/8 mYDPmfFXFFg4wnH6RyAlUfdG9KzAs4H82krzdhk0qA3Imxdt5Vh59ZhdrLy1JQu+ 9lCoVFNAG3gttObO0aZyoDjynOQ5zxQ4BC+quZGyhalljNw/7GngmYp3vtMa8Jhz SMxmwwANNrJy8g1AASP/4nkn0yeLYIzMTUlFe18W+DpOEMAAOCCkwT1S1XL+abxP pY/n+71v/b1OaheKxaeTF7XgLK72S40At+9yuIh8mjrOS1rxsLTdtGi0hw/NkPjf A== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j766bmwp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:09 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNc009139; Tue, 1 Jul 2025 00:38:09 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-7 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:09 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 6/7] Add API to query supported rseq cs flags Date: Tue, 1 Jul 2025 00:37:48 +0000 Message-ID: <20250701003749.50525-7-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Proofpoint-GUID: TuX6X3_ckw4cp1GUgJvC7Ie3lZTZCK5C X-Proofpoint-ORIG-GUID: TuX6X3_ckw4cp1GUgJvC7Ie3lZTZCK5C X-Authority-Analysis: v=2.4 cv=b82y4sGx c=1 sm=1 tr=0 ts=68632df1 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=7d_E57ReAAAA:8 a=yPCof4ZbAAAA:8 a=Y-svIdjkOGLC8tcnJfAA:9 a=jhqOcbufqs7Y1TYCrUUU:22 cc=ntf awl=host:14723 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfX4dDkAYxRRaq6 4/va2HPEy/QmhX9UNsnxaRC5grAhtSeaSd8cKi6UAMkmzMFkum4sThg0nZdk3fMT4uiU8n3w8jw Hy0DdGH5VF3Fxj6u5cL41NvXK9LxO5VAKY/XJcGI4160yKyQSvsVkV4bxQb3ufNcGvgww169Wwy Bmdx+Oo6n7Nb4mGGaZdLuIeMuhl7N/10Kd25MIYhWyqYG88jlBWRYhVlIe0QwV1LaUp9pHZm8Nc CGAEJVn8NTGX3++VkYqAEPe/Mt958YgWg7+0NoxoMrb3YTKSy/8iqTgJHVNsgkeoB4yEeIQKMbM t+q8/9iDCVk46SUHYot4twiYwllSJpBD9NIk7Whta1KOOIUvmCifay5Hnn7LxA/1cM+DH40744l y72bc5T7rmItyA9RBWFy0iX1/LXW/aLQMsvVhTl0oLeiHEjWK/R5CkBxlf2FJh+bpP1j3f1A Content-Type: text/plain; charset="utf-8" For the API, add a new flag to sys_rseq 'flags' argument called RSEQ_FLAG_QUERY_CS_FLAGS. When this flag is passed it returns a bit mask of all the supported rseq cs flags in the user provided rseq struct's 'flags' member. Suggested-by: Mathieu Desnoyers Signed-off-by: Prakash Sangappa --- include/uapi/linux/rseq.h | 1 + kernel/rseq.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index 015534f064af..44baea9dd10a 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -20,6 +20,7 @@ enum rseq_cpu_id_state { =20 enum rseq_flags { RSEQ_FLAG_UNREGISTER =3D (1 << 0), + RSEQ_FLAG_QUERY_CS_FLAGS =3D (1 << 1), }; =20 enum rseq_cs_flags_bit { diff --git a/kernel/rseq.c b/kernel/rseq.c index 99aa263c3a07..7710a209433b 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -575,6 +575,21 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32,= rseq_len, return 0; } =20 + /* + * Return supported rseq_cs flags. + */ + if (flags & RSEQ_FLAG_QUERY_CS_FLAGS) { + u32 rseq_csflags =3D RSEQ_CS_FLAG_DELAY_RESCHED | + RSEQ_CS_FLAG_RESCHEDULED; + if (!IS_ENABLED(CONFIG_SCHED_HRTICK)) + return -EINVAL; + if (!rseq) + return -EINVAL; + if (copy_to_user(&rseq->flags, &rseq_csflags, sizeof(u32))) + return -EFAULT; + return 0; + } + if (unlikely(flags)) return -EINVAL; =20 --=20 2.43.5 From nobody Wed Oct 8 07:26:39 2025 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B435B13D8B1 for ; Tue, 1 Jul 2025 00:38:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.177.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330321; cv=none; b=BlfXNjA/A3lYnxAIme0fQzxMzJSWbU0iGTn36rg8ZYz/ybgIJWBtJ/VFXlpguI3FlXWxmAWrexmhJ4VlYa5xUp0jdxHsoi2H/nLGzuXgtb0FQacaWJ7ODN+S5exkj8Cnzh2mIRZ0c3zlRfOvvzYuJjJ8iJ8iFSnm7erv9kFI/Qs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1751330321; c=relaxed/simple; bh=sHITr8kRCc4egyLqs5lJZo2zVFBSehDXwgebHkZjIA4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qTE7HeOOWpJJULlAPDm0hHfPhfqEgowMlicn96IsMcjsfmcvW7dU9lBGlUSjGfCYW7k6kchsuj39OD425MdZ1Zrjwie2WZlKRnltWQYWRwHByFA+fIPw5FXPZGYXfi+Y0gIdQdWR+iY8zUXUhkL+ay4qqV/y4Tgo4vjcFFu4tYU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=JQBHDoB8; arc=none smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="JQBHDoB8" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 55UIC8cO003843; Tue, 1 Jul 2025 00:38:10 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=corp-2025-04-25; bh=H/KXq +38CRxvMA/KdN4XNLyDOdGoZL/qPwprstHaWLA=; b=JQBHDoB8ALscuBpp6grPZ RYO2OrHk0hyjjhchanw6esHOm/31TJkZB0APZ6sFQX6PMvBvqiM2FYCVRPshuUsJ hZHqzIHCuPc8gbFIkTdA+VN93b5uS3PJ9ZO70RDBjDzUcv1QSLPy+buN/Z016jrX L9njtVOYc/J0igTf/0AfVpz0F0puahjTk9EufXKNf/r+wiDezFUhh1kFYLO9pPNu IAkTFj9iGHkNleHZIXy7A27jg3Ls7sHboAjSxw0zW1fm+mO25IzoyG2ZY7luY1GM o3gHDGGAX3rOTwwWJeZI+fZKKt50JpM1bsO05jUqlJ4VYbjdZhZRSZMvjWNHfKPE w== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 47j80w3k33-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 01 Jul 2025 00:38:10 +0000 (GMT) Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 55UNDxNd009139; Tue, 1 Jul 2025 00:38:09 GMT Received: from psang-work.osdevelopmeniad.oraclevcn.com (psang-work.allregionaliads.osdevelopmeniad.oraclevcn.com [100.100.253.35]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 47j6u92pxj-8 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 01 Jul 2025 00:38:09 +0000 From: Prakash Sangappa To: linux-kernel@vger.kernel.org Cc: peterz@infradead.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, tglx@linutronix.de, bigeasy@linutronix.de, kprateek.nayak@amd.com, vineethr@linux.ibm.com Subject: [PATCH V6 7/7] Introduce a config option for scheduler time slice extension feature Date: Tue, 1 Jul 2025 00:37:49 +0000 Message-ID: <20250701003749.50525-8-prakash.sangappa@oracle.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20250701003749.50525-1-prakash.sangappa@oracle.com> References: <20250701003749.50525-1-prakash.sangappa@oracle.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-06-30_06,2025-06-27_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 spamscore=0 suspectscore=0 phishscore=0 mlxlogscore=999 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2507010002 X-Proofpoint-GUID: GYsKCXv2VZOXgQsES73YwaiY7EG0n_80 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzAxMDAwMiBTYWx0ZWRfX9k7vcaE7sFRT jJK/yfsGS3TaBA0XOQbXxHLftj0Pop9MJobsh7y9snk3e7rJbqu7djJihwSjZR2nIOyO0pk7Pap 2aVVPXwaKwBKw/WfXiio4rEklPic9I3+w9NzvbOmEhi1tpBxVBWv30LhhJEvoPnlPtR0gqgO8Ut 0hUptt/Fgx6YG4KzzgLvPYZXWqvzTj2HQWKXI+Pe968WzO3N6wivdveBRbPHxuQEGmJcODFdv+I bDVv/qnBhRhxPdiQWN4ruzpj2gnYFES3oG2m6ZOOSX8cVaAT4rsFXK+waSjda/O8548f/hwZlDH UfqRNeab1otDJsrk1YdfpSz4RB/p1e6CIe7l2Bra4f2KnEkH1zbzhkxy+RPrdhR7GFIzuyi2t7W JmpbQQrfH7yiQHwij60u5QMDDLoxRWdO3Og0pBp6+UK04mfdkeJt22nFYYuvZOmHQokqkM6u X-Authority-Analysis: v=2.4 cv=D6hHKuRj c=1 sm=1 tr=0 ts=68632df2 b=1 cx=c_pps a=e1sVV491RgrpLwSTMOnk8w==:117 a=e1sVV491RgrpLwSTMOnk8w==:17 a=Wb1JkmetP80A:10 a=yPCof4ZbAAAA:8 a=V5MaIScRyTJAW4VN5IkA:9 cc=ntf awl=host:14723 X-Proofpoint-ORIG-GUID: GYsKCXv2VZOXgQsES73YwaiY7EG0n_80 Content-Type: text/plain; charset="utf-8" Add a config option to enable schedule time slice extension. Signed-off-by: Prakash Sangappa --- include/linux/entry-common.h | 2 +- include/linux/sched.h | 8 ++++---- init/Kconfig | 7 +++++++ kernel/rseq.c | 5 ++++- kernel/sched/core.c | 12 ++++++------ kernel/sched/debug.c | 2 +- kernel/sched/syscalls.c | 3 ++- 7 files changed, 25 insertions(+), 14 deletions(-) diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index d4fa952e394e..351c9dc159bc 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -402,7 +402,7 @@ static __always_inline void syscall_exit_to_user_mode_w= ork(struct pt_regs *regs) CT_WARN_ON(ct_state() !=3D CT_STATE_KERNEL); =20 /* reschedule if sched delay was granted */ - if (IS_ENABLED(CONFIG_RSEQ) && current->sched_time_delay) + if (IS_ENABLED(CONFIG_SCHED_PREEMPT_DELAY) && current->sched_time_delay) set_tsk_need_resched(current); =20 if (IS_ENABLED(CONFIG_PROVE_LOCKING)) { diff --git a/include/linux/sched.h b/include/linux/sched.h index 90d7989a0185..ca2b461b7662 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -339,7 +339,7 @@ extern void io_schedule_finish(int token); extern long io_schedule_timeout(long timeout); extern void io_schedule(void); extern void hrtick_local_start(u64 delay); -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY extern void update_stat_preempt_delayed(struct task_struct *t); #endif =20 @@ -409,7 +409,7 @@ static inline void sched_domains_mutex_lock(void) { } static inline void sched_domains_mutex_unlock(void) { } #endif =20 -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY /* Scheduler time slice extension */ extern unsigned int sysctl_sched_preempt_delay_us; #endif @@ -572,7 +572,7 @@ struct sched_statistics { u64 nr_wakeups_passive; u64 nr_wakeups_idle; =20 -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY u64 nr_preempt_delay_granted; #endif =20 @@ -2259,7 +2259,7 @@ static inline bool owner_on_cpu(struct task_struct *o= wner) unsigned long sched_cpu_util(int cpu); #endif /* CONFIG_SMP */ =20 -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY =20 extern bool rseq_delay_resched(void); extern void rseq_delay_resched_fini(void); diff --git a/init/Kconfig b/init/Kconfig index ce76e913aa2b..2f5f603d175a 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1130,6 +1130,13 @@ config SCHED_MM_CID def_bool y depends on SMP && RSEQ =20 +config SCHED_PREEMPT_DELAY + def_bool y + depends on SMP && RSEQ + help + This feature enables a thread to request extending its time slice on + the cpu by delaying preemption. + config UCLAMP_TASK_GROUP bool "Utilization clamping per group of tasks" depends on CGROUP_SCHED diff --git a/kernel/rseq.c b/kernel/rseq.c index 7710a209433b..440fa4002be5 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -448,6 +448,7 @@ void __rseq_handle_notify_resume(struct ksignal *ksig, = struct pt_regs *regs) force_sigsegv(sig); } =20 +#ifdef CONFIG_SCHED_PREEMPT_DELAY bool rseq_delay_resched(void) { struct task_struct *t =3D current; @@ -526,6 +527,7 @@ void rseq_delay_schedule(struct task_struct *tsk) } #endif } +#endif /* CONFIG_SCHED_PREEMPT_DELAY */ =20 #ifdef CONFIG_DEBUG_RSEQ =20 @@ -581,7 +583,8 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, = rseq_len, if (flags & RSEQ_FLAG_QUERY_CS_FLAGS) { u32 rseq_csflags =3D RSEQ_CS_FLAG_DELAY_RESCHED | RSEQ_CS_FLAG_RESCHEDULED; - if (!IS_ENABLED(CONFIG_SCHED_HRTICK)) + if (!IS_ENABLED(CONFIG_SCHED_PREEMPT_DELAY) || + !IS_ENABLED(CONFIG_SCHED_HRTICK)) return -EINVAL; if (!rseq) return -EINVAL; diff --git a/kernel/sched/core.c b/kernel/sched/core.c index fd572053a955..d28c0e75b4f3 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -149,7 +149,7 @@ __read_mostly int sysctl_resched_latency_warn_once =3D = 1; */ __read_mostly unsigned int sysctl_sched_nr_migrate =3D SCHED_NR_MIGRATE_BR= EAK; =20 -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY /* * Scheduler time slice extension, duration in microsecs. * Max value allowed 100us, default is 30us. @@ -941,7 +941,7 @@ void hrtick_local_start(u64 delay) rq_unlock(rq, &rf); } =20 -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY void update_stat_preempt_delayed(struct task_struct *t) { schedstat_inc(t->stats.nr_preempt_delay_granted); @@ -4697,7 +4697,7 @@ static int sysctl_schedstats(const struct ctl_table *= table, int write, void *buf #endif /* CONFIG_SCHEDSTATS */ =20 #ifdef CONFIG_PROC_SYSCTL -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY static int sysctl_sched_preempt_delay(const struct ctl_table *table, int w= rite, void *buffer, size_t *lenp, loff_t *ppos) { @@ -4711,7 +4711,7 @@ static int sysctl_sched_preempt_delay(const struct ct= l_table *table, int write, SCHED_PREEMPT_DELAY_DEFAULT_US); return err; } -#endif /* CONFIG_RSEQ */ +#endif /* CONFIG_SCHED_PREEMPT_DELAY */ #endif /* CONFIG_PROC_SYSCTL */ =20 #ifdef CONFIG_SYSCTL @@ -4761,7 +4761,7 @@ static const struct ctl_table sched_core_sysctls[] = =3D { .extra2 =3D SYSCTL_FOUR, }, #endif /* CONFIG_NUMA_BALANCING */ -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY { .procname =3D "sched_preempt_delay_us", .data =3D &sysctl_sched_preempt_delay_us, @@ -4771,7 +4771,7 @@ static const struct ctl_table sched_core_sysctls[] = =3D { .extra1 =3D SYSCTL_ZERO, .extra2 =3D SYSCTL_ONE_HUNDRED, }, -#endif /* CONFIG_RSEQ */ +#endif /* CONFIG_SCHED_PREEMPT_DELAY */ }; static int __init sched_core_sysctl_init(void) { diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 3a2efd9505e1..45ae09447624 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -1225,7 +1225,7 @@ void proc_sched_show_task(struct task_struct *p, stru= ct pid_namespace *ns, P_SCHEDSTAT(nr_wakeups_passive); P_SCHEDSTAT(nr_wakeups_idle); =20 -#ifdef CONFIG_RSEQ +#ifdef CONFIG_SCHED_PREEMPT_DELAY P_SCHEDSTAT(nr_preempt_delay_granted); #endif =20 diff --git a/kernel/sched/syscalls.c b/kernel/sched/syscalls.c index d9a4e3a2e064..f86eac7e2b43 100644 --- a/kernel/sched/syscalls.c +++ b/kernel/sched/syscalls.c @@ -1379,7 +1379,8 @@ static void do_sched_yield(void) */ SYSCALL_DEFINE0(sched_yield) { - if (IS_ENABLED(CONFIG_RSEQ) && current->sched_time_delay) { + if (IS_ENABLED(CONFIG_SCHED_PREEMPT_DELAY) && + current->sched_time_delay) { schedule(); return 0; } --=20 2.43.5