powerpc: Add ppc_inst_as_u64()
authorMichael Ellerman <mpe@ellerman.id.au>
Tue, 26 May 2020 07:26:30 +0000 (17:26 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 26 May 2020 13:36:57 +0000 (23:36 +1000)
commit16ef9767e4dc5cf03a71ae7bc2bc588dbbe7983e
tree574eb06cfef4b030b39dd4494edd08c1f218b86d
parentc5ff46d69c410f7fac173e4fde3eea484b4b4eda
powerpc: Add ppc_inst_as_u64()

The code patching code wants to get the value of a struct ppc_inst as
a u64 when the instruction is prefixed, so we can pass the u64 down to
__put_user_asm() and write it with a single store.

The optprobes code wants to load a struct ppc_inst as an immediate
into a register so it is useful to have it as a u64 to use the
existing helper function.

Currently this is a bit awkward because the value differs based on the
CPU endianness, so add a helper to do the conversion.

This fixes the usage in arch_prepare_optimized_kprobe() which was
previously incorrect on big endian.

Fixes: 650b55b707fd ("powerpc: Add prefixed instructions to instruction data type")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Tested-by: Jordan Niethe <jniethe5@gmail.com>
Link: https://lore.kernel.org/r/20200526072630.2487363-1-mpe@ellerman.id.au
arch/powerpc/include/asm/inst.h
arch/powerpc/kernel/optprobes.c
arch/powerpc/lib/code-patching.c