From mboxrd@z Thu Jan 1 00:00:00 1970 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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DE3D6C44508 for ; Wed, 15 Jul 2026 18:05:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-Type: Content-Transfer-Encoding:References:In-Reply-To:Message-ID:Date:Subject:Cc: To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=O95DtUyWMD06oTaLiZwi3Wfcr5BYuVUIdsRaM8li0Hc=; b=ENqonjFI56ptvw9kvh3x5HOTRs 1jPiEbS/sBhX1zlTULD41y8kw/XO4W4F1LjNhIns6GMWRI/Os9+H1TP/f8NjK5WpF3NkiL60zFgg1 nZpJW5cIAQxJT/iWvlJd7X1oUqxgP8uO8NwBAJ+vKnQibCxbL6OO9Qh6ut0cTbbZlflCBLNY68reN lNe2sRjvjjpRANToDIIE+bMKE5ZDFiKrkH+05RjqZ9y9CUNvPRHTzq5j39mM6fzsPbS7BdKN04y8K l8Q7c8wC721iZ1SH4XaDEnCNDSW2eI0PPH6vtJTdQ+Nxmrer5pBwIqUIfQxk+IOswmnsMygr52em7 wNSBZ1gw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wk3zU-0000000FcLB-0sZf; Wed, 15 Jul 2026 18:05:52 +0000 Received: from mail-centralusazon11020137.outbound.protection.outlook.com ([52.101.61.137] helo=DM1PR04CU001.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wk3zN-0000000FcHk-0kI3 for linux-arm-kernel@lists.infradead.org; Wed, 15 Jul 2026 18:05:46 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=babKOyGQQMgbxo91XOOC/3fzWzL/e6dYwH4OmlIYcjd4h/s67zWFZtf/XkHoMVnzmKZ3XQSQ9LfT/T038TJ3TkO4MbsAY9TmbFhxUnR8kEpLpm0xTFQvDuz+LpY/m6W7+Yk6QpY6Wb6psxAw5IqOYnee8zLPG12RtAczSJelGUt+PWzw82v4OlQMj9obDaX4OpS/NXM3LUGjm5o8RCugRlfAUsbFy55SuWfMU/bNhUDy+sMkkOiDiJs2Cd2Wf/QVG4hBktRbvrtHldIrHM6qhq8L+8cENtDsqEeFiBosj8ljwoDk90FQ/8YPVcPj45Q68/4sxs356MiRoUXfV+yCew== 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=O95DtUyWMD06oTaLiZwi3Wfcr5BYuVUIdsRaM8li0Hc=; b=toMkkY8IA7+fyKfc5Ue3iVi0IK1A1gCKdgveP8pOCEUFpT+JQYDSrHPBNcOA1J+GSIw0WLCEecu1bpjSaFfvucDewJe8dj0ZocB+ExXCrTNdaviyWGngz/kwveoZC+5nTsbiammauj3U2KiwHg7twYff6anIb2QtOJkiWNioslU5zLoTYFSuiWcJqJKEJq5CmpxVCt0ukdEmxCht+AcJlqpyf1tLvJtoXjthw/F/TPVV6I9wa9TgpmTOcJqL30oHDW6SpJ2wuCK9crqoWXQFrBCer9aTm9I4FfUw/POzi/JVMiUlEsb79JlmGeBgAov/5jVTf6aJxuEZ+6xNkQ6MUQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=os.amperecomputing.com; dmarc=pass action=none header.from=os.amperecomputing.com; dkim=pass header.d=os.amperecomputing.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=os.amperecomputing.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=O95DtUyWMD06oTaLiZwi3Wfcr5BYuVUIdsRaM8li0Hc=; b=bm6EncYmjxMGikeRVTIW6ZzqHaAP8h8ZSmZr2Zkdyie3+fiWgymGI7rWyncl0VV2Z1pFph7T9HatiboOajO+wvFYnfTwauJSEQPPnIjbZvg0VaNd6T3vHCTMK2Aix0kOg3y8YodILfX9+Ggc4P6T+Rx04QM3EpquOjwX3HTBRno= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=os.amperecomputing.com; Received: from CH0PR01MB6873.prod.exchangelabs.com (2603:10b6:610:112::22) by SJ0PR01MB6207.prod.exchangelabs.com (2603:10b6:a03:29d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.223.12; Wed, 15 Jul 2026 18:05:33 +0000 Received: from CH0PR01MB6873.prod.exchangelabs.com ([fe80::46eb:64a3:667c:c1a0]) by CH0PR01MB6873.prod.exchangelabs.com ([fe80::46eb:64a3:667c:c1a0%3]) with mapi id 15.21.0223.008; Wed, 15 Jul 2026 18:05:33 +0000 From: Yang Shi To: cl@gentwo.org, dennis@kernel.org, tj@kernel.org, urezki@gmail.com, catalin.marinas@arm.com, will@kernel.org, ryan.roberts@arm.com, david@kernel.org, akpm@linux-foundation.org, hca@linux.ibm.com, gor@linux.ibm.com, agordeev@linux.ibm.com Cc: yang@os.amperecomputing.com, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/16] drivers: arch_numa: move percpu set up code to arch Date: Wed, 15 Jul 2026 11:04:03 -0700 Message-ID: <20260715180455.515692-2-yang@os.amperecomputing.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260715180455.515692-1-yang@os.amperecomputing.com> References: <20260715180455.515692-1-yang@os.amperecomputing.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: CYZPR05CA0010.namprd05.prod.outlook.com (2603:10b6:930:89::18) To CH0PR01MB6873.prod.exchangelabs.com (2603:10b6:610:112::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH0PR01MB6873:EE_|SJ0PR01MB6207:EE_ X-MS-Office365-Filtering-Correlation-Id: 77476de8-d454-4c8f-99ad-08dee29ba9df X-MS-Exchange-AtpMessageProperties: SA X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|376014|23010399003|1800799024|366016|56012099006|11063799006|55112099003|18002099003|22082099003|10067099003|921020; X-Microsoft-Antispam-Message-Info: D2hNM/4PizZy/K7QwQIL5esPR4UJ0y8ULXnNrJ6lqj0UPwTAK2p4/nDyiKiXHYDsYy2YlIMCj3WgwHa2qn/o5TJ4tYhOGaZE0OZZbBI6TpwmRr8IXZYJaZmXgfJcoDbOdKukIzF3JpL6mHxc1d0ON3fk2x4nIqDSufX8cTIcIGrsy8e/8o1nX+LUXrFH7ONB8DRpP2HVUoQLXBwPJkZEl3NkVVvsf0gpLH587TrWxciKOOSJ16wOH4JB9rKjvdqu/dqThSPRDO0FuNR2oWcPWZZRIsYwgLmhE+YsiSBm+WUVaXE8102dumKXzPp3WDZVpKfmX48kQQY67r2MYvQ2yuVA9AGYLbbKVBhioM3eepT+L3k5uIG7zjL7jxmSOMsjsqIq064JRgGCT3vrtemdZth8+87ZzAlkRq0T5htlIYhBhSBlx6FjJ56iBoNkRoCRJztBzr5urGsZ1oMkHtiucMx7by1pWWqoexZWijmrtZUZzeVIgWQZvvlECJNC4tePtPX+hSRkMXkp/U3Sc0VtxBe+niNH5CvVxPMno3cm1LJJcu3+yQ4H7CrQwX/bpZe5Eb4S7d6Sfvs2UX2VDTzlCE4Nt1Sail2zTOGo0p1BrC9uFf5qft3AlI0iaFzH2UCtUrBNlNj5MQkj1Mxm3v6ts5z8XdUlACsnU0oO3L85nFNp7gHQmUIBOActflC35Eflb6IbSc5q8y5fGrawAnqKQg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH0PR01MB6873.prod.exchangelabs.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(23010399003)(1800799024)(366016)(56012099006)(11063799006)(55112099003)(18002099003)(22082099003)(10067099003)(921020);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?S4MBncjgk2i5Y5IbCFgPPDjipknOA+BYcWeN5SDMMnHlh4og2D3OK23bN9MF?= =?us-ascii?Q?k7wBWAcxU4Q6wdgCkb11+kbN25Bd3Mb3e8MNEo4sskMXkhoy93FgKhSX/eyN?= =?us-ascii?Q?rALLy7EDxKlMq+jJe8f4FhvGED508PnGpql8QYYIUD8OahH66GyNxM8QlLO/?= =?us-ascii?Q?ijlcr0gXlPkm8fLOEtmgs2OtGE7iEfWES4ZAodiv4CLJ118hN8aaYqXrOI3q?= =?us-ascii?Q?m/j8lLjCgYic+gGTGj3T2pTBPVLss9K0RuucO6e3S+Wx9XA+e+wudtIbLgc7?= =?us-ascii?Q?nlTJvPoNADlV9xcihQrO1jahlYpbve2iC5lMFY7b4NyDufhTMbXjPMKtibTC?= =?us-ascii?Q?AaQG8Qr/3B9ia3VfvAOWN7pOK0yRpxdeM8tH4OS0DXcGSspvBNVEK0r/k9S1?= =?us-ascii?Q?v/aUGEJvs6W9ZYb9H0f5Oya3+DVV5NU4uQL0NqaSyJWPZWTdQpr2Usqtr7FE?= =?us-ascii?Q?Q/irTxGbiPyiUsZL4wJGhsY8feJzuOl4q1d3qSwEmprlg+7+nLJNHKjwcOS0?= =?us-ascii?Q?c4Sf7tsCmZPjtP9vNGCekuOfUzc/q3NfKWu2nzh7MG338ZzreUbzjDyJNZV1?= =?us-ascii?Q?rwiMwuu+4eJD0yNSfEtaP2WC6GJm4e/92Ug4KgITI044y3vkf51VTve97Y6A?= =?us-ascii?Q?GVCcUtQDIBHex5jU1olGarWSnMnEDOv3yoorvGn6mdG4VS88NOHKNS/UuT0D?= =?us-ascii?Q?d4tbrpxOHlMTkGd0Ysnu6ukeQ8/WYI9GlRG7AgOk5f8ZkOgTDRdiwhmTPuQi?= =?us-ascii?Q?v6coX3pyvwm5uLZe1KXZ/i/gFj7HS3UT8H07kIRPEugQsksRc+DeIKlQPoAd?= =?us-ascii?Q?tiZGlj3Kvaa2rubdToLKZC/B4l6Hho/meDjpn4QB51ivp+1m3GbGjetzT4CY?= =?us-ascii?Q?D4s+efTOrOT9syCrvl0B3bDz2ik5W5TU9YL4B4syp9EM1pBz3GszP0FI5ezG?= =?us-ascii?Q?fkjSipmDF2P1gYtL9iGbkwc9QOBiX/8KyjjCmCnXFcf1sGwig3sjPepB+qMD?= =?us-ascii?Q?UwmQOPgQO31vz3I+vrnGU0NRD9yjmgPBlUBae9Vn06/f0vjk9GKuqoBlfam8?= =?us-ascii?Q?UjopD6SyHC7C49T4Ntze61uJNtYB3/G5HS7xXmsYx/AH62JlHkIznhc4Ay+y?= =?us-ascii?Q?r3X0sezXH/ITb7ubtjchebYN4pCIqWwk6bmSj9GXLvLm7P0xKlrQF/xtyg8N?= =?us-ascii?Q?53POyZ1lq5hA/Ay39VEx9GSXJyPmW3NcpD9JOWo1jTXLVAxfctIrLCg4IzHy?= =?us-ascii?Q?milpKUZVFCG3y+Bw9GIkoBYUfue9JHJqrU/tNgsNF2n0q6bLQtoEfYI6d993?= =?us-ascii?Q?3o+/RP1QcqVNOz1PrTrM4h5Wf2YAI0SDq+8TLU4D+pepFvDgNiqBbSJXCNFW?= =?us-ascii?Q?P8PrLXZyadSbGMTkP/QI0EMov/E3IvoTfnCo16QQo7s4GMketzDwqbmIDVRv?= =?us-ascii?Q?UK1ozbYXJMxv/Xk5DmD1mfWUrAHIzaPMwJ734O9HlNH+/cnzY9d5dK3UfKPV?= =?us-ascii?Q?lO6StnTObUrg2MHefoF5qGZ0PO4XjrB6lUoSrlzXNYHKTBfQT1b7O+16oXOq?= =?us-ascii?Q?ctsi/PYBEIWu3JZTbYyZ0TLxc3FojkJ40I6KqOMrQpbFJP9W7X7x+LJVUrT5?= =?us-ascii?Q?nHpx76QoBhaReEHGAsE2akQw7HkVsc9uQrZU41fwSeU4p4ttZek+GmaPv5rL?= =?us-ascii?Q?nMdTHdgHwpNP7NCWjkTj2NtQSEjJeSE7ZOaWTKNUkDqexg5Pxs4GDpeG+F4k?= =?us-ascii?Q?9WQC2HSbZY1LoUM8Gh0xynpQCKrbOHA=3D?= X-OriginatorOrg: os.amperecomputing.com X-MS-Exchange-CrossTenant-Network-Message-Id: 77476de8-d454-4c8f-99ad-08dee29ba9df X-MS-Exchange-CrossTenant-AuthSource: CH0PR01MB6873.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jul 2026 18:05:33.1955 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3bc2b170-fd94-476d-b0ce-4229bdc904a7 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: v+cyxQYtqolkkjEtSoewvPMy301RIW8VyQbWUztK0/zNolfj4iFIWFps6epSqn18Vmoi8l+z6HUQ3YtIPEppMcicrAd74SEy8LfY4TgHjXQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR01MB6207 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260715_110545_223345_C2D23D59 X-CRM114-Status: GOOD ( 15.91 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The following patches will need to modify it to set up local percpu area on arm64 so the generic code won't work anymore. ARM64 and RISCV are the only users, so move the code to their own kernel/smp.c file. We can't leave the generic code in arch_numa.c because both ARM64 and RISCV select CONFIG_GENERIC_ARCH_NUMA, so it will result in multiple definition problem. There is no functional change. Signed-off-by: Yang Shi --- arch/arm64/kernel/smp.c | 51 ++++++++++++++++++++++++++++++++++++++++ arch/riscv/kernel/smp.c | 51 ++++++++++++++++++++++++++++++++++++++++ drivers/base/arch_numa.c | 51 +--------------------------------------- 3 files changed, 103 insertions(+), 50 deletions(-) diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index d46022f72075..0dab4e9c97e4 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c @@ -819,6 +819,57 @@ void __init smp_prepare_cpus(unsigned int max_cpus) } } +#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA +extern int cpu_to_node_map[NR_CPUS]; + +unsigned long __per_cpu_offset[NR_CPUS] __read_mostly; +EXPORT_SYMBOL(__per_cpu_offset); + +int early_cpu_to_node(int cpu) +{ + return cpu_to_node_map[cpu]; +} + +static int __init pcpu_cpu_distance(unsigned int from, unsigned int to) +{ + return node_distance(early_cpu_to_node(from), early_cpu_to_node(to)); +} + +void __init setup_per_cpu_areas(void) +{ + unsigned long delta; + unsigned int cpu; + int rc = -EINVAL; + + if (pcpu_chosen_fc != PCPU_FC_PAGE) { + /* + * Always reserve area for module percpu variables. That's + * what the legacy allocator did. + */ + rc = pcpu_embed_first_chunk(PERCPU_MODULE_RESERVE, + PERCPU_DYNAMIC_RESERVE, PAGE_SIZE, + pcpu_cpu_distance, + early_cpu_to_node); +#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK + if (rc < 0) + pr_warn("PERCPU: %s allocator failed (%d), falling back to page size\n", + pcpu_fc_names[pcpu_chosen_fc], rc); +#endif + } + +#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK + if (rc < 0) + rc = pcpu_page_first_chunk(PERCPU_MODULE_RESERVE, early_cpu_to_node); +#endif + if (rc < 0) + panic("Failed to initialize percpu areas (err=%d).", rc); + + delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start; + for_each_possible_cpu(cpu) + __per_cpu_offset[cpu] = delta + pcpu_unit_offsets[cpu]; +} +#endif + static const char *ipi_types[MAX_IPI] __tracepoint_string = { [IPI_RESCHEDULE] = "Rescheduling interrupts", [IPI_CALL_FUNC] = "Function call interrupts", diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c index fa66f9c97d74..d420ff9dcf4f 100644 --- a/arch/riscv/kernel/smp.c +++ b/arch/riscv/kernel/smp.c @@ -364,3 +364,54 @@ void kgdb_roundup_cpus(void) } } #endif + +#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA +extern int cpu_to_node_map[NR_CPUS]; + +unsigned long __per_cpu_offset[NR_CPUS] __read_mostly; +EXPORT_SYMBOL(__per_cpu_offset); + +int early_cpu_to_node(int cpu) +{ + return cpu_to_node_map[cpu]; +} + +static int __init pcpu_cpu_distance(unsigned int from, unsigned int to) +{ + return node_distance(early_cpu_to_node(from), early_cpu_to_node(to)); +} + +void __init setup_per_cpu_areas(void) +{ + unsigned long delta; + unsigned int cpu; + int rc = -EINVAL; + + if (pcpu_chosen_fc != PCPU_FC_PAGE) { + /* + * Always reserve area for module percpu variables. That's + * what the legacy allocator did. + */ + rc = pcpu_embed_first_chunk(PERCPU_MODULE_RESERVE, + PERCPU_DYNAMIC_RESERVE, PAGE_SIZE, + pcpu_cpu_distance, + early_cpu_to_node); +#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK + if (rc < 0) + pr_warn("PERCPU: %s allocator failed (%d), falling back to page size\n", + pcpu_fc_names[pcpu_chosen_fc], rc); +#endif + } + +#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK + if (rc < 0) + rc = pcpu_page_first_chunk(PERCPU_MODULE_RESERVE, early_cpu_to_node); +#endif + if (rc < 0) + panic("Failed to initialize percpu areas (err=%d).", rc); + + delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start; + for_each_possible_cpu(cpu) + __per_cpu_offset[cpu] = delta + pcpu_unit_offsets[cpu]; +} +#endif diff --git a/drivers/base/arch_numa.c b/drivers/base/arch_numa.c index c99f2ab105e5..b3b91ceed6a9 100644 --- a/drivers/base/arch_numa.c +++ b/drivers/base/arch_numa.c @@ -16,7 +16,7 @@ #include -static int cpu_to_node_map[NR_CPUS] = { [0 ... NR_CPUS-1] = NUMA_NO_NODE }; +int cpu_to_node_map[NR_CPUS] = { [0 ... NR_CPUS-1] = NUMA_NO_NODE }; bool numa_off; @@ -140,55 +140,6 @@ void __init early_map_cpu_to_node(unsigned int cpu, int nid) set_cpu_numa_node(cpu, nid); } -#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA -unsigned long __per_cpu_offset[NR_CPUS] __read_mostly; -EXPORT_SYMBOL(__per_cpu_offset); - -int early_cpu_to_node(int cpu) -{ - return cpu_to_node_map[cpu]; -} - -static int __init pcpu_cpu_distance(unsigned int from, unsigned int to) -{ - return node_distance(early_cpu_to_node(from), early_cpu_to_node(to)); -} - -void __init setup_per_cpu_areas(void) -{ - unsigned long delta; - unsigned int cpu; - int rc = -EINVAL; - - if (pcpu_chosen_fc != PCPU_FC_PAGE) { - /* - * Always reserve area for module percpu variables. That's - * what the legacy allocator did. - */ - rc = pcpu_embed_first_chunk(PERCPU_MODULE_RESERVE, - PERCPU_DYNAMIC_RESERVE, PAGE_SIZE, - pcpu_cpu_distance, - early_cpu_to_node); -#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK - if (rc < 0) - pr_warn("PERCPU: %s allocator failed (%d), falling back to page size\n", - pcpu_fc_names[pcpu_chosen_fc], rc); -#endif - } - -#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK - if (rc < 0) - rc = pcpu_page_first_chunk(PERCPU_MODULE_RESERVE, early_cpu_to_node); -#endif - if (rc < 0) - panic("Failed to initialize percpu areas (err=%d).", rc); - - delta = (unsigned long)pcpu_base_addr - (unsigned long)__per_cpu_start; - for_each_possible_cpu(cpu) - __per_cpu_offset[cpu] = delta + pcpu_unit_offsets[cpu]; -} -#endif - /* * Initialize NODE_DATA for a node on the local memory */ -- 2.47.0