From nobody Sun May 24 19:33:40 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012029.outbound.protection.outlook.com [52.101.43.29]) (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 B6E51318ED6 for ; Thu, 21 May 2026 20:51:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.29 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779396692; cv=fail; b=GOaEA9qhxQUugxV8h5tRHaTftJyZDr4nbCo990888cRA/6k6tNsM3FinhjSN8aKfxGn8idwMLFZkU0RpX0rU+TaDAIQdB2/rEi7f64uJRDuFEqeSkkosdYn4vvxwmRJzBZ/uUcLIIgVW79V7fgeSRWQuGxYdMn5CSBRKgDSbzOk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779396692; c=relaxed/simple; bh=J/IX5ZTYQ3lmu6X1l1AGEjE/UD9u2+I7dg8GAAPXxcQ=; h=From:To:Cc:Subject:Date:Message-ID:Content-Type:MIME-Version; b=X3cGv+SVGx5Hjl3JqS9Xc7Jvjil+ygC6MDi/c9CA5NeOqijk32f+FDqbigOTASYlvP5pwZS5aW/OljLVNcEe1HMMqqX5LnJLBo7ZQQYYU6SLDAiS5iImI2T9gQimBXHdAmVa4WCglVZ9M70NsE/oIa6gUQ4kUDliZCuSmBUoiLI= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=kkTb5p0h; arc=fail smtp.client-ip=52.101.43.29 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="kkTb5p0h" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=d6pvrDoKYyr1xCkA9RrsXeJ5x78oY1Oa+o0NMSdnhSDBNlhqZER3m5GD0n4vhNwR+/1pTQ3k5KP0FXnm3HvyEHuQ0XC27CUQNTQpkKVKq7eD55fdyaYVd0rSm8aHlqkhM18DR2FznrUv3RvjC7YWKtJOYuv/CAa+YabuCkTQJ5E4+tTmr1wKEqmkITT9iHd/zPONFHyk+k1EeU4WL5BGEpFPiKoKxhJ6z1NCkYlogNtd6WlFyuRYGz6+ZN2U0fUfNCLIZMGMTk1XTmDViT4bi5xK4ZXVB0z1LIioTSQB+RNgRLa94WCF8YSfAHIgnrKgS2q50PIxngs4Gbb7I2FN0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=6zZ9euL4uKe+d6Yxzw3Iz54OZ69nsmx+997zYHKFMNk=; b=dvSVpgLEHfk7or1FMy4blY34DdHWLK/gfMIzTbONR74GTQ4KiHkEHBlFo7Ep1UrHHORERfKsRDTvMbpDMApnjew3S0x6rmlfR78lW75EaMayr+JdEKuYHe8GoPgnEziQF26iljfnR2ScQJ/xL6KxKUOvKH/pFnyECm6gVnO19pXZREM+9yw9QjTMd275lllgeCuajvisqpga5vYWmj39VKO6Ktumxo3bHmL5QWZZmx6a+e1dX8V3AJtUT6lhia+PQEzdrrDfODulk9712YYIDqFEj4wp990xzbMAYZ1HHbUTukSm8CX0FWdtbyHrVYue3kHmhwZ+G0OOq3tdMgcraQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6zZ9euL4uKe+d6Yxzw3Iz54OZ69nsmx+997zYHKFMNk=; b=kkTb5p0hEvBuNhi419CPgjOkU9uE6F+mXAVpWWauMUFoMp0puaJIHwDj8mcAQ15JQm8N4aiRJFTGelMt/gRbIJpKmHqrvDr8iRfhArF8cqEgEc6iIT2kCiNXC1TZFaJFGBkQGB0F7JVIDbczhmnZHVtBQ2vmd8KBur5VgEKqDdOaEyO7w4qvKGqxrEYL9Eh30NfaptSZ9dTGiQRbOBO0owASngKGaJpbkI/I1LnyIFhGO0GvHMCDYH5Sw7+r3eRyu80JlmRnQ8WtFa+XODzSJgYtT3onfK06Ys9lueqQp14DXBmyCzLm+vhrgif411Sc6FgouMqujSRvdXexDeQvMQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM6PR12MB4827.namprd12.prod.outlook.com (2603:10b6:5:1d6::14) by PH7PR12MB5805.namprd12.prod.outlook.com (2603:10b6:510:1d1::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.48.14; Thu, 21 May 2026 20:51:26 +0000 Received: from DM6PR12MB4827.namprd12.prod.outlook.com ([fe80::6261:3040:864b:159c]) by DM6PR12MB4827.namprd12.prod.outlook.com ([fe80::6261:3040:864b:159c%4]) with mapi id 15.21.0048.016; Thu, 21 May 2026 20:51:23 +0000 From: Andrea Righi To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot Cc: Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , K Prateek Nayak , Marek Szyprowski , linux-kernel@vger.kernel.org Subject: [PATCH] sched/fair: Restore RCU read lock in set_cpu_sd_state_{busy,idle}() Date: Thu, 21 May 2026 22:51:15 +0200 Message-ID: <20260521205115.1689545-1-arighi@nvidia.com> X-Mailer: git-send-email 2.54.0 Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MIXP293CA0013.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:8c::16) To DM6PR12MB4827.namprd12.prod.outlook.com (2603:10b6:5:1d6::14) 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: DM6PR12MB4827:EE_|PH7PR12MB5805:EE_ X-MS-Office365-Filtering-Correlation-Id: 129c4667-d62b-4de2-e014-08deb77ab7c8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016|18002099003|11063799006|56012099003|6133799003|5023799004; X-Microsoft-Antispam-Message-Info: sPYkDAXnesw40S7Mo8P8hj66nlFObm0eGbS7dP22Gco6fRq3YamkKYqlEdbKbp9qA/ae/COw8WLZTh7DX4gMgvyf4j5ZyBv0J5s+KYbSHc5TXmSJptxfE8n4zLGpOzXOze744ibBbyZn1WqX8m+0rkBpmuS69IdZ4dSvvGBifoIeg7HwwPo8OC8lM/sOq4K53nDGgbm4yDm4F2VjWO1ajpl/aqTslU5y2Z3p3Bj6cHR839AjBRCa6kHkcYJTkm+y/PyRoWigYSehe0DuhvcSJ1qBhRS2JkuYgjR4SANXSitq39RzCl79/Z8QRhNpdAnPCjWXU62mjZfZlQfgFYJFaVaVr0L7HTrVHWwodmqCTfkPjAwUr82zShPEG9KRdDaHcPvU/yFVCLjx6Cc5127EEfD/cerCFT9RJm1KA10dpXAww3yz5lL2iSC23NiXVGlFrGY7bs3jUKNrxjPtzIcgTSVv2NrbUY3/qicKGj686EUjtACQhKdG3Nq4Sucy1LAGneb5LSvtGSUOpLNciJg0b4jRo2sUcr0NkiH5Bh5mMpVBcxYb7KDbX3cwnM8+KUmw4Cdv4Gl/msSYABed49ws1ju1MiOI+1VXjadwsCsT9BqIa8FAmhE4smNZmdLO3Y2wNP5rZM0tNi/i3j1OyzcOGL0A5x2n61lkSweJGzTIJJzJiYfhH7MmL3FbsHHyDee4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR12MB4827.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016)(18002099003)(11063799006)(56012099003)(6133799003)(5023799004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?YQlBbxaPrOvmzjtV4EeM7YewYKPJmQQxb4Yn/YqkmpVoh5SHApnQhpkbLUkW?= =?us-ascii?Q?ahbaX1G1Mg7AxAuKOJthcsi4O2Dh8o/MUp2SQJKme2XliyZCGuMfpXH2rS4p?= =?us-ascii?Q?GSUfmOAF8D3jHjXSiDV9jr16c2gpLv3/OfCym4ibtcGmiJX1L4o/PB+jguQL?= =?us-ascii?Q?iC218ntyRWVPYGkHw8skVUS48cIbN6p56ZxAgLrWSVUwlOS2UWJVoHwWtdcz?= =?us-ascii?Q?gmVJANgqHD3thTjvfQu0t4s63c30UdPx3RTbP6A+JNvZi2T35dTgkXTclm7g?= =?us-ascii?Q?A1AAGcM61P3EUzB1fJUPQdYjnvB4PHFYQklJGZaXLxKlrQL8gZLqT0Hc4R8n?= =?us-ascii?Q?CPdZ6AKu7YD+Yl7yz80uwsQ5OovU1+j1auX+ZY/ilB7dXyGbMuYTX3xGGlxR?= =?us-ascii?Q?ByFAwBEXZWaWkefON3V7hra7X15VKUuOoxpGXv1ty6ZOxaoG435tlGk28MW0?= =?us-ascii?Q?vzf3zsfIC3lqDCiLAXPaTlWrLCmDyfxLVybU/zvwxKw/SYqA11f32qhDG9eV?= =?us-ascii?Q?yPxYd6q7mspdqx9/mWEKSGHM0L4xAjgNHQpZX6gOPZIJCkh/9QUFmsU6Yr0M?= =?us-ascii?Q?uuUJlBoXZ2NrEVzlziHjPonr+wgyixzBCXczvbnF14dwGS6Eexa5JdDE4Tun?= =?us-ascii?Q?A87zrTOLChmrv9bdiBWpgPlU0N3vgeBCrk+bSOAhNpRNwjQ+Npb4jcrKaM42?= =?us-ascii?Q?1dozTqs0lPYEOOk1PJtfqWqTKKg4RpMONgY8tKx6kyHRuwy+ldiJz31Fr9Gn?= =?us-ascii?Q?FEPcxG7BCYKaoVcsZxvxP9EHhI0SWU/nWAFDubEnt1YcZf0sLsY/ASFzmR3f?= =?us-ascii?Q?WlFlFkSCJHuribwJjxazJKCcsR8BTwqNK3KATIRLDME0UwL3cGlUeXiAryg1?= =?us-ascii?Q?tci7HNgcCZtAwxnROHFC7FX8ZCwB/fgFqhW8k/+eQ4PD3WZmjFEEqpkFkThS?= =?us-ascii?Q?QBqa/n1//OJuhERUN0EPdzCbo1lNK9D6kWiA1UiB80GwpwBoPs2hJF17KxBR?= =?us-ascii?Q?2Qfl2tEVmotvHJlzDcEYrG8a/w4dY+rZol2qL23h+aj7S9kz3wVzQiWvAxkU?= =?us-ascii?Q?H/9uQwtNMkMDwUwRoLZM1Dwuq566OFT+yjggyZgzqymYBadiRzwCReCNaTHP?= =?us-ascii?Q?OFt/XgyhyP7i3AqWVTu9tc2JhFuqM3QmPDxfe0fJVAQpqSbPt2l6bQQBokL8?= =?us-ascii?Q?OnXSzQcQamKaHXMlq43dQVV98x8Jj3+m8zLzECV4ucj6w7PLhZTLYxNsY8iH?= =?us-ascii?Q?Je7Z2oerFosQBFidFed+szf1Yip1NW8N3EYfwxxAeu1+jhp1hYyURLlfgX89?= =?us-ascii?Q?Pz9QRTbbD8wpcQB/LnjQ2SRviVhiRIAuiuG2eiIYXcprr9tkRipDb402hQ7y?= =?us-ascii?Q?HHisf4wXe/3b5inNpkjc9nqc4iAMgVf32bhx0dB1lNhbEh0GSqDaWRqbhU4H?= =?us-ascii?Q?mNoQySTm0W3m1BLPSz8yQ0ft0XWhDPrAMyNOq1K0mXb/LuEHsrOX6rGW2eQN?= =?us-ascii?Q?Gm8QHp8SSryrlTyVIPoSNmpAbzSihbEAJm+5ShAtUPQnwexaCmcORUWZBiRI?= =?us-ascii?Q?F6psXW6A/WgqhbD5wryZAdy8CnRmK5HKPe5/m5E9DqfcQl3Nz38UXUA97HbO?= =?us-ascii?Q?k7k/bQAs8oCPvRbV47rn/ILzWX9j8XZjIMd2ag5SumAh6oJRlb4Zu7dqTq6F?= =?us-ascii?Q?/Yr0D8urkbWbiFuIpGI38mBZZLWzXGGBbkZsw9OD05aJ8wvOyOn09KpXlGzE?= =?us-ascii?Q?OCcYzE38hg=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 129c4667-d62b-4de2-e014-08deb77ab7c8 X-MS-Exchange-CrossTenant-AuthSource: DM6PR12MB4827.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 May 2026 20:51:23.1833 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QzbFam/kaOyA7Fu/0DenKJXYwIWKlfZxu4v3FWfSzxQMyVs3MKEPgbKgqSD6IQGqNXQIpRFci9M3UIddNV+NKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5805 Content-Type: text/plain; charset="utf-8" Commit c9d93a73ce87 ("sched/fair: Drop redundant RCU read lock in NOHZ kick path") removed the rcu_read_lock()/unlock() pair from set_cpu_sd_state_busy() and set_cpu_sd_state_idle() on the assumption that all callers run in a safe context for rcu_dereference_all(): IRQs disabled or cpus_write_lock() held. That assumption is wrong for the CPU hotplug teardown path. When CPUs are taken offline, set_cpu_sd_state_busy() is invoked via: cpuhp/N kthread cpuhp_thread_fun() cpuhp_invoke_callback() sched_cpu_deactivate() nohz_balance_exit_idle() set_cpu_sd_state_busy() rcu_dereference_all(per_cpu(sd_llc, cpu)) The cpuhp kthread holds cpu_hotplug_lock (percpu-rwsem) but runs with preemption and IRQs enabled. As a result, lockdep correctly reports a suspicious RCU usage on CPU offline, e.g.: # echo 0 > /sys/devices/system/cpu/cpu1/online =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D WARNING: suspicious RCU usage ----------------------------- kernel/sched/fair.c:12793 suspicious rcu_dereference_check() usage! ... 2 locks held by cpuhp/1/20: #0: (cpu_hotplug_lock){++++}-{0:0}, at: cpuhp_thread_fun+0x42/0x1ae #1: (cpuhp_state-down){+.+.}-{0:0}, at: cpuhp_thread_fun+0x72/0x1ae Call Trace: lockdep_rcu_suspicious nohz_balance_exit_idle sched_cpu_deactivate cpuhp_invoke_callback cpuhp_thread_fun smpboot_thread_fn Restore the rcu_read_lock()/unlock() pair in both helpers; nohz_balancer_kick() is left as is, since its IRQ-disabled context is genuinely sufficient. Fixes: c9d93a73ce87 ("sched/fair: Drop redundant RCU read lock in NOHZ kick= path") Reported-by: Marek Szyprowski Closes: https://lore.kernel.org/all/38fe0a1d-1a48-435a-910a-c278024d9ac9@sa= msung.com/ Signed-off-by: Andrea Righi Reviewed-by: K Prateek Nayak --- kernel/sched/fair.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index aac24cfddecdf..381f378db71fa 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -14070,6 +14070,8 @@ static void nohz_balancer_kick(struct rq *rq) static void set_cpu_sd_state_busy(int cpu) { struct sched_domain *sd; + + rcu_read_lock(); sd =3D rcu_dereference_all(per_cpu(sd_llc, cpu)); =20 /* @@ -14077,10 +14079,12 @@ static void set_cpu_sd_state_busy(int cpu) * domain has no shared object there is nothing to clear or account. */ if (!sd || !sd->shared || !sd->nohz_idle) - return; + goto unlock; sd->nohz_idle =3D 0; =20 atomic_inc(&sd->shared->nr_busy_cpus); +unlock: + rcu_read_unlock(); } =20 void nohz_balance_exit_idle(struct rq *rq) @@ -14099,14 +14103,18 @@ void nohz_balance_exit_idle(struct rq *rq) static void set_cpu_sd_state_idle(int cpu) { struct sched_domain *sd; + + rcu_read_lock(); sd =3D rcu_dereference_all(per_cpu(sd_llc, cpu)); =20 /* See set_cpu_sd_state_busy(): nohz_idle is only used with sd->shared. */ if (!sd || !sd->shared || sd->nohz_idle) - return; + goto unlock; sd->nohz_idle =3D 1; =20 atomic_dec(&sd->shared->nr_busy_cpus); +unlock: + rcu_read_unlock(); } =20 /* base-commit: b07a332d9cbbd9cc9cfa923a21bd061cfb69bea5 --=20 2.54.0