• Youling Tang's avatar
    LoongArch: Use generic BUG() handler · 2d2c3952
    Youling Tang authored
    Inspired by commit 9fb7410f("arm64/BUG: Use BRK instruction for
    generic BUG traps"), do similar for LoongArch to use generic BUG()
    handler.
    
    This patch uses the BREAK software breakpoint instruction to generate
    a trap instead, similarly to most other arches, with the generic BUG
    code generating the dmesg boilerplate.
    
    This allows bug metadata to be moved to a separate table and reduces
    the amount of inline code at BUG() and WARN() sites. This also avoids
    clobbering any registers before they can be dumped.
    
    To mitigate the size of the bug table further, this patch makes use of
    the existing infrastructure for encoding addresses within the bug table
    as 32-bit relative pointers instead of absolute pointers.
    
    (Note: this limits the max kernel size to 2GB.)
    
    Before patch:
    [ 3018.338013] lkdtm: Performing direct entry BUG
    [ 3018.342445] Kernel bug detected[#5]:
    [ 3018.345992] CPU: 2 PID: 865 Comm: cat Tainted: G D 6.0.0-rc6+ #35
    
    After patch:
    [  125.585985] lkdtm: Performing direct entry BUG
    [  125.590433] ------------[ cut here ]------------
    [  125.595020] kernel BUG at drivers/misc/lkdtm/bugs.c:78!
    [  125.600211] Oops - BUG[#1]:
    [  125.602980] CPU: 3 PID: 410 Comm: cat Not tainted 6.0.0-rc6+ #36
    
    Out-of-line file/line data information obtained compared to before.
    Signed-off-by: default avatarYouling Tang <tangyouling@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    2d2c3952
bug.h 1.32 KB