From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from szxga01-in.huawei.com (szxga01-in.huawei.com [45.249.212.187]) (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 656143FF883 for ; Mon, 27 Jul 2026 12:37:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.187 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785155857; cv=none; b=KepF0/syPGYFuiDm98vjYyHQMd3+vgP1IPc2Q1YNrfFsG84tGDs6JhAu4mWiEtszZxBzaYs1ywDPn+8OC1BgpEfLCM4VAUB3yGCQPJ44ER1OW0rkz0V+4MM8s7ue3U4q62ijCOk2x0NrJp8fK5JmneLsaua/Ga70vrluGTe2TuM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785155857; c=relaxed/simple; bh=6sBQHVqY9m5N2C6MptIeuDDnINVYSzZydqKf8GnwMQY=; h=Message-ID:Date:MIME-Version:Subject:To:CC:References:From: In-Reply-To:Content-Type; b=JfExM37bAubkzCdQTeN+yMzIefxnHQwXbf7dggeukuCsblM4Jc8nFFEl9dbmdsAT5j/gaC51dQpfTw2j+yjJqiD6vaf5hg5I8ljtPP/kiuiq63qyLRvQddkLKhUjcwzLzgJ5S92doDGzGvcbWvNvJfMwN8UCT7QPdyXzZgFS+Xs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b=XjAPFiXZ; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b=XjAPFiXZ; arc=none smtp.client-ip=45.249.212.187 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b="XjAPFiXZ"; dkim=pass (1024-bit key) header.d=huawei.com header.i=@huawei.com header.b="XjAPFiXZ" dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=nogL4c0sRXgsBkjPKRQZiX9L0zpE2+IN4L/gE/5/7HI=; b=XjAPFiXZelO0Gj1EvovPTTArvxwIMBLShzYWGU1FZDsmpPN7xg55qMSGVAsrxkPuVXYg4YrgI C9BsKes7egO15G0dtTkePMeO+nsrWb2r79Xm4ez367OZRa8KeiOsxyApME3DR3MAfNA5hAP+jVl eQWlARHShDIk8FJ3TAHrbqA= Received: from canpmsgout10.his.huawei.com (unknown [172.19.92.130]) by szxga01-in.huawei.com (SkyGuard) with ESMTPS id 4h7ylM67zqz1BG2G for ; Mon, 27 Jul 2026 20:36:47 +0800 (CST) dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=nogL4c0sRXgsBkjPKRQZiX9L0zpE2+IN4L/gE/5/7HI=; b=XjAPFiXZelO0Gj1EvovPTTArvxwIMBLShzYWGU1FZDsmpPN7xg55qMSGVAsrxkPuVXYg4YrgI C9BsKes7egO15G0dtTkePMeO+nsrWb2r79Xm4ez367OZRa8KeiOsxyApME3DR3MAfNA5hAP+jVl eQWlARHShDIk8FJ3TAHrbqA= Received: from mail.maildlp.com (unknown [172.19.163.15]) by canpmsgout10.his.huawei.com (SkyGuard) with ESMTPS id 4h7yXy6x0cz1K96s; Mon, 27 Jul 2026 20:27:46 +0800 (CST) Received: from dggpemf500011.china.huawei.com (unknown [7.185.36.131]) by mail.maildlp.com (Postfix) with ESMTPS id 94B7B40586; Mon, 27 Jul 2026 20:37:11 +0800 (CST) Received: from [10.67.109.254] (10.67.109.254) by dggpemf500011.china.huawei.com (7.185.36.131) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.11; Mon, 27 Jul 2026 20:37:10 +0800 Message-ID: <1e02565d-a50c-4bdb-b8db-6abd558a58d5@huawei.com> Date: Mon, 27 Jul 2026 20:37:09 +0800 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 , CC: , , , , , , , References: <20260703133358.698078-1-mark.rutland@arm.com> <20260703133358.698078-2-mark.rutland@arm.com> From: Jinjie Ruan In-Reply-To: <20260703133358.698078-2-mark.rutland@arm.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit X-ClientProxiedBy: kwepems200002.china.huawei.com (7.221.188.68) To dggpemf500011.china.huawei.com (7.185.36.131) 在 2026/7/3 21:33, Mark Rutland 写道: > 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 > 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 > 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; > - LGTM Reviewed-by: Jinjie Ruan > 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 */