lkml.org 
[lkml]   [2012]   [Aug]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 21/23 V2] memblock: limit memory address from memblock
    Date
    From: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>

    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.

    Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
    ---
    include/linux/memblock.h | 1 +
    mm/memblock.c | 5 ++++-
    mm/page_alloc.c | 6 +++++-
    3 files changed, 10 insertions(+), 2 deletions(-)

    diff --git a/include/linux/memblock.h b/include/linux/memblock.h
    index 19dc455..f2977ae 100644
    --- a/include/linux/memblock.h
    +++ b/include/linux/memblock.h
    @@ -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__)
    diff --git a/mm/memblock.c b/mm/memblock.c
    index 5cc6731..663b805 100644
    --- a/mm/memblock.c
    +++ b/mm/memblock.c
    @@ -931,7 +931,10 @@ int __init_memblock memblock_is_region_reserved(phys_addr_t base, phys_addr_t si

    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)
    diff --git a/mm/page_alloc.c b/mm/page_alloc.c
    index 65ac5c9..c4d3aa0 100644
    --- a/mm/page_alloc.c
    +++ b/mm/page_alloc.c
    @@ -209,6 +209,8 @@ static unsigned long __initdata required_kernelcore;
    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);
    @@ -4876,7 +4878,9 @@ static int __init cmdline_parse_core(char *p, unsigned long *core)
    */
    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;
    }
    early_param("kernelcore_max_addr", cmdline_parse_kernelcore_max_addr);
    #endif
    --
    1.7.1


    \
     
     \ /
      Last update: 2012-08-02 09:01    [W:0.071 / U:148.756 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site