From nobody Thu Apr 2 21:52:52 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012006.outbound.protection.outlook.com [52.101.48.6]) (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 BD8DC401A3A for ; Thu, 26 Mar 2026 15:12:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.6 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774537969; cv=fail; b=sRmW1zX1a1mljLJMF5PPkXogu372zYgJL1r+ASj467pr0NafG5+2cT4b3H/2fMiAcT54cwob3iKIltBu7Vqu2T9RwWmJt/uYtAb2WNilLyGDsXAHyZ3EQ6xUc/9mSnIzl3i5QGOsRXZvPzx6o+W/4hVRPNjVWzNaxIIWc19tPek= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774537969; c=relaxed/simple; bh=iRpin0qHYVwdntxP8HGa4LutHarn13deIxoGm60WEBI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=TVQV7mMSQk2UMTCZcTjypTxkF2ZNJuSBm5zf7zoUS1pjBC74vZhtSXYWB8UmirkrcrJ8SZSm2jUXgrxIJL8/MOaWhWRXV5ywdgVByZI4ItS28rNoy5hrg+gLYDgTFMwBaD+PrsjipSZ2ZZxFcY3Od+iCUovEIFPspnUgwz37Xe4= 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=RsV+2iDd; arc=fail smtp.client-ip=52.101.48.6 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="RsV+2iDd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=aC/PwuOftXfIXxssBl0AiOBxI5HSOQwPs7I94/tHb86W2lnWaIdIRlF8Q39L9oQC21h8CJAlmdh35sO31N0ynbU+rwMagzJ7xtF4EkxLca4sTRbDx7ZKYsVu6v63MpdeB0anjus0ZALq2Ha5wGPgzn68Lk4m1nk/AfBpHdYUgfljpDNkK4kZJkAE10ruHdN6zxkvF6+iNBwrCo7+4hW9f4jqpIn11/xT5cwM1RPVED/7c2oNrrcB8w/WCTVkDV+OMCuPawaZyIPA4wEv4Re5/+V+l6RBVMxBny9aCyJ1YFe4LHRZZxyto54KH2Oc9K1sNKDp0ls7ORjATxvp+Vu0sA== 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=aw8ndDACNQEnYKxwTsX+80XdjUOwEip3UTeST3ctfTI=; b=zT7j1FeQCpbw0RJvj+2TCJVxw5hIfZ1veem7I9TuneRpUjDtIrxC0/gqFKAyZmqs43mZa5pdYFQZb4aqN/QSSAE62sBR3JcPhTXi6bCYKB6DR8pTACKroSLWr2OAR2s6e0klf4PPxucsvgzKmOcViD7RClmqh2xaU3gZyluVbYlCBo+U2wGrvYvKzxiwTUerwPQMzgD0aMt8bne92nbwbxheupQlEi/H1rL+p9lzIpQrUjWao/hv/Om7CSrp6B8yH6gxEVDh8UgeW2Wo0ZT/C9rY+tywVLtTAv5I1xfMQD4DYUdf8c36sG8IRXRYKRd4+r8ZXL0Ok3ZSN8S8yiesQA== 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=aw8ndDACNQEnYKxwTsX+80XdjUOwEip3UTeST3ctfTI=; b=RsV+2iDdp9SUSqD951+WtQkzDmzdiMFluoU4W5WrcL1B4Gxleg6dgbyIR525YkZKFxpC2qZZks/I0sIxvn8AW9Ooxuzzl4bKAyL+UI5N10qOyyvoou3l2X3k/scHjVPMBa67h/jH1FjpXrQ3qGyAFJXx2Th2wGMZ4SMKxFSEJuMC/I0nrnN/fTCgG9A/5+83oEwgHRuaSpZmQGOXcc2GT78F4ezmLZjfJtJryW7ojacjLV9ItLEG5K9zWYezdyxXvkQfVnjU2VH6HbDlWbpsdGp8WAddxmXGYFP43QNrlkfy0l7Dj6Gs4Nnyr0HdOA8yb297e1ftPyoRRFQvR7Vsmg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from LV8PR12MB9620.namprd12.prod.outlook.com (2603:10b6:408:2a1::19) by CY1PR12MB9627.namprd12.prod.outlook.com (2603:10b6:930:104::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Thu, 26 Mar 2026 15:12:44 +0000 Received: from LV8PR12MB9620.namprd12.prod.outlook.com ([fe80::299d:f5e0:3550:1528]) by LV8PR12MB9620.namprd12.prod.outlook.com ([fe80::299d:f5e0:3550:1528%5]) with mapi id 15.20.9745.019; Thu, 26 Mar 2026 15:12:44 +0000 From: Andrea Righi To: Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot Cc: Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Christian Loehle , Koba Ko , Felix Abecassis , Balbir Singh , linux-kernel@vger.kernel.org Subject: [PATCH 3/4] sched/fair: Enable EAS with SMT on SD_ASYM_CPUCAPACITY systems Date: Thu, 26 Mar 2026 16:02:36 +0100 Message-ID: <20260326151211.1862600-4-arighi@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260326151211.1862600-1-arighi@nvidia.com> References: <20260326151211.1862600-1-arighi@nvidia.com> Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: MI1P293CA0006.ITAP293.PROD.OUTLOOK.COM (2603:10a6:290:2::16) To LV8PR12MB9620.namprd12.prod.outlook.com (2603:10b6:408:2a1::19) 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: LV8PR12MB9620:EE_|CY1PR12MB9627:EE_ X-MS-Office365-Filtering-Correlation-Id: 437ed8ad-72d6-4e18-5784-08de8b4a2198 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|7416014|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: LDUdfRKwRM3iZODLkTUN7Bzqgtx2UhMx79I9L4c0FiGH4emBrdISplFdRZxj5ljheKT0sKlY+A0fz3moIleUyh+k2rMyZJJQ+YckEbtF9Sxg3PnzffgJ124RnTtdqKxdr7nawizW+uxjNOXkiKgN2ZCtSA44edapG/v25Wk8cWKZUYIUpnxOXvUbUgof8pvpTcgEpR+3Ekhb+qzDIuA4K16nz+vibWa7kp2+eWULdFa7dYKt7C2UtbyQ8uf5rjHdc3SpURADKOoZnqK4F5z5E+vTcURC0lovzadhuMJITzWYTLecGP+p3Nj9dVo8+dLwzFpwnPv27VTKgCbkLm/QrNAN+ASk6kI2jJRWB3fCrl7FZpNYIxcQCHKlJZtsTkSRf5CUn+HlJTgIS9blYo/D5DbBBoLCO7OeMyAVQblz0SRF49OnQCyIjsaaz5a+oDarWwbE9N3l7uI4MWXDy3Y8EZH7tLrlIBmP7qlaKu2ZdaQQkaNYskGgMOIQ860YZOL6A4MwNaZCUmxIA1x5KUXDFCXF/AtWGk+SU2YUGYWRpIWWfNf0Kb0ePlrX5mhFfoawVJjEGvKSZfcj8f8w9yqLttAfKGZ/+xOmX7yWwoYvFMFa9J1UOMsUYQYCUZTedsVkpdnuryhdoo+h7Ely09438YRcVWQ+tfRRJ4Pk5rN/lMT8iHStFSHPN9qTYl40yEsjBKhWJjW+UTleKcB7X7KAjI2nHHA96ub9rrXb8Bg5JEk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LV8PR12MB9620.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(7416014)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?CZtnRkNT5izrWfItBKDOF4LzOs8Oogm/g2fRka4qjfgKnAP2xlxtuZO7mUP2?= =?us-ascii?Q?vcHUTXF3u99DM2p7LPt7Ilnr7euQbYr/Kh4o94UdRCvROFiEZvqKfwHLvupV?= =?us-ascii?Q?o6TbJdl023qZruk6tjMsSnRHn4pykgqeTUMMQt6pQ8X/55LAnK2J7J9C10sa?= =?us-ascii?Q?kwhRhRM9zujAHFt5XDDFpewkTiiDIeJqYfj5q6r+FKbNj9mjb13VFlBN4yhl?= =?us-ascii?Q?lFyKBxjj2wqnLU06xQogUgKrJ5yfs3cwILY3HirYFWZC9YoOGvKcHjNks/Cn?= =?us-ascii?Q?wxhlRlhpsUnMTkt6XnmBYn6mvfdFViCrb3/ghn+IA0YTuzgt3B4Mgsj/gP4Z?= =?us-ascii?Q?rYrjJsi/IgcbNG/nW/dzCfalo22g+g+SCKYX4oDjHryNBIQjhOZb1Ff1aaqS?= =?us-ascii?Q?vTUA+szTNdMUPdaRSrmqW1zXyu12GRqUzcWx69jD0ylIySECrAi1+8SNFmdb?= =?us-ascii?Q?pOJIhEAEKaMpJpvcLt2ju2mhgSQRFRom4yd19pDFWukz/EXh95qt73jQjYx5?= =?us-ascii?Q?8JdMkdinW/oj+0PbVp1voERCwjdjt/5e06SnesTIeshPUCUtAwPrPrKOP9+U?= =?us-ascii?Q?2fMXLrpFULsv03TDz361uGICzfE7RcW7G5xESqfbv+bF8zHDgaTqOTiLnfAg?= =?us-ascii?Q?jtvtNk8J2BWjrtcI1gzqSaUivWqkToZsbaUMbg1h8I/aFqsD1wx7HWavsGsT?= =?us-ascii?Q?FIRw03F2YVt+olhS2C3/5SBht3gyEebn1ubECv/t1/Z7dHYHEUPYaVl9cWO9?= =?us-ascii?Q?KM8lGi4mTQV5D55Kcklq9XSsiQ+8q8Db85PBGoiowhSQLQhlu2ZKgU3E7g04?= =?us-ascii?Q?15KIY3lZuLmYgZg0pJ+czFMemDjdyD6wAJ8zzAbzi5C9wURjNX3uZjKkFw3/?= =?us-ascii?Q?aG9ZwGmDoB1KHoFckPor0g9Sp0e+hDfwmMNP2x4OKV23jKcvYTWj2vWvPeUr?= =?us-ascii?Q?+8ZypSGR/uRTxRYeojRPbAwXzHU5YK3D+mtnBFSJOznpAhILxBgXwdXiw7WZ?= =?us-ascii?Q?ELRaGJdgRFDBZDQ8sqyy3gwWRU9yS7GQnHHsDcV/i3DPLi+EY0DDaeIFaM2W?= =?us-ascii?Q?aZCNv2H8Hmfr/KBuOlTbvU62b8q063diV6bKLAPHWYZFQIc/MTjkri/aQSWx?= =?us-ascii?Q?W/AEPAOo4UQxRIURXi83yCYX8bwi2aE1xI53tG7WRImOdcrJmxFM7Gkv9mGf?= =?us-ascii?Q?GlG0qsl8+mD7qlgLScJfSaLcMxqSYIxjSbPdayVhxSjlpCg8lBmJi5+PBxXX?= =?us-ascii?Q?CZEBsIZF1GISqtWY8jkz7ZyTi+8F1b2HYoKTE8NJ73sJyRuKnNPcn2cfqmAH?= =?us-ascii?Q?6ajAFNflcO+ARu9+9mb6Ismt3T3OHFciU3GtL0jSdA6Stli3vm0+xeG0xR8x?= =?us-ascii?Q?3pcC4mhLrOzLoV2+GbxV7hXr8QRccvYy0JM8UOWr9jVGy0wf38d+YQgxGixl?= =?us-ascii?Q?OsH4pVmp+C6MB2QHTUQWrYwhtchWROUSU3YxQ5rfAbpu1IUSD0Fla68GCkqV?= =?us-ascii?Q?BIOV4mwadkrGuUcxdSGd2N4GyPxCv3bpWsLA2hHa7F1xii1ChoNtRF0DT7bm?= =?us-ascii?Q?zUKLszFNKuFdBIevu/NSFQ+8jL7zEGJSOn8Dj4AfrlcX1TUqWnL107o8+o7q?= =?us-ascii?Q?0hlkL5NtfWl2Hb5tGHSxLE88qxkyAcAX3t2llWC6HIZkh6nau4WTXjw3Fuun?= =?us-ascii?Q?6lSW94C0QdWfDOzBwZxJ4WYBA3dRb+Zxw4jWfB3u9hDN3/Ab3WQrgy6EFykI?= =?us-ascii?Q?ZLJOjOiZ5w=3D=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 437ed8ad-72d6-4e18-5784-08de8b4a2198 X-MS-Exchange-CrossTenant-AuthSource: LV8PR12MB9620.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Mar 2026 15:12:44.2785 (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: 6eWNmSGEmL7BRFlVeCMvh6zwFlURyRGonpH484kjn/vnLrC724GEOWkwd5do70VkcN3OWFhIjT2DzclIAMfdtA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB9627 Content-Type: text/plain; charset="utf-8" Drop the sched_is_eas_possible() guard that rejects EAS whenever SMT is active. This allows to enable EAS and perf-domain setup to succeed on SD_ASYM_CPUCAPACITY topologies with SMT enabled. Moreover, apply to find_energy_efficient_cpu() the same SMT-aware preference as the non-EAS wakeup path: when SMT is active and there is a fully-idle core in the relevant domain, prefer max-spare-capacity candidates on fully-idle cores. Otherwise, fall back to the prior behavior, to include also partially-idle SMT siblings. Cc: Vincent Guittot Cc: Dietmar Eggemann Cc: Christian Loehle Cc: Koba Ko Reported-by: Felix Abecassis Signed-off-by: Andrea Righi --- kernel/sched/fair.c | 50 +++++++++++++++++++++++++++++++++++++++-- kernel/sched/topology.c | 9 -------- 2 files changed, 48 insertions(+), 11 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index f8deaaa5bfc85..593a89f688679 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8658,13 +8658,15 @@ static int find_energy_efficient_cpu(struct task_st= ruct *p, int prev_cpu) eenv_task_busy_time(&eenv, p, prev_cpu); =20 for (; pd; pd =3D pd->next) { - unsigned long util_min =3D p_util_min, util_max =3D p_util_max; unsigned long cpu_cap, cpu_actual_cap, util; long prev_spare_cap =3D -1, max_spare_cap =3D -1; + long max_spare_cap_fallback =3D -1; unsigned long rq_util_min, rq_util_max; unsigned long cur_delta, base_energy; - int max_spare_cap_cpu =3D -1; + int max_spare_cap_cpu =3D -1, max_spare_cap_cpu_fallback =3D -1; int fits, max_fits =3D -1; + int max_fits_fallback =3D -1; + bool prefer_idle_cores; =20 if (!cpumask_and(cpus, perf_domain_span(pd), cpu_online_mask)) continue; @@ -8676,6 +8678,8 @@ static int find_energy_efficient_cpu(struct task_stru= ct *p, int prev_cpu) eenv.cpu_cap =3D cpu_actual_cap; eenv.pd_cap =3D 0; =20 + prefer_idle_cores =3D sched_smt_active() && test_idle_cores(prev_cpu); + for_each_cpu(cpu, cpus) { struct rq *rq =3D cpu_rq(cpu); =20 @@ -8687,6 +8691,11 @@ static int find_energy_efficient_cpu(struct task_str= uct *p, int prev_cpu) if (!cpumask_test_cpu(cpu, p->cpus_ptr)) continue; =20 + if (prefer_idle_cores && cpu !=3D prev_cpu && !is_core_idle(cpu)) + goto fallback; + + unsigned long util_min =3D p_util_min, util_max =3D p_util_max; + util =3D cpu_util(cpu, p, cpu, 0); cpu_cap =3D capacity_of(cpu); =20 @@ -8733,6 +8742,43 @@ static int find_energy_efficient_cpu(struct task_str= uct *p, int prev_cpu) max_spare_cap_cpu =3D cpu; max_fits =3D fits; } + +fallback: + if (!prefer_idle_cores || cpu =3D=3D prev_cpu || is_core_idle(cpu)) + continue; + + util_min =3D p_util_min; + util_max =3D p_util_max; + util =3D cpu_util(cpu, p, cpu, 0); + cpu_cap =3D capacity_of(cpu); + + if (uclamp_is_used() && !uclamp_rq_is_idle(rq)) { + rq_util_min =3D uclamp_rq_get(rq, UCLAMP_MIN); + rq_util_max =3D uclamp_rq_get(rq, UCLAMP_MAX); + + util_min =3D max(rq_util_min, p_util_min); + util_max =3D max(rq_util_max, p_util_max); + } + + fits =3D util_fits_cpu(util, util_min, util_max, cpu); + if (!fits) + continue; + + lsub_positive(&cpu_cap, util); + + if ((fits > max_fits_fallback) || + ((fits =3D=3D max_fits_fallback) && + ((long)cpu_cap > max_spare_cap_fallback))) { + max_spare_cap_fallback =3D cpu_cap; + max_spare_cap_cpu_fallback =3D cpu; + max_fits_fallback =3D fits; + } + } + + if (max_spare_cap_cpu < 0 && max_spare_cap_cpu_fallback >=3D 0) { + max_spare_cap =3D max_spare_cap_fallback; + max_spare_cap_cpu =3D max_spare_cap_cpu_fallback; + max_fits =3D max_fits_fallback; } =20 if (max_spare_cap_cpu < 0 && prev_spare_cap < 0) diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 061f8c85f5552..cb060fe56aec1 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -232,15 +232,6 @@ static bool sched_is_eas_possible(const struct cpumask= *cpu_mask) return false; } =20 - /* EAS definitely does *not* handle SMT */ - if (sched_smt_active()) { - if (sched_debug()) { - pr_info("rd %*pbl: Checking EAS, SMT is not supported\n", - cpumask_pr_args(cpu_mask)); - } - return false; - } - if (!arch_scale_freq_invariant()) { if (sched_debug()) { pr_info("rd %*pbl: Checking EAS: frequency-invariant load tracking not = yet supported", --=20 2.53.0