From 8ebfd9737324133046694cc318fceaa59571327c Mon Sep 17 00:00:00 2001 From: tarik0 <22205836+tarik0@users.noreply.github.com> Date: Sat, 5 Sep 2026 07:36:42 +0300 Subject: [PATCH] uvm: Guard bottom-half queue flush on suspend uvm_parent_gpu_init_isr() only creates isr.bottom_half_q when the GPU supports replayable faults. uvm_suspend() flushes that queue for every retained GPU without checking, so on a GPU where replayable faults are not supported (Maxwell) it schedules onto an uninitialized queue and dereferences NULL inside _raw_q_flush while holding the queue spinlock with interrupts disabled. The suspend then cannot freeze user space and the machine hangs with the display off. Flush bottom_half_q only while replayable_faults.handling is true, the same guard uvm_suspend() already uses for kill_channel_q. Fixes: NVIDIA/open-gpu-kernel-modules#1212 --- kernel-open/nvidia-uvm/uvm_global.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel-open/nvidia-uvm/uvm_global.c b/kernel-open/nvidia-uvm/uvm_global.c index fcf7d4865d..9a59208937 100644 --- a/kernel-open/nvidia-uvm/uvm_global.c +++ b/kernel-open/nvidia-uvm/uvm_global.c @@ -335,7 +335,8 @@ static NV_STATUS uvm_suspend(void) uvm_parent_gpu_set_isr_suspended(gpu->parent, true); - nv_kthread_q_flush(&gpu->parent->isr.bottom_half_q); + if (gpu->parent->isr.replayable_faults.handling) + nv_kthread_q_flush(&gpu->parent->isr.bottom_half_q); if (gpu->parent->isr.non_replayable_faults.handling) nv_kthread_q_flush(&gpu->parent->isr.kill_channel_q);