On Mon, Oct 9, 2017 at 11:53 AM, Joel Fernandes <[email protected]> wrote:
[..]
> +
>  void ftrace_free_mem(struct module *mod, void *start_ptr, void *end_ptr)
>  {
>         unsigned long start = (unsigned long)(start_ptr);
> @@ -6076,8 +6135,12 @@ void ftrace_free_mem(struct module *mod, void 
> *start_ptr, void *end_ptr)
>         struct dyn_ftrace *rec;
>         struct dyn_ftrace key;
>         struct ftrace_mod_map *mod_map = NULL;
> +       struct ftrace_init_func *func, *func_next;
> +       struct list_head clear_hash;
>         int order;
>
> +       INIT_LIST_HEAD(&clear_hash);
> +
>         key.ip = start;
>         key.flags = end;        /* overload flags, as it is unsigned long */
>
> @@ -6102,6 +6165,9 @@ void ftrace_free_mem(struct module *mod, void 
> *start_ptr, void *end_ptr)
>                 if (!rec)
>                         continue;
>
> +               /* rec will be cleared from hashes after ftrace_lock unlock */
> +               add_to_clear_hash_list(&clear_hash, rec);
> +
>                 if (mod_map)
>                         save_ftrace_mod_rec(mod_map, rec);
>
> @@ -6123,6 +6189,11 @@ void ftrace_free_mem(struct module *mod, void 
> *start_ptr, void *end_ptr)
>                 goto again;
>         }
>         mutex_unlock(&ftrace_lock);
> +
> +       list_for_each_entry_safe(func, func_next, &clear_hash, list) {

I think I screwed this list_for_each_entry up! Please ignore this
revision, I'll send another patch revision shortly.

Regards,
Joel

Reply via email to