All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Hildenbrand <david@redhat.com>
To: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: Linux Memory Management List <linux-mm@kvack.org>,
	LKML <linux-kernel@vger.kernel.org>,
	gregkh@linuxfoundation.org, mingo@kernel.org,
	Andrew Morton <akpm@linux-foundation.org>,
	dan.j.williams@intel.com, Michal Hocko <mhocko@suse.com>,
	jack@suse.cz, mawilcox@microsoft.com, jglisse@redhat.com,
	Souptick Joarder <jrdr.linux@gmail.com>,
	kirill.shutemov@linux.intel.com, Vlastimil Babka <vbabka@suse.cz>,
	osalvador@techadventures.net, yasu.isimatu@gmail.com,
	malat@debian.org, Mel Gorman <mgorman@suse.de>,
	iamjoonsoo.kim@lge.com
Subject: Re: [PATCH v1] mm: inititalize struct pages when adding a section
Date: Fri, 27 Jul 2018 20:01:40 +0200	[thread overview]
Message-ID: <7461eb4b-7069-a494-27e3-68c4e1b65a81@redhat.com> (raw)
In-Reply-To: <CAGM2reYOat1bxBi0KCZAKrh0YS2PX=w-AkpesuuNVY26SSDu9A@mail.gmail.com>

On 27.07.2018 19:25, Pavel Tatashin wrote:
> Hi David,
> 
> On Fri, Jul 27, 2018 at 12:55 PM David Hildenbrand <david@redhat.com> wrote:
>>
>> Right now, struct pages are inititalized when memory is onlined, not
>> when it is added (since commit d0dc12e86b31 ("mm/memory_hotplug: optimize
>> memory hotplug")).
>>
>> remove_memory() will call arch_remove_memory(). Here, we usually access
>> the struct page to get the zone of the pages.
>>
>> So effectively, we access stale struct pages in case we remove memory that
>> was never onlined.
> 
> Yeah, this is a bug, thank you for catching it.
> 
>> So let's simply inititalize them earlier, when the
>> memory is added. We only have to take care of updating the zone once we
>> know it. We can use a dummy zone for that purpose.
>>
>> So effectively, all pages will already be initialized and set to
>> reserved after memory was added but before it was onlined (and even the
>> memblock is added). We only inititalize pages once, to not degrade
>> performance.
> 
> Yes, but we still add one more npages loop, so there will be some
> performance degradation, but not severe.
> 
> There are many conflicts with linux-next, please sync before sending
> out next patch.

Indeed, although I rebased, I was working on a branch based on Linus
tree ...

[...]

>>  not_early:
>>                 page = pfn_to_page(pfn);
>> -               __init_single_page(page, pfn, zone, nid);
>> -               if (context == MEMMAP_HOTPLUG)
>> -                       SetPageReserved(page);
>> +               if (context == MEMMAP_HOTPLUG) {
>> +                       /* everything but the zone was inititalized */
>> +                       set_page_zone(page, zone);
>> +                       set_page_virtual(page, zone);
>> +               } else
>> +                       init_single_page(page, pfn, zone, nid);
>>
> 
> Please add a new function:
> memmap_init_zone_hotplug() that will handle only the zone and virtual
> fields for onlined hotplug memory.
> 
> Please remove: "enum memmap_context context" from everywhere.

All your comments make sense. Will look into the details next week and
send a new version.

Thanks and enjoy your weekend!


-- 

Thanks,

David / dhildenb

  reply	other threads:[~2018-07-27 18:01 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-27 16:54 [PATCH v1] mm: inititalize struct pages when adding a section David Hildenbrand
2018-07-27 16:54 ` David Hildenbrand
2018-07-27 17:25 ` Pavel Tatashin
2018-07-27 18:01   ` David Hildenbrand [this message]
2018-07-30 11:30 ` Michal Hocko
2018-07-30 11:53   ` David Hildenbrand
2018-07-30 12:05     ` Michal Hocko
2018-07-30 12:11       ` David Hildenbrand
2018-07-30 13:30         ` Pavel Tatashin
2018-07-30 13:51           ` David Hildenbrand
2018-07-30 14:10             ` Michal Hocko
2018-07-30 14:42               ` David Hildenbrand
2018-07-30 14:50                 ` Michal Hocko
2018-07-30 15:03                   ` David Hildenbrand
2018-07-30 15:45                     ` Pavel Tatashin

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=7461eb4b-7069-a494-27e3-68c4e1b65a81@redhat.com \
    --to=david@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=dan.j.williams@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=iamjoonsoo.kim@lge.com \
    --cc=jack@suse.cz \
    --cc=jglisse@redhat.com \
    --cc=jrdr.linux@gmail.com \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=malat@debian.org \
    --cc=mawilcox@microsoft.com \
    --cc=mgorman@suse.de \
    --cc=mhocko@suse.com \
    --cc=mingo@kernel.org \
    --cc=osalvador@techadventures.net \
    --cc=pasha.tatashin@oracle.com \
    --cc=vbabka@suse.cz \
    --cc=yasu.isimatu@gmail.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.