Skip to content

Commit

Permalink
selftests/mm: ensure pkey-*.h define inline functions only
Browse files Browse the repository at this point in the history
Headers should not define non-inline functions, as this prevents them from
being included more than once in a given program.  pkey-helpers.h and the
arch-specific headers it includes currently define multiple such
non-inline functions.

In most cases those functions can simply be made inline - this patch does
just that.  read_ptr() is an exception as it must not be inlined.  Since
it is only called from protection_keys.c, we just move it there.

Link: https://lkml.kernel.org/r/20241209095019.1732120-9-kevin.brodsky@arm.com
Signed-off-by: Kevin Brodsky <kevin.brodsky@arm.com>
Cc: Aruna Ramakrishna <aruna.ramakrishna@oracle.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: Joey Gouly <joey.gouly@arm.com>
Cc: Keith Lucas <keith.lucas@oracle.com>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
  • Loading branch information
Kevin Brodsky authored and Andrew Morton committed Jan 14, 2025
1 parent f7ed833 commit 21309ac
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 14 deletions.
4 changes: 2 additions & 2 deletions tools/testing/selftests/mm/pkey-arm64.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,11 @@ static inline int get_arch_reserved_keys(void)
return NR_RESERVED_PKEYS;
}

void expect_fault_on_read_execonly_key(void *p1, int pkey)
static inline void expect_fault_on_read_execonly_key(void *p1, int pkey)
{
}

void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
static inline void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
{
return PTR_ERR_ENOTSUP;
}
Expand Down
8 changes: 1 addition & 7 deletions tools/testing/selftests/mm/pkey-helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,7 @@ extern void abort_hooks(void);
# define noinline __attribute__((noinline))
#endif

noinline int read_ptr(int *ptr)
{
/* Keep GCC from optimizing this away somehow */
barrier();
return *ptr;
}

noinline int read_ptr(int *ptr);
void expected_pkey_fault(int pkey);
int sys_pkey_alloc(unsigned long flags, unsigned long init_val);
int sys_pkey_free(unsigned long pkey);
Expand Down
4 changes: 2 additions & 2 deletions tools/testing/selftests/mm/pkey-powerpc.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ static inline int get_arch_reserved_keys(void)
return NR_RESERVED_PKEYS_64K_3KEYS;
}

void expect_fault_on_read_execonly_key(void *p1, int pkey)
static inline void expect_fault_on_read_execonly_key(void *p1, int pkey)
{
/*
* powerpc does not allow userspace to change permissions of exec-only
Expand All @@ -105,7 +105,7 @@ void expect_fault_on_read_execonly_key(void *p1, int pkey)
/* 4-byte instructions * 16384 = 64K page */
#define __page_o_noops() asm(".rept 16384 ; nop; .endr")

void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
static inline void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
{
void *ptr;
int ret;
Expand Down
6 changes: 3 additions & 3 deletions tools/testing/selftests/mm/pkey-x86.h
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ static inline u32 pkey_bit_position(int pkey)
#define XSTATE_PKEY 0x200
#define XSTATE_BV_OFFSET 512

int pkey_reg_xstate_offset(void)
static inline int pkey_reg_xstate_offset(void)
{
unsigned int eax;
unsigned int ebx;
Expand Down Expand Up @@ -148,7 +148,7 @@ static inline int get_arch_reserved_keys(void)
return NR_RESERVED_PKEYS;
}

void expect_fault_on_read_execonly_key(void *p1, int pkey)
static inline void expect_fault_on_read_execonly_key(void *p1, int pkey)
{
int ptr_contents;

Expand All @@ -157,7 +157,7 @@ void expect_fault_on_read_execonly_key(void *p1, int pkey)
expected_pkey_fault(pkey);
}

void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
static inline void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey)
{
return PTR_ERR_ENOTSUP;
}
Expand Down
7 changes: 7 additions & 0 deletions tools/testing/selftests/mm/protection_keys.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@ int test_nr;
u64 shadow_pkey_reg;
int dprint_in_signal;

noinline int read_ptr(int *ptr)
{
/* Keep GCC from optimizing this away somehow */
barrier();
return *ptr;
}

void cat_into_file(char *str, char *file)
{
int fd = open(file, O_RDWR);
Expand Down

0 comments on commit 21309ac

Please sign in to comment.