From nobody Sun May 10 21:55:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7CD14C433EF for ; Fri, 22 Apr 2022 11:52:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1447199AbiDVLzB (ORCPT ); Fri, 22 Apr 2022 07:55:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54526 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1447191AbiDVLy5 (ORCPT ); Fri, 22 Apr 2022 07:54:57 -0400 Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2121.outbound.protection.outlook.com [40.107.215.121]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B6E985641A for ; Fri, 22 Apr 2022 04:52:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WYlZDSr76Y0RYcee4eKfE/oF8N8YcpNA7WZ00Lau9tcfZfSpvYawW3ygP8w9GhXf5fx92+AMSs/DQAAZTfxkbbAKKMjbjMtMss+nbaC7kj+Sz5zx0EByKeNoTVK3JBq9YZ6zq52QYzzwPY3Mzc2iKmLuC5q+CfLDUt3ZeKlcz5iGEYak/heNNGtRFmCUql96WYnq4kvex7L4sLrs9RJhdJqBxbidBY1cLhCVj8YNIQo/mfZcFrkt7zpBR+FcK9KEr5AthFymCBKfVbIevZlufFtcfl2MPQV8q95zI5EuCgJfloHRRnNm4cVOcz6wFeHNJM0msHpsEsDZOI/BOfF+KQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=VEh/N43wcd7+TXa1oLqICdwUmBYhS41l//LcqVrowRs=; b=mDEuS01iCc9Fx+Sx/4y0oqEtALMK65aefkKtAjOFK+zHa/ezg/6VihBWqAzEJSeINuXTTWw8gu0QC02bq2B3UbXTZQzXhh4Q3gfgwGSDt2XROmi5viWrinb55RuUQRKAR9H6lT+EoBORFYeDYjh02n7JNPPbL6R7N1iV9K1zBEFxvb/zYDXU4E/2kcwQDq8MPPWBDyy6dkO5cvNmTV97ceQjiP0547e9P/uikK5fcI1c4iIgb+5SfcaqNGDfpb2PMoOx7JdScy1K5L/SrZ6R698/fPWFrIzGjJBmryt+AV+bZCrzNHrYiJHBdFz39daXx3YCAsFi7iSEd0aLWBqgng== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo0.onmicrosoft.com; s=selector2-vivo0-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=VEh/N43wcd7+TXa1oLqICdwUmBYhS41l//LcqVrowRs=; b=mQKr5Xne/k9YZ3YyPGCW3hKOvWRqTwG5pWjrJpHZI4/LkO4RHOncSMo9RKKQTYlvyKYFssVlgVwTBDrxuqGuHcTsw6ZVLuD6tQiWUTTrujkcYtRl9J3nDLnbJPHRswbEZR1kYy3w98PbDKHDEITvh7pMnatBkd1/GHUXnNG28kM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from SL2PR06MB3082.apcprd06.prod.outlook.com (2603:1096:100:37::17) by SG2PR06MB3726.apcprd06.prod.outlook.com (2603:1096:4:d2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5164.20; Fri, 22 Apr 2022 11:52:00 +0000 Received: from SL2PR06MB3082.apcprd06.prod.outlook.com ([fe80::e468:c298:cfe5:84fc]) by SL2PR06MB3082.apcprd06.prod.outlook.com ([fe80::e468:c298:cfe5:84fc%6]) with mapi id 15.20.5186.015; Fri, 22 Apr 2022 11:52:00 +0000 From: Qing Wang To: Catalin Marinas , Will Deacon , Sudeep Holla , Greg Kroah-Hartman , "Rafael J. Wysocki" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: vincent.guittot@linaro.org, dietmar.eggemann@arm.com, Wang Qing Subject: [PATCH V2 1/2] arch_topology: support for parsing cache topology from DT Date: Fri, 22 Apr 2022 04:51:25 -0700 Message-Id: <1650628289-67716-2-git-send-email-wangqing@vivo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1650628289-67716-1-git-send-email-wangqing@vivo.com> References: <1650628289-67716-1-git-send-email-wangqing@vivo.com> X-ClientProxiedBy: SG2PR03CA0112.apcprd03.prod.outlook.com (2603:1096:4:91::16) To SL2PR06MB3082.apcprd06.prod.outlook.com (2603:1096:100:37::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f9b041f7-210f-4763-5cdc-08da245682b8 X-MS-TrafficTypeDiagnostic: SG2PR06MB3726:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: IjdHJJSG/0msW2x3zEyLnkTB5XMRn7exNE53byDXKjnJJ8Bfn5RMqmfeTGnQHVPUS26uYi/Y21NmdC//xHn4hLuMLSA9dEgqG9msbi2VuwVmE+cWunwdm9B5QdFhrBrY709ZfzijzndxpRhMmG11fpPgj/iWIzI+pECvy9cQICqiqWYDZ8FSHn0k57Sju9KQ8eiB+ycAYLKMPz2PogIoSfEC1mpWHb4dru27Hce/WUuLWZ7Et0QbMrfhFsOrFQRjvK7DTKA/g/orGSCaMJQEa9gFCmNHPdMYCzXwkcHu1DtlNGGCtMubVwrIxuQ0+OinatE7vAd3wDY/rru/ZI7pjJKQIRZImnXySlhoc4ASNFNJ+j1hko4nc+1wus+DYopjgbccYYIrx1cnqVGqRdegScCcIM19wTaCYu/2nsWcHJTIU5lNw3vMtI777TFcoHzrLvbd+1emjxQDKskLQhiifKCHMq8CIRBtYsdYkisQIifpN1eC7pb17bVdkwPeVVmzxkvnk+JkWONI6k525AQt4Y42QxcqwISrpxFPlWeQLO3OP4VDjw8061IXM1TBs334yGmtCC3u6AMq7fyTeeM5PGeNOEUEiAqXNLbUtp8rvDI4VgDglaOKUnNQ31AA0cGejbjc1IG0mmMOntMhAzfFlNLpPqJkV4pPwhmOWSeDY1T8YIf+RziqklOJx2KYI4Xra5tNrtbrKgxr20Cj8mzqug== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SL2PR06MB3082.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(186003)(107886003)(66946007)(83380400001)(5660300002)(316002)(26005)(6666004)(6506007)(6512007)(6486002)(52116002)(508600001)(36756003)(66556008)(66476007)(86362001)(2616005)(110136005)(8936002)(8676002)(38100700002)(38350700002)(2906002)(4326008);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?uKSUIAyTxsKdarHtMqKKQEf0IBjoGvsoAi8c2lx4OOixKlfIFDIi9UbDhZro?= =?us-ascii?Q?/wS0GHCycH2rDnHPcfP0Ij90lqRDFOjQf0PphJ+L0CGrXmKTbSk0ow/rCxbN?= =?us-ascii?Q?fy4W9hQNN5gDCyJdaV6GVXUAasUPE3y3KuXLWr1HhKP9YnDvwZYN2mXauJat?= =?us-ascii?Q?5EjYgfT4abfQujV/V538BO5asBiUJtKQ8hKnEE/+LvW2BMV3IapIInmuSRSy?= =?us-ascii?Q?S7gy+Qh36k7vcYIsivv5uwNnTIxkpshHgCEDrvC7PSVkN5hcj8XRVPGK5P1P?= =?us-ascii?Q?K5ZOhCbZRU5mu+/MVhZjjNVzjNTvU/mG+iht6hb3CKbZ1dZHdEMUQ/vvjCYq?= =?us-ascii?Q?WelDruJpC9cOBRkv9ob9X0uGE26OuoIi+UGBRX19mszsnXgXyXzkqnuxSXdP?= =?us-ascii?Q?0bCUs3L7UmyxTkzR95cqTFOFuOzP403ji6EcdeJLOHj0wxJJyGaW7RUz61P4?= =?us-ascii?Q?8gRR3mnRcoEOzj6JCEEk/P+omi3UWNwTV//wXbZFchZZnkdjX0l13cRuWJNY?= =?us-ascii?Q?WvyQJv9c/z0TItrcK4PH9kQn1WWCFqZ5u2miwMdCXczpJ1SawAmYNRptcVfS?= =?us-ascii?Q?EUkUdihV9Xp7PbAHd6aJLJjuKNrUXIFEvexN4Zda0J7uUBqfqlmhxJFxKavH?= =?us-ascii?Q?sQtj9Kc4wIDBd6udrzAzZO+M3DDjSAmznkvMtEPCP2c9QVAfGEYFcHyBUJSl?= =?us-ascii?Q?ICocipuNCu4TOgDH3Uaq3rPKjwnAeH6x8DkmT97+LQxZwlKGvG3//yyrxIE4?= =?us-ascii?Q?BGtF9T5YFKp6DIyDlM/v56hYHCBg5MswMM+laKr7v+QT5vjeuNdjQ9S8BUIf?= =?us-ascii?Q?99dk9H79M6CRv+wVmBkM+kLc8kjkXUOz8y4DG+xQ5rHXvfhc0ChENCEIv7MW?= =?us-ascii?Q?k7GVoBMRqmU2Mw5mUqxqwU28Z13WeSSJ4z5Eava/b/aCeJLbHGC5UH037ODG?= =?us-ascii?Q?S2AAimxRK/45izLSJYxB8b/3TlmLjUsHKvH3SQ0BQgFL2GjiyX2enc4j9Jfs?= =?us-ascii?Q?TrPmV2uJ5EKH08oCr9kXrSNgbttDiuxpB13TWIxMyC5OOf7ZV+7u8RsFBGGa?= =?us-ascii?Q?LLtCFwlRmv1ZmXahPFclHnErzFoQs5Z+BCQDY573z2UCezJY2sBDrj2zzaIm?= =?us-ascii?Q?WVa+svNvhTxYmiIxxZ1DUuqLDBM9b2jDjAKf7eWUbWK4OQ1U6T4IJOZmgYnz?= =?us-ascii?Q?ixic4cB2be1SBicvB/M5t+m5ZMj8BP+qDdsP6UlZcBOFBjDtF9Sn+uao0ZGm?= =?us-ascii?Q?bHPI47PNyzbRuuZImuS5dmqhFOfBcXuMRmedvkN27xBSpzX2KVve8ezt/Df+?= =?us-ascii?Q?+zSJNX+lr7Urufm13LukDvx4JJGQcKX3DPSgwgygl1Nh8KbB1kMgXkF8j2PP?= =?us-ascii?Q?dggtmJIc+7n2Ws9gWwFCtnfMw81ECorOyrhZ1vXXPJfyEnWSCS9GwjBliPUH?= =?us-ascii?Q?nI7G+Bo9RMEAD36BdkBHWhGDBlA2xysgayHp9xo4oTKoS0AGcSeF62dycc/N?= =?us-ascii?Q?Tv3SbpuYg8Mrz1q4jcjj2BntDMgdmI+FIpEq1myI2mawD68Wpu6DIE9ZaWCW?= =?us-ascii?Q?aGqrzz24rV/51UWyDY/U7U2xmQ5R4+kcrBFYEOF+9T7j3uQIBvEHij4QENOm?= =?us-ascii?Q?cpkVZNyfGuCu0kQMzU0kohiPG/JiMGYnIz2pkFFA9/JTBbzrQWz9oy70LcKU?= =?us-ascii?Q?QazpEWSTRjMQ3NDMkULQtcJymrs+UPjuLM8+3q2LQNmaAr8lBWYCjbY+Uj+n?= =?us-ascii?Q?ORxU+tMhz9HM0dEKXWoSw8vw6CWy2yA=3D?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: f9b041f7-210f-4763-5cdc-08da245682b8 X-MS-Exchange-CrossTenant-AuthSource: SL2PR06MB3082.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Apr 2022 11:52:00.7285 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SA+UHYOF/7pkZn5FpAc8rS2St6JkgdsXCUVOq2OVx/TK4dtqazv0NPORav7G7Zu+KhEEEc5aDOTvou4PormZMw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB3726 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Wang Qing When ACPI is not enabled, we can get cache topolopy from DT like: * cpu0: cpu@000 { * next-level-cache =3D <&L2_1>; * L2_1: l2-cache { * compatible =3D "cache"; * next-level-cache =3D <&L3_1>; * }; * L3_1: l3-cache { * compatible =3D "cache"; * }; * }; * * cpu1: cpu@001 { * next-level-cache =3D <&L2_1>; * }; * ... * }; cache_topology[] hold the pointer describing by "next-level-cache",=20 which can describe the cache topology of every level. MAX_CACHE_LEVEL is strictly corresponding to the cache level from L2. V2: make function name more sense Signed-off-by: Wang Qing --- drivers/base/arch_topology.c | 47 ++++++++++++++++++++++++++++++++++- include/linux/arch_topology.h | 3 +++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c index 1d6636ebaac5..46e84ce2ec0c 100644 --- a/drivers/base/arch_topology.c +++ b/drivers/base/arch_topology.c @@ -480,8 +480,10 @@ static int __init get_cpu_for_node(struct device_node = *node) return -1; =20 cpu =3D of_cpu_node_to_id(cpu_node); - if (cpu >=3D 0) + if (cpu >=3D 0) { topology_parse_cpu_capacity(cpu_node, cpu); + topology_parse_cpu_caches(cpu_node, cpu); + } else pr_info("CPU node for %pOF exist but the possible cpu range is :%*pbl\n", cpu_node, cpumask_pr_args(cpu_possible_mask)); @@ -647,6 +649,49 @@ static int __init parse_dt_topology(void) } #endif =20 +/* + * cpu cache topology table + */ +#define MAX_CACHE_LEVEL 7 +static struct device_node *cache_topology[NR_CPUS][MAX_CACHE_LEVEL]; + +void topology_parse_cpu_caches(struct device_node *cpu_node, int cpu) +{ + struct device_node *node_cache =3D cpu_node; + int level =3D 0; + + while (level < MAX_CACHE_LEVEL) { + node_cache =3D of_parse_phandle(node_cache, "next-level-cache", 0); + if (!node_cache) + break; + + cache_topology[cpu][level++] =3D node_cache; + } +} + +/* + * find the largest subset of the shared cache in the range of cpu_mask + */ +void find_subset_of_share_cache(const struct cpumask *cpu_mask, int cpu, + struct cpumask *sc_mask) +{ + int cache_level, cpu_id; + + for (cache_level =3D MAX_CACHE_LEVEL - 1; cache_level >=3D 0; cache_level= --) { + if (!cache_topology[cpu][cache_level]) + continue; + + cpumask_clear(sc_mask); + for (cpu_id =3D 0; cpu_id < NR_CPUS; cpu_id++) { + if (cache_topology[cpu][cache_level] =3D=3D cache_topology[cpu_id][cach= e_level]) + cpumask_set_cpu(cpu_id, sc_mask); + } + + if (cpumask_subset(sc_mask, cpu_mask)) + break; + } +} + /* * cpu topology table */ diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h index 58cbe18d825c..c6ed727e453c 100644 --- a/include/linux/arch_topology.h +++ b/include/linux/arch_topology.h @@ -93,6 +93,9 @@ void update_siblings_masks(unsigned int cpu); void remove_cpu_topology(unsigned int cpuid); void reset_cpu_topology(void); int parse_acpi_topology(void); +void topology_parse_cpu_caches(struct device_node *cpu_node, int cpu); +void find_subset_of_share_cache(const struct cpumask *cpu_mask, int cpu, + struct cpumask *sc_mask); #endif =20 #endif /* _LINUX_ARCH_TOPOLOGY_H_ */ --=20 2.7.4 From nobody Sun May 10 21:55:56 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89D39C433EF for ; Fri, 22 Apr 2022 11:52:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1447208AbiDVLzG (ORCPT ); Fri, 22 Apr 2022 07:55:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54544 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1447196AbiDVLy6 (ORCPT ); Fri, 22 Apr 2022 07:54:58 -0400 Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2121.outbound.protection.outlook.com [40.107.215.121]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A86105641F for ; Fri, 22 Apr 2022 04:52:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JqsCaHp2OBWCdcwMjkh09TsWeyk37B+vmDf38XF+z8kWHUeX4w2ZA8FWkk/0FTRixIT6IuBNZNDLHy3lOlLMiy+4/o60KvamyCnQO04CSIVE0BqtTqsPJr6ZTEG2GqyGXR30fK9rqmthKJmTQ0SzEuiGGc0moHd7yazifWwJrv8JnuQ+AOGblUQfe8nC60UeV1bI2cHj2Msaea7ylb0L1sStmFrQxYOgNsqXPuhbzGnrhVbnhd+35QdL2Plt8qxeb05TrX12JO0QPFgK82QOzJrXRU0wG6migniz/PQxRYdKMU/jZMdH3z1eqClEeDTM0f6PLwAvP/Hqg4l9xQkrGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=f6QS0U4jgsSOMikwWUACcBgnhQDtLsNbVyxmKwhbhQ4=; b=A2PUrCBb/k5Nkj5YpK8hJ8CGasl7Ea70CPfBqpA6iBRyxfucuN3s56YHC0r/qC3tfAv8LoRjjV3M0YQM7v30ef1ggKxWvSV3/O0UDqYYbPi7Z+rhlkNPFus1l3DFifsrWN8CAgAn/WgF67DGs2Yk3I5x1AWKLn6wxF9/UKcoFo2iHaHkomhbK7om3MtKvSBkv6BQjFkltqgsuw8cl4ufYBmncyPS1XcH0Hyv4oSeE4i43Xh4cxkvqP0CtTb5Y6kXEp/E7xP8LwfuWXA45C9h0bAlGUSXjbfCG+lDFOn6QfnE7FKNMdi9kuFoLMSmydXMtoiI2VkkeLlXoj7OaAn1fQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo0.onmicrosoft.com; s=selector2-vivo0-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f6QS0U4jgsSOMikwWUACcBgnhQDtLsNbVyxmKwhbhQ4=; b=i0IcPEyu5IJoD43HGhmHiINjLtxAK45ZHLXKYNKYuLnR9JZ5np/tTLjfFwwgYdXQgvIMnb/3UO/9uwi9w+OUZxz4UgwnjzAu/VsHu/5yRWBCYGkepD/FCXCLgoHh6++31RwNMYJBYD6R7Q14S3q5QZaU47iLMf0bQ9d42ZkGabA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from SL2PR06MB3082.apcprd06.prod.outlook.com (2603:1096:100:37::17) by SG2PR06MB3726.apcprd06.prod.outlook.com (2603:1096:4:d2::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5164.20; Fri, 22 Apr 2022 11:52:03 +0000 Received: from SL2PR06MB3082.apcprd06.prod.outlook.com ([fe80::e468:c298:cfe5:84fc]) by SL2PR06MB3082.apcprd06.prod.outlook.com ([fe80::e468:c298:cfe5:84fc%6]) with mapi id 15.20.5186.015; Fri, 22 Apr 2022 11:52:03 +0000 From: Qing Wang To: Catalin Marinas , Will Deacon , Sudeep Holla , Greg Kroah-Hartman , "Rafael J. Wysocki" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: vincent.guittot@linaro.org, dietmar.eggemann@arm.com, Wang Qing Subject: [PATCH V2 2/2] arm64: Add complex scheduler level for arm64 Date: Fri, 22 Apr 2022 04:51:26 -0700 Message-Id: <1650628289-67716-3-git-send-email-wangqing@vivo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1650628289-67716-1-git-send-email-wangqing@vivo.com> References: <1650628289-67716-1-git-send-email-wangqing@vivo.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: SG2PR03CA0112.apcprd03.prod.outlook.com (2603:1096:4:91::16) To SL2PR06MB3082.apcprd06.prod.outlook.com (2603:1096:100:37::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9d699879-2e87-4249-7fb8-08da24568446 X-MS-TrafficTypeDiagnostic: SG2PR06MB3726:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RlGqHblR3PSU9UE0GsY0Q2Dld9Cm4ljqBCUX31tunixqwqOJpgzCvEA+IwvrC+xPRLYGOJKM4HxVTqe4G4Npn+Tx9fyUwSLGS7W9hw7vA9+tcjsq4xJIegoZZRnI26JwPKL1vBn24iRMlKVCjLcmFPoCJVVELGa35h3bxByebUn0M3JFQHmHmS13i+b2fVeSjy6jdjQGUqwR/YaHF065YZ6e+oB0A875TNu4MX6nJJHoUWkww+AmPf8BiKUWwqdt1rm6XJURtJboCPltQDbfrv5GJCMJhREcp/e/7VRbHLNFosVV/Gc/NS6fr35y/J8Sq9nlWpgvtJ3ydVpvkGMcvpl53IISL2pYCqBKa+jXV8qY8L1TI1YUXJ81glNFqWv+KQHsQPrBNZvU+/zehYrb2gVPrqXFDZIfLN3v/lJrogKk2TsVbtILTsDnxgSMk1f+mz1dc4dIUgAVw1j0jv7hPPP8IwPZSTfVnumh5CawjWfLSMdsZT55scKOQaVpddesTg/lmUJPYXeSVimO0QeCHPH+F1rQybkE4XND7lmc4lDY2IXIPuSLKRjY7Onffe/J0+Mf7+zEf1XjkmIlQlZG6eWW661jCWnyTnsuebqfwYrTIURBi8CBSm+Qf9Z75StS00LHXrAMCt0mKF7UXaRFszWXGkrf4EAvRoOnykL+I2ZoToQcRUoOwwN8w/CsAbUsdx5cqGX0P7GUbbHmsAbo2w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SL2PR06MB3082.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(186003)(107886003)(66946007)(83380400001)(5660300002)(316002)(26005)(6666004)(6506007)(6512007)(6486002)(52116002)(508600001)(36756003)(66556008)(66476007)(86362001)(2616005)(110136005)(8936002)(8676002)(38100700002)(38350700002)(2906002)(4326008);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RUZ2WEhBb1liTFJyM29Bcko0Y1lIRXlqR0RoS0FYSDhFSG5lUVJIRnVhSEZj?= =?utf-8?B?bWVuQjhsOUFaSHRYRk9kbWtpUVl5aGR0Z0xHUEpoZW4wNWtPWEVWM1lzK2tv?= =?utf-8?B?MFlMenBWTjNIeDY4djZLNno5b0gxREdBZWpFb2ZxdXpvbVhLV3Nramd4dFI1?= =?utf-8?B?aEJHelREcXN1WThtUVpEOUxzeHg3ME1kelB6Um1XSENkSEQ4THprc0wyWXJC?= =?utf-8?B?QWFBOFBLd0NEY0c4L2srakFTbXBybzFHU0ZtdWk0Vkx1T280dFVaeEp2ak9t?= =?utf-8?B?dE1KdkI5bFgrQ29EMDFBc0VyQkhKT1h1d21RU3N0YTQycWx0NVJhUnVGaGQ3?= =?utf-8?B?bEtZMFl0ZHZxM2l3L3JLUWNHRlNSWnBJVVNFNFZ2WG9UWWk3dE5YZyt6TmNE?= =?utf-8?B?SUtwUllmN2lNOThvbGJwY3czUlFrb2E2TzROUEtGUkxWb3d0M1dlZUZnc2cr?= =?utf-8?B?WWdTQnFXQkxDdU1iODkvWlVEYSs1YTVYQjlLOGsxUWRnanhFMy8xM2ZVRXBH?= =?utf-8?B?enFHcE1GSGU4ZU96S3ArWWhBbXA2dTFZRCt6K3dvL3Vqb252Q1MwTWFpdFIv?= =?utf-8?B?QUl6dTBxREc4WEZ3cXdWUC9HWmFMR25JaFU0MnlUUGZJVFJKMEJyOFlBWDQ5?= =?utf-8?B?QUFzWmtDaUdrb1lYcE9MQkZvNVRsVGpucDM0dzJTcUNiT3RHMlh3QWJnTXlG?= =?utf-8?B?bFJNTytiNURiR2U3dWtOblp5V1d1aDJCUHNsVFJwY1NmdDk4S1N0Q1RtSE5J?= =?utf-8?B?YktGbFFhMzM3Tjl3eGlTUThJKzdsWDg4bk5taEN0M2RoYXRaVXpBYTY0WE95?= =?utf-8?B?am5jcTVRNnhyWU5uYzJtb1BSOTVLaDliYk1RL1VHQXdXU3BYeXlBZFpyUFl4?= =?utf-8?B?aFllUnQzckh4MkRUejRpWXd3QjFXS014OXN2aUhRZ1lxU0JsNzlGMmdvcGtt?= =?utf-8?B?RHJyZVMrVGJ6QnZ5bHNCYUxNMEpqMWFacUttNTJtWHBiU1BPV3ZtanR3R0hS?= =?utf-8?B?M3NSUFJsNms4RGJINTJ4VUJoaEpSNlZEbVVLaWc5dHhMOVh3MjlQRXYyNTYw?= =?utf-8?B?WUZXQytiWloyV0ZLVnhOVWgyTXZCUmErK0lVV05DZFpXM2txNWltZEl3QXZV?= =?utf-8?B?RjFWYkpyd29MNHVmS3duRndwV0ltVHRZV2tkaTlFaHRpY3k4OFloaVhxSnBx?= =?utf-8?B?U2tYaGJVZ1JMV3RTQ0h6VFl1UncyVktnSnVTNUhYMWpnZncrVnUyUzBHOGVo?= =?utf-8?B?VXBSYjRkSDJrelhwbHh5QjViQzNKU1dzWElyZmNHbGdYdGJNSTJDQW1rZWht?= =?utf-8?B?V0Zwdzk2TUpXV2tKamF3Tk54N0pEZ1BmZjBIQ2tTTCtxSDFmVWJpeVVjY1dR?= =?utf-8?B?dlZWWHNGRzhiTDdDUmV2UWZNTXA2WHdhS2Yxc2NqNHFGVGIrLzBxck5uTysr?= =?utf-8?B?NU5ZaFRJUERweG55eG5ieVhEdXlzem96NkZnQ1BCSjJSSVdXVUo2SWhHVXUr?= =?utf-8?B?S1lxcUR6bUtFRm1ZY1F6enJtVmhhYVJxMm1Hc1pWUTFFT0pkNS8vUHduSkZU?= =?utf-8?B?WXArSzVoMnRrbENaMDdEbEVrbnFVSXd4UzJGU1VlU0x4c3ZZYnZ5alNaZTJN?= =?utf-8?B?bXo1ZFJHdm1sdnpoRzBpdkN4YytmdGxyRHpUTmRUZmRWd3A2aG12N0YwMm1P?= =?utf-8?B?NFdmOVBURmRjcEgwQUxrOE95TEo4SVFhc3JzR1BENHNFa0k4T3JZV2prUXlG?= =?utf-8?B?U1Iyc1l2SDVUdmlHcnEzQUoxZmhjOGhUUGRjNWIwNXladDRqVG1NRllWcXox?= =?utf-8?B?aExUQjluSmhoWEsyeE5tZU5VTGhKdFZmZ0RQbU54VmY4eHNTTk4xSURRTnZI?= =?utf-8?B?cWhRcUxXWm8yZVNIRTZJN1l0bjZIWUQwOE52dlJYZHVhdU1IZDdFK0JWSGhJ?= =?utf-8?B?citCaGw3dWdid25kWVlIalNLRjFBWXdGNjk4cE1VMkNqWGVQRHdWdGVQM1cy?= =?utf-8?B?UjVvLzFPZDROcUk5QXlTUHhyaHBDb0NKL012VjFwakVmTFczSUtIejVyQkVK?= =?utf-8?B?L0VFR1Q0T09nekdiNlY1cEdJcGZSWmk3ZDRXcDF0NlpxWDFFSjNRWkZWKzdI?= =?utf-8?B?eDVrWVRsVE9kQ0h2d0l1Q3ZxSzhYZ0xTbFFmTGp5RHduS1lBQm9HU0RDUCt3?= =?utf-8?B?MHJUSFhFUm1ZVmgxT0ZUYURQTWlDTzNvQWNUdGRNbDR6WS94NkVIRHV1c1pv?= =?utf-8?B?bml4WEwvb2tvUHE5bmp4Q0RmY2lGd0I5VmJDRU9jYnc3T1ViaUs3Y0NCZkJR?= =?utf-8?B?ajIzUXVpVjBXYStEbDkrMENrK01JN1kreERkazZzREV2L29WVUQzOU56MXNX?= =?utf-8?Q?4Zf9CMExVEUInZEY=3D?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9d699879-2e87-4249-7fb8-08da24568446 X-MS-Exchange-CrossTenant-AuthSource: SL2PR06MB3082.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Apr 2022 11:52:03.3065 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: YRR9H59bvSvLrbKkZwwdqDYkqlKFvaWVWudefc+eY9zQAWYKmDdpwYFAV8bJJ524CIbSf4Zii8P/qPvVD3QNrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SG2PR06MB3726 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wang Qing The DSU-110 DynamIQ=E2=84=A2 cluster supports blocks that are called comple= xes which contain up to two cores of the same type and some shared logic. Sharing some logic between the cores can make a complex area efficient. This patch adds complex level for complexs and automatically enables the load balance among complexs. It will directly benefit a lot of workload which loves more resources such as memory bandwidth, caches. Testing has been done with Stream benchmark: 8threads stream (2 little cores * 2(complex) + 3 medium cores + 1 big core) stream stream w/o patch w/ patch MB/sec copy 37579.2 ( 0.00%) 39127.3 ( 4.12%) MB/sec scale 38261.1 ( 0.00%) 39195.4 ( 2.44%) MB/sec add 39497.0 ( 0.00%) 41101.5 ( 4.06%) MB/sec triad 39885.6 ( 0.00%) 40772.7 ( 2.22%) And in order to support this features, we defined arm64_topology. V2: fix commit log and loop more Signed-off-by: Wang Qing Reported-by: kernel test robot --- arch/arm64/Kconfig | 13 +++++++++++ arch/arm64/kernel/smp.c | 48 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index edbe035cb0e3..4063de8c6153 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -1207,6 +1207,19 @@ config SCHED_CLUSTER by sharing mid-level caches, last-level cache tags or internal busses. =20 +config SCHED_COMPLEX + bool "Complex scheduler support" + help + DSU supports blocks that are called complexes which contain up to + two cores of the same type and some shared logic. Sharing some logic + between the cores can make a complex area efficient. + + Complex also can be considered as a shared cache group smaller + than cluster. + + Complex scheduler support improves the CPU scheduler's decision + making when dealing with machines that have complexs of CPUs. + config SCHED_SMT bool "SMT scheduler support" help diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index 3b46041f2b97..526765112146 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -57,6 +58,10 @@ DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number); EXPORT_PER_CPU_SYMBOL(cpu_number); =20 +#ifdef SCHED_COMPLEX +DEFINE_PER_CPU_READ_MOSTLY(cpumask_t, cpu_complex_map); +#endif + /* * as from 2.5, kernels no longer have an init_tasks structure * so we need some other way of telling a new secondary core @@ -715,6 +720,47 @@ void __init smp_init_cpus(void) } } =20 +#ifdef SCHED_COMPLEX +static int arm64_complex_flags(void) +{ + return SD_SHARE_PKG_RESOURCES; +} + +const struct cpumask *arm64_complex_mask(int cpu) +{ + const struct cpumask *core_mask =3D cpu_cpu_mask(cpu); + + /* Find the smaller shared cache level than clustergroup and coregroup*/ +#ifdef CONFIG_SCHED_MC + core_mask =3D cpu_coregroup_mask(cpu); +#endif +#ifdef CONFIG_SCHED_CLUSTER + core_mask =3D cpu_clustergroup_mask(cpu); +#endif + + find_subset_of_share_cache(core_mask, cpu, &per_cpu(cpu_complex_map, cpu)= ); + + return &per_cpu(cpu_complex_map, cpu); +} +#endif + +static struct sched_domain_topology_level arm64_topology[] =3D { +#ifdef CONFIG_SCHED_SMT + { cpu_smt_mask, cpu_smt_flags, SD_INIT_NAME(SMT) }, +#endif +#ifdef CONFIG_SCHED_COMPLEX + { arm64_complex_mask, arm64_complex_flags, SD_INIT_NAME(CPL) }, +#endif +#ifdef CONFIG_SCHED_CLUSTER + { cpu_clustergroup_mask, cpu_cluster_flags, SD_INIT_NAME(CLS) }, +#endif +#ifdef CONFIG_SCHED_MC + { cpu_coregroup_mask, cpu_core_flags, SD_INIT_NAME(MC) }, +#endif + { cpu_cpu_mask, SD_INIT_NAME(DIE) }, + { NULL, }, +}; + void __init smp_prepare_cpus(unsigned int max_cpus) { const struct cpu_operations *ops; @@ -723,9 +769,9 @@ void __init smp_prepare_cpus(unsigned int max_cpus) unsigned int this_cpu; =20 init_cpu_topology(); - this_cpu =3D smp_processor_id(); store_cpu_topology(this_cpu); + set_sched_topology(arm64_topology); numa_store_cpu_info(this_cpu); numa_add_cpu(this_cpu); =20 --=20 2.7.4