Commit c529afd7 authored by Aneesh Kumar K.V's avatar Aneesh Kumar K.V Committed by Michael Ellerman

powerpc/book3s64/pkeys: Convert pkey_total to num_pkey

num_pkey now represents max number of keys supported such that we return
to userspace 0 - num_pkey - 1.
Signed-off-by: default avatarAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20200709032946.881753-11-aneesh.kumar@linux.ibm.com
parent a4678d4b
......@@ -12,7 +12,7 @@
#include <asm/firmware.h>
DECLARE_STATIC_KEY_FALSE(pkey_disabled);
extern int pkeys_total; /* total pkeys as per device tree */
extern int num_pkey;
extern u32 initial_allocation_mask; /* bits set for the initially allocated keys */
extern u32 reserved_allocation_mask; /* bits set for reserved keys */
......@@ -44,7 +44,10 @@ static inline int vma_pkey(struct vm_area_struct *vma)
return (vma->vm_flags & ARCH_VM_PKEY_FLAGS) >> VM_PKEY_SHIFT;
}
#define arch_max_pkey() pkeys_total
static inline int arch_max_pkey(void)
{
return num_pkey;
}
#define pkey_alloc_mask(pkey) (0x1 << pkey)
......
......@@ -13,7 +13,7 @@
#include <linux/of_device.h>
DEFINE_STATIC_KEY_FALSE(pkey_disabled);
int pkeys_total; /* Total pkeys as per device tree */
int num_pkey; /* Max number of pkeys supported */
u32 initial_allocation_mask; /* Bits set for the initially allocated keys */
/*
* Keys marked in the reservation list cannot be allocated by userspace
......@@ -93,7 +93,7 @@ static int scan_pkey_feature(void)
static int pkey_initialize(void)
{
int os_reserved, i;
int pkeys_total, i;
/*
* We define PKEY_DISABLE_EXECUTE in addition to the arch-neutral
......@@ -133,12 +133,12 @@ static int pkey_initialize(void)
* The OS can manage only 8 pkeys due to its inability to represent them
* in the Linux 4K PTE. Mark all other keys reserved.
*/
os_reserved = pkeys_total - 8;
num_pkey = min(8, pkeys_total);
#else
os_reserved = 0;
num_pkey = pkeys_total;
#endif
if (unlikely((pkeys_total - os_reserved) <= execute_only_key)) {
if (unlikely(num_pkey <= execute_only_key)) {
/*
* Insufficient number of keys to support
* execute only key. Mark it unavailable.
......@@ -185,10 +185,10 @@ static int pkey_initialize(void)
default_uamor &= ~(0x3ul << pkeyshift(1));
/*
* Prevent the usage of OS reserved the keys. Update UAMOR
* Prevent the usage of OS reserved keys. Update UAMOR
* for those keys.
*/
for (i = (pkeys_total - os_reserved); i < pkeys_total; i++) {
for (i = num_pkey; i < pkeys_total; i++) {
reserved_allocation_mask |= (0x1 << i);
default_uamor &= ~(0x3ul << pkeyshift(i));
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment