On 09/04/16 16:13, Aneesh Kumar K.V wrote:
> Here we create pgtable-64/4k.h and move pmd accessors that is common
> between hash and radix there. We can't do much sharing with 4k linux
> page size [1]. So for now it is empty. In later patches we will add
> functions that does conditional hash/radix accessors there.
> 
> [1] 4k linux page size with hash config don't support THP.
                                         does not
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com>
> ---
>  arch/powerpc/include/asm/book3s/64/hash-64k.h    | 83 ---------------------
>  arch/powerpc/include/asm/book3s/64/pgtable-4k.h  |  7 ++
>  arch/powerpc/include/asm/book3s/64/pgtable-64k.h | 94 
> ++++++++++++++++++++++++
>  arch/powerpc/include/asm/book3s/64/pgtable.h     |  7 ++
>  4 files changed, 108 insertions(+), 83 deletions(-)
>  create mode 100644 arch/powerpc/include/asm/book3s/64/pgtable-4k.h
>  create mode 100644 arch/powerpc/include/asm/book3s/64/pgtable-64k.h
> 
> diff --git a/arch/powerpc/include/asm/book3s/64/hash-64k.h 
> b/arch/powerpc/include/asm/book3s/64/hash-64k.h
> index d60c431c96cb..173f35e9faef 100644
> --- a/arch/powerpc/include/asm/book3s/64/hash-64k.h
> +++ b/arch/powerpc/include/asm/book3s/64/hash-64k.h
> @@ -118,57 +118,6 @@ static inline int remap_4k_pfn(struct vm_area_struct 
> *vma, unsigned long addr,
>  #define H_PUD_TABLE_SIZE     (sizeof(pud_t) << PUD_INDEX_SIZE)
>  #define H_PGD_TABLE_SIZE     (sizeof(pgd_t) << PGD_INDEX_SIZE)
>  
> -#ifdef CONFIG_HUGETLB_PAGE
> -/*
> - * We have PGD_INDEX_SIZ = 12 and PTE_INDEX_SIZE = 8, so that we can have
> - * 16GB hugepage pte in PGD and 16MB hugepage pte at PMD;
> - *
> - * Defined in such a way that we can optimize away code block at build time
> - * if CONFIG_HUGETLB_PAGE=n.
> - */
> -static inline int pmd_huge(pmd_t pmd)
> -{
> -     /*
> -      * leaf pte for huge page
> -      */
> -     return !!(pmd_val(pmd) & _PAGE_PTE);
> -}
> -
> -static inline int pud_huge(pud_t pud)
> -{
> -     /*
> -      * leaf pte for huge page
> -      */
> -     return !!(pud_val(pud) & _PAGE_PTE);
> -}
> -
> -static inline int pgd_huge(pgd_t pgd)
> -{
> -     /*
> -      * leaf pte for huge page
> -      */
> -     return !!(pgd_val(pgd) & _PAGE_PTE);
> -}
> -#define pgd_huge pgd_huge
> -
> -#ifdef CONFIG_DEBUG_VM
> -extern int hugepd_ok(hugepd_t hpd);
> -#define is_hugepd(hpd)               (hugepd_ok(hpd))
> -#else
> -/*
> - * With 64k page size, we have hugepage ptes in the pgd and pmd entries. We 
> don't
> - * need to setup hugepage directory for them. Our pte and page directory 
> format
> - * enable us to have this enabled.
> - */
> -static inline int hugepd_ok(hugepd_t hpd)
> -{
> -     return 0;
> -}
> -#define is_hugepd(pdep)                      0
> -#endif /* CONFIG_DEBUG_VM */
> -
> -#endif /* CONFIG_HUGETLB_PAGE */
> -
>  #ifdef CONFIG_TRANSPARENT_HUGEPAGE
>  extern unsigned long pmd_hugepage_update(struct mm_struct *mm,
>                                        unsigned long addr,
> @@ -239,44 +188,12 @@ static inline int pmd_trans_huge(pmd_t pmd)
>                 (_PAGE_PTE | H_PAGE_THP_HUGE));
>  }
>  
> -static inline int pmd_large(pmd_t pmd)
> -{
> -     return !!(pmd_val(pmd) & _PAGE_PTE);
> -}
> -
> -static inline pmd_t pmd_mknotpresent(pmd_t pmd)
> -{
> -     return __pmd(pmd_val(pmd) & ~_PAGE_PRESENT);
> -}
> -
>  #define __HAVE_ARCH_PMD_SAME
>  static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b)
>  {
>       return (((pmd_val(pmd_a) ^ pmd_val(pmd_b)) & ~_PAGE_HPTEFLAGS) == 0);
>  }
>  
> -static inline int __pmdp_test_and_clear_young(struct mm_struct *mm,
> -                                           unsigned long addr, pmd_t *pmdp)
> -{
> -     unsigned long old;
> -
> -     if ((pmd_val(*pmdp) & (_PAGE_ACCESSED | H_PAGE_HASHPTE)) == 0)
> -             return 0;
> -     old = pmd_hugepage_update(mm, addr, pmdp, _PAGE_ACCESSED, 0);
> -     return ((old & _PAGE_ACCESSED) != 0);
> -}
> -
> -#define __HAVE_ARCH_PMDP_SET_WRPROTECT
> -static inline void pmdp_set_wrprotect(struct mm_struct *mm, unsigned long 
> addr,
> -                                   pmd_t *pmdp)
> -{
> -
> -     if ((pmd_val(*pmdp) & _PAGE_WRITE) == 0)
> -             return;
> -
> -     pmd_hugepage_update(mm, addr, pmdp, _PAGE_WRITE, 0);
> -}
> -
>  #endif /*  CONFIG_TRANSPARENT_HUGEPAGE */
>  #endif       /* __ASSEMBLY__ */
>  
> diff --git a/arch/powerpc/include/asm/book3s/64/pgtable-4k.h 
> b/arch/powerpc/include/asm/book3s/64/pgtable-4k.h
> new file mode 100644
> index 000000000000..423735f897f5
> --- /dev/null
> +++ b/arch/powerpc/include/asm/book3s/64/pgtable-4k.h
> @@ -0,0 +1,7 @@
> +#ifndef _ASM_POWERPC_BOOK3S_64_PGTABLE_4K_H
> +#define _ASM_POWERPC_BOOK3S_64_PGTABLE_4K_H
> +/*
> + * hash 4k can't share hugetlb and also doesn't support THP
> + */
> +
> +#endif /*_ASM_POWERPC_BOOK3S_64_PGTABLE_4K_H */
> diff --git a/arch/powerpc/include/asm/book3s/64/pgtable-64k.h 
> b/arch/powerpc/include/asm/book3s/64/pgtable-64k.h
> new file mode 100644
> index 000000000000..ceadc2fd408f
> --- /dev/null
> +++ b/arch/powerpc/include/asm/book3s/64/pgtable-64k.h
> @@ -0,0 +1,94 @@
> +#ifndef _ASM_POWERPC_BOOK3S_64_PGTABLE_64K_H
> +#define _ASM_POWERPC_BOOK3S_64_PGTABLE_64K_H
> +
> +#ifndef __ASSEMBLY__
> +#ifdef CONFIG_HUGETLB_PAGE
> +/*
> + * We have PGD_INDEX_SIZ = 12 and PTE_INDEX_SIZE = 8, so that we can have
PGD_INDEX_SIZE
> + * 16GB hugepage pte in PGD and 16MB hugepage pte at PMD;
> + *
> + * Defined in such a way that we can optimize away code block at build time
> + * if CONFIG_HUGETLB_PAGE=n.
> + */
> +static inline int pmd_huge(pmd_t pmd)
> +{
> +     /*
> +      * leaf pte for huge page
> +      */
> +     return !!(pmd_val(pmd) & _PAGE_PTE);
> +}
> +
> +static inline int pud_huge(pud_t pud)
> +{
> +     /*
> +      * leaf pte for huge page
> +      */
> +     return !!(pud_val(pud) & _PAGE_PTE);
> +}
> +
> +static inline int pgd_huge(pgd_t pgd)
> +{
> +     /*
> +      * leaf pte for huge page
> +      */
> +     return !!(pgd_val(pgd) & _PAGE_PTE);
> +}
> +#define pgd_huge pgd_huge
> +

??
<snip>

Balbir Singh.
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to