ITADN

Full system hard-lock on BAR1 VA-space exhaustion (Turing, 256 MiB BAR1) from a browser WebGL workload — RC watchdog "GPU is probably locked", 595.71.05

#1187OpenVirgil-Bulens 创建于 2026-06-09
V
Virgil-Bulenscommented
## Summary A userspace GL/WebGL client (Chromium-based browser rendering a WebGL-heavy page) can exhaust the GPU's 256 MiB BAR1 aperture, after which the driver emits a continuous flood of `dmaAllocMapping_GM107: can't alloc VA space for mapping` / `NV_ERR_NO_MEMORY`, then `krcWatchdog: GPU is probably locked!`, and the **entire machine hard-locks** — no clean shutdown, no SysRq, requires a power cycle. Expected behavior: BAR1/VA-space exhaustion should surface to the client as an allocation failure (the renderer/tab dies — which it does on the *first* occurrence), **without** locking the GPU engine or hanging the host kernel. Observed behavior: on a repeat of the workload the driver fails to contain the exhaustion and the GPU/host deadlock. This is reproducible and not load-spike related — it builds over a few minutes while the page is open. ## Environment - GPU: NVIDIA GeForce RTX 2070 SUPER (Turing, TU104) - VBIOS: 90.04.95.00.58 - **BAR1: 256 MiB** (Resizable BAR not supported on Turing, so this is fixed) - Driver: **595.71.05** (open kernel modules). Also reproduced on 580.159.03. - Kernel: 6.17.0-35-generic, Ubuntu 24.04 (x86_64) - CPU/board: AMD Ryzen 7 3700X, Gigabyte (AMD platform) ## Reproduction 1. Open a WebGL/canvas-heavy site (in our case ui.com / UniFi UI) in a GPU-accelerated Chromium-based browser. 2. Leave it rendering for ~1–7 minutes. 3. BAR1 VA-space exhausts; kernel log fills with `can't alloc VA space`; renderer crashes once ("Aw, Snap"). 4. Reload the page → GPU RC watchdog reports the GPU locked → full system hang (hard reset required). Reproduced 3/3 times. Disabling browser GPU acceleration avoids it (confirms the BAR1 mapping path as the trigger). ## Key kernel log sequence (excerpt) ``` NVRM: dmaAllocMapping_GM107: can't alloc VA space for mapping. (×hundreds, in bursts) NVRM: nvAssertOkFailedNoLog: Assertion failed: Out of memory [NV_ERR_NO_MEMORY] (0x00000051) ... @ mapping_reuse.c:273 NVRM: ... @ kern_bus_gm107.c:3141 [drm] [nvidia-drm] [GPU ID 0x00000700] Failed to ioremap_wc NvKmsKapiMemory ... [drm:__nv_drm_gem_nvkms_map [nvidia_drm]] *ERROR* Failed to map NvKmsKapiMemory ... NVRM: krcWatchdog_IMPL: RC watchdog: GPU is probably locked! Notify Timeout Seconds: 7 NVRM: nvAssertFailedNoLog: Assertion failed: GPPut < WATCHDOG_GPFIFO_ENTRIES @ kernel_rc_watchdog.c:1549 ``` (Full curated kernel sequence and `nvidia-bug-report.log.gz` available on request / attached.) ## Notes / impact - The single-renderer-crash path works (allocation failure is returned). The escalation to a GPU engine lock + unrecoverable host hang on repeat is the bug. - On a small-BAR1 (256 MiB) Turing part with no Resizable BAR, this aperture is easy for a modern WebGL workload to exhaust, so robust handling of BAR1 exhaustion matters here.
4 条评论