On Mon, 13 Jul 2020 22:49:48 +0300 Ard Biesheuvel <a...@kernel.org> wrote:
> On arm64, we no longer use module_alloc for bpf or kprobes, to avoid > wasting va space on code that does not need to be loaded close to the > kernel. Also, module_alloc() allocates kasan shadow, which is > unnecessary for kprobes or bpf programs, which don't have kasan > instrumentation. > > This patch suggests that there are other reasons why conflating > allocation of module space and allocating text pages for other uses > is a bad idea, but switching all users to text_alloc() is a step in > the wrong direction. It would be better to stop using module_alloc() > in core code except in the module loader, and have a generic > text_alloc() that can be overridden by the arch if necessary. Note > that x86 and s390 are the only architectures that use module_alloc() > in ftrace code. > > Please have a look at alloc_insn_page() or bpf_jit_alloc_exec() in the > arm64 tree to see what I mean. Hmm, so you have another method for allocating memory for trampolines? (I haven't looked at those functions you pointed out, out of sheer laziness ;-) It would be nice to implement the trampoline optimization in arm, which x86 has (see arch_ftrace_update_trampoline() and arch_ftrace_trampoline_func()). It helps when you have two different callbacks for different functions (like having live patching enabled and function tracing enabled, or kprobes using ftrace). Each callback will get its own allocated trampoline to jump to instead of jumping to the a trampoline that calls a looping function that tests to see which callback wants to be called by the traced function. -- Steve