From nobody Mon Feb 9 23:00:18 2026 Received: from mail-dl1-f44.google.com (mail-dl1-f44.google.com [74.125.82.44]) (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 59E2330BB86 for ; Fri, 6 Feb 2026 07:05:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770361511; cv=none; b=J3Gv2vftfmUiYk1pFlrK+9X7HBeAn3/yeVaZhMJ8/SsmfTr1HsvyCKV0R7yAFq+nbojWfipUUKAmrrj+WEI+MEtLpH3cDig/kQ3RoZ0RPIXy5oBQqFyAISwarJ4ROUNkHuedEhYx1wyvkwlICG6oZsoycMwYoIAsao4uYCi4c2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770361511; c=relaxed/simple; bh=cs6CcPjBf3Hhxwg3I/aO+r+GIKGiE678uAuhi86HGrk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=GHBIT3O22aE0ILHDwO38Mgztw677ukXOezfvkqC+BFfJslexZPqSJYfVFpxdiOtnEtVfxpCYBaMuJrXSbX1K72QePFLU2GnlBfJZEX24Du/LTsE/dzGuMAGIZa28/1173X+WCUOhifTj8fsyVSYZtVS50FtuCbsNtCZR/acMMEA= 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=fGOQDkS6; arc=none smtp.client-ip=74.125.82.44 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="fGOQDkS6" Received: by mail-dl1-f44.google.com with SMTP id a92af1059eb24-124a635476fso2705777c88.0 for ; Thu, 05 Feb 2026 23:05:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1770361510; x=1770966310; 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=q3v4q+lvsBn1hE6xrawKSqo/X3eavnWHmOAy67YUdOo=; b=fGOQDkS6ebAdRHYBru5yx5CLGYxpirwFiN9HztTPGh+TPh6jG2pYJCnVqWt+XMUXmL n+qCheDLkCaFRgMQYRvfjY/NqcQt6dO3RjP6itEUh1PLxrcmM5Fv68CYTpnklLmJiqBU MDi5k1ElF0qwvoGyXin3yxF2FmQXK66sR0X9ejrC9hfHsSPowsXmpCTVXi3894YdHUxD jXjqAMTJzP3ZI8/QYBcMnsSJ1f9noEp4EnA1ZCf3w2txkxTsvePeP85tSk0xDsXKzQxl ZLOxK8fuqA7rh2830tIQnx/bBvD+bqiNoc2+EZR2bOe6kIDtWASjLwNsYa2vg8GQa4Mh RDjQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770361510; x=1770966310; 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=q3v4q+lvsBn1hE6xrawKSqo/X3eavnWHmOAy67YUdOo=; b=oGvhe6D9tX0otMQ1k5opR6pivChZgRX/XrUUKc1sogEo3/r1qfZIFhG9Vd+nXgwL/b z/tZPglHZ5TIgfAfTOkHdN98pCB5Au2FXQM6PQvb1879d5gNkAvge5dSqbDfZDR0T2nY 1YXut+5FyysaOvwu/uOHoyF1Jl3rheKYs5OfVCRnXS8E/VtgqKaIuO4Z2vB8NHIjqaD1 otn80C3N37846SV2hy4MOjdq6sHX2hrLZ4dnDwINVdFSTvP+LEgyl9vwzw8HFIgU/spE cGH0Lil+P3Xkz8YMzuTV5CIrSoRLqrOgiQYGgjhxUGu+VEo8foeJt0BtX01O5w1HNWFm AAig== X-Gm-Message-State: AOJu0Ywns46lprqFsH/xkjRNlUwJZby/w2SpnyyzpkfOpBnrRh649601 6RaVXhFblYEXu0g0eVKZu5OiG9EEgmQDfWts8/AfhTI8Hh5zOA0s5WUJ X-Gm-Gg: AZuq6aJ2sTsb6oRG3QMq3DcQJrkBQfZCzQOJF44T1tFPl1YvoVveWac7HkvtvEb7uIn fXZqdZ1Qe+NeL0VNfD6y1YCnty/BKecogH1LN5CdxKjKcfq4X70z8oxgUcnadV07iOIYL0SF4bS EHxPv3LQoE/tpuM9ezH7L4BJugaQE1CXnffBjJw72d1hvvjTPizvudaboi54jrfs0hfFUZ/GWN1 yD7XeMtGVicDTnuCT5sCaZLfZNfp/NcmQdimixP+fa9uR5aB4hbuTnGAhz/tlSQJucDpIaihOo0 GzfYuLe9wLK8mJq30BhD4/cTxTaNmqHc1+IuWVwdL0n58ju9B4E82CZPl9DJifgsbCMYHd2Om1V rpH2E8AaaBXctSV4qGphzFUhhhPLdxSpTfH6Nm31HEOQHvSZcqDuP4Jd4nFaeIlOve4+Q8A0kWV DP2AKAWN5H/67OVD1iEXyg X-Received: by 2002:a05:7022:4a4:b0:11b:9386:a38b with SMTP id a92af1059eb24-127040981efmr964389c88.46.1770361510084; Thu, 05 Feb 2026 23:05:10 -0800 (PST) Received: from [127.0.1.1] ([74.48.213.230]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-127041e61b9sm1592601c88.8.2026.02.05.23.05.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Feb 2026 23:05:09 -0800 (PST) From: Qiliang Yuan Date: Fri, 06 Feb 2026 02:04:22 -0500 Subject: [PATCH RFC 01/12] sched/isolation: Remove __init restriction from housekeeping cores 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: <20260206-feature-dynamic_isolcpus_dhei-v1-1-00a711eb0c74@gmail.com> References: <20260206-feature-dynamic_isolcpus_dhei-v1-0-00a711eb0c74@gmail.com> In-Reply-To: <20260206-feature-dynamic_isolcpus_dhei-v1-0-00a711eb0c74@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 Cc: linux-kernel@vger.kernel.org, rcu@vger.kernel.org, linux-mm@kvack.org, Qiliang Yuan , Qiliang Yuan X-Mailer: b4 0.14.3 The current housekeeping management logic in kernel/sched/isolation.c is heavily tied to the boot process. Functions like housekeeping_setup() and housekeeping_init() are marked with __init, and they use alloc_bootmem_cpumask_var() for memory allocation. This prevents any runtime reconfiguration of housekeeping masks. Refactor the infrastructure to support dynamic updates: 1. Remove __init markers from core functions to keep them available after boot. 2. Replace bootmem allocation with runtime-safe alloc_cpumask_var() using appropriate GFP flags (GFP_NOWAIT during early boot, GFP_KERNEL at runtime). 3. Introduce housekeeping_mutex to protect the global state during concurrent updates. 4. Update include/linux/sched/isolation.h to reflect function signature changes. This lays the foundation for runtime isolation reconfiguration without requiring a system reboot. Signed-off-by: Qiliang Yuan Signed-off-by: Qiliang Yuan --- include/linux/sched/isolation.h | 2 +- kernel/sched/isolation.c | 32 ++++++++++++++++++++++++-------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/include/linux/sched/isolation.h b/include/linux/sched/isolatio= n.h index d8501f4709b5..cecb80b09120 100644 --- a/include/linux/sched/isolation.h +++ b/include/linux/sched/isolation.h @@ -31,7 +31,7 @@ extern const struct cpumask *housekeeping_cpumask(enum hk= _type type); extern bool housekeeping_enabled(enum hk_type type); extern void housekeeping_affine(struct task_struct *t, enum hk_type type); extern bool housekeeping_test_cpu(int cpu, enum hk_type type); -extern void __init housekeeping_init(void); +extern void housekeeping_init(void); =20 #else =20 diff --git a/kernel/sched/isolation.c b/kernel/sched/isolation.c index 3ad0d6df6a0a..811bf6cbe68d 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 @@ -84,7 +86,7 @@ bool housekeeping_test_cpu(int cpu, enum hk_type type) } EXPORT_SYMBOL_GPL(housekeeping_test_cpu); =20 -void __init housekeeping_init(void) +void housekeeping_init(void) { enum hk_type type; =20 @@ -102,20 +104,30 @@ void __init housekeeping_init(void) } } =20 -static void __init housekeeping_setup_type(enum hk_type type, +static void housekeeping_setup_type(enum hk_type type, cpumask_var_t housekeeping_staging) { + unsigned int gfp =3D GFP_KERNEL; + + if (system_state < SYSTEM_RUNNING) + 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); } =20 -static int __init housekeeping_setup(char *str, unsigned long flags) +static int housekeeping_setup(char *str, unsigned 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 (system_state < SYSTEM_RUNNING) + 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.51.0