• Vegard Nossum's avatar
    debugobjects: fix lockdep warning · 673d62cc
    Vegard Nossum authored
    Daniel J. Blueman reported:
    > =======================================================
    > [ INFO: possible circular locking dependency detected ]
    > 2.6.27-rc4-224c #1
    > -------------------------------------------------------
    > hald/4680 is trying to acquire lock:
    >  (&n->list_lock){++..}, at: [<ffffffff802bfa26>] add_partial+0x26/0x80
    >
    > but task is already holding lock:
    >  (&obj_hash[i].lock){++..}, at: [<ffffffff8041cfdc>]
    > debug_object_free+0x5c/0x120
    
    We fix it by moving the actual freeing to outside the lock (the lock
    now only protects the list).
    
    The pool lock is also promoted to irq-safe (suggested by Dan). It's
    necessary because free_pool is now called outside the irq disabled
    region. So we need to protect against an interrupt handler which calls
    debug_object_init().
    
    [tglx@linutronix.de: added hlist_move_list helper to avoid looping
    		     through the list twice]
    Reported-by: default avatarDaniel J Blueman <daniel.blueman@gmail.com>
    Signed-off-by: default avatarVegard Nossum <vegard.nossum@gmail.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    673d62cc
debugobjects.c 21.3 KB