From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CWXP265CU008.outbound.protection.outlook.com (mail-ukwestazon11020115.outbound.protection.outlook.com [52.101.195.115]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BDED43B0ADC for ; Tue, 25 Aug 2026 18:46:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.195.115 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787683617; cv=fail; b=nj/Dxooyp17hlmLXS5F7CK+nILAfJ/huYYwOwEk4yPOxqK+dMDHN7vAHXb1JwDgfHXRJcX3gyQluQ1HMfFxY3DHqC7msb86KeBSTWUrt0nSDiJ/wKMDY9tBEkRco1BTxBGbpsuGeNEAgmLGCoQWgdUIXW506TIiEZ+BMvDdMoac= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787683617; c=relaxed/simple; bh=4VSgZFDUgRPDe99dqjzcFRpxGhKtKbIdQqTIJkjy32s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=tWg3X+H5s+a2yYaSLj6mYMGyiD5P2Jm81FUGwKGRLYDqOenZjFJXTzoa7s1agw355ikrte4eVo161yZVYPH8JrMlAV3KtGzoJxXzqdWRqBzu36x25PFQZj0cU0wis7Yo91tg/w0o/v5cxptV5HbnaDG9c7bEWzqx3+42NSgAUKo= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com; spf=pass smtp.mailfrom=atomlin.com; arc=fail smtp.client-ip=52.101.195.115 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=atomlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=atomlin.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=whriObpCk4lZPQdvFsJChcx+G9L35MAr75LxDGL5nW/nhKjh2YuQDZ2Td4jGyUgt63hcQ1Z1zWEGXVJTu4NMeihhzIZLBnZfTXraZ9IJ9NFnmzmGBlgqa319CGAkeBFx+M5KuVEY4EI0bQfvCjej3LQtQsxxiXDgdwYohqfEWtNJxD8BGpfxTk8UQojC3SH+vgzsW9nPQ4W2Bk/YdnixMMULcWLt13bkH2BHwoCKlNZAkIeFPZs4S5vvgUyaOY9cMe7RMwjULX60E18pBNJXc8oZvYi1jAvZMkV7ttdBgGc00g6aPxYkRx5X2Y6quPss0i2tddHme8OqQj7W14A0rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:MIME-Version; bh=dh1C6Mxxl1Fpm77Xcb9fC7AS7tLWN/bdQRddm5yid1k=; b=N2UzzmaJXpPVLpTnnNP9f5SguPmM/KoHFKsePsr1/wz193PbIlTOrdTgn56zrKnLdTDDQrwvzBFnKNuXZCKqLZ20U89/94QpmzM7jt0XKZbchVhG8bzMqdIkS/SaEmRLPk8rEKpAPHQwdkNeOY2qEuEx5TH9hLtDRZhGHoL+k7Zc+MOPtIO8xt8dhIVYIyzne4jIdPiuG0h8Igba7lkaZ3RZAqASf8jIzy+F9YkMAUL89Qi9l/AlU8/my8y6PSfIKHd28ilPmmsIFX4I1MPJ3EcUjWkeABKfwQp7VMRwDPi1f28NG1AEBsroc1QTOZkUhn1B+MLCaXtcU7m7cZKlog== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=atomlin.com; dmarc=pass action=none header.from=atomlin.com; dkim=pass header.d=atomlin.com; arc=none Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=atomlin.com; Received: from LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:2b2::11) by LO7P123MB7501.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:40c::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.8; Tue, 25 Aug 2026 18:46:49 +0000 Received: from LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM ([fe80::3975:c5e7:bc1a:f383]) by LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM ([fe80::3975:c5e7:bc1a:f383%4]) with mapi id 15.21.0360.005; Tue, 25 Aug 2026 18:46:49 +0000 From: Aaron Tomlin To: mingo@redhat.com, peterz@infradead.org, juri.lelli@redhat.com, vincent.guittot@linaro.org Cc: dietmar.eggemann@arm.com, rostedt@goodmis.org, bsegall@google.com, mgorman@suse.de, vschneid@redhat.com, kprateek.nayak@amd.com, zhanxusheng1024@gmail.com, neelx@suse.com, atomlin@atomlin.com, chjohnst@mail.com, mproche@mail.com, sean@ashe.io, steve@abita.co, rishil1999@outlook.com, linux-kernel@vger.kernel.org Subject: [PATCH v6 5/6] sched/fair: Use list_for_each_entry_rcu() in print_cfs_stats() Date: Tue, 25 Aug 2026 14:46:36 -0400 Message-ID: <20260825184637.888364-6-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260825184637.888364-1-atomlin@atomlin.com> References: <20260825184637.888364-1-atomlin@atomlin.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0071.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:153::22) To LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:2b2::11) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO6P123MB6616:EE_|LO7P123MB7501:EE_ X-MS-Office365-Filtering-Correlation-Id: f0c94a6e-f622-4b1b-5184-08df02d938dc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|7416014|1800799024|366016|3023799007|6133799003|10067099003|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: T6bc2h2KOhvp2aEAoUxsuL8NnH9I8OO0wiANByn8PTF5b3u+7WL3yFn1piimUTtZNKznkQTBH1I4+UUmeLCX+WOqxHL4HXzF+hp84LLvYzywtKYYJgw69/NboQXl+Ac/6FVpkcE07LnzKH1tlNS/sgMB5sQb+0a+f2ozWc/B4ZDvB7KFPc47IrpEH/lwdhfhBEbvMjV6E+UcxUDFIFTvQM6JSANSyq/gO1i75FA4otP2LJTcwD1zC7EZZ7v6DyNw8QqJyFmz3GwBQzoqMsFv9/eeiYsClrJwKWXqugen5fSmJkLmwKs/TEzPTRWHplsh9ybWXr1x/LreAfuNnISY9TubVL7Njezflpj9JB1hOY07+0nQiWnoeg27nI0AERuuf3OASJklauVKK5v98jXvJD6d1brRFYNgCxvz4Md12S0/A8G7nH105QH9cMNmujYBXQmlWNfwNarsyiwcgSDKJdjF2zw79GpDb7GSiEvUTEDIcxz2ccVnJyJX1UFeSCqkYynLygi4xuOF+lVU33v5as66ohUsL85eJipZeCeLkAkj/RaMzkkWjeib+vNcsn87kdI+iPfR6EVs5y7OABAhdIefuTW5nD0tJl/Re9dyZuSp/9Vh/aWwIxBRVPdyXNALxZlHuBsCgSXbsNK1nhgmo4/oCpzLYh07dBisQn5khYw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(7416014)(1800799024)(366016)(3023799007)(6133799003)(10067099003)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?NvHVYOq3JwyNuHPXmz6I+xS+gS9N8uOKAWUNT44OsQMNbJgLFS5SXth/Xeyy?= =?us-ascii?Q?0gHxh+Kz/16tdhakuYxDQItfzTxr4C774yBaPyvICfZvd1ofdjM4XHstKWHD?= =?us-ascii?Q?QFY328F8a5dAAb2wKjKSeKLh6YFnscrR1TmmHiqZzcIGiZ+qZrf0rIf8kwKI?= =?us-ascii?Q?tbE8CH9jWIm4NxX7cmlVDv1Ecu19ZMZj7txR3b0QScDPUmqpi7+cIwa0AI2D?= =?us-ascii?Q?eDw90IFeixzG508ymwexh52PWsMRrHBoQRahHNkxNI95+kmuN+vMiZMBb16c?= =?us-ascii?Q?3lDrjn6QNu1cTo2SG8cdWfvs69ZuJmwrPFEmkZ5wAH0HraDdM8PZ6UsyOv61?= =?us-ascii?Q?mna+FROqKYnHe7THTtHhxmEX1h/y2S1Uj/Qmo73PVXsrioLfz7WqXZ/ClObo?= =?us-ascii?Q?u8ZOIbhJehIMIBVY/MDk2lWzSlGqOreSWzuAivP3cm6lp2y3nya2UoIjkv4X?= =?us-ascii?Q?krp4uBkqpBIcaYFsEd8msXruCY25jkSAf+K0DENVbNWTzUH9gTfjlvaE5HBo?= =?us-ascii?Q?0mk5Y6rkFEB04yqbtdnbZdbsj/o7w26NgBSNeuraYBshLTDRlMFG7iE1gMG4?= =?us-ascii?Q?a3OHfyvUcJFR6b7ZnCXNbF1z00uyyNIaH6kYxn0dq9a9aw4r5+zP+/ujEMpO?= =?us-ascii?Q?TX4BoobjLK0XzjGjnK2Vu1B0fzZtVjkqvgN5T9TOkkEPwMAvpz3AguwME+Vw?= =?us-ascii?Q?Wi+GllAWTM1LsghMh80welcaNfOBKMpdZYGhC/Ox9EBbBGtwo66O/QHK96aw?= =?us-ascii?Q?/+GfV22EXwdCRgTJL0NkYwdEqAitIEDABqv23t8b0gxqY8suVQTvJC0hu0hb?= =?us-ascii?Q?bo41T2XqQpTxIejahn86AwTLCsUbX2EEAtqjLfB/8muzMdQUJAH3xkNAZONF?= =?us-ascii?Q?NcBps5T3h9YowOqqfvWFvQmt1XsEtF5K6BeoE3KAmt8lWdd0/9KodQHVZ2EG?= =?us-ascii?Q?DxGKobog3kDB/2SUM2fjzhZzRXlkH3//YO2Af8tfmyGR7fNki+iHPzrNDLAk?= =?us-ascii?Q?sCR1R5ATJURgjuNZ6ZJtmwQJHshrtfEUBcMYGtJPyvtE3O1Nn27r6pITpft3?= =?us-ascii?Q?gmufDINF72GpCQxQTUPGKo2q2pcytJwVXQOQOjmpmEggY44hf9GNoKfyKE8a?= =?us-ascii?Q?3AhgiKgFpE7c2Pkbn+japLvU3nV8T6pwnwwkioaRPby72LZlL6DFl36ay347?= =?us-ascii?Q?DuFIwzQtY5h9YT7YRvBldGPGdgTlB4Fjd6WyB+m/uQuMmn3gYUPCnH5ZkerX?= =?us-ascii?Q?xYb0EBxUmtSCzE79w2zgbwMmls28IafXGO+dSytZUptR+V3EMzX1pxN3YS/w?= =?us-ascii?Q?2xH+65orRZDzOTYxyMVWPKscYksFboc/E1J7dtpZn8l1SmnCU4oeaUJ+Q5b4?= =?us-ascii?Q?GCoSRPtsTVI3NvbqlcUhiA0ijXxluSs0/2KRH/mIpY0wGWbnzzoMbFNpS+gW?= =?us-ascii?Q?DfNJN5VkF8s8OViabcSX6bhng0xOBSjuwgfoNK3LL0KuuWU/19xeUk1jMWmm?= =?us-ascii?Q?gk31s8HZWQI4PmlxGt/JXlda2pam4rYoh4C7qIp9AsKJOr5HUtuYJBRNAMOQ?= =?us-ascii?Q?A/HtcqWwpzropVOpqyFpbSV16sbnyPFEHJ2tdNcto8dfF8FO5otxr9Coi6Fq?= =?us-ascii?Q?VwprawW95VZH2Ufpevl/lqYA78bhTS/APzYnReoblCwpMrwVVl5n4NPLx5sh?= =?us-ascii?Q?TRkLrP1UM7npxcUKJruHMuMujHgpY5rKIA3T3gHXe49R97n7?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: f0c94a6e-f622-4b1b-5184-08df02d938dc X-MS-Exchange-CrossTenant-AuthSource: LO6P123MB6616.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 18:46:49.5949 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e6a32402-7d7b-4830-9a2b-76945bbbcb57 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ayLu5tC/vj4BLlN8k5CFHvCPnojrqHzS7mKZGxSPdlo5De2FiaE1ih2bEMVs7fFhcBJ1bA2kAMRB2hZ6G7Wwiw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO7P123MB7501 In print_cfs_stats(), rq->leaf_cfs_rq_list is traversed using for_each_leaf_cfs_rq_safe(), which expands to list_for_each_entry_safe(). Although rq->leaf_cfs_rq_list is RCU-protected, list_for_each_entry_safe() is a non-RCU iteration macro. It dereferences pointer links without READ_ONCE() and pre-fetches the next pointer. When a writer concurrently adds a new cfs_rq to the list using list_add_rcu(), a reader traversing with list_for_each_entry_safe() lacks READ_ONCE() protection. Without READ_ONCE(), the compiler is free to re-fetch pointers or reorder instructions. As a result, the reader can observe a newly inserted cfs_rq's pointer before its internal fields are fully visible, leading to reading uninitialised data or dereferencing invalid pointers. Additionally, because print_cfs_rq() drops rq->lock during seq_file I/O, concurrent cfs_rq list removals and re-insertions can modify cfs_rq->next. If cfs_rq is re-inserted near the head of the list while rq->lock is dropped, lockless readers can jump backward in the list. Under sufficient load it could lead to unbounded list traversal inside the RCU read-side critical section and trigger an RCU stall. Fix this by introducing for_each_leaf_cfs_rq_rcu(), which expands to list_for_each_entry_rcu(). This uses READ_ONCE() during list traversal. Finally, capping print_cfs_stats() lockless list traversal with a hard iteration ceiling to guarantee loop termination and prevent RCU stalls under continuous list churn. Fixes: 039ae8bcf7a5 ("sched/fair: Fix O(nr_cgroups) in the load balancing path") Reported-by: sashiko-bot Signed-off-by: Aaron Tomlin --- kernel/sched/debug.c | 39 +++------------------------------ kernel/sched/fair.c | 33 ++++++++++++++++++++++++---- kernel/sched/sched.h | 51 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 40 deletions(-) diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c index 2a01854f0f1c..de453342481c 100644 --- a/kernel/sched/debug.c +++ b/kernel/sched/debug.c @@ -11,17 +11,6 @@ #include #include "sched.h" -/* - * This allows printing both to /sys/kernel/debug/sched/debug and - * to the console - */ -#define SEQ_printf(m, x...) \ - do { \ - if (m) \ - seq_printf(m, x); \ - else \ - pr_cont(x); \ - } while (0) /* * Ease the printing of nsec fields: @@ -933,38 +922,16 @@ static void print_cfs_group_stats(struct seq_file *m, int cpu, struct task_group #endif /* CONFIG_FAIR_GROUP_SCHED */ #ifdef CONFIG_CGROUP_SCHED -static DEFINE_SPINLOCK(sched_debug_lock); -static char group_path[PATH_MAX]; +DEFINE_SPINLOCK(sched_debug_lock); +char sched_debug_group_path[PATH_MAX]; -static void task_group_path(struct task_group *tg, char *path, int plen) +void task_group_path(struct task_group *tg, char *path, int plen) { if (autogroup_path(tg, path, plen)) return; cgroup_path(tg->css.cgroup, path, plen); } - -/* - * Only 1 SEQ_printf_task_group_path() caller can use the full length - * group_path[] for cgroup path. Other simultaneous callers will have - * to use a shorter stack buffer. A "..." suffix is appended at the end - * of the stack buffer so that it will show up in case the output length - * matches the given buffer size to indicate possible path name truncation. - */ -#define SEQ_printf_task_group_path(m, tg, fmt...) \ -{ \ - if (spin_trylock(&sched_debug_lock)) { \ - task_group_path(tg, group_path, sizeof(group_path)); \ - SEQ_printf(m, fmt, group_path); \ - spin_unlock(&sched_debug_lock); \ - } else { \ - char buf[128]; \ - char *bufend = buf + sizeof(buf) - 3; \ - task_group_path(tg, buf, bufend - buf); \ - strcpy(bufend - 1, "..."); \ - SEQ_printf(m, fmt, buf); \ - } \ -} #endif static void diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index d55c21811306..81c5e557fdce 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -416,6 +416,10 @@ static inline void assert_list_leaf_cfs_rq(struct rq *rq) list_for_each_entry_safe(cfs_rq, pos, &rq->leaf_cfs_rq_list, \ leaf_cfs_rq_list) +#define for_each_leaf_cfs_rq_rcu(rq, cfs_rq) \ + list_for_each_entry_rcu(cfs_rq, &(rq)->leaf_cfs_rq_list, \ + leaf_cfs_rq_list) + /* Do the two (enqueued) entities belong to the same group ? */ static inline struct cfs_rq * is_same_group(struct sched_entity *se, struct sched_entity *pse) @@ -469,6 +473,9 @@ static inline void assert_list_leaf_cfs_rq(struct rq *rq) #define for_each_leaf_cfs_rq_safe(rq, cfs_rq, pos) \ for (cfs_rq = &rq->cfs, pos = NULL; cfs_rq; cfs_rq = pos) +#define for_each_leaf_cfs_rq_rcu(rq, cfs_rq) \ + for (cfs_rq = &rq->cfs; cfs_rq; cfs_rq = NULL) + static inline struct sched_entity *parent_entity(struct sched_entity *se) { return NULL; @@ -15576,14 +15583,32 @@ DEFINE_SCHED_CLASS(fair) = { #endif }; +#define SCHED_DEBUG_MAX_ITER 4096 +#define SCHED_DEBUG_TRUNCATED_MSG \ + "stats truncated at " __stringify(SCHED_DEBUG_MAX_ITER) " iterations\n" + void print_cfs_stats(struct seq_file *m, int cpu) { - struct cfs_rq *cfs_rq, *pos; + struct cfs_rq *cfs_rq; + int max_iter = SCHED_DEBUG_MAX_ITER; - rcu_read_lock(); - for_each_leaf_cfs_rq_safe(cpu_rq(cpu), cfs_rq, pos) + guard(rcu)(); + for_each_leaf_cfs_rq_rcu(cpu_rq(cpu), cfs_rq) { + if (--max_iter < 0) { + SEQ_printf(m, "\n"); + if (IS_ENABLED(CONFIG_FAIR_GROUP_SCHED)) { + SEQ_printf_task_group_path(m, cfs_rq_tg(cfs_rq), + "cfs_rq[%d]:%s ... " + SCHED_DEBUG_TRUNCATED_MSG, + cpu); + } else { + SEQ_printf(m, "cfs_rq[%d]: " + SCHED_DEBUG_TRUNCATED_MSG, cpu); + } + break; + } print_cfs_rq(m, cpu, cfs_rq); - rcu_read_unlock(); + } } #ifdef CONFIG_NUMA_BALANCING diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 13a437032855..ec99be60f807 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -777,6 +777,18 @@ struct cfs_rq { #endif /* CONFIG_FAIR_GROUP_SCHED */ }; +#ifdef CONFIG_FAIR_GROUP_SCHED +static inline struct task_group *cfs_rq_tg(struct cfs_rq *cfs_rq) +{ + return cfs_rq->tg; +} +#else +static inline struct task_group *cfs_rq_tg(struct cfs_rq *cfs_rq) +{ + return NULL; +} +#endif + #ifdef CONFIG_SCHED_CLASS_EXT /* scx_rq->flags, protected by the rq lock */ enum scx_rq_flags { @@ -3410,6 +3422,45 @@ extern struct sched_entity *__pick_root_entity(struct cfs_rq *cfs_rq); extern struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq); extern struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq); +/* + * This allows printing both to /sys/kernel/debug/sched/debug and + * to the console + */ +#define SEQ_printf(m, x...) \ +do { \ + if (m) \ + seq_printf(m, x); \ + else \ + pr_cont(x); \ +} while (0) + +#ifdef CONFIG_CGROUP_SCHED +extern spinlock_t sched_debug_lock; +extern char sched_debug_group_path[PATH_MAX]; +extern void task_group_path(struct task_group *tg, char *path, int plen); + +#define SEQ_printf_task_group_path(m, tg, fmt...) \ +{ \ + if (spin_trylock(&sched_debug_lock)) { \ + task_group_path(tg, sched_debug_group_path, sizeof(sched_debug_group_path)); \ + SEQ_printf(m, fmt, sched_debug_group_path); \ + spin_unlock(&sched_debug_lock); \ + } else { \ + char buf[128]; \ + char *bufend = buf + sizeof(buf) - 3; \ + task_group_path(tg, buf, bufend - buf); \ + strscpy(bufend - 1, "...", sizeof("...")); \ + SEQ_printf(m, fmt, buf); \ + } \ +} +#else +static inline void __printf(3, 4) +SEQ_printf_task_group_path(struct seq_file *m, struct task_group *tg, + const char *fmt, ...) +{ +} +#endif + extern bool sched_debug_verbose; extern void print_cfs_stats(struct seq_file *m, int cpu); -- 2.55.0