diff options
author | Christophe Leroy <christophe.leroy@csgroup.eu> | 2021-05-13 09:07:51 +0000 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2021-05-23 20:51:35 +1000 |
commit | 7ee3e97e00a3893e354c3993c3f7d9dc127e9c5e (patch) | |
tree | 9cd913eb3e356b43d2a0839837b4fd0a6472917b /kernel/kprobes.c | |
parent | 6fcb574125e673f33ff058caa54b4e65629f3a08 (diff) | |
download | linux-7ee3e97e00a3893e354c3993c3f7d9dc127e9c5e.tar.gz linux-7ee3e97e00a3893e354c3993c3f7d9dc127e9c5e.tar.bz2 linux-7ee3e97e00a3893e354c3993c3f7d9dc127e9c5e.zip |
kprobes: Allow architectures to override optinsn page allocation
Some architectures like powerpc require a non standard
allocation of optinsn page, because module pages are
too far from the kernel for direct branches.
Define weak alloc_optinsn_page() and free_optinsn_page(), that
fall back on alloc_insn_page() and free_insn_page() when not
overridden by the architecture.
Suggested-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Reviewed-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/40a43d6df1fdf41ade36e9a46e60a4df774ca9f6.1620896780.git.christophe.leroy@csgroup.eu
Diffstat (limited to 'kernel/kprobes.c')
-rw-r--r-- | kernel/kprobes.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/kernel/kprobes.c b/kernel/kprobes.c index 745f08fdd7a6..8c0a6fdef771 100644 --- a/kernel/kprobes.c +++ b/kernel/kprobes.c @@ -321,11 +321,21 @@ int kprobe_cache_get_kallsym(struct kprobe_insn_cache *c, unsigned int *symnum, } #ifdef CONFIG_OPTPROBES +void __weak *alloc_optinsn_page(void) +{ + return alloc_insn_page(); +} + +void __weak free_optinsn_page(void *page) +{ + free_insn_page(page); +} + /* For optimized_kprobe buffer */ struct kprobe_insn_cache kprobe_optinsn_slots = { .mutex = __MUTEX_INITIALIZER(kprobe_optinsn_slots.mutex), - .alloc = alloc_insn_page, - .free = free_insn_page, + .alloc = alloc_optinsn_page, + .free = free_optinsn_page, .sym = KPROBE_OPTINSN_PAGE_SYM, .pages = LIST_HEAD_INIT(kprobe_optinsn_slots.pages), /* .insn_size is initialized later */ |