• Conor Dooley's avatar
    RISC-V: fix taking the text_mutex twice during sifive errata patching · bf89b7ee
    Conor Dooley authored
    Chris pointed out that some bonehead, *cough* me *cough*, added two
    mutex_locks() to the SiFive errata patching. The second was meant to
    have been a mutex_unlock().
    
    This results in errors such as
    
    Unable to handle kernel NULL pointer dereference at virtual address 0000000000000030
    Oops [#1]
    Modules linked in:
    CPU: 0 PID: 0 Comm: swapper Not tainted
    6.2.0-rc1-starlight-00079-g9493e6f3 #229
    Hardware name: BeagleV Starlight Beta (DT)
    epc : __schedule+0x42/0x500
     ra : schedule+0x46/0xce
    epc : ffffffff8065957c ra : ffffffff80659a80 sp : ffffffff81203c80
     gp : ffffffff812d50a0 tp : ffffffff8120db40 t0 : ffffffff81203d68
     t1 : 0000000000000001 t2 : 4c45203a76637369 s0 : ffffffff81203cf0
     s1 : ffffffff8120db40 a0 : 0000000000000000 a1 : ffffffff81213958
     a2 : ffffffff81213958 a3 : 0000000000000000 a4 : 0000000000000000
     a5 : ffffffff80a1bd00 a6 : 0000000000000000 a7 : 0000000052464e43
     s2 : ffffffff8120db41 s3 : ffffffff80a1ad00 s4 : 0000000000000000
     s5 : 0000000000000002 s6 : ffffffff81213938 s7 : 0000000000000000
     s8 : 0000000000000000 s9 : 0000000000000001 s10: ffffffff812d7204
     s11: ffffffff80d3c920 t3 : 0000000000000001 t4 : ffffffff812e6dd7
     t5 : ffffffff812e6dd8 t6 : ffffffff81203bb8
    status: 0000000200000100 badaddr: 0000000000000030 cause: 000000000000000d
    [<ffffffff80659a80>] schedule+0x46/0xce
    [<ffffffff80659dce>] schedule_preempt_disabled+0x16/0x28
    [<ffffffff8065ae0c>] __mutex_lock.constprop.0+0x3fe/0x652
    [<ffffffff8065b138>] __mutex_lock_slowpath+0xe/0x16
    [<ffffffff8065b182>] mutex_lock+0x42/0x4c
    [<ffffffff8000ad94>] sifive_errata_patch_func+0xf6/0x18c
    [<ffffffff80002b92>] _apply_alternatives+0x74/0x76
    [<ffffffff80802ee8>] apply_boot_alternatives+0x3c/0xfa
    [<ffffffff80803cb0>] setup_arch+0x60c/0x640
    [<ffffffff80800926>] start_kernel+0x8e/0x99c
    ---[ end trace 0000000000000000 ]---
    Reported-by: default avatarChris Hofstaedtler <zeha@debian.org>
    Fixes: 9493e6f3 ("RISC-V: take text_mutex during alternative patching")
    Signed-off-by: default avatarConor Dooley <conor.dooley@microchip.com>
    Tested-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Link: https://lore.kernel.org/r/20230302174154.970746-1-conor@kernel.org
    [Palmer: pick up Geert's bug report from the thread]
    Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    bf89b7ee
errata.c 3.14 KB