lkml.org 
[lkml]   [2013]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 03/21] x86, acpi, numa, mem-hotplug: Introduce MEMBLK_HOTPLUGGABLE to reserve hotpluggable memory.
    Date
    Pages used by the kernel cannot be migrated. As a result, hotpluggable
    memory used by the kernel cannot be hot-removed. So for memory
    hotplug users, the kernel should not use hotpluggable memory.

    Since now we have flags in memblock, we introduce a MEMBLK_HOTPLUGGABLE
    flag to mark hotpluggable memory. At the early time, we use memblock to
    reserve hotpluggable memory, and mark it with MEMBLK_HOTPLUGGABLE flag.
    When the system is up, we free these memory with MEMBLK_HOTPLUGGABLE
    flag to the buddy, and arrange them into ZONE_MOVABLE. In this way, the
    kernel won't be able to use it.

    This patch introduces MEMBLK_HOTPLUGGABLE flag, and an API to reserve
    memory with MEMBLK_HOTPLUGGABLE flag. This is a preparation for the
    coming patches.

    Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
    ---
    include/linux/memblock.h | 2 ++
    mm/memblock.c | 6 ++++++
    2 files changed, 8 insertions(+), 0 deletions(-)

    diff --git a/include/linux/memblock.h b/include/linux/memblock.h
    index 93f3453..90b49ee 100644
    --- a/include/linux/memblock.h
    +++ b/include/linux/memblock.h
    @@ -21,6 +21,7 @@

    /* Definition of memblock flags. */
    #define MEMBLK_FLAGS_DEFAULT 0x0 /* default flag */
    +#define MEMBLK_HOTPLUGGABLE 0x1 /* hotpluggable region */

    struct memblock_region {
    phys_addr_t base;
    @@ -61,6 +62,7 @@ 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);
    int memblock_reserve(phys_addr_t base, phys_addr_t size);
    +int memblock_reserve_hotpluggable(phys_addr_t base, phys_addr_t size, int nid);
    void memblock_trim_memory(phys_addr_t align);

    #ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
    diff --git a/mm/memblock.c b/mm/memblock.c
    index 9e871e9..73fe62d 100644
    --- a/mm/memblock.c
    +++ b/mm/memblock.c
    @@ -586,6 +586,12 @@ int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)
    MEMBLK_FLAGS_DEFAULT);
    }

    +int __init_memblock memblock_reserve_hotpluggable(phys_addr_t base,
    + phys_addr_t size, int nid)
    +{
    + return memblock_reserve_region(base, size, nid, MEMBLK_HOTPLUGGABLE);
    +}
    +
    /**
    * __next_free_mem_range - next function for for_each_free_mem_range()
    * @idx: pointer to u64 loop variable
    --
    1.7.1


    \
     
     \ /
      Last update: 2013-07-19 11:21    [W:4.519 / U:0.372 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site