mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 10:46:33 +00:00
arm64: convert protection key into vm_flags and pgprot values
Modify arch_calc_vm_prot_bits() and vm_get_page_prot() such that the pkey value is set in the vm_flags and then into the pgprot value. Signed-off-by: Joey Gouly <joey.gouly@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> Link: https://lore.kernel.org/r/20240822151113.1479789-15-joey.gouly@arm.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
b66db4f3cc
commit
b3c03fe137
@ -7,7 +7,7 @@
|
||||
#include <uapi/asm/mman.h>
|
||||
|
||||
static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot,
|
||||
unsigned long pkey __always_unused)
|
||||
unsigned long pkey)
|
||||
{
|
||||
unsigned long ret = 0;
|
||||
|
||||
@ -17,6 +17,14 @@ static inline unsigned long arch_calc_vm_prot_bits(unsigned long prot,
|
||||
if (system_supports_mte() && (prot & PROT_MTE))
|
||||
ret |= VM_MTE;
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_PKEYS
|
||||
if (system_supports_poe()) {
|
||||
ret |= pkey & BIT(0) ? VM_PKEY_BIT0 : 0;
|
||||
ret |= pkey & BIT(1) ? VM_PKEY_BIT1 : 0;
|
||||
ret |= pkey & BIT(2) ? VM_PKEY_BIT2 : 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
#define arch_calc_vm_prot_bits(prot, pkey) arch_calc_vm_prot_bits(prot, pkey)
|
||||
|
@ -102,6 +102,17 @@ pgprot_t vm_get_page_prot(unsigned long vm_flags)
|
||||
if (vm_flags & VM_MTE)
|
||||
prot |= PTE_ATTRINDX(MT_NORMAL_TAGGED);
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_PKEYS
|
||||
if (system_supports_poe()) {
|
||||
if (vm_flags & VM_PKEY_BIT0)
|
||||
prot |= PTE_PO_IDX_0;
|
||||
if (vm_flags & VM_PKEY_BIT1)
|
||||
prot |= PTE_PO_IDX_1;
|
||||
if (vm_flags & VM_PKEY_BIT2)
|
||||
prot |= PTE_PO_IDX_2;
|
||||
}
|
||||
#endif
|
||||
|
||||
return __pgprot(prot);
|
||||
}
|
||||
EXPORT_SYMBOL(vm_get_page_prot);
|
||||
|
Loading…
x
Reference in New Issue
Block a user