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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D4D7C02187 for ; Mon, 20 Jan 2025 02:16:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E6A3C280001; Sun, 19 Jan 2025 21:16:43 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E185D6B0088; Sun, 19 Jan 2025 21:16:43 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C923C280001; Sun, 19 Jan 2025 21:16:43 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id A73736B0085 for ; Sun, 19 Jan 2025 21:16:43 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 60AD682632 for ; Mon, 20 Jan 2025 02:16:43 +0000 (UTC) X-FDA: 83026216686.25.62FC597 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2067.outbound.protection.outlook.com [40.107.237.67]) by imf23.hostedemail.com (Postfix) with ESMTP id 71C6914000A for ; Mon, 20 Jan 2025 02:16:40 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=ZxuHzL5j; spf=pass (imf23.hostedemail.com: domain of ziy@nvidia.com designates 40.107.237.67 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1737339400; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=KpvPG/mS0oDNrrJoruXU7m8PhoCoSYII4c7+jZBaFfU=; b=VtftfMvbObgXkgQzqvmBJnGqwZopJMM9ngtuWEQmHuHTVtVXRBmNAZuhhkV9KCEAwQJ7Hf f6HxnLACOi5UJAwHARKYMd6fQsQViFD/a5oSuss2dR8J/2I0hwWLQfNNU4osfGw2N6ZOe2 2IeHuGYLCR6uISwh4GLeoGu43Ly8SXY= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1737339400; a=rsa-sha256; cv=pass; b=danbwxA13vWwNQ0A/iz6c21EDR5mPo9WhgBJIIlUnaBRzR8nwXlhvWC7rBh7eMITgnveEX WeTNDeyD4UNyZ4FAtSYtNgdVNCH+gGCWfR+uC7OMvMPGj/uVkNjSbem41ag/T1pR4bDbyW 0q4dZCwm88Xmb3NKxQA1fvU2pMJb5sk= ARC-Authentication-Results: i=2; imf23.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=ZxuHzL5j; spf=pass (imf23.hostedemail.com: domain of ziy@nvidia.com designates 40.107.237.67 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iMwiqrmioeAAgnJlU/uetaHNJcAjnuMHlr2H+o0IU+MFyY0dYxTH0Swj/qiTICTK7wSc4xilpz71dIcXOYEN2rjT20qbs53BrmTSVntKYwX8jbVKTxbYR7Opk7HDyNfb8gYTj4QGtPAvZvpnezWCjRzbHxs2NvoQPydpB6/Z4AQyYJk+FbsYfaJ3Dq6O2slRsNaqrY3wW/tNqIdJd5gwE2LF5AieXPP0oOfr7KMAYv7X/UJiDqlCZcXeoocXodo+VkJp5pOOdiphZvKXm1LSTnJrd7DmTXf0lgly4c23gB6vut35JBqGnhHKh3zPJzNhBAs1lWX5uQTF6NMZ1cWmOg== 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=KpvPG/mS0oDNrrJoruXU7m8PhoCoSYII4c7+jZBaFfU=; b=RrMGjX0dFHcQ798dQIPK59GTOScEVdnsAFKkjuTZnVCawznItQ14SIKPpSlSSMkXE7xk6cABP7zEKfqfjw+095o06xFLgIQ9uF8fhCmQebecMBTElaPqVmQqIfKaiFdS9fQfLTt94gDsb4Ho9XJF9EyVp2ffsSb0vzD7t5TMjRlv/9oxpippcxPZ30fYCZIn4bdNEsANlxgQA2dfcSb/BdnCyo/tYa9UAT0+gmgkJJ5BSWkp/UdADehBpHUFpI/0PUKJJbRR2Fqp0nme3Z83ilj1i94L91KUFHSY8b/SrmMT0MtOKb4ipcUDa2HOOkY4aOreCp+TMmsITA3v0icNFw== 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=KpvPG/mS0oDNrrJoruXU7m8PhoCoSYII4c7+jZBaFfU=; b=ZxuHzL5ju3GDgy2WAfA9KuhXUVO39wFzjmfzTFJ9o1k+jiqMqA7P2M+ynrjRI2yFqDCI6rZTdmGGBXJqsZFOyKwGToMJaZdfkdHFWlghugUc49zi26hYbHUslrr0CfPv4wSANJmbTe+j+l+psuT7ARaI3pzufzzw3xA2cfkbxdNDhPcUe8t+CR2OhXcVQM4Z6YqR7d/AlPl0SGtnqQwgHwS68UsEpbg+l+1k3oaUwT1DDFhu6b7urSegIcG4raoPJiMf6N/kosujHvtOwF3BqOJ/IBNLzG1Cz4sgiztbobDN9qrffCy/zwXQewpUG8E6OsiyBywVTsIozc57oYfPhQ== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by SJ1PR12MB6316.namprd12.prod.outlook.com (2603:10b6:a03:455::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8356.20; Mon, 20 Jan 2025 02:16:36 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%3]) with mapi id 15.20.8356.020; Mon, 20 Jan 2025 02:16:36 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Sun, 19 Jan 2025 21:16:34 -0500 Message-Id: Subject: Re: [fake numa not working] [PATCH 1/1] mm/fake-numa: allow later numa node hotplug Cc: , <42.hyeyoo@gmail.com>, "Bruno Faccini" , "linux-kernel@vger.kernel.org" , "linux-mm@kvack.org" , "akpm@linux-foundation.org" , "rppt@kernel.org" , "david@redhat.com" , "jhubbard@nvidia.com" , "mrusiniak@nvidia.com" To: "Hyeonggon Yoo" From: "Zi Yan" X-Mailer: aerc 0.18.2 References: <20250106120659.359610-1-bfaccini@nvidia.com> <20250106120659.359610-2-bfaccini@nvidia.com> <1DC02706-256B-4B61-B309-7D86595F4B22@nvidia.com> <7a641617-a4e5-45cd-bb1f-628bacd44046@sk.com> In-Reply-To: <7a641617-a4e5-45cd-bb1f-628bacd44046@sk.com> X-ClientProxiedBy: MN0P222CA0001.NAMP222.PROD.OUTLOOK.COM (2603:10b6:208:531::6) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|SJ1PR12MB6316:EE_ X-MS-Office365-Filtering-Correlation-Id: b14c5092-d323-471c-6474-08dd38f8777a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YW1CcEVnbmpzSVJ1NUZISnFkQ2dDU1QvdkxHQVk2blplM01GSHFFMVVWYlFu?= =?utf-8?B?cnpLTFRYTUNERU9XSURnbGMzVEltRUc0cTh3cjEwbEVKejNGQUZKOGZmTFlO?= =?utf-8?B?SkI5Tzk1aHNRTnFxek15QVpCbUZiQ2hzNzdpbUV3WTl0U2Zta2dURy81UmVm?= =?utf-8?B?alpPcjlOMkVVclQreU1PcGl2STVpYkRTcSt6Z1FGLzZ4WWtGUlBpYXcwZStu?= =?utf-8?B?S3ZpeUlGYWp4NVJ0MXQzZm9kTllhVjI0bjNBR0o0d2o3VXFRUmMwU2VoN2hJ?= =?utf-8?B?L0JTcTR3OHhtdXlYUlJ0d0I4N244TnM5KzB1TDVuS2lVYVg0VHQ5Yzg1Qmt3?= =?utf-8?B?SFAzQlRlZGpHT0tMSEZJSEw4d2VwMUVybnRhdHM2cGNLL3BvdE13VngwWTRY?= =?utf-8?B?NElVUmV1aEd4bFpvSnB4SVM0V3FWaVlLWUo1UG4ySjJXNEtBaVNXQmhnY2hE?= =?utf-8?B?S0FMcW9OSTliejNwRU1Cek12czNXMDdBbFArYUtRZmszaTI4RTlDOXI2Z2ZQ?= =?utf-8?B?dXNJMkREaitnbVFBZG01Z2NzSXc1bXIvOXpoUTZXZWFsdXlLV29ZVmppdzk4?= =?utf-8?B?SDEvOThpb0tIRk5UN2lieWRlNmMvbHZkK1pMUnFTcWtvWGZoREdBUmZBbnR1?= =?utf-8?B?U3RSSUNXdUJ2bFFjdUVjVWRtbTlPOHJISzdUMW9FRWhDNEZ2Q09odlhqaEpv?= =?utf-8?B?akorK0N3cWZsUkI0SEcwamFJazFOZ0hOVnpDYUZJa3hNUXlPT0oreWZCcVo3?= =?utf-8?B?VG8rekJLeVJoV0dNaXIzVS9DMmovWHd1Zk9WdU0yaEZ2SnJ0bEZVMjNndWlz?= =?utf-8?B?RTI2WlpKaU5qc0xBUkZhRlhTUk5GQjRtcU42cE5SRkdYWGtYK1VVOUs2dzBG?= =?utf-8?B?USt4NEIwQ2dNamg2UkQwbnZ1b2orOFJLVnN2SVpyV0NCRStPQlNwZmFaQ3NF?= =?utf-8?B?Rjd1UmV1ZlNOL0FJL1NQTEZidGxMT0YvL0hPckc3U1Y4VVdGQmlYMzRoUGtH?= =?utf-8?B?cGJ0d1VVM0liaHNoZDFmaU1YRlBUT1N5QlpwV0hLQUUxWHordEVGTHUrQXd1?= =?utf-8?B?ZE5qSmE1Nnk4c1RrQXJYeVJ1bjdQcThFakhGa0tuTGVwaVZhRytrRk1KRVZs?= =?utf-8?B?UEExdk5RUzZ6QmNRbG1QVzV5MFh0cy9LUExLS0Mxb25GUzJNdkxXdUk4endF?= =?utf-8?B?WGJXVkg5dXBmeVR3czVEV0hkRTg5bWpIam9RcXd1N054NGNxS1I2LzJJN3gx?= =?utf-8?B?M2JjR3gzN2hzc1ozQjg4bHBJUjdyTEQxVUJsNU5VN3crNExzUUJLaHB0dk1L?= =?utf-8?B?b1AvaVpBdmpmeEpKbEQ3K2UxYUM3QTJWbEV1eDFRblF3TTNpemY5d0pZK1Fx?= =?utf-8?B?ZENhR29sOUk4OGRxM0pyamxzbHo1OHhMRnY0QkZaaW5DV0pXWnJmYU03RDBD?= =?utf-8?B?S2FCTWlOelpXb0FtZFJmc0hoL3FNTitmc2o0VURiMVBjVHNsUmlIOTlxSHpo?= =?utf-8?B?TUV5Uk9pdzEwOHlaYXB4WTBYaGhlMUNPamo2MlQyb2pFMU9ua3lmMUdTTm1w?= =?utf-8?B?aWtwckR1cUp0NjArb1lDZTFnaUNSd05scCtDV1ZlNGliaE1JcXgvZlJ2aE9D?= =?utf-8?B?MjVmSWEvZnk3a21EYzlNdTNXNExlZGYySy9scDVBQ2dlTHpTVE41ZHVxRU5L?= =?utf-8?B?Y1djUFFjeE01VU9XVkNMYlQva3pHR05kNWNkZFZqK1hqUTR6c09SNmtkQ0xv?= =?utf-8?B?aU5hRUUzTndobGhPbTFub015OUZBRlJBNi9sUVc5QmVoQ3dCWlhtMHpMem43?= =?utf-8?B?bXA2NmR6SXNwUjlVb05XZklsN0NiVlBrTDFqa2huR2oxV0JRTUcyV1pSZ3NP?= =?utf-8?Q?gTUJx3uZZOMyv?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SXpRbExkUGtTTnRIQzgvMXRDWTBtaEFvcys5V1hGRHByaGVuUHdxWGhrbTBQ?= =?utf-8?B?dnVKQ3lINzlwbGdUdmQ3UFI0RzRobXdyWGV4aHhXVmNRazBtUmpKYVdYYnlP?= =?utf-8?B?cmZraVp4ejQvUEx6WU90ZTdXVS9JWk5xcGY3cjZMS3hSTWl5SUdSYm5jMUx0?= =?utf-8?B?MkZSZHlIWHMzd1dneG95TVByOTJzSzZNZnMyaWw0bFR6eXZJdEdwdkdKNGFk?= =?utf-8?B?cG5IZUhSQy9HcXRUa0tvellJTHJrOWt3QWRDUFFNL1VUQ0wxVU1GN0I4T0xI?= =?utf-8?B?OElxUGtkM3hUc3M4R0RIUXFzdmQvSG1qNml4c0Mrb0ZUZnU0K2lXS2creDIw?= =?utf-8?B?UWc2aUhCUTVuRmFFY1VHK0VEV2E2ODFFUDA0RjU3NHk4UlNUVkhlbFYraHM5?= =?utf-8?B?SG42L3FFd2dtazNIcmk1ZnNUYURGTVNyUGNMSEdLODFGeHpxMVFNeWNpNTg0?= =?utf-8?B?VzNuajNDc3BDdWZ3cXFOeStZRWJCZVcyM2xaSEZPNWR6NGlZME9WdndFRXBD?= =?utf-8?B?VGdzQzdHZGtsVG5Pd29sd2p4QVZWSWRvVzFtU3p4VmlvMlV1OTB1bTJydWYw?= =?utf-8?B?aXpVR0N6VXF6ZkpJRXloOTJiMVRrM3Z6aXIvY29FbFZNNE5qcWVjeEtORlpm?= =?utf-8?B?T2hNNFVNamgydGpydkY3ejNZYjR0S0xjRlNhbVgrMEJSMkFRWkZMMjBUWHp2?= =?utf-8?B?ZVhPTXplOUFyL2ExSld1MlUxYy9od1g5TVVkSVpFYTNPQ3NUbERsVGlqU3M2?= =?utf-8?B?NVh2Z1ozYUpHUGRGVFNFMGhyaHEvS2ZaSVJESWlCak4rd2xUNXZLMmZVTXU2?= =?utf-8?B?cGowVWxMRWU2cjlPaHkwMFJIMG5oZzJqTnJGYldzUjViRE02c01Qc0F0TThs?= =?utf-8?B?VHgvVkw4eXBnSlpxVXZRUTlrTHNQWjV3dnUrcjgzRUF1YVFiZjJFd05FQU1s?= =?utf-8?B?aUExUUZBTTgwRW91c0VwTk5WZEhoWlJoTXZ1dmNyZzFRSzRUUFlrTHpFZXJz?= =?utf-8?B?YjN6VlRObC9DV0lTMVFySWNKL29qNEVyK3pjZkdyanNITUFOcXplOG94T3Fx?= =?utf-8?B?Rk5DTkV3RU1uOEE3dWErcUIvV20ycjN2azkwbHZMcE14L2ExL05iemJnTlpq?= =?utf-8?B?TTdJeGpFN2wyck8xYjV1RWRoaG1pUzI5cHhLL2gzNDNLdWgzVGRDN1VQTE9D?= =?utf-8?B?OHZIZUlCM3I5NGtQNHZxbVNBMWFqb1lZVjAwcGJ6OWJxNk1jL29LUDZzemdr?= =?utf-8?B?MkRGS2R0YUdxL2FSeisvaUFRRC9kd2NyNXdpK1U1ZnRoYnV6K0xyTUpWc0h1?= =?utf-8?B?ODJUUWs2MzZXTHIrd296YzZ6UkhkVlJHZ2FDQXdVbkRMbFBDNkU4N0htTnlF?= =?utf-8?B?TWZ0WnMzaGVnZ0creVdkMVh0QVl6NStSZ05ncURScThRWFpmckM2cmJ2c2JB?= =?utf-8?B?cXpBMDU5dmxnVUNMMTkzWTR4WjdmZE0wd3RZYUpqQmExRnNKeldrOU1RaG1j?= =?utf-8?B?RTFGS3kzQ2FnOUF3THhYVnZPejJMQXVXYTd0WkhBM0d6ZUJRR3l2QXVEZGtG?= =?utf-8?B?a01wejA4WENhZjY2MWtXMHVCQnR6VFdKUGNLWXg4ckFYK2c1U3hNeG1iVnNu?= =?utf-8?B?RElkZUszTDlwYzJBUmJRYXVPWnJOUUpJRTc4WUNjK3l1bnVpZEw5djFDWnNW?= =?utf-8?B?VmlkKzJvaVBZUXZxbzdSNTRRZzI1dDllZFNkcmUwZ3RIMGgwTitSTjNuYStW?= =?utf-8?B?cnpMM1lybDJOa1N1TTZaR01oNUl1TjFPSUFDYWdVc1NLZkh6a0Y3UlQvOXMr?= =?utf-8?B?Q0NoZTYwRElYZFZrK2hGZGYxT3orVmNTeTEvMXhrNU1VQThzWXhzcU1SU0Yw?= =?utf-8?B?SHhxSHJENEIxZno4ZWJGSTNNRVl3aEUvZ1lqSW9pSEZOOEcrUlliNEEvQkJH?= =?utf-8?B?LzhVV2JocHVucFRkaSs2ZThtOFk0c2EvMUdTelQyTWtTYXVCSElLWE5SZmJT?= =?utf-8?B?UG9RaXMvVnpValJzSjU1UVlVcXQ5TzNnSnZwVm5pTDZqdmtYeEowTG5penlN?= =?utf-8?B?NEg4ekZBYUlQQ3duWHNZcUFnNndBemNYL3hIOVJJWGJBUUdrc3k1SXVueWRl?= =?utf-8?Q?H0pWA889aioRDqY46SlLKeP+n?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b14c5092-d323-471c-6474-08dd38f8777a X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2025 02:16:36.5191 (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: WZhqge85g6rhWJ0em48UM0iVXMXSXs198GnVEQjCf1zISC9ToYYIxa+aEQZ9pxV+ X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR12MB6316 X-Stat-Signature: obksp9mtfgbmyfzgxqgtadymau3m86sx X-Rspam-User: X-Rspamd-Queue-Id: 71C6914000A X-Rspamd-Server: rspam03 X-HE-Tag: 1737339400-987078 X-HE-Meta: U2FsdGVkX18GewxaXuXhpOLO0tF8edQ2Y7iy44SdC4vV8rRnRwgXk5gYNzqnP1+1ml9W4BQ+K67/K14A1Kxo1kMf82Edo1ArvviojngzDnxphY45tCkw04rewt9jHyzyxvlbkgCp5g7cXrlAFEqA5xMb3FVNlxXYtfKq5jkxDeHsfyDfgHjG68upH2nrDMaeihmpgAxzWdX43LzL2Uhb2SH6uAmAtKxYP2U2eCTh7kvrkMx4A7K91xnxy4d2JAgDLkVs+CiD8hzovHLZ61k7JKsCPLbNsTd1oGsWyEu69qMlVpuPrRzCt4vSoBXaYvTdVIuLegNGo7Hkybrzk9rpiklV8Vo9fMw02TU5/4Bq/DhiQMfTASISyqSh6tuUkzcweVH1vziEkgjy3GJ1bTWCSpfEB/3H96Y1wqLHdZHo+Lly/Cay0/ZIZZr2sYJfPPqNnrXyUuPo+1CEc5RiwlQzmmX0qxKTfg1tduxTFRFhmVxXjyZDDc/jhZPMYA8a1AF2Pd91Ny2PnTBt/H4nuWe1vbdKvVvMT/oDtnWkzkzEdvXH33cxqeqJPVp7q+QXt2KdHYkI9fHLsOMzOn4UFAV/ed1cZp/5aa9g2gvd1XBWX9OAkhv7GVZKnPH2FKUmD8iyF6hMoUMC89+hYbqfa8txuZCWbECE7w8P5dfe5Xb2HbeAkwvlFxKNuza7BVC+2Qqk63I4oU1NnwZdJeRSonOXk6ioRNgiCpKfKohRDAOt200+s8+x+1tnvJUIgEDR6hV/BGDX17lSJ7prk8UHezgcgAXEmu6THJVEQF+MO2iqXbK9kwKWUv76f4tpXRN8ehmdIl3mgUi2sxg3SPdnpsUmgQSzXCgqPGog5TbIoKfs5dM7//hhichUGPDeP5wphFa4InPGhhy8pU7QbWixlj4m0s/5oqet8CayTP7YMX9PBYu6/JWgHXrzaCMMerY1BxGojOXsYNpUrDW3660zhUc zpbM1mS/ FLB4B1NDxSYdg9ooxFugiDrdh62fRbi8NwM9yH4pLvfx6jN9xoOeM7h7WkVlHMLr7GL5fYDTxo5TzpDtmaDGDQd3EhTlgddmzgDfZqamWI0rTbcW7qNuetz4X1WT+1R42BICGiCY3RFEgnT1IJZaw++dVYXQbGHxVFaukCdC+UbpD8V4jVY4opRGRZxPkQ71cRojZ3/K/RPV91wU6zmFV7+0atu0kxtr7uWfcDPp8+AHsh1xC8Aks2/C6/qWFcNdjcy6pNjj8q3ffdCcXEo8h9gZobqdrq12ib0nWbKpAvkN7uAWIpDblqSTs/2dRsDGxbd6Ec7+B+pfG+6NuvA1GJuaEMZU6L8ninDcyJHdwsBn0P7/o34v9YE6ect63Qml2BtIZXBWAZVU59uGB65K7tKY5PhY3/9+/5JIM/EApHKNV8DLCBYTLH495/wCuqX0AVs1qvMoQbIQyyXjrA5t4k/+Rhg== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Sun Jan 19, 2025 at 7:37 PM EST, Hyeonggon Yoo wrote: > > > On 1/18/2025 4:09 AM, Zi Yan wrote: > > On 17 Jan 2025, at 0:00, Hyeonggon Yoo wrote: > >=20 > >> On 1/6/2025 9:06 PM, Bruno Faccini wrote: > >>> Current fake-numa implementation prevents new Numa > >>> nodes to be later hot-plugged by drivers. > >>> A common symptom of this limitation is the > >>> "node was absent from the node_possible_map" > >>> message by associated warning in mm/memory_hotplug.c: > >>> add_memory_resource(). > >>> This comes from the lack of remapping in both > >>> pxm_to_node_map[] and node_to_pxm_map[] tables > >>> to take fake-numa nodes into account and thus > >>> triggers collisions with original and physical nodes > >>> only-mapping that had been determined from BIOS tables. > >>> This patch fixes this by doing the necessary node-ids > >>> translation in both pxm_to_node_map[]/node_to_pxm_map[] > >>> tables. > >>> node_distance[] table has also been fixed accordingly. > >>> > >>> Signed-off-by: Bruno Faccini > >> > >> Hi Bruno, > >> > >> This commit causes WARN() and disables fakenuma > >> when I pass "numa=3Dfake=3D4U" on my QEMU setup. > >> > >> Attaching WARN() log and git bisect log to help debugging. > >=20 > > Is your VM getting 4 NUMA nodes at the end? > > No, it only gets node 0 at the end. Got it. > > > Can you also share your QEMU command line and your kernel config? > > The config is attached (fakenuma.config) > > QEMU command line: > $ qemu-system-x86_64 \ > -cpu host \ > -enable-kvm \ > -smp $(nproc) \ > -m 32G \ > -nographic \ > -kernel arch/x86/boot/bzImage \ > -initrd ../../rootfs.cpio.gz \ > -nic user,model=3Dvirtio-net-pci \ > -append "console=3DttyS0 numa=3Dfake=3D4U" > > > This can help Bruno reproduce the issue locally. At least, I > > cannot reproduce it on mm-everything-2025-01-16-23-18. > > Still reproduced on mm-everything-2025-01-18-04-55 with my setup. > > > I also > > notice that my VM does not have =E2=80=9CNo NUMA configuration found=E2= =80=9D > > (in your log) in its kernel log and that might explain > > why I could not reproduce it. > > Did you do NUMA configuration (-numa in QEMU) for your VM? > I didn't, but it's still expected to work 'cause it's fake numa. No. It seems that the "No NUMA configuration found" is caused by your qemu, where dummy_numa_init() is used (maybe ACPI SRAT is not populated?). I used the patch below to emulate the situation and reproduced the issue. Since dummy_numa_init() is used when there is no underlying NUMA architecture, NUMA initialization fails, or NUMA is disabled on the command line (the last does not apply here), it should be properly handled. I will let Bruno look into it. Thank you for the info. diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 64e5cdb2460a..70dfd9bfb23f 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c @@ -223,7 +223,7 @@ static int __init dummy_numa_init(void) */ void __init x86_numa_init(void) { - if (!numa_off) { + if (0 && !numa_off) { #ifdef CONFIG_ACPI_NUMA if (!numa_init(x86_acpi_numa_init)) return; > >> > >> [WARN() splat] > >> > >> [ 0.009676] No NUMA configuration found > >> [ 0.009677] Faking a node at [mem 0x0000000000000000-0x000000083fff= ffff] > >> [ 0.009705] Fake node size 16895MB too small, increasing to 16896MB > >> [ 0.009708] Faking node 0 at [mem 0x0000000000001000-0x000000042000= 0fff] (16896MB) > >> [ 0.009711] Faking node 1 at [mem 0x0000000420001000-0x000000083fff= ffff] (16895MB) > >> [ 0.009738] ------------[ cut here ]------------ > >> [ 0.009739] -1 max nid when expected 1 > >> [ 0.009760] WARNING: CPU: 0 PID: 0 at drivers/acpi/numa/srat.c:120 = fix_pxm_node_maps+0x577/0x810 > >> [ 0.009766] Modules linked in: > >> [ 0.009769] CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 6.13.0-r= c6+ #31 > >> [ 0.009771] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), = BIOS 1.15.0-1 04/01/2014 > >> [ 0.009772] RIP: 0010:fix_pxm_node_maps+0x577/0x810 > >> [ 0.009774] Code: 8b 85 40 ff ff ff 44 8b 8d 44 ff ff ff 8b 85 48 f= f ff ff e9 83 fb ff ff 44 89 f2 44 89 ce 48 c7 c7 aa 2f 84 8d e8 b9 71 01 f= e <0f> 0b 41 b8 ff ff ff ff e9 ba fb ff ff 48 c7 c7 a0 d8 d1 8d 44 89 > >> [ 0.009776] RSP: 0000:ffffffff8da03be0 EFLAGS: 00010046 ORIG_RAX: 0= 000000000000000 > >> [ 0.009778] RAX: 0000000000000000 RBX: 0000000000000400 RCX: 000000= 0000000000 > >> [ 0.009779] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 000000= 0000000000 > >> [ 0.009780] RBP: ffffffff8da03ca8 R08: 0000000000000000 R09: 000000= 0000000000 > >> [ 0.009781] R10: 0000000000000000 R11: 0000000000000000 R12: 000000= 0000000001 > >> [ 0.009782] R13: 00000000000007ff R14: 0000000000000001 R15: 000000= 0000000000 > >> [ 0.009783] FS: 0000000000000000(0000) GS:ffffffff8de8c000(0000) k= nlGS:0000000000000000 > >> [ 0.009784] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > >> [ 0.009785] CR2: ffff90e4bde01000 CR3: 00000001bd03e000 CR4: 000000= 00000200b0 > >> [ 0.009788] Call Trace: > >> [ 0.009790] > >> [ 0.009792] ? show_regs+0x71/0x90 > >> [ 0.009797] ? __warn+0x8d/0x150 > >> [ 0.009799] ? fix_pxm_node_maps+0x577/0x810 > >> [ 0.009802] ? report_bug+0x1ab/0x1c0 > >> [ 0.009805] ? fixup_exception+0x27/0x380 > >> [ 0.009809] ? early_fixup_exception+0xa2/0xf0 > >> [ 0.009813] ? do_early_exception+0x28/0x90 > >> [ 0.009816] ? early_idt_handler_common+0x2f/0x3a > >> [ 0.009819] ? fix_pxm_node_maps+0x577/0x810 > >> [ 0.009822] ? numa_cleanup_meminfo+0x8c/0x5b0 > >> [ 0.009828] numa_emulation+0x4e3/0xad0 > >> [ 0.009830] ? __pfx_dummy_numa_init+0x10/0x10 > >> [ 0.009833] ? __pfx_dummy_numa_init+0x10/0x10 > >> [ 0.009836] numa_memblks_init+0x10c/0x2c0 > >> [ 0.009838] ? __pfx_dummy_numa_init+0x10/0x10 > >> [ 0.009840] numa_init+0x61/0x3e0 > >> [ 0.009842] ? topology_register_boot_apic+0x2a/0x40 > >> [ 0.009846] x86_numa_init+0x65/0x80 > >> [ 0.009848] initmem_init+0xe/0x20 > >> [ 0.009850] setup_arch+0x9d8/0xfa0 > >> [ 0.009852] ? _printk+0x58/0x90 > >> [ 0.009855] start_kernel+0x5f/0xb50 > >> [ 0.009860] x86_64_start_reservations+0x18/0x30 > >> [ 0.009863] x86_64_start_kernel+0xc0/0x110 > >> [ 0.009864] ? setup_ghcb+0xe/0x140 > >> [ 0.009867] common_startup_64+0x13e/0x141 > >> [ 0.009871] > >> [ 0.009871] ---[ end trace 0000000000000000 ]--- > >> > >> [Git bisect log] > >> > >> # bad: [f378252a2168c2fbf8fc08b635061e5f6748c1f2] kasan: sw_tags: use = str_on_off() helper in kasan_init_sw_tags() > >> git bisect bad f378252a2168c2fbf8fc08b635061e5f6748c1f2 > >> # good: [cbc5dde0a461240046e8a41c43d7c3b76d5db952] fs/proc: fix softlo= ckup in __read_vmcore (part 2) > >> git bisect good cbc5dde0a461240046e8a41c43d7c3b76d5db952 > >> # good: [fb73203263021f2ee9dd54d280b1c543d10acd76] mm: move common par= t of pagetable_*_ctor to helper > >> git bisect good fb73203263021f2ee9dd54d280b1c543d10acd76 > >> # bad: [8fd966c9310f14d5bbe653cf087853582170aad6] mm, swap: remove old= allocation path for HDD > >> git bisect bad 8fd966c9310f14d5bbe653cf087853582170aad6 > >> # bad: [8646971f02651146554233d63fdd721f5f060973] mm: shmem: skip swap= cache for swapin of synchronous swap device > >> git bisect bad 8646971f02651146554233d63fdd721f5f060973 > >> # good: [b8ba614eaa8dd31702c61e7df7231b1b18b99259] mm/damon/paddr: rep= ort filter-passed bytes back for DAMOS_STAT action > >> git bisect good b8ba614eaa8dd31702c61e7df7231b1b18b99259 > >> # good: [fd0935b8e9e8c2edf05a3d0ffa09d0aa3e9cf2dd] Docs/ABI/damon: doc= ument per-region DAMOS filter-passed bytes stat file > >> git bisect good fd0935b8e9e8c2edf05a3d0ffa09d0aa3e9cf2dd > >> # good: [3ffd3cd7e2e8793d3b5fbb83c03668c47ab6d599] selftests/damon: re= move tests for DAMON debugfs interface > >> git bisect good 3ffd3cd7e2e8793d3b5fbb83c03668c47ab6d599 > >> # good: [bf9f93f0b7bff8af780330f5094775a39caf3612] mm/damon: remove DA= MON debugfs interface > >> git bisect good bf9f93f0b7bff8af780330f5094775a39caf3612 > >> # bad: [1746744be6ff271e29345a5be4cc144aa33b10ab] mm/memmap: prevent d= ouble scanning of memmap by kmemleak > >> git bisect bad 1746744be6ff271e29345a5be4cc144aa33b10ab > >> # bad: [ca19a5ab8756ef78c34d02d2b8c266a9cc7bf57d] mm/fake-numa: allow = later numa node hotplug > >> git bisect bad ca19a5ab8756ef78c34d02d2b8c266a9cc7bf57d > >> # first bad commit: [ca19a5ab8756ef78c34d02d2b8c266a9cc7bf57d] mm/fake= -numa: allow later numa node hotplug > >> > >>> --- > >>> drivers/acpi/numa/srat.c | 86 ++++++++++++++++++++++++++++++++= ++++ > >>> include/acpi/acpi_numa.h | 5 +++ > >>> include/linux/numa_memblks.h | 3 ++ > >>> mm/numa_emulation.c | 45 ++++++++++++++++--- > >>> mm/numa_memblks.c | 2 +- > >>> 5 files changed, 133 insertions(+), 8 deletions(-) > >>> > >>> diff --git a/drivers/acpi/numa/srat.c b/drivers/acpi/numa/srat.c > >>> index bec0dcd1f9c3..59fffe34c9d0 100644 > >>> --- a/drivers/acpi/numa/srat.c > >>> +++ b/drivers/acpi/numa/srat.c > >>> @@ -81,6 +81,92 @@ int acpi_map_pxm_to_node(int pxm) > >>> } > >>> EXPORT_SYMBOL(acpi_map_pxm_to_node); > >>> +#ifdef CONFIG_NUMA_EMU > >>> +/* > >>> + * Take max_nid - 1 fake-numa nodes into account in both > >>> + * pxm_to_node_map()/node_to_pxm_map[] tables. > >>> + */ > >>> +int __init fix_pxm_node_maps(int max_nid) > >>> +{ > >>> + static int pxm_to_node_map_copy[MAX_PXM_DOMAINS] __initdata > >>> + =3D { [0 ... MAX_PXM_DOMAINS - 1] =3D NUMA_NO_NODE }; > >>> + static int node_to_pxm_map_copy[MAX_NUMNODES] __initdata > >>> + =3D { [0 ... MAX_NUMNODES - 1] =3D PXM_INVAL }; > >>> + int i, j, index =3D -1, count =3D 0; > >>> + nodemask_t nodes_to_enable; > >>> + > >>> + if (numa_off || srat_disabled()) > >>> + return -1; > >>> + > >>> + /* find fake nodes PXM mapping */ > >>> + for (i =3D 0; i < MAX_NUMNODES; i++) { > >>> + if (node_to_pxm_map[i] !=3D PXM_INVAL) { > >>> + for (j =3D 0; j <=3D max_nid; j++) { > >>> + if ((emu_nid_to_phys[j] =3D=3D i) && > >>> + WARN(node_to_pxm_map_copy[j] !=3D PXM_INVAL, > >>> + "Node %d is already binded to PXM %d\n", > >>> + j, node_to_pxm_map_copy[j])) > >>> + return -1; > >>> + if (emu_nid_to_phys[j] =3D=3D i) { > >>> + node_to_pxm_map_copy[j] =3D > >>> + node_to_pxm_map[i]; > >>> + if (j > index) > >>> + index =3D j; > >>> + count++; > >>> + } > >>> + } > >>> + } > >>> + } > >>> + if (WARN(index !=3D max_nid, "%d max nid when expected %d\n", > >>> + index, max_nid)) > >>> + return -1; > >>> + > >>> + nodes_clear(nodes_to_enable); > >>> + > >>> + /* map phys nodes not used for fake nodes */ > >>> + for (i =3D 0; i < MAX_NUMNODES; i++) { > >>> + if (node_to_pxm_map[i] !=3D PXM_INVAL) { > >>> + for (j =3D 0; j <=3D max_nid; j++) > >>> + if (emu_nid_to_phys[j] =3D=3D i) > >>> + break; > >>> + /* fake nodes PXM mapping has been done */ > >>> + if (j <=3D max_nid) > >>> + continue; > >>> + /* find first hole */ > >>> + for (j =3D 0; > >>> + j < MAX_NUMNODES && > >>> + node_to_pxm_map_copy[j] !=3D PXM_INVAL; > >>> + j++) > >>> + ; > >>> + if (WARN(j =3D=3D MAX_NUMNODES, > >>> + "Number of nodes exceeds MAX_NUMNODES\n")) > >>> + return -1; > >>> + node_to_pxm_map_copy[j] =3D node_to_pxm_map[i]; > >>> + node_set(j, nodes_to_enable); > >>> + count++; > >>> + } > >>> + } > >>> + > >>> + /* creating reverse mapping in pxm_to_node_map[] */ > >>> + for (i =3D 0; i < MAX_NUMNODES; i++) > >>> + if (node_to_pxm_map_copy[i] !=3D PXM_INVAL && > >>> + pxm_to_node_map_copy[node_to_pxm_map_copy[i]] =3D=3D NUMA_NO_N= ODE) > >>> + pxm_to_node_map_copy[node_to_pxm_map_copy[i]] =3D i; > >>> + > >>> + /* overwrite with new mapping */ > >>> + for (i =3D 0; i < MAX_NUMNODES; i++) { > >>> + node_to_pxm_map[i] =3D node_to_pxm_map_copy[i]; > >>> + pxm_to_node_map[i] =3D pxm_to_node_map_copy[i]; > >>> + } > >>> + > >>> + /* enable other nodes found in PXM for hotplug */ > >>> + nodes_or(numa_nodes_parsed, nodes_to_enable, numa_nodes_parsed); > >>> + > >>> + pr_debug("found %d total number of nodes\n", count); > >>> + return 0; > >>> +} > >>> +#endif > >>> + > >>> static void __init > >>> acpi_table_print_srat_entry(struct acpi_subtable_header *header) > >>> { > >>> diff --git a/include/acpi/acpi_numa.h b/include/acpi/acpi_numa.h > >>> index b5f594754a9e..99b960bd473c 100644 > >>> --- a/include/acpi/acpi_numa.h > >>> +++ b/include/acpi/acpi_numa.h > >>> @@ -17,11 +17,16 @@ extern int node_to_pxm(int); > >>> extern int acpi_map_pxm_to_node(int); > >>> extern unsigned char acpi_srat_revision; > >>> extern void disable_srat(void); > >>> +extern int fix_pxm_node_maps(int max_nid); > >>> extern void bad_srat(void); > >>> extern int srat_disabled(void); > >>> #else /* CONFIG_ACPI_NUMA */ > >>> +static inline int fix_pxm_node_maps(int max_nid) > >>> +{ > >>> + return 0; > >>> +} > >>> static inline void disable_srat(void) > >>> { > >>> } > >>> diff --git a/include/linux/numa_memblks.h b/include/linux/numa_memblk= s.h > >>> index cfad6ce7e1bd..dd85613cdd86 100644 > >>> --- a/include/linux/numa_memblks.h > >>> +++ b/include/linux/numa_memblks.h > >>> @@ -29,7 +29,10 @@ int __init numa_cleanup_meminfo(struct numa_meminf= o *mi); > >>> int __init numa_memblks_init(int (*init_func)(void), > >>> bool memblock_force_top_down); > >>> +extern int numa_distance_cnt; > >>> + > >>> #ifdef CONFIG_NUMA_EMU > >>> +extern int emu_nid_to_phys[MAX_NUMNODES]; > >>> int numa_emu_cmdline(char *str); > >>> void __init numa_emu_update_cpu_to_node(int *emu_nid_to_phys, > >>> unsigned int nr_emu_nids); > >>> diff --git a/mm/numa_emulation.c b/mm/numa_emulation.c > >>> index 031fb9961bf7..9d55679d99ce 100644 > >>> --- a/mm/numa_emulation.c > >>> +++ b/mm/numa_emulation.c > >>> @@ -8,11 +8,12 @@ > >>> #include > >>> #include > >>> #include > >>> +#include > >>> #define FAKE_NODE_MIN_SIZE ((u64)32 << 20) > >>> #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) > >>> -static int emu_nid_to_phys[MAX_NUMNODES]; > >>> +int emu_nid_to_phys[MAX_NUMNODES]; > >>> static char *emu_cmdline __initdata; > >>> int __init numa_emu_cmdline(char *str) > >>> @@ -379,6 +380,7 @@ void __init numa_emulation(struct numa_meminfo *n= uma_meminfo, int numa_dist_cnt) > >>> size_t phys_size =3D numa_dist_cnt * numa_dist_cnt * sizeof(phys_= dist[0]); > >>> int max_emu_nid, dfl_phys_nid; > >>> int i, j, ret; > >>> + nodemask_t physnode_mask =3D numa_nodes_parsed; > >>> if (!emu_cmdline) > >>> goto no_emu; > >>> @@ -395,7 +397,6 @@ void __init numa_emulation(struct numa_meminfo *n= uma_meminfo, int numa_dist_cnt) > >>> * split the system RAM into N fake nodes. > >>> */ > >>> if (strchr(emu_cmdline, 'U')) { > >>> - nodemask_t physnode_mask =3D numa_nodes_parsed; > >>> unsigned long n; > >>> int nid =3D 0; > >>> @@ -465,9 +466,6 @@ void __init numa_emulation(struct numa_meminfo = *numa_meminfo, int numa_dist_cnt) > >>> */ > >>> max_emu_nid =3D setup_emu2phys_nid(&dfl_phys_nid); > >>> - /* commit */ > >>> - *numa_meminfo =3D ei; > >>> - > >>> /* Make sure numa_nodes_parsed only contains emulated nodes */ > >>> nodes_clear(numa_nodes_parsed); > >>> for (i =3D 0; i < ARRAY_SIZE(ei.blk); i++) > >>> @@ -475,10 +473,21 @@ void __init numa_emulation(struct numa_meminfo = *numa_meminfo, int numa_dist_cnt) > >>> ei.blk[i].nid !=3D NUMA_NO_NODE) > >>> node_set(ei.blk[i].nid, numa_nodes_parsed); > >>> - numa_emu_update_cpu_to_node(emu_nid_to_phys, ARRAY_SIZE(emu_nid_t= o_phys)); > >>> + /* fix pxm_to_node_map[] and node_to_pxm_map[] to avoid collision > >>> + * with faked numa nodes, particularly during later memory hotplug > >>> + * handling, and also update numa_nodes_parsed accordingly. > >>> + */ > >>> + ret =3D fix_pxm_node_maps(max_emu_nid); > >>> + if (ret < 0) > >>> + goto no_emu; > >>> + > >>> + /* commit */ > >>> + *numa_meminfo =3D ei; > >>> + > >>> + numa_emu_update_cpu_to_node(emu_nid_to_phys, max_emu_nid + 1); > >>> /* make sure all emulated nodes are mapped to a physical node */ > >>> - for (i =3D 0; i < ARRAY_SIZE(emu_nid_to_phys); i++) > >>> + for (i =3D 0; i < max_emu_nid + 1; i++) > >>> if (emu_nid_to_phys[i] =3D=3D NUMA_NO_NODE) > >>> emu_nid_to_phys[i] =3D dfl_phys_nid; > >>> @@ -501,12 +510,34 @@ void __init numa_emulation(struct numa_meminf= o *numa_meminfo, int numa_dist_cnt) > >>> numa_set_distance(i, j, dist); > >>> } > >>> } > >>> + for (i =3D 0; i < numa_distance_cnt; i++) { > >>> + for (j =3D 0; j < numa_distance_cnt; j++) { > >>> + int physi, physj; > >>> + u8 dist; > >>> + > >>> + /* distance between fake nodes is already ok */ > >>> + if (emu_nid_to_phys[i] !=3D NUMA_NO_NODE && > >>> + emu_nid_to_phys[j] !=3D NUMA_NO_NODE) > >>> + continue; > >>> + if (emu_nid_to_phys[i] !=3D NUMA_NO_NODE) > >>> + physi =3D emu_nid_to_phys[i]; > >>> + else > >>> + physi =3D i - max_emu_nid; > >>> + if (emu_nid_to_phys[j] !=3D NUMA_NO_NODE) > >>> + physj =3D emu_nid_to_phys[j]; > >>> + else > >>> + physj =3D j - max_emu_nid; > >>> + dist =3D phys_dist[physi * numa_dist_cnt + physj]; > >>> + numa_set_distance(i, j, dist); > >>> + } > >>> + } > >>> /* free the copied physical distance table */ > >>> memblock_free(phys_dist, phys_size); > >>> return; > >>> no_emu: > >>> + numa_nodes_parsed =3D physnode_mask; > >>> /* No emulation. Build identity emu_nid_to_phys[] for numa_add_c= pu() */ > >>> for (i =3D 0; i < ARRAY_SIZE(emu_nid_to_phys); i++) > >>> emu_nid_to_phys[i] =3D i; > >>> diff --git a/mm/numa_memblks.c b/mm/numa_memblks.c > >>> index a3877e9bc878..ff4054f4334d 100644 > >>> --- a/mm/numa_memblks.c > >>> +++ b/mm/numa_memblks.c > >>> @@ -7,7 +7,7 @@ > >>> #include > >>> #include > >>> -static int numa_distance_cnt; > >>> +int numa_distance_cnt; > >>> static u8 *numa_distance; > >>> nodemask_t numa_nodes_parsed __initdata; > >=20 > >=20 > > Best Regards, > > Yan, Zi > >=20 --=20 Best Regards, Yan, Zi