| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| Date: Wed, 10 May 2017 16:57:49 +1000 |
| Subject: powerpc/modules: If mprofile-kernel is enabled add it to vermagic |
| |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| |
| |
| [ Upstream commit 43e24e82f35291d4c1ca78877ce1b20d3aeb78f1 ] |
| |
| On powerpc we can build the kernel with two different ABIs for mcount(), which |
| is used by ftrace. Kernels built with one ABI do not know how to load modules |
| built with the other ABI. The new style ABI is called "mprofile-kernel", for |
| want of a better name. |
| |
| Currently if we build a module using the old style ABI, and the kernel with |
| mprofile-kernel, when we load the module we'll oops something like: |
| |
| # insmod autofs4-no-mprofile-kernel.ko |
| ftrace-powerpc: Unexpected instruction f8810028 around bl _mcount |
| ------------[ cut here ]------------ |
| WARNING: CPU: 6 PID: 3759 at ../kernel/trace/ftrace.c:2024 ftrace_bug+0x2b8/0x3c0 |
| CPU: 6 PID: 3759 Comm: insmod Not tainted 4.11.0-rc3-gcc-5.4.1-00017-g5a61ef74f269 #11 |
| ... |
| NIP [c0000000001eaa48] ftrace_bug+0x2b8/0x3c0 |
| LR [c0000000001eaff8] ftrace_process_locs+0x4a8/0x590 |
| Call Trace: |
| alloc_pages_current+0xc4/0x1d0 (unreliable) |
| ftrace_process_locs+0x4a8/0x590 |
| load_module+0x1c8c/0x28f0 |
| SyS_finit_module+0x110/0x140 |
| system_call+0x38/0xfc |
| ... |
| ftrace failed to modify |
| [<d000000002a31024>] 0xd000000002a31024 |
| actual: 35:65:00:48 |
| |
| We can avoid this by including in the vermagic whether the kernel/module was |
| built with mprofile-kernel. Which results in: |
| |
| # insmod autofs4-pg.ko |
| autofs4: version magic |
| '4.11.0-rc3-gcc-5.4.1-00017-g5a61ef74f269 SMP mod_unload modversions ' |
| should be |
| '4.11.0-rc3-gcc-5.4.1-00017-g5a61ef74f269-dirty SMP mod_unload modversions mprofile-kernel' |
| insmod: ERROR: could not insert module autofs4-pg.ko: Invalid module format |
| |
| Fixes: 8c50b72a3b4f ("powerpc/ftrace: Add Kconfig & Make glue for mprofile-kernel") |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Acked-by: Balbir Singh <bsingharora@gmail.com> |
| Acked-by: Jessica Yu <jeyu@redhat.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/include/asm/module.h | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/arch/powerpc/include/asm/module.h |
| +++ b/arch/powerpc/include/asm/module.h |
| @@ -14,6 +14,10 @@ |
| #include <asm-generic/module.h> |
| |
| |
| +#ifdef CC_USING_MPROFILE_KERNEL |
| +#define MODULE_ARCH_VERMAGIC "mprofile-kernel" |
| +#endif |
| + |
| #ifndef __powerpc64__ |
| /* |
| * Thanks to Paul M for explaining this. |