Skip to content

615.71.09 regression: DisplayPort monitor power cycling hangs KWin in GSP RPC wait; nvidia-modeset blocked, shutdown hangs (RTX 4070) #1392

Open

Description

@Lubix89

NVIDIA Open GPU Kernel Modules Version

615.71.09 — regression compared with 610.57.04.

Proprietary kernel module comparison

Not tested with the proprietary kernel module of the same version. The affected boots explicitly loaded the NVIDIA Open Kernel Module.

Operating System and Version

Arch Linux, KDE Plasma / KWin Wayland.

Kernel Release

7.2.6-arch2-1, stable Arch Linux kernel. The same kernel is running after downgrading to 610.57.04.

Hardware: GPU

NVIDIA GeForce RTX 4070.

Monitor configuration and USB topology

  • Main monitor: ASUS ROG Swift OLED PG27AQDP, identified as PG27AQDP in its EDID.
  • Connector: DisplayPort, card1-DP-2 in DRM/sysfs, DP-2 in KScreen. PowerDevil/ddcutil recorded DDCA_EVENT_DISPLAY_DISCONNECTED for card1-DP-2 at 07:35:43 in affected boot 96e603de58ef43ea93a3de2ce471f069, with /dev/i2c-4 and ddc working: false.
  • Main display mode during reproduction: 2560 × 1440 at 480 Hz, confirmed by the reporter as the mode used during the hangs on 615.71.09. After the downgrade, KScreen also reports 2560 × 1440 at 479.99 Hz (nominal 480 Hz). The current scale is 1.25, HDR is disabled and VRR policy is Never; these additional settings were measured after the downgrade and have not been confirmed for the affected boots.
  • DSC: not directly confirmed by an active-link/DSC status capture. At 2560 × 1440 / 480 Hz, full RGB 8-bpc active pixels alone require approximately 42.47 Gbit/s, exceeding the 25.92 Gbit/s payload of four-lane DP HBR3. Thus DSC is expected for full RGB operation at this mode on the RTX 4070's DP link, but the exact negotiated color format, bit depth, DSC state and compression parameters during the failed modeset were not captured. No controlled DSC-on/off comparison has been performed. This is relevant to PR Allow DisplayPort detach bookkeeping when the sink is unplugged #1359, but does not establish the same root cause.
  • Second monitor: ASUS ROG PG258Q, EDID name ROG PG258Q, on card1-DP-1 / DP-1. Currently connected but disabled in KScreen; its listed selected mode is 1920 × 1080 / 60 Hz and it advertises up to 240 Hz. Its precise active state during each affected reproduction has not been independently established.
  • USB topology: the keyboard and mouse are connected through the monitor's USB hub, as confirmed by the reporter. The journal shows an ASUS USB hub (0b05:1ba6, path 1-5), a downstream GenesysLogic hub (05e3:0610, path 1-5.2), an ASUS ROG Claymore keyboard (1-5.2.3) and a Razer DeathAdder V2 mouse (1-5.2.4). These devices re-enumerate at 07:41:15–07:41:17 and disconnect at 07:41:30 in the affected boot. Consequently, monitor power cycling can also interrupt local USB input; loss of keyboard/mouse input alone should not be taken as evidence of a whole-system kernel hang. SSH remained usable, while the GPU/modeset hang is independently documented by the kernel stacks.

Describe the bug

With 615.71.09, physically turning the main monitor off and back on causes the graphical session to hang. In my reproduction, the second off/on cycle leaves the screens black.

The machine remains accessible over SSH. Attempting to restart SDDM does not recover the graphical session, and a normal reboot does not finish shutting down.

Downgrading to 610.57.04 resolves the reported reproduction.

Journal evidence

Multiple affected boots were recorded on September 24, 2026. Times below are as displayed by journalctl.

One affected boot contains:

07:14:33 nvidia-modeset: WARNING: GPU:0: Lost display notification (0:0x00000000); continuing.
07:16:24 INFO: task nvidia-modeset/:795 blocked for more than 122 seconds.
07:16:24 INFO: task nvidia-modeset/:795 blocked on a semaphore likely last held by task kwin_wayland:1010

In another affected boot, journal boot ID 96e603de58ef43ea93a3de2ce471f069, the hung-task reports recur:

07:38:16 INFO: task nvidia-modeset/:791 blocked for more than 122 seconds.
07:38:16 INFO: task nvidia-modeset/:791 blocked on a semaphore likely last held by task kwin_wayland:1001
07:40:19 INFO: task nvidia-modeset/:791 blocked for more than 245 seconds.
07:40:19 INFO: task InputThread:957 blocked for more than 122 seconds.
07:40:19 INFO: task nvhttp::47984:1694 blocked for more than 122 seconds.

KWin is reported as a running task (state:R). Its captured kernel stack includes the following functions, shown here as a summarized call path with DisplayPort C++ names demangled (not a verbatim backtrace):

drm_mode_atomic_ioctl
  -> drm_atomic_commit
  -> nv_drm_atomic_commit
  -> nv_drm_atomic_apply_modeset_config
  -> ApplyModeSetConfig
  -> nvkms_ioctl_from_kapi_try_pmlock
  -> nvKmsIoctl
  -> nvSetDispModeEvo
  -> nvDPPreSetMode
  -> DisplayPort::ConnectorImpl::trainLinkOptimized
  -> DisplayPort::EvoMainLink::train
  -> DisplayPort::LinkConfiguration::lowerConfig
  -> nvRmApiControl
  -> rpcRmApiControl_GSP
  -> _issueRpcAndWait
  -> kgspRecvPoll_IMPL

The stack also contains _kgspRpcDrainEvents and kgspHealthCheck_TU102.

This suggests a stalled DisplayPort modeset involving a GSP RPC wait. The traces alone do not establish the underlying firmware/driver defect or prove that the GSP firmware crashed.

The SDDM stop attempt in that boot also times out:

07:37:32 Stopping Simple Desktop Display Manager...
07:38:32 QProcess: Destroyed while process ("/usr/bin/X") is still running.
07:39:02 sddm.service: State 'stop-sigterm' timed out. Killing.
07:39:02 sddm.service: Failed with result 'timeout'.

To Reproduce

  1. Boot with NVIDIA open kernel modules and driver 615.71.09.
  2. Start a KDE Plasma Wayland session with the main ASUS PG27AQDP connected over DisplayPort (DP-2) at 2560 × 1440 / 480 Hz. A second monitor is connected as described above.
  3. Physically turn the main monitor off, then back on.
  4. Repeat the off/on cycle.
  5. In my reproduction, the second cycle leaves the screens black.
  6. Connect over SSH: the system is still reachable, but restarting SDDM does not recover the desktop and normal reboot hangs.

Expected behavior

The display configuration should recover after each monitor power cycle, and the desktop should remain usable.

Bug Incidence

Repeated across multiple boots. The reported reproduction fails on the second monitor power cycle; the journal records the resulting hangs but does not independently establish the number of power cycles.

nvidia-bug-report.log.gz

Not collected during the affected state. The system has already been downgraded to 610.57.04. Persistent journal logs containing the affected kernel stacks are still available.

Related reports

Please advise whether this should be tracked under #1371 and which additional diagnostics would help distinguish the underlying issue.

Activity

  1. Lubix89 commented on Sep 25, 2026

    @Lubix89
    Author

    Follow-up: September 25 comparison with 615.71.09 vs 610.57.04

    I repeated the monitor power-cycle test with 615.71.09, then downgraded to 610.57.04, where the monitor recovers normally. Comparing the journal immediately around the off/on transitions reveals explicit KWin OpenGL errors with 615.71.09 that are absent from the working 610.57.04 cycle.

    Both compared boots use kernel 7.2.6-arch2-1. The monitor is the ASUS PG27AQDP on DP-2 / card1-DP-2, with the previously reported 2560×1440 / 480 Hz configuration.

    Compared boot IDs:

    • 615.71.09: b1da6bd64eba4bdf8dafd060615da123.
    • 610.57.04: b9d607c4e4fe43d9b40436d3cd352f7f.

    There was an intermediate boot with 615.71.09 in which the downgrade was performed; it is not the failing power-cycle capture compared below. Versions were verified from the loaded kernel module messages, not just the installed packages.

    Errors on 615.71.09

    The following pair occurs twice, once during power-off and again during power-on:

    kwin_wayland[989]: 0x505: GL_OUT_OF_MEMORY error generated. Failed to allocate memory for texture.
    kwin_wayland[989]: Invalid framebuffer status:  "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"
    

    The first pair is timestamped Sep 25 07:52:04 in the wall-clock journal. Timelines below use seconds since boot because the system clock was adjusted during startup. They are abbreviated chronological summaries, with message text shortened where indicated.

    Power-off comparison

    615.71.09:

    +33.737 s  Monitor USB hub disconnects; keyboard/mouse disconnect too.
    +34.290 s  PowerDevil receives DRM change/hotplug event.
    +34.327 s  KWin: GL_OUT_OF_MEMORY ... Failed to allocate memory for texture.
    +34.327 s  KWin: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
    +34.329 s  KDE applications: There are no outputs - creating placeholder screen
    +34.851 s  PowerDevil: DDCA_EVENT_DISPLAY_DISCONNECTED, card1-DP-2,
                           io_path:/dev/i2c-4, ddc working: false
    

    610.57.04:

    +30.475 s  Monitor USB hub disconnects; keyboard/mouse disconnect too.
    +31.028 s  PowerDevil receives DRM change/hotplug event.
    +31.087 s  KDE applications: There are no outputs - creating placeholder screen
    +31.593 s  PowerDevil: DDCA_EVENT_DISPLAY_DISCONNECTED, card1-DP-2,
                           io_path:/dev/i2c-4, ddc working: false
    

    No texture allocation or framebuffer-completeness errors occur in the working cycle. The first explicit graphics error on 615.71.09 therefore already occurs during power-off, before turning the monitor back on.

    Power-on comparison

    615.71.09:

    +57.791 s  PowerDevil receives DRM change/hotplug event.
    +57.975 s  xsettingsd: Reloading configuration
    +58.086 s  KWin: GL_OUT_OF_MEMORY ... Failed to allocate memory for texture.
    +58.086 s  KWin: GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT
    +58.173 s  PowerDevil: Adding connected display with bus 4
    +58.196 s  KDE applications: There are no outputs - creating placeholder screen
    

    The USB hub, keyboard and mouse re-enumerate around +58–60 s, but the journal contains no subsequent DDCA_EVENT_DISPLAY_CONNECTED or Display redetection finished. for this transition. Another USB disconnect is recorded at +75.7 s; a reboot is requested over SSH at +104.6 s, and the journal ends during service shutdown.

    610.57.04:

    +47.322 s  PowerDevil receives DRM change/hotplug event.
    +47.526 s  xsettingsd: Reloading configuration
    +47.723 s  PowerDevil: Adding connected display with bus 4
    +47.747 s  KDE applications: There are no outputs - creating placeholder screen
    +48.043 s  PowerDevil: DDCA_EVENT_DISPLAY_CONNECTED, card1-DP-2,
                           io_path:/dev/i2c-4, ddc working: true
    +48.063 s  PowerDevil: Buses with edid: 3 4
    +48.740 s  PowerDevil: Display redetection finished.
    

    Interpretation and limits

    • The earliest explicit anomalous messages in the compared transitions are KWin's texture allocation failure and incomplete framebuffer, present with 615.71.09 and absent with 610.57.04. These failures are associated with the loss of image and are consistent with a rendering failure, but the logs alone do not prove whether they initiate the problem or are consequences of another driver failure.
    • GL_OUT_OF_MEMORY demonstrates a graphics allocation failure, not by itself proof that physical VRAM was exhausted. No contemporaneous VRAM usage measurement was captured.
    • A DRM hotplug event does arrive with both drivers. With 615.71.09, the KWin errors precede PowerDevil's Adding connected display with bus 4; the missing completion of that sequence should not be treated as the first observed fault.
    • There are no outputs - creating placeholder screen and the USB disconnect/reconnect messages also occur in the successful cycle and are not diagnostic on their own.
    • This short failing boot has no Lost display notification, Xid or 122-second hung-task report. It lasts only about 105 seconds, so it does not provide a new hung-task stack comparable to the September 24 captures in the issue description. Whether the OpenGL failures and the previously captured DisplayPort/GSP wait have the same underlying cause remains unconfirmed.
  2. jorjun commented on Sep 27, 2026

    @jorjun

    Same driver version, same failure family, different GPU/stack — adding independent evidence and two symptoms not yet in this thread.

    Environment

    • 615.71.09 (NVIDIA Open Kernel Module), Arch-based (Omarchy 4.0.4), kernel 7.2.5-3-omarchy
    • GeForce RTX 3070 (GA104 / Turing) — extends the affected-GPU range to Turing
    • Hyprland 0.56.2 Wayland, atomic DRM
    • Display chain: DP → USB-C DP adapter (VIA VL817 hub + Billboard devices) → Philips 34M2C7600MV (3440x1440, EDID-preferred 165 Hz)

    Symptom 1: Xid 16 flood + nvkms kthread hung on the pmlock, ~2h before your stack shape

    Sep 26 boot, hotplug of the USB-C/DP adapter at 15:06:

    15:06:45 kernel: NVRM: Xid (PCI:0000:01:00): 16, Head 00000003 Count 0009f305
    15:06:54 ... [Xid 16 every ~8 s, continuing past 15:10]
    15:09:01 kernel: traps: code[82134] trap int3   [Chromium/Electron CHECK abort in the crashed GPU-client app]
    16:10:41 kernel: nvidia-modeset: ERROR: GPU:0: Error while waiting for GPU progress: 0x0000c67e:6 3:0:1724:1708
    16:10:44 kernel: INFO: task nvidia-modeset/:213 blocked for more than 1105 seconds.
    16:10:44 kernel: INFO: task nvidia-modeset/:213 blocked on a semaphore likely last held by task Hyprland:1493
    16:10:44 kernel:  nvkms_kthread_q_callback+0xb1/0x170 [nvidia_modeset]
    16:10:44 kernel:  _main_loop+0x114/0x170 [nvidia_modeset]
    

    Hung-task reports repeat 15:54→16:12 (~2 min apart, 21 occurrences). Boot ended in a clean shutdown at 22:00; SSH-equivalent access (other TTYs) stayed alive.

    Your captured stack has the compositor stuck in nvkms_ioctl_from_kapi_try_pmlock inside an atomic modeset waiting on a GSP RPC; mine is the mirror image — the nvkms kthread (_main_loop → nvkms_kthread_q_callback) blocked on the semaphore while the compositor holds it. Same lock, opposite side — consistent with the pmlock/GSP-wait deadlock you captured.

    Symptom 2: after a later hotplug, every modeset silently no-ops (no kernel error at all)

    Next boot, after a hotplug cycle, on the same connector (card1-DP-1):

    $ hyprctl output DP-1 mode 3440x1440@120.00Hz   -> connector stays 3440x1440@59.973
    $ hyprctl output DP-1 mode 3440x1440@74.98Hz    -> stays 59.973
    $ hyprctl output DP-1 mode 1920x1080@60.00Hz    -> stays 59.973
    $ hyprctl output DP-1 mode 2560x1080@59.94Hz    -> stays 59.973
    $ hyprctl reload (config requests @165)          -> stays 59.973
    

    Every request returned ok from the compositor; kernel logged zero nvidia/drm errors; no blank. The mode is simply never applied. Notably small modes (1920x1080@60 ≈ 4.5 Gbit/s payload) are refused too, so this is not a link-bandwidth ceiling — the connector appears pinned to the trained mode.

    Symptom 3: DP hotplug of a different device produces no DRM connector event

    With the session live, disconnecting the adapter and connecting a different DP sink (VITURE XR glasses presenting 1920x1080) enumerated its USB side but produced no DRM connector event for 73 s — no nvidia/drm/hotplug messages, connector kept the stale EDID of the previously trained device. This matches the missing DDCA_EVENT_DISPLAY_CONNECTED / "Display redetection finished." completion in your +58 s capture: with 615.71.09 the hotplug handshake starts (USB re-enumerates) but the DP side never re-trains or reports.

    What this adds

    1. A second GPU generation (Turing/GA104) on 615.71.09 with the same trigger and the complementary side of the lock inversion — supports "regression in 615.71.09" over GPU-specific.
    2. The silent modeset lockout (post-hotplug, all commits no-op without any kernel error) — reproducible in isolation with zero log noise, which should make it easy to bisect.
    3. The no-DRM-event DP hotplug observation as a separate, cleanly observable marker.

    Recovery on my machine required a full reboot; reload/replug did not clear the modeset lockout.

    Filed by GLM (glm-5.3-flash) via opencode CLI.

  3. vatodevops commented on Sep 28, 2026

    @vatodevops

    Another data point for this regression, with a full hung-task stack that shows the hotplug worker spinning inside the GSP RPC wait at boot, with no monitor power-cycling involved.

    Environment

    • ASUS ROG Zephyrus G16 GU603VI (BIOS 317), hybrid graphics: Intel Raptor Lake-P Iris Xe (internal panel eDP-1) + RTX 4070 Laptop GPU (AD106M, 10de:2860, VBIOS 95.06.1D.00.19) driving two external monitors (HDMI-A-1 + DP-3)
    • 615.71.09 open kernel module, CachyOS, kernel 7.2.8-1-cachyos, nvidia-drm modeset=1
    • KDE Plasma 6.7 Wayland, KWin 6.7.5, plasma-login-manager 6.7.4 greeter

    Symptom

    Intermittent at boot: the greeter never appears, only a blinking text cursor. VT switching (Ctrl+Alt+F2) doesn't respond, the laptop heats up (one core pinned at 100%), and a short power-button press still gives a clean systemd shutdown. Two failures in a row today right after a kernel update (7.2.7 → 7.2.8, module rebuilt), then the third boot was fine. Also seen on 23/09. Not seen on 610.x.

    The greeter's kwin_wayland times out at startup, and then even SIGKILL can't kill it (Processes still around after final SIGKILL). This also happened when the greeter was restricted to the Intel GPU only (KWIN_DRM_DEVICES pointing at the i915 card), because KWin still blocks on the nvidia-drm side while exiting.

    Stack (hung-task detector, ~4 min after boot)

    KWin is blocked on a mutex held by the nvidia-drm hotplug worker:

    INFO: task kwin_wayland:1385 blocked for more than 122 seconds.
    task:kwin_wayland state:D
     __mutex_lock+0x1c7/0x5a0
     drm_client_dev_restore+0x3d/0x140
     drm_release+0xd9/0x130
     __fput
     task_work_run
     do_exit
     ...
     ? nv_drm_get_dev_info_ioctl [nvidia_drm]
    INFO: task kwin_wayland:1385 is blocked on a mutex likely owned by task kworker/14:1:188.
    

    The owner is running (state R), not sleeping: it's busy-polling the GSP while validating a mode from the hotplug handler:

    task:kworker/14:1 state:R  running task  pid:188
    Workqueue: events nv_drm_handle_hotplug_event [nvidia_drm]
     ? osDevReadReg032 [nvidia]
     ? msgqRxGetReadBuffer [nvidia]
     ? GspMsgQueueReceiveStatus [nvidia]
     ? kgspHealthCheck_TU102 [nvidia]
     ? _kgspRpcDrainEvents [nvidia]
     ? kgspRecvPoll_IMPL [nvidia]
     ? _issueRpcAndWait [nvidia]
     ? rpcRmApiControl_GSP [nvidia]
     ? dispapiControl_IMPL [nvidia]
     ? rmapiControlWithSecInfo [nvidia]
     ? nvkms_call_rm [nvidia_modeset]
     ? nvRmApiControl [nvidia_modeset]
     ? nvEvoIsModePossibleC3 [nvidia_modeset]
     ? nvValidateImpOneDisp [nvidia_modeset]
     ? nvValidateImpOneDispDowngrade [nvidia_modeset]
     ? nvConstructHwModeTimingsImpCheckEvo [nvidia_modeset]
     ? ValidateMode [nvidia_modeset]
    

    So the IMP check (nvEvoIsModePossibleC3 → RM control → GSP RPC) never gets a reply, kgspRecvPoll never gives up, and the worker holds the DRM lock indefinitely. That explains the unkillable compositor, the dead VT switching, and the heat. nvidia-powerd also times out on shutdown in the failing boots.

    Other notes:

    • Unable to read EDID for display device DP-2 appears on every boot, good and bad, so it doesn't discriminate.
    • On 23/09 the failing boot also logged nvidia-modeset: WARNING: GPU:0: Lost display notification just before the compositor started (it's absent from good boots).
    • No Xid in either of today's failing boots.

    Full journals of both failing boots are available if useful.

  4. yungwood commented on Sep 29, 2026

    @yungwood

    Another data point: DisplayPort reconnect fails on 615.71.09 but passed after downgrading to 610.57.04, with an explicit GSP timeout in the post-modeset display-capability cache update.

    I initially encountered this when running a script to change AOC from 4k to 1080p and disabled HDMI before playing a game. Multiple subsequent script runs passed, whereas DP reconnect reliably reproduced the failure.

    Environment

    • RTX 2070, NVIDIA open kernel modules; Arch Linux.
    • Kernel 7.2.7-zen1, Hyprland 0.56.2-3, Aquamarine 0.15.1-1
    • AOC AGP327UZD on DisplayPort, 3840×2160 ~240 Hz; Dell U3223QE on HDMI, 3840×2160 60 Hz. AOC in 4K240 mode.

    Reproduction and comparison

    Unplug AOC DisplayPort, wait ~10 seconds, reconnect; both monitors initially enabled.

    • 615.71.09: multiple failures across separate boots. DisplayPort did not recover, sometimes the HDMI display showed artifacts; desktop input stopped responding. SSH remained usable. Orderly shutdowns unable to complete, power cycle required.
    • 610.57.04: unable to reproduce issue.

    Stack

    Both failures logged Lost display notification, then Xid 119 waiting for function 76 (GSP_RM_CONTROL), control 0x73114e (NV0073_CTRL_CMD_DFP_UPDATE_DYNAMIC_DFP_CACHE):

    nvDPPostSetMode -> dpPostModeset -> notifyAttachEnd
      -> rmUpdateDynamicDfpCache -> rpcRmApiControl_GSP
      -> _issueRpcAndWait -> kgspRecvPoll_IMPL
    

    Subsequent controls 0x730280 and 0x731360 timed out, followed by Xid 154 / PF FLR. This adds a post-modeset timeout path to the pre-modeset/link-training stack in the original report.

    Completed nvidia-bug-report.sh --safe-mode reports collected over SSH during multiple failed states are available.

  5. Romancc commented on Oct 1, 2026

    @Romancc

    Same regression here on Ada desktop (RTX 4080). One extra data point that may help: it depends on the refresh rate, i.e. on link bandwidth / DSC.

    Environment

    • RTX 4080 (AD103, 10de:2704), open kernel module
    • CachyOS, KDE Plasma 6 Wayland, KWin 6.7.5
    • 615.71.09 + kernel 7.2.8-1-cachyos: affected
    • 610.57.04 + kernel 7.2.3-1-cachyos: not affected (same KWin)
    • Monitors, both direct DP (no hub, no MST):
      • MSI MPG271QX OLED, 2560x1440 @ 360 Hz, HDR on: the trigger
      • ASUS VG27AQ1A, 2560x1440: power-cycling it does not trigger the hang

    Results

    Driver OLED mode OLED power off/on
    615.71.09 2560x1440 @ 360 Hz hang (reproducible)
    615.71.09 2560x1440 @ 240 Hz OK
    610.57.04 2560x1440 @ 360 Hz OK

    So on 615.71.09, dropping the OLED from 360 Hz to 240 Hz avoids the hang. That is a usable workaround for anyone affected.

    The first occurrence happened without touching the power button, ~10 min after login (Plasma screen-off/DPMS timeout). The OLED's sleep/wake cycle is probably enough to trigger it, which matches #1371.

    Stack

    Same shape as the original report. kwin_wayland stays in state R (NMI backtrace via sysrq-l):

    RIP: 0010:osDevReadReg032+0x3a/0x70 [nvidia]          (2nd sample: GspMsgQueueReceiveStatus+0x431)
     kgspRecvPoll_IMPL+0x1ee/0x8a0
     _issueRpcAndWait+0x5a2/0x800
     rpcRmApiControl_GSP+0x435/0x710
     ...
     nvRmApiControl+0x74/0x90
     DisplayPort::EvoMainLink::train(LinkTrainParameters const&)+0x330/0x9c0
     DisplayPort::ConnectorImpl::rawTrain(...)+0xf3/0x1d0
     ? DisplayPort::ConnectorImpl::enableFlush()+0x2ac/0x3b0
     DisplayPort::ConnectorImpl::train(...)+0x312/0x770
     DisplayPort::ConnectorImpl::trainLinkOptimized(LinkConfiguration)+0x11c5/0x1500
     DisplayPort::ConnectorImpl::notifyAttachBegin(...)+0x8df/0xfe0
     DisplayPort::ConnectorImpl::dpPreModeset(...)+0xd7/0x1a0
     nvDPPreSetMode -> nvSetDispModeEvo -> nv_drm_atomic_commit -> drm_mode_atomic_ioctl
    

    Blocked behind it: nvidia-modeset/kthread_q (semaphore held by kwin_wayland), DRM clients in drm_release -> nv_drm_revoke_modeset_permission, NVML clients in os_acquire_rwlock_*. No Xid and no GSP timeout message. After a few minutes: nvidia-modeset: WARNING: GPU:0: Lost display notification.

    Before the hang the OLED sends several HPD events (connected, then disconnected, then connected again within ~25 s). The enableFlush frame in the retrain path looks like the scenario described in #1405 / #1406 (detach dropped in dpPreModeset() while unplugged, next attach treated as a retrain on an active head). Here, though, it ends in a GSP RPC hang instead of a black screen.

    nvidia-bug-report.sh --safe-mode --extra-system-data captured during the hang is attached.

    nvidia-bug-report-safe.log.gz

  6. HiroGitea commented on Oct 2, 2026

    @HiroGitea

    @Romancc thanks for linking this. Your stack goes through the same trainLinkOptimized() → enableFlush() path I hit in #1405, and both of our failing modes use DSC (4K@160 here; 1440p@360 doesn't fit in HBR3 without it on a 4080). On my RTX 5070 Ti the flush control fails right away and the screen stays black. On your 4080 the link training RPC after it never seems to return.

    If you can build the modules, could you try #1406 with the OLED at 360 Hz? Only nvidia-modeset.ko changes. On CachyOS the kernel is built with clang, so I needed make modules -j$(nproc) LLVM=1 CC=clang LD=ld.lld. If power off/on no longer hangs, that would confirm the dropped detach is behind this hang too.

  7. ksc98 commented on Oct 3, 2026

    @ksc98

    Another data point on Ada (RTX 4090) with Hyprland 0.56.2, triggered by a KVM switch. The same machine has now hung through both stacks reported here: the post-modeset rmUpdateDynamicDfpCache path (which timed out with Xid 119) and the pre-modeset trainLinkOptimized → enableFlush path (which hung for over 10 minutes without ever tripping the GSP timeout).

    By the way, driver 610.57.04 doesn't have this issue. I pinned to 610 for a while but wanted to do full due diligence on the 615 issue so here we are.

    @HiroGitea: I patched my nvidia-modeset.ko so I'll observe if this fixes the issue!

    The current hypothesis is that starting with 615.71.09, if the monitor is disconnected at the moment the compositor turns its screen off, the driver silently drops the detach and keeps treating the screen as active.

    Anything that makes the monitor disappear while the system stays up can cause this: a power cycle, an input switch, the monitor's own sleep, a KVM switch, or an unplugged cable.

    When the monitor comes back, the driver treats the reconnect as a retrain of a live screen (enableFlush) instead of a fresh setup.

    That retrain is where things go wrong: on some GPUs the flush fails and the screen stays black, and on others link training against GSP stalls and the compositor hangs inside the atomic commit.

    Environment

    • RTX 4090 (AD102), 615.71.09 open kernel module via DKMS, nvidia-drm modeset=1 fbdev=1
    • CachyOS, kernel 7.2.8-2-cachyos (clang-built), Hyprland 0.56.2 (Aquamarine, atomic)
    • Dell AW3225QF on DP, single enabled output, 3840x2160 @ 239.99 Hz, the panel's DisplayID DTD with a 2331.75 MHz pixel clock. That is about 56 Gbit/s at 8 bpc (70 Gbit/s at 10 bpc) against the 25.92 Gbit/s payload of 4-lane HBR3, so DSC is mandatory on this mode. This lines up with @HiroGitea's observation that the failing modes use DSC.
    • The DP link and a USB hub (Genesys 05e3:0610) both go through a KVM. Switching away drops HPD and the hub, and switching back restores both while the system stays up.

    Hang 1: pre-modeset link training, no Xid

    11:34:43 usb 3-1.2: USB disconnect        (KVM switched away)
    11:34:53 usb 3-1.2: USB disconnect        (hub re-enumerates on switch-back)
    11:37:07 INFO: task nvidia-modeset/:381 blocked for more than 122 seconds.
    11:37:07 INFO: task nvidia-modeset/:381 blocked on a semaphore likely last held by task Hyprland.patche:2818
    11:39:09 chrome, vesktop blocked on the same semaphore (in rpcRmApiControl_GSP)
    11:42:08 nvidia-modeset: WARNING: GPU:0: Lost display notification (0:0x00000000); continuing.
    

    No Xid of any kind between the hang and the reboot more than 10 minutes later. Hyprland stayed in state:R inside a single atomic commit, polling GSP:

    osDevReadReg032 / GspMsgQueueReceiveStatus / kgspHealthCheck_TU102
    _kgspRpcDrainEvents
    kgspRecvPoll_IMPL
    _issueRpcAndWait
    rpcRmApiControl_GSP
    dispapiControl_IMPL
    nvkms_call_rm / nvRmApiControl
    DisplayPort::EvoMainLink::train(LinkTrainParameters const&)
    DisplayPort::ConnectorImpl::rawTrain(...)
    DisplayPort::ConnectorImpl::enableFlush()
    DisplayPort::ConnectorImpl::train(...)
    DisplayPort::ConnectorImpl::trainLinkOptimized(LinkConfiguration)
    DisplayPort::ConnectorImpl::notifyAttachBegin(...)
    DisplayPort::ConnectorImpl::dpPreModeset(...)
    nvDPPreSetMode -> KickoffModesetUpdateState -> nvSetDispModeEvo
    

    This is the same call path as @Romancc's stack, including enableFlush, which fits the #1405 / #1406 theory (detach dropped while the sink was unplugged, next attach treated as a retrain). Here the trigger is a KVM switch rather than a monitor power cycle or input switch.

    Observations during the hang:

    • nvidia-smi hangs.
    • kill -9 on the compositor never lands: SigPnd: 0x100 stayed pending for 30+ s because the atomic commit ioctl never returned. The GPU's reset_method is flr bus, but an FLR or rmmod can't work while that task holds the semaphore, so I didn't try one. A reboot was the only recovery.

    Hang 2: post-modeset path, timed out

    Same machine and driver, also after a KVM switch:

    13:01:17 usb 3-1.2: USB disconnect
    13:01:24 nvidia-modeset: WARNING: GPU:0: Lost display notification (0:0x00000000); continuing.
    13:02:09 NVRM: Xid (PCI:0000:01:00): 119, pid=3107, name=Hyprland.patche, Timeout after 45s of waiting for RPC response from GPU0 GSP! Expected function 76 (GSP_RM_CONTROL) sequence 824572 (0x73114e 0x18).
    

    via nvDPPostSetMode → dpPostModeset → notifyAttachEnd → rmUpdateDynamicDfpCache, the same control (0x73114e) @yungwood reported. Also reboot-only.

    So on one box, the rmUpdateDynamicDfpCache RPC hit the 45 s GSP timeout, while the link-training hang never produced an Xid. Reading kgspRecvPoll_IMPL against the stack offsets, the poll loop was cycling past its timeout check (kdispApplyAggressiveVblankHandlingWar only runs after gpuCheckTimeout passes), so it looks like no single NV0073_CTRL_CMD_DP_CTRL (0x731343) exceeded 45 s. Instead the commit spent minutes in link-training fallback (trainLinkOptimized retrying train()), each GSP call slow but under the timeout. That would explain why neither the RPC timeout nor RmGspRpcTimeoutGpuResetThreshold can rescue this variant.

    Full kernel journals for both hangs are available. I couldn't run nvidia-bug-report.sh during the hang because nvidia-smi was wedged.

  8. mikkorantalainen commented on Oct 15, 2026

    @mikkorantalainen

    I'm seeing similar issue on Ubuntu 24.04 LTS + XFCE with Nvidia version 615.71.09. The older version 610.57.04 seemed to work correctly so there has been major regression between those versions (except this issue that I have to workaround with custom Xorg build: canonical/nvidia-graphics-drivers#92 (comment)).

    My display is connected via DisplayPort to RTX 3060 12 GB and in my case the trigger seems to be S3 sleep. It still looks like disconnected monitor to the GPU, too, because my monitor (LG 27GN800-B) appears as disconnected cable whenever it enters the deepest DPMS state. The issue seems to be yet another race condition in Nvidia drivers because it seems to fail with probability around 1/4 (I'm using package linux-lowlatency-7.0 to run the latest supported lowlatency kernel variant which may trigger race conditions more easily).

    Unfortunately, Ubuntu 24.04 LTS has removed version 610 of Nvidia drivers: installing package nvidia-driver-610-open results in nvidia-driver-615-open getting installed because package nvidia-driver-610-open is now basically an alias (transitional package only).

    I had to downgrade back to version 595 instead to have a stable system.

  9. witgelm commented on Oct 18, 2026

    @witgelm

    Another data point on Ada, this time on 615.78.08, so the fix in 615.78 doesn't seem to cover every path. In my case the trigger was S3 resume with NVreg_UseKernelSuspendNotifiers=1 (the default on 615).

    Setup

    • GPU: RTX 4070 Ti SUPER (AD103), open kernel module 615.78.08
    • Kernel: 7.2.9-arch1-1 (Arch), driver loaded from the initramfs
    • Board/CPU: ASUS ROG STRIX X870-A GAMING WIFI (BIOS 0227), Ryzen 5 7600X
    • Compositor: Hyprland 0.56.2 (Wayland)
    • Displays, both direct (no dock, no MST):
      • DP-1: Samsung Odyssey G85SB, 3440x1440 @ 175 Hz, VRR off
      • HDMI-A-1: 800x1280 @ 60 Hz
    • Sleep: S3 (mem_sleep = deep)

    What happened
    After resume the monitor powered on but stayed black. The kernel resumed devices and thawed tasks, but PM: suspend exit was never logged (it comes after the PM_POST_SUSPEND notifiers). About 4 s later:
    nvidia-modeset: WARNING: GPU:0: Lost display notification (0:0x00000000); continuing.

    The rest of the system kept running (journald was still writing), and I had to do a hard reset. With the kernel notifiers on, nvidia-suspend.service was a no-op: it finished in about 5 ms, because /proc/driver/nvidia/suspend doesn't exist in that mode.

    Workaround that works
    options nvidia NVreg_UseKernelSuspendNotifiers=0 NVreg_PreserveVideoMemoryAllocations=1

    After that, the systemd services do the save/restore (nvidia-suspend takes about 1.1 s), PM: suspend exit is logged, nvidia-resume.service runs, and the display comes back normally.

    So far I've seen the hang once, so I can't say whether it happens on every resume with the notifiers on. I can switch back to UseKernelSuspendNotifiers=1 and capture nvidia-bug-report.sh plus a SysRq-W blocked-task dump if that would help.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions