powerpc/code-patching: Use test_trampoline for prefixed patch test
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Thu, 2 Dec 2021 12:00:23 +0000 (13:00 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 23 Dec 2021 11:35:25 +0000 (22:35 +1100)
Use the dedicated test_trampoline function for testing prefixed
patching like other tests and remove the hand coded assembly stuff.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/a450ef3f8653f75e1bd9aaf7a3889d379752f33b.1638446239.git.christophe.leroy@csgroup.eu
arch/powerpc/lib/Makefile
arch/powerpc/lib/code-patching.c
arch/powerpc/lib/test_code-patching.S [deleted file]

index 9e5d0f4..c265489 100644 (file)
@@ -19,7 +19,7 @@ CFLAGS_code-patching.o += -DDISABLE_BRANCH_PROFILING
 CFLAGS_feature-fixups.o += -DDISABLE_BRANCH_PROFILING
 endif
 
-obj-y += alloc.o code-patching.o feature-fixups.o pmem.o test_code-patching.o
+obj-y += alloc.o code-patching.o feature-fixups.o pmem.o
 
 ifndef CONFIG_KASAN
 obj-y  +=      string.o memcmp_$(BITS).o
index 998aeb9..441a71c 100644 (file)
@@ -399,7 +399,7 @@ static int __init instr_is_branch_to_addr(const u32 *instr, unsigned long addr)
 
 static void __init test_trampoline(void)
 {
-       asm ("nop;\n");
+       asm ("nop;nop;\n");
 }
 
 #define check(x)       do {    \
@@ -708,25 +708,19 @@ static void __init test_translate_branch(void)
        vfree(buf);
 }
 
-#ifdef CONFIG_PPC64
 static void __init test_prefixed_patching(void)
 {
-       extern unsigned int code_patching_test1[];
-       extern unsigned int code_patching_test1_expected[];
-       extern unsigned int end_code_patching_test1[];
+       u32 *iptr = (u32 *)ppc_function_entry(test_trampoline);
+       u32 expected[2] = {OP_PREFIX << 26, 0};
+       ppc_inst_t inst = ppc_inst_prefix(OP_PREFIX << 26, 0);
 
-       __patch_instruction(code_patching_test1,
-                           ppc_inst_prefix(OP_PREFIX << 26, 0x00000000),
-                           code_patching_test1);
+       if (!IS_ENABLED(CONFIG_PPC64))
+               return;
+
+       patch_instruction(iptr, inst);
 
-       check(!memcmp(code_patching_test1,
-                     code_patching_test1_expected,
-                     sizeof(unsigned int) *
-                     (end_code_patching_test1 - code_patching_test1)));
+       check(!memcmp(iptr, expected, sizeof(expected)));
 }
-#else
-static inline void test_prefixed_patching(void) {}
-#endif
 
 static int __init test_code_patching(void)
 {
diff --git a/arch/powerpc/lib/test_code-patching.S b/arch/powerpc/lib/test_code-patching.S
deleted file mode 100644 (file)
index a9be610..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * Copyright (C) 2020 IBM Corporation
- */
-#include <asm/ppc-opcode.h>
-
-       .text
-
-#define globl(x)               \
-       .globl x;       \
-x:
-
-globl(code_patching_test1)
-       nop
-       nop
-globl(end_code_patching_test1)
-
-globl(code_patching_test1_expected)
-       .long OP_PREFIX << 26
-       .long 0x0000000