Re: [PATCH v3 11/13] x86, memblock, mem-hotplug: Free hotpluggable memory reserved by memblock.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 24, 2013 at 05:29:20PM +0800, Tang Chen wrote:
>We reserved hotpluggable memory in memblock. And when memory initialization
>is done, we have to free it to buddy system.
>

Reviewed-by: Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx>

>This patch free memory reserved by memblock with flag MEMBLK_HOTPLUGGABLE.
>
>Signed-off-by: Tang Chen <tangchen@xxxxxxxxxxxxxx>
>---
> include/linux/memblock.h |    1 +
> mm/memblock.c            |   20 ++++++++++++++++++++
> mm/nobootmem.c           |    3 +++
> 3 files changed, 24 insertions(+), 0 deletions(-)
>
>diff --git a/include/linux/memblock.h b/include/linux/memblock.h
>index 0f01930..08c761d 100644
>--- a/include/linux/memblock.h
>+++ b/include/linux/memblock.h
>@@ -69,6 +69,7 @@ int memblock_free(phys_addr_t base, phys_addr_t size);
> int memblock_reserve(phys_addr_t base, phys_addr_t size);
> int memblock_reserve_local_node(phys_addr_t base, phys_addr_t size, int nid);
> int memblock_reserve_hotpluggable(phys_addr_t base, phys_addr_t size, int nid);
>+void memblock_free_hotpluggable(void);
> void memblock_trim_memory(phys_addr_t align);
> void memblock_mark_kernel_nodes(void);
> bool memblock_is_kernel_node(int nid);
>diff --git a/mm/memblock.c b/mm/memblock.c
>index 0c55588..54de398 100644
>--- a/mm/memblock.c
>+++ b/mm/memblock.c
>@@ -568,6 +568,26 @@ int __init_memblock memblock_free(phys_addr_t base, phys_addr_t size)
> 	return __memblock_remove(&memblock.reserved, base, size);
> }
>
>+static void __init_memblock memblock_free_flags(unsigned long flags)
>+{
>+	int i;
>+	struct memblock_type *reserved = &memblock.reserved;
>+
>+	for (i = 0; i < reserved->cnt; i++) {
>+		if (reserved->regions[i].flags == flags)
>+			memblock_remove_region(reserved, i);
>+	}
>+}
>+
>+void __init_memblock memblock_free_hotpluggable()
>+{
>+	unsigned long flags = 1 << MEMBLK_HOTPLUGGABLE;
>+
>+	memblock_dbg("memblock: free all hotpluggable memory");
>+
>+	memblock_free_flags(flags);
>+}
>+
> static int __init_memblock memblock_reserve_region(phys_addr_t base,
> 						   phys_addr_t size,
> 						   int nid,
>diff --git a/mm/nobootmem.c b/mm/nobootmem.c
>index 5e07d36..cd85604 100644
>--- a/mm/nobootmem.c
>+++ b/mm/nobootmem.c
>@@ -165,6 +165,9 @@ unsigned long __init free_all_bootmem(void)
> 	for_each_online_pgdat(pgdat)
> 		reset_node_lowmem_managed_pages(pgdat);
>
>+	/* Hotpluggable memory reserved by memblock should also be freed. */
>+	memblock_free_hotpluggable();
>+
> 	/*
> 	 * We need to use MAX_NUMNODES instead of NODE_DATA(0)->node_id
> 	 *  because in some case like Node0 doesn't have RAM installed
>-- 
>1.7.1
>
>--
>To unsubscribe, send a message with 'unsubscribe linux-mm' in
>the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
>see: http://www.linux-mm.org/ .
>Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]