[Patch 3/4] memblock: limit memory address from memblock

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

 



Setting kernelcore_max_pfn means all memory which is bigger than
the boot parameter is allocated as ZONE_MOVABLE. So memory which
is allocated by memblock also should be limited by the parameter.

The patch limits memory from memblock.

---
 include/linux/memblock.h |    1 +
 mm/memblock.c            |    5 ++++-
 mm/page_alloc.c          |    6 +++++-
 3 files changed, 10 insertions(+), 2 deletions(-)

Index: linux-3.4-rc6/include/linux/memblock.h
===================================================================
--- linux-3.4-rc6.orig/include/linux/memblock.h	2012-05-15 03:17:33.180555589 +0900
+++ linux-3.4-rc6/include/linux/memblock.h	2012-05-15 03:51:25.102153084 +0900
@@ -42,6 +42,7 @@ struct memblock {

 extern struct memblock memblock;
 extern int memblock_debug;
+extern phys_addr_t memblock_limit;

 #define memblock_dbg(fmt, ...) \
 	if (memblock_debug) printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
Index: linux-3.4-rc6/mm/memblock.c
===================================================================
--- linux-3.4-rc6.orig/mm/memblock.c	2012-05-15 03:17:33.180555589 +0900
+++ linux-3.4-rc6/mm/memblock.c	2012-05-15 03:51:25.104153055 +0900
@@ -876,7 +876,10 @@ int __init_memblock memblock_is_region_r

 void __init_memblock memblock_set_current_limit(phys_addr_t limit)
 {
-	memblock.current_limit = limit;
+	if (!memblock_limit || (memblock_limit > limit))
+		memblock.current_limit = limit;
+	else
+		memblock.current_limit = memblock_limit;
 }

 static void __init_memblock memblock_dump(struct memblock_type *type, char *name)
Index: linux-3.4-rc6/mm/page_alloc.c
===================================================================
--- linux-3.4-rc6.orig/mm/page_alloc.c	2012-05-15 03:17:33.179555602 +0900
+++ linux-3.4-rc6/mm/page_alloc.c	2012-05-15 03:51:25.107153013 +0900
@@ -205,6 +205,8 @@ static unsigned long __initdata required
 static unsigned long __initdata required_movablecore;
 static unsigned long __meminitdata zone_movable_pfn[MAX_NUMNODES];

+phys_addr_t memblock_limit;
+
 /* movable_zone is the "real" zone pages in ZONE_MOVABLE are taken from */
 int movable_zone;
 EXPORT_SYMBOL(movable_zone);
@@ -4836,7 +4838,9 @@ static int __init cmdline_parse_core(cha
  */
 static int __init cmdline_parse_kernelcore_max_addr(char *p)
 {
-	return cmdline_parse_core(p, &required_kernelcore_max_pfn);
+	cmdline_parse_core(p, &required_kernelcore_max_pfn);
+	memblock_limit = required_kernelcore_max_pfn << PAGE_SHIFT;
+	return 0;
 }

 /*

--
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/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
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]