lkml.org 
[lkml]   [2008]   [Mar]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [1/7] Implement true end_pfn_mapped for 32bit
    Date

    [Old patch; repost, but needed for further patches in the series]

    Even on 32bit 2MB pages can map more memory than is in the true
    max_low_pfn if end_pfn is not highmem and not aligned to 2MB.
    Add a end_pfn_map similar to x86-64 that accounts for this
    fact. This is important for code that really needs to know about
    all mapping aliases.

    Signed-off-by: Andi Kleen <ak@suse.de>

    ---
    arch/x86/mm/init_32.c | 4 ++++
    include/asm-x86/page.h | 4 +++-
    include/asm-x86/page_64.h | 1 -
    3 files changed, 7 insertions(+), 2 deletions(-)

    Index: linux/arch/x86/mm/init_32.c
    ===================================================================
    --- linux.orig/arch/x86/mm/init_32.c
    +++ linux/arch/x86/mm/init_32.c
    @@ -50,6 +50,8 @@

    unsigned int __VMALLOC_RESERVE = 128 << 20;

    +unsigned long end_pfn_map;
    +
    DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
    unsigned long highstart_pfn, highend_pfn;

    @@ -193,6 +195,7 @@ static void __init kernel_physical_mappi
    set_pmd(pmd, pfn_pmd(pfn, prot));

    pfn += PTRS_PER_PTE;
    + end_pfn_map = pfn;
    continue;
    }
    pte = one_page_table_init(pmd);
    @@ -207,6 +210,7 @@ static void __init kernel_physical_mappi

    set_pte(pte, pfn_pte(pfn, prot));
    }
    + end_pfn_map = pfn;
    }
    }
    }
    Index: linux/include/asm-x86/page.h
    ===================================================================
    --- linux.orig/include/asm-x86/page.h
    +++ linux/include/asm-x86/page.h
    @@ -36,7 +36,7 @@
    #define max_pfn_mapped end_pfn_map
    #else
    #include <asm/page_32.h>
    -#define max_pfn_mapped max_low_pfn
    +#define max_pfn_mapped end_pfn_map
    #endif /* CONFIG_X86_64 */

    #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET)
    @@ -51,6 +51,8 @@
    extern int page_is_ram(unsigned long pagenr);
    extern int devmem_is_allowed(unsigned long pagenr);

    +extern unsigned long end_pfn_map;
    +
    struct page;

    static void inline clear_user_page(void *page, unsigned long vaddr,
    Index: linux/include/asm-x86/page_64.h
    ===================================================================
    --- linux.orig/include/asm-x86/page_64.h
    +++ linux/include/asm-x86/page_64.h
    @@ -55,7 +55,6 @@ void clear_page(void *page);
    void copy_page(void *to, void *from);

    extern unsigned long end_pfn;
    -extern unsigned long end_pfn_map;
    extern unsigned long phys_base;

    extern unsigned long __phys_addr(unsigned long);

    \
     
     \ /
      Last update: 2008-03-12 03:57    [W:0.021 / U:1.592 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site