linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Joao Martins <joao.m.martins@oracle.com>
To: Dan Williams <dan.j.williams@intel.com>
Cc: Linux MM <linux-mm@kvack.org>, Ira Weiny <ira.weiny@intel.com>,
	linux-nvdimm <linux-nvdimm@lists.01.org>,
	Matthew Wilcox <willy@infradead.org>,
	Jason Gunthorpe <jgg@ziepe.ca>, Jane Chu <jane.chu@oracle.com>,
	Muchun Song <songmuchun@bytedance.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v1 07/11] mm/sparse-vmemmap: populate compound pagemaps
Date: Wed, 16 Jun 2021 16:05:47 +0100	[thread overview]
Message-ID: <99e18d97-5245-e4c7-febd-8c3781645cea@oracle.com> (raw)
In-Reply-To: <bbc5a003-5a8f-45ed-5445-a7794ea532fe@oracle.com>

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 <joao.m.martins@oracle.com> 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?


  reply	other threads:[~2021-06-16 15:06 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-25 23:09 [PATCH v1 00/11] mm, sparse-vmemmap: Introduce compound pagemaps Joao Martins
2021-03-25 23:09 ` [PATCH v1 01/11] memory-failure: fetch compound_head after pgmap_pfn_valid() Joao Martins
2021-04-24  0:12   ` Dan Williams
2021-04-24 19:00     ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 02/11] mm/page_alloc: split prep_compound_page into head and tail subparts Joao Martins
2021-04-24  0:16   ` Dan Williams
2021-04-24 19:05     ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 03/11] mm/page_alloc: refactor memmap_init_zone_device() page init Joao Martins
2021-04-24  0:18   ` Dan Williams
2021-04-24 19:05     ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 04/11] mm/memremap: add ZONE_DEVICE support for compound pages Joao Martins
2021-05-05 18:44   ` Dan Williams
2021-05-05 18:58     ` Matthew Wilcox
2021-05-05 19:49     ` Joao Martins
2021-05-05 22:20       ` Dan Williams
2021-05-05 22:36         ` Joao Martins
2021-05-05 23:03           ` Dan Williams
2021-05-06 10:12             ` Joao Martins
2021-05-18 17:27           ` Joao Martins
2021-05-18 19:56             ` Jane Chu
2021-05-19 11:29               ` Joao Martins
2021-05-19 18:36                 ` Jane Chu
2021-06-07 20:17             ` Dan Williams
2021-06-07 20:47               ` Joao Martins
2021-06-07 21:00                 ` Joao Martins
2021-06-07 21:57                   ` Dan Williams
2021-05-06  8:05         ` Aneesh Kumar K.V
2021-05-06 10:23           ` Joao Martins
2021-05-06 11:43             ` Matthew Wilcox
2021-05-06 12:15               ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 05/11] mm/sparse-vmemmap: add a pgmap argument to section activation Joao Martins
2021-05-05 22:34   ` Dan Williams
2021-05-05 22:37     ` Joao Martins
2021-05-05 23:14       ` Dan Williams
2021-05-06 10:24         ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 06/11] mm/sparse-vmemmap: refactor vmemmap_populate_basepages() Joao Martins
2021-05-05 22:43   ` Dan Williams
2021-05-06 10:27     ` Joao Martins
2021-05-06 18:36       ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 07/11] mm/sparse-vmemmap: populate compound pagemaps Joao Martins
2021-05-06  1:18   ` Dan Williams
2021-05-06 11:01     ` Joao Martins
2021-05-10 19:19       ` Dan Williams
2021-05-13 18:45         ` Joao Martins
2021-06-16 15:05           ` Joao Martins [this message]
2021-06-16 23:35             ` Dan Williams
2021-03-25 23:09 ` [PATCH v1 08/11] mm/sparse-vmemmap: use hugepages for PUD " Joao Martins
2021-06-01 19:30   ` Dan Williams
2021-06-07 12:02     ` Joao Martins
2021-06-07 19:47       ` Dan Williams
2021-03-25 23:09 ` [PATCH v1 09/11] mm/page_alloc: reuse tail struct pages for " Joao Martins
2021-06-01 23:35   ` Dan Williams
2021-06-07 13:48     ` Joao Martins
2021-06-07 19:32       ` Dan Williams
2021-06-14 18:41         ` Joao Martins
2021-06-14 23:07           ` Dan Williams
2021-03-25 23:09 ` [PATCH v1 10/11] device-dax: compound pagemap support Joao Martins
2021-06-02  0:36   ` Dan Williams
2021-06-07 13:59     ` Joao Martins
2021-03-25 23:09 ` [PATCH v1 11/11] mm/gup: grab head page refcount once for group of subpages Joao Martins
2021-06-02  1:05   ` Dan Williams
2021-06-07 15:21     ` Joao Martins
2021-06-07 19:22       ` Dan Williams
2021-04-01  9:38 ` [PATCH v1 00/11] mm, sparse-vmemmap: Introduce compound pagemaps Joao Martins

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=99e18d97-5245-e4c7-febd-8c3781645cea@oracle.com \
    --to=joao.m.martins@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=dan.j.williams@intel.com \
    --cc=ira.weiny@intel.com \
    --cc=jane.chu@oracle.com \
    --cc=jgg@ziepe.ca \
    --cc=linux-mm@kvack.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=mike.kravetz@oracle.com \
    --cc=songmuchun@bytedance.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).