lkml.org 
[lkml]   [2008]   [Jun]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH -mm 13/14] bootmem: revisit alloc_bootmem_section
    Since alloc_bootmem_core does no goal-fallback anymore and just
    returns NULL if the allocation fails, we might now use it in
    alloc_bootmem_section without all the fixup code for a misplaced
    allocation.

    Also, the limit can be the first PFN of the next section as the
    semantics is that the limit is _above_ the allocated region, not
    within.

    Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
    CC: Yasunori Goto <y-goto@jp.fujitsu.com>
    ---
    mm/bootmem.c | 27 ++++++---------------------
    1 file changed, 6 insertions(+), 21 deletions(-)
    --- a/mm/bootmem.c
    +++ b/mm/bootmem.c
    @@ -674,29 +674,14 @@ void * __init __alloc_bootmem_low_node(p
    void * __init alloc_bootmem_section(unsigned long size,
    unsigned long section_nr)
    {
    - void *ptr;
    - unsigned long limit, goal, start_nr, end_nr, pfn;
    - struct pglist_data *pgdat;
    + bootmem_data_t *bdata;
    + unsigned long pfn, goal, limit;

    pfn = section_nr_to_pfn(section_nr);
    - goal = PFN_PHYS(pfn);
    - limit = PFN_PHYS(section_nr_to_pfn(section_nr + 1)) - 1;
    - pgdat = NODE_DATA(early_pfn_to_nid(pfn));
    - ptr = alloc_bootmem_core(pgdat->bdata, size, SMP_CACHE_BYTES, goal,
    - limit);
    + goal = pfn << PAGE_SHIFT;
    + limit = section_nr_to_pfn(section_nr + 1) << PAGE_SHIFT;
    + bdata = &bootmem_node_data[early_pfn_to_nid(pfn)];

    - if (!ptr)
    - return NULL;
    -
    - start_nr = pfn_to_section_nr(PFN_DOWN(__pa(ptr)));
    - end_nr = pfn_to_section_nr(PFN_DOWN(__pa(ptr) + size));
    - if (start_nr != section_nr || end_nr != section_nr) {
    - printk(KERN_WARNING "alloc_bootmem failed on section %ld.\n",
    - section_nr);
    - free_bootmem_node(pgdat, __pa(ptr), size);
    - ptr = NULL;
    - }
    -
    - return ptr;
    + return alloc_bootmem_core(bdata, size, SMP_CACHE_BYTES, goal, limit);
    }
    #endif
    --



    \
     
     \ /
      Last update: 2008-06-03 04:05    [W:0.086 / U:0.220 seconds]
    ©2003-2014 Jasper Spaans. Advertise on this site