All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joao Martins <joao.m.martins@oracle.com>
To: Muchun Song <songmuchun@bytedance.com>
Cc: Linux Memory Management List <linux-mm@kvack.org>,
	Dan Williams <dan.j.williams@intel.com>,
	Vishal Verma <vishal.l.verma@intel.com>,
	Matthew Wilcox <willy@infradead.org>,
	Jason Gunthorpe <jgg@ziepe.ca>, Jane Chu <jane.chu@oracle.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jonathan Corbet <corbet@lwn.net>, Christoph Hellwig <hch@lst.de>,
	nvdimm@lists.linux.dev,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>
Subject: Re: [PATCH v6 4/5] mm/sparse-vmemmap: improve memory savings for compound devmaps
Date: Thu, 24 Feb 2022 11:46:49 +0000	[thread overview]
Message-ID: <25983812-c876-ae82-0125-515500959696@oracle.com> (raw)
In-Reply-To: <CAMZfGtXm5pLbTnzMCrWPg8Vm3gykB8XEg5DHFm0z1p1x2fhySQ@mail.gmail.com>

On 2/24/22 05:54, Muchun Song wrote:
> On Thu, Feb 24, 2022 at 3:48 AM Joao Martins <joao.m.martins@oracle.com> wrote:
>> diff --git a/include/linux/mm.h b/include/linux/mm.h
>> index 5f549cf6a4e8..b0798b9c6a6a 100644
>> --- a/include/linux/mm.h
>> +++ b/include/linux/mm.h
>> @@ -3118,7 +3118,7 @@ p4d_t *vmemmap_p4d_populate(pgd_t *pgd, unsigned long addr, int node);
>>  pud_t *vmemmap_pud_populate(p4d_t *p4d, unsigned long addr, int node);
>>  pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
>>  pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
>> -                           struct vmem_altmap *altmap);
>> +                           struct vmem_altmap *altmap, struct page *block);
> 
> Have forgotten to update @block to @reuse here.
> 

Fixed.

> [...]
>> +
>> +static int __meminit vmemmap_populate_range(unsigned long start,
>> +                                           unsigned long end,
>> +                                           int node, struct page *page)
> 
> All of the users are passing a valid parameter of @page. This function
> will populate the vmemmap with the @page 

Yeap.

> and without memory
> allocations. So the @node parameter seems to be unnecessary.
> 
I am a little bit afraid of making this logic more fragile by removing node.
When we populate the the tail vmemmap pages, we *may need* to populate a new PMD page
. And we need the @node for those or anything preceeding that (even though it's highly
unlikely). It's just the PTE reuse that doesn't need node :(

> If you want to make this function more generic like
> vmemmap_populate_address() to handle memory allocations
> (the case of @page == NULL). I think vmemmap_populate_range()
> should add another parameter of `struct vmem_altmap *altmap`.

Oh, that's a nice cleanup/suggestion. I've moved vmemmap_populate_range() to be
used by vmemmap_populate_basepages(), and delete the duplication. I'll
adjust the second patch for this cleanup, to avoid moving the same code
over again between the two patches. I'll keep your Rb in the second patch, this is
the diff to this version:

diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index 44cb77523003..1b30a82f285e 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -637,8 +637,9 @@ static pte_t * __meminit vmemmap_populate_address(unsigned long addr,
int node,
        return pte;
 }

-int __meminit vmemmap_populate_basepages(unsigned long start, unsigned long end,
-                                        int node, struct vmem_altmap *altmap)
+static int __meminit vmemmap_populate_range(unsigned long start,
+                                           unsigned long end, int node,
+                                           struct vmem_altmap *altmap)
 {
        unsigned long addr = start;
        pte_t *pte;
@@ -652,6 +653,12 @@ int __meminit vmemmap_populate_basepages(unsigned long start,
unsigned long end,
        return 0;
 }

+int __meminit vmemmap_populate_basepages(unsigned long start, unsigned long end,
+                                        int node, struct vmem_altmap *altmap)
+{
+       return vmemmap_populate_range(start, end, node, altmap);
+}
+
 struct page * __meminit __populate_section_memmap(unsigned long pfn,
                unsigned long nr_pages, int nid, struct vmem_altmap *altmap,
                struct dev_pagemap *pgmap)

Meanwhile I'll adjust the other callers of vmemmap_populate_range() in this patch.

> Otherwise, is it better to remove @node and rename @page to @reuse?

I've kept the @node for now, due to the concern explained earlier, but
renamed vmemmap_populate_range() to have its new argument be named @reuse.
Let me know if you disagree otherwise.

Thanks again for the comments, appreciate it!

  reply	other threads:[~2022-02-24 11:47 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-23 19:48 [PATCH v6 0/5] sparse-vmemmap: memory savings for compound devmaps (device-dax) Joao Martins
2022-02-23 19:48 ` [PATCH v6 1/5] mm/sparse-vmemmap: add a pgmap argument to section activation Joao Martins
2022-02-24  3:02   ` Muchun Song
2022-02-24 10:38     ` Joao Martins
2022-02-23 19:48 ` [PATCH v6 2/5] mm/sparse-vmemmap: refactor core of vmemmap_populate_basepages() to helper Joao Martins
2022-02-24  3:10   ` Muchun Song
2022-02-24 10:39     ` Joao Martins
2022-02-23 19:48 ` [PATCH v6 3/5] mm/hugetlb_vmemmap: move comment block to Documentation/vm Joao Martins
2022-02-23 19:48 ` [PATCH v6 4/5] mm/sparse-vmemmap: improve memory savings for compound devmaps Joao Martins
2022-02-24  5:54   ` Muchun Song
2022-02-24 11:46     ` Joao Martins [this message]
2022-02-24 15:34       ` Muchun Song
2022-02-23 19:48 ` [PATCH v6 5/5] mm/page_alloc: reuse tail struct pages " Joao Martins
2022-02-24  5:57   ` Muchun Song
2022-02-24 11:47     ` Joao Martins
2022-02-24 15:41   ` Muchun Song
2022-02-24 16:49     ` 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=25983812-c876-ae82-0125-515500959696@oracle.com \
    --to=joao.m.martins@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=corbet@lwn.net \
    --cc=dan.j.williams@intel.com \
    --cc=hch@lst.de \
    --cc=jane.chu@oracle.com \
    --cc=jgg@ziepe.ca \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mike.kravetz@oracle.com \
    --cc=nvdimm@lists.linux.dev \
    --cc=songmuchun@bytedance.com \
    --cc=vishal.l.verma@intel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.