• A
    locking/lockdep: Convert hash tables to hlists · a63f38cc
    Andrew Morton 提交于
    Mike said:
    
    : CONFIG_UBSAN_ALIGNMENT breaks x86-64 kernel with lockdep enabled, i.e.
    : kernel with CONFIG_UBSAN_ALIGNMENT=y fails to load without even any error
    : message.
    :
    : The problem is that ubsan callbacks use spinlocks and might be called
    : before lockdep is initialized.  Particularly this line in the
    : reserve_ebda_region function causes problem:
    :
    : lowmem = *(unsigned short *)__va(BIOS_LOWMEM_KILOBYTES);
    :
    : If i put lockdep_init() before reserve_ebda_region call in
    : x86_64_start_reservations kernel loads well.
    
    Fix this ordering issue permanently: change lockdep so that it uses hlists
    for the hash tables.  Unlike a list_head, an hlist_head is in its
    initialized state when it is all-zeroes, so lockdep is ready for operation
    immediately upon boot - lockdep_init() need not have run.
    
    The patch will also save some memory.
    
    Probably lockdep_init() and lockdep_initialized can be done away with now.
    Suggested-by: NMike Krinkin <krinkin.m.u@gmail.com>
    Reported-by: NMike Krinkin <krinkin.m.u@gmail.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-kernel@vger.kernel.org
    Cc: mm-commits@vger.kernel.org
    Signed-off-by: NIngo Molnar <mingo@kernel.org>
    a63f38cc
lockdep.h 16.3 KB