Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp207452rdh; Thu, 23 Nov 2023 01:25:02 -0800 (PST) X-Google-Smtp-Source: AGHT+IHgIGjjVOzyoKAUQ0UKy6H+mRO5mzeeuDe1g77GYXYAtoZ4LrMEZOGbjn2GvaTTEUQG6Hhw X-Received: by 2002:a17:902:9f97:b0:1cc:6ec2:d24e with SMTP id g23-20020a1709029f9700b001cc6ec2d24emr5310922plq.53.1700731501784; Thu, 23 Nov 2023 01:25:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700731501; cv=none; d=google.com; s=arc-20160816; b=WxX7HGYZOiPRb9GJsaZB33yYxJt4FC49pOExS5S6f4vgPeOsgkTy2i9H0Xxkq7kxkz jIoHM1qpyn6fVDVFa+k2ytW9PsYc3Y5JT5LsdZbTWSwAyJq9/6ih26W9ipqk4c0cTjD1 DFGrqXymzuYzmsPOyCVi+/BTGc5cjrn1obIbrCRf5DbXMf1YmLgQPAY2IVpprg8dNcmE KiVFDWO/1wX0rBVqvGKuSSk7m+epJ98c3bQWxQqMhdWKyfON0SZ8XDVWghmNt7Vw5A7x Cg5uB1YGeK3gYed5TEh4D/2If4HONouNYLt8U2ayUmwkUNCVAlDF8LtjkPc1YfEpKWIE AJLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=uoYg6XFVhnl9z1m4lIqYlmnlEpI3Bitpu8U7076l1/0=; fh=gDYt9MY/1X/h5fcLsrPXNJSbxtFOUO5bXnC2IdpKvq4=; b=w15vx06XG04DG7Ql4dKOvoIPXV4pInKYHanr8AIwJVe3rQj7smd37bKXRtcIXHoltt BE/1mEEdQExDd9X8EtXbKnr7u31wYKyQy0vvACB5eT3cgADic8Oy+8XhSKvtTrLgOuS8 UfU01RCMpWwcWUorEJk2/gfyAWExyZcK91qYENWdxZEoJ1Eq/ClRzA08PgPVg7v7ThJe 2FOc+vt1+UkEe6RlqLVEPaRVaIzlV3s4P7S50Q2IQqLNkQgsO5szdKcLeup0GOyxZ4XX dUZF32YdeyPJrrbhBa20doo3wy4qLTsA60/H+IG1LKfuc1WtzrTB3zXo9vLh6+O1IlPx tI9g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=NfaQnenE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=ibm.com Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id b21-20020a170902d31500b001c610ae885bsi781054plc.59.2023.11.23.01.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Nov 2023 01:25:01 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; dkim=pass header.i=@ibm.com header.s=pp1 header.b=NfaQnenE; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=NONE dis=NONE) header.from=ibm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id DCB1C80765C2; Thu, 23 Nov 2023 01:24:55 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232396AbjKWJYL (ORCPT + 99 others); Thu, 23 Nov 2023 04:24:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231478AbjKWJYE (ORCPT ); Thu, 23 Nov 2023 04:24:04 -0500 Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3B5D2DD; Thu, 23 Nov 2023 01:24:11 -0800 (PST) Received: from pps.filterd (m0353726.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AN97U12030589; Thu, 23 Nov 2023 09:24:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding; s=pp1; bh=uoYg6XFVhnl9z1m4lIqYlmnlEpI3Bitpu8U7076l1/0=; b=NfaQnenE1yp4HWqR+BEL+kF6EZb5gVgWUwl18bsE/tWMoGAd9ruHHX6xCyzEWnlEwpNg YqEhLPKXe1WJXRGSIaHlezzfvfEWr4se4tlYZWQm2H1PkN8sIi09W/inz3f11xsYdKKZ cTVClozXIqZcTAi8TzH1XmPJ6iWu2SD6A3VNS6sydVKrfSzZjwz7Ze8O4ZVQARoCYRft O8otFGiHDfIfgYHIZCVGrbVrocnU3J6MMAIWVmYdRyUMnE5mrcrYDBo6kZSt9QxddrIr ulcYI9PIzeO71Xdc5bk8ZAwWaNP3vyXxkUF/pbKRTiv3BlPJw7mj1vyXSndsXozDqIW9 pw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uj3twrepb-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 23 Nov 2023 09:24:00 +0000 Received: from m0353726.ppops.net (m0353726.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 3AN9FU5P027019; Thu, 23 Nov 2023 09:24:00 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3uj3twrenq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 23 Nov 2023 09:24:00 +0000 Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 3AN8nA1Y018157; Thu, 23 Nov 2023 09:23:59 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 3ufaa2dp5e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 23 Nov 2023 09:23:58 +0000 Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 3AN9Nuaj29229738 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 23 Nov 2023 09:23:56 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2F08620040; Thu, 23 Nov 2023 09:23:56 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 005CB20043; Thu, 23 Nov 2023 09:23:56 +0000 (GMT) Received: from tuxmaker.boeblingen.de.ibm.com (unknown [9.152.85.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 23 Nov 2023 09:23:55 +0000 (GMT) From: Sumanth Korikkar To: linux-mm , Andrew Morton , David Hildenbrand Cc: Oscar Salvador , Michal Hocko , "Aneesh Kumar K.V" , Anshuman Khandual , Gerald Schaefer , Sumanth Korikkar , Alexander Gordeev , Heiko Carstens , Vasily Gorbik , linux-s390 , LKML Subject: [PATCH v2 2/7] mm/memory_hotplug: avoid poisoning memmap during mhp addition phase Date: Thu, 23 Nov 2023 10:23:38 +0100 Message-Id: <20231123092343.1703707-3-sumanthk@linux.ibm.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20231123092343.1703707-1-sumanthk@linux.ibm.com> References: <20231123092343.1703707-1-sumanthk@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TM-AS-GCONF: 00 X-Proofpoint-GUID: F68q5nW_FI2KdT5X8K-1UeDdw0_hK_Ml X-Proofpoint-ORIG-GUID: kQUWhC4ccdO8whY8KOUfTcwkFzLFfVMj X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-11-23_07,2023-11-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 mlxscore=0 suspectscore=0 bulkscore=0 priorityscore=1501 phishscore=0 mlxlogscore=356 adultscore=0 lowpriorityscore=0 spamscore=0 clxscore=1015 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311230067 X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Thu, 23 Nov 2023 01:24:56 -0800 (PST) When memory block is marked inaccessible, avoid page_init_poison() on memmap during memory hotplug addition phase. Instead, perform it later when the memory is physically accessible in memory hotplug online phase. When the memory block is marked accessible (by default turned on without passing any mhp_flags), page poisoning initialization on memmap is performed in sparse_add_section(). Page init poisining on memmap is performed with cond_resched(). This reflects the functionality of commit d33695b16a9f ("mm/memory_hotplug: poison memmap in remove_pfn_range_from_zone()") Architectures can pass MHP_OFFLINE_INACCESSIBLE mhp_flag in add_memory() to mark the memory block as initially inaccessible during memory hotplug addition phase. Signed-off-by: Sumanth Korikkar --- drivers/base/memory.c | 3 ++- include/linux/memory_hotplug.h | 2 +- mm/memory_hotplug.c | 27 ++++++++++++++++++++++++++- mm/sparse.c | 3 ++- 4 files changed, 31 insertions(+), 4 deletions(-) diff --git a/drivers/base/memory.c b/drivers/base/memory.c index 51915d5c3f88..cbff43b2ef44 100644 --- a/drivers/base/memory.c +++ b/drivers/base/memory.c @@ -209,7 +209,8 @@ static int memory_block_online(struct memory_block *mem) mem_hotplug_begin(); if (nr_vmemmap_pages) { - ret = mhp_init_memmap_on_memory(start_pfn, nr_vmemmap_pages, zone); + ret = mhp_init_memmap_on_memory(start_pfn, nr_vmemmap_pages, + zone, mem->inaccessible); if (ret) goto out; } diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h index 8988cd5ad55d..791bc019e992 100644 --- a/include/linux/memory_hotplug.h +++ b/include/linux/memory_hotplug.h @@ -164,7 +164,7 @@ extern void adjust_present_page_count(struct page *page, long nr_pages); /* VM interface that may be used by firmware interface */ extern int mhp_init_memmap_on_memory(unsigned long pfn, unsigned long nr_pages, - struct zone *zone); + struct zone *zone, bool mhp_off_inaccessible); extern void mhp_deinit_memmap_on_memory(unsigned long pfn, unsigned long nr_pages); extern int online_pages(unsigned long pfn, unsigned long nr_pages, struct zone *zone, struct memory_group *group); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 1e02eba166b0..ac7cfc09502d 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1083,8 +1083,25 @@ void adjust_present_page_count(struct page *page, struct memory_group *group, group->present_kernel_pages += nr_pages; } +static void page_init_poison_with_resched(unsigned long start_pfn, unsigned long nr_pages) +{ + const unsigned long end_pfn = start_pfn + nr_pages; + unsigned long pfn, cur_nr_pages; + + /* Poison struct pages because they are now uninitialized again. */ + for (pfn = start_pfn; pfn < end_pfn; pfn += cur_nr_pages) { + cond_resched(); + + /* Select all remaining pages up to the next section boundary */ + cur_nr_pages = + min(end_pfn - pfn, SECTION_ALIGN_UP(pfn + 1) - pfn); + page_init_poison(pfn_to_page(pfn), + sizeof(struct page) * cur_nr_pages); + } +} + int mhp_init_memmap_on_memory(unsigned long pfn, unsigned long nr_pages, - struct zone *zone) + struct zone *zone, bool mhp_off_inaccessible) { unsigned long end_pfn = pfn + nr_pages; int ret, i; @@ -1092,6 +1109,14 @@ int mhp_init_memmap_on_memory(unsigned long pfn, unsigned long nr_pages, ret = kasan_add_zero_shadow(__va(PFN_PHYS(pfn)), PFN_PHYS(nr_pages)); if (ret) return ret; + /* + * Memory block is accessible at this stage and hence poison the struct + * pages now. If the memory block is accessible during memory hotplug + * addition phase, then page poisining is already performed in + * sparse_add_section(). + */ + if (mhp_off_inaccessible) + page_init_poison_with_resched(pfn, nr_pages); move_pfn_range_to_zone(zone, pfn, nr_pages, NULL, MIGRATE_UNMOVABLE); for (i = 0; i < nr_pages; i++) diff --git a/mm/sparse.c b/mm/sparse.c index 77d91e565045..3991c717b769 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -907,7 +907,8 @@ int __meminit sparse_add_section(int nid, unsigned long start_pfn, * Poison uninitialized struct pages in order to catch invalid flags * combinations. */ - page_init_poison(memmap, sizeof(struct page) * nr_pages); + if (!altmap || !altmap->inaccessible) + page_init_poison(memmap, sizeof(struct page) * nr_pages); ms = __nr_to_section(section_nr); set_section_nid(section_nr, nid); -- 2.39.2