Messages in this thread | | | Date | Fri, 11 Oct 2019 13:09:33 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH] ftrace/module: Allow ftrace to make only loaded module text read-write |
| |
On Thu, Oct 10, 2019 at 01:20:13PM -0400, Steven Rostedt wrote: > Hmm, I'm lost at what the below is trying to do with respect to the > above.
The below is an alternative approach for the module load issue. It accepts we patch 'late' and then uses text_poke_bp().
It works. We can then look at moving all that patching to ftrace_module_init() later when we figure out how to do it across architectures.
> > --- a/arch/x86/kernel/ftrace.c > > +++ b/arch/x86/kernel/ftrace.c > > @@ -34,6 +34,8 @@ > > > > #ifdef CONFIG_DYNAMIC_FTRACE > > > > +static int ftrace_poke_late = 0; > > + > > int ftrace_arch_code_modify_prepare(void) > > __acquires(&text_mutex) > > { > > @@ -43,12 +45,15 @@ int ftrace_arch_code_modify_prepare(void > > * ftrace has it set to "read/write". > > */ > > mutex_lock(&text_mutex); > > + ftrace_poke_late = 1; > > return 0; > > } > > > > int ftrace_arch_code_modify_post_process(void) > > __releases(&text_mutex) > > { > > + text_poke_finish(); > > + ftrace_poke_late = 0; > > mutex_unlock(&text_mutex); > > return 0; > > } > > @@ -116,7 +121,10 @@ ftrace_modify_code_direct(unsigned long > > return ret; > > > > /* replace the text with the new text */ > > - text_poke_early((void *)ip, new_code, MCOUNT_INSN_SIZE); > > + if (ftrace_poke_late) > > + text_poke_queue((void *)ip, new_code, MCOUNT_INSN_SIZE, NULL); > > + else > > + text_poke_early((void *)ip, new_code, MCOUNT_INSN_SIZE); > > return 0; > > } > > >
| |