• A
    kernel/locking/lockdep.c: convert hash tables to hlists · 4a389810
    Andrew Morton 提交于
    Mike said:
    
    : CONFIG_UBSAN_ALIGNMENT breaks x86-64 kernel with lockdep enabled, i.  e
    : kernel with CONFIG_UBSAN_ALIGNMENT 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.
    
    lockdep_init() and lockdep_initialized can be done away with now - a 4.6
    patch has been prepared to do this.
    Reported-by: NMike Krinkin <krinkin.m.u@gmail.com>
    Suggested-by: NMike Krinkin <krinkin.m.u@gmail.com>
    Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    4a389810
lockdep.h 16.3 KB