lkml.org 
[lkml]   [2012]   [Jun]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    SubjectRE: [PATCH] [RESEND] arm: limit memblock base address for early_pte_alloc
    Date
    > From: Dave Martin [mailto:dave.martin@linaro.org]
    > Sent: Thursday, June 28, 2012 1:02 AM
    >
    > For me, it appears that this block just contains the initial region passed
    > in ATAG_MEM or on the command line, with some reservations for
    > swapper_pg_dir, the kernel text/data, device tree and initramfs.
    >
    > So far as I can tell, the only memory guaranteed to be mapped here is the
    > kernel image: there may be no guarantee that there is any unused space in
    > this region which could be used to allocate extra page tables.
    > The rest appears during the execution of map_lowmem().
    >
    > Cheers
    > ---Dave

    Thank you for your comment, Dave! It was not that sophisticated choice, but
    I thought that normal embedded system trying to reduce the BOM would have a
    big-enough first memblock memory region. However you're right. There can be
    exceptional systems. Then, how do you think about following manner:

    diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
    index e5dad60..0bc5316 100644
    --- a/arch/arm/mm/mmu.c
    +++ b/arch/arm/mm/mmu.c
    @@ -1094,6 +1094,16 @@ static void __init kmap_init(void)
    static void __init map_lowmem(void)
    {
    struct memblock_region *reg;
    + phys_addr_t pmd_map_end = 0;
    +
    + for_each_memblock(memory, reg) {
    + pmd_map_end = reg->base + reg->size;
    + if((reg->base | reg->size) & ~PMD_MASK)
    + break;
    + }
    + if(pmd_map_end > lowmem_limit)
    + pmd_map_end = lowmem_limit;
    + memblock_set_current_limit(pmd_map_end & PMD_MASK);

    /* Map all the lowmem memory banks. */
    for_each_memblock(memory, reg) {
    @@ -1113,6 +1123,8 @@ static void __init map_lowmem(void)

    create_mapping(&map);
    }
    +
    + memblock_set_current_limit(lowmem_limit);
    }

    /*
    @@ -1123,8 +1135,6 @@ void __init paging_init(struct machine_desc *mdesc)
    {
    void *zero_page;

    - memblock_set_current_limit(arm_lowmem_limit);
    -
    build_mem_type_table();
    prepare_page_table();
    map_lowmem();
    This will not limit the PTE-allocation to near the end of first bank.





    \
     
     \ /
      Last update: 2012-06-28 08:21    [W:0.024 / U:89.524 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site