Messages in this thread | | | Subject | Re: [PATCH 3/3] powerpc/mm: Implement CONFIG_DEBUG_RODATA on PPC32 | From | christophe leroy <> | Date | Wed, 19 Apr 2017 20:36:43 +0200 |
| |
Le 19/04/2017 à 16:22, Christophe LEROY a écrit : > > > Le 19/04/2017 à 16:01, Michael Ellerman a écrit : >> Christophe Leroy <christophe.leroy@c-s.fr> writes: >> >>> diff --git a/arch/powerpc/kernel/ftrace.c b/arch/powerpc/kernel/ftrace.c >>> index 32509de6ce4c..4af81fb23653 100644 >>> --- a/arch/powerpc/kernel/ftrace.c >>> +++ b/arch/powerpc/kernel/ftrace.c >>> @@ -526,7 +526,9 @@ void ftrace_replace_code(int enable) >>> */ >>> void arch_ftrace_update_code(int command) >>> { >>> + set_kernel_text_rw(); >>> ftrace_modify_all_code(command); >>> + set_kernel_text_ro(); >>> } >> >> I'm not sure that's the right place for that. > > > I took arch/arm/ as model. It does the following. Is that wrong ? > > > static int __ftrace_modify_code(void *data) > { > int *command = data; > > set_kernel_text_rw(); > ftrace_modify_all_code(*command); > set_kernel_text_ro(); > > return 0; > } > > void arch_ftrace_update_code(int command) > { > stop_machine(__ftrace_modify_code, &command, NULL); > } > > > >> If you look at other arches they hook into ftrace_modify_code(), where >> you have the address that's being modified. >> > > Ok, I will look at other arches.
Could you provide more details on what you have seen on other arches ? I didn't notice anything related in any other arches' ftrace_modify_code()
What I could find however is, in x86, the use of ftrace_arch_code_modify_prepare() and ftrace_arch_code_modify_post_process ():
int ftrace_arch_code_modify_prepare(void) { set_kernel_text_rw(); set_all_modules_text_rw(); return 0; }
int ftrace_arch_code_modify_post_process(void) { set_all_modules_text_ro(); set_kernel_text_ro(); return 0; }
Those functions are also used on arm but only for modules:
int ftrace_arch_code_modify_prepare(void) { set_all_modules_text_rw(); return 0; }
int ftrace_arch_code_modify_post_process(void) { set_all_modules_text_ro(); /* Make sure any TLB misses during machine stop are cleared. */ flush_tlb_all(); return 0; }
Should I apply the x86 approach, or something else ?
Christophe
--- L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast. https://www.avast.com/antivirus
| |