All of lore.kernel.org
 help / color / mirror / Atom feed
From: Oscar Salvador <osalvador@suse.de>
To: David Hildenbrand <david@redhat.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Michal Hocko <mhocko@kernel.org>,
	VlastimilBabkavbabka@suse.cz, pasha.tatashin@soleen.com,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Anshuman Khandual <anshuman.khandual@arm.com>
Subject: Re: [PATCH v2 1/7] mm,memory_hotplug: Allocate memmap from the added memory range
Date: Sun, 28 Feb 2021 19:50:44 +0100	[thread overview]
Message-ID: <20210228185044.GA3929@localhost.localdomain> (raw)
In-Reply-To: <60afb5ca-230e-265f-9579-dac66a152c33@redhat.com>

On Thu, Feb 25, 2021 at 07:58:01PM +0100, David Hildenbrand wrote:
> > In this way, we have:
> > 
> > (start_pfn, buddy_start_pfn - 1] = Initialized and PageReserved
> > (buddy_start_pfn, end_pfn]       = Initialized and sent to buddy
> 
> nit: shouldn't it be
> 
> [start_pfn, buddy_start_pfn - 1]
> [buddy_start_pfn, end_pfn - 1]
> 
> or
> 
> [start_pfn, buddy_start_pfn)
> [buddy_start_pfn, end_pfn)
> 
> (I remember that "[" means inclusive and "(" means exclusive, I might be wrong :) )
> 
> I actually prefer the first variant.

Let us go witht the first variant, I guess it is more clear.

> > -static void online_pages_range(unsigned long start_pfn, unsigned long nr_pages)
> > +static void online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
> > +			       unsigned long buddy_start_pfn)
> >   {
> >   	const unsigned long end_pfn = start_pfn + nr_pages;
> > -	unsigned long pfn;
> > +	unsigned long pfn = buddy_start_pfn;
> > +
> > +	/*
> > +	 * When using memmap_on_memory, the range might be unaligned as the
> > +	 * first pfns are used for vmemmap pages. Align it in case we need to.
> > +	 */
> > +	if (pfn & ((1 << (MAX_ORDER - 1)) - 1)) {
> 
> if (!IS_ALIGNED(pfn, MAX_ORDER_NR_PAGES))

Will change

> 
> > +		(*online_page_callback)(pfn_to_page(pfn), pageblock_order);
> > +		pfn += 1 << pageblock_order;
> 
> pfn += pageblock_nr_pages;
> 
> Can you add a comment why we can be sure that we are off by  a single pageblock? What about s390x where a MAX_ORDER_NR_PAGES == 4 * pageblock_nr_pages?
> 
> Would it make thing simpler to just do a
> 
> while (!IS_ALIGNED(pfn, MAX_ORDER_NR_PAGES)) {
> 	(*online_page_callback)(pfn_to_page(pfn), 0);
> 	pfn++;
> }

Honestly, I did not spend much time thinking on other platforms other
than arm64/x86_64.
But I think that that would be the universal solution as we do not make
any assumptions.

I will replace it.

> > +bool mhp_supports_memmap_on_memory(unsigned long size)
> > +{
> > +	return memmap_on_memory_enabled &&
> > +	       size == memory_block_size_bytes();
> 
> Regarding my other comments as reply to the other patches, I'd move all magic you have when trying to enable right here.

Ok, will do.

> > @@ -1613,7 +1658,7 @@ int __ref offline_pages(unsigned long start_pfn, unsigned long nr_pages)
> >   	zone_pcp_disable(zone);
> >   	/* set above range as isolated */
> > -	ret = start_isolate_page_range(start_pfn, end_pfn,
> > +	ret = start_isolate_page_range(buddy_start_pfn, end_pfn,
> >   				       MIGRATE_MOVABLE,
> >   				       MEMORY_OFFLINE | REPORT_FAILURE);
> 
> Did you take care to properly adjust undo_isolate_page_range() as well? I can't spot it.

No, I did not. Good that you noticed :-)

Will fix it up in the next version.

> > +static int get_nr_vmemmap_pages_cb(struct memory_block *mem, void *arg)
> > +{
> > +	unsigned long *nr_vmemmap_pages = (unsigned long *)arg;
> > +
> > +	*nr_vmemmap_pages += mem->nr_vmemmap_pages;
> > +	return mem->nr_vmemmap_pages;
> > +}
> > +
> 
> I think you can do this easier, all you want to know is if there
> is any block that has nr_vmemmap_pages set - and return the value.
> 
> static int first_set_nr_vmemmap_pages_cb(struct memory_block *mem, void *arg)
> {
> 	/* If not set, continue with the next block. */
> 	return mem->nr_vmemmap_pages;
> }

Yeah, less code.
Will fix it.

> 
> ...
> > +		walk_memory_blocks(start, size, &nr_vmemmap_pages,
> > +					 get_nr_vmemmap_pages_cb);
> 
> ...
> 
> mem->nr_vmemmap_pages = walk_memory_blocks(start ...)
> 
> 
> 
> Looks quite promising, only a couple of things to fine-tune :) Thanks!

Thanks for having a look, that is highly appreciated!

Let us see if we can polish the minor things that are missing and target
this for the next release.


-- 
Oscar Salvador
SUSE L3


  reply	other threads:[~2021-02-28 18:50 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-09 13:38 [PATCH v2 0/7] Allocate memmap from hotadded memory (per device) Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 1/7] mm,memory_hotplug: Allocate memmap from the added memory range Oscar Salvador
2021-02-25 18:58   ` David Hildenbrand
2021-02-28 18:50     ` Oscar Salvador [this message]
2021-03-01  8:30       ` David Hildenbrand
2021-03-01  8:32       ` David Hildenbrand
2021-02-09 13:38 ` [PATCH v2 2/7] acpi,memhotplug: Enable MHP_MEMMAP_ON_MEMORY when supported Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 3/7] mm,memory_hotplug: Add kernel boot option to enable memmap_on_memory Oscar Salvador
2021-02-25 18:25   ` David Hildenbrand
2021-02-26 12:14     ` Oscar Salvador
2021-03-01  8:27       ` David Hildenbrand
2021-02-09 13:38 ` [PATCH v2 4/7] mm,memory_hotplug: Enforce struct page size to be multiple of PMD Oscar Salvador
2021-02-25 18:26   ` David Hildenbrand
2021-02-26 12:06     ` Oscar Salvador
2021-03-01 10:06     ` Oscar Salvador
2021-03-01 10:24       ` David Hildenbrand
2021-02-09 13:38 ` [PATCH v2 5/7] mm,memory_hotplug: Enforce pageblock alignment when memmap_on_memory Oscar Salvador
2021-02-25 18:27   ` David Hildenbrand
2021-02-26 12:06     ` Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 6/7] x86/Kconfig: Introduce ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE Oscar Salvador
2021-02-25 18:29   ` David Hildenbrand
2021-02-26 12:04     ` Oscar Salvador
2021-03-01  8:45       ` David Hildenbrand
2021-03-01 10:07         ` Oscar Salvador
2021-02-09 13:38 ` [PATCH v2 7/7] arm64/Kconfig: " Oscar Salvador
2021-02-25 18:29   ` David Hildenbrand
2021-02-26 12:10     ` Oscar Salvador
2021-02-17 10:18 ` [PATCH v2 0/7] Allocate memmap from hotadded memory (per device) Oscar Salvador
2021-02-22 11:15   ` Oscar Salvador
2021-02-22 11:28     ` David Hildenbrand
2021-02-23  7:48       ` Oscar Salvador

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=20210228185044.GA3929@localhost.localdomain \
    --to=osalvador@suse.de \
    --cc=VlastimilBabkavbabka@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=anshuman.khandual@arm.com \
    --cc=david@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=pasha.tatashin@soleen.com \
    /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.