From: Jerome Glisse <jglisse@redhat.com>
To: Michal Hocko <mhocko@kernel.org>
Cc: linux-mm@kvack.org, Andrew Morton <akpm@linux-foundation.org>,
Mel Gorman <mgorman@suse.de>, Vlastimil Babka <vbabka@suse.cz>,
Andrea Arcangeli <aarcange@redhat.com>,
Reza Arbab <arbab@linux.vnet.ibm.com>,
Yasuaki Ishimatsu <yasu.isimatu@gmail.com>,
qiuxishi@huawei.com, Kani Toshimitsu <toshi.kani@hpe.com>,
slaoub@gmail.com, Joonsoo Kim <js1304@gmail.com>,
Andi Kleen <ak@linux.intel.com>,
David Rientjes <rientjes@google.com>,
Daniel Kiper <daniel.kiper@oracle.com>,
Igor Mammedov <imammedo@redhat.com>,
Vitaly Kuznetsov <vkuznets@redhat.com>,
LKML <linux-kernel@vger.kernel.org>,
Michal Hocko <mhocko@suse.com>,
Dan Williams <dan.j.williams@gmail.com>
Subject: Re: [PATCH 4/9] mm, memory_hotplug: get rid of is_zone_device_section
Date: Mon, 17 Apr 2017 16:12:35 -0400 [thread overview]
Message-ID: <20170417201235.GA6511@redhat.com> (raw)
In-Reply-To: <20170410110351.12215-5-mhocko@kernel.org>
On Mon, Apr 10, 2017 at 01:03:46PM +0200, Michal Hocko wrote:
> From: Michal Hocko <mhocko@suse.com>
>
> device memory hotplug hooks into regular memory hotplug only half way.
> It needs memory sections to track struct pages but there is no
> need/desire to associate those sections with memory blocks and export
> them to the userspace via sysfs because they cannot be onlined anyway.
>
> This is currently expressed by for_device argument to arch_add_memory
> which then makes sure to associate the given memory range with
> ZONE_DEVICE. register_new_memory then relies on is_zone_device_section
> to distinguish special memory hotplug from the regular one. While this
> works now, later patches in this series want to move __add_zone outside
> of arch_add_memory path so we have to come up with something else.
>
> Add want_memblock down the __add_pages path and use it to control
> whether the section->memblock association should be done. arch_add_memory
> then just trivially want memblock for everything but for_device hotplug.
>
> remove_memory_section doesn't need is_zone_device_section either. We can
> simply skip all the memblock specific cleanup if there is no memblock
> for the given section.
>
> This shouldn't introduce any functional change.
>
> Cc: Dan Williams <dan.j.williams@gmail.com>
> Signed-off-by: Michal Hocko <mhocko@suse.com>
> ---
> arch/ia64/mm/init.c | 2 +-
> arch/powerpc/mm/mem.c | 2 +-
> arch/s390/mm/init.c | 2 +-
> arch/sh/mm/init.c | 2 +-
> arch/x86/mm/init_32.c | 2 +-
> arch/x86/mm/init_64.c | 2 +-
> drivers/base/memory.c | 22 ++++++++--------------
> include/linux/memory_hotplug.h | 2 +-
> mm/memory_hotplug.c | 11 +++++++----
> 9 files changed, 22 insertions(+), 25 deletions(-)
>
> diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
> index 06cdaef54b2e..62085fd902e6 100644
> --- a/arch/ia64/mm/init.c
> +++ b/arch/ia64/mm/init.c
> @@ -657,7 +657,7 @@ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
>
> zone = pgdat->node_zones +
> zone_for_memory(nid, start, size, ZONE_NORMAL, for_device);
> - ret = __add_pages(nid, zone, start_pfn, nr_pages);
> + ret = __add_pages(nid, zone, start_pfn, nr_pages, !for_device);
>
> if (ret)
> printk("%s: Problem encountered in __add_pages() as ret=%d\n",
> diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
> index 5f844337de21..ea3e09a62f38 100644
> --- a/arch/powerpc/mm/mem.c
> +++ b/arch/powerpc/mm/mem.c
> @@ -149,7 +149,7 @@ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
> zone = pgdata->node_zones +
> zone_for_memory(nid, start, size, 0, for_device);
>
> - return __add_pages(nid, zone, start_pfn, nr_pages);
> + return __add_pages(nid, zone, start_pfn, nr_pages, !for_device);
> }
>
> #ifdef CONFIG_MEMORY_HOTREMOVE
> diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c
> index bf5b8a0c4ff7..5c84346e5211 100644
> --- a/arch/s390/mm/init.c
> +++ b/arch/s390/mm/init.c
> @@ -182,7 +182,7 @@ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
> continue;
> nr_pages = (start_pfn + size_pages > zone_end_pfn) ?
> zone_end_pfn - start_pfn : size_pages;
> - rc = __add_pages(nid, zone, start_pfn, nr_pages);
> + rc = __add_pages(nid, zone, start_pfn, nr_pages, !for_device);
> if (rc)
> break;
> start_pfn += nr_pages;
> diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
> index 75491862d900..a9d57f75ae8c 100644
> --- a/arch/sh/mm/init.c
> +++ b/arch/sh/mm/init.c
> @@ -498,7 +498,7 @@ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
> ret = __add_pages(nid, pgdat->node_zones +
> zone_for_memory(nid, start, size, ZONE_NORMAL,
> for_device),
> - start_pfn, nr_pages);
> + start_pfn, nr_pages, !for_device);
> if (unlikely(ret))
> printk("%s: Failed, __add_pages() == %d\n", __func__, ret);
>
> diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
> index c68078fd06fd..4b0f05328af0 100644
> --- a/arch/x86/mm/init_32.c
> +++ b/arch/x86/mm/init_32.c
> @@ -834,7 +834,7 @@ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
> unsigned long start_pfn = start >> PAGE_SHIFT;
> unsigned long nr_pages = size >> PAGE_SHIFT;
>
> - return __add_pages(nid, zone, start_pfn, nr_pages);
> + return __add_pages(nid, zone, start_pfn, nr_pages, !for_device);
> }
>
> #ifdef CONFIG_MEMORY_HOTREMOVE
> diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
> index 7eef17239378..39cfaee93975 100644
> --- a/arch/x86/mm/init_64.c
> +++ b/arch/x86/mm/init_64.c
> @@ -652,7 +652,7 @@ int arch_add_memory(int nid, u64 start, u64 size, bool for_device)
>
> init_memory_mapping(start, start + size);
>
> - ret = __add_pages(nid, zone, start_pfn, nr_pages);
> + ret = __add_pages(nid, zone, start_pfn, nr_pages, !for_device);
> WARN_ON_ONCE(ret);
>
> /* update max_pfn, max_low_pfn and high_memory */
> diff --git a/drivers/base/memory.c b/drivers/base/memory.c
> index cc4f1d0cbffe..89c15e942852 100644
> --- a/drivers/base/memory.c
> +++ b/drivers/base/memory.c
> @@ -685,14 +685,6 @@ static int add_memory_block(int base_section_nr)
> return 0;
> }
>
> -static bool is_zone_device_section(struct mem_section *ms)
> -{
> - struct page *page;
> -
> - page = sparse_decode_mem_map(ms->section_mem_map, __section_nr(ms));
> - return is_zone_device_page(page);
> -}
> -
> /*
> * need an interface for the VM to add new memory regions,
> * but without onlining it.
> @@ -702,9 +694,6 @@ int register_new_memory(int nid, struct mem_section *section)
> int ret = 0;
> struct memory_block *mem;
>
> - if (is_zone_device_section(section))
> - return 0;
> -
> mutex_lock(&mem_sysfs_mutex);
>
> mem = find_memory_block(section);
> @@ -741,11 +730,16 @@ static int remove_memory_section(unsigned long node_id,
> {
> struct memory_block *mem;
>
> - if (is_zone_device_section(section))
> - return 0;
> -
> mutex_lock(&mem_sysfs_mutex);
> +
> + /*
> + * Some users of the memory hotplug do not want/need memblock to
> + * track all sections. Skip over those.
> + */
> mem = find_memory_block(section);
> + if (!mem)
> + return 0;
> +
Another bug above spoted by Evgeny Baskakov from NVidia, mutex unlock
is missing ie something like:
if (!mem) {
mutex_unlock(&mem_sysfs_mutex);
return 0;
}
Between when are you planning on reposting ? I was hoping sometime soon
so i can repost HMM on top. I know with springtime celebration eveyrone
is out collecting chocolate eggs :)
Cheers,
Jerome
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-04-17 20:12 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-04-10 11:03 [PATCH -v2 0/9] mm: make movable onlining suck less Michal Hocko
2017-04-10 11:03 ` [PATCH 1/9] mm: remove return value from init_currently_empty_zone Michal Hocko
2017-04-11 8:10 ` Balbir Singh
2017-04-13 12:03 ` Vlastimil Babka
2017-04-13 19:43 ` YASUAKI ISHIMATSU
2017-04-10 11:03 ` [PATCH 2/9] mm, memory_hotplug: use node instead of zone in can_online_high_movable Michal Hocko
2017-04-13 12:46 ` Vlastimil Babka
2017-04-13 19:45 ` YASUAKI ISHIMATSU
2017-04-10 11:03 ` [PATCH 3/9] mm: drop page_initialized check from get_nid_for_pfn Michal Hocko
2017-04-13 12:59 ` Vlastimil Babka
2017-04-10 11:03 ` [PATCH 4/9] mm, memory_hotplug: get rid of is_zone_device_section Michal Hocko
2017-04-10 16:20 ` Jerome Glisse
2017-04-10 16:31 ` Michal Hocko
2017-04-13 13:05 ` Vlastimil Babka
2017-04-17 20:12 ` Jerome Glisse [this message]
2017-04-18 7:19 ` Michal Hocko
2017-04-10 11:03 ` [PATCH 5/9] mm, memory_hotplug: split up register_one_node Michal Hocko
2017-04-13 14:05 ` Vlastimil Babka
2017-04-13 14:13 ` Michal Hocko
2017-04-10 11:03 ` [PATCH 6/9] mm, memory_hotplug: do not associate hotadded memory to zones until online Michal Hocko
2017-04-10 16:25 ` [PATCH v3 " Michal Hocko
2017-04-20 8:25 ` Vlastimil Babka
2017-04-20 9:06 ` Michal Hocko
2017-04-20 10:51 ` Vlastimil Babka
2017-04-10 11:03 ` [PATCH 7/9] mm, memory_hotplug: replace for_device by want_memblock in arch_add_memory Michal Hocko
2017-04-20 8:29 ` Vlastimil Babka
2017-04-10 11:03 ` [PATCH 8/9] mm, memory_hotplug: fix the section mismatch warning Michal Hocko
2017-04-10 11:03 ` [PATCH 9/9] mm, memory_hotplug: remove unused cruft after memory hotplug rework Michal Hocko
2017-04-20 8:38 ` Vlastimil Babka
2017-04-10 14:27 ` [PATCH -v2 0/9] mm: make movable onlining suck less Igor Mammedov
2017-04-10 14:56 ` Michal Hocko
2017-04-10 15:22 ` Michal Hocko
2017-04-10 15:31 ` Michal Hocko
2017-04-11 8:01 ` Igor Mammedov
2017-04-11 8:41 ` Michal Hocko
2017-04-11 9:53 ` Igor Mammedov
2017-04-11 10:47 ` Michal Hocko
2017-04-10 16:02 ` Michal Hocko
2017-04-18 8:23 ` Vlastimil Babka
2017-04-10 16:09 ` Michal Hocko
2017-04-11 6:38 ` Igor Mammedov
2017-04-11 9:23 ` Michal Hocko
2017-04-11 9:59 ` Igor Mammedov
2017-04-11 11:01 ` Michal Hocko
2017-04-11 11:38 ` Michal Hocko
2017-04-11 12:38 ` Michal Hocko
2017-04-10 15:43 ` Reza Arbab
2017-04-11 8:59 ` Michal Hocko
2017-04-10 16:35 ` Jerome Glisse
2017-04-10 17:53 ` Michal Hocko
2017-04-11 2:51 ` Balbir Singh
2017-04-11 17:03 ` Michal Hocko
2017-04-17 21:51 ` Dan Williams
2017-04-18 7:14 ` Michal Hocko
2017-04-18 16:42 ` Dan Williams
2017-04-18 19:54 ` Michal Hocko
2017-04-20 3:37 ` Dan Williams
2017-04-15 12:17 ` Michal Hocko
2017-04-15 12:17 ` [PATCH 1/3] mm: consider zone which is not fully populated to have holes Michal Hocko
2017-04-18 8:45 ` Vlastimil Babka
2017-04-18 9:27 ` Michal Hocko
2017-04-19 11:59 ` Vlastimil Babka
2017-04-19 12:16 ` Michal Hocko
2017-04-19 12:34 ` Vlastimil Babka
2017-04-19 12:50 ` Michal Hocko
2017-04-15 12:17 ` [PATCH 2/3] mm, compaction: skip over holes in __reset_isolation_suitable Michal Hocko
2017-04-15 12:17 ` [PATCH 3/3] mm: __first_valid_page skip over offline pages Michal Hocko
2017-04-17 5:47 ` your mail Joonsoo Kim
2017-04-17 8:15 ` Michal Hocko
2017-04-20 1:27 ` Joonsoo Kim
2017-04-20 7:28 ` Michal Hocko
2017-04-20 8:49 ` Michal Hocko
2017-04-20 11:56 ` Vlastimil Babka
2017-04-20 12:13 ` Michal Hocko
2017-04-21 2:46 ` [lkp-robot] 73821bb516: WARNING:at_mm/memblock.c:#memblock_virt_alloc_internal kernel test robot
2017-04-21 2:46 ` kernel test robot
2017-04-21 8:05 ` Michal Hocko
2017-04-21 8:05 ` Michal Hocko
2017-04-21 4:38 ` your mail Joonsoo Kim
2017-04-21 7:16 ` Michal Hocko
2017-04-24 1:44 ` Joonsoo Kim
2017-04-24 7:53 ` Michal Hocko
2017-04-25 2:50 ` Joonsoo Kim
2017-04-26 9:19 ` Michal Hocko
2017-04-27 2:08 ` Joonsoo Kim
2017-04-27 15:10 ` Michal Hocko
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=20170417201235.GA6511@redhat.com \
--to=jglisse@redhat.com \
--cc=aarcange@redhat.com \
--cc=ak@linux.intel.com \
--cc=akpm@linux-foundation.org \
--cc=arbab@linux.vnet.ibm.com \
--cc=dan.j.williams@gmail.com \
--cc=daniel.kiper@oracle.com \
--cc=imammedo@redhat.com \
--cc=js1304@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@suse.de \
--cc=mhocko@kernel.org \
--cc=mhocko@suse.com \
--cc=qiuxishi@huawei.com \
--cc=rientjes@google.com \
--cc=slaoub@gmail.com \
--cc=toshi.kani@hpe.com \
--cc=vbabka@suse.cz \
--cc=vkuznets@redhat.com \
--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.