| From: "Nysal Jan K.A." <nysal@linux.ibm.com> |
| Subject: selftests/mm: fix a build failure on powerpc |
| Date: Mon, 28 Apr 2025 18:49:35 +0530 |
| |
| The compiler is unaware of the size of code generated by the ".rept" |
| assembler directive. This results in the compiler emitting branch |
| instructions where the offset to branch to exceeds the maximum allowed |
| value, resulting in build failures like the following: |
| |
| CC protection_keys |
| /tmp/ccypKWAE.s: Assembler messages: |
| /tmp/ccypKWAE.s:2073: Error: operand out of range (0x0000000000020158 |
| is not between 0xffffffffffff8000 and 0x0000000000007ffc) |
| /tmp/ccypKWAE.s:2509: Error: operand out of range (0x0000000000020130 |
| is not between 0xffffffffffff8000 and 0x0000000000007ffc) |
| |
| Fix the issue by manually adding nop instructions using the preprocessor. |
| |
| Link: https://lkml.kernel.org/r/20250428131937.641989-2-nysal@linux.ibm.com |
| Fixes: 46036188ea1f ("selftests/mm: build with -O2") |
| Reported-by: Madhavan Srinivasan <maddy@linux.ibm.com> |
| Signed-off-by: Nysal Jan K.A. <nysal@linux.ibm.com> |
| Tested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com> |
| Reviewed-by: Donet Tom <donettom@linux.ibm.com> |
| Tested-by: Donet Tom <donettom@linux.ibm.com> |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| tools/testing/selftests/mm/pkey-powerpc.h | 12 +++++++++++- |
| 1 file changed, 11 insertions(+), 1 deletion(-) |
| |
| --- a/tools/testing/selftests/mm/pkey-powerpc.h~selftests-mm-fix-a-build-failure-on-powerpc |
| +++ a/tools/testing/selftests/mm/pkey-powerpc.h |
| @@ -104,8 +104,18 @@ static inline void expect_fault_on_read_ |
| return; |
| } |
| |
| +#define REPEAT_8(s) s s s s s s s s |
| +#define REPEAT_64(s) REPEAT_8(s) REPEAT_8(s) REPEAT_8(s) REPEAT_8(s) \ |
| + REPEAT_8(s) REPEAT_8(s) REPEAT_8(s) REPEAT_8(s) |
| +#define REPEAT_512(s) REPEAT_64(s) REPEAT_64(s) REPEAT_64(s) REPEAT_64(s) \ |
| + REPEAT_64(s) REPEAT_64(s) REPEAT_64(s) REPEAT_64(s) |
| +#define REPEAT_4096(s) REPEAT_512(s) REPEAT_512(s) REPEAT_512(s) REPEAT_512(s) \ |
| + REPEAT_512(s) REPEAT_512(s) REPEAT_512(s) REPEAT_512(s) |
| +#define REPEAT_16384(s) REPEAT_4096(s) REPEAT_4096(s) \ |
| + REPEAT_4096(s) REPEAT_4096(s) |
| + |
| /* 4-byte instructions * 16384 = 64K page */ |
| -#define __page_o_noops() asm(".rept 16384 ; nop; .endr") |
| +#define __page_o_noops() asm(REPEAT_16384("nop\n")) |
| |
| static inline void *malloc_pkey_with_mprotect_subpage(long size, int prot, u16 pkey) |
| { |
| _ |