• Qiu Peiyang's avatar
    ftrace: Fix the race between ftrace and insmod · 5156dca3
    Qiu Peiyang authored
    We hit ftrace_bug report when booting Android on a 64bit ATOM SOC chip.
    Basically, there is a race between insmod and ftrace_run_update_code.
    
    After load_module=>ftrace_module_init, another thread jumps in to call
    ftrace_run_update_code=>ftrace_arch_code_modify_prepare
                            =>set_all_modules_text_rw, to change all modules
    as RW. Since the new module is at MODULE_STATE_UNFORMED, the text attribute
    is not changed. Then, the 2nd thread goes ahead to change codes.
    However, load_module continues to call complete_formation=>set_section_ro_nx,
    then 2nd thread would fail when probing the module's TEXT.
    
    The patch fixes it by using notifier to delay the enabling of ftrace
    records to the time when module is at state MODULE_STATE_COMING.
    
    Link: http://lkml.kernel.org/r/567CE628.3000609@intel.comSigned-off-by: default avatarQiu Peiyang <peiyangx.qiu@intel.com>
    Signed-off-by: default avatarZhang Yanmin <yanmin.zhang@intel.com>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    5156dca3
ftrace.c 139 KB