Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ed7ed365172e27b0efe9d43cc962723c7193e34e
Commit:     ed7ed365172e27b0efe9d43cc962723c7193e34e
Parent:     396faf0303d273219db5d7eb4a2879ad977ed185
Author:     Mel Gorman <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 17 04:03:14 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Jul 17 10:22:59 2007 -0700

    handle kernelcore=: generic
    
    This patch adds the kernelcore= parameter for x86.
    
    Once all patches are applied, a new command-line parameter exist and a new
    sysctl.  This patch adds the necessary documentation.
    
    From: Yasunori Goto <[EMAIL PROTECTED]>
    
      When "kernelcore" boot option is specified, kernel can't boot up on ia64
      because of an infinite loop.  In addition, the parsing code can be handled
      in an architecture-independent manner.
    
      This patch uses common code to handle the kernelcore= parameter.  It is
      only available to architectures that support arch-independent zone-sizing
      (i.e.  define CONFIG_ARCH_POPULATES_NODE_MAP).  Other architectures will
      ignore the boot parameter.
    
    [EMAIL PROTECTED]: make cmdline_parse_kernelcore() static]
    Signed-off-by: Mel Gorman <[EMAIL PROTECTED]>
    Signed-off-by: Yasunori Goto <[EMAIL PROTECTED]>
    Acked-by: Andy Whitcroft <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 Documentation/filesystems/proc.txt  |   15 +++++++++++++++
 Documentation/kernel-parameters.txt |   16 ++++++++++++++++
 Documentation/sysctl/vm.txt         |    3 ++-
 arch/ia64/kernel/efi.c              |    1 +
 include/linux/mm.h                  |    1 -
 mm/page_alloc.c                     |    5 ++++-
 6 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/Documentation/filesystems/proc.txt 
b/Documentation/filesystems/proc.txt
index 460b892..ebffdff 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -1348,6 +1348,21 @@ nr_hugepages configures number of hugetlb page reserved 
for the system.
 hugetlb_shm_group contains group id that is allowed to create SysV shared
 memory segment using hugetlb page.
 
+hugepages_treat_as_movable
+--------------------------
+
+This parameter is only useful when kernelcore= is specified at boot time to
+create ZONE_MOVABLE for pages that may be reclaimed or migrated. Huge pages
+are not movable so are not normally allocated from ZONE_MOVABLE. A non-zero
+value written to hugepages_treat_as_movable allows huge pages to be allocated
+from ZONE_MOVABLE.
+
+Once enabled, the ZONE_MOVABLE is treated as an area of memory the huge
+pages pool can easily grow or shrink within. Assuming that applications are
+not running that mlock() a lot of memory, it is likely the huge pages pool
+can grow to the size of ZONE_MOVABLE by repeatedly entering the desired value
+into nr_hugepages and triggering page reclaim.
+
 laptop_mode
 -----------
 
diff --git a/Documentation/kernel-parameters.txt 
b/Documentation/kernel-parameters.txt
index 8363ad3..1794aff 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -817,6 +817,22 @@ and is between 256 and 4096 characters. It is defined in 
the file
        js=             [HW,JOY] Analog joystick
                        See Documentation/input/joystick.txt.
 
+       kernelcore=nn[KMG]      [KNL,IA-32,IA-64,PPC,X86-64] This parameter
+                       specifies the amount of memory usable by the kernel
+                       for non-movable allocations.  The requested amount is
+                       spread evenly throughout all nodes in the system. The
+                       remaining memory in each node is used for Movable
+                       pages. In the event, a node is too small to have both
+                       kernelcore and Movable pages, kernelcore pages will
+                       take priority and other nodes will have a larger number
+                       of kernelcore pages.  The Movable zone is used for the
+                       allocation of pages that may be reclaimed or moved
+                       by the page migration subsystem.  This means that
+                       HugeTLB pages may not be allocated from this zone.
+                       Note that allocations like PTEs-from-HighMem still
+                       use the HighMem zone if it exists, and the Normal
+                       zone if it does not.
+
        keepinitrd      [HW,ARM]
 
        kstack=N        [IA-32,X86-64] Print N words from the kernel stack
diff --git a/Documentation/sysctl/vm.txt b/Documentation/sysctl/vm.txt
index df3ff20..a0ccc5b 100644
--- a/Documentation/sysctl/vm.txt
+++ b/Documentation/sysctl/vm.txt
@@ -38,7 +38,8 @@ Currently, these files are in /proc/sys/vm:
 
 dirty_ratio, dirty_background_ratio, dirty_expire_centisecs,
 dirty_writeback_centisecs, vfs_cache_pressure, laptop_mode,
-block_dump, swap_token_timeout, drop-caches:
+block_dump, swap_token_timeout, drop-caches,
+hugepages_treat_as_movable:
 
 See Documentation/filesystems/proc.txt
 
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c
index 75ec347..73ca86d 100644
--- a/arch/ia64/kernel/efi.c
+++ b/arch/ia64/kernel/efi.c
@@ -28,6 +28,7 @@
 #include <linux/time.h>
 #include <linux/efi.h>
 #include <linux/kexec.h>
+#include <linux/mm.h>
 
 #include <asm/io.h>
 #include <asm/kregs.h>
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 857e448..97d0cdd 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -1005,7 +1005,6 @@ extern unsigned long 
find_max_pfn_with_active_regions(void);
 extern void free_bootmem_with_active_regions(int nid,
                                                unsigned long max_low_pfn);
 extern void sparse_memory_present_with_active_regions(int nid);
-extern int cmdline_parse_kernelcore(char *p);
 #ifndef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID
 extern int early_pfn_to_nid(unsigned long pfn);
 #endif /* CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID */
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index c3f6f85..0a53728 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -3416,7 +3416,7 @@ void __init free_area_init_nodes(unsigned long 
*max_zone_pfn)
  * kernelcore=size sets the amount of memory for use for allocations that
  * cannot be reclaimed or migrated.
  */
-int __init cmdline_parse_kernelcore(char *p)
+static int __init cmdline_parse_kernelcore(char *p)
 {
        unsigned long long coremem;
        if (!p)
@@ -3430,6 +3430,9 @@ int __init cmdline_parse_kernelcore(char *p)
 
        return 0;
 }
+
+early_param("kernelcore", cmdline_parse_kernelcore);
+
 #endif /* CONFIG_ARCH_POPULATES_NODE_MAP */
 
 /**
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to