lkml.org 
[lkml]   [2011]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 14/23] memblock: Implement memblock_add_node()
    Date
    Implement memblock_add_node() which can add a new memblock memory
    region with specific node ID.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Yinghai Lu <yinghai@kernel.org>
    ---
    include/linux/memblock.h | 1 +
    mm/memblock.c | 20 +++++++++++++-------
    2 files changed, 14 insertions(+), 7 deletions(-)

    diff --git a/include/linux/memblock.h b/include/linux/memblock.h
    index 208bfc9..f548e4d 100644
    --- a/include/linux/memblock.h
    +++ b/include/linux/memblock.h
    @@ -52,6 +52,7 @@ int memblock_free_reserved_regions(void);
    int memblock_reserve_reserved_regions(void);

    void memblock_allow_resize(void);
    +int memblock_add_node(phys_addr_t base, phys_addr_t size, int nid);
    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);
    diff --git a/mm/memblock.c b/mm/memblock.c
    index d74efa3..19093b5 100644
    --- a/mm/memblock.c
    +++ b/mm/memblock.c
    @@ -324,6 +324,7 @@ static void __init_memblock memblock_insert_region(struct memblock_type *type,
    * @type: memblock type to add new region into
    * @base: base address of the new region
    * @size: size of the new region
    + * @nid: nid of the new region
    *
    * Add new memblock region [@base,@base+@size) into @type. The new region
    * is allowed to overlap with existing ones - overlaps don't affect already
    @@ -334,7 +335,7 @@ static void __init_memblock memblock_insert_region(struct memblock_type *type,
    * 0 on success, -errno on failure.
    */
    static int __init_memblock memblock_add_region(struct memblock_type *type,
    - phys_addr_t base, phys_addr_t size)
    + phys_addr_t base, phys_addr_t size, int nid)
    {
    bool insert = false;
    phys_addr_t obase = base;
    @@ -346,7 +347,7 @@ static int __init_memblock memblock_add_region(struct memblock_type *type,
    WARN_ON(type->cnt != 1 || type->total_size);
    type->regions[0].base = base;
    type->regions[0].size = size;
    - memblock_set_region_node(&type->regions[0], MAX_NUMNODES);
    + memblock_set_region_node(&type->regions[0], nid);
    type->total_size = size;
    return 0;
    }
    @@ -376,7 +377,7 @@ repeat:
    nr_new++;
    if (insert)
    memblock_insert_region(type, i++, base,
    - rbase - base, MAX_NUMNODES);
    + rbase - base, nid);
    }
    /* area below @rend is dealt with, forget about it */
    base = min(rend, end);
    @@ -386,8 +387,7 @@ repeat:
    if (base < end) {
    nr_new++;
    if (insert)
    - memblock_insert_region(type, i, base, end - base,
    - MAX_NUMNODES);
    + memblock_insert_region(type, i, base, end - base, nid);
    }

    /*
    @@ -406,9 +406,15 @@ repeat:
    }
    }

    +int __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size,
    + int nid)
    +{
    + return memblock_add_region(&memblock.memory, base, size, nid);
    +}
    +
    int __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)
    {
    - return memblock_add_region(&memblock.memory, base, size);
    + return memblock_add_region(&memblock.memory, base, size, MAX_NUMNODES);
    }

    /**
    @@ -522,7 +528,7 @@ int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)
    (void *)_RET_IP_);
    BUG_ON(0 == size);

    - return memblock_add_region(_rgn, base, size);
    + return memblock_add_region(_rgn, base, size, MAX_NUMNODES);
    }

    /**
    --
    1.7.6


    \
     
     \ /
      Last update: 2011-07-26 17:43    [W:2.976 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site