615.71.09: intermittent VK_ERROR_DEVICE_LOST with Xid 31 MMU fault on copy engine (CE0, FAULT_PTE, VIRT_READ)

System: RTX 3070, nvidia-open 615.71.09, kernel 7.2.9-1-cachyos (Arch-based), Wayland compositor Jay 1.15.0 (github.com/mahkoh/jay)

Problem

Opening Jay’s built-in control center randomly (roughly 70% of the time) causes VK_ERROR_DEVICE_LOST on the VkDevice used to render it. The window stays black. The kernel reports, at the moment the window opens:

NVRM: Xid (PCI:0000:06:00): 31, pid=2390, name=jay, intr 00000000. MMU Fault: ENGINE CE0 HUBCLIENT_CE1 faulted @ 0x0_0d090000. Fault is of type FAULT_PTE ACCESS_TYPE_VIRT_READ
NVRM: memMap_IMPL: CPU mapping not supported for addressSpace: 0x1

The Vulkan validation layer reports no errors, both in failing and in working runs. The Jay maintainer considers a driver bug likely ( Control center randomly shows a black window on NVIDIA (device lost, Xid 31) · Issue #1287 · mahkoh/jay · GitHub ):

What the application does

  • The compositor and its control center use separate VkDevices on the same GPU, in the same process. The compositor’s device also uses a dedicated transfer queue (family 5).
  • The control center is an in-process Wayland client. It renders into a dmabuf allocated by the compositor, imported via VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_EXT, with VK_QUEUE_FAMILY_FOREIGN_EXT acquire/release in every frame. All its work is submitted to a single graphics queue.
  • It uploads textures with vkCmdCopyBufferToImage2 from host-visible staging buffers. Vertex/index buffers are host-mapped, preferring device-local memory.
  • Each submission waits on a sync_fd imported into a binary semaphore and signals a VkFence, which is exported as a sync_fd. (Exporting a timeline semaphore as OPAQUE_FD and importing it as a DRM syncobj returns EINVAL, so that path is not used.)

Reproduce

  1. Run jay run (or JAY_VULKAN_VALIDATION=1 jay run) from a TTY with the default config.
  2. Press alt-c to open the control center.
  3. If it renders, quit jay (alt-q) and repeat. It fails within a few attempts.

Attached

  • nvidia-bug-report.log.gz (generated right after a failure)
  • Jay log of the failing run with JAY_VULKAN_VALIDATION=1
  • Journal logs

jay-2026-10-04T00:03:26.023Z-0.txt (71.7 KB)

nvidia-bug-report.log.gz (567.6 KB)

nvidia-report-journal.log (106.1 KB)