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 85B43C83F05 for ; Fri, 4 Jul 2025 06:34:44 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2A7766B8010; Fri, 4 Jul 2025 02:34:44 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 258296B800A; Fri, 4 Jul 2025 02:34:44 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1955B6B8010; Fri, 4 Jul 2025 02:34:44 -0400 (EDT) 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 097C36B800A for ; Fri, 4 Jul 2025 02:34:44 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 7BBC2141E53 for ; Fri, 4 Jul 2025 06:34:43 +0000 (UTC) X-FDA: 83625618846.16.08E6FC2 Received: from nyc.source.kernel.org (nyc.source.kernel.org [147.75.193.91]) by imf01.hostedemail.com (Postfix) with ESMTP id E016540004 for ; Fri, 4 Jul 2025 06:34:41 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=r08oymXx; spf=pass (imf01.hostedemail.com: domain of hare@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=hare@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1751610881; 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:in-reply-to:references:references:dkim-signature; bh=fpK6XpePUHEKBoGgh7vQpqbx1ACIAPrO0W0R1FJ+2XM=; b=OTFBKUpekM+OGWIYR0nyygKtNCzCobj09JwEvzuEhpc6tUx2GII5aWWQuynVi3KXRj3duC 2e5csMjflgQRHmsqShVDuqIRSDmuCl+0MVrFGe49KkTg1yskIlMnI8onbXErwLbZPHU0qn kk3iKC1eJCowZISGP/zi60tKG7BBmVM= ARC-Authentication-Results: i=1; imf01.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=r08oymXx; spf=pass (imf01.hostedemail.com: domain of hare@kernel.org designates 147.75.193.91 as permitted sender) smtp.mailfrom=hare@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1751610881; a=rsa-sha256; cv=none; b=tHjPIDaCdVmnKwvrvszFRkhO3juymIn+Wn33oyxvAG4VHXUTQPS+6xrof8MbbC3brmi7nb xA8zpYwZfe5sXAsApOu4QgFOdqSV8HZMIuOP6PlhaEJkuvb06z8CHV8ChTsH/YzD1JCFuV TaLO/vTlxCTeErJs1kika1hnKy0IAOs= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by nyc.source.kernel.org (Postfix) with ESMTP id 38EB6A5371F; Fri, 4 Jul 2025 06:34:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id C4ED6C4CEE3; Fri, 4 Jul 2025 06:34:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1751610880; bh=N1VmI44P7PQBTvMJQ52xUl2nZyVbx41zc0y/WIQ0LDw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r08oymXx1wRCquWTZ0fO0pk0VvsPdmCg6ICLP95ymUBKeSmzOwjhSKOI0ie4au5Su 91UFR+9k9J3jTM8rSZL52CYixD2TNmFG+dDB2m5hzAgqr/uSqLIM+ZOxanrbFQYi2H o1nOWhvDRkd499jD7518QPPdfJFLoNYo1M4D5bIkM6yxmapSWfgNKy+/wCV6w4qG76 jmusnaZXsQm+/sjjUfUv0bM0Ii7MQC7PdMhQvlKj/wa8azJGHnxiMyIrzZCerHjZF9 YyOblCZmK30Yr0cfQbbKm1ucT9SDO6V7MjJ6IsexeP8sA8JYXdNnoctfKF94YplgUV OnFvv8Yu1/1MQ== From: Hannes Reinecke To: David Hildenbrand Cc: Oscar Salvador , linux-mm@kvack.org, Hannes Reinecke Subject: [PATCH 2/3] mm/memory_hotplug: activate node before adding new memory blocks Date: Fri, 4 Jul 2025 08:34:03 +0200 Message-ID: <20250704063404.27495-3-hare@kernel.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704063404.27495-1-hare@kernel.org> References: <20250704063404.27495-1-hare@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: E016540004 X-Stat-Signature: ei68hjds3gu9pibi4q85s4ytkdxmzp31 X-Rspam-User: X-Rspamd-Server: rspam05 X-HE-Tag: 1751610881-188183 X-HE-Meta: U2FsdGVkX1/zkaZ8C0bxAQUdG26KDLezlrOUyxzwooeJreSvEtxnTkBkvaSgJtjraX+D1QHFkdl15JArTsEmRSdHqr8b//fXqJOMCTbGSq9GYJ2MoXsTP6TlpXcAbvKuhFOnkgBIONMM2KSLCNkJ0f8VZmhwUgRzlaXtCRAKHwtttGIc4/QDZIZf5nQk/6+mPTRgo5fGP4m7YuiU+7syFERVWHaWZ5tnCkjnpq6CH5pN+qjPtX4/G4M2GtnGpD2YUHkqmeDU/2qY0OA7rxNZrFgBbI72GNyNlI87+1B4jfGcGA9RQyJoPDLXz6CfGBqM3spmNoBfF8GHJVqB/rfemQmfDzGeEVXJcJWibD4R9Cfwv3N93SZ9GgHOtXNERn12nKDp99Pj5u4BQC+ZV6UX/iowyipIlNPv8GcOpJcaNocwe6uQXX2FMthvJ7X7LGKd6PrDQgEgIZht8pl/1RIJlJq+8pLnWky+3nKxPrsY2ElKHhn16CmX71Q3xHKp4yyRnfZg8Gw1VwK9arEJG6rjK/sMVWyt8uC+LuTHuEcGUvIlIT7ZduaF3y5WXZPakrOGMfUoZ9dMj0dF0l5F6Yci9RGG9tEstOOl0jkfXzPnaUeqvhQqWSreHI4eYiM6BaNKRpppaJTYaAJW5KYj45AAQGKhWKduKvrtKLlAq1VjiC77yXPfO4Jmhg46E7lIE76pvmYmq3mY6L2MJpfq19XvuMLZYzLe6K6Oq8TovY6iAbmH+jlvqkSMZYORg6xvTg45o4qR6gD543e0LFICnYV+cSbO/EXUP8N3txzSf9dtjfF+XEx7zrmZcK0BGmo2Nxzq1xH795iXqfzjwqc4c/L3gvBq5NozvrVGF/va1alKTPgHaSf4v1Av29URTzQ0UaVEDHwskwlc6J4Vll9V15ePAPT2rKP/X8lBo/zswTjhV9LZrZPCycPlTY8cCVbrBOpV4WVw5XZY57kvjkbgexi DytmdKEy ZNCZxtgSWfq1/cXacbvWd6wfZSznE2eCtK2hrU1muRAwhTkhjO3/oq7PYVExXTDL0T6oDnEd1K4fmIBIcFBU9IXiyoCazRTFuHMHtL9CbhN4WZcDye97ZdoAZuA04dD163oiR/YHRMOHYZ3478EGWs2bkWP6E0FrqfhYqpx+ccAOgzJH5pzzMLtvgRn+uDaZTmSjyfxTWDDdMMT67F2aXSBLZihn7Pusin5LTa5oCkDqn+ol5BS9fB1qowXe51JGeAAtmgxdsU1sWbwJqirnIVJXbbBf6mzq3FHHLyP2+twxvuOrhcn9NuC/aha2kxrCtL1CSLdboOZDt5Q0= 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: The sysfs attributes for memory blocks require the node ID to be set and initialized, so move the node activation before adding new memory blocks. This also has the nice side effect that the BUG_ON() can be converted into a WARN_ON() as we now can handle registration errors. Fixes: b9ff036082cd ("mm/memory_hotplug.c: make add_memory_resource use __try_online_node") Signed-off-by: Hannes Reinecke Acked-by: David Hildenbrand --- drivers/base/memory.c | 4 ++-- include/linux/memory.h | 2 +- mm/memory_hotplug.c | 32 +++++++++++++++++--------------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 2b951e5f8a27..4ce93fb54525 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -892,7 +892,7 @@ static void remove_memory_block(struct memory_block *memory) * Called under device_hotplug_lock. */ int create_memory_block_devices(unsigned long start, unsigned long size, - struct vmem_altmap *altmap, + int nid, struct vmem_altmap *altmap, struct memory_group *group) { const unsigned long start_block_id = pfn_to_block_id(PFN_DOWN(start)); @@ -906,7 +906,7 @@ int create_memory_block_devices(unsigned long start, unsigned long size, return -EINVAL; for (block_id = start_block_id; block_id != end_block_id; block_id++) { - ret = add_memory_block(block_id, NUMA_NO_NODE, MEM_OFFLINE, altmap, group); + ret = add_memory_block(block_id, nid, MEM_OFFLINE, altmap, group); if (ret) break; } diff --git a/include/linux/memory.h b/include/linux/memory.h index 5ec4e6d209b9..d7c3a4856031 100644 --- a/include/linux/memory.h +++ b/include/linux/memory.h @@ -161,7 +161,7 @@ static inline unsigned long memory_block_advised_max_size(void) extern int register_memory_notifier(struct notifier_block *nb); extern void unregister_memory_notifier(struct notifier_block *nb); int create_memory_block_devices(unsigned long start, unsigned long size, - struct vmem_altmap *altmap, + int nid, struct vmem_altmap *altmap, struct memory_group *group); void remove_memory_block_devices(unsigned long start, unsigned long size); extern void memory_dev_init(void); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index b1caedbade5b..204bd6f19d8d 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1478,7 +1478,7 @@ static int create_altmaps_and_memory_blocks(int nid, struct memory_group *group, } /* create memory block devices after memory was added */ - ret = create_memory_block_devices(cur_start, memblock_size, + ret = create_memory_block_devices(cur_start, memblock_size, nid, params.altmap, group); if (ret) { arch_remove_memory(cur_start, memblock_size, NULL); @@ -1540,8 +1540,16 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) ret = __try_online_node(nid, false); if (ret < 0) - goto error; - new_node = ret; + goto error_memblock_remove; + if (ret) { + node_set_online(nid); + ret = __register_one_node(nid); + if (WARN_ON(ret)) { + node_set_offline(nid); + goto error_memblock_remove; + } + new_node = true; + } /* * Self hosted memmap array @@ -1557,24 +1565,13 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) goto error; /* create memory block devices after memory was added */ - ret = create_memory_block_devices(start, size, NULL, group); + ret = create_memory_block_devices(start, size, nid, NULL, group); if (ret) { arch_remove_memory(start, size, params.altmap); goto error; } } - if (new_node) { - /* If sysfs file of new node can't be created, cpu on the node - * can't be hot-added. There is no rollback way now. - * So, check by BUG_ON() to catch it reluctantly.. - * We online node here. We can't roll back from here. - */ - node_set_online(nid); - ret = __register_one_node(nid); - BUG_ON(ret); - } - register_memory_blocks_under_node(nid, PFN_DOWN(start), PFN_UP(start + size - 1), MEMINIT_HOTPLUG); @@ -1599,6 +1596,11 @@ int add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags) return ret; error: + if (new_node) { + node_set_offline(nid); + unregister_one_node(nid); + } +error_memblock_remove: if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) memblock_remove(start, size); error_mem_hotplug_end: -- 2.43.0