From patchwork Thu Aug 1 06:08:00 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Rapoport X-Patchwork-Id: 13749629 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 B25EAC3DA4A for ; Thu, 1 Aug 2024 06:08:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CEC726B007B; Thu, 1 Aug 2024 02:08:56 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C9C5D6B0082; Thu, 1 Aug 2024 02:08:56 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B63B66B0083; Thu, 1 Aug 2024 02:08:56 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 9931A6B007B for ; Thu, 1 Aug 2024 02:08:56 -0400 (EDT) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id F1D2EA076C for ; Thu, 1 Aug 2024 06:08:55 +0000 (UTC) X-FDA: 82402648230.28.F3B9FBA Received: from sin.source.kernel.org (sin.source.kernel.org [145.40.73.55]) by imf09.hostedemail.com (Postfix) with ESMTP id A782D140010 for ; Thu, 1 Aug 2024 06:08:53 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=CXNEbP2s; spf=pass (imf09.hostedemail.com: domain of rppt@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1722492529; 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-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=7YwAErOoT+bPCN1en2bEP1bIV2+beafsajXOeYF5fBk=; b=4c3HF37T/Ymvq0rdS3ia5hVsc9bTZYUTijMJ4HRqZVVkFz6G9zlMkCICCtykMN0/pxRIEo M6a+yA8X/D61osw0w3B4CvMFnEQGORy6kSVj32OC0IV4gOZA0FrLNw4BS4fDhD5KtngLV3 gEmZirtRMIrvepg/JJ1V9GUwyQ4hME8= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=CXNEbP2s; spf=pass (imf09.hostedemail.com: domain of rppt@kernel.org designates 145.40.73.55 as permitted sender) smtp.mailfrom=rppt@kernel.org; dmarc=pass (policy=none) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1722492529; a=rsa-sha256; cv=none; b=Y3y7ipOg606Gpm/kxqoTWc/S+9SsXAUOXsF+UXWOA79mlppBDoFMm7HD5lwAS6dCFYZhCI tlWlm2nDkqBZoLZmMtMG00hBBWVT1h62J5FOhjIkAtCK+lR6X5Ecs3qAlQwE0CDsFO5bpk BXKo6GkzKhk0NLGR0cqx5/+HVYXgGkU= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id 688FACE17D8; Thu, 1 Aug 2024 06:08:48 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 74391C4AF09; Thu, 1 Aug 2024 06:08:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1722492527; bh=6bV01Igo0vm/teHus5SOoAdpI2cX0Ttgy2pDh5oYhjA=; h=From:To:Cc:Subject:Date:From; b=CXNEbP2sCuXXcLtnU1Im8vcEfX+Ba8ImoGoJdTPy/rvEsaLwu/okVVXfnTfcw0E+a PF48mhukFNpdGHFhOqECuqmjQ74t4U7aKFKEvu0lcDvSAbpjnR/B9ZHdgw7k5qDuPc wkQrwpVW7zg/p6lChP7ihXepuCzenZCOoest9ZwagSbXBigbYbJAyWmJe70AnEdjNa cr7WYs6+/WXHjo/hTxyS0i3eDMwd6vLTE3k8SyVxwoMktV05+0OSUo/WvZ8+iP8sgf RoxwYNVF97lhLo9ZKc7tIO8VPxnb5Ho7v9vk12s6dVADrW2eNFcO9bHenCRQWgPx0E SXclvNFKP+YJQ== From: Mike Rapoport To: linux-kernel@vger.kernel.org Cc: Alexander Gordeev , Andreas Larsson , Andrew Morton , Arnd Bergmann , Borislav Petkov , Catalin Marinas , Christophe Leroy , Dan Williams , Dave Hansen , David Hildenbrand , "David S. Miller" , Davidlohr Bueso , Greg Kroah-Hartman , Heiko Carstens , Huacai Chen , Ingo Molnar , Jiaxun Yang , John Paul Adrian Glaubitz , Jonathan Cameron , Jonathan Corbet , Michael Ellerman , Mike Rapoport , Palmer Dabbelt , "Rafael J. Wysocki" , Rob Herring , Samuel Holland , Thomas Bogendoerfer , Thomas Gleixner , Vasily Gorbik , Will Deacon , Zi Yan , devicetree@vger.kernel.org, linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-cxl@vger.kernel.org, linux-doc@vger.kernel.org, linux-mips@vger.kernel.org, linux-mm@kvack.org, linux-riscv@lists.infradead.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, loongarch@lists.linux.dev, nvdimm@lists.linux.dev, sparclinux@vger.kernel.org, x86@kernel.org Subject: [PATCH v3 00/26] mm: introduce numa_memblks Date: Thu, 1 Aug 2024 09:08:00 +0300 Message-ID: <20240801060826.559858-1-rppt@kernel.org> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-Rspam-User: X-Stat-Signature: 46k75nczhbtnfbjaq33pz7ue8idziegj X-Rspamd-Queue-Id: A782D140010 X-Rspamd-Server: rspam11 X-HE-Tag: 1722492533-661608 X-HE-Meta: U2FsdGVkX19OQc48Rbe9yiil9OdhyXcEh0oHam5V3Qh6x9wmEoSF6IBm3NYzwAzXAs8BvUJhkQSIcXFBhCOkW00Tlrla6EgZWCmx1Hwiu9cT5Mzu0mNSfx0Xg1qXSN8uy5zsLfjCjXukXBgZPEKxlGF3NT3vPzW832xqo7zifLNFRtVmaP8AqgOu/0TvRU15gAf0N1YIpwqiYDyH8+41uk+lqssYo8HPhtLHytXQAeNwmNbBOeafl9b4DsRUgXaa/z0gnuwhuHqMp+TTru1SFke4cCqPIXfxU7HBJnKhZClelc+yddHv6SxakJbRLmsRoO048vnGghxPBl1vY5qq8Neh07P/rW/1VhIIifwcyJvrihk5RmNZ8BzUbRnyZcbMORVUU7tZJFevlOzlw6sS5mMcKD3ytyMbki7wUQmXdjJ9BstsPmtp4i8x4q4oJUuep7A75lTbFa5nnC2uuwBfxBFTXWKzT5WzF5r7v9NLYX3PEsSb6sxfl6BXjMs8dx9NAlOIbGZY4PDpxh2opsp1/Hp13et2Jx9Oi+zoH0lquW5Dl2qOhZACMCo2APwTE4nbUvc5t4XNoASJPGM/cQ49ZLuXtWpnD1KdF1ekC1Hi7e90uHqqfCfrdNRxLVTGKbOjQRyAuKblsT40a0esZo+Vcw73eTp0a5LT4+UhjqD4o10JxwU5+8lNSnPxTkQGqXoa80c/ivYSPGk7Fj5+81C0akGKcmOLPL1RkDoFkVZ3pcuSSZyQ6N0ob9qmg8dAFc+k73alx2bCNo48kn3R10GqSDhMHAAajRBpIaeOD2gG+tGHEYMS0oahtvNhqTT7EIG5PHUue+A/hUlKWywTHWivlynZLuXyIbahi4fibJ/fgyhCza2aUowfso5SkwRtD8WE/iLT3Z3EF++nErdzDQJgOkPPAQCwuop88Au+7SSSUom7pe+EFSZeLQzt4abOnEYtIx9v+Xjo+YYnzKEegkB cHHjc9ah 6Cdul440wmbsEEqAIqJTpxRm+mDa8A2MzclDXsqz0IcC+rNADkuW7+dS6GCu49oRUYoUN5kUxQemURg9ixi4nFLJOtOUMVbgff4KKdrGs94cuj/0/vFql2YjG1MoQBBKm6YdinzPnxnVAZX1XvZyrfcNX7SOMVKRyyKPmnR0E42RXTEOpObtryRtJfAn/5ZDFSSOCdpbEQk4cAHj0i5dLWlQNNqyXMf19IX+d5B5FBNOSbaE1H1dvlcm2aXROEq0EEz4IE0qD6j2L4ZeUySfP5cg8LDN/8TJd3yv2e+OciUyuOeeTfo2kjWpDJKg2og4OtqWpMngAC9oEyemL8kptgZRvKcJb0Q+r8ihf 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: From: "Mike Rapoport (Microsoft)" Hi, Following the discussion about handling of CXL fixed memory windows on arm64 [1] I decided to bite the bullet and move numa_memblks from x86 to the generic code so they will be available on arm64/riscv and maybe on loongarch sometime later. While it could be possible to use memblock to describe CXL memory windows, it currently lacks notion of unpopulated memory ranges and numa_memblks does implement this. Another reason to make numa_memblks generic is that both arch_numa (arm64 and riscv) and loongarch use trimmed copy of x86 code although there is no fundamental reason why the same code cannot be used on all these platforms. Having numa_memblks in mm/ will make it's interaction with ACPI and FDT more consistent and I believe will reduce maintenance burden. And with generic numa_memblks it is (almost) straightforward to enable NUMA emulation on arm64 and riscv. The first 9 commits in this series are cleanups that are not strictly related to numa_memblks. Commits 10-16 slightly reorder code in x86 to allow extracting numa_memblks and NUMA emulation to the generic code. Commits 17-19 actually move the code from arch/x86/ to mm/ and commits 20-22 does some aftermath cleanups. Commit 23 updates of_numa_init() to return error of no NUMA nodes were found in the device tree. Commit 24 switches arch_numa to numa_memblks. Commit 25 enables usage of phys_to_target_node() and memory_add_physaddr_to_nid() with numa_memblks. Commit 26 moves the description for numa=fake from x86 to admin-guide. [1] https://lore.kernel.org/all/20240529171236.32002-1-Jonathan.Cameron@huawei.com/ v2: https://lore.kernel.org/all/20240723064156.4009477-1-rppt@kernel.org * rebase on v6.11-rc1 * fix dummy_numa_init() in arch_numa, thanks Zi Yan * update of_numa_init() to return error of no NUMA nodes were * add Tested-by, thanks Zi Yan v1: https://lore.kernel.org/all/20240716111346.3676969-1-rppt@kernel.org * add cleanup for arch_alloc_nodedata and HAVE_ARCH_NODEDATA_EXTENSION * add patch that moves description of numa=fake kernel parameter from x86 to admin-guide * reduce rounding up of node_data allocations from PAGE_SIZE to SMP_CACHE_BYTES * restore single allocation attempt of numa_distance * fix several comments * added review tags Mike Rapoport (Microsoft) (26): mm: move kernel/numa.c to mm/ MIPS: sgi-ip27: make NODE_DATA() the same as on all other architectures MIPS: sgi-ip27: ensure node_possible_map only contains valid nodes MIPS: sgi-ip27: drop HAVE_ARCH_NODEDATA_EXTENSION MIPS: loongson64: rename __node_data to node_data MIPS: loongson64: drop HAVE_ARCH_NODEDATA_EXTENSION mm: drop CONFIG_HAVE_ARCH_NODEDATA_EXTENSION arch, mm: move definition of node_data to generic code arch, mm: pull out allocation of NODE_DATA to generic code x86/numa: simplify numa_distance allocation x86/numa: use get_pfn_range_for_nid to verify that node spans memory x86/numa: move FAKE_NODE_* defines to numa_emu x86/numa_emu: simplify allocation of phys_dist x86/numa_emu: split __apicid_to_node update to a helper function x86/numa_emu: use a helper function to get MAX_DMA32_PFN x86/numa: numa_{add,remove}_cpu: make cpu parameter unsigned mm: introduce numa_memblks mm: move numa_distance and related code from x86 to numa_memblks mm: introduce numa_emulation mm: numa_memblks: introduce numa_memblks_init mm: numa_memblks: make several functions and variables static mm: numa_memblks: use memblock_{start,end}_of_DRAM() when sanitizing meminfo of, numa: return -EINVAL when no numa-node-id is found arch_numa: switch over to numa_memblks mm: make range-to-target_node lookup facility a part of numa_memblks docs: move numa=fake description to kernel-parameters.txt .../admin-guide/kernel-parameters.txt | 15 + .../arch/x86/x86_64/boot-options.rst | 12 - arch/arm64/include/asm/Kbuild | 1 + arch/arm64/include/asm/mmzone.h | 13 - arch/arm64/include/asm/topology.h | 1 + arch/loongarch/include/asm/Kbuild | 1 + arch/loongarch/include/asm/mmzone.h | 16 - arch/loongarch/include/asm/topology.h | 1 + arch/loongarch/kernel/numa.c | 21 - arch/mips/Kconfig | 5 - arch/mips/include/asm/mach-ip27/mmzone.h | 1 - .../mips/include/asm/mach-loongson64/mmzone.h | 4 - arch/mips/loongson64/numa.c | 28 +- arch/mips/sgi-ip27/ip27-memory.c | 12 +- arch/mips/sgi-ip27/ip27-smp.c | 2 + arch/powerpc/include/asm/mmzone.h | 6 - arch/powerpc/mm/numa.c | 26 +- arch/riscv/include/asm/Kbuild | 1 + arch/riscv/include/asm/mmzone.h | 13 - arch/riscv/include/asm/topology.h | 4 + arch/s390/include/asm/Kbuild | 1 + arch/s390/include/asm/mmzone.h | 17 - arch/s390/kernel/numa.c | 3 - arch/sh/include/asm/mmzone.h | 3 - arch/sh/mm/init.c | 7 +- arch/sh/mm/numa.c | 3 - arch/sparc/include/asm/mmzone.h | 4 - arch/sparc/mm/init_64.c | 11 +- arch/x86/Kconfig | 9 +- arch/x86/include/asm/Kbuild | 1 + arch/x86/include/asm/mmzone.h | 6 - arch/x86/include/asm/mmzone_32.h | 17 - arch/x86/include/asm/mmzone_64.h | 18 - arch/x86/include/asm/numa.h | 26 +- arch/x86/include/asm/sparsemem.h | 9 - arch/x86/mm/Makefile | 1 - arch/x86/mm/amdtopology.c | 1 + arch/x86/mm/numa.c | 618 +----------------- arch/x86/mm/numa_internal.h | 24 - drivers/acpi/numa/srat.c | 1 + drivers/base/Kconfig | 1 + drivers/base/arch_numa.c | 224 ++----- drivers/cxl/Kconfig | 2 +- drivers/dax/Kconfig | 2 +- drivers/of/of_numa.c | 5 +- include/asm-generic/mmzone.h | 5 + include/asm-generic/numa.h | 6 +- include/linux/memory_hotplug.h | 48 -- include/linux/numa.h | 5 + include/linux/numa_memblks.h | 58 ++ kernel/Makefile | 1 - kernel/numa.c | 26 - mm/Kconfig | 11 + mm/Makefile | 3 + mm/mm_init.c | 3 +- mm/numa.c | 57 ++ {arch/x86/mm => mm}/numa_emulation.c | 42 +- mm/numa_memblks.c | 568 ++++++++++++++++ 58 files changed, 870 insertions(+), 1160 deletions(-) delete mode 100644 arch/arm64/include/asm/mmzone.h delete mode 100644 arch/loongarch/include/asm/mmzone.h delete mode 100644 arch/riscv/include/asm/mmzone.h delete mode 100644 arch/s390/include/asm/mmzone.h delete mode 100644 arch/x86/include/asm/mmzone.h delete mode 100644 arch/x86/include/asm/mmzone_32.h delete mode 100644 arch/x86/include/asm/mmzone_64.h create mode 100644 include/asm-generic/mmzone.h create mode 100644 include/linux/numa_memblks.h delete mode 100644 kernel/numa.c create mode 100644 mm/numa.c rename {arch/x86/mm => mm}/numa_emulation.c (94%) create mode 100644 mm/numa_memblks.c base-commit: 8400291e289ee6b2bf9779ff1c83a291501f017b Tested-by: Jonathan Cameron #arm64 + CXL via QEMU Acked-by: Dan Williams