lkml.org 
[lkml]   [2012]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 14/19] kprobes: Inverse taking of module_mutex with kprobe_mutex
    From: Steven Rostedt <srostedt@redhat.com>

    Currently module_mutex is taken before kprobe_mutex, but this
    can cause issues when we have kprobes register ftrace, as the ftrace
    mutex is taken before enabling a tracepoint, which currently takes
    the module mutex.

    If module_mutex is taken before kprobe_mutex, then we can not
    have kprobes use the ftrace infrastructure.

    There seems to be no reason that the kprobe_mutex can't be taken
    before the module_mutex. Running lockdep shows that it is safe
    among the kernels I've run.

    Link: http://lkml.kernel.org/r/20120605102814.27845.21047.stgit@localhost.localdomain

    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
    Cc: "Frank Ch. Eigler" <fche@redhat.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/kprobes.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/kernel/kprobes.c b/kernel/kprobes.c
    index c62b854..7a8a122 100644
    --- a/kernel/kprobes.c
    +++ b/kernel/kprobes.c
    @@ -561,9 +561,9 @@ static __kprobes void kprobe_optimizer(struct work_struct *work)
    {
    LIST_HEAD(free_list);

    + mutex_lock(&kprobe_mutex);
    /* Lock modules while optimizing kprobes */
    mutex_lock(&module_mutex);
    - mutex_lock(&kprobe_mutex);

    /*
    * Step 1: Unoptimize kprobes and collect cleaned (unused and disarmed)
    @@ -586,8 +586,8 @@ static __kprobes void kprobe_optimizer(struct work_struct *work)
    /* Step 4: Free cleaned kprobes after quiesence period */
    do_free_cleaned_kprobes(&free_list);

    - mutex_unlock(&kprobe_mutex);
    mutex_unlock(&module_mutex);
    + mutex_unlock(&kprobe_mutex);

    /* Step 5: Kick optimizer again if needed */
    if (!list_empty(&optimizing_list) || !list_empty(&unoptimizing_list))
    --
    1.7.10.4

    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2012-07-21 05:01    [W:4.026 / U:1.588 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site