lkml.org 
[lkml]   [2010]   [Jan]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 23/29] x86: add find_early_area_size
    prepare to move bck find_e820_area_size back to e820.c

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    arch/x86/kernel/early_res.c | 45 ++++++++++++++++++++++++++++++------------
    1 files changed, 32 insertions(+), 13 deletions(-)

    diff --git a/arch/x86/kernel/early_res.c b/arch/x86/kernel/early_res.c
    index 3ae0051..aba02f2 100644
    --- a/arch/x86/kernel/early_res.c
    +++ b/arch/x86/kernel/early_res.c
    @@ -476,6 +476,29 @@ out:
    return -1ULL;
    }

    +u64 __init find_early_area_size(u64 ei_start, u64 ei_last, u64 start,
    + u64 *sizep, u64 align)
    +{
    + u64 addr, last;
    +
    + addr = round_up(ei_start, align);
    + if (addr < start)
    + addr = round_up(start, align);
    + if (addr >= ei_last)
    + goto out;
    + *sizep = ei_last - addr;
    + while (bad_addr_size(&addr, sizep, align) && addr + *sizep <= ei_last)
    + ;
    + last = addr + *sizep;
    + if (last > ei_last)
    + goto out;
    +
    + return addr;
    +
    +out:
    + return -1ULL;
    +}
    +
    /*
    * Find a free area with specified alignment in a specific range.
    */
    @@ -513,24 +536,20 @@ u64 __init find_e820_area_size(u64 start, u64 *sizep, u64 align)

    for (i = 0; i < e820.nr_map; i++) {
    struct e820entry *ei = &e820.map[i];
    - u64 addr, last;
    - u64 ei_last;
    + u64 addr;
    + u64 ei_start, ei_last;

    if (ei->type != E820_RAM)
    continue;
    - addr = round_up(ei->addr, align);
    +
    ei_last = ei->addr + ei->size;
    - if (addr < start)
    - addr = round_up(start, align);
    - if (addr >= ei_last)
    - continue;
    - *sizep = ei_last - addr;
    - while (bad_addr_size(&addr, sizep, align) &&
    - addr + *sizep <= ei_last)
    - ;
    - last = addr + *sizep;
    - if (last > ei_last)
    + ei_start = ei->addr;
    + addr = find_early_area_size(ei_start, ei_last, start,
    + sizep, align);
    +
    + if (addr == -1ULL)
    continue;
    +
    return addr;
    }

    --
    1.6.4.2


    \
     
     \ /
      Last update: 2010-01-04 04:15    [W:0.024 / U:30.564 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site