• Vineet Gupta's avatar
    ARC: mm: support 3 levels of page tables · 2dde02ab
    Vineet Gupta authored
    ARCv2 MMU is software walked and Linux implements 2 levels of paging: pgd/pte.
    Forthcoming hw will have multiple levels, so this change preps mm code
    for same. It is also fun to try multi levels even on soft-walked code to
    ensure generic mm code is robust to handle.
    
    overview
    ________
    
    2 levels {pgd, pte} : pmd is folded but pmd_* macros are valid and operate on pgd
    3 levels {pgd, pmd, pte}:
      - pud is folded and pud_* macros point to pgd
      - pmd_* macros operate on actual pmd
    
    code changes
    ____________
    
    1. #include <asm-generic/pgtable-nopud.h>
    
    2. Define CONFIG_PGTABLE_LEVELS 3
    
    3a. Define PMD_SHIFT, PMD_SIZE, PMD_MASK, pmd_t
    3b. Define pmd_val() which actually deals with pmd
        (pmd_offset(), pmd_index() are provided by generic code)
    3c. pmd_alloc_one()/pmd_free() also provided by generic code
        (pmd_populate/pmd_free already exist)
    
    4. Define pud_none(), pud_bad() macros based on generic pud_val() which
       internally pertains to pgd now.
    4b. define pud_populate() to just setup pgd
    Acked-by: default avatarMike Rapoport <rppt@linux.ibm.com>
    Signed-off-by: default avatarVineet Gupta <vgupta@kernel.org>
    2dde02ab
pgalloc.h 2.59 KB