selftests/vm/pkeys: fix number of reserved powerpc pkeys
The number of reserved pkeys in a PowerNV environment is different from that on PowerVM or KVM. Tested on PowerVM and PowerNV environments. Signed-off-by: "Desnes A. Nunes do Rosario" <desnesn@linux.vnet.ibm.com> Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Sandipan Das <sandipan@linux.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Acked-by: Dave Hansen <dave.hansen@intel.com> Cc: Florian Weimer <fweimer@redhat.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Thiago Jung Bauermann <bauerman@linux.ibm.com> Cc: "Aneesh Kumar K.V" <aneesh.kumar@linux.ibm.com> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Michal Hocko <mhocko@kernel.org> Cc: Michal Suchanek <msuchanek@suse.de> Cc: Shuah Khan <shuah@kernel.org> Link: http://lkml.kernel.org/r/0341a0ca961166814b44c9e724774672c18d54ca.1585646528.git.sandipan@linux.ibm.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
589944b53b
Коммит
c63e5e7f99
|
@ -28,7 +28,10 @@
|
|||
#define NR_RESERVED_PKEYS_4K 27 /* pkey-0, pkey-1, exec-only-pkey
|
||||
and 24 other keys that cannot be
|
||||
represented in the PTE */
|
||||
#define NR_RESERVED_PKEYS_64K 3 /* pkey-0, pkey-1 and exec-only-pkey */
|
||||
#define NR_RESERVED_PKEYS_64K_3KEYS 3 /* PowerNV and KVM: pkey-0,
|
||||
pkey-1 and exec-only key */
|
||||
#define NR_RESERVED_PKEYS_64K_4KEYS 4 /* PowerVM: pkey-0, pkey-1,
|
||||
pkey-31 and exec-only key */
|
||||
#define PKEY_BITS_PER_PKEY 2
|
||||
#define HPAGE_SIZE (1UL << 24)
|
||||
#define PAGE_SIZE (1UL << 16)
|
||||
|
@ -66,12 +69,27 @@ static inline int cpu_has_pku(void)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static inline bool arch_is_powervm()
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if ((stat("/sys/firmware/devicetree/base/ibm,partition-name", &buf) == 0) &&
|
||||
(stat("/sys/firmware/devicetree/base/hmc-managed?", &buf) == 0) &&
|
||||
(stat("/sys/firmware/devicetree/base/chosen/qemu,graphic-width", &buf) == -1) )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int get_arch_reserved_keys(void)
|
||||
{
|
||||
if (sysconf(_SC_PAGESIZE) == 4096)
|
||||
return NR_RESERVED_PKEYS_4K;
|
||||
else
|
||||
return NR_RESERVED_PKEYS_64K;
|
||||
if (arch_is_powervm())
|
||||
return NR_RESERVED_PKEYS_64K_4KEYS;
|
||||
else
|
||||
return NR_RESERVED_PKEYS_64K_3KEYS;
|
||||
}
|
||||
|
||||
void expect_fault_on_read_execonly_key(void *p1, int pkey)
|
||||
|
|
Загрузка…
Ссылка в новой задаче