Commit 03b51416 authored by Naveen N. Rao's avatar Naveen N. Rao Committed by Michael Ellerman

powerpc/module_64: Consolidate ftrace code

module_trampoline_target() is only used by ftrace. Move the prototype
within the appropriate #ifdef in the header. Also, move the function
body to the end of module_64.c so as to consolidate all ftrace code in
one place.

No functional changes.
Signed-off-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/2527351f65c53c5866068ae130dc34c5d4ee8ad9.1587488954.git.naveen.n.rao@linux.vnet.ibm.com
parent 888468ce
...@@ -90,12 +90,9 @@ struct mod_arch_specific { ...@@ -90,12 +90,9 @@ struct mod_arch_specific {
# ifdef MODULE # ifdef MODULE
asm(".section .ftrace.tramp,\"ax\",@nobits; .align 3; .previous"); asm(".section .ftrace.tramp,\"ax\",@nobits; .align 3; .previous");
# endif /* MODULE */ # endif /* MODULE */
#endif
int module_trampoline_target(struct module *mod, unsigned long trampoline, int module_trampoline_target(struct module *mod, unsigned long trampoline,
unsigned long *target); unsigned long *target);
#ifdef CONFIG_DYNAMIC_FTRACE
int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs); int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs);
#else #else
static inline int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs) static inline int module_finalize_ftrace(struct module *mod, const Elf_Shdr *sechdrs)
......
...@@ -145,42 +145,6 @@ static u32 ppc64_stub_insns[] = { ...@@ -145,42 +145,6 @@ static u32 ppc64_stub_insns[] = {
PPC_INST_BCTR, PPC_INST_BCTR,
}; };
#ifdef CONFIG_DYNAMIC_FTRACE
int module_trampoline_target(struct module *mod, unsigned long addr,
unsigned long *target)
{
struct ppc64_stub_entry *stub;
func_desc_t funcdata;
u32 magic;
if (!within_module_core(addr, mod)) {
pr_err("%s: stub %lx not in module %s\n", __func__, addr, mod->name);
return -EFAULT;
}
stub = (struct ppc64_stub_entry *)addr;
if (probe_kernel_read(&magic, &stub->magic, sizeof(magic))) {
pr_err("%s: fault reading magic for stub %lx for %s\n", __func__, addr, mod->name);
return -EFAULT;
}
if (magic != STUB_MAGIC) {
pr_err("%s: bad magic for stub %lx for %s\n", __func__, addr, mod->name);
return -EFAULT;
}
if (probe_kernel_read(&funcdata, &stub->funcdata, sizeof(funcdata))) {
pr_err("%s: fault reading funcdata for stub %lx for %s\n", __func__, addr, mod->name);
return -EFAULT;
}
*target = stub_func_addr(funcdata);
return 0;
}
#endif
/* Count how many different 24-bit relocations (different symbol, /* Count how many different 24-bit relocations (different symbol,
different addend) */ different addend) */
static unsigned int count_relocs(const Elf64_Rela *rela, unsigned int num) static unsigned int count_relocs(const Elf64_Rela *rela, unsigned int num)
...@@ -731,6 +695,39 @@ int apply_relocate_add(Elf64_Shdr *sechdrs, ...@@ -731,6 +695,39 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
} }
#ifdef CONFIG_DYNAMIC_FTRACE #ifdef CONFIG_DYNAMIC_FTRACE
int module_trampoline_target(struct module *mod, unsigned long addr,
unsigned long *target)
{
struct ppc64_stub_entry *stub;
func_desc_t funcdata;
u32 magic;
if (!within_module_core(addr, mod)) {
pr_err("%s: stub %lx not in module %s\n", __func__, addr, mod->name);
return -EFAULT;
}
stub = (struct ppc64_stub_entry *)addr;
if (probe_kernel_read(&magic, &stub->magic, sizeof(magic))) {
pr_err("%s: fault reading magic for stub %lx for %s\n", __func__, addr, mod->name);
return -EFAULT;
}
if (magic != STUB_MAGIC) {
pr_err("%s: bad magic for stub %lx for %s\n", __func__, addr, mod->name);
return -EFAULT;
}
if (probe_kernel_read(&funcdata, &stub->funcdata, sizeof(funcdata))) {
pr_err("%s: fault reading funcdata for stub %lx for %s\n", __func__, addr, mod->name);
return -EFAULT;
}
*target = stub_func_addr(funcdata);
return 0;
}
#ifdef CONFIG_MPROFILE_KERNEL #ifdef CONFIG_MPROFILE_KERNEL
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment