From: Baoquan He <bhe@redhat.com>
To: David Hildenbrand <david@redhat.com>, piliu@redhat.com
Cc: Michal Hocko <mhocko@suse.com>,
linux-kernel@vger.kernel.org,
Wei Yang <richard.weiyang@gmail.com>,
linux-mm@kvack.org, Paul Mackerras <paulus@samba.org>,
Nathan Fontenot <nfont@linux.vnet.ibm.com>,
Andrew Morton <akpm@linux-foundation.org>,
linuxppc-dev@lists.ozlabs.org, Oscar Salvador <osalvador@suse.de>
Subject: Re: [PATCH v1 1/2] powerpc/pseries/hotplug-memory: stop checking is_mem_section_removable()
Date: Wed, 8 Apr 2020 10:46:30 +0800 [thread overview]
Message-ID: <20200408024630.GQ2402@MiWiFi-R3L-srv> (raw)
In-Reply-To: <20200407135416.24093-2-david@redhat.com>
Add Pingfan to CC since he usually handles ppc related bugs for RHEL.
On 04/07/20 at 03:54pm, David Hildenbrand wrote:
> In commit 53cdc1cb29e8 ("drivers/base/memory.c: indicate all memory
> blocks as removable"), the user space interface to compute whether a memory
> block can be offlined (exposed via
> /sys/devices/system/memory/memoryX/removable) has effectively been
> deprecated. We want to remove the leftovers of the kernel implementation.
Pingfan, can you have a look at this change on PPC? Please feel free to
give comments if any concern, or offer ack if it's OK to you.
>
> When offlining a memory block (mm/memory_hotplug.c:__offline_pages()),
> we'll start by:
> 1. Testing if it contains any holes, and reject if so
> 2. Testing if pages belong to different zones, and reject if so
> 3. Isolating the page range, checking if it contains any unmovable pages
>
> Using is_mem_section_removable() before trying to offline is not only racy,
> it can easily result in false positives/negatives. Let's stop manually
> checking is_mem_section_removable(), and let device_offline() handle it
> completely instead. We can remove the racy is_mem_section_removable()
> implementation next.
>
> We now take more locks (e.g., memory hotplug lock when offlining and the
> zone lock when isolating), but maybe we should optimize that
> implementation instead if this ever becomes a real problem (after all,
> memory unplug is already an expensive operation). We started using
> is_mem_section_removable() in commit 51925fb3c5c9 ("powerpc/pseries:
> Implement memory hotplug remove in the kernel"), with the initial
> hotremove support of lmbs.
>
> Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Oscar Salvador <osalvador@suse.de>
> Cc: Baoquan He <bhe@redhat.com>
> Cc: Wei Yang <richard.weiyang@gmail.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
> .../platforms/pseries/hotplug-memory.c | 26 +++----------------
> 1 file changed, 3 insertions(+), 23 deletions(-)
>
> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
> index b2cde1732301..5ace2f9a277e 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
> @@ -337,39 +337,19 @@ static int pseries_remove_mem_node(struct device_node *np)
>
> static bool lmb_is_removable(struct drmem_lmb *lmb)
> {
> - int i, scns_per_block;
> - bool rc = true;
> - unsigned long pfn, block_sz;
> - u64 phys_addr;
> -
> if (!(lmb->flags & DRCONF_MEM_ASSIGNED))
> return false;
>
> - block_sz = memory_block_size_bytes();
> - scns_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE;
> - phys_addr = lmb->base_addr;
> -
> #ifdef CONFIG_FA_DUMP
> /*
> * Don't hot-remove memory that falls in fadump boot memory area
> * and memory that is reserved for capturing old kernel memory.
> */
> - if (is_fadump_memory_area(phys_addr, block_sz))
> + if (is_fadump_memory_area(lmb->base_addr, memory_block_size_bytes()))
> return false;
> #endif
> -
> - for (i = 0; i < scns_per_block; i++) {
> - pfn = PFN_DOWN(phys_addr);
> - if (!pfn_in_present_section(pfn)) {
> - phys_addr += MIN_MEMORY_BLOCK_SIZE;
> - continue;
> - }
> -
> - rc = rc && is_mem_section_removable(pfn, PAGES_PER_SECTION);
> - phys_addr += MIN_MEMORY_BLOCK_SIZE;
> - }
> -
> - return rc;
> + /* device_offline() will determine if we can actually remove this lmb */
> + return true;
> }
>
> static int dlpar_add_lmb(struct drmem_lmb *);
> --
> 2.25.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Baoquan He <bhe@redhat.com>
To: David Hildenbrand <david@redhat.com>, piliu@redhat.com
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
linuxppc-dev@lists.ozlabs.org,
Nathan Fontenot <nfont@linux.vnet.ibm.com>,
Michael Ellerman <mpe@ellerman.id.au>,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Paul Mackerras <paulus@samba.org>, Michal Hocko <mhocko@suse.com>,
Andrew Morton <akpm@linux-foundation.org>,
Oscar Salvador <osalvador@suse.de>,
Wei Yang <richard.weiyang@gmail.com>
Subject: Re: [PATCH v1 1/2] powerpc/pseries/hotplug-memory: stop checking is_mem_section_removable()
Date: Wed, 8 Apr 2020 10:46:30 +0800 [thread overview]
Message-ID: <20200408024630.GQ2402@MiWiFi-R3L-srv> (raw)
In-Reply-To: <20200407135416.24093-2-david@redhat.com>
Add Pingfan to CC since he usually handles ppc related bugs for RHEL.
On 04/07/20 at 03:54pm, David Hildenbrand wrote:
> In commit 53cdc1cb29e8 ("drivers/base/memory.c: indicate all memory
> blocks as removable"), the user space interface to compute whether a memory
> block can be offlined (exposed via
> /sys/devices/system/memory/memoryX/removable) has effectively been
> deprecated. We want to remove the leftovers of the kernel implementation.
Pingfan, can you have a look at this change on PPC? Please feel free to
give comments if any concern, or offer ack if it's OK to you.
>
> When offlining a memory block (mm/memory_hotplug.c:__offline_pages()),
> we'll start by:
> 1. Testing if it contains any holes, and reject if so
> 2. Testing if pages belong to different zones, and reject if so
> 3. Isolating the page range, checking if it contains any unmovable pages
>
> Using is_mem_section_removable() before trying to offline is not only racy,
> it can easily result in false positives/negatives. Let's stop manually
> checking is_mem_section_removable(), and let device_offline() handle it
> completely instead. We can remove the racy is_mem_section_removable()
> implementation next.
>
> We now take more locks (e.g., memory hotplug lock when offlining and the
> zone lock when isolating), but maybe we should optimize that
> implementation instead if this ever becomes a real problem (after all,
> memory unplug is already an expensive operation). We started using
> is_mem_section_removable() in commit 51925fb3c5c9 ("powerpc/pseries:
> Implement memory hotplug remove in the kernel"), with the initial
> hotremove support of lmbs.
>
> Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Oscar Salvador <osalvador@suse.de>
> Cc: Baoquan He <bhe@redhat.com>
> Cc: Wei Yang <richard.weiyang@gmail.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
> .../platforms/pseries/hotplug-memory.c | 26 +++----------------
> 1 file changed, 3 insertions(+), 23 deletions(-)
>
> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
> index b2cde1732301..5ace2f9a277e 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
> @@ -337,39 +337,19 @@ static int pseries_remove_mem_node(struct device_node *np)
>
> static bool lmb_is_removable(struct drmem_lmb *lmb)
> {
> - int i, scns_per_block;
> - bool rc = true;
> - unsigned long pfn, block_sz;
> - u64 phys_addr;
> -
> if (!(lmb->flags & DRCONF_MEM_ASSIGNED))
> return false;
>
> - block_sz = memory_block_size_bytes();
> - scns_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE;
> - phys_addr = lmb->base_addr;
> -
> #ifdef CONFIG_FA_DUMP
> /*
> * Don't hot-remove memory that falls in fadump boot memory area
> * and memory that is reserved for capturing old kernel memory.
> */
> - if (is_fadump_memory_area(phys_addr, block_sz))
> + if (is_fadump_memory_area(lmb->base_addr, memory_block_size_bytes()))
> return false;
> #endif
> -
> - for (i = 0; i < scns_per_block; i++) {
> - pfn = PFN_DOWN(phys_addr);
> - if (!pfn_in_present_section(pfn)) {
> - phys_addr += MIN_MEMORY_BLOCK_SIZE;
> - continue;
> - }
> -
> - rc = rc && is_mem_section_removable(pfn, PAGES_PER_SECTION);
> - phys_addr += MIN_MEMORY_BLOCK_SIZE;
> - }
> -
> - return rc;
> + /* device_offline() will determine if we can actually remove this lmb */
> + return true;
> }
>
> static int dlpar_add_lmb(struct drmem_lmb *);
> --
> 2.25.1
>
next prev parent reply other threads:[~2020-04-08 2:48 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-07 13:54 [PATCH v1 0/2] mm/memory_hotplug: remove is_mem_section_removable() David Hildenbrand
2020-04-07 13:54 ` David Hildenbrand
2020-04-07 13:54 ` [PATCH v1 1/2] powerpc/pseries/hotplug-memory: stop checking is_mem_section_removable() David Hildenbrand
2020-04-07 13:54 ` David Hildenbrand
2020-04-07 13:58 ` Michal Hocko
2020-04-07 13:58 ` Michal Hocko
2020-04-08 2:46 ` Baoquan He [this message]
2020-04-08 2:46 ` Baoquan He
2020-04-09 2:59 ` piliu
2020-04-09 2:59 ` piliu
2020-04-09 7:26 ` David Hildenbrand
2020-04-09 7:26 ` David Hildenbrand
2020-04-09 8:56 ` David Hildenbrand
2020-04-09 8:56 ` David Hildenbrand
2020-04-09 14:01 ` piliu
2020-04-09 14:01 ` piliu
2020-04-09 7:26 ` Michael Ellerman
2020-04-09 7:26 ` Michael Ellerman
2020-04-09 7:32 ` David Hildenbrand
2020-04-09 7:32 ` David Hildenbrand
2020-04-09 7:59 ` Michal Hocko
2020-04-09 7:59 ` Michal Hocko
2020-04-09 8:12 ` David Hildenbrand
2020-04-09 8:12 ` David Hildenbrand
2020-04-09 8:49 ` Michal Hocko
2020-04-09 8:49 ` Michal Hocko
2020-04-07 13:54 ` [PATCH v1 2/2] mm/memory_hotplug: remove is_mem_section_removable() David Hildenbrand
2020-04-07 13:54 ` David Hildenbrand
2020-04-07 14:00 ` Michal Hocko
2020-04-07 14:00 ` Michal Hocko
2020-04-07 21:30 ` Wei Yang
2020-04-07 21:30 ` Wei Yang
2020-04-08 2:48 ` Baoquan He
2020-04-08 2:48 ` Baoquan He
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=20200408024630.GQ2402@MiWiFi-R3L-srv \
--to=bhe@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mhocko@suse.com \
--cc=nfont@linux.vnet.ibm.com \
--cc=osalvador@suse.de \
--cc=paulus@samba.org \
--cc=piliu@redhat.com \
--cc=richard.weiyang@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.