From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (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 257FE2EBB99 for ; Mon, 6 Jul 2026 04:37:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.156.1 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783312634; cv=none; b=VI2nYviGXuD4sjvmwRDmbHO5PS4tz63GN0iR2YdD5PHbF9ag/KvDeAK/kl93YVaeI+F13O9sFJrlX6/RucS0BbTO5eo5QrwNiidrGMZYDDx2fE+21TFn/vL0D9/MRKiE7nCoa1iSH3k96d2iqSxGE64v5YYp61aVC9dYc0FUKdA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783312634; c=relaxed/simple; bh=ulJ4bSZ1gANf9AcBuQ1bU8y57qWNHPmFXBk70LJRBjY=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=WcWlkzhy9uyAruBa0A9xxNasfpYjLfwHdUweq9KRg8eEh686Ub0Lsq8KyghAPDUG7pX9Xu3IVWWQSve0r9wTsPTh1JwTnowv7IzwS1NiK7GYb742OJq5jSVVUfw0kyi85wAHXH6adMjcllolYxHm/3jjTOgQLMU9jjl+QYFBaJw= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=F71iQDXX; arc=none smtp.client-ip=148.163.156.1 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="F71iQDXX" Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 665MIQhu2427795; Mon, 6 Jul 2026 04:36:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=F8mjhc Xetf4jfnvgwizXsYuxzVRVubgHTyxa6vjloUs=; b=F71iQDXXorm5EqTvAVDSEK pi/0zZt7/1l6o1uPmnE6jmcc9GSXRRRD9bX5Sm3Eaea6rUDCPRtVk+pmots5GhmY VjoamdmIOE8m39N07tLx63xBcffTYWlbnzS8l9D9TtOGcmZm7NZ4Ia5iRZzU30ux naTNed7oUcMTo2cNpU4uU+ZkS3gN8NPw4okuDsYEONxpXfKN3fUZ3KPuo5SSx8Ex Sfh0crR8IuffY7GwXFN/8PnWxUy4pitsyjG+Q7KrYgpOamppxKpgVBK0g1Gu7etw Zytu6XZz26UK5Uy+VB1MKyKOtLk/alERoRG8EdfbCMvLNmu4XKx6jQJzSouDXlDw == Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4f6suqfjut-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Jul 2026 04:36:35 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 6664YZv3004615; Mon, 6 Jul 2026 04:36:34 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 4f7eqfuu3s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Jul 2026 04:36:34 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 6664aWqI41091556 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 6 Jul 2026 04:36:32 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 9E92720043; Mon, 6 Jul 2026 04:36:32 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5A4F720040; Mon, 6 Jul 2026 04:36:30 +0000 (GMT) Received: from [9.123.5.233] (unknown [9.123.5.233]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 6 Jul 2026 04:36:30 +0000 (GMT) Message-ID: <860baba7-e65d-463b-85cc-feb9c4f930c7@linux.ibm.com> Date: Mon, 6 Jul 2026 10:06:29 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 1/5] sched: dynamic: Make PREEMPT_DYNAMIC depend on ARCH_HAS_PREEMPT_LAZY To: Mark Rutland , linux-kernel@vger.kernel.org Cc: frederic@kernel.org, jstultz@google.com, juri.lelli@redhat.com, mingo@redhat.com, peterz@infradead.org, tglx@linutronix.de, vincent.guittot@linaro.org, vschneid@redhat.com References: <20260703133358.698078-1-mark.rutland@arm.com> <20260703133358.698078-2-mark.rutland@arm.com> Content-Language: en-US From: Shrikanth Hegde In-Reply-To: <20260703133358.698078-2-mark.rutland@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-Spam-Info: AW1haW4tMjYwNzA2MDAzOSBTYWx0ZWRfX5jJ+N0svSoxE 7ryjiBmm5rjqCjK2XJEPRJlssiVqNWtiU5eD35KduZZwRfYnMhul6TMtGAKMudSBvf71lwiVe8Y cdIH7FF6iKoPI8UjzBrmL7nBWwgAR4g= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNzA2MDAzOSBTYWx0ZWRfX/DNk13+pYvhu T66dQ9gDCPQyXmBRTBWrybEqomA45VrEhZRLnt8QYp2Cc5GKgX5qCO4vPT7KyKrrhB0w9/3h9Q/ sNK3+PDNk7w2kvHUZy3oR7vr35EBcQ+ibutfEaFMUBNI+F7ytRW6Q87g/faj4mVE2yf9+Et8SIB MJcApexXT/5je8WT9bpzSdLdVdV2PUKo9oU47TlE2KUi0TR2Gz/sdgMG46E2dj782uWGdAEFMQu pxyxB40OiAVzmsubQFELUWnq4QnJVhfc5E0DEq2Y3ftbMkB/hyayf+A0NjY6UTWWzHf0cYoK6Es kJ9u1qTLbEeohmCZTIrlSKuO0UnBzsMaG6ry0iVGYQkIyacrXv3qibZaNKIBsxVzVVv46+7uKfe RnIzRESWvgbHqXae+xzDl/3F1khxdNPLQJIGkO6sw7JAAhUew1cIfpiPmzW3ykmaAEgCWYoB7mg emd77umJSwa7g7OvCvQ== X-Proofpoint-GUID: WjARNUt4tBqW3l1qF0JmnqmCGOd6DpLm X-Authority-Analysis: v=2.4 cv=Oot/DS/t c=1 sm=1 tr=0 ts=6a4b30d3 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=IkcTkHD0fZMA:10 a=RAioF0-LDSMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=uAbxVGIbfxUO_5tXvNgY:22 a=7CQSdrXTAAAA:8 a=VwQbUJbxAAAA:8 a=20KFwNOVAAAA:8 a=1XWaLZrsAAAA:8 a=JfrnYn6hAAAA:8 a=KKAkSRfTAAAA:8 a=VnNF1IyMAAAA:8 a=Fb1j_mjAUdhY8lf9UF0A:9 a=QEXdDO2ut3YA:10 a=a-qgeE7W1pNrGK8U0ZQC:22 a=1CNFftbPRP8L7MoqJWF3:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-ORIG-GUID: 3WxUFRfSi3yPhe9Eq1S4-iTxGWfDJE6D X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.125,FMLib:17.12.100.49 definitions=2026-07-05_02,2026-07-03_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 clxscore=1015 impostorscore=0 phishscore=0 malwarescore=0 suspectscore=0 spamscore=0 adultscore=0 priorityscore=1501 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2606150000 definitions=main-2607060039 On 7/3/26 7:03 PM, Mark Rutland wrote: > On architectures which select ARCH_HAS_PREEMPT_LAZY, it has not been > possible to select the NONE and VOLUNTARY preemption models since > commit: > > 7dadeaa6e851 ("sched: Further restrict the preemption modes") > > ... which was merged in v7.0. > > All architectures which currently suppoort PREEMPT_DYNAMIC select s/suppoort/support > ARCH_HAS_PREEMPT_LAZY: > > [mark@lakrids:~/src/linux]% git describe HEAD > v7.2-rc1-1-g871a4586ea2e1 > [mark@lakrids:~/src/linux]% git grep 'select HAVE_PREEMPT_DYNAMIC_' -- arch > arch/arm64/Kconfig: select HAVE_PREEMPT_DYNAMIC_KEY > arch/loongarch/Kconfig: select HAVE_PREEMPT_DYNAMIC_KEY > arch/powerpc/Kconfig: select HAVE_PREEMPT_DYNAMIC_KEY > arch/riscv/Kconfig: select HAVE_PREEMPT_DYNAMIC_KEY > arch/s390/Kconfig: select HAVE_PREEMPT_DYNAMIC_KEY > arch/x86/Kconfig: select HAVE_PREEMPT_DYNAMIC_CALL > [mark@lakrids:~/src/linux]% git grep 'select ARCH_HAS_PREEMPT_LAZY' -- arch > arch/arm64/Kconfig: select ARCH_HAS_PREEMPT_LAZY > arch/loongarch/Kconfig: select ARCH_HAS_PREEMPT_LAZY > arch/powerpc/Kconfig: select ARCH_HAS_PREEMPT_LAZY > arch/riscv/Kconfig: select ARCH_HAS_PREEMPT_LAZY > arch/s390/Kconfig: select ARCH_HAS_PREEMPT_LAZY > arch/x86/Kconfig: select ARCH_HAS_PREEMPT_LAZY > > ... and hence in practice PREEMPT_DYNAMIC no longer supports the NONE or > VOLUNTARY preemption models. > > Make this official: have PREEMPT_DYNAMIC depend on > ARCH_HAS_PREEMPT_LAZY, and remove the trivially unreachable code. > Further simplifications will be made in subsequent patches. > > Signed-off-by: Mark Rutland > Cc: Frederic Weisbecker > Cc: Ingo Molnar > Cc: John Stultz > Cc: Juri Lelli > Cc: Peter Zijlstra > Cc: Thomas Gleixner > Cc: Valentin Schneider > Cc: Vincent Guittot > --- > kernel/Kconfig.preempt | 1 + > kernel/sched/core.c | 63 ++---------------------------------------- > 2 files changed, 4 insertions(+), 60 deletions(-) > > diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt > index 88c594c6d7fcd..fb49424003b2b 100644 > --- a/kernel/Kconfig.preempt > +++ b/kernel/Kconfig.preempt > @@ -129,6 +129,7 @@ config PREEMPTION > config PREEMPT_DYNAMIC > bool "Preemption behaviour defined on boot" > depends on HAVE_PREEMPT_DYNAMIC > + depends on ARCH_HAS_PREEMPT_LAZY > select JUMP_LABEL if HAVE_PREEMPT_DYNAMIC_KEY > select PREEMPT_BUILD > default y if HAVE_PREEMPT_DYNAMIC_CALL Can we update the help section bit? """ The runtime overhead is negligible. Interesting if you want the same pre-built kernel should be used for both Server and Desktop workloads. """ I think server meant preempt=none and desktop meant preempt=full/lazy there. No? > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > index 96226707c2f61..2db78826a484b 100644 > --- a/kernel/sched/core.c > +++ b/kernel/sched/core.c > @@ -7870,20 +7870,10 @@ EXPORT_SYMBOL(__cond_resched_rwlock_write); > * > * > * NONE: > - * cond_resched <- __cond_resched > - * might_resched <- RET0 > - * preempt_schedule <- NOP > - * preempt_schedule_notrace <- NOP > - * irqentry_exit_cond_resched <- NOP > - * dynamic_preempt_lazy <- false > + * (unselectable) > * > * VOLUNTARY: > - * cond_resched <- __cond_resched > - * might_resched <- __cond_resched > - * preempt_schedule <- NOP > - * preempt_schedule_notrace <- NOP > - * irqentry_exit_cond_resched <- NOP > - * dynamic_preempt_lazy <- false > + * (unselectable) > * > * FULL: > * cond_resched <- RET0 > @@ -7914,21 +7904,11 @@ int preempt_dynamic_mode = preempt_dynamic_undefined; > > int sched_dynamic_mode(const char *str) > { > -# if !(defined(CONFIG_PREEMPT_RT) || defined(CONFIG_ARCH_HAS_PREEMPT_LAZY)) > - if (!strcmp(str, "none")) > - return preempt_dynamic_none; > - > - if (!strcmp(str, "voluntary")) > - return preempt_dynamic_voluntary; > -# endif > - > if (!strcmp(str, "full")) > return preempt_dynamic_full; > > -# ifdef CONFIG_ARCH_HAS_PREEMPT_LAZY > if (!strcmp(str, "lazy")) > return preempt_dynamic_lazy; > -# endif > > return -EINVAL; > } > @@ -7950,40 +7930,7 @@ static DEFINE_MUTEX(sched_dynamic_mutex); > > static void __sched_dynamic_update(int mode) > { > - /* > - * Avoid {NONE,VOLUNTARY} -> FULL transitions from ever ending up in > - * the ZERO state, which is invalid. > - */ > - preempt_dynamic_enable(cond_resched); > - preempt_dynamic_enable(might_resched); > - preempt_dynamic_enable(preempt_schedule); > - preempt_dynamic_enable(preempt_schedule_notrace); > - preempt_dynamic_enable(irqentry_exit_cond_resched); > - preempt_dynamic_key_disable(preempt_lazy); > - > switch (mode) { > - case preempt_dynamic_none: > - preempt_dynamic_enable(cond_resched); > - preempt_dynamic_disable(might_resched); > - preempt_dynamic_disable(preempt_schedule); > - preempt_dynamic_disable(preempt_schedule_notrace); > - preempt_dynamic_disable(irqentry_exit_cond_resched); > - preempt_dynamic_key_disable(preempt_lazy); > - if (mode != preempt_dynamic_mode) > - pr_info("Dynamic Preempt: none\n"); > - break; > - > - case preempt_dynamic_voluntary: > - preempt_dynamic_enable(cond_resched); > - preempt_dynamic_enable(might_resched); > - preempt_dynamic_disable(preempt_schedule); > - preempt_dynamic_disable(preempt_schedule_notrace); > - preempt_dynamic_disable(irqentry_exit_cond_resched); > - preempt_dynamic_key_disable(preempt_lazy); > - if (mode != preempt_dynamic_mode) > - pr_info("Dynamic Preempt: voluntary\n"); > - break; > - > case preempt_dynamic_full: > preempt_dynamic_disable(cond_resched); > preempt_dynamic_disable(might_resched); > @@ -8033,11 +7980,7 @@ __setup("preempt=", setup_preempt_mode); > static void __init preempt_dynamic_init(void) > { > if (preempt_dynamic_mode == preempt_dynamic_undefined) { > - if (IS_ENABLED(CONFIG_PREEMPT_NONE)) { > - sched_dynamic_update(preempt_dynamic_none); > - } else if (IS_ENABLED(CONFIG_PREEMPT_VOLUNTARY)) { > - sched_dynamic_update(preempt_dynamic_voluntary); > - } else if (IS_ENABLED(CONFIG_PREEMPT_LAZY)) { > + if (IS_ENABLED(CONFIG_PREEMPT_LAZY)) { > sched_dynamic_update(preempt_dynamic_lazy); > } else { > /* Default static call setting, nothing to do */ other than that, it looks good to me. Reviewed-by: Shrikanth Hegde