From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f175.google.com (mail-dy1-f175.google.com [74.125.82.175]) (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 4DB023033E3 for ; Wed, 25 Mar 2026 09:09:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429791; cv=none; b=N7WxDnrMib/AAHhYxfQSv5REVpXF5kpBPLl8wh92wIIY/wdd3cU9cNLodueku0begX8YAXGeeSPRyvHFhrmr+lDaHHD4gcmxSSfUbR2z9f/WTHh5F7VtFekUNPBVPH5SCUOnBA2uCXT2+hrYeTuFLEGoiSxvvv9pncXDCtUg0wI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429791; c=relaxed/simple; bh=orBqlTSU08SBfpvoR+5o8LS2QT5TANQSy6dJ/409s5I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N5gQt8P5hkE81D9Rjk9pUgQkrygodsRM7g0FORn2HI5NLF7/uTsgIEEyCTFWD/xmK9cMXHoTrFLWBTegGnrlmzO2IQMG7Leidd41itJ0G9PJkOyVEOGt3qZe0FP9SS1iNvSq4xrDlyIXxQFGiiaJtlKEDPmujFpDZeNl4bGp3VA= 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=pAg/TD4l; arc=none smtp.client-ip=74.125.82.175 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="pAg/TD4l" Received: by mail-dy1-f175.google.com with SMTP id 5a478bee46e88-2b4520f6b32so2547258eec.0 for ; Wed, 25 Mar 2026 02:09:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429789; x=1775034589; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=LWZZ6ePUrfQHB8Z/JVxCsE1F+0gZz3S/duMH4Wpbiuk=; b=pAg/TD4lr5ll1e/tBegxTmkuPrYjZUZCks4h3KvkokORLdnGGO1Q1/PqC5/rIoohXK WAK9SY/cI9oGhCvMRqmlj99eAFIjWpk9Jbyie/msj2Xu20jKh7fRGXfNuc+CnHzPm0U/ n3fiAiG34Z+FP5gPt+OWPWd/f3XYMMlwCFW6R7VH7l9TfhcPa2OdXvBz8hDw7sctJkO3 FMaGIY9IkMwLsCIWwd09WvbDBxIg167aSSctaTgz0WYwKHChlJCpZ6oXf7TsoFlcf4G+ MgEK72ZZFfOe9T1NhmBufvCvYfhzJBTCLbsRaDpQ3BrZjaNMJ0P/2dOLaTZIlW5OpFTw PFrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429789; x=1775034589; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=LWZZ6ePUrfQHB8Z/JVxCsE1F+0gZz3S/duMH4Wpbiuk=; b=IfyNkgpPNtv50aYlWEHccIJnK3J5tIRm+fLC/RKrJlWQgPcFo17WXXliQXk/8TueZN RnFUE4PoRKsTw7SCUx70ih3OPy/tKAcKhEkfmXB9AkClCGZYvIi17pPegi5uTDMeIWb2 uJeZQVyVaNEzuWMpsJZLRqZ9kcSt9sbj2d00m92CUeGO3UUQ365Bfixa92wLlBoC5IAQ Qe0hsTwn2bJHQ1r7S1ytjBaB2ArNyAsQwmA+QiDyEuXlzX1MzqQnNU7A0qBQnW0a7LM2 BYsDiTZMeBoTSO1BSy9zh2aN6erIDbk7Gj2iSAlTOYEAdkJ4m1ap21Wqsvu09Zeool6q N0xg== X-Gm-Message-State: AOJu0Yx+gjDAT6Cl0bR/FjZqu3bkgKlTw5JvDTzEm7EmkyvoNqzZSS2j JBMUK/0sGqiwKAAUpipGUwtG0NyZnIHTfkSQ3VKTGpKZLpCGE2Fb4COu X-Gm-Gg: ATEYQzzQX5uWLoW6Uk69g+J9asL9P0Io7sAEEhNFOzQg5ael7w8YNX6ZM1IV+rUQUem 136XyQPb9H74ZMHSOzyVNSxqV8zaUJqB8OS2vwJCF2dQjg3avL8ZOC7PjE9Cy5kKAW5B8bXIQhP +WrMdsRncRqb3O0XLhys69ko5XifFRKFmRFJmdLBMHS8LSsNTfbvOElaKusVAVIoOCztGnlaS5K kc4ht19nx/FBOS+dOF8FMxrnDelm9NB2tKZIr01nWA4AKT1zoXTST9LtDDQKjk7rXm/l3I8bCoA p3NNGjN+SDLKGp43vgNy938r9ydfDh64q8PM//jGOjnREhzFRqKGevbHB2fCdeKcQwh82zV/DnI 2BJbWxrNi3QUSaqxQYaFxueqjNrM7E3/fq2AzfBrVco3jKPRJP3UVKLrb93JSvK2kkgVjC7Vtwv h/1GVLV8Gb5UOqey14 X-Received: by 2002:a05:7300:b505:b0:2ba:a60a:15e6 with SMTP id 5a478bee46e88-2c15d3db165mr1328179eec.16.1774429789468; Wed, 25 Mar 2026 02:09:49 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.09.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:09:49 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:32 +0800 Subject: [PATCH 01/15] sched/isolation: Support dynamic allocation for housekeeping masks Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-1-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 The existing housekeeping infrastructure uses a single static cpumask for all isolation types. This prevents independent runtime reconfiguration of different services (like RCU vs. timers). Introduce dynamic allocation for housekeeping masks to support DHEI. This allows subsequent patches to manage service-specific masks independently at runtime. Signed-off-by: Qiliang Yuan --- kernel/sched/isolation.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 3ad0d6df6a0a2..67a5ff273ea08 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -8,6 +8,7 @@ * */ #include +#include #include "sched.h" =20 enum hk_flags { @@ -16,6 +17,7 @@ enum hk_flags { HK_FLAG_KERNEL_NOISE =3D BIT(HK_TYPE_KERNEL_NOISE), }; =20 +static DEFINE_MUTEX(housekeeping_mutex); DEFINE_STATIC_KEY_FALSE(housekeeping_overridden); EXPORT_SYMBOL_GPL(housekeeping_overridden); =20 @@ -105,8 +107,14 @@ void __init housekeeping_init(void) static void __init housekeeping_setup_type(enum hk_type type, cpumask_var_t housekeeping_staging) { + unsigned int gfp =3D GFP_KERNEL; + + if (!slab_is_available()) + gfp =3D GFP_NOWAIT; + + if (!housekeeping.cpumasks[type]) + alloc_cpumask_var(&housekeeping.cpumasks[type], gfp); =20 - alloc_bootmem_cpumask_var(&housekeeping.cpumasks[type]); cpumask_copy(housekeeping.cpumasks[type], housekeeping_staging); } @@ -116,6 +124,10 @@ static int __init housekeeping_setup(char *str, unsign= ed long flags) cpumask_var_t non_housekeeping_mask, housekeeping_staging; unsigned int first_cpu; int err =3D 0; + unsigned int gfp =3D GFP_KERNEL; + + if (!slab_is_available()) + gfp =3D GFP_NOWAIT; =20 if ((flags & HK_FLAG_KERNEL_NOISE) && !(housekeeping.flags & HK_FLAG_KERN= EL_NOISE)) { if (!IS_ENABLED(CONFIG_NO_HZ_FULL)) { @@ -125,13 +137,17 @@ static int __init housekeeping_setup(char *str, unsig= ned long flags) } } =20 - alloc_bootmem_cpumask_var(&non_housekeeping_mask); + if (!alloc_cpumask_var(&non_housekeeping_mask, gfp)) + return 0; + if (cpulist_parse(str, non_housekeeping_mask) < 0) { pr_warn("Housekeeping: nohz_full=3D or isolcpus=3D incorrect CPU range\n= "); goto free_non_housekeeping_mask; } =20 - alloc_bootmem_cpumask_var(&housekeeping_staging); + if (!alloc_cpumask_var(&housekeeping_staging, gfp)) + goto free_non_housekeeping_mask; + cpumask_andnot(housekeeping_staging, cpu_possible_mask, non_housekeeping_mask); =20 @@ -203,9 +219,9 @@ static int __init housekeeping_setup(char *str, unsigne= d long flags) err =3D 1; =20 free_housekeeping_staging: - free_bootmem_cpumask_var(housekeeping_staging); + free_cpumask_var(housekeeping_staging); free_non_housekeeping_mask: - free_bootmem_cpumask_var(non_housekeeping_mask); + free_cpumask_var(non_housekeeping_mask); =20 return err; } --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (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 3287A3368BF for ; Wed, 25 Mar 2026 09:09:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429799; cv=none; b=MSM/mhCXmPafPENHUetmzqLpLlCehJF290smQx20ndT/80vwljMf1lY3rUprJp2OQ9LY1SutMbBA0uTrLVqqFYQMy3sOOyJVQVQmgZE0Ds8MHvV+G8DtOaXbtst+3oNeL86DgvXy6Hl1RCA63LoZUjmTsjU24bo47zoBcpdYwrg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429799; c=relaxed/simple; bh=0fAmdldKanTfynKcGbwbLRGSY5kHdMz+uttHRTgpIhY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RRQz1R05zQCh5pSkfptGAJWNl0+8Xevt+A/8Urlt1FV/Meo/6eL4Icg9aVqmt9tlJ70iY/256+ypWks0Xes42J2bvbJ6M8aZUM3IZLhwHBsZc34Ujqx1qlyPFlqjqOeS8SG18pbJnK8mbRC1HSxpMspUePUggVlcpDFZXjBI9NE= 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=gp837kIh; arc=none smtp.client-ip=74.125.82.181 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="gp837kIh" Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2bd9a485bd6so4096852eec.1 for ; Wed, 25 Mar 2026 02:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429797; x=1775034597; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UVkhe/sbAiDJEUQYidI2AeK8GB4BwtQurPArQfvZeuc=; b=gp837kIhLNPhp9yBYtHdkUjG3fbpq7aJ3S7VRFx74GlqRiKToAFpQS4WP/hoQqkyW0 vPCW3S3TYcutpoP8l8D9cDvtr+I4AhvlStVMbkvU844ljJWUhpP13wBD8pNVPNJ89VZQ OgGuprhsgv9wZDdp6DPhYhcjgz5TXa/d9BpS/vT/ulCdxYS7Nm56yWn9jvGncqVuPYhQ /0rXQ9FkXE/OwZDqqoZQUh50GeA9LFfbdDxByX0N9NiaqP3lbt1odfPrEiFUYYW/MhEa Sk8j6q5RDGc3oco6OOnfPPhy0JU468vxhReox0o5gcgsfmHUUJB2fviSDUs6BUAVmhZM gOeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429797; x=1775034597; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UVkhe/sbAiDJEUQYidI2AeK8GB4BwtQurPArQfvZeuc=; b=J/TnjTRXXvKeY/OzlctctFERPBdzxe+LgAbnalptJC670qGhBIqF3RBZWUhLYFgKB1 cfh4Md5lnJGOtcRWld+d7LzRZ4WKe5KZqBy5FwVyFihPcKzzJuCr9lOIvQPO2MMRK2qy 9dFfQWAHm35r1wYxiCY2cAiRGNn1jy3wgysrw+keazB7TNWr89dswnoMZdV43cvKG0Aa Lw2SYXvSRSgETK8aU+uR9pQa3gfcHm/JvrSe8SCwjbzeVk8ewhiFHY24ABV8UKON1R/O 01iGoDmiHYWtF+a2JA2syaGYhC1cXhXcoKPojQ+U+uYjqE7M1fzuQ8d6fMly4bHUnAut HnMg== X-Gm-Message-State: AOJu0Yw8ZjmSviX9tRSUYYb9fYJApp/n7chjW4LLJV4glQVvT1cS94SE an6wsvlgqvhv3UqPl36qGXKg438IueYv8ZWZECuZV5LliyE/nPS0BJuj X-Gm-Gg: ATEYQzxQc7/ZJNU9FEZe+18AP5ERYIThqh/cZ6x8UQYDZqfUr9PfHqj8cNmhi570OvN tuqiHL+uo1wazRL5r6/nfk5n+BMKlpC+mCVMDvi6D/ebpv7Uai2s7ZfBQs7khUdV69S8yrhdqwz LaSC+hvXVW5F2zJJEXDQ7nszhO/qKTjTQF448/bq3nlzI4Orj3vBX8G0wqSAgbKXg+VmjkJbhYw X6OcvbDtVZmuBn5ZYrsD3J1hCk0OM1HBFyIx9s356c5crAYc9KGvfIcJeDcMh6Dam/asNvmEyF3 1+WfV9yRkaFDTNq6+pLHoG3M1xm4KhNz5OsDFgm9yJmIr+1t7vh8sHQ3UnHZMT72f9Ny8xEzBbY nFZm9nqPh0UpjeUWgPCNbsxmRN/m/++rTAj7cDpFPZVZuiE0gJDYGhMF7tdkk7oL5OsILBP6aKb cLMVWuteCGXO2phCofQMwiuQHO9Ls= X-Received: by 2002:a05:7300:a584:b0:2b7:1e86:3604 with SMTP id 5a478bee46e88-2c15d2b7001mr1621331eec.6.1774429797296; Wed, 25 Mar 2026 02:09:57 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.09.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:09:57 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:33 +0800 Subject: [PATCH 02/15] sched/isolation: Introduce housekeeping notifier infrastructure Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-2-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Subsystems currently rely on static housekeeping masks determined at boot. Supporting runtime reconfiguration (DHEI) requires a mechanism to broadcast mask changes to affected kernel components. Implement a blocking notifier chain for housekeeping mask updates. This infrastructure enables subsystems like genirq, workqueues, and RCU to react dynamically to isolation changes. Signed-off-by: Qiliang Yuan --- include/linux/sched/isolation.h | 21 +++++++++++++++++++++ kernel/sched/isolation.c | 24 ++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolatio= n.h index d8501f4709b58..9df55237d3901 100644 --- a/include/linux/sched/isolation.h +++ b/include/linux/sched/isolation.h @@ -5,6 +5,7 @@ #include #include #include +#include =20 enum hk_type { HK_TYPE_DOMAIN, @@ -24,6 +25,13 @@ enum hk_type { HK_TYPE_KTHREAD =3D HK_TYPE_KERNEL_NOISE }; =20 +struct housekeeping_update { + enum hk_type type; + const struct cpumask *new_mask; +}; + +#define HK_UPDATE_MASK 0x01 + #ifdef CONFIG_CPU_ISOLATION DECLARE_STATIC_KEY_FALSE(housekeeping_overridden); extern int housekeeping_any_cpu(enum hk_type type); @@ -33,6 +41,9 @@ extern void housekeeping_affine(struct task_struct *t, en= um hk_type type); extern bool housekeeping_test_cpu(int cpu, enum hk_type type); extern void __init housekeeping_init(void); =20 +extern int housekeeping_register_notifier(struct notifier_block *nb); +extern int housekeeping_unregister_notifier(struct notifier_block *nb); + #else =20 static inline int housekeeping_any_cpu(enum hk_type type) @@ -59,6 +70,16 @@ static inline bool housekeeping_test_cpu(int cpu, enum h= k_type type) } =20 static inline void housekeeping_init(void) { } + +static inline int housekeeping_register_notifier(struct notifier_block *nb) +{ + return 0; +} + +static inline int housekeeping_unregister_notifier(struct notifier_block *= nb) +{ + return 0; +} #endif /* CONFIG_CPU_ISOLATION */ =20 static inline bool housekeeping_cpu(int cpu, enum hk_type type) diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 67a5ff273ea08..e7a21023726df 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -9,6 +9,7 @@ */ #include #include +#include #include "sched.h" =20 enum hk_flags { @@ -18,6 +19,7 @@ enum hk_flags { }; =20 static DEFINE_MUTEX(housekeeping_mutex); +static BLOCKING_NOTIFIER_HEAD(housekeeping_notifier_list); DEFINE_STATIC_KEY_FALSE(housekeeping_overridden); EXPORT_SYMBOL_GPL(housekeeping_overridden); =20 @@ -86,6 +88,28 @@ bool housekeeping_test_cpu(int cpu, enum hk_type type) } EXPORT_SYMBOL_GPL(housekeeping_test_cpu); =20 +int housekeeping_register_notifier(struct notifier_block *nb) +{ + return blocking_notifier_chain_register(&housekeeping_notifier_list, nb); +} +EXPORT_SYMBOL_GPL(housekeeping_register_notifier); + +int housekeeping_unregister_notifier(struct notifier_block *nb) +{ + return blocking_notifier_chain_unregister(&housekeeping_notifier_list, nb= ); +} +EXPORT_SYMBOL_GPL(housekeeping_unregister_notifier); + +static int housekeeping_update_notify(enum hk_type type, const struct cpum= ask *new_mask) +{ + struct housekeeping_update update =3D { + .type =3D type, + .new_mask =3D new_mask, + }; + + return blocking_notifier_call_chain(&housekeeping_notifier_list, HK_UPDAT= E_MASK, &update); +} + void __init housekeeping_init(void) { enum hk_type type; --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f179.google.com (mail-dy1-f179.google.com [74.125.82.179]) (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 6EBCA339853 for ; Wed, 25 Mar 2026 09:10:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429807; cv=none; b=aQ1TrpayIsO+zdzhuhSApNE6ggnE5bWxJAPfEZohkT5hoO2kN3Oo8Xmov4Sf6uEqDUzszK6YsZDBxN/pAG6NNTvjk+tEniKBP2jJI8p+ccGiAXHEnPe0JRwElg7ZXIZ/YDrguxwNeypg5zR+I4oXXWM0nkb7bdptGZGNexHOa44= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429807; c=relaxed/simple; bh=5lK/iDCMs0xrzM+ncf/IEMsxq+MhQJcZU0X4KxOHObw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OPL1Mm6bHKzxhuHFzXKzEuBVK9w1wlHPra9OskEKps90L3BBPHH8glzdh99aK1V0Ffg45Id4Bpw8YLuqLunJCpbmQ6qd/yQamOFO8HEAZDDy6MlVi94WLUxnKq5G8zEPt1RD0QxCfD2gNLz+QnPYrVRDhxtK4dAqpb3sGg049Q4= 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=N5Go1fBK; arc=none smtp.client-ip=74.125.82.179 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="N5Go1fBK" Received: by mail-dy1-f179.google.com with SMTP id 5a478bee46e88-2ba895adfeaso2409908eec.0 for ; Wed, 25 Mar 2026 02:10:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429806; x=1775034606; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/9UY5bvoYUVv1VU3Mf2W4jpyCEGASZWHJe/emL8ca0U=; b=N5Go1fBKA0C8WAFBmj0S4YWwHL4TtmzDsPylU5jL6MKCA17I3Af28FR8rfY1A2THqe ODlrHKjFRIqnbKQu7BpnaGJWSTLM0VPWHSfj/oan7mJf/3GWoiKb4zKnHpi/cFDiJh4C spycsFoA+8szOdJa3uOZ38g10KGiFbLLaJZOUg/9AwkSovkOXTleJcslOIKB6qDgJEfL tHB6bju0qdHIwB/QkipBLwKd8A37F/aI9fm2dz3IujjcSKtJvcaPHrecaoEe9U/hkTY1 l3MsZJWPJgdsMDi46BV++nuhDKQXzYHdRuD6kVqOMj9VvzZ2g2pHzrXgxGTwMu/mElUk hpwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429806; x=1775034606; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=/9UY5bvoYUVv1VU3Mf2W4jpyCEGASZWHJe/emL8ca0U=; b=ea3fUruvk9qY+MuHahxp2uSiLFFxWrAo0HBfEDeDvhjtUeixsGwhms9zKumJ/UA1yo fysJqAquw+MirssGLq5DMxHamIP9JnFbm7pwFfB9Y87CAkxFZG0RjWh1L/miVB+e6/Li QXU1pAi0fOUsfKKrpuX2sj3a/FATPHwvYdKDJ2kC57KrMFYzaY56TChesqFEG5ggDa/v 8vp9PkMl5R2VsMzuTmRQa4UAKqkaRX3G2VSHo60YH5OrJrHPIYbPvsAnqjfQd3LKc5qy uXBf7jYVS4caxxJoqOSvDBFx7SprJKCeevrV6A77pUVPYgdf8XDZbNSrXu/jJPCbeQAo 9QPg== X-Gm-Message-State: AOJu0Yw91mOLxm5738fauWLgbY5kYdRDsXBs/2eM2lToYN9jgpuRH5pg 3a82Viw2SuWZaacs0jCllWEUDzuZ6tKdFWIBOX3MLPBdepdBbdXIF2KF X-Gm-Gg: ATEYQzxiz/yz0np3/vvoR3ZWxvCrsGw4sq/qGAYqQMqNVuVs6Nu1GgVBoOui/HVTnOh 8DmqqO7ecnNUANGjvxXMpk3ccEOwSHQzwM7qKjhPE/QtLDkUyNLnD3ZPdQZa77xoVFlhiYwvyTl E7K4AZEMG4HN5VUviP/0/YZ/yQi8rlW2Qp9M/XHk3NmueIJlyb/7ZoesBtDQZ3hZzyhBR6uGfAp N0NpKiPX+F9GopCGftbDBtKrYf9izB4Y5qm3o6ucd5NAJfdl6OWjaGDGCbHpzHLl+tNLSv2rR9Y WHvBlCG2Nwg4RG8cXRcC6xQPzJX2EQnI2GnWBUgzy/7+q7kAcw9WSoG1tpuesT276WxldbluAWS 5f1vyIOxbKLJiuFRtpNTlY7O9Dn89GRN1sIujECuF4zIJUajIPWJH8angpgBysL4gD2F7NbjkZf wlOIvrfPW7+GcpIU3a X-Received: by 2002:a05:7301:5781:b0:2be:1779:3289 with SMTP id 5a478bee46e88-2c15d4cf79fmr1292448eec.35.1774429805106; Wed, 25 Mar 2026 02:10:05 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:04 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:34 +0800 Subject: [PATCH 03/15] sched/isolation: Separate housekeeping types in enum hk_type Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-3-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Most kernel noise types (TICK, TIMER, RCU, etc.) are currently aliased to a single HK_TYPE_KERNEL_NOISE enum value. This prevents fine-grained runtime isolation control as all masks are forced to be identical. Un-alias service-specific housekeeping types in enum hk_type. This separation provides the necessary granularity for DHEI subsystems to subscribe to and maintain independent affinity masks. Signed-off-by: Qiliang Yuan --- include/linux/sched/isolation.h | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolatio= n.h index 9df55237d3901..6ec64eb3f8bcb 100644 --- a/include/linux/sched/isolation.h +++ b/include/linux/sched/isolation.h @@ -10,21 +10,18 @@ enum hk_type { HK_TYPE_DOMAIN, HK_TYPE_MANAGED_IRQ, - HK_TYPE_KERNEL_NOISE, + HK_TYPE_TICK, + HK_TYPE_TIMER, + HK_TYPE_RCU, + HK_TYPE_MISC, + HK_TYPE_WQ, + HK_TYPE_KTHREAD, HK_TYPE_MAX, =20 - /* - * The following housekeeping types are only set by the nohz_full - * boot commandline option. So they can share the same value. - */ - HK_TYPE_TICK =3D HK_TYPE_KERNEL_NOISE, - HK_TYPE_TIMER =3D HK_TYPE_KERNEL_NOISE, - HK_TYPE_RCU =3D HK_TYPE_KERNEL_NOISE, - HK_TYPE_MISC =3D HK_TYPE_KERNEL_NOISE, - HK_TYPE_WQ =3D HK_TYPE_KERNEL_NOISE, - HK_TYPE_KTHREAD =3D HK_TYPE_KERNEL_NOISE }; =20 +#define HK_TYPE_KERNEL_NOISE HK_TYPE_TICK + struct housekeeping_update { enum hk_type type; const struct cpumask *new_mask; --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f174.google.com (mail-dy1-f174.google.com [74.125.82.174]) (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 3D42734C80D for ; Wed, 25 Mar 2026 09:10:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429814; cv=none; b=a+N1DrzlONu3jnwfcx95pt4NckJVk7YPHOAKl+NVC7XBBYJyZZAwj4IRYVLJH/D7M4+ru9lYTQP1CxOoXPWLHKFX9Msu/fXCqy9m2kSzwQ6A0ptB3m4tFuMVGxnVhreLkh719CHEAjYW5G6XdhHQLahCvDOk1Ql3m5ro+PzIXHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429814; c=relaxed/simple; bh=/0ovyB5zfodZHwmFZ8NkbanEJgNkXF5wQsXFoCBPlyA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ETOxrJg78WRtk7Uw7Q9urJgxc727QgWv83ylgtFl/X37of4HlgaOPwckw+LobTLsk8oZ3c0LCBTSFUQbslosi0q8tX/gMmeVO3MBmaiiYCc3ZiXjTp30OBE2IduT8+7bpdsbyPbYkhSJf2FTFAN4GU6q2MUTLBDNidv2xWgVVp8= 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=QJRBJNlj; arc=none smtp.client-ip=74.125.82.174 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="QJRBJNlj" Received: by mail-dy1-f174.google.com with SMTP id 5a478bee46e88-2bdcf5970cdso594998eec.0 for ; Wed, 25 Mar 2026 02:10:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429812; x=1775034612; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+zwKknmbpTRf8fr0/fDVF5xzUAulDUeqLVmO9Qgf9Ag=; b=QJRBJNlja3cpXbnORXAUKxUiOCbhlmTSfGyK+41eW4pj8HyTyIQo3ly0dyVe5Pv0B9 QKJ8nVoPIDy4nafYnnoQ4D8LIr188nZtCGTpPXL+hh1Cqo/FgC8B6Jj8HbHtI+x25y8j IcjaHO/Ki8en2aZjPjPhr3QGnw3wMRG/OY8JHMAsLhO/MKHrs5QLm1dMeg4VCSSC0H08 m2gaLye5njHj6byGmsUn4DNHQPGq6WOxshHnCWLvjjDcm/gg2oCKtmfSVJo0WpfUnN/7 hg+byW0ZxqijsGwkqxKyHG9TrYVWybBwMTYsVLxv9iZAd3Vss9h75JCsptvJF1AFV6DL wwUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429812; x=1775034612; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+zwKknmbpTRf8fr0/fDVF5xzUAulDUeqLVmO9Qgf9Ag=; b=VFUWi6Vm3VnZwPstnx1HyAiibYlOHUNmzdQZfsl20q4HxYfsV+LIQn9vSXL0svctPa ShL484bnFq6cugJjbvarlzYzb1mppfcc9DFgpMywFrew4pp4V1ACGfueOW6uOIIfy60t H8G9jgvdnkX7YUmVKdUZl1fEU0fZkQsCP3grdTzSJu2BwteDo3wA18oFEOtD6zsU5H4h yayyQQTmz4lh2EB1b2ehi/JEmyqLsmkQxl+eAJlktdDXSZZkzAd8+sqSbzxuYva0Qj6T iFG9b5yLRM0sE0TvSYDbAWW0oKGoZmeDPrQA0KvBUStEruZ0DukMIuU+XKv/TLuWvEnb +iGQ== X-Gm-Message-State: AOJu0YxqQ++01/CagINMnSA6jQ1anHXGtaQiR/ygITD42wspniqyJnuN PUzpdjSSCQfGNm89O6akzeBdykEe1og8TEj8UkQdRWEiNWmEjoGtp2Wh X-Gm-Gg: ATEYQzyDvAHk03wKX38oW4nLad2JJBeI4ieWrUrWfQeolhnkl5BVxbYfWVKocFYYAFN sslVrNJhFxljZOPEnBy51Qs4Ko370K3F7E6dW0rrhb4UkeVZX/mUnx4YpP0TcwKnvk8dBg9+oV9 ts3s82TT+RFqU/Q2H6tQkVS2N/fKs3aT1t8TLAakc7xKZt2QFtp4OO0uowvKMIn0egKLYuYrmNV Lfw6IuSHfjeBb+JpYCOOmSEr88QAA1zW0KGKdlzWnsYHvMH4nzXdX1RIoLYCQdUL2vq7ris9XNs Uq5nm6GEPcLwwR4Cqb8lZ02vRhKlLH9M306QYRkrsJFV3Vzch2R/9ydv5f+n5n52kiFXqsSNRW2 8Wc4ZU1pnV7kKQwSBJKpLO24i4GYFxW2hoIfJgVsIh9ZKQmGa69rtN1kz7YDODCFEukTNRgaVnE 38iQ+CGQ/H2LY/qOxE X-Received: by 2002:a05:7300:7fa7:b0:2c0:df3b:ec1e with SMTP id 5a478bee46e88-2c14b58eb90mr2643092eec.11.1774429812245; Wed, 25 Mar 2026 02:10:12 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:11 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:35 +0800 Subject: [PATCH 04/15] genirq: Support dynamic migration for managed interrupts Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-4-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Managed interrupts currently have their affinity determined once, honoring boot-time isolation settings. There is no mechanism to migrate them when housekeeping boundaries change at runtime. Enable managed interrupts to respond dynamically to housekeeping updates. This ensures that managed interrupts are migrated away from newly isolated CPUs or redistributed when housekeeping CPUs are added. Signed-off-by: Qiliang Yuan --- kernel/irq/manage.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c index 349ae7979da0e..f2cba3d7ef624 100644 --- a/kernel/irq/manage.c +++ b/kernel/irq/manage.c @@ -2811,3 +2811,52 @@ bool irq_check_status_bit(unsigned int irq, unsigned= int bitmask) return res; } EXPORT_SYMBOL_GPL(irq_check_status_bit); + +#ifdef CONFIG_SMP +static int irq_housekeeping_reconfigure(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct housekeeping_update *upd =3D data; + unsigned int irq; + + if (action !=3D HK_UPDATE_MASK || upd->type !=3D HK_TYPE_MANAGED_IRQ) + return NOTIFY_OK; + + irq_lock_sparse(); + for_each_active_irq(irq) { + struct irq_data *irqd; + struct irq_desc *desc; + + desc =3D irq_to_desc(irq); + if (!desc) + continue; + + scoped_guard(raw_spinlock_irqsave, &desc->lock) { + irqd =3D irq_desc_get_irq_data(desc); + if (!irqd_affinity_is_managed(irqd) || !desc->action || + !irq_data_get_irq_chip(irqd)) + continue; + + /* + * Re-apply existing affinity to honor the new + * housekeeping mask via __irq_set_affinity() logic. + */ + irq_set_affinity_locked(irqd, irq_data_get_affinity_mask(irqd), false); + } + } + irq_unlock_sparse(); + + return NOTIFY_OK; +} + +static struct notifier_block irq_housekeeping_nb =3D { + .notifier_call =3D irq_housekeeping_reconfigure, +}; + +static int __init irq_init_housekeeping_notifier(void) +{ + housekeeping_register_notifier(&irq_housekeeping_nb); + return 0; +} +core_initcall(irq_init_housekeeping_notifier); +#endif --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dl1-f42.google.com (mail-dl1-f42.google.com [74.125.82.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ADB2F34E779 for ; Wed, 25 Mar 2026 09:10:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429822; cv=none; b=itbd7JSQ//eD3HzBOtotLJtJ+vLw5u5Hmw5MqFQ6e/v0gYEfXib1nr48Fd5c9VxUCOFxCs7VMtOgPWT55nYYfJoU7cgwcGXHFTS2+M1ROr0Y8MYwltjY3pOoy3WzTqVE4eC365sA0RJ4leSatR8puJni5IVBEgdBEJwN0gRYqh8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429822; c=relaxed/simple; bh=sfZVGU9Hj9stbtl4yUdeoH+u6jGA0FBjc9cEVMC+Gs4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aGVaXbugZJMxVeXWhMDlgSJohoZK82TM2JD64OexoMfJ8N/aVDW6tOoM+iqIoErjZdS+75Y6AX62q75NZHHwDjxOhEFQC//T1L5ZP+rmAyA7UhxcVahpphS8lDyK+QeP5Trmi0Z23wH6mS7a7T1pejaCMPk1ZstN1NuyKt4ntd8= 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=iCHeT2ge; arc=none smtp.client-ip=74.125.82.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iCHeT2ge" Received: by mail-dl1-f42.google.com with SMTP id a92af1059eb24-1273349c56bso6339644c88.0 for ; Wed, 25 Mar 2026 02:10:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429820; x=1775034620; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=AZ4K3OH2k+TMiRs8uy+rQGZy9UvXhyZuqnAHChX5WtE=; b=iCHeT2geEMkV71bph6Ahko0aktuqzgMISU++9blNi8antWORinKcmNQddnKKrIMtCe BrnbySvS34ut9rpYvN4pt27NJyFiSmW+4gG/lcJdcsN98pq8l58AECqD++gJuAOcn/Wj nOgkB+dpYZhruMFQ8yBMZhsCJIDbOiJjmJtf6pREmjyG6cDI75wVwQ33XXS+jAQ6uFjq cOFrZ65wQK1WjDpqlDwgKQbpdsrOVcQi+ITrKxH5tuQBCvHTtGyLlqO2/MM84HJsP6FX yKESJk5XLU3FiqbTefmwRwIV9bkg27BueRUpKD10zacMrUKcDD9WdxM7DtP663OX2uJU xb7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429820; x=1775034620; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=AZ4K3OH2k+TMiRs8uy+rQGZy9UvXhyZuqnAHChX5WtE=; b=Hms+unjYaBXQuPFNvf90DrMBC56XIAyJ94ggpCEE+c8h51DVAwPid0/c0VVLIGHV+i L7CJGwIEioqWXc6k6wCbmTaX/RBaNKiZ46kcR5v12wjiuWVEDR1P3DWaAfPg51vGg4IQ 6zQVR2kMnCXRtGD4cofrkJeJ+mtxXqDDFKCaZm/jiMw0gSeKsjWOoXtUtZP0NC9vmUj1 Y3lX8RdcR6B2a2qJFfFo8VTFS9SiXEcMVpuliyV9Ag+RFZXGxd9dgcrBZl+wTtjMT/wI xAd13UWJta+22jwSCYCMcGhqwkwhrEwgf39uYEzam+AOcRVJ7jrWMq8lzPAGntAc5LOZ Ykmw== X-Gm-Message-State: AOJu0YxwjTn8l7vB1Wkjo2A/CB4yYqxhEUBuUIT7D5SOOJmJ0Y/fj0Vy jxX8yAqcTrLGQ1OSYLV00mGxEMWe9Qe/n935Lw8qDSjbaZjisd+syLY3 X-Gm-Gg: ATEYQzz+nooTzylDaTosTnUAbkas7HMR7sA3t5ISXNc3pvKCfw9oNHr7T0GE8aaGi0H Tt4NhO+YzgCh5mt/J+fBfly0zesWPb1QqNNy+kqBGF+y0kpGgKHfe8PtJ/v8B7nHjVVIT70kr2h 1FlzJ2aKadnljNVnUyGQwrlco7efz2JzeQfqnSwkJ9O+7B5k28F9h2y9WQlvhds/WH9WtlOBi1L MhGg3ZbbJbL+DCUcuTVLA1ujxEq97v7RTBxE87fBLjI2Z0kcttQr4v4022JHarmqVLL0tF6q4z/ rMxbDp9dUZJla1nkFDVL15pi4iZStR3ASMqTp92xPS4UZtSy8mYgNzoKjrUV4WBEZ/Jk0P+xNVj hhI+lrY07e9iQv4LmREeUJtPifJV1xSIjEq/nUuJQr5D1JI27ELo4N21uBXWT6/IuTurErmTd0T 9UuFH8aMyFZQiUY8Kr X-Received: by 2002:a05:7022:618b:b0:12a:6ab7:3f7c with SMTP id a92af1059eb24-12a96e5ee3emr1202993c88.5.1774429819632; Wed, 25 Mar 2026 02:10:19 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:19 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:36 +0800 Subject: [PATCH 05/15] rcu: Support runtime NOCB initialization and dynamic offloading Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-5-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Context: The RCU Non-Callback (NOCB) infrastructure traditionally requires boot-time parameters (e.g., rcu_nocbs) to allocate masks and spawn management kthreads (rcuog/rcuo). This prevents systems from activating offloading on-demand without a reboot. Problem: Dynamic Housekeeping & Enhanced Isolation (DHEI) requires CPUs to transition to NOCB mode at runtime. Without boot-time setup, the NOCB masks are unallocated, and critical kthreads are missing, preventing effective tick suppression and isolation. Solution: Refactor RCU initialization to support dynamic on-demand setup. - Introduce rcu_init_nocb_dynamic() to allocate masks and organize kthreads if the system wasn't initially configured for NOCB. - Update rcu_housekeeping_reconfigure() to iterate over CPUs and perform safe offload/deoffload transitions via hotplug sequences (cpu_down -> offload -> cpu_up). - Remove __init from rcu_organize_nocb_kthreads to allow runtime reconfiguration of the callback management hierarchy. This enables a true "Zero-Conf" isolation experience where any CPU can be fully isolated at runtime regardless of boot parameters. --- kernel/rcu/rcu.h | 4 +++ kernel/rcu/tree.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++= ++++ kernel/rcu/tree.h | 2 +- kernel/rcu/tree_nocb.h | 27 ++++++++++++------ 4 files changed, 99 insertions(+), 10 deletions(-) diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h index 9cf01832a6c3d..fa9de9a3918b1 100644 --- a/kernel/rcu/rcu.h +++ b/kernel/rcu/rcu.h @@ -658,8 +658,12 @@ unsigned long srcu_batches_completed(struct srcu_struc= t *sp); #endif // #else // #ifdef CONFIG_TINY_SRCU =20 #ifdef CONFIG_RCU_NOCB_CPU +void rcu_init_nocb_dynamic(void); +void rcu_spawn_cpu_nocb_kthread(int cpu); void rcu_bind_current_to_nocb(void); #else +static inline void rcu_init_nocb_dynamic(void) { } +static inline void rcu_spawn_cpu_nocb_kthread(int cpu) { } static inline void rcu_bind_current_to_nocb(void) { } #endif =20 diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 293bbd9ac3f4e..3fd12ac20957f 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -4916,4 +4917,79 @@ void __init rcu_init(void) #include "tree_stall.h" #include "tree_exp.h" #include "tree_nocb.h" + +#ifdef CONFIG_SMP +static int rcu_housekeeping_reconfigure(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct housekeeping_update *upd =3D data; + struct task_struct *t; + int cpu; + + if (action !=3D HK_UPDATE_MASK || upd->type !=3D HK_TYPE_RCU) + return NOTIFY_OK; + + rcu_init_nocb_dynamic(); + + for_each_possible_cpu(cpu) { + struct rcu_data *rdp =3D per_cpu_ptr(&rcu_data, cpu); + bool isolated =3D !cpumask_test_cpu(cpu, upd->new_mask); + bool offloaded =3D rcu_rdp_is_offloaded(rdp); + + if (isolated && !offloaded) { + /* Transition to NOCB */ + pr_info("rcu: CPU %d transitioning to NOCB mode\n", cpu); + if (cpu_online(cpu)) { + remove_cpu(cpu); + rcu_spawn_cpu_nocb_kthread(cpu); + rcu_nocb_cpu_offload(cpu); + add_cpu(cpu); + } else { + rcu_spawn_cpu_nocb_kthread(cpu); + rcu_nocb_cpu_offload(cpu); + } + } else if (!isolated && offloaded) { + /* Transition to CB */ + pr_info("rcu: CPU %d transitioning to CB mode\n", cpu); + if (cpu_online(cpu)) { + remove_cpu(cpu); + rcu_nocb_cpu_deoffload(cpu); + add_cpu(cpu); + } else { + rcu_nocb_cpu_deoffload(cpu); + } + } + } + + t =3D READ_ONCE(rcu_state.gp_kthread); + if (t) + housekeeping_affine(t, HK_TYPE_RCU); + +#ifdef CONFIG_TASKS_RCU + t =3D get_rcu_tasks_gp_kthread(); + if (t) + housekeeping_affine(t, HK_TYPE_RCU); +#endif + +#ifdef CONFIG_TASKS_RUDE_RCU + t =3D get_rcu_tasks_rude_gp_kthread(); + if (t) + housekeeping_affine(t, HK_TYPE_RCU); +#endif + + return NOTIFY_OK; +} + +static struct notifier_block rcu_housekeeping_nb =3D { + .notifier_call =3D rcu_housekeeping_reconfigure, +}; + +static int __init rcu_init_housekeeping_notifier(void) +{ + housekeeping_register_notifier(&rcu_housekeeping_nb); + return 0; +} +late_initcall(rcu_init_housekeeping_notifier); +#endif + #include "tree_plugin.h" diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index b8bbe7960cda7..5322656a5a359 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -518,7 +518,7 @@ static void rcu_nocb_unlock_irqrestore(struct rcu_data = *rdp, unsigned long flags); static void rcu_lockdep_assert_cblist_protected(struct rcu_data *rdp); #ifdef CONFIG_RCU_NOCB_CPU -static void __init rcu_organize_nocb_kthreads(void); +static void rcu_organize_nocb_kthreads(void); =20 /* * Disable IRQs before checking offloaded state so that local diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index e6cd56603cad4..9f5f446e70b3f 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -1285,6 +1285,22 @@ lazy_rcu_shrink_scan(struct shrinker *shrink, struct= shrink_control *sc) } #endif // #ifdef CONFIG_RCU_LAZY =20 +void rcu_init_nocb_dynamic(void) +{ + if (rcu_state.nocb_is_setup) + return; + + if (!cpumask_available(rcu_nocb_mask)) { + if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) { + pr_info("rcu_nocb_mask allocation failed, dynamic offloading disabled.\= n"); + return; + } + } + + rcu_state.nocb_is_setup =3D true; + rcu_organize_nocb_kthreads(); +} + void __init rcu_init_nohz(void) { int cpu; @@ -1302,15 +1318,8 @@ void __init rcu_init_nohz(void) cpumask =3D cpu_possible_mask; =20 if (cpumask) { - if (!cpumask_available(rcu_nocb_mask)) { - if (!zalloc_cpumask_var(&rcu_nocb_mask, GFP_KERNEL)) { - pr_info("rcu_nocb_mask allocation failed, callback offloading disabled= .\n"); - return; - } - } - + rcu_init_nocb_dynamic(); cpumask_or(rcu_nocb_mask, rcu_nocb_mask, cpumask); - rcu_state.nocb_is_setup =3D true; } =20 if (!rcu_state.nocb_is_setup) @@ -1442,7 +1451,7 @@ module_param(rcu_nocb_gp_stride, int, 0444); /* * Initialize GP-CB relationships for all no-CBs CPU. */ -static void __init rcu_organize_nocb_kthreads(void) +static void rcu_organize_nocb_kthreads(void) { int cpu; bool firsttime =3D true; --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f176.google.com (mail-dy1-f176.google.com [74.125.82.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 028E834E779 for ; Wed, 25 Mar 2026 09:10:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429829; cv=none; b=KhbSjd6O59oY5axIioMIhrf/rgMFV8q0IBT5YGqJUggtg5Tzmhi9PmlzKgrhegUxMdALJ5yapQAef1EtfLeWrTvFEJgdj17rqRtaYmjlgN8lIAmHPMQjyq20qsPtzE8pmcJB7w3mrIvpuRE1FNKX9WAnKyXT28wPpyccN60/yPE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429829; c=relaxed/simple; bh=t+n2wTHFkqljFya/mEg/ADCwcFPQysDFOOajjS40Mfc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uOL39viJnxw5WVeSTAOwIPPI4VO96ddwARPNG0nb+S5py2D7UFVUbxSny1UFkbAfp0KquPTNfHY8E2AJNSOaII6V5WmssRvN1dWO6ugm3AwP3+9GoBNwO6bdUQ0EOv6kauJlZgrZQNyy1CG0mxHbLOjqDxN6tpNTmo0yVjYPQLI= 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=nzalt8JS; arc=none smtp.client-ip=74.125.82.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="nzalt8JS" Received: by mail-dy1-f176.google.com with SMTP id 5a478bee46e88-2b6b0500e06so7603034eec.1 for ; Wed, 25 Mar 2026 02:10:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429827; x=1775034627; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=cw+tpbsqbbsakcxSKodY3EwFB9EQzmLwAIJ3DaHGMD0=; b=nzalt8JSKq8WgAhF3h8VTvFTeHyTYbTNL6hc2zTro/0BTNkAF3E5dVVBLM0MxHn1VB 3DqSP551b/GJLchDjqAJKMM14c7LHAEZc4P0i6eFGvyXjkusAg4ApDeXTuQDAe5qKgsU nEqGrBecjWJOSyU7x6o1BmxRrN0+/drLu3GDmE+psilxIjCRTb8mMlo1J5D3Y+/0xraM xqDOAIsHIqzwfb6YlPULWsA6L2RGUTS7h4HgGP0KT2bGo+F79XvPk7tOxLY92JjH4Sc0 iSvllnDgsvIJ6Tc/9VFhnIfUBWi8w73m+iYtOc6ZDL6LzSoEp9z8mS8lj7d3MqWh7nB9 qe5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429827; x=1775034627; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=cw+tpbsqbbsakcxSKodY3EwFB9EQzmLwAIJ3DaHGMD0=; b=BW16yq2MoqjAAfxE1TLhe4WFUf1VW2QllJGRKPWoHco5sRAaSfizatB+45zmNsbjAk WNd1uB3EvQUcx4mooJvWqL4HxciNf9lRP0ZqxodhEnWd04pTeBz0cHm2NG34nLu3pvka mkH4HNpiqREr/FQGnpho6WdNmVp/9LsAfqA8ZlX0+2xuqMf1cvi9fR1p/EGyQky0gArF tEwoSoPVkCKUW78dC/HIIwNmTDmXtQqyCpdPC3sEWPxrL4hS1U59KpNofYcurgB6nudw qhQ0OqdNIDZpG7wxbZwV3mdeD/LOB7eZzFKsEGJ6NiutB+tPa+LyZmZx4x+A/uuvVt5a bCnA== X-Gm-Message-State: AOJu0YzagsPfNVgfLXn6au3Jjk4l/KfV6XcrZjoETGz5WUuvcTXGEdHr XrX0k5xaOMxjxSudtbblFWklvMo2MqwEaVdqaMNeSjSL/j9KRh7SUEgb X-Gm-Gg: ATEYQzztBxvFVuKRhLVlyUxwaQM6Rm4nphUobXop8bdJpapa7kT7wHpNgBL5I2EHInD W+efD870tKFfmAS8GJALOJXjvxZsNBt/lDDBl/2mTarbydTl1dl5ZXSsD0a5MZ5QRBoOH24Uxrv 5Zh2clRbkheTUeAv6mABB6J6ItECrtcDCnRgVr3Q/hrFdei3YCA0xTuNR8IcdoEe5V+fmwpQ8Xe LtCTCph9TxvhyuYSg0OG+Z+7EDvg42OPF3vj6PnUjWxc5lyYzCOmdtogxXgCc0fY7cXtDZjKYmu IGv5ErkqQFe8vCF+vPOfMoag/tZSDZooR72lkilOdO004RuFvPMatma+12lk5SaDyPcvl/HIYYo J1dYKbAdMuJCu0n7fzrpoDEMbrWRG4H6RP4WNyV+jNBIwlK+xyD77OaFDtR+/QF7JBqyHgKMlEF YnJfSby7rYW6QxCae3 X-Received: by 2002:a05:7300:cb0e:b0:2be:e4b:60c2 with SMTP id 5a478bee46e88-2c15d291b93mr1336228eec.5.1774429827089; Wed, 25 Mar 2026 02:10:27 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:26 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:37 +0800 Subject: [PATCH 06/15] sched/core: Dynamically update scheduler domain housekeeping mask Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-6-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Scheduler domains rely on HK_TYPE_DOMAIN to identify which CPUs are isolated from general load balancing. Currently, these boundaries are static and determined only during boot-time domain initialization. Trigger a scheduler domain rebuild when the HK_TYPE_DOMAIN mask changes. This ensures that scheduler isolation boundaries can be reconfigured at runtime via the DHEI sysfs interface. Signed-off-by: Qiliang Yuan --- kernel/sched/core.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 045f83ad261e2..ddf9951f1438c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -39,6 +39,7 @@ #include #include #include +#include =20 #include #include @@ -10832,3 +10833,25 @@ void sched_change_end(struct sched_change_ctx *ctx) p->sched_class->prio_changed(rq, p, ctx->prio); } } + +static int sched_housekeeping_update(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct housekeeping_update *update =3D data; + + if (action =3D=3D HK_UPDATE_MASK && update->type =3D=3D HK_TYPE_DOMAIN) + rebuild_sched_domains(); + + return NOTIFY_OK; +} + +static struct notifier_block sched_housekeeping_nb =3D { + .notifier_call =3D sched_housekeeping_update, +}; + +static int __init sched_housekeeping_init(void) +{ + housekeeping_register_notifier(&sched_housekeeping_nb); + return 0; +} +late_initcall(sched_housekeeping_init); --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (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 218E93033E3 for ; Wed, 25 Mar 2026 09:10:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429837; cv=none; b=V2A/iTZn02QVgRkoXi0T8qppIiiJ02pFNk9SkOauWYqIPmxA+jip1ddY0bUFJosv8sjQXlSSzhOvTFDpcdvpkJDonVFijhLGdi6rvf0sB2HQr0MiTx/B0WM8SHuUTU7/1toM03cyyLJWnEj/QEm1+cklSemxo+ZUz6NzkiIkmaI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429837; c=relaxed/simple; bh=UeaDJZbzyb0leR7Qls8fmOy4YWD3y8kXCvRPcK0fa0A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XF7EsaJC/p1jIP512B/exOLu33+hZuiaRLWbdTDdN2LzHjt+3ZfkimGlCXpnzuMXi+N7EpbAAwxS1JrWPKGtJSQG1yR5hcD187gUUcqVizsUUK+RHL7JwHpeD8XgqlsRN9vKG5zcdfVuDUUhV/8jqL/XN650UWCvybViE5fEEyk= 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=WQ185vCt; arc=none smtp.client-ip=74.125.82.181 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="WQ185vCt" Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2c107ef474fso5216783eec.0 for ; Wed, 25 Mar 2026 02:10:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429835; x=1775034635; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=B65y17E56pZOCr9RDMC9jiTFzum1CPtoQPIrPMkYTbY=; b=WQ185vCt9g4aPrVdOOYodFBmLSw2UbjvKLs0yxDWdlkxGUQzkeMN4bpLt9f7s6/qeA Z3bE7lAWlI9dvF8OJLvT01QfxSmRtU/2kGU8yyWy7pMrLX8gfQ1B60+Pq97YuttNLkm4 FEjg/hWBnpC54q6UUKI0qRJlcmKv+a1W5iEmO2t1FICeMQFE0DEwu8nQlVduyTLQRGBh S870/Da9N4d0ihyV2RSkl7fRVx/eR0UXVamhu6jGp/Xg2n1/7/8E7Ed+zf0knWoV8B9M SeyWqGiNZL7dbUPEDMdT59NKks6M+mywDyz/rkOXVDtGpWxaVwo1AstVq9KG9Grh3teH IWKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429835; x=1775034635; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=B65y17E56pZOCr9RDMC9jiTFzum1CPtoQPIrPMkYTbY=; b=VmBxnToVDpRoGVQuFZqBlW9y5E3j62hzjjBhrJIh5X/8c9oLFGpKw+sNR6IRcEt+s5 UGiloh5GfQi4gvomsKIRx8K185FJ/YSyuGrwpKFr6phtTh/SXcljxmlb70gU93cH/cTR LrPjJpH8GVyt6r/W+MKSkuBHuB3xt6KiRSTPiDmgghnFo29YSGEVq1k0Ewm8/XeT0ZJJ IPJW6SLsQywtTtuq/z1nzIaOAkZ6sH/QaXY3QWLkMr8QJbHoPJOOMQuFMmDcMs82VRg4 CmySW5lT5ar4EDncfym1lRI2jBToDfWWY/2tQ+q2vK3UjVrQdGkt8J4/k/qvyDccBegK 691A== X-Gm-Message-State: AOJu0Yz4J8Zfqn73ABzVRo0A9p0T4f32nUkJIJPyjBPAXwYXlLg1FaGM fiYmgTFQiBQzE7KY4KaaLsJ5R4qrT6VhDj9iwdz1na41ptdcrj2MT8R7iTfz1ZbM X-Gm-Gg: ATEYQzzFTaI40fcQe0BIFQwSV/qhMkklwABYQ/GcHYiPnenTV8zK/ONzgy5oDbJWhtw 7pD2exuxuQyIbM18FnGWaeDM2bWx/gB0kE/+QxgJCD6qSjtFXV44VrFEUY98E/WU/IOn9/Xexvm lNHb5L+0M0xVAW9ahgDFydZMKfcsvxiw3AMNQPo9PhmUliy7D1XJ4e4iMCu/Z2/RMFxhEf1KBrD FJOPIQ1DnslSjkxh+CU/5SPQncXpx2t/QjUgvZF2NR7PasMaSCrnbaA6ixanUxL81V+KQ9lhujP +S/MLicUV37LhUuoTnl7dOovGKfGC1KgwBN5uc3Cbs0YfK7srP5n+gW+KfP27itOjU3IaCL/wUn 8X5e/y9OoN/cwL3/zU6SJCB521B9P1kvzm90jKW7Yr0ncYe5ywuuq7malNRy1arNqGcTOcFhsz/ QaBvA6lkPS141/xwXVySoyUi2OOEo= X-Received: by 2002:a05:7301:6592:b0:2bd:c8a2:954 with SMTP id 5a478bee46e88-2c15d41245bmr1419655eec.24.1774429835176; Wed, 25 Mar 2026 02:10:35 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:34 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:38 +0800 Subject: [PATCH 07/15] watchdog: Allow runtime toggle of lockup detector affinity Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-7-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 The hardlockup detector threads are affined to CPUs based on the HK_TYPE_TIMER housekeeping mask at boot. If this mask is updated at runtime, these threads remain on their original CPUs, potentially running on isolated cores. Synchronize watchdog thread affinity with HK_TYPE_TIMER updates. This ensures that hardlockup detector threads correctly follow the dynamic housekeeping boundaries for timers. Signed-off-by: Qiliang Yuan --- kernel/watchdog.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/kernel/watchdog.c b/kernel/watchdog.c index 366122f4a0f87..ef93795729697 100644 --- a/kernel/watchdog.c +++ b/kernel/watchdog.c @@ -26,6 +26,7 @@ #include #include #include +#include =20 #include #include @@ -1359,6 +1360,29 @@ static int __init lockup_detector_check(void) } late_initcall_sync(lockup_detector_check); =20 +static int watchdog_housekeeping_reconfigure(struct notifier_block *nb, + unsigned long action, void *data) +{ + if (action =3D=3D HK_UPDATE_MASK) { + struct housekeeping_update *upd =3D data; + unsigned int type =3D upd->type; + + if (type =3D=3D HK_TYPE_TIMER) { + mutex_lock(&watchdog_mutex); + cpumask_copy(&watchdog_cpumask, + housekeeping_cpumask(HK_TYPE_TIMER)); + proc_watchdog_update(false); + mutex_unlock(&watchdog_mutex); + } + } + + return NOTIFY_OK; +} + +static struct notifier_block watchdog_housekeeping_nb =3D { + .notifier_call =3D watchdog_housekeeping_reconfigure, +}; + void __init lockup_detector_init(void) { if (tick_nohz_full_enabled()) @@ -1373,4 +1397,5 @@ void __init lockup_detector_init(void) allow_lockup_detector_init_retry =3D true; =20 lockup_detector_setup(); + housekeeping_register_notifier(&watchdog_housekeeping_nb); } --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f169.google.com (mail-dy1-f169.google.com [74.125.82.169]) (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 0114A34EF1B for ; Wed, 25 Mar 2026 09:10:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429845; cv=none; b=nbL1n8CQK2zh+MKsoeKP7DxGr6xtsnILzrYfzlydb4llr2BopJfkwHd5v6r93hJ2LNsS9WgiS5I38ZmxXyjiALr9udVw1R14DPn9GRCpQOQRrsCyUpwk6O2Bkxo6KFqGqpvcCP2GEmOIB631ILmQvO90cF0wmASGTErFW+nEAGY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429845; c=relaxed/simple; bh=mrfbrebLUZCOEDJjnautNoTo1l9b+KCTSw7ew/U+baw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DzUXyRmJOWBA4nLVEaDISsy23jjsD9fUEjJCMPBFaGEVRYlzDfk4f5X60ZwIN9wpjUOxcqUc31gK+ZwEGkoBBJwV2sWJHBCqbRc6Jswv6P1AenLCOnK1jiOSOs60rJVsmdc+zVuzmgjAO7zGdfa2CMy0bu4G2xTpx152GMsL40E= 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=dScfrMGD; arc=none smtp.client-ip=74.125.82.169 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="dScfrMGD" Received: by mail-dy1-f169.google.com with SMTP id 5a478bee46e88-2c1092cc08cso2896139eec.1 for ; Wed, 25 Mar 2026 02:10:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429843; x=1775034643; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=AVaXBsXyrGbsFUqtfIJ4CxUQ0g0L6QfqD42wgzMQLJ4=; b=dScfrMGD3usRjutCEoZomIQAkSDL88d4lb616cZezuOz7CLOEftPeXjOiRPhgzz0UL kko2no15nbdrlt9XW1zSrI+yf3oGy37Q4TaBIdQ+Boe00u0OIZwM53lrCkmG3cBj4pHh FA+0o79zpu44tJgRlMt96R3oMlkaREpRItGR2mY8LaSN0HilphKJXryd4PysazU1boWD YXub38f1z6I/dX5NBBkK5tlx3HR+wGc6zFNWdi5NqewBIKBLDmMz+xJTStFRvcr4zUuv TjC5j9uzHNqZ8KMctgUWrmOJwysT3Fr3m8gd0DbC1JT3Kb576lvGIYFuhFQLvrt5oNTI qqiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429843; x=1775034643; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=AVaXBsXyrGbsFUqtfIJ4CxUQ0g0L6QfqD42wgzMQLJ4=; b=Q43Ur+V1hIVTFTf5Y8O1xqw6UqTtUTX2mNy5O4NBrYSDT7558PRCpguMIdSRSLWRPi yQQhbly2pNs4L3bxajjMoLaMqPtLjqVuZLHzZgQQ0QPbFqdh2O1gTUqBLKcFcklt6HaT 1giIex8UBYR4XS/QgzGExEu4JcyCSM6lARfN8j1g/oHpS4DQH1n60bwKgdfB8OBd+0Pj 21w4+hc8PNy7IjXWIMX30QngQ/+3cGwZkZ43CqwmcyOAZmJArnFF0RdbK7V8BU9viEAW /I6DccMtiXs3WORqexNzsoLQMS5bQsxYyi3wb1nurux2pBGTKR6+oP8K1ll63ili5kHf HhIg== X-Gm-Message-State: AOJu0Yys3eVnX5PDwvsXUMoF+/AJ/i/HH5v4H13EeeyaiUpKhbfe/UOe d+dFU6CtTot11fVMKhuiv+L5St9NVVy0yKESZsef1y9z+UGfY4h53t+T X-Gm-Gg: ATEYQzz22DW8u00gBTIEDjuMRBEEh82heTHD9b/FB6+4x+0W7LD0Pp/J0osGcY8eGS6 AHEBrmk1IcCJk257DkxjaJFr98X/Nwj6iCQIgrVsuLoOuCl93SKk+gOAZ2TCyLzS0v8EaYR+ZIH PTAl7Aa4EUhLFXhzc8DHMOtlmrCy0seEBGFKDJMhSXMhASVzNpMiNQSgYXW3VdIw8yr3MQGwP67 e+CmC9ZGmlO7yBo9844EWzHhDX4fO1jh5x1hz6LVSjTwe6i7AwZJUtQoHCKNrp030aWn99Pu8dq O3njLjIKijwB/F9Q21pBUq2TCT7joi3AJMTd1b9tWyXDdazpbPj6CIVkADadC9fG0DVsG7lvlfw 1UCMOlBMPgvqUoWqKXNtiBQ7vLquYu4YqMzzHAo8qjWDz3B25j/79B+yOM9a+sYMJTdkIzGycRG PLQnE/MkT2PyxwgTSS X-Received: by 2002:a05:7301:e0a:b0:2be:9886:d4cc with SMTP id 5a478bee46e88-2c15d31dab0mr1366051eec.3.1774429843054; Wed, 25 Mar 2026 02:10:43 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:42 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:39 +0800 Subject: [PATCH 08/15] workqueue: Support dynamic housekeeping mask updates Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-8-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Unbound workqueues use HK_TYPE_WQ and HK_TYPE_DOMAIN to determine their default CPU affinity. These boundaries are currently static and only enforced during early boot. Implement a housekeeping notifier to update unbound workqueue affinity. This enables unbound workqueue tasks to respect dynamic isolation boundaries at runtime. Signed-off-by: Qiliang Yuan --- kernel/workqueue.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/kernel/workqueue.c b/kernel/workqueue.c index 253311af47c6d..ef3ef7e3fe81f 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -7904,6 +7904,47 @@ static void __init wq_cpu_intensive_thresh_init(void) wq_cpu_intensive_thresh_us =3D thresh; } =20 +static int wq_housekeeping_reconfigure(struct notifier_block *nb, + unsigned long action, void *data) +{ + if (action =3D=3D HK_UPDATE_MASK) { + struct housekeeping_update *upd =3D data; + unsigned int type =3D upd->type; + + if (type =3D=3D HK_TYPE_WQ || type =3D=3D HK_TYPE_DOMAIN) { + cpumask_var_t cpumask; + + if (!alloc_cpumask_var(&cpumask, GFP_KERNEL)) { + pr_warn("workqueue: failed to allocate cpumask for housekeeping update= \n"); + return NOTIFY_BAD; + } + + cpumask_copy(cpumask, cpu_possible_mask); + if (!cpumask_empty(housekeeping_cpumask(HK_TYPE_WQ))) + cpumask_and(cpumask, cpumask, housekeeping_cpumask(HK_TYPE_WQ)); + if (!cpumask_empty(housekeeping_cpumask(HK_TYPE_DOMAIN))) + cpumask_and(cpumask, cpumask, housekeeping_cpumask(HK_TYPE_DOMAIN)); + + workqueue_set_unbound_cpumask(cpumask); + + if (type =3D=3D HK_TYPE_DOMAIN) { + apply_wqattrs_lock(); + cpumask_andnot(wq_isolated_cpumask, cpu_possible_mask, + housekeeping_cpumask(HK_TYPE_DOMAIN)); + apply_wqattrs_unlock(); + } + + free_cpumask_var(cpumask); + } + } + + return NOTIFY_OK; +} + +static struct notifier_block wq_housekeeping_nb =3D { + .notifier_call =3D wq_housekeeping_reconfigure, +}; + /** * workqueue_init - bring workqueue subsystem fully online * @@ -7964,6 +8005,7 @@ void __init workqueue_init(void) =20 wq_online =3D true; wq_watchdog_init(); + housekeeping_register_notifier(&wq_housekeeping_nb); } =20 /* --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f174.google.com (mail-dy1-f174.google.com [74.125.82.174]) (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 4E85534FF5A for ; Wed, 25 Mar 2026 09:10:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429853; cv=none; b=C+CHLKrqBxEZKEsFKA9tRaNCSiQHCxYLgDh0J5MfXhmWaC/MGAaePyi2iPnGsGFxY1G881AZsWIH9kCMSc8ic133x4oz5/hzLdWRYCFMNyJWTc1FOuzwvbQ+P3yKrisxqjsaHLfTAhVU2nLgLauibfOKR1T+n5MtFauf5tRpE7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429853; c=relaxed/simple; bh=qg8WLXL88Iept54fzSGWgFgBN1HmxL+HvwvzbJJ1K+4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dEFiXwLhIy7qkGdgwuPYLwZrGRhIBKEQUQN+JsBDvhZLMLQW/8dyVbM9JTrYqp0AXOIShxslhA/eruUmN3MhPieySplHNABdw2pSJ+1doByFSYL9gvojSjdLFtJENgpzGtLa8NV+UgXzlhnmK4MzF+6I2l1VNcC3v40iDrzVMO4= 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=ISUg5NGP; arc=none smtp.client-ip=74.125.82.174 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="ISUg5NGP" Received: by mail-dy1-f174.google.com with SMTP id 5a478bee46e88-2bdcf5970cdso595356eec.0 for ; Wed, 25 Mar 2026 02:10:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429850; x=1775034650; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=0ZgSquaLuKBFQZpkdx/1H4ca5cGKSrUW15huIE1GEBI=; b=ISUg5NGPIpEfbQsjlwC1Er3p4lCtuAt2FDC0Kwn+O9eMIErydITTEx7nqkASOssODr nUDQYRuPLnwXrAUunGsnPjoelBNnq6+VMv37sBofsfopkVEDKqwM0G83asN4xCjWiP9h /aMSAxRQMrAv/VOf0bSZj1MSf6ynk0EXYWjjcR4dcnNq+fLMxesPFCoQp//aP+1LT3b7 A9ovAYckunhqKFj+9A2M4p6T3tnIsqzgjKakPuxq2k+wNE0WrE4S55mIcwPXGTVU+zSE /Y4yjn439dlLF51w6l8pGzE1P2Fjichtlj+ufpsXv/8p5FmzpDFKOhtR1WsOOB+UEvey y4wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429850; x=1775034650; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=0ZgSquaLuKBFQZpkdx/1H4ca5cGKSrUW15huIE1GEBI=; b=kNfxSfMkhSsE2iAytWEGnkmY8NUNNtB3HqlRiMb8b9wl3Hs0Vc1ky9mlTFU7NYmajx nPsLQ6yMSpRh16Kjd2Ekd03kgOeyZ9VVLUhTHIdwXCPDJKMkWG8UGkuIlqe5H6oxdYAg Fkr9DWApFbBsvmYRVElOv1qnRSKUrImVAX0YZ+eVTW64SJzEFBGFpCKzg32aBooVRHZ0 ZlbZ37y0uYCpUafQdMEzU3hwq9J5LCNrPeVx+CQ70Wx1oDwrXhVAgrn/ZJ494ZMY3vrz 79dB/1XqAINYYa/OH+3QYrPAW4kPKUM4Q+jyViNjCq0k97Qo+vqnTSGP53pBrEsR5L3g m3Rw== X-Gm-Message-State: AOJu0YxGQ90ZxnwU0B8eOxZkJjX3j34w9YIYrOESVbHNCXVWU1ycy5nX Zr5nEFDgXO7fPXf7op8uoQyVz54Rz6Z3ZR7TBeyBf1XASeUWbU2gdErw X-Gm-Gg: ATEYQzx6+/wfHBvKjVMVx97xZw4EbXkNluvmEytGEOqghQHA/MM7mNaYRRGMeFfUC7I inmjlYTXUZzdoWskV/CXG6dmvrlbUaSPYeGmQdGggoSCitGBKi5lh/SvJWndWK3whMLq4PwUA2X SRvGlZ4FsNuIwRlkPuzl7lo4iG3BClsA8/dkgjzx+f2UCPceSKY4P2kjcCnFXWt11cAyBcIHIe+ Dvglk8Q2iHyto8s4sQCKPmJD+M/1gfYCzoLPDVGOX6OXcSGGWfRxv+ueg/ePIS55cKSG5XuYB8S MhuJvJlf1hvGKYYWnUCoCn1fL0gctqNmnogNAeecoRSX1lcKY0/LqS/+P5iPmXBHHZaHHitvFGp /YHSCv42rmretHPaY7eRv6v8jjiGB55W0ezfvmu7NjtqCNvff14C3bH7V/7T78H/mPh0aMncKmH 1OV3QoJfFVH9eaY/pJ X-Received: by 2002:a05:7301:9f14:b0:2c0:ac4e:1516 with SMTP id 5a478bee46e88-2c15bd3cb1cmr1301131eec.11.1774429850168; Wed, 25 Mar 2026 02:10:50 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:49 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:40 +0800 Subject: [PATCH 09/15] mm/compaction: Support dynamic housekeeping mask updates for kcompactd Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-9-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 The kcompactd threads are affined to housekeeping CPUs (HK_TYPE_DOMAIN) at boot to avoid interference with isolated workloads. Currently, these threads do not migrate when the housekeeping boundaries are reconfigured at runtime. Implement a housekeeping notifier to synchronize kcompactd affinity. This ensures that background compaction threads honor the dynamic isolation boundaries configured via the DHEI sysfs interface. Signed-off-by: Qiliang Yuan --- mm/compaction.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/mm/compaction.c b/mm/compaction.c index 1e8f8eca318c6..574ee3c6dc942 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "internal.h" =20 #ifdef CONFIG_COMPACTION @@ -3246,6 +3247,7 @@ void __meminit kcompactd_run(int nid) pr_err("Failed to start kcompactd on node %d\n", nid); pgdat->kcompactd =3D NULL; } else { + housekeeping_affine(pgdat->kcompactd, HK_TYPE_KTHREAD); wake_up_process(pgdat->kcompactd); } } @@ -3320,6 +3322,30 @@ static const struct ctl_table vm_compaction[] =3D { }, }; =20 +static int kcompactd_housekeeping_reconfigure(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct housekeeping_update *upd =3D data; + unsigned int type =3D upd->type; + + if (action =3D=3D HK_UPDATE_MASK && type =3D=3D HK_TYPE_KTHREAD) { + int nid; + + for_each_node_state(nid, N_MEMORY) { + pg_data_t *pgdat =3D NODE_DATA(nid); + + if (pgdat->kcompactd) + housekeeping_affine(pgdat->kcompactd, HK_TYPE_KTHREAD); + } + } + + return NOTIFY_OK; +} + +static struct notifier_block kcompactd_housekeeping_nb =3D { + .notifier_call =3D kcompactd_housekeeping_reconfigure, +}; + static int __init kcompactd_init(void) { int nid; @@ -3327,6 +3353,7 @@ static int __init kcompactd_init(void) for_each_node_state(nid, N_MEMORY) kcompactd_run(nid); register_sysctl_init("vm", vm_compaction); + housekeeping_register_notifier(&kcompactd_housekeeping_nb); return 0; } subsys_initcall(kcompactd_init) --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f177.google.com (mail-dy1-f177.google.com [74.125.82.177]) (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 E6EB83431E3 for ; Wed, 25 Mar 2026 09:10:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429861; cv=none; b=ByZM1i58FPAdfcV0hCLX5Os3GzEft6Gp62jpJa/URx/Jtpz5yovtuSzAT4GbvRORQ18Nq9ZlH298Too0yXA+J2T78ERzEWaibnqiljLnNkfj7VL1+J5k2JkbAQ/K6cT+6zeuWlOEd1IfPTge/tGmUdZR+QnEQX0jECVHswgFiB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429861; c=relaxed/simple; bh=dZRPxCW29l/fu7AJjzApS7HpjEpQcwXBEnvE4/krAJA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KqJ+mMeTLy8e11ANirvkjbm9Qrz6oSzg1iPwHUh/hdA9SrXh2JT5c7g9/5150jYvL/I9MaUEroIASIW5WhyTiwQsn3dodtN8TwiOUl77/ka4fsWJIfffgI35VxP81wd60EXGDobaRnCR8QYDgr4lUTylmLyRq+wUC7gP8v+0LB4= 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=HegLohDh; arc=none smtp.client-ip=74.125.82.177 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="HegLohDh" Received: by mail-dy1-f177.google.com with SMTP id 5a478bee46e88-2c1092cc08cso2896853eec.1 for ; Wed, 25 Mar 2026 02:10:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429859; x=1775034659; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=j696bvYoqH2TUY0iU+oTg40Ft0YnS+LfzToj8hbXNYs=; b=HegLohDha3eWmDRYz+hahj2NwKxXbH6W7eS5zL1nqNLs1OHcQk77khFA1BNuosAx89 3qPbPC69Wu53mTYie2F8dtuyPNdQX6jUgg1lOkQAWOG8TC6lx5TSO/ypirMxlJ8mgyCs cM8olWSwaeuaT73Dov8oDvjxaaNIrC655tXyMqtV+rbrLJEQV1S0YBgiPzY+YVCtfjtc SxJvR9PqYopMulnsqVPiefcjMavFtXkCSXa4qC/Gh5P2WeEuXhL8dtnVe4e06HhQRpOs 6mIojhVAWOQaYBDGyxOr4YyzXmf6E4PEQvqs+g4x/xUepNsQio2dk+HXdU5CB4J677xj 4JXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429859; x=1775034659; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=j696bvYoqH2TUY0iU+oTg40Ft0YnS+LfzToj8hbXNYs=; b=c9tEN8Oq0FQBGT0mid8r8ZEIjA8nMX774ZfSwAwkfPKOhTQgOJBMPuQ/x0+9MdUfG6 W7Ys4kSgURO5mcTuKctXPu7hBMy6flkxCl79pJk10qfemDxItDP5PcxY/GlmPUDnd0Sx utdP2mVbwU9RdkcMWOMJA0nVuFl59NNN2G51RTA8IeK3eRnbaiDBapgEezhrIDoqmQt6 0/leiofs1cquCQu1gSmMnBArf8SSCG3xl0mufSnP5lSS8/MMhrPAb4FcGqFj6HP8IHAG YCTl0cbhJ2sgSVgbLygOJHhOUWPE3hTBLjQiYq3WVzOW/QHG/kTL3OC+YO8pOy+X1EY2 WiNQ== X-Gm-Message-State: AOJu0Yw3bMXtGtl8ntKlggS1Kc2ArGpwKiO2BQioAwiQHLchKvoA+H6/ mR0NH230hGrbX3hPiGQbQVN+AtUR8heAgZQEc2fovl03tUUbng4IFExJ X-Gm-Gg: ATEYQzz57KwmpmyUmkJ9T85WIP9xeStpRHLL7y13ZZoEQC6fl4Or4ytUojnQ9ZEfNai 27shLNWPnjf5r2dPQQxXI96msO6C3Gy5cAYgKJkqtNHFGmI5+kEp9S3pEfyY4a+LmxaRJP7cFQB gwJOlDTruqcDWZzMDxEsj9jIwk+GILJVBJ2pZohQ87B+uazwANfWae7Tu5Ssq37v54ABs9b7IF7 9PZSL5eparo5sg+kVOGkdvFfxswr0mSWtzkFC22bb4G4TAveQcDRpe8wMNYsGx3nGW6lWjiwlAN 55JFh5t/jecbEL8F1KlMABA/hKXDCYYqUdtleQ4VDQcWrabNpd5yUm7BKOfgknznJFQJslGDlux spm991s+KlMsqln0Ax0EBXVunxLBfnO+pTSA91d3iIvYEtyAqIUICMxFTWks931u3IAlncKfuL9 QjKqXk5KNXcc8mqQaz X-Received: by 2002:a05:7300:cb0e:b0:2be:8216:57c8 with SMTP id 5a478bee46e88-2c15d4a74bdmr1207196eec.30.1774429859013; Wed, 25 Mar 2026 02:10:59 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:10:58 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:41 +0800 Subject: [PATCH 10/15] tick/nohz: Transition to dynamic full dynticks state management Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-10-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Context: Full dynticks (NOHZ_FULL) is typically a static configuration determined at boot time. DHEI extends this to support runtime activation. Problem: Switching to NOHZ_FULL at runtime requires careful synchronization of context tracking and housekeeping states. Re-invoking setup logic multiple times could lead to inconsistencies or warnings, and RCU dependency checks often prevented tick suppression in "Zero-Conf" setups. Solution: - Replaced the static tick_nohz_full_enabled() checks with a dynamic tick_nohz_full_running state variable. - Refactored tick_nohz_full_setup to be safe for runtime invocation, adding guards against re-initialization and ensuring IRQ work interrupt support. - Implemented boot-time pre-activation of context tracking (shadow init) for all possible CPUs to avoid instruction flow issues during dynamic transitions. - Restored standard rcu_needs_cpu() checks now that RCU supports native dynamic NOCB mode switching. This provides the core state machine for reliable, on-demand tick suppression and high-performance isolation. --- kernel/time/tick-sched.c | 130 ++++++++++++++++++++++++++++++++++++++-----= ---- 1 file changed, 105 insertions(+), 25 deletions(-) diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index 2f8a7923fa279..dee42cea259a9 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -27,6 +27,7 @@ #include #include #include +#include =20 #include =20 @@ -621,13 +622,25 @@ void __tick_nohz_task_switch(void) /* Get the boot-time nohz CPU list from the kernel parameters. */ void __init tick_nohz_full_setup(cpumask_var_t cpumask) { - alloc_bootmem_cpumask_var(&tick_nohz_full_mask); + if (!tick_nohz_full_mask) { + if (!slab_is_available()) + alloc_bootmem_cpumask_var(&tick_nohz_full_mask); + else + zalloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL); + } cpumask_copy(tick_nohz_full_mask, cpumask); tick_nohz_full_running =3D true; } =20 bool tick_nohz_cpu_hotpluggable(unsigned int cpu) { + /* + * Allow all CPUs to go down during shutdown/reboot to avoid + * interfering with the final power-off sequence. + */ + if (system_state > SYSTEM_RUNNING) + return true; + /* * The 'tick_do_timer_cpu' CPU handles housekeeping duty (unbound * timers, workqueues, timekeeping, ...) on behalf of full dynticks @@ -643,45 +656,112 @@ static int tick_nohz_cpu_down(unsigned int cpu) return tick_nohz_cpu_hotpluggable(cpu) ? 0 : -EBUSY; } =20 +static int tick_nohz_housekeeping_reconfigure(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct housekeeping_update *upd =3D data; + int cpu; + + if (action =3D=3D HK_UPDATE_MASK && upd->type =3D=3D HK_TYPE_TICK) { + cpumask_var_t non_housekeeping_mask; + + if (!alloc_cpumask_var(&non_housekeeping_mask, GFP_KERNEL)) + return NOTIFY_BAD; + + cpumask_andnot(non_housekeeping_mask, cpu_possible_mask, upd->new_mask); + + if (!tick_nohz_full_mask) { + if (!zalloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL)) { + free_cpumask_var(non_housekeeping_mask); + return NOTIFY_BAD; + } + } + + /* Kick all CPUs to re-evaluate tick dependency before change */ + for_each_online_cpu(cpu) + tick_nohz_full_kick_cpu(cpu); + + cpumask_copy(tick_nohz_full_mask, non_housekeeping_mask); + tick_nohz_full_running =3D !cpumask_empty(tick_nohz_full_mask); + + /* + * If nohz_full is running, the timer duty must be on a housekeeper. + * If the current timer CPU is not a housekeeper, or no duty is assigned, + * pick the first housekeeper and assign it. + */ + if (tick_nohz_full_running) { + int timer_cpu =3D READ_ONCE(tick_do_timer_cpu); + if (timer_cpu =3D=3D TICK_DO_TIMER_NONE || + !cpumask_test_cpu(timer_cpu, upd->new_mask)) { + int next_timer =3D cpumask_first(upd->new_mask); + if (next_timer < nr_cpu_ids) + WRITE_ONCE(tick_do_timer_cpu, next_timer); + } + } + + /* Kick all CPUs again to apply new nohz full state */ + for_each_online_cpu(cpu) + tick_nohz_full_kick_cpu(cpu); + + free_cpumask_var(non_housekeeping_mask); + } + + return NOTIFY_OK; +} + +static struct notifier_block tick_nohz_housekeeping_nb =3D { + .notifier_call =3D tick_nohz_housekeeping_reconfigure, +}; + void __init tick_nohz_init(void) { int cpu, ret; =20 - if (!tick_nohz_full_running) - return; - - /* - * Full dynticks uses IRQ work to drive the tick rescheduling on safe - * locking contexts. But then we need IRQ work to raise its own - * interrupts to avoid circular dependency on the tick. - */ - if (!arch_irq_work_has_interrupt()) { - pr_warn("NO_HZ: Can't run full dynticks because arch doesn't support IRQ= work self-IPIs\n"); - cpumask_clear(tick_nohz_full_mask); - tick_nohz_full_running =3D false; - return; + if (!tick_nohz_full_mask) { + if (!slab_is_available()) + alloc_bootmem_cpumask_var(&tick_nohz_full_mask); + else + zalloc_cpumask_var(&tick_nohz_full_mask, GFP_KERNEL); } =20 - if (IS_ENABLED(CONFIG_PM_SLEEP_SMP) && - !IS_ENABLED(CONFIG_PM_SLEEP_SMP_NONZERO_CPU)) { - cpu =3D smp_processor_id(); + housekeeping_register_notifier(&tick_nohz_housekeeping_nb); =20 - if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) { - pr_warn("NO_HZ: Clearing %d from nohz_full range " - "for timekeeping\n", cpu); - cpumask_clear_cpu(cpu, tick_nohz_full_mask); + if (tick_nohz_full_running) { + /* + * Full dynticks uses IRQ work to drive the tick rescheduling on safe + * locking contexts. But then we need IRQ work to raise its own + * interrupts to avoid circular dependency on the tick. + */ + if (!arch_irq_work_has_interrupt()) { + pr_warn("NO_HZ: Can't run full dynticks because arch doesn't support IR= Q work self-IPIs\n"); + cpumask_clear(tick_nohz_full_mask); + tick_nohz_full_running =3D false; + goto out; } + + if (IS_ENABLED(CONFIG_PM_SLEEP_SMP) && + !IS_ENABLED(CONFIG_PM_SLEEP_SMP_NONZERO_CPU)) { + cpu =3D smp_processor_id(); + + if (cpumask_test_cpu(cpu, tick_nohz_full_mask)) { + pr_warn("NO_HZ: Clearing %d from nohz_full range " + "for timekeeping\n", cpu); + cpumask_clear_cpu(cpu, tick_nohz_full_mask); + } + } + + pr_info("NO_HZ: Full dynticks CPUs: %*pbl.\n", + cpumask_pr_args(tick_nohz_full_mask)); } =20 - for_each_cpu(cpu, tick_nohz_full_mask) +out: + for_each_possible_cpu(cpu) ct_cpu_track_user(cpu); =20 ret =3D cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "kernel/nohz:predown", NULL, tick_nohz_cpu_down); WARN_ON(ret < 0); - pr_info("NO_HZ: Full dynticks CPUs: %*pbl.\n", - cpumask_pr_args(tick_nohz_full_mask)); } #endif /* #ifdef CONFIG_NO_HZ_FULL */ =20 @@ -1200,7 +1280,7 @@ static bool can_stop_idle_tick(int cpu, struct tick_s= ched *ts) if (unlikely(report_idle_softirq())) return false; =20 - if (tick_nohz_full_enabled()) { + if (tick_nohz_full_running) { int tick_cpu =3D READ_ONCE(tick_do_timer_cpu); =20 /* --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f178.google.com (mail-dy1-f178.google.com [74.125.82.178]) (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 810893431E3 for ; Wed, 25 Mar 2026 09:11:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429869; cv=none; b=Iz5zOCIG/v9U2FLCv3K8we3aX1FpUZH/lG6M2hzRSitEPb7yDEscHIrprTGhpdXnHNdIinUfpTuJVv188DWimu9w3b3hEs18vPyD3TsEM8nfGKwXZNUFB27FkWKShYreIvaWZqAsRo5l0ibiux0zsbFKKTNDcKW0NnM321q/ZoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429869; c=relaxed/simple; bh=VDl3mSv13UEmXW0CmH1Svs1ZFwxlhYyvejDTlM/v8n4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kSwUKEuF2mqiDTXSzCeC0PDJqna2rbSy5dm4skstO0+z2/55lgq1ZgxS0/T2St6eBweupPgWQh25BmIWvkhSvvO2qFAE0gL+fbziQAdS7WlWrvaGmjgrPuQF/9RvFxSEk/85lfQZy1II5+ss46l+k/DSQbMgVxqcPPn0Xz8uHwg= 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=F8BOF/zr; arc=none smtp.client-ip=74.125.82.178 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="F8BOF/zr" Received: by mail-dy1-f178.google.com with SMTP id 5a478bee46e88-2c0c955a481so45670eec.1 for ; Wed, 25 Mar 2026 02:11:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429868; x=1775034668; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=yZ5gRq9U07SXKnZs/b+mpems8hvXSmfr+O/2j6j26po=; b=F8BOF/zr6CnCRs1AyCj90X7QxQvIK2rU91MzjqObhvZ41qQBM7QEnsFxrQ5//H8S39 OqLNs4aLOLxrkUNsFXU7iP9DXH8zhqMS5YlxEwEn9qSGLCPzpHFxzOr+KeDr7uQjgLT1 8/IptrvV2nooDb/gkfkOjLQUWJmmm8P8EFqgk4cqjBPo7aBxkIVW9moBWRbyul7ot2en S4gPrf35SkDda+fHbUPph4id+xE0Q90Cw71L35n1chDPlgxzSjYxho6FcCNqlbgRtFlR 7MtFfD8E5szYdPzbDVGIFdW7EbVKpR08SjBoxkTu7bQsfDj+f7D2al8YgPXYcIY+hdc9 veBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429868; x=1775034668; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=yZ5gRq9U07SXKnZs/b+mpems8hvXSmfr+O/2j6j26po=; b=h1MNNDzZxQGaAhx4eTU4V9hsT0lN7lmcGnbQPmBFCXoX4SgaPPHRPvqOMc06vvJou0 NY17l2CxQ4ruV5JuQ6kaXi3GGnUXQXUB4UAxsJBe95e/HQjX33h2OzyU9N6coh2H9a/f ebX07M09/CGSEvxMTvWOKLV08RO0Ilidz3nnKRbSbHAlKJjR9+j8VSIy59Vxq++3lveD F9Y+630VNCaXLzDhkRT9d3SEzPzGBJHpaajlyHt3aZ5unj9DScmNu8nRs/WynvNgfGmq sZ3TrW01TqRow7n963QpJ65+CwVZDIYq14ETShg7rw/Bsf0urEKfo7NEgIQB2VIFjo5n o28A== X-Gm-Message-State: AOJu0YxP+90T80muEEbKCzyU3b8FzRS09+nnRtOH0UP//Q50XXSGBshM 4QWwCv5ocxvi3xVDE7b07xgqhlOAfZrl/lJkO1gwF27PML8pEI9fMPmp X-Gm-Gg: ATEYQzxmCTpO8z8E556eNvaMIvaj1f4sDt2N6urkGciP+kU59HDktPrdaIKRTzhb5Gz dLHqZTAqCyDlyWtTyWPgfUH7/3JGFY1e7eN3612LDopo4Ux1Na3pI1N829ubw6t+naV5cql80Th fjOkHNUtNCBIbHyfPS0xMjTB6GwkxcgyCZB3Mggpx2VaOnGCNRm2S/GVoVe6ipKL0pXfZ4vjF/8 /rVdB9qY3jFdUxok5uPHLLfdHtjHLOtMXiFP9inFOktiq9wUCmF3tdUVOKA678M6A3fhC+gddZd 5YHbxX3UaL0rXRJatwglPhvTdUrH1Ffn+RRyzo+6SP7sULWKAYWnXYE2qtZWDO4lRwyhSVGwf5I kk9LReZCZrd9K+I58OzoeO+qFAy1/rwPSnH6VcP02sILHXG14c77sPojOdncgGCuy07p3uazTYR TjZVrXP1xT4xDFpBx+ X-Received: by 2002:a05:693c:3746:b0:2be:37d:3d6d with SMTP id 5a478bee46e88-2c15d41a548mr1430796eec.32.1774429867454; Wed, 25 Mar 2026 02:11:07 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.10.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:11:07 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:42 +0800 Subject: [PATCH 11/15] sched/isolation: Implement SMT-aware isolation and safety guards Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-11-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Manual isolation of single SMT siblings can lead to resource contention and inconsistent performance. Furthermore, userspace might accidentally isolate all available CPUs, leading to a system lockup. Enhance DHEI with SMT-aware grouping and safety checks. These enhancements ensure that hardware resource boundaries are respected and prevent catastrophic misconfiguration of the system. Signed-off-by: Qiliang Yuan --- kernel/sched/isolation.c | 180 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 180 insertions(+) diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index e7a21023726df..4a5967837e8de 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "sched.h" =20 enum hk_flags { @@ -29,6 +30,30 @@ struct housekeeping { }; =20 static struct housekeeping housekeeping; +static bool housekeeping_smt_aware; + +static ssize_t smt_aware_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return sprintf(buf, "%d\n", housekeeping_smt_aware); +} + +static ssize_t smt_aware_store(struct kobject *kobj, + struct kobj_attribute *attr, + const char *buf, size_t count) +{ + bool val; + + if (kstrtobool(buf, &val)) + return -EINVAL; + + housekeeping_smt_aware =3D val; + + return count; +} + +static struct kobj_attribute smt_aware_attr =3D + __ATTR(smt_aware_mode, 0644, smt_aware_show, smt_aware_store); =20 bool housekeeping_enabled(enum hk_type type) { @@ -110,6 +135,161 @@ static int housekeeping_update_notify(enum hk_type ty= pe, const struct cpumask *n return blocking_notifier_call_chain(&housekeeping_notifier_list, HK_UPDAT= E_MASK, &update); } =20 +static const char * const hk_type_names[] =3D { + [HK_TYPE_TIMER] =3D "timer", + [HK_TYPE_RCU] =3D "rcu", + [HK_TYPE_MISC] =3D "misc", + [HK_TYPE_TICK] =3D "tick", + [HK_TYPE_DOMAIN] =3D "domain", + [HK_TYPE_WQ] =3D "workqueue", + [HK_TYPE_MANAGED_IRQ] =3D "managed_irq", + [HK_TYPE_KTHREAD] =3D "kthread", +}; + +struct hk_attribute { + struct kobj_attribute kattr; + enum hk_type type; +}; + +#define to_hk_attr(_kattr) container_of(_kattr, struct hk_attribute, kattr) + +static ssize_t housekeeping_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + struct hk_attribute *hk_attr =3D to_hk_attr(attr); + const struct cpumask *mask =3D housekeeping_cpumask(hk_attr->type); + + return cpumap_print_to_pagebuf(true, buf, mask); +} + +static ssize_t housekeeping_store(struct kobject *kobject, + struct kobj_attribute *attr, + const char *buf, size_t count) +{ + struct hk_attribute *hk_attr =3D to_hk_attr(attr); + enum hk_type type =3D hk_attr->type; + cpumask_var_t new_mask; + int err; + + if (!alloc_cpumask_var(&new_mask, GFP_KERNEL)) + return -ENOMEM; + + err =3D cpulist_parse(buf, new_mask); + if (err) + goto out_free; + + /* Safety check: must have at least one online CPU for housekeeping */ + if (!cpumask_intersects(new_mask, cpu_online_mask)) { + err =3D -EINVAL; + goto out_free; + } + + if (housekeeping_smt_aware) { + int cpu, sibling; + cpumask_var_t tmp_mask; + + if (!alloc_cpumask_var(&tmp_mask, GFP_KERNEL)) { + err =3D -ENOMEM; + goto out_free; + } + + cpumask_copy(tmp_mask, new_mask); + for_each_cpu(cpu, tmp_mask) { + for_each_cpu(sibling, topology_sibling_cpumask(cpu)) { + if (!cpumask_test_cpu(sibling, tmp_mask)) { + /* SMT sibling should stay grouped */ + cpumask_clear_cpu(cpu, new_mask); + break; + } + } + } + free_cpumask_var(tmp_mask); + + /* Re-check after SMT sync */ + if (!cpumask_intersects(new_mask, cpu_online_mask)) { + err =3D -EINVAL; + goto out_free; + } + } + + mutex_lock(&housekeeping_mutex); + + if (!housekeeping.cpumasks[type]) { + if (!alloc_cpumask_var(&housekeeping.cpumasks[type], GFP_KERNEL)) { + err =3D -ENOMEM; + goto out_unlock; + } + } + + if (cpumask_equal(housekeeping.cpumasks[type], new_mask)) { + err =3D 0; + goto out_unlock; + } + + cpumask_copy(housekeeping.cpumasks[type], new_mask); + housekeeping.flags |=3D BIT(type); + static_branch_enable(&housekeeping_overridden); + + housekeeping_update_notify(type, new_mask); + + err =3D count; + +out_unlock: + mutex_unlock(&housekeeping_mutex); +out_free: + free_cpumask_var(new_mask); + return err < 0 ? err : count; +} + +static struct hk_attribute housekeeping_attrs[HK_TYPE_MAX]; +static struct attribute *housekeeping_attr_ptr[HK_TYPE_MAX + 1]; + +static const struct attribute_group housekeeping_attr_group =3D { + .attrs =3D housekeeping_attr_ptr, +}; + +static int __init housekeeping_sysfs_init(void) +{ + struct kobject *housekeeping_kobj; + int i, j =3D 0; + int ret; + + housekeeping_kobj =3D kobject_create_and_add("housekeeping", kernel_kobj); + if (!housekeeping_kobj) + return -ENOMEM; + + for (i =3D 0; i < HK_TYPE_MAX; i++) { + if (!hk_type_names[i]) + continue; + + housekeeping_attrs[i].type =3D i; + sysfs_attr_init(&housekeeping_attrs[i].kattr.attr); + housekeeping_attrs[i].kattr.attr.name =3D hk_type_names[i]; + housekeeping_attrs[i].kattr.attr.mode =3D 0644; + housekeeping_attrs[i].kattr.show =3D housekeeping_show; + housekeeping_attrs[i].kattr.store =3D housekeeping_store; + housekeeping_attr_ptr[j++] =3D &housekeeping_attrs[i].kattr.attr; + } + housekeeping_attr_ptr[j] =3D NULL; + + ret =3D sysfs_create_group(housekeeping_kobj, &housekeeping_attr_group); + if (ret) + goto err_group; + + ret =3D sysfs_create_file(housekeeping_kobj, &smt_aware_attr.attr); + if (ret) + goto err_file; + + return 0; + +err_file: + sysfs_remove_group(housekeeping_kobj, &housekeeping_attr_group); +err_group: + kobject_put(housekeeping_kobj); + return ret; +} +late_initcall(housekeeping_sysfs_init); + void __init housekeeping_init(void) { enum hk_type type; --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dl1-f53.google.com (mail-dl1-f53.google.com [74.125.82.53]) (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 CD64C350A1B for ; Wed, 25 Mar 2026 09:11:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429877; cv=none; b=KuWFUiy5tUhg8Qw9c8bx/8dqr3BUs+DhFODlMMUHZpBIWNYpYko6emITAn3t6HvC/XCBdVkQD4FFL31480M/5Ry+Pkx23g5VXn5nxT37SH8t/WCe//Pgv0nuDcxwbcfE5FRhhwxO1XffG1Pv5zp12CAFLyEk99auuo60ygOEEC4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429877; c=relaxed/simple; bh=gZDjuCZnZUWwu0Zvd8wZfxxZBNGQo3l8lZvSZ9PYvBk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eTSC4BlqRVsaUPd9rwLXopcPDPeVCvecsebuantf59M+RsPXc9nFemCBZy+PhhSQAgqstdj6mkVcvczLtqXlargeZ/qTc1y8tLo3WK/Rp+Gd8efVso8tW/cAKcUAXU3iNWE3DxfWe5CDpkXHb9wNfHHOS965WpGp3/1CtJBDpWE= 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=YS6wXGAe; arc=none smtp.client-ip=74.125.82.53 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="YS6wXGAe" Received: by mail-dl1-f53.google.com with SMTP id a92af1059eb24-12a74039dc6so1888802c88.0 for ; Wed, 25 Mar 2026 02:11:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429875; x=1775034675; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=k0s0Dc7RCL/9ENJthFTImT096lJg25UlEll25yQMqG8=; b=YS6wXGAeUCdowzmn1QQHtFt16IIsunO8ysj5qyDG0CR23UlWvl20zgPkD0aVqtSV1m P4zMvumNcGtlF9uoyQJE/hiFm6a5YThL7PiF3Zs87Uk4kFShVXXt0FCLCrSn4IcCWlcQ g92yaK+yF1Gadha25N9KkgmMyByHUu3XOGls5ePm7d9QIrMV9QfAS3A/kutgnrHll1tj SawMSm9DYRDajIe1/FAKEKWq2A0BuEbYiltbtFajcuJcClB6hWum2dw2UQIHds5MRZTO LLxI+xalRaGqTiXwJ/Yiolagwk5oMbZW+DWzXEJqhc3JLlQu1LNzWwUg+dvaSQswPeaL dvMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429875; x=1775034675; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=k0s0Dc7RCL/9ENJthFTImT096lJg25UlEll25yQMqG8=; b=RGuNL1e/xMKVFtqo9+wtHgyLShIgsBd/fHGKQoEj4WcrwsirRvhpbRUg5pf59YpkGL 3ppBRUidCX+zNNHYh8ADMrXTX45AJJvkUa2K2T598RVGUgnkyoZrm9XMUnQaQcYwXBMu iTv5q6vKvqfTTcWVhQa1EgDCI8EN5U+EYHw6FxOOFFQtSWLMBunY6RLec3jkrC9kxiuk 6GnF0nWjQ4II7aF9uw0bouis6CF+6qp28t5fylTR8xikhYTfv48MPXUzUSlh6uVDymds xMjdHFQKjFOAiprsBZ9N7wjNIk8RqjzYbppSV1+xdlh6tVEnzxK+/MdmQKvjkG8L8oo/ VGGQ== X-Gm-Message-State: AOJu0YzdvasZIBid45YHDGBM0PXD8v5oBpdKwsu7xlwGYJfAD+yM7s3P EIKRiVH3ataXUAfTo5r+o7csx1Kd+KXeIsjzalKqp4R/hpi9egDdjjYP X-Gm-Gg: ATEYQzzFw0A7l8mY8xdecW5H3UtHpCOb6z90Ftc0uGRxi0R1dONCHQ/zqNjzt+Q7rYr ElLMeuQ3qYvxUhcmVpuG0es1sOYpD0raB8NsODDvEwt6T12pfthHrTfI2p0XyPYrj9lmUr6WbTl SI5itDUFxThRg1s4tECfspfL6gZM4oPJV63qVjjaNTVqyp9KzYVVMASDnreGv1qiKSnvzwCvMVi EHOkxp4FN/8zonrxr+KwNxZrtPUB5pFoi5Ww5jG6m4D6TIYOtI156wOgTabmDW3jz5d1HpdYuWQ HaEuvpwRs5LBdQ7ebLaQxBtx3fI5ta3b8rHwgJKhA9r5eRURngMtOprkS3tH2kfZaTz8WrnA2Bf 8eQVOtAubcXdeif+fdKUDsMQOUOXsrH7Rc/U1A+JTvO3FMed7ImjGVhoZNBpPeJGvYO/ON6jyJ6 sl10Yih8SUJZMdkijY X-Received: by 2002:a05:7301:9f13:b0:2be:1946:857e with SMTP id 5a478bee46e88-2c15d35c829mr1429438eec.12.1774429874937; Wed, 25 Mar 2026 02:11:14 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.11.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:11:14 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:43 +0800 Subject: [PATCH 12/15] sched/isolation: Bridge boot-time parameters with dynamic isolation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-12-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 The boot-time parameters 'isolcpus' and 'nohz_full' currently initialize housekeeping masks that cannot be easily updated at runtime. To support DHEI, the scheduler's tick offload infrastructure must be ready for dynamic enablement even if no isolation was requested at boot. Enable unconditional boot-time initialization for tick offload. This ensures that the infrastructure for remote ticks is always present, allowing DHEI to safely toggle full dynticks mode at runtime. Signed-off-by: Qiliang Yuan --- kernel/sched/core.c | 5 +++++ kernel/sched/isolation.c | 3 --- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index ddf9951f1438c..d987ce03e7cc6 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5688,6 +5688,9 @@ static void sched_tick_stop(int cpu) =20 int __init sched_tick_offload_init(void) { + if (tick_work_cpu) + return 0; + tick_work_cpu =3D alloc_percpu(struct tick_work); BUG_ON(!tick_work_cpu); return 0; @@ -8509,6 +8512,8 @@ void __init sched_init_smp(void) current->flags &=3D ~PF_NO_SETAFFINITY; sched_init_granularity(); =20 + sched_tick_offload_init(); + init_sched_rt_class(); init_sched_dl_class(); =20 diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 4a5967837e8de..685cc0df1bd9f 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -299,9 +299,6 @@ void __init housekeeping_init(void) =20 static_branch_enable(&housekeeping_overridden); =20 - if (housekeeping.flags & HK_FLAG_KERNEL_NOISE) - sched_tick_offload_init(); - for_each_set_bit(type, &housekeeping.flags, HK_TYPE_MAX) { /* We need at least one CPU to handle housekeeping work */ WARN_ON_ONCE(cpumask_empty(housekeeping.cpumasks[type])); --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f172.google.com (mail-dy1-f172.google.com [74.125.82.172]) (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 63E92345CD3 for ; Wed, 25 Mar 2026 09:11:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429885; cv=none; b=m+OLlsx8i2VnMAAfZPjc2CdfUKSgXzDXO3oCYjicV8v8YDNRL7iiB7RKNtOrIzs0v/zR6A6XORlkzZ8jfbulrcg4g2IRddRWKMZa6rVN8qF8GKrx4krp13w/u+pji0BRWsHCRng+DhZRX+wPDGeGCJgyvPsNsJClmW/fO5BBQWQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429885; c=relaxed/simple; bh=f7O9UMgeqrl0r9w3zlKNvRPg+oNFv2EqHzEVcBEVPEc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OTSPzS9ZpCJbC+BMaJModrflKMxwMAo7FMdd6bshThZSslbDJJdGvFaPuo6SkT2iXhbSq5QWgLEKqwl10y41LLS0mC6RSws5a4LFuPgJaZAmGL8BVMwnFrbvxEChs4wiQIayEZvwu6xplNZsn9o7uhvRZ9cD/oYje1fLrUnCYvc= 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=f7SAw6kz; arc=none smtp.client-ip=74.125.82.172 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="f7SAw6kz" Received: by mail-dy1-f172.google.com with SMTP id 5a478bee46e88-2c1092cc08cso2897800eec.1 for ; Wed, 25 Mar 2026 02:11:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429884; x=1775034684; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=scmgWcS5GsqDyCs8R5zf+G8RGx6zlEEWGauepG1UF1o=; b=f7SAw6kz5cKyzfzptXjE6xketXSyTYWYPeHAkXxFM/H6W/aWSVDEweYdp9SHeJtZ7i Lyg/FuDdUlNKsCu7Os3L7XFdvVzcNPrnpGYirQUEF5dV85/WEwIJgcWRRVzAo9JNutVe MoyzAQQCNChd0Vaor3W5j76lWlMVijZZ2Vv0CZtxZUd6AtLgUNnIjYfMKawJvpdIkYmo sm6OgStWtKRHBXkuz4hQWH4oC4YkX494+sm8VUat8GEPZBrfe/F0r3UA2EgvFSpBXXj5 K01+3d0obkZKW+Jw/V/zALpIhGGm2YkrY/d1UbsoGx6bIzpKO+ga/sP0ZS5v5VlrveYL yuGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429884; x=1775034684; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=scmgWcS5GsqDyCs8R5zf+G8RGx6zlEEWGauepG1UF1o=; b=JmmSfOXqyn1K0hFwz56mA3vgZp3rACEaMd1BGnZdsre8eB97Xo9Dt46dGipnq+HLM1 hjnn1tZ2jaPfN4+eK3ykruJocl3HEfk+NPEYk9cbtpwlwWA1KEeJuslGYFSM9Pe9yZvo LOlGstImWF80xT3l5oz42kXcOtkX3IhoNDW9njW+uc+3vysJKK0plheJAoA1DVeXgwQM zKiS0ctbZebRoioqI8Ruglx+NL5NlUFx5PjpK5hZ56lsGNoY3+Zd0dBaOmyN6MoDPVxt tw4R6co7ki8VxOVlqvltgCw4c0YrgCQ3r4bTlzbNftkRsudalCvxPUDXwMGNTXgNZSzb Dk4Q== X-Gm-Message-State: AOJu0Yx+wV/9HtgiHAXlDVLroQK/kiOaFEpVwmk96C3sqSQg5xHIy0/R FeIHSBH2heZ4MuwzfEpJ2wW+hH3LEh097HozB7IQRCzxaSfRLDSaXxQY X-Gm-Gg: ATEYQzwTp0uHkapIyWY9Bg8V88pxyTHdSmyTiJ/7CS13Y6435NXpDFOZ1Vi1TUgZmSC at3/f2XA0F7jWsp4aUJgi91Qhul3FnRJfpf5oIUf3RNRwDeXWm8ZprW1HgphVSFjBiZe0hNm/Of 6uaGDAdSu9sE69xuVmpf/5/CBETbRJCpxtf9WmweFDLy9pgXeHSnrt/Tpwgv7lDl4qNjX7iiiEK fLJQwl+OA7pIpe0D3RUcoohSkDEPRdcRH6oU/bnS8hhVq7OuJyxbjsJ0PfY4ZErKyumV8zMoP5f zJbqBCAcE9oXqqjBW9UAOH+xo880Fly7jHhYhxYAxxt6X+b9v2cAt+9IXUMUMwlYhFhH0p0Ythg X0svgflofvDvArKH7WeJye9xJaagOA0oMDGw9d/TJQ25IjbzZpm7fR6j59J+EPGqxzk0nVG2dFS ExK+JEXicaqWSu+Rmw X-Received: by 2002:a05:7301:19a8:b0:2b8:64ad:ad4d with SMTP id 5a478bee46e88-2c15d479457mr1165933eec.26.1774429883454; Wed, 25 Mar 2026 02:11:23 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.11.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:11:23 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:44 +0800 Subject: [PATCH 13/15] sched/isolation: Implement sysfs interface for dynamic housekeeping Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-13-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Subsystem housekeeping masks are currently static and can only be set via boot-time parameters (isolcpus, nohz_full, etc.). There is no userspace interface to reconfigure these boundaries at runtime. Implement the DHEI sysfs interface under /sys/kernel/housekeeping. This enables userspace to independently reconfigure different kernel services' affinities without a reboot. Signed-off-by: Qiliang Yuan --- kernel/sched/isolation.c | 89 ++++++++++++++++++++++++--------------------= ---- 1 file changed, 45 insertions(+), 44 deletions(-) diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 685cc0df1bd9f..1c867784d155b 100644 --- a/kernel/sched/isolation.c +++ b/kernel/sched/isolation.c @@ -8,7 +8,12 @@ * */ #include +#include #include +#include +#include +#include +#include #include #include #include "sched.h" @@ -16,9 +21,17 @@ enum hk_flags { HK_FLAG_DOMAIN =3D BIT(HK_TYPE_DOMAIN), HK_FLAG_MANAGED_IRQ =3D BIT(HK_TYPE_MANAGED_IRQ), - HK_FLAG_KERNEL_NOISE =3D BIT(HK_TYPE_KERNEL_NOISE), + HK_FLAG_TICK =3D BIT(HK_TYPE_TICK), + HK_FLAG_TIMER =3D BIT(HK_TYPE_TIMER), + HK_FLAG_RCU =3D BIT(HK_TYPE_RCU), + HK_FLAG_MISC =3D BIT(HK_TYPE_MISC), + HK_FLAG_WQ =3D BIT(HK_TYPE_WQ), + HK_FLAG_KTHREAD =3D BIT(HK_TYPE_KTHREAD), }; =20 +#define HK_FLAG_KERNEL_NOISE (HK_FLAG_TICK | HK_FLAG_TIMER | HK_FLAG_RCU |= \ + HK_FLAG_MISC | HK_FLAG_WQ | HK_FLAG_KTHREAD) + static DEFINE_MUTEX(housekeeping_mutex); static BLOCKING_NOTIFIER_HEAD(housekeeping_notifier_list); DEFINE_STATIC_KEY_FALSE(housekeeping_overridden); @@ -44,6 +57,9 @@ static ssize_t smt_aware_store(struct kobject *kobj, { bool val; =20 + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + if (kstrtobool(buf, &val)) return -EINVAL; =20 @@ -53,7 +69,7 @@ static ssize_t smt_aware_store(struct kobject *kobj, } =20 static struct kobj_attribute smt_aware_attr =3D - __ATTR(smt_aware_mode, 0644, smt_aware_show, smt_aware_store); + __ATTR(smt_aware_mode, 0600, smt_aware_show, smt_aware_store); =20 bool housekeeping_enabled(enum hk_type type) { @@ -171,6 +187,9 @@ static ssize_t housekeeping_store(struct kobject *kobje= ct, cpumask_var_t new_mask; int err; =20 + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + if (!alloc_cpumask_var(&new_mask, GFP_KERNEL)) return -ENOMEM; =20 @@ -178,42 +197,26 @@ static ssize_t housekeeping_store(struct kobject *kob= ject, if (err) goto out_free; =20 - /* Safety check: must have at least one online CPU for housekeeping */ - if (!cpumask_intersects(new_mask, cpu_online_mask)) { + if (cpumask_empty(new_mask) || + !cpumask_intersects(new_mask, cpu_online_mask)) { err =3D -EINVAL; goto out_free; } =20 - if (housekeeping_smt_aware) { - int cpu, sibling; - cpumask_var_t tmp_mask; + mutex_lock(&housekeeping_mutex); =20 - if (!alloc_cpumask_var(&tmp_mask, GFP_KERNEL)) { - err =3D -ENOMEM; - goto out_free; - } + if (housekeeping_smt_aware) { + int cpu; =20 - cpumask_copy(tmp_mask, new_mask); - for_each_cpu(cpu, tmp_mask) { - for_each_cpu(sibling, topology_sibling_cpumask(cpu)) { - if (!cpumask_test_cpu(sibling, tmp_mask)) { - /* SMT sibling should stay grouped */ - cpumask_clear_cpu(cpu, new_mask); - break; - } + for_each_cpu(cpu, new_mask) { + if (!cpumask_subset(topology_sibling_cpumask(cpu), + new_mask)) { + err =3D -EINVAL; + goto out_unlock; } } - free_cpumask_var(tmp_mask); - - /* Re-check after SMT sync */ - if (!cpumask_intersects(new_mask, cpu_online_mask)) { - err =3D -EINVAL; - goto out_free; - } } =20 - mutex_lock(&housekeeping_mutex); - if (!housekeeping.cpumasks[type]) { if (!alloc_cpumask_var(&housekeeping.cpumasks[type], GFP_KERNEL)) { err =3D -ENOMEM; @@ -242,7 +245,7 @@ static ssize_t housekeeping_store(struct kobject *kobje= ct, } =20 static struct hk_attribute housekeeping_attrs[HK_TYPE_MAX]; -static struct attribute *housekeeping_attr_ptr[HK_TYPE_MAX + 1]; +static struct attribute *housekeeping_attr_ptr[HK_TYPE_MAX + 2]; =20 static const struct attribute_group housekeeping_attr_group =3D { .attrs =3D housekeeping_attr_ptr, @@ -265,28 +268,22 @@ static int __init housekeeping_sysfs_init(void) housekeeping_attrs[i].type =3D i; sysfs_attr_init(&housekeeping_attrs[i].kattr.attr); housekeeping_attrs[i].kattr.attr.name =3D hk_type_names[i]; - housekeeping_attrs[i].kattr.attr.mode =3D 0644; + housekeeping_attrs[i].kattr.attr.mode =3D 0600; housekeeping_attrs[i].kattr.show =3D housekeeping_show; housekeeping_attrs[i].kattr.store =3D housekeeping_store; housekeeping_attr_ptr[j++] =3D &housekeeping_attrs[i].kattr.attr; } + + housekeeping_attr_ptr[j++] =3D &smt_aware_attr.attr; housekeeping_attr_ptr[j] =3D NULL; =20 ret =3D sysfs_create_group(housekeeping_kobj, &housekeeping_attr_group); - if (ret) - goto err_group; - - ret =3D sysfs_create_file(housekeeping_kobj, &smt_aware_attr.attr); - if (ret) - goto err_file; + if (ret) { + kobject_put(housekeeping_kobj); + return ret; + } =20 return 0; - -err_file: - sysfs_remove_group(housekeeping_kobj, &housekeeping_attr_group); -err_group: - kobject_put(housekeeping_kobj); - return ret; } late_initcall(housekeeping_sysfs_init); =20 @@ -313,8 +310,12 @@ static void __init housekeeping_setup_type(enum hk_typ= e type, if (!slab_is_available()) gfp =3D GFP_NOWAIT; =20 - if (!housekeeping.cpumasks[type]) - alloc_cpumask_var(&housekeeping.cpumasks[type], gfp); + if (!housekeeping.cpumasks[type]) { + if (!alloc_cpumask_var(&housekeeping.cpumasks[type], gfp)) { + pr_err("housekeeping: failed to allocate cpumask for type %d\n", type); + return; + } + } =20 cpumask_copy(housekeeping.cpumasks[type], housekeeping_staging); --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f180.google.com (mail-dy1-f180.google.com [74.125.82.180]) (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 D0A1834D397 for ; Wed, 25 Mar 2026 09:11:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429894; cv=none; b=DLu0zOzxBthP8ROYa5QgO5L4UzH+bhHuyc0KNNrCIsaJr/SIbdmt/t8w9/dOEB476lX7Utw27qGALgKOLpB7cq/Ady0bFb1pOA1lf7An+0LNc6D5Ho6FBjeFJkhmbLMwWthgorxZgJq/LvCuNZsL8lOwwsnQPfCYCgpXUlWVdMw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429894; c=relaxed/simple; bh=I7peAwba+g6DkhuQBgaU9UnLggjeBQUrKJ0kCB1N/SQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F7mtvj0Bte2nMRMLM9e2QhINtkUd8jnkHnRsVKjxTHAhmhl0gBOvE2yGbUTtim9r0A6HQx79tO/+qk5OdtCH8fxOm7hoXBtPuUma23c+N+zKs7j7W/VCjcxxhJxpznoI33lotQsA2pDnm6BZHoJeyiwOqyy/b1c+zETv9JhDQeY= 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=DF+2xk2V; arc=none smtp.client-ip=74.125.82.180 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="DF+2xk2V" Received: by mail-dy1-f180.google.com with SMTP id 5a478bee46e88-2c0c482e069so4016954eec.0 for ; Wed, 25 Mar 2026 02:11:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429892; x=1775034692; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=p2KjID10vkg/qXstgNRvPPvkY3Brj7dL/qNSBa8q0+4=; b=DF+2xk2VvlBqpOeTb6EOTiIEb634AjwT5HU8+7tytyLvWi4BxY0fse0AQGOqAbLPGP curV0Jp5ptcOPLTLy2uPMBHzgpd2nyiMH5ZsoJHNdL9stXi1kQzwoVl+aTQfGPopfqDv VBnz359TI0cq5/R6H4SOcV0VuIEXOLLkhEtNBX8W47LlpWzAuQsXPdL5SWX2JwJdWEqN /Fny0y+IYakovDEAg6hs63BYhHdG3dAcz8WTQZHbmVzlqYqxnLiPHzJ5expBT4C2kmfx FhGeJc5bXN3d2FJPdujGE6qUwJwUWtXjXmdHpOuJITUkYzraP4YaAVvTQwSEWRiTFV2k bIdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429892; x=1775034692; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=p2KjID10vkg/qXstgNRvPPvkY3Brj7dL/qNSBa8q0+4=; b=FCVssvDb9kni6nsuCsgVPid2KXIgTqd/PeMIwSyW8tydmKKhzaTSICkI7lMki+XeM0 ZYYCJ5m5zgx5p772jvYvqJq+wt1Etw+HDltz1SZcpqYmyxeVbFyofBujhZCn6pynrPGk OQdpobOFPm+4VAf38xd3HqckJN5BMu53bA2LDTaTX2wyO9ZNS5P42wAXBFbJ+bmn2YN0 ptrshGIsynUsVC5uWZ54dkIhpdcOCoVJqgZUXZi+fRJ7KkyXtof8sDhJwhEDQN/0dc1b pGVqT7DYW+tleOJx8inlxZlzck+FL4OrPsenKzprSboRzcCkYDnsfJEdYhW9cay/3kaa 1ggA== X-Gm-Message-State: AOJu0YwOUQwNEAIA5OZmq11dzHugCKHMnODTYQlbfbzMv6FZxK/BMjOk sB8y/jZhGdMLR8aEzYXeDyRjyghjIAIdM+3dswBkkUE8CuRC2zk4Zb+5 X-Gm-Gg: ATEYQzx7L2Lo1nuD+ysFYnakjmYWCn8NPzWRqOepZTogD0RJDyYGWKKFWtIJdINIpeC UjSnuNe23zhCA6E1+EXs2BKz/tPv6AHwvHuxgnbc1Rj4uKxrTekhS831IjJBjk8WkKWw8AfA40i 5SG9VrHzVf8vfzHSVukuq88PBX0Jxt5d7Dt3wN6CYfumTDeus8wq56SM2BFyoCI7VwcEHBf6elg x89o7DvF7whxvhKkAhEC00rDQ6zMGox6lM5mz4Dl8ayRGEeRXLL9YX4nt1Lg03pqq9TAictsvVQ r96+9hAFMojsd2jCl0jZt08Mk5oQvRhreOc3AAVszWEu6dntmKlq3o3DbhvYXLgm/H4Qj/NR8Ph /F7W108l/9IOO1SNIutJFW96CFTrrZ9LnjT86Fd1knsAKOPvUB4Vj4+esxr6hK5QP3s2EoVvVO6 ZVpZ9XUgEcwAcQsvOx X-Received: by 2002:a05:7300:2305:b0:2c1:4f1:c87b with SMTP id 5a478bee46e88-2c15d357a32mr1565966eec.18.1774429891947; Wed, 25 Mar 2026 02:11:31 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.11.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:11:31 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:45 +0800 Subject: [PATCH 14/15] Documentation: isolation: Document DHEI sysfs interfaces Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-14-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 --- .../ABI/testing/sysfs-kernel-housekeeping | 22 ++++++++++++++++++= ++++ 1 file changed, 22 insertions(+) diff --git a/Documentation/ABI/testing/sysfs-kernel-housekeeping b/Document= ation/ABI/testing/sysfs-kernel-housekeeping new file mode 100644 index 0000000000000..3648578200111 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-kernel-housekeeping @@ -0,0 +1,22 @@ +What: /sys/kernel/housekeeping/ +Date: March 2026 +Contact: Qiliang Yuan +Description: + Directory containing the dynamic housekeeping configuration + for various kernel subsystems. + + Each file represents a specific housekeeping type: + - timer: Timer and hrtimer interrupts. + - rcu: RCU callback offloading and GP kthreads. + - misc: Miscellaneous kernel services (e.g. kcompactd). + - tick: Dynamic full dynticks (NOHZ_FULL) state. + - domain: Scheduler domain isolation. + - workqueue: Workqueue affinity. + - managed_irq: Managed interrupts migration. + - kthread: General kernel thread affinity. + - smt_aware_mode: SMT-aware isolation toggle (0/1). + When enabled, writing a mask that does not include all + sibling threads of a core will be rejected with -EINVAL. + + Writing a CPULIST to the type files dynamically updates the + housekeeping mask for the corresponding type. --=20 2.43.0 From nobody Thu Apr 2 01:47:56 2026 Received: from mail-dy1-f173.google.com (mail-dy1-f173.google.com [74.125.82.173]) (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 0A335350D7D for ; Wed, 25 Mar 2026 09:11:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429901; cv=none; b=BWFmk8R+d3vMRTHRY/WCG/cElu3jV3w04LmGtYYQMhxB95ABvVh+q8hpdFnRNaGHFcLKPWdC7SPXUOeZjt8k0qKF0HjGYGtq2Aauw/pfcmHNFek+Phcgv5h6idc9gMXbnZGctgffzXQtz9mXlfQrCC9K8H95NEJvWoq5rOFiIJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774429901; c=relaxed/simple; bh=jh9HLmPM2nm8qmBrMQDKKIviyQT4DUG9kNN8lt6k1Ig=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R7rreVG5q58GVQTTGthgpeZLm2XBK9dlgfuSZrYFAtJPAoxJOdrtD3B/9mvZ8TLXf+vL8TpRG8ouNviwuyNqEMg3VPKJlcKyKKu5BlUj1Nwnq+5TvRyfVEZ/qm+l0TPihJpH8XStTGE9wfycFeciBzpkHKYpI7NiTJmiOu0tMdg= 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=cbo/oyKf; arc=none smtp.client-ip=74.125.82.173 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="cbo/oyKf" Received: by mail-dy1-f173.google.com with SMTP id 5a478bee46e88-2c1092cc08cso2898297eec.1 for ; Wed, 25 Mar 2026 02:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774429899; x=1775034699; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=5i4iFnlZOOrZJKAXSL28N68w+sPjuPG58XQHlTJ8bXg=; b=cbo/oyKf+aV3sCxDo+8NiqFRkhFQai6Fz4SJaAbi7awp/J5twNEldDYkwQ2dzExy5L 66sViwuSL89VhdDQfcoJllCFu0bqB2lajII1xt9rTGhWECMbmurejJ7f0jscK9e3aemj 23J9UHOEoXcfYEDOf8L19tYHFWpuVxVPuayBDUWlgSUn89k3I3q5zSjnqNdvRsm9JOyV ulHnDHxcKjQ2uHtBiTtPqk16S3z9YC+mWJg01hLzd+U3215QMazDsUvPPNQ05W4tXDoM nfXyfZEXGa2pbmDL5YUzVl2cbte23uY8xdbPt17+LuSEw9/RUXMtecx3SblMRRZEfVS4 Y1Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774429899; x=1775034699; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=5i4iFnlZOOrZJKAXSL28N68w+sPjuPG58XQHlTJ8bXg=; b=meTY3avkKRp/5fQNYb8oyDUtrxabLDFbKiDaPihO8oeLE7zOICihu5SxqOeayTpAW8 AplYMT4ebCaXUx1XPtcjNVB+DoEcJZaqyDIXAQyU2rg0mNqhYDwjI29B8k7jyoVXLCZX O2YhQEvRQsJGXcczKaNLPj04Red8h3oxQBuEXqxTmbV8+oGJIGlY7eEYLmT/RhBC9rP5 A/c8SWoZCdS5RK6HyGQP9SzMm6DZpmlDHt0i/X6sWe1EcdL6n+fdWwVNp5RkFt5bW0f5 KGBxWvQ1ho/XP0HUoYDCl6+wbi6FpJWH5+pcEtYiaXJCWLb7IQlSq8y40RWKTxPjho2F jP4A== X-Gm-Message-State: AOJu0Yyr9gQA0o9OcJSddTadID0v7TZMT3WPRG4Qgz2hgYTS361z9xZh Q82z6c7ymbkL/YG8FnTXdgETgm/ln722O5uLBzhKePLquml8qajVcCZu X-Gm-Gg: ATEYQzzrdfBTct+u0V6Wh2881BoZ+wbjgii4nUsu6QXNUXvrK/ri1Fihplzq/XIi6Ir ct4tdN7JQpyNgCl3J5TYDwdafr/Q3BjyHBAzUQClCER1lo+oNkbPUk922vZNBxm2ej43YdT713E zwJCEsGUuwMQkKeteQpRqapU0V+qhVXKN7r4NFRgRPtzX/Rh15+unZz1X4nL/SIqlV45H8q0kqT FzMjtzQ0NjLpHTPpjDX6uTgn2rwLPSGbERgmLxnGrVb7P1S7cKWmVIFXkbLKl1BkNmWIQoKVf0B 3UQQ2Yae008U91PS7WwmasWmJd+nZcKo51U3nmJNhIBfgVcHotLKc4q0qDJRbIXANtNWtL6UBzf WW+HLDXximT/TzpDb5erLjYzXFEg0t2k7Sgprr6Lk9RNa/L7lSMr0cWx0z4IhNQYUuOoWH8ZoAE QHiN2m7u62THNoHOCf X-Received: by 2002:a05:7300:148f:b0:2be:2cfe:68b7 with SMTP id 5a478bee46e88-2c15d36146dmr1280732eec.11.1774429898988; Wed, 25 Mar 2026 02:11:38 -0700 (PDT) Received: from wujing. ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2c159e25dc7sm2786389eec.27.2026.03.25.02.11.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Mar 2026 02:11:38 -0700 (PDT) From: Qiliang Yuan Date: Wed, 25 Mar 2026 17:09:46 +0800 Subject: [PATCH 15/15] selftests: dhei: Add functional tests for dynamic housekeeping Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260325-dhei-v12-final-v1-15-919cca23cadf@gmail.com> References: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> In-Reply-To: <20260325-dhei-v12-final-v1-0-919cca23cadf@gmail.com> To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Thomas Gleixner , "Paul E. McKenney" , Frederic Weisbecker , Neeraj Upadhyay , Joel Fernandes , Josh Triplett , Boqun Feng , Uladzislau Rezki , Mathieu Desnoyers , Lai Jiangshan , Zqiang , Tejun Heo , Andrew Morton , Vlastimil Babka , Suren Baghdasaryan , Michal Hocko , Brendan Jackman , Johannes Weiner , Zi Yan , Anna-Maria Behnsen , Ingo Molnar , Shuah Khan Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Qiliang Yuan X-Mailer: b4 0.13.0 Dynamic Housekeeping (DHEI) introduces complex runtime interactions across sysfs, scheduler, and various kernel subsystems. There are currently no automated tests to verify the integrity of sysfs boundaries, safety guards, or SMT-aware isolation logic. Implement a kselftest suite for DHEI to ensure functional correctness. This includes a dedicated test script (dhei_test.sh) covering sysfs interface accessibility, safety guard enforcement, and SMT-aware grouping. The suite also incorporates stress-ng based pressure testing to verify load-shedding efficiency on isolated CPUs, Tick suppression under active task load, and Workqueue restriction under competitive system pressure. Usage: make -C tools/testing/selftests/dhei run_tests Signed-off-by: Qiliang Yuan --- tools/testing/selftests/Makefile | 1 + tools/testing/selftests/dhei/Makefile | 4 + tools/testing/selftests/dhei/dhei_test.sh | 160 ++++++++++++++++++++++++++= ++++ 3 files changed, 165 insertions(+) diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Mak= efile index 56e44a98d6a59..9d16b00623839 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -16,6 +16,7 @@ TARGETS +=3D cpu-hotplug TARGETS +=3D damon TARGETS +=3D devices/error_logs TARGETS +=3D devices/probe +TARGETS +=3D dhei TARGETS +=3D dmabuf-heaps TARGETS +=3D drivers/dma-buf TARGETS +=3D drivers/ntsync diff --git a/tools/testing/selftests/dhei/Makefile b/tools/testing/selftest= s/dhei/Makefile new file mode 100644 index 0000000000000..a578691cc677c --- /dev/null +++ b/tools/testing/selftests/dhei/Makefile @@ -0,0 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0 +TEST_PROGS :=3D dhei_test.sh + +include ../lib.mk diff --git a/tools/testing/selftests/dhei/dhei_test.sh b/tools/testing/self= tests/dhei/dhei_test.sh new file mode 100755 index 0000000000000..a6137c52e7132 --- /dev/null +++ b/tools/testing/selftests/dhei/dhei_test.sh @@ -0,0 +1,160 @@ +#!/bin/sh +# DHEI (Dynamic Housekeeping & Enhanced Isolation) Full-Coverage Verificat= ion Script +# Strict POSIX compliant version for reliability on all shells. + +SYSFS_BASE=3D"/sys/kernel/housekeeping" +ONLINE_CPUS=3D$(cat /sys/devices/system/cpu/online) +LAST_CPU=3D$(echo "$ONLINE_CPUS" | awk -F'[,-]' '{print $NF}') + +# Colors for output +GREEN=3D'\033[0;32m' +RED=3D'\033[0;31m' +NC=3D'\033[0m' + +log_pass() { echo "${GREEN}[OK]${NC} $1"; } +log_fail() { echo "${RED}[FAIL]${NC} $1"; exit 1; } +log_info() { echo "[INFO] $1"; } + +check_root() { + [ "$(id -u)" -eq 0 ] || log_fail "Please run as root" +} + +test_sysfs_structure() { + log_info "TEST 1: Sysfs structure..." + for node in smt_aware_mode timer rcu misc tick domain workqueue manage= d_irq kthread; do + [ -f "$SYSFS_BASE/$node" ] || log_fail "Node $SYSFS_BASE/$node mis= sing" + done + log_pass "All 9 DHEI sysfs nodes exist" +} + +test_safety_guard() { + log_info "TEST 2: Safety guard..." + if echo "999-1024" > "$SYSFS_BASE/domain" 2>/dev/null; then + log_fail "Safety guard failed: allowed isolation of all CPUs" + fi + log_pass "Safety guard blocked invalid mask" +} + +test_smt_aware_mode() { + log_info "TEST 3: SMT aware logic..." + [ -f /sys/devices/system/cpu/cpu0/topology/thread_siblings_list ] || {= log_info "SMT not supported"; return; } + SIBLINGS=3D$(cat /sys/devices/system/cpu/cpu0/topology/thread_siblings= _list) + FIRST=3D$(echo "$SIBLINGS" | cut -d',' -f1 | cut -d'-' -f1) + echo 1 > "$SYSFS_BASE/smt_aware_mode" + if echo "$FIRST" > "$SYSFS_BASE/timer" 2>/dev/null; then + echo 0 > "$SYSFS_BASE/smt_aware_mode" + log_fail "SMT mode failed: accepted partial core" + else + log_pass "SMT mode correctly rejected partial core" + fi + echo 0 > "$SYSFS_BASE/smt_aware_mode" +} + +get_tick_count() { + grep "LOC:" /proc/interrupts | awk -v cpu=3D"$LAST_CPU" '{print $(cpu+= 2)}' +} + +test_tick_dynamic() { + log_info "TEST 4: Dynamic Tick toggle..." + [ "$LAST_CPU" -eq 0 ] && return + + # Reset all to full housekeeping + for node in tick rcu timer domain workqueue; do + [ -f "$SYSFS_BASE/$node" ] && echo "$ONLINE_CPUS" > "$SYSFS_BASE/$= node" 2>/dev/null + done + + S1=3D$(get_tick_count) + sleep 1 + S2=3D$(get_tick_count) + log_info "Baseline ticks on CPU $LAST_CPU: $((S2-S1)) (per 1s)" + + # Isolate LAST_CPU by setting housekeeping for all types + HK_MASK=3D"0-$((LAST_CPU-1))" + for node in tick rcu timer domain workqueue; do + [ -f "$SYSFS_BASE/$node" ] && echo "$HK_MASK" > "$SYSFS_BASE/$node= " 2>/dev/null + done + + sleep 1 + S1=3D$(get_tick_count) + sleep 2 + S2=3D$(get_tick_count) + DIFF=3D$((S2-S1)) + log_info "Tick delta after isolation: $DIFF (per 2s)" + [ "$DIFF" -gt 100 ] && log_fail "Tick not suppressed ($DIFF)" + log_pass "Tick dynamically suppressed" +} + +test_generic() { + log_info "TEST 5: Notifier propagation..." + for t in rcu workqueue misc kthread managed_irq; do + echo "0-1" > "$SYSFS_BASE/$t" + [ "$(cat "$SYSFS_BASE/$t")" =3D "0-1" ] || log_fail "$t update fai= led" + log_pass "$t verified" + done +} + +get_busy() { + grep "cpu$LAST_CPU " /proc/stat | awk '{print $2+$3+$4+$7+$8+$9}' +} + +test_stress_domain() { + log_info "TEST 6: Stress Domain Isolation..." + command -v stress-ng >/dev/null 2>&1 || return + [ "$LAST_CPU" -eq 0 ] && return + echo "0-1" > "$SYSFS_BASE/domain" + stress-ng --cpu 0 --timeout 10 --quiet & + PID=3D$! + sleep 2 + B1=3D$(get_busy) + sleep 5 + B2=3D$(get_busy) + DIFF=3D$((B2-B1)) + log_info "Busy jiffies delta: $DIFF (per 5s)" + [ "$DIFF" -gt 150 ] && log_fail "CPU $LAST_CPU not isolated ($DIFF)" + log_pass "Domain isolation verified under load" + echo "$ONLINE_CPUS" > "$SYSFS_BASE/domain" + wait "$PID" 2>/dev/null +} + +test_stress_tick() { + log_info "TEST 7: Stress Tick Suppression..." + command -v stress-ng >/dev/null 2>&1 || return + [ "$LAST_CPU" -eq 0 ] && return + echo "$ONLINE_CPUS" > "$SYSFS_BASE/tick" + taskset -c "$LAST_CPU" stress-ng --cpu 1 --timeout 15 --quiet & + PID=3D$! + sleep 2 + T1=3D$(get_tick_count) + sleep 2 + T2=3D$(get_tick_count) + log_info "Ticks WITH housekeeping: $((T2-T1)) (per 2s)" + + echo "0-1" > "$SYSFS_BASE/tick" + sleep 2 + T1=3D$(get_tick_count) + sleep 2 + T2=3D$(get_tick_count) + DIFF_ISO=3D$((T2-T1)) + log_info "Ticks AFTER isolation: $DIFF_ISO (per 2s)" + + # Critical: Check if dmesg shows context tracking warnings during this= test + [ "$DIFF_ISO" -gt 100 ] && { + log_info "Dmesg check for tick errors..." + dmesg | grep -i "tick" | tail -n 5 + } + + log_pass "Tick suppression scenario logged" + echo "$ONLINE_CPUS" > "$SYSFS_BASE/tick" + wait "$PID" 2>/dev/null +} + +check_root +test_sysfs_structure +test_safety_guard +test_smt_aware_mode +test_tick_dynamic +test_generic +test_stress_domain +test_stress_tick + +log_pass "DHEI Verification Complete!" --=20 2.43.0