lkml.org 
[lkml]   [2008]   [Mar]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [11/18] Fix alignment bug in bootmem allocator
    Date

    Without this fix bootmem can return unaligned addresses when the start of a
    node is not aligned to the align value. Needed for reliably allocating
    gigabyte pages.
    Signed-off-by: Andi Kleen <ak@suse.de>

    ---
    mm/bootmem.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    Index: linux/mm/bootmem.c
    ===================================================================
    --- linux.orig/mm/bootmem.c
    +++ linux/mm/bootmem.c
    @@ -197,6 +197,7 @@ __alloc_bootmem_core(struct bootmem_data
    {
    unsigned long offset, remaining_size, areasize, preferred;
    unsigned long i, start = 0, incr, eidx, end_pfn;
    + unsigned long pfn;
    void *ret;

    if (!size) {
    @@ -239,12 +240,13 @@ __alloc_bootmem_core(struct bootmem_data
    preferred = PFN_DOWN(ALIGN(preferred, align)) + offset;
    areasize = (size + PAGE_SIZE-1) / PAGE_SIZE;
    incr = align >> PAGE_SHIFT ? : 1;
    + pfn = PFN_DOWN(bdata->node_boot_start);

    restart_scan:
    for (i = preferred; i < eidx; i += incr) {
    unsigned long j;
    i = find_next_zero_bit(bdata->node_bootmem_map, eidx, i);
    - i = ALIGN(i, incr);
    + i = ALIGN(pfn + i, incr) - pfn;
    if (i >= eidx)
    break;
    if (test_bit(i, bdata->node_bootmem_map))

    \
     
     \ /
      Last update: 2008-03-17 03:05    [W:0.020 / U:0.664 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site