lkml.org 
[lkml]   [2010]   [Jan]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 05/11] lockdep: Add file and line to initialize sequence of rwlock
    Date
    rwlock has two way to be initialized.
    1: the macros DEFINE_{SPIN,RW}LOCK for statically defined locks
    2: the functions {spin_,rw}lock_init() for locks on dynamically allocated memory

    This patch modifies these two initialize sequences
    for adding __FILE__ and __LINE__ to lockdep_map.

    Signed-off-by: Hitoshi Mitake <mitake@dcl.info.waseda.ac.jp>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    ---
    include/linux/rwlock.h | 6 ++++--
    include/linux/rwlock_types.h | 6 +++++-
    lib/spinlock_debug.c | 6 ++++--
    3 files changed, 13 insertions(+), 5 deletions(-)

    diff --git a/include/linux/rwlock.h b/include/linux/rwlock.h
    index 71e0b00..cdef180 100644
    --- a/include/linux/rwlock.h
    +++ b/include/linux/rwlock.h
    @@ -16,12 +16,14 @@

    #ifdef CONFIG_DEBUG_SPINLOCK
    extern void __rwlock_init(rwlock_t *lock, const char *name,
    - struct lock_class_key *key);
    + struct lock_class_key *key,
    + const char *file, unsigned int line);
    # define rwlock_init(lock) \
    do { \
    static struct lock_class_key __key; \
    \
    - __rwlock_init((lock), #lock, &__key); \
    + __rwlock_init((lock), #lock, &__key, \
    + __FILE__, __LINE__); \
    } while (0)
    #else
    # define rwlock_init(lock) \
    diff --git a/include/linux/rwlock_types.h b/include/linux/rwlock_types.h
    index bd31808..e5e70c4 100644
    --- a/include/linux/rwlock_types.h
    +++ b/include/linux/rwlock_types.h
    @@ -25,7 +25,11 @@ typedef struct {
    #define RWLOCK_MAGIC 0xdeaf1eed

    #ifdef CONFIG_DEBUG_LOCK_ALLOC
    -# define RW_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname }
    +# define RW_DEP_MAP_INIT(lockname) .dep_map = { \
    + .name = #lockname, \
    + .file = __FILE__, \
    + .line = __LINE__, \
    + }
    #else
    # define RW_DEP_MAP_INIT(lockname)
    #endif
    diff --git a/lib/spinlock_debug.c b/lib/spinlock_debug.c
    index 81fa789..1cdae8b 100644
    --- a/lib/spinlock_debug.c
    +++ b/lib/spinlock_debug.c
    @@ -34,14 +34,16 @@ void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
    EXPORT_SYMBOL(__raw_spin_lock_init);

    void __rwlock_init(rwlock_t *lock, const char *name,
    - struct lock_class_key *key)
    + struct lock_class_key *key,
    + const char *file, unsigned int line)
    {
    #ifdef CONFIG_DEBUG_LOCK_ALLOC
    /*
    * Make sure we are not reinitializing a held lock:
    */
    debug_check_no_locks_freed((void *)lock, sizeof(*lock));
    - lockdep_init_map(&lock->dep_map, name, key, 0);
    + __lockdep_init_map(&lock->dep_map, name, key, 0,
    + file, line);
    #endif
    lock->raw_lock = (arch_rwlock_t) __ARCH_RW_LOCK_UNLOCKED;
    lock->magic = RWLOCK_MAGIC;
    --
    1.6.5.2


    \
     
     \ /
      Last update: 2010-01-30 12:47    [W:0.046 / U:60.988 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site