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=-10.8 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham 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 3DA0AC48BE6 for ; Wed, 16 Jun 2021 15:06:18 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id DE434611BE for ; Wed, 16 Jun 2021 15:06:17 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DE434611BE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=oracle.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 4D1176B006E; Wed, 16 Jun 2021 11:06:17 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4A84A6B0070; Wed, 16 Jun 2021 11:06:17 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3221A6B0071; Wed, 16 Jun 2021 11:06:17 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0210.hostedemail.com [216.40.44.210]) by kanga.kvack.org (Postfix) with ESMTP id EEC2C6B006E for ; Wed, 16 Jun 2021 11:06:16 -0400 (EDT) Received: from smtpin22.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay04.hostedemail.com (Postfix) with ESMTP id 97DC5EFAC for ; Wed, 16 Jun 2021 15:06:16 +0000 (UTC) X-FDA: 78259912752.22.E3FE93A Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by imf04.hostedemail.com (Postfix) with ESMTP id A797513A for ; Wed, 16 Jun 2021 15:06:09 +0000 (UTC) Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 15GF0Rtw026080; Wed, 16 Jun 2021 15:05:59 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : from : to : cc : references : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=corp-2020-01-29; bh=wgZ0qzLG6GcOg8n2xnbw6RFaWKRPOMNgin1uO9fbrp8=; b=sy/dtkrUM+ErcGoFgqzKeDQ4EZ2bydlOCmOIMv4T+xH8f9vziRah9smCi90/LU1vzpTN KcFDKZMDEpmRMYIonRqEeN8A8rK+7AJAmItAZEmCIzkkWF+k0fUnO6UmyaLj5swzrkp6 hDnMrUmmurrEvk0X1muTVJVWGa38FN7n9DlTywclaL27dpUGIErxNJRDyp8z8NiBZ16b DzrrqTJq8gnwj8bmwrUiT23UW6+6X6lyvvQfmenDQY54MrcsQ9V+U9niMht0OQpCGV5w i4HcKZL15VI/c1dZlx2e12NRyAMfI/XPj9MPlJfEZ0Wf3KvZ0xgoLuPLlM91WMarDt7g vg== Received: from userp3020.oracle.com (userp3020.oracle.com [156.151.31.79]) by mx0b-00069f02.pphosted.com with ESMTP id 397h4bgcma-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Jun 2021 15:05:58 +0000 Received: from pps.filterd (userp3020.oracle.com [127.0.0.1]) by userp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 15GF5U9T007656; Wed, 16 Jun 2021 15:05:57 GMT Received: from pps.reinject (localhost [127.0.0.1]) by userp3020.oracle.com with ESMTP id 396wawe7a4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Jun 2021 15:05:57 +0000 Received: from userp3020.oracle.com (userp3020.oracle.com [127.0.0.1]) by pps.reinject (8.16.0.36/8.16.0.36) with SMTP id 15GF5vp8008778; Wed, 16 Jun 2021 15:05:57 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3020.oracle.com with ESMTP id 396wawe797-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 16 Jun 2021 15:05:57 +0000 Received: from abhmp0003.oracle.com (abhmp0003.oracle.com [141.146.116.9]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id 15GF5poM024839; Wed, 16 Jun 2021 15:05:51 GMT Received: from [10.175.207.199] (/10.175.207.199) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 16 Jun 2021 15:05:51 +0000 Subject: Re: [PATCH v1 07/11] mm/sparse-vmemmap: populate compound pagemaps From: Joao Martins To: Dan Williams Cc: Linux MM , Ira Weiny , linux-nvdimm , Matthew Wilcox , Jason Gunthorpe , Jane Chu , Muchun Song , Mike Kravetz , Andrew Morton References: <20210325230938.30752-1-joao.m.martins@oracle.com> <20210325230938.30752-8-joao.m.martins@oracle.com> <63ce653d-4d21-c955-7b81-abba25b9e4b6@oracle.com> Message-ID: <99e18d97-5245-e4c7-febd-8c3781645cea@oracle.com> Date: Wed, 16 Jun 2021 16:05:47 +0100 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Proofpoint-ORIG-GUID: 8O9INoIHIr6vhAkXjK32gH9v6Gf-elHL X-Proofpoint-GUID: 8O9INoIHIr6vhAkXjK32gH9v6Gf-elHL X-Rspamd-Server: rspam01 X-Rspamd-Queue-Id: A797513A Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2020-01-29 header.b="sy/dtkrU"; spf=none (imf04.hostedemail.com: domain of joao.m.martins@oracle.com has no SPF policy when checking 205.220.165.32) smtp.mailfrom=joao.m.martins@oracle.com; dmarc=pass (policy=none) header.from=oracle.com X-Stat-Signature: fnx81y64ynf3rcbjyc8hn3ycquq46t3n X-HE-Tag: 1623855969-818738 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: On 5/13/21 7:45 PM, Joao Martins wrote: > On 5/10/21 8:19 PM, Dan Williams wrote: >> On Thu, May 6, 2021 at 4:02 AM Joao Martins wrote: >> [..] >>>>> +static pte_t * __meminit vmemmap_lookup_address(unsigned long addr) >>>> >>>> I think this can be replaced with a call to follow_pte(&init_mm...). >>> >>> Ah, of course! That would shorten things up too. >> >> Now that I look closely, I notice that function disclaims being >> suitable as a general purpose pte lookup utility. >> If it works for you, >> great, but if not I think it's past time to create such a helper. I >> know Ira is looking for one, and I contributed to the proliferation >> when I added dev_pagemap_mapping_shift(). >> > There's also x86 equivalents, like lookup_address() and lookup_address_in_pgd(). > These two don't differ that much from vmemmap_lookup_address(). > > I can move this to an internal place e.g. mm/internal.h > > The patch after this one, changes vmemmap_lookup_address() to stop at the PMD (to reuse > that across the next sections). > Thinking again on this particular comment, but more on the actual need for the lookup function. It is very specific to 1G geometry case being spread over multiple sections. Given section population *needs* to succeed for the followup sections to continue to be populated, perhaps we simplify this a whole lot e.g. below comparing this patch before and after. diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 3d671e3e804d..c06796fcc77d 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -554,37 +554,6 @@ static inline int __meminit vmemmap_populate_page(unsigned long addr, int node, return vmemmap_populate_address(addr, node, NULL, NULL, page); } -static pte_t * __meminit vmemmap_lookup_address(unsigned long addr) -{ - pgd_t *pgd; - p4d_t *p4d; - pud_t *pud; - pmd_t *pmd; - pte_t *pte; - - pgd = pgd_offset_k(addr); - if (pgd_none(*pgd)) - return NULL; - - p4d = p4d_offset(pgd, addr); - if (p4d_none(*p4d)) - return NULL; - - pud = pud_offset(p4d, addr); - if (pud_none(*pud)) - return NULL; - - pmd = pmd_offset(pud, addr); - if (pmd_none(*pmd)) - return NULL; - - pte = pte_offset_kernel(pmd, addr); - if (pte_none(*pte)) - return NULL; - - return pte; -} - static int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, unsigned long start, unsigned long end, int node, @@ -605,8 +574,10 @@ static int __meminit vmemmap_populate_compound_pages(unsigned long start_pfn, offset = PFN_PHYS(start_pfn) - pgmap->ranges[pgmap->nr_range].start; if (!IS_ALIGNED(offset, pgmap_geometry(pgmap)) && pgmap_geometry(pgmap) > SUBSECTION_SIZE) { - pte_t *ptep = vmemmap_lookup_address(start - PAGE_SIZE); + pte_t *ptep; + addr = start - PAGE_SIZE; + ptep = pte_offset_kernel(pmd_off_k(addr), addr); if (!ptep) return -ENOMEM; The 'if (!ptep)' cannot happen in pratice AFAIU so could remove that as well. Thoughts?