From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@suse.com>,
Oscar Salvador <osalvador@suse.de>,
Jianyong Wu <Jianyong.Wu@arm.com>,
"Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
Vineet Gupta <vgupta@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Huacai Chen <chenhuacai@kernel.org>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Eric Biederman <ebiederm@xmission.com>,
Arnd Bergmann <arnd@arndb.de>,
linux-snps-arc@lists.infradead.org, linux-ia64@vger.kernel.org,
linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org,
linux-s390@vger.kernel.org, linux-mm@kvack.org,
kexec@lists.infradead.org
Subject: Re: [PATCH v2 3/5] memblock: allow to specify flags with memblock_add_node()
Date: Tue, 5 Oct 2021 17:36:09 -0700 [thread overview]
Message-ID: <YVzvefCmvLZSZTcR@kernel.org> (raw)
In-Reply-To: <20211004093605.5830-4-david@redhat.com>
On Mon, Oct 04, 2021 at 11:36:03AM +0200, David Hildenbrand wrote:
> We want to specify flags when hotplugging memory. Let's prepare to pass
> flags to memblock_add_node() by adjusting all existing users.
>
> Note that when hotplugging memory the system is already up and running
> and we might have concurrent memblock users: for example, while we're
> hotplugging memory, kexec_file code might search for suitable memory
> regions to place kexec images. It's important to add the memory directly
> to memblock via a single call with the right flags, instead of adding the
> memory first and apply flags later: otherwise, concurrent memblock users
> might temporarily stumble over memblocks with wrong flags, which will be
> important in a follow-up patch that introduces a new flag to properly
> handle add_memory_driver_managed().
>
> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
> Acked-by: Heiko Carstens <hca@linux.ibm.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
> arch/arc/mm/init.c | 4 ++--
> arch/ia64/mm/contig.c | 2 +-
> arch/ia64/mm/init.c | 2 +-
> arch/m68k/mm/mcfmmu.c | 3 ++-
> arch/m68k/mm/motorola.c | 6 ++++--
> arch/mips/loongson64/init.c | 4 +++-
> arch/mips/sgi-ip27/ip27-memory.c | 3 ++-
> arch/s390/kernel/setup.c | 3 ++-
> include/linux/memblock.h | 3 ++-
> include/linux/mm.h | 2 +-
> mm/memblock.c | 9 +++++----
> mm/memory_hotplug.c | 2 +-
> 12 files changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
> index 699ecf119641..110eb69e9bee 100644
> --- a/arch/arc/mm/init.c
> +++ b/arch/arc/mm/init.c
> @@ -59,13 +59,13 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
>
> low_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 0);
> + memblock_add_node(base, size, 0, MEMBLOCK_NONE);
> } else {
> #ifdef CONFIG_HIGHMEM
> high_mem_start = base;
> high_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 1);
> + memblock_add_node(base, size, 1, MEMBLOCK_NONE);
> memblock_reserve(base, size);
> #endif
> }
> diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c
> index 42e025cfbd08..24901d809301 100644
> --- a/arch/ia64/mm/contig.c
> +++ b/arch/ia64/mm/contig.c
> @@ -153,7 +153,7 @@ find_memory (void)
> efi_memmap_walk(find_max_min_low_pfn, NULL);
> max_pfn = max_low_pfn;
>
> - memblock_add_node(0, PFN_PHYS(max_low_pfn), 0);
> + memblock_add_node(0, PFN_PHYS(max_low_pfn), 0, MEMBLOCK_NONE);
>
> find_initrd();
>
> diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
> index 5c6da8d83c1a..5d165607bf35 100644
> --- a/arch/ia64/mm/init.c
> +++ b/arch/ia64/mm/init.c
> @@ -378,7 +378,7 @@ int __init register_active_ranges(u64 start, u64 len, int nid)
> #endif
>
> if (start < end)
> - memblock_add_node(__pa(start), end - start, nid);
> + memblock_add_node(__pa(start), end - start, nid, MEMBLOCK_NONE);
> return 0;
> }
>
> diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
> index eac9dde65193..6f1f25125294 100644
> --- a/arch/m68k/mm/mcfmmu.c
> +++ b/arch/m68k/mm/mcfmmu.c
> @@ -174,7 +174,8 @@ void __init cf_bootmem_alloc(void)
> m68k_memory[0].addr = _rambase;
> m68k_memory[0].size = _ramend - _rambase;
>
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
>
> /* compute total pages in system */
> num_pages = PFN_DOWN(_ramend - _rambase);
> diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
> index 9f3f77785aa7..2b05bb2bac00 100644
> --- a/arch/m68k/mm/motorola.c
> +++ b/arch/m68k/mm/motorola.c
> @@ -410,7 +410,8 @@ void __init paging_init(void)
>
> min_addr = m68k_memory[0].addr;
> max_addr = min_addr + m68k_memory[0].size;
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
> for (i = 1; i < m68k_num_memory;) {
> if (m68k_memory[i].addr < min_addr) {
> printk("Ignoring memory chunk at 0x%lx:0x%lx before the first chunk\n",
> @@ -421,7 +422,8 @@ void __init paging_init(void)
> (m68k_num_memory - i) * sizeof(struct m68k_mem_info));
> continue;
> }
> - memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i);
> + memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i,
> + MEMBLOCK_NONE);
> addr = m68k_memory[i].addr + m68k_memory[i].size;
> if (addr > max_addr)
> max_addr = addr;
> diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
> index 76e0a9636a0e..4ac5ba80bbf6 100644
> --- a/arch/mips/loongson64/init.c
> +++ b/arch/mips/loongson64/init.c
> @@ -77,7 +77,9 @@ void __init szmem(unsigned int node)
> (u32)node_id, mem_type, mem_start, mem_size);
> pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
> start_pfn, end_pfn, num_physpages);
> - memblock_add_node(PFN_PHYS(start_pfn), PFN_PHYS(node_psize), node);
> + memblock_add_node(PFN_PHYS(start_pfn),
> + PFN_PHYS(node_psize), node,
> + MEMBLOCK_NONE);
> break;
> case SYSTEM_RAM_RESERVED:
> pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
> diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c
> index 6173684b5aaa..adc2faeecf7c 100644
> --- a/arch/mips/sgi-ip27/ip27-memory.c
> +++ b/arch/mips/sgi-ip27/ip27-memory.c
> @@ -341,7 +341,8 @@ static void __init szmem(void)
> continue;
> }
> memblock_add_node(PFN_PHYS(slot_getbasepfn(node, slot)),
> - PFN_PHYS(slot_psize), node);
> + PFN_PHYS(slot_psize), node,
> + MEMBLOCK_NONE);
> }
> }
> }
> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
> index 67e5fff96ee0..f3943f15af6e 100644
> --- a/arch/s390/kernel/setup.c
> +++ b/arch/s390/kernel/setup.c
> @@ -593,7 +593,8 @@ static void __init setup_resources(void)
> * part of the System RAM resource.
> */
> if (crashk_res.end) {
> - memblock_add_node(crashk_res.start, resource_size(&crashk_res), 0);
> + memblock_add_node(crashk_res.start, resource_size(&crashk_res),
> + 0, MEMBLOCK_NONE);
> memblock_reserve(crashk_res.start, resource_size(&crashk_res));
> insert_resource(&iomem_resource, &crashk_res);
> }
> diff --git a/include/linux/memblock.h b/include/linux/memblock.h
> index 4ee8dd2d63a7..2bc726e43a1b 100644
> --- a/include/linux/memblock.h
> +++ b/include/linux/memblock.h
> @@ -104,7 +104,8 @@ static inline void memblock_discard(void) {}
> #endif
>
> void memblock_allow_resize(void);
> -int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
> +int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid,
> + enum memblock_flags flags);
> int memblock_add(phys_addr_t base, phys_addr_t size);
> int memblock_remove(phys_addr_t base, phys_addr_t size);
> int memblock_free(phys_addr_t base, phys_addr_t size);
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 73a52aba448f..0117cb35b212 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2447,7 +2447,7 @@ static inline unsigned long get_num_physpages(void)
> * unsigned long max_zone_pfns[MAX_NR_ZONES] = {max_dma, max_normal_pfn,
> * max_highmem_pfn};
> * for_each_valid_physical_page_range()
> - * memblock_add_node(base, size, nid)
> + * memblock_add_node(base, size, nid, MEMBLOCK_NONE)
> * free_area_init(max_zone_pfns);
> */
> void free_area_init(unsigned long *max_zone_pfn);
> diff --git a/mm/memblock.c b/mm/memblock.c
> index 184dcd2e5d99..47a56b223141 100644
> --- a/mm/memblock.c
> +++ b/mm/memblock.c
> @@ -655,6 +655,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * @base: base address of the new region
> * @size: size of the new region
> * @nid: nid of the new region
> + * @flags: flags of the new region
> *
> * Add new memblock region [@base, @base + @size) to the "memory"
> * type. See memblock_add_range() description for mode details
> @@ -663,14 +664,14 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * 0 on success, -errno on failure.
> */
> int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,
> - int nid)
> + int nid, enum memblock_flags flags)
> {
> phys_addr_t end = base + size - 1;
>
> - memblock_dbg("%s: [%pa-%pa] nid=%d %pS\n", __func__,
> - &base, &end, nid, (void *)_RET_IP_);
> + memblock_dbg("%s: [%pa-%pa] nid=%d flags=%x %pS\n", __func__,
> + &base, &end, nid, flags, (void *)_RET_IP_);
>
> - return memblock_add_range(&memblock.memory, base, size, nid, 0);
> + return memblock_add_range(&memblock.memory, base, size, nid, flags);
> }
>
> /**
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 917b3528636d..5f873e7f5b29 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1385,7 +1385,7 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
> mem_hotplug_begin();
>
> if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) {
> - ret = memblock_add_node(start, size, nid);
> + ret = memblock_add_node(start, size, nid, MEMBLOCK_NONE);
> if (ret)
> goto error_mem_hotplug_end;
> }
> --
> 2.31.1
>
--
Sincerely yours,
Mike.
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@suse.com>,
Oscar Salvador <osalvador@suse.de>,
Jianyong Wu <Jianyong.Wu@arm.com>,
"Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
Vineet Gupta <vgupta@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Huacai Chen <chenhuacai@kernel.org>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Eric Biederman <ebiederm@xmission.com>,
Arnd Bergmann <arnd@arndb.de>,
linux-snps-arc@lists.infradead.org, linux-ia64@vger.kernel.org,
linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org,
linux-s390@vger.kernel.org, linux-mm@kvack.org,
kexec@lists.infradead.org
Subject: Re: [PATCH v2 3/5] memblock: allow to specify flags with memblock_add_node()
Date: Wed, 06 Oct 2021 00:36:09 +0000 [thread overview]
Message-ID: <YVzvefCmvLZSZTcR@kernel.org> (raw)
In-Reply-To: <20211004093605.5830-4-david@redhat.com>
On Mon, Oct 04, 2021 at 11:36:03AM +0200, David Hildenbrand wrote:
> We want to specify flags when hotplugging memory. Let's prepare to pass
> flags to memblock_add_node() by adjusting all existing users.
>
> Note that when hotplugging memory the system is already up and running
> and we might have concurrent memblock users: for example, while we're
> hotplugging memory, kexec_file code might search for suitable memory
> regions to place kexec images. It's important to add the memory directly
> to memblock via a single call with the right flags, instead of adding the
> memory first and apply flags later: otherwise, concurrent memblock users
> might temporarily stumble over memblocks with wrong flags, which will be
> important in a follow-up patch that introduces a new flag to properly
> handle add_memory_driver_managed().
>
> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
> Acked-by: Heiko Carstens <hca@linux.ibm.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
> arch/arc/mm/init.c | 4 ++--
> arch/ia64/mm/contig.c | 2 +-
> arch/ia64/mm/init.c | 2 +-
> arch/m68k/mm/mcfmmu.c | 3 ++-
> arch/m68k/mm/motorola.c | 6 ++++--
> arch/mips/loongson64/init.c | 4 +++-
> arch/mips/sgi-ip27/ip27-memory.c | 3 ++-
> arch/s390/kernel/setup.c | 3 ++-
> include/linux/memblock.h | 3 ++-
> include/linux/mm.h | 2 +-
> mm/memblock.c | 9 +++++----
> mm/memory_hotplug.c | 2 +-
> 12 files changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
> index 699ecf119641..110eb69e9bee 100644
> --- a/arch/arc/mm/init.c
> +++ b/arch/arc/mm/init.c
> @@ -59,13 +59,13 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
>
> low_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 0);
> + memblock_add_node(base, size, 0, MEMBLOCK_NONE);
> } else {
> #ifdef CONFIG_HIGHMEM
> high_mem_start = base;
> high_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 1);
> + memblock_add_node(base, size, 1, MEMBLOCK_NONE);
> memblock_reserve(base, size);
> #endif
> }
> diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c
> index 42e025cfbd08..24901d809301 100644
> --- a/arch/ia64/mm/contig.c
> +++ b/arch/ia64/mm/contig.c
> @@ -153,7 +153,7 @@ find_memory (void)
> efi_memmap_walk(find_max_min_low_pfn, NULL);
> max_pfn = max_low_pfn;
>
> - memblock_add_node(0, PFN_PHYS(max_low_pfn), 0);
> + memblock_add_node(0, PFN_PHYS(max_low_pfn), 0, MEMBLOCK_NONE);
>
> find_initrd();
>
> diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
> index 5c6da8d83c1a..5d165607bf35 100644
> --- a/arch/ia64/mm/init.c
> +++ b/arch/ia64/mm/init.c
> @@ -378,7 +378,7 @@ int __init register_active_ranges(u64 start, u64 len, int nid)
> #endif
>
> if (start < end)
> - memblock_add_node(__pa(start), end - start, nid);
> + memblock_add_node(__pa(start), end - start, nid, MEMBLOCK_NONE);
> return 0;
> }
>
> diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
> index eac9dde65193..6f1f25125294 100644
> --- a/arch/m68k/mm/mcfmmu.c
> +++ b/arch/m68k/mm/mcfmmu.c
> @@ -174,7 +174,8 @@ void __init cf_bootmem_alloc(void)
> m68k_memory[0].addr = _rambase;
> m68k_memory[0].size = _ramend - _rambase;
>
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
>
> /* compute total pages in system */
> num_pages = PFN_DOWN(_ramend - _rambase);
> diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
> index 9f3f77785aa7..2b05bb2bac00 100644
> --- a/arch/m68k/mm/motorola.c
> +++ b/arch/m68k/mm/motorola.c
> @@ -410,7 +410,8 @@ void __init paging_init(void)
>
> min_addr = m68k_memory[0].addr;
> max_addr = min_addr + m68k_memory[0].size;
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
> for (i = 1; i < m68k_num_memory;) {
> if (m68k_memory[i].addr < min_addr) {
> printk("Ignoring memory chunk at 0x%lx:0x%lx before the first chunk\n",
> @@ -421,7 +422,8 @@ void __init paging_init(void)
> (m68k_num_memory - i) * sizeof(struct m68k_mem_info));
> continue;
> }
> - memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i);
> + memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i,
> + MEMBLOCK_NONE);
> addr = m68k_memory[i].addr + m68k_memory[i].size;
> if (addr > max_addr)
> max_addr = addr;
> diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
> index 76e0a9636a0e..4ac5ba80bbf6 100644
> --- a/arch/mips/loongson64/init.c
> +++ b/arch/mips/loongson64/init.c
> @@ -77,7 +77,9 @@ void __init szmem(unsigned int node)
> (u32)node_id, mem_type, mem_start, mem_size);
> pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
> start_pfn, end_pfn, num_physpages);
> - memblock_add_node(PFN_PHYS(start_pfn), PFN_PHYS(node_psize), node);
> + memblock_add_node(PFN_PHYS(start_pfn),
> + PFN_PHYS(node_psize), node,
> + MEMBLOCK_NONE);
> break;
> case SYSTEM_RAM_RESERVED:
> pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
> diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c
> index 6173684b5aaa..adc2faeecf7c 100644
> --- a/arch/mips/sgi-ip27/ip27-memory.c
> +++ b/arch/mips/sgi-ip27/ip27-memory.c
> @@ -341,7 +341,8 @@ static void __init szmem(void)
> continue;
> }
> memblock_add_node(PFN_PHYS(slot_getbasepfn(node, slot)),
> - PFN_PHYS(slot_psize), node);
> + PFN_PHYS(slot_psize), node,
> + MEMBLOCK_NONE);
> }
> }
> }
> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
> index 67e5fff96ee0..f3943f15af6e 100644
> --- a/arch/s390/kernel/setup.c
> +++ b/arch/s390/kernel/setup.c
> @@ -593,7 +593,8 @@ static void __init setup_resources(void)
> * part of the System RAM resource.
> */
> if (crashk_res.end) {
> - memblock_add_node(crashk_res.start, resource_size(&crashk_res), 0);
> + memblock_add_node(crashk_res.start, resource_size(&crashk_res),
> + 0, MEMBLOCK_NONE);
> memblock_reserve(crashk_res.start, resource_size(&crashk_res));
> insert_resource(&iomem_resource, &crashk_res);
> }
> diff --git a/include/linux/memblock.h b/include/linux/memblock.h
> index 4ee8dd2d63a7..2bc726e43a1b 100644
> --- a/include/linux/memblock.h
> +++ b/include/linux/memblock.h
> @@ -104,7 +104,8 @@ static inline void memblock_discard(void) {}
> #endif
>
> void memblock_allow_resize(void);
> -int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
> +int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid,
> + enum memblock_flags flags);
> int memblock_add(phys_addr_t base, phys_addr_t size);
> int memblock_remove(phys_addr_t base, phys_addr_t size);
> int memblock_free(phys_addr_t base, phys_addr_t size);
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 73a52aba448f..0117cb35b212 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2447,7 +2447,7 @@ static inline unsigned long get_num_physpages(void)
> * unsigned long max_zone_pfns[MAX_NR_ZONES] = {max_dma, max_normal_pfn,
> * max_highmem_pfn};
> * for_each_valid_physical_page_range()
> - * memblock_add_node(base, size, nid)
> + * memblock_add_node(base, size, nid, MEMBLOCK_NONE)
> * free_area_init(max_zone_pfns);
> */
> void free_area_init(unsigned long *max_zone_pfn);
> diff --git a/mm/memblock.c b/mm/memblock.c
> index 184dcd2e5d99..47a56b223141 100644
> --- a/mm/memblock.c
> +++ b/mm/memblock.c
> @@ -655,6 +655,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * @base: base address of the new region
> * @size: size of the new region
> * @nid: nid of the new region
> + * @flags: flags of the new region
> *
> * Add new memblock region [@base, @base + @size) to the "memory"
> * type. See memblock_add_range() description for mode details
> @@ -663,14 +664,14 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * 0 on success, -errno on failure.
> */
> int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,
> - int nid)
> + int nid, enum memblock_flags flags)
> {
> phys_addr_t end = base + size - 1;
>
> - memblock_dbg("%s: [%pa-%pa] nid=%d %pS\n", __func__,
> - &base, &end, nid, (void *)_RET_IP_);
> + memblock_dbg("%s: [%pa-%pa] nid=%d flags=%x %pS\n", __func__,
> + &base, &end, nid, flags, (void *)_RET_IP_);
>
> - return memblock_add_range(&memblock.memory, base, size, nid, 0);
> + return memblock_add_range(&memblock.memory, base, size, nid, flags);
> }
>
> /**
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 917b3528636d..5f873e7f5b29 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1385,7 +1385,7 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
> mem_hotplug_begin();
>
> if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) {
> - ret = memblock_add_node(start, size, nid);
> + ret = memblock_add_node(start, size, nid, MEMBLOCK_NONE);
> if (ret)
> goto error_mem_hotplug_end;
> }
> --
> 2.31.1
>
--
Sincerely yours,
Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@suse.com>,
Oscar Salvador <osalvador@suse.de>,
Jianyong Wu <Jianyong.Wu@arm.com>,
"Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
Vineet Gupta <vgupta@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Huacai Chen <chenhuacai@kernel.org>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Eric Biederman <ebiederm@xmission.com>,
Arnd Bergmann <arnd@arndb.de>,
linux-snps-arc@lists.infradead.org, linux-ia64@vger.kernel.org,
linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org,
linux-s390@vger.kernel.org, linux-mm@kvack.org,
kexec@lists.infradead.org
Subject: Re: [PATCH v2 3/5] memblock: allow to specify flags with memblock_add_node()
Date: Tue, 5 Oct 2021 17:36:09 -0700 [thread overview]
Message-ID: <YVzvefCmvLZSZTcR@kernel.org> (raw)
In-Reply-To: <20211004093605.5830-4-david@redhat.com>
On Mon, Oct 04, 2021 at 11:36:03AM +0200, David Hildenbrand wrote:
> We want to specify flags when hotplugging memory. Let's prepare to pass
> flags to memblock_add_node() by adjusting all existing users.
>
> Note that when hotplugging memory the system is already up and running
> and we might have concurrent memblock users: for example, while we're
> hotplugging memory, kexec_file code might search for suitable memory
> regions to place kexec images. It's important to add the memory directly
> to memblock via a single call with the right flags, instead of adding the
> memory first and apply flags later: otherwise, concurrent memblock users
> might temporarily stumble over memblocks with wrong flags, which will be
> important in a follow-up patch that introduces a new flag to properly
> handle add_memory_driver_managed().
>
> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
> Acked-by: Heiko Carstens <hca@linux.ibm.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
> arch/arc/mm/init.c | 4 ++--
> arch/ia64/mm/contig.c | 2 +-
> arch/ia64/mm/init.c | 2 +-
> arch/m68k/mm/mcfmmu.c | 3 ++-
> arch/m68k/mm/motorola.c | 6 ++++--
> arch/mips/loongson64/init.c | 4 +++-
> arch/mips/sgi-ip27/ip27-memory.c | 3 ++-
> arch/s390/kernel/setup.c | 3 ++-
> include/linux/memblock.h | 3 ++-
> include/linux/mm.h | 2 +-
> mm/memblock.c | 9 +++++----
> mm/memory_hotplug.c | 2 +-
> 12 files changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
> index 699ecf119641..110eb69e9bee 100644
> --- a/arch/arc/mm/init.c
> +++ b/arch/arc/mm/init.c
> @@ -59,13 +59,13 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
>
> low_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 0);
> + memblock_add_node(base, size, 0, MEMBLOCK_NONE);
> } else {
> #ifdef CONFIG_HIGHMEM
> high_mem_start = base;
> high_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 1);
> + memblock_add_node(base, size, 1, MEMBLOCK_NONE);
> memblock_reserve(base, size);
> #endif
> }
> diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c
> index 42e025cfbd08..24901d809301 100644
> --- a/arch/ia64/mm/contig.c
> +++ b/arch/ia64/mm/contig.c
> @@ -153,7 +153,7 @@ find_memory (void)
> efi_memmap_walk(find_max_min_low_pfn, NULL);
> max_pfn = max_low_pfn;
>
> - memblock_add_node(0, PFN_PHYS(max_low_pfn), 0);
> + memblock_add_node(0, PFN_PHYS(max_low_pfn), 0, MEMBLOCK_NONE);
>
> find_initrd();
>
> diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
> index 5c6da8d83c1a..5d165607bf35 100644
> --- a/arch/ia64/mm/init.c
> +++ b/arch/ia64/mm/init.c
> @@ -378,7 +378,7 @@ int __init register_active_ranges(u64 start, u64 len, int nid)
> #endif
>
> if (start < end)
> - memblock_add_node(__pa(start), end - start, nid);
> + memblock_add_node(__pa(start), end - start, nid, MEMBLOCK_NONE);
> return 0;
> }
>
> diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
> index eac9dde65193..6f1f25125294 100644
> --- a/arch/m68k/mm/mcfmmu.c
> +++ b/arch/m68k/mm/mcfmmu.c
> @@ -174,7 +174,8 @@ void __init cf_bootmem_alloc(void)
> m68k_memory[0].addr = _rambase;
> m68k_memory[0].size = _ramend - _rambase;
>
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
>
> /* compute total pages in system */
> num_pages = PFN_DOWN(_ramend - _rambase);
> diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
> index 9f3f77785aa7..2b05bb2bac00 100644
> --- a/arch/m68k/mm/motorola.c
> +++ b/arch/m68k/mm/motorola.c
> @@ -410,7 +410,8 @@ void __init paging_init(void)
>
> min_addr = m68k_memory[0].addr;
> max_addr = min_addr + m68k_memory[0].size;
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
> for (i = 1; i < m68k_num_memory;) {
> if (m68k_memory[i].addr < min_addr) {
> printk("Ignoring memory chunk at 0x%lx:0x%lx before the first chunk\n",
> @@ -421,7 +422,8 @@ void __init paging_init(void)
> (m68k_num_memory - i) * sizeof(struct m68k_mem_info));
> continue;
> }
> - memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i);
> + memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i,
> + MEMBLOCK_NONE);
> addr = m68k_memory[i].addr + m68k_memory[i].size;
> if (addr > max_addr)
> max_addr = addr;
> diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
> index 76e0a9636a0e..4ac5ba80bbf6 100644
> --- a/arch/mips/loongson64/init.c
> +++ b/arch/mips/loongson64/init.c
> @@ -77,7 +77,9 @@ void __init szmem(unsigned int node)
> (u32)node_id, mem_type, mem_start, mem_size);
> pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
> start_pfn, end_pfn, num_physpages);
> - memblock_add_node(PFN_PHYS(start_pfn), PFN_PHYS(node_psize), node);
> + memblock_add_node(PFN_PHYS(start_pfn),
> + PFN_PHYS(node_psize), node,
> + MEMBLOCK_NONE);
> break;
> case SYSTEM_RAM_RESERVED:
> pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
> diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c
> index 6173684b5aaa..adc2faeecf7c 100644
> --- a/arch/mips/sgi-ip27/ip27-memory.c
> +++ b/arch/mips/sgi-ip27/ip27-memory.c
> @@ -341,7 +341,8 @@ static void __init szmem(void)
> continue;
> }
> memblock_add_node(PFN_PHYS(slot_getbasepfn(node, slot)),
> - PFN_PHYS(slot_psize), node);
> + PFN_PHYS(slot_psize), node,
> + MEMBLOCK_NONE);
> }
> }
> }
> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
> index 67e5fff96ee0..f3943f15af6e 100644
> --- a/arch/s390/kernel/setup.c
> +++ b/arch/s390/kernel/setup.c
> @@ -593,7 +593,8 @@ static void __init setup_resources(void)
> * part of the System RAM resource.
> */
> if (crashk_res.end) {
> - memblock_add_node(crashk_res.start, resource_size(&crashk_res), 0);
> + memblock_add_node(crashk_res.start, resource_size(&crashk_res),
> + 0, MEMBLOCK_NONE);
> memblock_reserve(crashk_res.start, resource_size(&crashk_res));
> insert_resource(&iomem_resource, &crashk_res);
> }
> diff --git a/include/linux/memblock.h b/include/linux/memblock.h
> index 4ee8dd2d63a7..2bc726e43a1b 100644
> --- a/include/linux/memblock.h
> +++ b/include/linux/memblock.h
> @@ -104,7 +104,8 @@ static inline void memblock_discard(void) {}
> #endif
>
> void memblock_allow_resize(void);
> -int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
> +int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid,
> + enum memblock_flags flags);
> int memblock_add(phys_addr_t base, phys_addr_t size);
> int memblock_remove(phys_addr_t base, phys_addr_t size);
> int memblock_free(phys_addr_t base, phys_addr_t size);
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 73a52aba448f..0117cb35b212 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2447,7 +2447,7 @@ static inline unsigned long get_num_physpages(void)
> * unsigned long max_zone_pfns[MAX_NR_ZONES] = {max_dma, max_normal_pfn,
> * max_highmem_pfn};
> * for_each_valid_physical_page_range()
> - * memblock_add_node(base, size, nid)
> + * memblock_add_node(base, size, nid, MEMBLOCK_NONE)
> * free_area_init(max_zone_pfns);
> */
> void free_area_init(unsigned long *max_zone_pfn);
> diff --git a/mm/memblock.c b/mm/memblock.c
> index 184dcd2e5d99..47a56b223141 100644
> --- a/mm/memblock.c
> +++ b/mm/memblock.c
> @@ -655,6 +655,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * @base: base address of the new region
> * @size: size of the new region
> * @nid: nid of the new region
> + * @flags: flags of the new region
> *
> * Add new memblock region [@base, @base + @size) to the "memory"
> * type. See memblock_add_range() description for mode details
> @@ -663,14 +664,14 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * 0 on success, -errno on failure.
> */
> int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,
> - int nid)
> + int nid, enum memblock_flags flags)
> {
> phys_addr_t end = base + size - 1;
>
> - memblock_dbg("%s: [%pa-%pa] nid=%d %pS\n", __func__,
> - &base, &end, nid, (void *)_RET_IP_);
> + memblock_dbg("%s: [%pa-%pa] nid=%d flags=%x %pS\n", __func__,
> + &base, &end, nid, flags, (void *)_RET_IP_);
>
> - return memblock_add_range(&memblock.memory, base, size, nid, 0);
> + return memblock_add_range(&memblock.memory, base, size, nid, flags);
> }
>
> /**
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 917b3528636d..5f873e7f5b29 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1385,7 +1385,7 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
> mem_hotplug_begin();
>
> if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) {
> - ret = memblock_add_node(start, size, nid);
> + ret = memblock_add_node(start, size, nid, MEMBLOCK_NONE);
> if (ret)
> goto error_mem_hotplug_end;
> }
> --
> 2.31.1
>
--
Sincerely yours,
Mike.
WARNING: multiple messages have this Message-ID (diff)
From: Mike Rapoport <rppt@kernel.org>
To: David Hildenbrand <david@redhat.com>
Cc: linux-kernel@vger.kernel.org,
Andrew Morton <akpm@linux-foundation.org>,
Michal Hocko <mhocko@suse.com>,
Oscar Salvador <osalvador@suse.de>,
Jianyong Wu <Jianyong.Wu@arm.com>,
"Aneesh Kumar K . V" <aneesh.kumar@linux.ibm.com>,
Vineet Gupta <vgupta@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Huacai Chen <chenhuacai@kernel.org>,
Jiaxun Yang <jiaxun.yang@flygoat.com>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Heiko Carstens <hca@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Eric Biederman <ebiederm@xmission.com>,
Arnd Bergmann <arnd@arndb.de>,
linux-snps-arc@lists.infradead.org, linux-ia64@vger.kernel.org,
linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org,
linux-s390@vger.kernel.org, linux-mm@kvack.org,
kexec@lists.infradead.org
Subject: Re: [PATCH v2 3/5] memblock: allow to specify flags with memblock_add_node()
Date: Tue, 5 Oct 2021 17:36:09 -0700 [thread overview]
Message-ID: <YVzvefCmvLZSZTcR@kernel.org> (raw)
In-Reply-To: <20211004093605.5830-4-david@redhat.com>
On Mon, Oct 04, 2021 at 11:36:03AM +0200, David Hildenbrand wrote:
> We want to specify flags when hotplugging memory. Let's prepare to pass
> flags to memblock_add_node() by adjusting all existing users.
>
> Note that when hotplugging memory the system is already up and running
> and we might have concurrent memblock users: for example, while we're
> hotplugging memory, kexec_file code might search for suitable memory
> regions to place kexec images. It's important to add the memory directly
> to memblock via a single call with the right flags, instead of adding the
> memory first and apply flags later: otherwise, concurrent memblock users
> might temporarily stumble over memblocks with wrong flags, which will be
> important in a follow-up patch that introduces a new flag to properly
> handle add_memory_driver_managed().
>
> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
> Acked-by: Heiko Carstens <hca@linux.ibm.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Mike Rapoport <rppt@linux.ibm.com>
> ---
> arch/arc/mm/init.c | 4 ++--
> arch/ia64/mm/contig.c | 2 +-
> arch/ia64/mm/init.c | 2 +-
> arch/m68k/mm/mcfmmu.c | 3 ++-
> arch/m68k/mm/motorola.c | 6 ++++--
> arch/mips/loongson64/init.c | 4 +++-
> arch/mips/sgi-ip27/ip27-memory.c | 3 ++-
> arch/s390/kernel/setup.c | 3 ++-
> include/linux/memblock.h | 3 ++-
> include/linux/mm.h | 2 +-
> mm/memblock.c | 9 +++++----
> mm/memory_hotplug.c | 2 +-
> 12 files changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c
> index 699ecf119641..110eb69e9bee 100644
> --- a/arch/arc/mm/init.c
> +++ b/arch/arc/mm/init.c
> @@ -59,13 +59,13 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size)
>
> low_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 0);
> + memblock_add_node(base, size, 0, MEMBLOCK_NONE);
> } else {
> #ifdef CONFIG_HIGHMEM
> high_mem_start = base;
> high_mem_sz = size;
> in_use = 1;
> - memblock_add_node(base, size, 1);
> + memblock_add_node(base, size, 1, MEMBLOCK_NONE);
> memblock_reserve(base, size);
> #endif
> }
> diff --git a/arch/ia64/mm/contig.c b/arch/ia64/mm/contig.c
> index 42e025cfbd08..24901d809301 100644
> --- a/arch/ia64/mm/contig.c
> +++ b/arch/ia64/mm/contig.c
> @@ -153,7 +153,7 @@ find_memory (void)
> efi_memmap_walk(find_max_min_low_pfn, NULL);
> max_pfn = max_low_pfn;
>
> - memblock_add_node(0, PFN_PHYS(max_low_pfn), 0);
> + memblock_add_node(0, PFN_PHYS(max_low_pfn), 0, MEMBLOCK_NONE);
>
> find_initrd();
>
> diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
> index 5c6da8d83c1a..5d165607bf35 100644
> --- a/arch/ia64/mm/init.c
> +++ b/arch/ia64/mm/init.c
> @@ -378,7 +378,7 @@ int __init register_active_ranges(u64 start, u64 len, int nid)
> #endif
>
> if (start < end)
> - memblock_add_node(__pa(start), end - start, nid);
> + memblock_add_node(__pa(start), end - start, nid, MEMBLOCK_NONE);
> return 0;
> }
>
> diff --git a/arch/m68k/mm/mcfmmu.c b/arch/m68k/mm/mcfmmu.c
> index eac9dde65193..6f1f25125294 100644
> --- a/arch/m68k/mm/mcfmmu.c
> +++ b/arch/m68k/mm/mcfmmu.c
> @@ -174,7 +174,8 @@ void __init cf_bootmem_alloc(void)
> m68k_memory[0].addr = _rambase;
> m68k_memory[0].size = _ramend - _rambase;
>
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
>
> /* compute total pages in system */
> num_pages = PFN_DOWN(_ramend - _rambase);
> diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
> index 9f3f77785aa7..2b05bb2bac00 100644
> --- a/arch/m68k/mm/motorola.c
> +++ b/arch/m68k/mm/motorola.c
> @@ -410,7 +410,8 @@ void __init paging_init(void)
>
> min_addr = m68k_memory[0].addr;
> max_addr = min_addr + m68k_memory[0].size;
> - memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0);
> + memblock_add_node(m68k_memory[0].addr, m68k_memory[0].size, 0,
> + MEMBLOCK_NONE);
> for (i = 1; i < m68k_num_memory;) {
> if (m68k_memory[i].addr < min_addr) {
> printk("Ignoring memory chunk at 0x%lx:0x%lx before the first chunk\n",
> @@ -421,7 +422,8 @@ void __init paging_init(void)
> (m68k_num_memory - i) * sizeof(struct m68k_mem_info));
> continue;
> }
> - memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i);
> + memblock_add_node(m68k_memory[i].addr, m68k_memory[i].size, i,
> + MEMBLOCK_NONE);
> addr = m68k_memory[i].addr + m68k_memory[i].size;
> if (addr > max_addr)
> max_addr = addr;
> diff --git a/arch/mips/loongson64/init.c b/arch/mips/loongson64/init.c
> index 76e0a9636a0e..4ac5ba80bbf6 100644
> --- a/arch/mips/loongson64/init.c
> +++ b/arch/mips/loongson64/init.c
> @@ -77,7 +77,9 @@ void __init szmem(unsigned int node)
> (u32)node_id, mem_type, mem_start, mem_size);
> pr_info(" start_pfn:0x%llx, end_pfn:0x%llx, num_physpages:0x%lx\n",
> start_pfn, end_pfn, num_physpages);
> - memblock_add_node(PFN_PHYS(start_pfn), PFN_PHYS(node_psize), node);
> + memblock_add_node(PFN_PHYS(start_pfn),
> + PFN_PHYS(node_psize), node,
> + MEMBLOCK_NONE);
> break;
> case SYSTEM_RAM_RESERVED:
> pr_info("Node%d: mem_type:%d, mem_start:0x%llx, mem_size:0x%llx MB\n",
> diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c
> index 6173684b5aaa..adc2faeecf7c 100644
> --- a/arch/mips/sgi-ip27/ip27-memory.c
> +++ b/arch/mips/sgi-ip27/ip27-memory.c
> @@ -341,7 +341,8 @@ static void __init szmem(void)
> continue;
> }
> memblock_add_node(PFN_PHYS(slot_getbasepfn(node, slot)),
> - PFN_PHYS(slot_psize), node);
> + PFN_PHYS(slot_psize), node,
> + MEMBLOCK_NONE);
> }
> }
> }
> diff --git a/arch/s390/kernel/setup.c b/arch/s390/kernel/setup.c
> index 67e5fff96ee0..f3943f15af6e 100644
> --- a/arch/s390/kernel/setup.c
> +++ b/arch/s390/kernel/setup.c
> @@ -593,7 +593,8 @@ static void __init setup_resources(void)
> * part of the System RAM resource.
> */
> if (crashk_res.end) {
> - memblock_add_node(crashk_res.start, resource_size(&crashk_res), 0);
> + memblock_add_node(crashk_res.start, resource_size(&crashk_res),
> + 0, MEMBLOCK_NONE);
> memblock_reserve(crashk_res.start, resource_size(&crashk_res));
> insert_resource(&iomem_resource, &crashk_res);
> }
> diff --git a/include/linux/memblock.h b/include/linux/memblock.h
> index 4ee8dd2d63a7..2bc726e43a1b 100644
> --- a/include/linux/memblock.h
> +++ b/include/linux/memblock.h
> @@ -104,7 +104,8 @@ static inline void memblock_discard(void) {}
> #endif
>
> void memblock_allow_resize(void);
> -int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
> +int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid,
> + enum memblock_flags flags);
> int memblock_add(phys_addr_t base, phys_addr_t size);
> int memblock_remove(phys_addr_t base, phys_addr_t size);
> int memblock_free(phys_addr_t base, phys_addr_t size);
> diff --git a/include/linux/mm.h b/include/linux/mm.h
> index 73a52aba448f..0117cb35b212 100644
> --- a/include/linux/mm.h
> +++ b/include/linux/mm.h
> @@ -2447,7 +2447,7 @@ static inline unsigned long get_num_physpages(void)
> * unsigned long max_zone_pfns[MAX_NR_ZONES] = {max_dma, max_normal_pfn,
> * max_highmem_pfn};
> * for_each_valid_physical_page_range()
> - * memblock_add_node(base, size, nid)
> + * memblock_add_node(base, size, nid, MEMBLOCK_NONE)
> * free_area_init(max_zone_pfns);
> */
> void free_area_init(unsigned long *max_zone_pfn);
> diff --git a/mm/memblock.c b/mm/memblock.c
> index 184dcd2e5d99..47a56b223141 100644
> --- a/mm/memblock.c
> +++ b/mm/memblock.c
> @@ -655,6 +655,7 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * @base: base address of the new region
> * @size: size of the new region
> * @nid: nid of the new region
> + * @flags: flags of the new region
> *
> * Add new memblock region [@base, @base + @size) to the "memory"
> * type. See memblock_add_range() description for mode details
> @@ -663,14 +664,14 @@ static int __init_memblock memblock_add_range(struct memblock_type *type,
> * 0 on success, -errno on failure.
> */
> int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,
> - int nid)
> + int nid, enum memblock_flags flags)
> {
> phys_addr_t end = base + size - 1;
>
> - memblock_dbg("%s: [%pa-%pa] nid=%d %pS\n", __func__,
> - &base, &end, nid, (void *)_RET_IP_);
> + memblock_dbg("%s: [%pa-%pa] nid=%d flags=%x %pS\n", __func__,
> + &base, &end, nid, flags, (void *)_RET_IP_);
>
> - return memblock_add_range(&memblock.memory, base, size, nid, 0);
> + return memblock_add_range(&memblock.memory, base, size, nid, flags);
> }
>
> /**
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 917b3528636d..5f873e7f5b29 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1385,7 +1385,7 @@ int __ref add_memory_resource(int nid, struct resource *res, mhp_t mhp_flags)
> mem_hotplug_begin();
>
> if (IS_ENABLED(CONFIG_ARCH_KEEP_MEMBLOCK)) {
> - ret = memblock_add_node(start, size, nid);
> + ret = memblock_add_node(start, size, nid, MEMBLOCK_NONE);
> if (ret)
> goto error_mem_hotplug_end;
> }
> --
> 2.31.1
>
--
Sincerely yours,
Mike.
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc
next prev parent reply other threads:[~2021-10-06 0:36 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-04 9:36 [PATCH v2 0/5] mm/memory_hotplug: full support for add_memory_driver_managed() with CONFIG_ARCH_KEEP_MEMBLOCK David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` [PATCH v2 0/5] mm/memory_hotplug: full support for add_memory_driver_managed() with CONFIG_ARCH_KEEP David Hildenbrand
2021-10-04 9:36 ` [PATCH v2 1/5] mm/memory_hotplug: handle memblock_add_node() failures in add_memory_resource() David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` [PATCH v2 2/5] memblock: improve MEMBLOCK_HOTPLUG documentation David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-06 0:35 ` Mike Rapoport
2021-10-06 0:35 ` Mike Rapoport
2021-10-06 0:35 ` Mike Rapoport
2021-10-06 0:35 ` Mike Rapoport
2021-10-04 9:36 ` [PATCH v2 3/5] memblock: allow to specify flags with memblock_add_node() David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 19:31 ` Shahab Vahedi
2021-10-04 19:31 ` Shahab Vahedi
2021-10-04 19:31 ` Shahab Vahedi
2021-10-04 19:31 ` Shahab Vahedi
2021-10-06 0:36 ` Mike Rapoport [this message]
2021-10-06 0:36 ` Mike Rapoport
2021-10-06 0:36 ` Mike Rapoport
2021-10-06 0:36 ` Mike Rapoport
2021-10-04 9:36 ` [PATCH v2 4/5] memblock: add MEMBLOCK_DRIVER_MANAGED to mimic IORESOURCE_SYSRAM_DRIVER_MANAGED David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-06 0:35 ` Mike Rapoport
2021-10-06 0:35 ` Mike Rapoport
2021-10-06 0:35 ` Mike Rapoport
2021-10-06 0:35 ` Mike Rapoport
2021-10-04 9:36 ` [PATCH v2 5/5] mm/memory_hotplug: indicate MEMBLOCK_DRIVER_MANAGED with IORESOURCE_SYSRAM_DRIVER_MANAGED David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` David Hildenbrand
2021-10-04 9:36 ` [PATCH v2 5/5] mm/memory_hotplug: indicate MEMBLOCK_DRIVER_MANAGED with IORESOURCE_SYSRAM_DRIVER_MAN David Hildenbrand
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=YVzvefCmvLZSZTcR@kernel.org \
--to=rppt@kernel.org \
--cc=Jianyong.Wu@arm.com \
--cc=akpm@linux-foundation.org \
--cc=aneesh.kumar@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=borntraeger@de.ibm.com \
--cc=chenhuacai@kernel.org \
--cc=david@redhat.com \
--cc=ebiederm@xmission.com \
--cc=geert@linux-m68k.org \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=jiaxun.yang@flygoat.com \
--cc=kexec@lists.infradead.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=mhocko@suse.com \
--cc=osalvador@suse.de \
--cc=tsbogend@alpha.franken.de \
--cc=vgupta@kernel.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.