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 CA47CC71155 for ; Mon, 16 Jun 2025 12:33:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 559E38D0006; Mon, 16 Jun 2025 08:33:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 50A7C8D0005; Mon, 16 Jun 2025 08:33:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F94C8D0006; Mon, 16 Jun 2025 08:33:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 342568D0005 for ; Mon, 16 Jun 2025 08:33:01 -0400 (EDT) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id D9EDEB627F for ; Mon, 16 Jun 2025 12:33:00 +0000 (UTC) X-FDA: 83561203320.12.994A646 Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.223.130]) by imf06.hostedemail.com (Postfix) with ESMTP id A414F18000B for ; Mon, 16 Jun 2025 12:32:58 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=j9FfApOZ; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=KmNOV6uW; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=GbZbGM8o; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=Rzw6rv9K; dmarc=pass (policy=none) header.from=suse.de; spf=pass (imf06.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.130 as permitted sender) smtp.mailfrom=osalvador@suse.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750077179; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=gVMuZ31mFi2uH+VZBaaisw/uEdjo/iMkeB0fQGy/mHo=; b=xhanZRYL6wUIsUy97wbi3wUgGx1EVJfsoWB+Ah6aMwyfs3mb3t+QoQ6sCg4CU8egK33Q8M EqcFQ3HJwOiRGBC1axIkmUEPTak/yAPZoDSiIZuyUyzbfiov2rCRpINTXo4nXubgonuTiF IlZwJJwmS3N8aR98TNu3TsQUDCMFp9I= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750077179; a=rsa-sha256; cv=none; b=SCC2/Bs4fIWK4qVVW0YrjMbJF7L/HkAML+03dDuQ48FB8602sNzYJiOZ/bDGfkprRoCLRL soDwcTKa05SZJunEkhUO+QIKKmleOyKnsnz7pJGKdDmnjfMZBx5vHj9lDs690g+z/KNaUq 75KI2nTXglennG3dqDEPcysjIcIP9dQ= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=j9FfApOZ; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=KmNOV6uW; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=GbZbGM8o; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=Rzw6rv9K; dmarc=pass (policy=none) header.from=suse.de; spf=pass (imf06.hostedemail.com: domain of osalvador@suse.de designates 195.135.223.130 as permitted sender) smtp.mailfrom=osalvador@suse.de Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id CFAAB211A3; Mon, 16 Jun 2025 12:32:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1750077177; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gVMuZ31mFi2uH+VZBaaisw/uEdjo/iMkeB0fQGy/mHo=; b=j9FfApOZWtbgJFHk+Ik2mh10HTTqMtgyd8JYvPZk8gFIaKoBIhXqHTib1MyEBYooT5jP0a uYtNm9ntqPUYruqsWT6cSPmjre6s86orQExkUkzNjOfJOZt6jLA1tcPGb57x3eaRPRPCQL ygtI+n6L+Nr2F+65E4jevdwv3w9IfSI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1750077177; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gVMuZ31mFi2uH+VZBaaisw/uEdjo/iMkeB0fQGy/mHo=; b=KmNOV6uWXeK3ssLS2cKHoi3+4lFkwPpLio4BDZtPuu6WBtxdoe06Grrv5Y822nHO2X1DWb 36IuafMLmJZrOrDw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1750077176; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gVMuZ31mFi2uH+VZBaaisw/uEdjo/iMkeB0fQGy/mHo=; b=GbZbGM8o1DSBmIn8dbTFYcVEDItw6lg4nBypYHonYgsIJ+oCaJMzYNbieb5xsxuXLb2AJi zQ1W6WfOBLo0vDbUfokCNzVAhnuCaXTrxhAyRYrndjPpNWZFX4tjBlLFnx1FScL4iujRBS AnkQE++KaNlrNbeIKF43C5VeU+OYvgI= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1750077176; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=gVMuZ31mFi2uH+VZBaaisw/uEdjo/iMkeB0fQGy/mHo=; b=Rzw6rv9KlwEF0HvE29gHURgQ0YXv4QMzd8KiBeuau8mR//srGn+qiMUEjFcOBhpmU++lSx 1oI9WDG9U3NX2sDg== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 473FB139E2; Mon, 16 Jun 2025 12:32:56 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id 29HBDvgOUGhnCQAAD6G6ig (envelope-from ); Mon, 16 Jun 2025 12:32:56 +0000 Date: Mon, 16 Jun 2025 14:32:54 +0200 From: Oscar Salvador To: David Hildenbrand Cc: Andrew Morton , Vlastimil Babka , Jonathan Cameron , Harry Yoo , Rakie Kim , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Joshua Hahn , linux-mm@kvack.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v6 03/10] mm,memory_hotplug: Implement numa node notifier Message-ID: References: <20250609092149.312114-1-osalvador@suse.de> <20250609092149.312114-4-osalvador@suse.de> <2bec8b53-f788-493e-a76e-1f804ed3aa0c@redhat.com> <10c87a0e-c9fe-48fe-9bbd-16afd244b4ec@redhat.com> <360f2f04-4542-4595-bf36-c45ed10335af@redhat.com> <23431108-b5b8-4c8a-8869-8f994371e7a5@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <23431108-b5b8-4c8a-8869-8f994371e7a5@redhat.com> X-Rspamd-Action: no action X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: A414F18000B X-Stat-Signature: zkp3a8xff4fd7dfj9gcs7yi5e3f9xzwz X-Rspam-User: X-HE-Tag: 1750077178-389111 X-HE-Meta: U2FsdGVkX1+mvhaFeG1aSzIxWRlzH5RmGKKXyZO3PcFBuFXDtLv+k38yiRT8gkXdymSuKUZJqHvJ5UUYkSqRDnKZ+jDzVnFebqZIQ5hEqEjbx/MgFxTOC0Aj1t72TLDXyB8JrcEsdNn46q3HdnObLQZBrRWuLgX9VvyhP8PwURVOPq6e9fsFyBNerqXips0LN9DxuA7qGPezuIWDhng/XVkS+B60ka1QpmUt9VQ5oM3rbwAq921sCltlYmJr/179AEyQD6Ezokr/M60cBMsWisG8J3aaKErkwDyQD5ySZA35le4zHvFlj2n6g4UQMt1egA+3nRqFIAfjCy2XIR5x+sOL5XiVM6GRoDKFAWxYaVA8W3NvDdVGcEJMTggsZKrtFYOQMCVi8/wmzXIeSVMK5ZAt2I2yOYK2D9hB3Gtt0TXctQFV95OTW0CymXK81qMpbDDAXQp1taf4yWmsgxNS8I5vtr9FtXjzebift02tr6GW7ISs6uwHdcy9pvtTqL/06P+r+WXe5TAphncV266taHwh/BFJ0NxMXKlw/K/7qx05DvwoZgDZi279FqdiJwddH9QzpAu/eBKt+ISZh2vhBwImyb8D+mYgeRBAfVK32yBl6ZvTpbr0tMEweqOIX5CuMr10sXUjsgFIxuwO/uEJ/o8pqTDV/RPcdQ9kE1eIXE09rj/zpkf1Qf39ujQMvjSwkvnDULmf5H+a4VBD5wHKp33JIp4aCMVVRX+BiYOz4VsvmbLEPhwrXnXOSLjOt7mr/UNHAn48d2JW+ei1Llune70IxOmCRx9vDwthhxbJoV4av6Nv8iatg3rQTUGoChygcl5v+mTymuGWdrw7Iap94YHDHUxAT6shXPYuLkxZFVfF9mvlB0As5JvoZ3lY0KdfKwLoh6lywRvwlpAwOJgRpnb2HCzbqUFHi5yvKdfCh3XbS+E7thgOgwmlXV2afR5WLNaowuXWPBsg8f5HoDy 3MHkBp5n YV/rFGHFlEWGORCHSptSJVkaXVPU5KdZrbqUBaVLVbPu/I5tP+VpnH/bbKA== 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 Mon, Jun 16, 2025 at 02:21:02PM +0200, David Hildenbrand wrote: > Exactly. I recall I checked some of them in the past as well, when I > stumbled over this behavior. Now, about simplying the cancel_{mem,node}_notifier_on_err. It would look like this: diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index d6df85452c72..ff887f10b114 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1150,11 +1150,16 @@ void mhp_deinit_memmap_on_memory(unsigned long pfn, unsigned long nr_pages) int online_pages(unsigned long pfn, unsigned long nr_pages, struct zone *zone, struct memory_group *group) { - bool cancel_mem_notifier_on_err = false, cancel_node_notifier_on_err = false; const int nid = zone_to_nid(zone); int need_zonelists_rebuild = 0; - struct memory_notify mem_arg; - struct node_notify node_arg; + struct memory_notify mem_arg = { + .start_pfn = pfn, + .nr_pages = nr_pages, + .status_change_nid = NUMA_NO_NODE, + }; + struct node_notify node_arg = { + .nid = NUMA_NO_NODE, + }; unsigned long flags; int ret; @@ -1173,21 +1178,16 @@ int online_pages(unsigned long pfn, unsigned long nr_pages, /* associate pfn range with the zone */ move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_ISOLATE); - node_arg.nid = NUMA_NO_NODE; if (!node_state(nid, N_MEMORY)) { /* Adding memory to the node for the first time */ - cancel_node_notifier_on_err = true; node_arg.nid = nid; + mem_arg.status_change_nid = nid; ret = node_notify(NODE_ADDING_FIRST_MEMORY, &node_arg); ret = notifier_to_errno(ret); if (ret) goto failed_addition; } - mem_arg.start_pfn = pfn; - mem_arg.nr_pages = nr_pages; - mem_arg.status_change_nid = node_arg.nid; - cancel_mem_notifier_on_err = true; ret = memory_notify(MEM_GOING_ONLINE, &mem_arg); ret = notifier_to_errno(ret); if (ret) @@ -1249,9 +1249,8 @@ int online_pages(unsigned long pfn, unsigned long nr_pages, pr_debug("online_pages [mem %#010llx-%#010llx] failed\n", (unsigned long long) pfn << PAGE_SHIFT, (((unsigned long long) pfn + nr_pages) << PAGE_SHIFT) - 1); - if (cancel_mem_notifier_on_err) - memory_notify(MEM_CANCEL_ONLINE, &mem_arg); - if (cancel_node_notifier_on_err) + memory_notify(MEM_CANCEL_ONLINE, &mem_arg); + if (node_arg.nid != NUMA_NO_NODE) node_notify(NODE_CANCEL_ADDING_FIRST_MEMORY, &node_arg); remove_pfn_range_from_zone(zone, pfn, nr_pages); return ret; @@ -1899,13 +1898,18 @@ static int count_system_ram_pages_cb(unsigned long start_pfn, int offline_pages(unsigned long start_pfn, unsigned long nr_pages, struct zone *zone, struct memory_group *group) { - bool cancel_mem_notifier_on_err = false, cancel_node_notifier_on_err = false; unsigned long pfn, managed_pages, system_ram_pages = 0; const unsigned long end_pfn = start_pfn + nr_pages; struct pglist_data *pgdat = zone->zone_pgdat; const int node = zone_to_nid(zone); - struct memory_notify mem_arg; - struct node_notify node_arg; + struct memory_notify mem_arg = { + .start_pfn = pfn, + .nr_pages = nr_pages, + .status_change_nid = NUMA_NO_NODE, + }; + struct node_notify node_arg = { + .nid = NUMA_NO_NODE, + }; unsigned long flags; char *reason; int ret; @@ -1970,20 +1974,15 @@ int offline_pages(unsigned long start_pfn, unsigned long nr_pages, * 'nr_pages' more. If so, we know that the node will become empty, and * so we will clear N_MEMORY for it. */ - node_arg.nid = NUMA_NO_NODE; if (nr_pages >= pgdat->node_present_pages) { node_arg.nid = node; - cancel_node_notifier_on_err = true; + mem_arg.status_change_nid = node; ret = node_notify(NODE_REMOVING_LAST_MEMORY, &node_arg); ret = notifier_to_errno(ret); if (ret) goto failed_removal_isolated; } - mem_arg.start_pfn = start_pfn; - mem_arg.nr_pages = nr_pages; - mem_arg.status_change_nid = node_arg.nid; - cancel_mem_notifier_on_err = true; ret = memory_notify(MEM_GOING_OFFLINE, &mem_arg); ret = notifier_to_errno(ret); if (ret) { @@ -2087,9 +2086,8 @@ int offline_pages(unsigned long start_pfn, unsigned long nr_pages, failed_removal_isolated: /* pushback to free area */ undo_isolate_page_range(start_pfn, end_pfn, MIGRATE_MOVABLE); - if (cancel_mem_notifier_on_err) - memory_notify(MEM_CANCEL_OFFLINE, &mem_arg); - if (cancel_node_notifier_on_err) + memory_notify(MEM_CANCEL_OFFLINE, &mem_arg); + if (node_arg.nid != NUMA_NO_NODE) node_notify(NODE_CANCEL_REMOVING_LAST_MEMORY, &node_arg); failed_removal_pcplists_disabled: lru_cache_enable(); Not sure if I like keeping the cancel_* stuff. Strong opinion here? Feelings? :-) -- Oscar Salvador SUSE Labs