summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm/mman.h
diff options
context:
space:
mode:
authorRam Pai <linuxram@us.ibm.com>2018-01-19 02:50:35 +0100
committerMichael Ellerman <mpe@ellerman.id.au>2018-01-20 12:59:02 +0100
commiteb95d016ce3d3404e061c7c85d4362094dc34b3f (patch)
tree045cb71f27e1ef023d930fe74d98c804db1d8871 /arch/powerpc/include/asm/mman.h
parentpowerpc: implementation for arch_override_mprotect_pkey() (diff)
downloadlinux-eb95d016ce3d3404e061c7c85d4362094dc34b3f.tar.xz
linux-eb95d016ce3d3404e061c7c85d4362094dc34b3f.zip
powerpc: map vma key-protection bits to pte key bits.
Map the key protection bits of the vma to the pkey bits in the PTE. The PTE bits used for pkey are 3,4,5,6 and 57. The first four bits are the same four bits that were freed up initially in this patch series. remember? :-) Without those four bits this patch wouldn't be possible. BUT, on 4k kernel, bit 3, and 4 could not be freed up. remember? Hence we have to be satisfied with 5, 6 and 7. Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/include/asm/mman.h')
-rw-r--r--arch/powerpc/include/asm/mman.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/mman.h b/arch/powerpc/include/asm/mman.h
index 29994788b9f3..07e3f54de9e3 100644
--- a/arch/powerpc/include/asm/mman.h
+++ b/arch/powerpc/include/asm/mman.h
@@ -33,7 +33,13 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot,
static inline pgprot_t arch_vm_get_page_prot(unsigned long vm_flags)
{
+#ifdef CONFIG_PPC_MEM_KEYS
+ return (vm_flags & VM_SAO) ?
+ __pgprot(_PAGE_SAO | vmflag_to_pte_pkey_bits(vm_flags)) :
+ __pgprot(0 | vmflag_to_pte_pkey_bits(vm_flags));
+#else
return (vm_flags & VM_SAO) ? __pgprot(_PAGE_SAO) : __pgprot(0);
+#endif
}
#define arch_vm_get_page_prot(vm_flags) arch_vm_get_page_prot(vm_flags)