lkml.org 
[lkml]   [2011]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] 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.

    Signed-off-by: Gleb Natapov <gleb@redhat.com>
    diff --git a/kernel/jump_label.c b/kernel/jump_label.c
    index a8ce450..e6f1f24 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();
    }

    --
    Gleb.

    \
     
     \ /
      Last update: 2011-10-18 19:59    [W:0.020 / U:30.024 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site