Xid 79 + semaphore surface callback failure on GP107M (GTX 1050 Max-Q) — Hyprland/Aquamarine Wayland, driver 580.173.02


System:

  • GPU: NVIDIA GeForce GTX 1050 3GB Max-Q (GP107M, PCI 0000:01:00.0)
  • CPU: Intel Core i7-9750H (Coffee Lake)
  • Laptop: Dell G3 3590 (Optimus hybrid graphics — Intel iGPU + NVIDIA dGPU)
  • OS: CachyOS (Arch-based), kernel 7.1.3-2-cachyos
  • Driver: 580.173.02 (proprietary, nvidia-580xx-dkms)
  • Compositor: Hyprland 0.55.4 / Aquamarine (Wayland)
  • Display: single external HDMI monitor via NVIDIA dGPU (lid closed, eDP-1 disabled)
  • Kernel parameters: pcie_aspm=off nvidia.NVreg_EnableGpuFirmware=0 acpi_mask_gpe=0x6E,0x66 intel_idle.max_cstate=1 nvidia.NVreg_PreserveVideoMemoryAllocations=1
  • modprobe: NVreg_DynamicPowerManagement=0x00, NVreg_EnableMSI=1, modeset=1 fbdev=1

Problem:

Recurring Xid 79 crashes causing complete loss of display signal on external HDMI monitor. The crash always begins with a semaphore surface callback failure in nvidia-drm-fence.c, followed by Xid 79, then Xid 154, then repeated flip timeouts until reboot.
**
Kernel log sequence (exact, from journalctl -b):**

Jul 11 18:03:34 kernel: NVRM: Xid (PCI:0000:01:00): 79, pid=983, name=Hyprland, GPU has fallen off the bus.
Jul 11 18:03:34 kernel: [drm:__nv_drm_semsurf_wait_fence_work_cb [nvidia_drm]] ERROR [nvidia-drm] [GPU ID 0x00000100] Failed to register auto-value-update on pre-wait value for sync FD semaphore surface
Jul 11 18:03:34 kernel: NVRM: Xid (PCI:0000:01:00): 154, GPU recovery action changed from 0x0 (None) to 0x1 (GPU Reset Required)
Jul 11 18:03:34 kernel: [drm:nv_drm_atomic_commit [nvidia_drm]] ERROR [nvidia-drm] [GPU ID 0x00000100] Failed to initialize semaphore for plane fence
Jul 11 18:03:34 kernel: [drm:nv_drm_atomic_commit [nvidia_drm]] ERROR [nvidia-drm] [GPU ID 0x00000100] Failed to apply atomic modeset. Error code: -11
Jul 11 18:09:16 kernel: [drm:nv_drm_atomic_commit [nvidia_drm]] ERROR [nvidia-drm] [GPU ID 0x00000100] Flip event timeout on head 0

After Xid 79, the GPU is unrecoverable without reboot. nvidia-persistenced fails with “device failed to open”, and nvidia-modeset reports repeated Failed to query display engine channel state errors.

Crash is software-induced, not hardware:

  • PCIe link is healthy — no irq 16: nobody cared at crash time (that was a separate ACPI GPE storm issue, already resolved with GPE masking)
  • NVIDIA is on MSI IRQ 134 (not shared IRQ 16)
  • Crash reproducible ~20–30 minutes into normal Hyprland desktop usage
  • No thermal stress — system is idle or light use at crash time

Workarounds attempted (none successful):

  • AQ_NO_ATOMIC=1 — disables DRM atomic path in Aquamarine, but causes severe display artifacts (purple flashes) on this Optimus/HDMI setup. Not viable.
  • render:explicit_sync = 0 in Hyprland config — option removed in Hyprland 0.50, has no effect
  • AQ_MGPU_NO_EXPLICIT=1 — also causes purple artifacts, reverted
  • CachyOS fix-hw-cursor-kde.patch on nvidia-drm-fb.c — already applied, different code path
  • NVreg_PreserveVideoMemoryAllocations=1 — no effect on this crash

Root cause hypothesis:

The __nv_drm_semsurf_wait_fence_work_cb function calls registerSemaphoreSurfaceCallback which fails during an Aquamarine DRM atomic commit with IN_FENCE_FD. The failure cascades:

semaphore init fails → atomic commit returns -EAGAIN (-11) → flip timeout → GPU falls off bus.

This appears to be related to issue #622 in open-gpu-kernel-modules (explicit sync / IN_FENCE_FD handling), which was marked “Implemented/Fixed, in test prior to release integration” but the fix does not appear to be present in the 580.173.02 branch for Pascal (GP107). Here is the link.

Is there a known workaround for Pascal GPUs with Wayland explicit sync / semaphore surface failures in the 580.x driver branch? Is the fix from issue #622 targeted for a 580.x release or only for post-Pascal drivers?

Hi @hector-av1

Thank you for writing to us, could you please help to share nvidia bug report from repro state for triage purpose.

nvidia-bug-report.log.gz (1.8 MB)