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 X-Spam-Level: X-Spam-Status: No, score=-3.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4022EC2D0DB for ; Tue, 28 Jan 2020 13:50:25 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id DB9AC24683 for ; Tue, 28 Jan 2020 13:50:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=kernel.org header.i=@kernel.org header.b="i6z0mfj0" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB9AC24683 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=linuxfoundation.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4FFAD6B0275; Tue, 28 Jan 2020 08:50:12 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 48A116B0276; Tue, 28 Jan 2020 08:50:12 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B5406B0277; Tue, 28 Jan 2020 08:50:12 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0129.hostedemail.com [216.40.44.129]) by kanga.kvack.org (Postfix) with ESMTP id 0BB4E6B0275 for ; Tue, 28 Jan 2020 08:50:12 -0500 (EST) Received: from smtpin23.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with SMTP id A7A3C2497 for ; Tue, 28 Jan 2020 13:50:11 +0000 (UTC) X-FDA: 76427177022.23.crowd08_3bd99005bcc41 X-HE-Tag: crowd08_3bd99005bcc41 X-Filterd-Recvd-Size: 11784 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by imf36.hostedemail.com (Postfix) with ESMTP for ; Tue, 28 Jan 2020 13:50:11 +0000 (UTC) Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B585B24683; Tue, 28 Jan 2020 13:50:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1580219410; bh=QAUoOh1QOvX9jeFJcj7Xn+A4U5WsbCiSUIjAUouHSnI=; h=Subject:To:Cc:From:Date:In-Reply-To:From; b=i6z0mfj0N9cEzTBZqBi1FOh3hEJ0vvC6WiziFkrVxfI/ymzUv/dmt7AonnaKowBd5 FXIyb6A/wVHBcVzJsvSHK2PrjS/4CFAHMSrBeBR5p97JBQDT3oGGR07mh9pT28mbG5 ICkScoToAeH9Vc07kKBiS34eGJmqMigK4zU5Te1k= Subject: Patch "mm/memory_hotplug: make unregister_memory_block_under_nodes() never fail" has been added to the 4.19-stable tree To: 20190527111152.16324-11-david@redhat.com,Jonathan.Cameron@huawei.com,akpm@linux-foundation.org,alexander.deucher@amd.com,andrew.banman@hpe.com,aneesh.kumar@linux.ibm.com,anshuman.khandual@arm.com,ard.biesheuvel@linaro.org,arunks@codeaurora.org,benh@kernel.crashing.org,bhe@redhat.com,bp@alien8.de,broonie@kernel.org,cai@lca.pw,catalin.marinas@arm.com,chris@chris-wilson.co.uk,christophe.leroy@c-s.fr,cpandya@codeaurora.org,dalias@libc.org,dan.j.williams@intel.com,dave.hansen@linux.intel.com,davem@davemloft.net,david@redhat.com,fenghua.yu@intel.com,gor@linux.ibm.com,gregkh@linuxfoundation.org,heiko.carstens@de.ibm.com,hpa@zytor.com,iamjoonsoo.kim@lge.com,kirill.shutemov@linux.intel.com,linux-mm@kvack.org,logang@deltatee.com,luto@kernel.org,malat@debian.org,mark.rutland@arm.com,mhocko@suse.com,mike.travis@hpe.com,mingo@kernel.org,mpe@ellerman.id.au,npiggin@gmail.com,osalvador@suse.de,pasha.tatashin@soleen.com,paulus@samba.org,peterz@infradead.org,rafael@kernel.org,richard.weiya ng@gmail .com,richardw.yang@linux.intel.com,robh@kernel.org,robin.murphy@arm.com,rppt@linux.vnet.ibm.com,tglx@linutronix.de,tony.luck@intel.com,torvalds@linux-foundation.org,will.deacon@arm.com,yamada.masahiro@socionext.com,yaojun8558363@gmail.com,ysato@users.sourceforge.jp,yuzhao@google.com Cc: From: Date: Tue, 28 Jan 2020 14:49:43 +0100 In-Reply-To: <20200128095021.8076-19-david@redhat.com> Message-ID: <1580219383162190@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 X-stable: commit X-Patchwork-Hint: ignore Content-Transfer-Encoding: quoted-printable 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: This is a note to let you know that I've just added the patch titled mm/memory_hotplug: make unregister_memory_block_under_nodes() never f= ail to the 4.19-stable tree which can be found at: http://www.kernel.org/git/?p=3Dlinux/kernel/git/stable/stable-queue.g= it;a=3Dsummary The filename of the patch is: mm-memory_hotplug-make-unregister_memory_block_under_nodes-never-fai= l.patch and it can be found in the queue-4.19 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let know about it. >From foo@baz Tue 28 Jan 2020 02:32:10 PM CET From: David Hildenbrand Date: Tue, 28 Jan 2020 10:50:15 +0100 Subject: mm/memory_hotplug: make unregister_memory_block_under_nodes() ne= ver fail To: stable@vger.kernel.org Cc: linux-mm@kvack.org, Michal Hocko , Greg Kroah-Hartma= n , Andrew Morton = , "Aneesh Kumar K . V" , Baoquan He , Dan Williams , Oscar Salvador , Wei Yang , David Hildenbrand Message-ID: <20200128095021.8076-19-david@redhat.com> From: David Hildenbrand commit a31b264c2b415b29660da0bc2ba291a98629ce51 upstream. We really don't want anything during memory hotunplug to fail. We always pass a valid memory block device, that check can go. Avoid allocating memory and eventually failing. As we are always called under lock, we can use a static piece of memory. This avoids having to put the structure onto the stack, having to guess about the stack size of callers. Patch inspired by a patch from Oscar Salvador. In the future, there might be no need to iterate over nodes at all. mem->nid should tell us exactly what to remove. Memory block devices with mixed nodes (added during boot) should properly fenced off and never removed. Link: http://lkml.kernel.org/r/20190527111152.16324-11-david@redhat.com Signed-off-by: David Hildenbrand Reviewed-by: Wei Yang Reviewed-by: Oscar Salvador Acked-by: Michal Hocko Cc: Greg Kroah-Hartman Cc: "Rafael J. Wysocki" Cc: Alex Deucher Cc: "David S. Miller" Cc: Mark Brown Cc: Chris Wilson Cc: David Hildenbrand Cc: Jonathan Cameron Cc: Andrew Banman Cc: Andy Lutomirski Cc: Anshuman Khandual Cc: Ard Biesheuvel Cc: Arun KS Cc: Baoquan He Cc: Benjamin Herrenschmidt Cc: Borislav Petkov Cc: Catalin Marinas Cc: Chintan Pandya Cc: Christophe Leroy Cc: Dan Williams Cc: Dave Hansen Cc: Fenghua Yu Cc: Heiko Carstens Cc: "H. Peter Anvin" Cc: Ingo Molnar Cc: Joonsoo Kim Cc: Jun Yao Cc: "Kirill A. Shutemov" Cc: Logan Gunthorpe Cc: Mark Rutland Cc: Masahiro Yamada Cc: Mathieu Malaterre Cc: Michael Ellerman Cc: Mike Rapoport Cc: "mike.travis@hpe.com" Cc: Nicholas Piggin Cc: Paul Mackerras Cc: Pavel Tatashin Cc: Peter Zijlstra Cc: Qian Cai Cc: Rich Felker Cc: Rob Herring Cc: Robin Murphy Cc: Thomas Gleixner Cc: Tony Luck Cc: Vasily Gorbik Cc: Will Deacon Cc: Yoshinori Sato Cc: Yu Zhao Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: David Hildenbrand Signed-off-by: Greg Kroah-Hartman --- drivers/base/node.c | 18 +++++------------- include/linux/node.h | 5 ++--- 2 files changed, 7 insertions(+), 16 deletions(-) --- a/drivers/base/node.c +++ b/drivers/base/node.c @@ -455,20 +455,14 @@ int register_mem_sect_under_node(struct =20 /* * Unregister memory block device under all nodes that it spans. + * Has to be called with mem_sysfs_mutex held (due to unlinked_nodes). */ -int unregister_memory_block_under_nodes(struct memory_block *mem_blk) +void unregister_memory_block_under_nodes(struct memory_block *mem_blk) { - NODEMASK_ALLOC(nodemask_t, unlinked_nodes, GFP_KERNEL); unsigned long pfn, sect_start_pfn, sect_end_pfn; + static nodemask_t unlinked_nodes; =20 - if (!mem_blk) { - NODEMASK_FREE(unlinked_nodes); - return -EFAULT; - } - if (!unlinked_nodes) - return -ENOMEM; - nodes_clear(*unlinked_nodes); - + nodes_clear(unlinked_nodes); sect_start_pfn =3D section_nr_to_pfn(mem_blk->start_section_nr); sect_end_pfn =3D section_nr_to_pfn(mem_blk->end_section_nr); for (pfn =3D sect_start_pfn; pfn <=3D sect_end_pfn; pfn++) { @@ -479,15 +473,13 @@ int unregister_memory_block_under_nodes( continue; if (!node_online(nid)) continue; - if (node_test_and_set(nid, *unlinked_nodes)) + if (node_test_and_set(nid, unlinked_nodes)) continue; sysfs_remove_link(&node_devices[nid]->dev.kobj, kobject_name(&mem_blk->dev.kobj)); sysfs_remove_link(&mem_blk->dev.kobj, kobject_name(&node_devices[nid]->dev.kobj)); } - NODEMASK_FREE(unlinked_nodes); - return 0; } =20 int link_mem_sections(int nid, unsigned long start_pfn, unsigned long en= d_pfn) --- a/include/linux/node.h +++ b/include/linux/node.h @@ -72,7 +72,7 @@ extern int register_cpu_under_node(unsig extern int unregister_cpu_under_node(unsigned int cpu, unsigned int nid)= ; extern int register_mem_sect_under_node(struct memory_block *mem_blk, void *arg); -extern int unregister_memory_block_under_nodes(struct memory_block *mem_= blk); +extern void unregister_memory_block_under_nodes(struct memory_block *mem= _blk); =20 #ifdef CONFIG_HUGETLBFS extern void register_hugetlbfs_with_node(node_registration_func_t doregi= ster, @@ -104,9 +104,8 @@ static inline int register_mem_sect_unde { return 0; } -static inline int unregister_memory_block_under_nodes(struct memory_bloc= k *mem_blk) +static inline void unregister_memory_block_under_nodes(struct memory_blo= ck *mem_blk) { - return 0; } =20 static inline void register_hugetlbfs_with_node(node_registration_func_t= reg, Patches currently in stable-queue which might be from david@redhat.com ar= e queue-4.19/mm-memory_hotplug-remove-memory-block-devices-before-arch_remo= ve_memory.patch queue-4.19/mm-hotplug-kill-is_dev_zone-usage-in-__remove_pages.patch queue-4.19/mm-memory_hotplug-create-memory-block-devices-after-arch_add_m= emory.patch queue-4.19/drivers-base-memory-pass-a-block_id-to-init_memory_block.patch queue-4.19/drivers-base-memory.c-clean-up-relics-in-function-parameters.p= atch queue-4.19/mm-memory_hotplug-update-a-comment-in-unregister_memory.patch queue-4.19/mm-memory_hotplug-shrink-zones-when-offlining-memory.patch queue-4.19/mm-memory_hotplug-make-unregister_memory_block_under_nodes-nev= er-fail.patch queue-4.19/mm-memunmap-don-t-access-uninitialized-memmap-in-memunmap_page= s.patch queue-4.19/mm-memory_hotplug-make-__remove_section-never-fail.patch queue-4.19/mm-sparse-drop-pgdat_resize_lock-in-sparse_add-remove_one_sect= ion.patch queue-4.19/mm-memory_hotplug-make-unregister_memory_section-never-fail.pa= tch queue-4.19/mm-memory_hotplug-release-memory-resource-after-arch_remove_me= mory.patch queue-4.19/mm-memory_hotplug-add-nid-parameter-to-arch_remove_memory.patc= h queue-4.19/powerpc-mm-fix-section-mismatch-warning.patch queue-4.19/mm-memory_hotplug-allow-arch_remove_memory-without-config_memo= ry_hotremove.patch queue-4.19/mm-memory_hotplug-make-remove_memory-take-the-device_hotplug_l= ock.patch queue-4.19/mm-memory_hotplug-make-__remove_pages-and-arch_remove_memory-n= ever-fail.patch queue-4.19/mm-memory_hotplug-fix-try_offline_node.patch queue-4.19/mm-memory_hotplug-remove-zone-parameter-from-sparse_remove_one= _section.patch queue-4.19/drivers-base-memory.c-remove-an-unnecessary-check-on-nr_mem_se= ctions.patch queue-4.19/drivers-base-node.c-simplify-unregister_memory_block_under_nod= es.patch queue-4.19/s390x-mm-implement-arch_remove_memory.patch queue-4.19/mm-sparse-pass-nid-instead-of-pgdat-to-sparse_add_one_section.= patch