On Sun,  8 Oct 2017 14:33:04 -0700
Joel Fernandes <joe...@google.com> wrote:

>
>  static void
>  clear_mod_from_hash(struct ftrace_page *pg, struct ftrace_hash *hash)
>  {
> @@ -5771,12 +5807,24 @@ void ftrace_release_mod(struct module *mod)

This is too late. This should be done by ftrace_free_mem().

-- Steve

>  {
>       struct ftrace_mod_map *mod_map;
>       struct ftrace_mod_map *n;
> +     struct ftrace_mod_func *mod_func;
>       struct dyn_ftrace *rec;
>       struct ftrace_page **last_pg;
>       struct ftrace_page *tmp_page = NULL;
>       struct ftrace_page *pg;
>       int order;
>  
> +     /* mod_map is freed via call_rcu_sched() */
> +     preempt_disable();
> +     list_for_each_entry_rcu(mod_map, &ftrace_mod_maps, list) {
> +             if (mod_map->mod != mod)
> +                     continue;
> +             list_for_each_entry_rcu(mod_func, &mod_map->funcs, list) {
> +                     clear_mod_func_from_hashes(mod_func);
> +             }
> +     }
> +     preempt_enable();
> +
>       mutex_lock(&ftrace_lock);
>  
>       if (ftrace_disabled)

Reply via email to