powerpc: Make probe_kernel_read_inst() common to PPC32 and PPC64
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Wed, 14 Apr 2021 13:08:41 +0000 (13:08 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 21 Apr 2021 12:52:33 +0000 (22:52 +1000)
We have two independant versions of probe_kernel_read_inst(), one for
PPC32 and one for PPC64.

The PPC32 is identical to the first part of the PPC64 version.
The remaining part of PPC64 version is not relevant for PPC32, but
not contradictory, so we can easily have a common function with
the PPC64 part opted out via a IS_ENABLED(CONFIG_PPC64).

The only need is to add a version of ppc_inst_prefix() for PPC32.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/f7b9dfddef3b3760182c7e5466356c121a293dc9.1618405715.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/inst.h
arch/powerpc/lib/inst.c

index b7709470e8e9b19a5932277883ffbf028d621c43..539117b0a2dc3ad82c653c184362c88fa15f3ed4 100644 (file)
@@ -102,6 +102,8 @@ static inline bool ppc_inst_equal(struct ppc_inst x, struct ppc_inst y)
 
 #define ppc_inst(x) ((struct ppc_inst){ .val = x })
 
+#define ppc_inst_prefix(x, y) ppc_inst(x)
+
 static inline bool ppc_inst_prefixed(struct ppc_inst x)
 {
        return false;
index c57b3548de37bcfeda806347d34131fd2e928db6..0dff3ac2d45fdd84cd48a17d37dca6d8bdb35dca 100644 (file)
@@ -8,7 +8,6 @@
 #include <asm/inst.h>
 #include <asm/ppc-opcode.h>
 
-#ifdef CONFIG_PPC64
 int probe_kernel_read_inst(struct ppc_inst *inst,
                           struct ppc_inst *src)
 {
@@ -18,7 +17,7 @@ int probe_kernel_read_inst(struct ppc_inst *inst,
        err = copy_from_kernel_nofault(&val, src, sizeof(val));
        if (err)
                return err;
-       if (get_op(val) == OP_PREFIX) {
+       if (IS_ENABLED(CONFIG_PPC64) && get_op(val) == OP_PREFIX) {
                err = copy_from_kernel_nofault(&suffix, (void *)src + 4, 4);
                *inst = ppc_inst_prefix(val, suffix);
        } else {
@@ -26,17 +25,3 @@ int probe_kernel_read_inst(struct ppc_inst *inst,
        }
        return err;
 }
-#else /* !CONFIG_PPC64 */
-int probe_kernel_read_inst(struct ppc_inst *inst,
-                          struct ppc_inst *src)
-{
-       unsigned int val;
-       int err;
-
-       err = copy_from_kernel_nofault(&val, src, sizeof(val));
-       if (!err)
-               *inst = ppc_inst(val);
-
-       return err;
-}
-#endif /* CONFIG_PPC64 */