Re: [PATCH v3] io_uring/lock: Keep spinlock release before wake_up()

From: Jens Axboe

Date: Wed Sep 23 2026 - 14:53:45 EST



On Thu, 24 Sep 2026 01:20:32 +0800, Xiaochuan Li wrote:
> When CONFIG_PREEMPT_RT enable, raw_spin_lock() will preempt_disable()
> -> raw_spin_lock()
> -> wake_up()
> ...
> -> spin_lock_irqsave()
>
> which will trigger:
> BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:46
> in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 985654, name: iou-wrk-983605
> preempt_count: 1, expected: 0
> RCU nest depth: 0, expected: 0
> CPU: 3 PID: 985654 Comm: iou-wrk-983605 Tainted: G O 6.1.83-rt28-g19631eb82f21
> stack:0 ppid:977479 flags:0x00000008
> tgid:977553 prio:120 preempt:0x100000001 rcu_read_lock_nesting:0
> used_cpu 3 wake_cpu 3 on_cpu 3 on_rq 1 migrate_dis 0
> arrive:17423426040675 queued:0 prev_sum:33955300 sum_exec:33955300
> Call trace:
> dump_backtrace.part.0+0xdc/0xec
> show_stack+0x1c/0x30
> dump_stack_lvl+0xac/0xc4
> dump_stack+0x14/0x30
> __might_resched+0x13c/0x170
> rt_spin_lock+0x34/0xc0
> __wake_up_common_lock+0x68/0xd0
> __wake_up+0x1c/0x24
> io_worker_handle_work+0x5b0/0x600
> io_wqe_worker+0xf4/0x310
> ret_from_fork+0x10/0x20
>
> [...]

Applied, thanks!

[1/1] io_uring/lock: Keep spinlock release before wake_up()
commit: 8dc68de64261e599631aa7ed6cdf3aec07c7ae3d

Best regards,
--
Jens Axboe