[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <mhng-ff90cb6e-3386-426a-a858-038b6ef33b1b@palmer-ri-x1c9>
Date: Wed, 08 Jan 2025 10:33:49 -0800 (PST)
From: Palmer Dabbelt <palmer@...belt.com>
To: bigeasy@...utronix.de
CC: namcao@...utronix.de, Paul Walmsley <paul.walmsley@...ive.com>,
aou@...s.berkeley.edu, Bjorn Topel <bjorn@...osinc.com>, schwab@...e.de, songshuaishuai@...ylab.org,
coelacanthushex@...il.com, linux-riscv@...ts.infradead.org, linux-kernel@...r.kernel.org,
stable@...r.kernel.org
Subject: Re: [PATCH] riscv: Fix sleeping in invalid context in die()
On Wed, 20 Nov 2024 00:50:45 PST (-0800), bigeasy@...utronix.de wrote:
> On 2024-11-18 10:13:33 [+0100], Nam Cao wrote:
>> die() can be called in exception handler, and therefore cannot sleep.
>> However, die() takes spinlock_t which can sleep with PREEMPT_RT enabled.
>> That causes the following warning:
>>
>> BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48
>> in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 285, name: mutex
>> preempt_count: 110001, expected: 0
>> RCU nest depth: 0, expected: 0
>> CPU: 0 UID: 0 PID: 285 Comm: mutex Not tainted 6.12.0-rc7-00022-ge19049cf7d56-dirty #234
>> Hardware name: riscv-virtio,qemu (DT)
>> Call Trace:
>> dump_backtrace+0x1c/0x24
>> show_stack+0x2c/0x38
>> dump_stack_lvl+0x5a/0x72
>> dump_stack+0x14/0x1c
>> __might_resched+0x130/0x13a
>> rt_spin_lock+0x2a/0x5c
>> die+0x24/0x112
>> do_trap_insn_illegal+0xa0/0xea
>> _new_vmalloc_restore_context_a0+0xcc/0xd8
>> Oops - illegal instruction [#1]
>>
>> Switch to use raw_spinlock_t, which does not sleep even with PREEMPT_RT
>> enabled.
>>
>> Fixes: 76d2a0493a17 ("RISC-V: Init and Halt Code")
>> Signed-off-by: Nam Cao <namcao@...utronix.de>
>> Cc: stable@...r.kernel.org
>
> Reviewed-by: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
>
> The die_lock() is probably do let one CPU die at a time. On x86 there is
> support for for recursive die so if it happens, you don't spin on the
> die_lock and see nothing. Not sure if this is a thing.
Looks like the RISC-V code is pretty much the same as the arm64 code, so
it probably just came from there. I don't really know what the right
answer is here...
>
> Sebastian
Powered by blists - more mailing lists