lkml.org 
[lkml]   [2011]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] jump_label: jump_label_inc may return before the code is patched
    Commit-ID:  bbbf7af4bf8fc69bc751818cf30521080fa47dcb
    Gitweb: http://git.kernel.org/tip/bbbf7af4bf8fc69bc751818cf30521080fa47dcb
    Author: Gleb Natapov <gleb@redhat.com>
    AuthorDate: Tue, 18 Oct 2011 19:55:51 +0200
    Committer: Steven Rostedt <rostedt@goodmis.org>
    CommitDate: Mon, 5 Dec 2011 13:28:46 -0500

    jump_label: jump_label_inc may return before the code is patched

    If cpu A calls jump_label_inc() just after atomic_add_return() is
    called by cpu B, atomic_inc_not_zero() will return value greater then
    zero and jump_label_inc() will return to a caller before jump_label_update()
    finishes its job on cpu B.

    Link: http://lkml.kernel.org/r/20111018175551.GH17571@redhat.com

    Cc: stable@vger.kernel.org
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Acked-by: Jason Baron <jbaron@redhat.com>
    Signed-off-by: Gleb Natapov <gleb@redhat.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    kernel/jump_label.c | 3 ++-
    1 files changed, 2 insertions(+), 1 deletions(-)

    diff --git a/kernel/jump_label.c b/kernel/jump_label.c
    index bbdfe2a..66ff710 100644
    --- a/kernel/jump_label.c
    +++ b/kernel/jump_label.c
    @@ -66,8 +66,9 @@ void jump_label_inc(struct jump_label_key *key)
    return;

    jump_label_lock();
    - if (atomic_add_return(1, &key->enabled) == 1)
    + if (atomic_read(&key->enabled) == 0)
    jump_label_update(key, JUMP_LABEL_ENABLE);
    + atomic_inc(&key->enabled);
    jump_label_unlock();
    }


    \
     
     \ /
      Last update: 2011-12-06 07:29    [W:0.022 / U:0.172 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site