On 09/04/16 16:13, Aneesh Kumar K.V wrote: > This only does 64k linux page support for now. 64k hash linux config > THP need to differentiate it from hugetlb huge page because with THP > we need to track hash pte slot information with respect to each subpage. > This is not needed with hugetlb hugepage, because we don't do MPSS with
MPSS? > hugetlb. > > Radix doesn't have any such restrictions. > > Signed-off-by: Aneesh Kumar K.V <aneesh.ku...@linux.vnet.ibm.com> > --- > arch/powerpc/include/asm/book3s/64/hash-64k.h | 9 ++++----- > arch/powerpc/include/asm/book3s/64/pgtable-64k.h | 23 +++++++++++++++++++++++ > arch/powerpc/include/asm/book3s/64/radix.h | 9 +++++++++ > 3 files changed, 36 insertions(+), 5 deletions(-) > > diff --git a/arch/powerpc/include/asm/book3s/64/hash-64k.h > b/arch/powerpc/include/asm/book3s/64/hash-64k.h > index 173f35e9faef..ad797a8cc615 100644 > --- a/arch/powerpc/include/asm/book3s/64/hash-64k.h > +++ b/arch/powerpc/include/asm/book3s/64/hash-64k.h > @@ -97,8 +97,8 @@ extern bool __rpte_sub_valid(real_pte_t rpte, unsigned long > index); > > extern int remap_pfn_range(struct vm_area_struct *, unsigned long addr, > unsigned long pfn, unsigned long size, pgprot_t); > -static inline int remap_4k_pfn(struct vm_area_struct *vma, unsigned long > addr, > - unsigned long pfn, pgprot_t prot) > +static inline int hlremap_4k_pfn(struct vm_area_struct *vma, unsigned long > addr, > + unsigned long pfn, pgprot_t prot) > { > if (pfn > (PTE_RPN_MASK >> PAGE_SHIFT)) { > WARN(1, "remap_4k_pfn called with wrong pfn value\n"); > @@ -182,14 +182,13 @@ static inline void mark_hpte_slot_valid(unsigned char > *hpte_slot_array, > * that for explicit huge pages. > * > */ > -static inline int pmd_trans_huge(pmd_t pmd) > +static inline int hlpmd_trans_huge(pmd_t pmd) > { > return !!((pmd_val(pmd) & (_PAGE_PTE | H_PAGE_THP_HUGE)) == > (_PAGE_PTE | H_PAGE_THP_HUGE)); > } > > -#define __HAVE_ARCH_PMD_SAME > -static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b) > +static inline int hlpmd_same(pmd_t pmd_a, pmd_t pmd_b) > { > return (((pmd_val(pmd_a) ^ pmd_val(pmd_b)) & ~_PAGE_HPTEFLAGS) == 0); > } > diff --git a/arch/powerpc/include/asm/book3s/64/pgtable-64k.h > b/arch/powerpc/include/asm/book3s/64/pgtable-64k.h > index ceadc2fd408f..028b8f6e002b 100644 > --- a/arch/powerpc/include/asm/book3s/64/pgtable-64k.h > +++ b/arch/powerpc/include/asm/book3s/64/pgtable-64k.h > @@ -89,6 +89,29 @@ static inline void pmdp_set_wrprotect(struct mm_struct > *mm, unsigned long addr, > pmd_hugepage_update(mm, addr, pmdp, _PAGE_WRITE, 0); > } > > +static inline int pmd_trans_huge(pmd_t pmd) > +{ > + if (radix_enabled()) > + return rpmd_trans_huge(pmd); > + return hlpmd_trans_huge(pmd); > +} > + > +#define __HAVE_ARCH_PMD_SAME > +static inline int pmd_same(pmd_t pmd_a, pmd_t pmd_b) > +{ > + if (radix_enabled()) > + return rpmd_same(pmd_a, pmd_b); > + return hlpmd_same(pmd_a, pmd_b); > +} > #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > + > +static inline int remap_4k_pfn(struct vm_area_struct *vma, unsigned long > addr, > + unsigned long pfn, pgprot_t prot) > +{ > + if (radix_enabled()) > + BUG(); > + return hlremap_4k_pfn(vma, addr, pfn, prot); > + > +} So bsr_mmap() driver will BUG() with 64K Radix page size? Is this fixed later? Balbir _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev