• Gerald Schaefer's avatar
    locking/lockdep: check for freed initmem in static_obj() · 7a5da02d
    Gerald Schaefer authored
    The following warning occurred on s390:
    WARNING: CPU: 0 PID: 804 at kernel/locking/lockdep.c:1025 lockdep_register_key+0x30/0x150
    
    This is because the check in static_obj() assumes that all memory within
    [_stext, _end] belongs to static objects, which at least for s390 isn't
    true. The init section is also part of this range, and freeing it allows
    the buddy allocator to allocate memory from it. We have virt == phys for
    the kernel on s390, so that such allocations would then have addresses
    within the range [_stext, _end].
    
    To fix this, introduce arch_is_kernel_initmem_freed(), similar to
    arch_is_kernel_text/data(), and add it to the checks in static_obj().
    This will always return 0 on architectures that do not define
    arch_is_kernel_initmem_freed. On s390, it will return 1 if initmem has
    been freed and the address is in the range [__init_begin, __init_end].
    Signed-off-by: default avatarGerald Schaefer <gerald.schaefer@de.ibm.com>
    Reviewed-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    7a5da02d
sections.h 5.83 KB