From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from CWXP265CU008.outbound.protection.outlook.com (mail-ukwestazon11020133.outbound.protection.outlook.com [52.101.195.133]) (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 90F80484226 for ; Tue, 25 Aug 2026 14:14:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.195.133 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787667271; cv=fail; b=ALTodD9hjhW5hizIzAmNITPb7i6kQj9gcRwrT6S52kkLbuhavBsCbbKV3n+3jnQ5i7sTooXLOWB2zrgG97NdXrpN96wq21X3pKDZvqjoVq94t72pSXqEMtzCjuzot4mCWabZ+hNW7pbDJ474CAH8BIQtIjeuBOOxqHYpHZqgse8= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787667271; c=relaxed/simple; bh=R0kOzotFKAirMS+Bp7OPuqe5NoqjLAifLYR5xdmq63I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OqG+iRO7EIZvCuVvOk8CDu9QWEHyKJhH+3xOl4JvsnhMKpJ0ELbcjKTeqFao/QtMaJSXOyPfcru93u1ILYNYivIBawNQ7Pd8Q1PKWLCOFpGYvDO5OSKe9jHAaKeGaxxXJAUBzONdWX1Wb/gJ5SxkUwQunSp7V9kkDjhOZxZ6kTE= 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.133 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=JGm9NWY5777LJTrOH6uHwQYQezuYUkSwjc4CkwUHBTADMjciiinL75laXf46CihNPT+9YgEy45/qQHzJ2G+dYt8KJTHpjC3d49xFQwtKIL8hmOdsUXPS7Kz52QtGgDLAZn8nEAFublTtM/gnCsHiXZ0qIsiRYhm/2jXhlUpv1MTYQBTgsWneKP7h/n0wClwj4DZ0QnQGYJOEqwLMuRWCqc5q6XssxdCY62tVCYPr5Q419mWKPflYClm694K8ZcuVLAnZsBJ0qDNvNpftwKoyO0/c9Sg4WLV82xmGkSEIkN/oWyMvVOp4K55Ez/dht5AtFMlX8XsVxfyjHnlhN+69rA== 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=lT3gQobiWONXCK/KHz2DeumzA21Z9K3EkWLavANwepU=; b=OkXzFBLSJpbDcgyezyoVWNu5TZGw3YJREyrvU64nlUQlXQVXtTWdM+eF9UjygXRafVPRQF3H+M9CK4gvqpDy/d7hS51C69FrKBnWL6om66HLZb3xeTUKSoj+ONPq9otCWuZ4+JCoeq1iZ1mk2vRKSLZJRizPhUwjS0qSnJ+WbGjjgTtjwzfUu2w0ZuDPP019bPU65yR4TFVLtxmj9yFLH0dCr637Vg5pihSVh4ccCD6slsFXOnIUg0fuihTx16kZdVzTZeS80gMbJzxYESMGNnHg2VkaO2tBFzNSnxmjhbouHL+RdSP/bpZHOqRClqYo15M1/BZli7S89linICabVg== 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 CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) by CWYP123MB8971.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:286::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.6; Tue, 25 Aug 2026 14:14:22 +0000 Received: from CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230]) by CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM ([fe80::cec4:77ab:262e:d230%4]) with mapi id 15.21.0339.012; Tue, 25 Aug 2026 14:14:22 +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 v5 5/6] sched/fair: Use list_for_each_entry_rcu() in print_cfs_stats() Date: Tue, 25 Aug 2026 10:14:12 -0400 Message-ID: <20260825141413.868997-6-atomlin@atomlin.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260825141413.868997-1-atomlin@atomlin.com> References: <20260825141413.868997-1-atomlin@atomlin.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0418.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:18b::9) To CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM (2603:10a6:400:183::5) 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: CWLP123MB6607:EE_|CWYP123MB8971:EE_ X-MS-Office365-Filtering-Correlation-Id: 003d8fde-7d36-4545-6ad4-08df02b32921 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|376014|366016|1800799024|10067099003|6133799003|3023799007|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: WZW5BGmc9bnnpfX8EVFA+ydJBih/HiihWkUQuWdWDdNKCtFUV67djgJES6pVhZdSteGVOTLK1OS4BQxxoOjpcNK4pef8vP0v/LxadgiL+ezR4Jhrew0txVMahoqCTnCDuKGnjdDlcS3DtbQsPf5FNsRpsffaT4YgYvg1sYmnd85qs0Ra2q3t+LRUY6fyj+dlNvZCzl/t9njgNDjIOr2bv5TGurIS/fMSxfQgFpw59Ra9Q8ghOedXkKQ/Ck8M9YzfHCHREVDVlU/egoTzLclij8L7O8trizU18LHSSZlzKmLITjyz6rxx9D79kZCFBbMmkUqytm1FuOkeMYepuIUQZPylGpUwInpNo3OxfimAMV8S7+cd9AZdk0A1rmeJWgDGux47OZZ5jaqDTmnRGNXGUPR+/idkodQX0mLnWTvsquiPFKHIJ0H1XmA8hYLuU8cGscdiMcAjHVh9WYEhKJr/2mVq7SIt3mgAGCA1HTBWBQO+krI/wgvqWxUKTmE9M8fCCDSPVvTZn0eFwq/Uso8fR0gfmL/BfewNTfi1dlI+dt2PrD5bg5OvluksmdvpUAu4yvaygEGpRSdK6YEwJadvUgX+UqWxpNiLAYfJN8YJ3B0p6DngROHlXY+5CNaHUCPyB8zsctfMHNMM01hyuuNXzbnI/nTdl1nq0Jlsgw7h3ZM= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(376014)(366016)(1800799024)(10067099003)(6133799003)(3023799007)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?OI4L0/1COqXlnUqdWY/UmFhrJWooJsCsCLt/CazYD/Uz/9AVgSAVT6T3pVA6?= =?us-ascii?Q?haKXGx7C9mfvYilxisIgxEGTQIBfaI9S82On8zq1a1G43lbvOt7K4+k/3Foa?= =?us-ascii?Q?u5Jbd6+4XE9zmB4TWBfk+05lYkdWXA2xx2Ix8iEhJ6MCS2y641ct5M96YHqH?= =?us-ascii?Q?+wMGGb6tbH6d6nu7dTwcRTrP59WRX+xGBZxh5x4TVFWzo+Xbag/KNbbfUWSu?= =?us-ascii?Q?nYzYo6XID93gcAY111u3RFMnzTQTD5aXsraoY4xRojHRG9+5v24tdEtLCp05?= =?us-ascii?Q?4L0dpMxB8ghfmjXP6JFclEXNgxNmN5Ogfjjcxakl2esZmrQVvVfWUplseYdO?= =?us-ascii?Q?WnEeqPIG4s6RmT9Si7cFVgflIA12zfjxPR0BB7OD1axUTUD5RB0RBsRBbhH3?= =?us-ascii?Q?t3ykin576luaTIVEmjOE/qIWZjMv2G82NktPLmEQopjSej6a10ziHthkEddC?= =?us-ascii?Q?bykA2ThDO32mksqGaHKZ44BDLECMFvHFjitRV5v44ACVW2j5e0wW/qL7QcNB?= =?us-ascii?Q?LdIVXH8wyJjiAmb/D67CJ+my+OsQbAxBk/o5PGYA3Yi0vFkvRghpv142fpeL?= =?us-ascii?Q?tBUaxxXFOdK/mN4NmgDtADv/Lg4OESCA3UxnHFBx2GtkN6VZj6LCVXVX/8ev?= =?us-ascii?Q?M+xY2FvMd46ZaQgHQxBx6obY0t0zhn2p61L4A9nz0jckE5nzep+24M897Ih8?= =?us-ascii?Q?StVfgkby4GRY9oITDj8LLblYYjfJOfapJI/sFBgxZL8/UbVLT21G8JJop2ox?= =?us-ascii?Q?XsdrrMfw0vmk+PwXEFToPN+PvHOJKRc2/5o+LrJuezm0pjgEKcOm4B3Q0SXX?= =?us-ascii?Q?L3bREM7uxuf7E0eVeJoTq6E7EwyX7bzuZnayMEdr98Aa9WSUes6y5cK5Kk8+?= =?us-ascii?Q?XLRdR5Nsw2ndQuYMW8HL33sb74I9m4TP25R8q8lHPyEddopfKg1U1t/+NP3R?= =?us-ascii?Q?8F1UsCQQdZYGpp6NS3TcS6xOAjRa2i00LLApt4cHY4CFuLbQqOoPGRdfHg6e?= =?us-ascii?Q?yuL3Xgsu5o4l099+dZyCQPjtHM9apV+SLAElXiKt8hz534MBv44HDE6bCR6Z?= =?us-ascii?Q?Hp4rxytXLxtbDVdITdioxnQrqZmQk7KlVDs6/01dLeF1YiLe+Fm77amuLo+h?= =?us-ascii?Q?Uj6DFvzhI9TAc6thV1w3zaMWQryUkTcJ1CIueqlLzTnanDHoVJh+lB6za0t4?= =?us-ascii?Q?EyYZZ/Y1bEK69u1fHS6dngKnxtXUEQSIDAcX0y+89mOrmQXq0vVsAWEuFVWE?= =?us-ascii?Q?3NBNbIIz8y7Ey9b8qN0zrf1XoT1pctG3teiW16VS42Jt7LfCKMqCvuvsLlgX?= =?us-ascii?Q?1EBTc8AeEBS84vjN7aZJS1lqEGkM8s2SG07RaAZtrIEC+ZWyWK0Wg9zJwM8o?= =?us-ascii?Q?4jQ8W3zdyLnFXlnfQ30p+vwdV+r9tFq+bMHFEdQanvUbXX7iiIP4TvhQOTBO?= =?us-ascii?Q?dPf6Vi52tHxPYqXdLK1CDIZosNKwDO4vr5ADGApmoeoscTEImu2f7c1jSBos?= =?us-ascii?Q?E6OURsKUX+F3ybcyZan0Au89oUUeCGn96VZcPOR0w0laEbbc3l+Gz048g989?= =?us-ascii?Q?41Rrc/NeGTVzEaGW9IR9AyHkYniQ6UHufXwDGl0EaPWdyhlwlv/cqkgo6f/t?= =?us-ascii?Q?P/qHxhyYspLlI2k4ckuRQSu2nZj5WRN/4dP/BFLBPTGgKDQe7R3fh9rHlx3T?= =?us-ascii?Q?ejNgqXY6NPsq81VFZEUruiPjVUM9F/9yhUVRcSaTgliIBnzY?= X-OriginatorOrg: atomlin.com X-MS-Exchange-CrossTenant-Network-Message-Id: 003d8fde-7d36-4545-6ad4-08df02b32921 X-MS-Exchange-CrossTenant-AuthSource: CWLP123MB6607.GBRP123.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Aug 2026 14:14:22.4959 (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: +oVrRXCvb/fSRlbb6v/m5OKJzUMkwxHF4Ev5+OTV0OhfUqfJc38cv4VMFMh6YHyUPQJVP51p84GNQAbLc/uugA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWYP123MB8971 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 c05ba4d8b169..8793059688d7 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: @@ -853,38 +842,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 ad367a542eb0..b85f826be450 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -412,6 +412,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) @@ -497,6 +501,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; @@ -15400,14 +15407,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 aca352e2f4a8..e25b3fd35972 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -774,6 +774,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 { @@ -3393,6 +3405,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