On 07/06/2017 02:52 AM, Ram Pai wrote: > get_pte_pkey() helper returns the pkey associated with > a address corresponding to a given mm_struct. > > Signed-off-by: Ram Pai <linuxram@xxxxxxxxxx> > --- > arch/powerpc/include/asm/book3s/64/mmu-hash.h | 5 ++++ > arch/powerpc/mm/hash_utils_64.c | 28 +++++++++++++++++++++++++ > 2 files changed, 33 insertions(+), 0 deletions(-) > > diff --git a/arch/powerpc/include/asm/book3s/64/mmu-hash.h b/arch/powerpc/include/asm/book3s/64/mmu-hash.h > index f7a6ed3..369f9ff 100644 > --- a/arch/powerpc/include/asm/book3s/64/mmu-hash.h > +++ b/arch/powerpc/include/asm/book3s/64/mmu-hash.h > @@ -450,6 +450,11 @@ extern int hash_page(unsigned long ea, unsigned long access, unsigned long trap, > int __hash_page_huge(unsigned long ea, unsigned long access, unsigned long vsid, > pte_t *ptep, unsigned long trap, unsigned long flags, > int ssize, unsigned int shift, unsigned int mmu_psize); > + > +#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS > +u16 get_pte_pkey(struct mm_struct *mm, unsigned long address); > +#endif /* CONFIG_PPC64_MEMORY_PROTECTION_KEYS */ > + > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > extern int __hash_page_thp(unsigned long ea, unsigned long access, > unsigned long vsid, pmd_t *pmdp, unsigned long trap, > diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c > index 1e74529..591990c 100644 > --- a/arch/powerpc/mm/hash_utils_64.c > +++ b/arch/powerpc/mm/hash_utils_64.c > @@ -1573,6 +1573,34 @@ void hash_preload(struct mm_struct *mm, unsigned long ea, > local_irq_restore(flags); > } > > +#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS > +/* > + * return the protection key associated with the given address > + * and the mm_struct. > + */ > +u16 get_pte_pkey(struct mm_struct *mm, unsigned long address) > +{ > + pte_t *ptep; > + u16 pkey = 0; > + unsigned long flags; > + > + if (REGION_ID(address) == VMALLOC_REGION_ID) > + mm = &init_mm; IIUC, protection keys are only applicable for user space. This function is getting used to populate siginfo structure. Then how can we ever request this for any address in VMALLOC region. > + > + if (!mm || !mm->pgd) > + return 0; Is this really required at this stage ? -- To unsubscribe from this list: send the line "unsubscribe linux-kselftest" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html