N1X (10de:2e03) on Surface Laptop Ultra: GPU carveout missing from EFI memory map, vmap() WARN, LUT allocation fails, oops in nvSetupOutputLUT5, machine resets
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 25/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- c, linux
調査の方向性
Start by reading the failing call path from nv_vm_map_pages() and nv_alloc_kernel_mapping() to osMapSystemMemory(), then inspect AllocateDevice() and nvSetupOutputLUT5() for the NULL dereference. The issue identifies the memory-map hole, the vmap() warning, and a working memremap_pages() workaround; reproduce on the specified N1X hardware or a matching test setup. Done means safely handling failed LUT allocation and validating mapping behavior for carveout pages without the vmap warning, oops, or reset.
索引モデルが issue の本文から書いたものです。
説明
NVIDIA Open GPU Kernel Modules Version
615.78.08 (nvidia-open-dkms 615.78.08-3, Arch packaging, built with DKMS)
Please confirm this issue does not happen with the proprietary driver (of the same version).
Not applicable / not tested: this is a Blackwell (GB20B) integrated GPU, which the proprietary kernel modules don't support, so only the open modules can be used.
Operating System and Version
Omarchy 4 (Arch Linux based, aarch64), BUILD_ID=4.0.0.r7052.ga6dcc31
Kernel Release
Linux 7.2.8-13-omarchy #1 SMP PREEMPT_DYNAMIC Sat, 17 Oct 2026 16:47:02 +0000 aarch64 GNU/Linux (distribution kernel: 7.2.8 stable plus Omarchy's N1X patch set, which carries NVIDIA's N1X SAUCE patches). The failure log below is from 7.2.8-11-omarchy; nothing relevant changed between -11 and -13.
Please confirm you are running a stable release kernel (e.g. not a -rc).
Yes, 7.2.8 (stable), with distribution patches.
Hardware: GPU
GPU 0: NVIDIA RTX Spark N1X (6144-core Blackwell RTX GPU), PCI 10de:2e03 (GB20B) at 000f:01:00.0, VBIOS 9A.0B.36.00.04. Machine: Microsoft Surface Laptop Ultra (SKU Surface_Laptop_Ultra_2115), UEFI 7.1.0 (Microsoft Project Mu), 64 GB unified memory.
Describe the bug
On the Surface Laptop Ultra, loading nvidia-drm with modeset=1 makes nvidia-modeset fail to map its display LUT, then oops on a NULL pointer in nvSetupOutputLUT5, and the machine hard-resets a few seconds later. GSP boots fine before this.
Root cause, as far as I can tell: the firmware leaves the GPU carveout out of the EFI memory map entirely, so Linux has no struct page for it, and the driver maps carveout pages with vmap().
- The IORT has one RMR node for the GPU's stream IDs with the ranges
0x1fd000000+48M(boot framebuffer),0x200000000+4G(exactly theEXPOSED_DISP_FRMblock, set to 4 GiB) and0xa1600000+386M. - With
efi=debug, the EFI memory map jumps from0x0001fcffffffto0x000300000000(and has similar gaps around0xa1600000): the carveouts are absent, not typed Reserved. So memblock never sees them and there is no memmap. - On the Dell and ASUS N1X laptops the firmware lists the same region as reserved (Omarchy's N1X setup checks for
1fd000000-119fffffff : reservedin/proc/iomemthere), so there it hasstruct pages with no linear mapping, and the driver'svmap()path works. - The page in the WARN (decoded from the registers) is
0x27fffb000, inside the hole. TheWARNsite (vmap_small_pages_range_noflush+0x388) is thepfn_valid()check. A small probe module confirmedpfn_valid()is 0 for the whole0x200000000-0x2ffffffffblock. - The allocation behind the LUT is scattered and mixes pages that have a
struct pagewith carveout pages that don't, so neithervmap()norvmap_pfn()can map it as a whole.
There are two separate driver problems here:
nv_alloc_kernel_mapping()/nv_vm_map_pages()assume every page it is given has astruct page, which isn't true when firmware hands the GPU memory that isn't in the EFI memory map (IORT RMR only).nvidia-modesetdoesn't handle the failed LUT allocation: after "Failed to allocate memory for the display color lookup table",AllocateDevice()continues intonvSetupOutputLUT5()and dereferences NULL. Even if (1) is a firmware problem, this should fail the device allocation cleanly rather than oops.
Kernel log of the failure (stock 615.78.08, 7.2.8-11-omarchy; trimmed: module list and the first register dump removed):
WARN + oops
[ 28.671263] kernel: WARNING: mm/vmalloc.c:576 at vmap_small_pages_range_noflush+0x388/0x4a0, CPU#5: (udev-worker)/826
[ 28.671871] kernel: CPU: 5 UID: 0 PID: 826 Comm: (udev-worker) Tainted: G OE 7.2.8-11-omarchy #1 PREEMPT(full)
[ 28.671945] kernel: Tainted: [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
[ 28.672048] kernel: Hardware name: Microsoft Corporation Microsoft Surface Laptop Ultra/Microsoft Surface Laptop Ultra, BIOS 7.1.0 10/05/2026
[ 28.672117] kernel: pstate: 81400009 (Nzcv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
[ 28.672177] kernel: pc : vmap_small_pages_range_noflush+0x388/0x4a0
[ 28.672225] kernel: lr : vmap+0xc0/0x190
[ 28.672895] kernel: Call trace:
[ 28.672947] kernel: vmap_small_pages_range_noflush+0x388/0x4a0 (P)
[ 28.672998] kernel: vmap+0xc0/0x190
[ 28.673039] kernel: nv_vm_map_pages+0xf8/0x2a0 [nvidia]
[ 28.673090] kernel: nv_alloc_kernel_mapping+0x100/0x2d8 [nvidia]
[ 28.673145] kernel: osMapSystemMemory+0xc0/0x540 [nvidia]
[ 28.673190] kernel: memMap_IMPL+0x8dc/0x1060 [nvidia]
[ 28.673236] kernel: serverMap+0x280/0x3a0 [nvidia]
[ 28.673287] kernel: rmapiMapToCpuWithSecInfoV2+0x198/0x2a0 [nvidia]
[ 28.673313] kernel: rmapiMapToCpuWithSecInfoTls+0x5c/0x80 [nvidia]
[ 28.673339] kernel: _nv04MapMemory.constprop.0+0x74/0xa0 [nvidia]
[ 28.673388] kernel: rm_kernel_rmapi_op+0x58/0x120 [nvidia]
[ 28.673422] kernel: nvkms_call_rm+0x60/0xc0 [nvidia_modeset]
[ 28.673465] kernel: nvRmApiMapMemory+0x5c/0x80 [nvidia_modeset]
[ 28.673508] kernel: AllocateDevice+0xcc/0x360 [nvidia_modeset]
[ 28.673542] kernel: nv_drm_register_drm_device+0x148/0x280 [nvidia_drm]
[ 28.673593] kernel: EnumerateGpus+0x154/0x180 [nvidia_modeset]
[ 28.673645] kernel: nv_drm_init+0x48/0xa0 [nvidia_drm]
[ 28.673690] kernel: nv_linux_drm_init+0x1c/0xfd0 [nvidia_drm]
[ 28.673733] kernel: do_one_initcall+0x60/0x4b8
[ 28.673774] kernel: do_init_module+0xa0/0x308
[ 28.673803] kernel: load_module+0x1c50/0x2528
[ 28.673830] kernel: init_module_from_file+0x10c/0x180
[ 28.673870] kernel: __arm64_sys_finit_module+0x228/0x380
[ 28.673914] kernel: invoke_syscall.constprop.0+0xb0/0x130
[ 28.673943] kernel: el0_svc_common.constprop.0+0x114/0x140
[ 28.673985] kernel: do_el0_svc+0x28/0x58
[ 28.674024] kernel: el0_svc+0x48/0x310
[ 28.674063] kernel: el0t_64_sync_handler+0xc0/0x110
[ 28.674110] kernel: el0t_64_sync+0x1b8/0x1c0
[ 28.674131] kernel: ---[ end trace 0000000000000000 ]---
[ 28.674171] kernel: NVRM: failed to map pages!
[ 28.674206] kernel: NVRM: osMapSystemMemory: failed to create system memory kernel mapping!
[ 28.674240] kernel: nvidia-modeset: ERROR: GPU:0: Unable to allocate LUT memory from sysmem
[ 28.674288] kernel: nvidia-modeset: ERROR: GPU:0: Failed to allocate memory for the display color lookup table.
[ 28.827289] kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000000000000f0
[ 28.827914] kernel: Mem abort info:
[ 28.847448] kernel: ESR = 0x0000000096000004
[ 28.847571] kernel: EC = 0x25: DABT (current EL), IL = 32 bits
[ 28.847754] kernel: SET = 0, FnV = 0
[ 28.847969] kernel: EA = 0, S1PTW = 0
[ 28.848162] kernel: FSC = 0x04: level 0 translation fault
[ 28.848287] kernel: Data abort info:
[ 28.848407] kernel: ISV = 0, ISS = 0x00000004, ISS2 = 0x00000000
[ 28.848518] kernel: CM = 0, WnR = 0, TnD = 0, TagAccess = 0
[ 28.848617] kernel: GCS = 0, Overlay = 0, DirtyBit = 0
[ 28.848738] kernel: user pgtable: 4k pages, 48-bit VAs, pgdp=0000000108b48000
[ 28.848867] kernel: [00000000000000f0] pgd=0000000000000000, p4d=0000000000000000
[ 28.848993] kernel: Internal error: Oops: 0000000096000004 [#1] SMP
[ 28.849318] kernel: CPU: 5 UID: 0 PID: 826 Comm: (udev-worker) Tainted: G W OE 7.2.8-11-omarchy #1 PREEMPT(full)
[ 28.849348] kernel: Tainted: [W]=WARN, [O]=OOT_MODULE, [E]=UNSIGNED_MODULE
[ 28.849379] kernel: Hardware name: Microsoft Corporation Microsoft Surface Laptop Ultra/Microsoft Surface Laptop Ultra, BIOS 7.1.0 10/05/2026
[ 28.849402] kernel: pstate: 41400009 (nZcv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)
[ 28.849429] kernel: pc : nvSetupOutputLUT5+0x4c/0x200 [nvidia_modeset]
[ 28.849451] kernel: lr : EvoSetOutputLutC9+0xec/0x440 [nvidia_modeset]
[ 28.849474] kernel: sp : ffff800083c227e0
[ 28.849504] kernel: x29: ffff800083c231f0 x28: 0000000000000000 x27: 0000000000000000
[ 28.849527] kernel: x26: ffff800087724008 x25: ffff800085b4f008 x24: 0000000000000000
[ 28.849554] kernel: x23: ffff8000876cd510 x22: ffff800083c22918 x21: ffff800085fd8008
[ 28.849579] kernel: x20: ffff800085b4f068 x19: ffff000095a60608 x18: ffff800083777080
[ 28.849605] kernel: x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
[ 28.849632] kernel: x14: ffff800087c79008 x13: 0000000000000004 x12: 0000000000730157
[ 28.849659] kernel: x11: 0000000000002878 x10: 0000000000002100 x9 : ffffc3c59277033c
[ 28.849686] kernel: x8 : ffff800085fd8008 x7 : ffff800083c228aa x6 : ffff800083c228b8
[ 28.849711] kernel: x5 : ffff800083c228ac x4 : ffff800083c228b0 x3 : 0000000000000000
[ 28.849738] kernel: x2 : 0000000000000000 x1 : ffff800085b4f068 x0 : 0000000000000000
[ 28.849765] kernel: Call trace:
[ 28.849781] kernel: nvSetupOutputLUT5+0x4c/0x200 [nvidia_modeset] (P)
[ 28.849807] kernel: AllocateDevice+0xcc/0x360 [nvidia_modeset]
[ 28.849836] kernel: nv_drm_register_drm_device+0x148/0x280 [nvidia_drm]
[ 28.849856] kernel: EnumerateGpus+0x154/0x180 [nvidia_modeset]
[ 28.849875] kernel: nv_drm_init+0x48/0xa0 [nvidia_drm]
[ 28.849894] kernel: nv_linux_drm_init+0x1c/0xfd0 [nvidia_drm]
[ 28.849918] kernel: do_one_initcall+0x60/0x4b8
[ 28.849941] kernel: do_init_module+0xa0/0x308
[ 28.849964] kernel: load_module+0x1c50/0x2528
[ 28.849986] kernel: init_module_from_file+0x10c/0x180
[ 28.850023] kernel: __arm64_sys_finit_module+0x228/0x380
[ 28.850049] kernel: invoke_syscall.constprop.0+0xb0/0x130
[ 28.850073] kernel: el0_svc_common.constprop.0+0x114/0x140
[ 28.850105] kernel: do_el0_svc+0x28/0x58
[ 28.850127] kernel: el0_svc+0x48/0x310
[ 28.850145] kernel: el0t_64_sync_handler+0xc0/0x110
[ 28.850169] kernel: el0t_64_sync+0x1b8/0x1c0
[ 28.850186] kernel: Code: f9000080 f90000ca f953fd00 b9680502 (f9407806)
[ 28.850264] kernel: ---[ end trace 0000000000000000 ]---
To Reproduce
- Microsoft Surface Laptop Ultra (NVIDIA N1X,
10de:2e03), UEFI 7.1.0,EXPOSED_DISP_FRMset to 4 GiB. - Kernel with the N1X platform patches (here Omarchy's
linux-omarchy7.2.8 for aarch64),nvidia-open615.78.08,nvidia_drm.modeset=1 fbdev=1. - Boot;
nvidia,nvidia-modesetandnvidia-drmload (from the initramfs or by hand). - The WARN above appears as
nvidia-drmregisters its device, then the oops, then the machine resets.
Bug Incidence
Always
nvidia-bug-report.log.gz
Not attached. In the failing configuration the machine hard-resets within seconds of nvidia-drm loading, so nvidia-bug-report.sh can't run in that state; the kernel log above is from the journal of that boot. The machine now runs with the workaround below, and I can run nvidia-bug-report.sh in that state and share it on request, or capture anything else you need.
More Info
Workaround (works): a small out-of-tree module, n1x_carveout_memmap, loaded before nvidia, calls memremap_pages() with MEMORY_DEVICE_PRIVATE over 0x200000000-0x2ffffffff and 0xa1600000-0xb7ffffff. That creates struct pages with no linear mapping, i.e. the same state the Dell/ASUS firmware gives the carveout. With it loaded, the stock vmap() path maps everything: 0 WARNINGs, eDP-1 connected on nvidia-drm, Hyprland on NVIDIA, OpenGL 4.6 and Vulkan 1.4, glmark2/vkmark complete, and 24 GiB of GPU buffers resident with exact read-back. The ranges are hard-coded for a 4 GiB EXPOSED_DISP_FRM.
Driver patch (defensive): nvidia-615.78.08-n1x-carveout.patch makes kernel mappings fall back to vmap_pfn()/ioremap only for pages with no struct page (and log the page list if nothing fits), and makes nvidia_mmap use remap_pfn_range instead of vm_insert_page for carveout pages. With the memmap module loaded the fallback never runs; it is there for when the module is missing. It doesn't solve the mixed-page case on its own, which is why the memmap module is the real fix.
Both are in this gist: https://gist.github.com/teo-casares/8b64949638e1952602a7f435bb34d5b8 (n1x_carveout_memmap.c, nvidia-615.78.08-n1x-carveout.patch).
What I think the proper fix is: either the firmware describes the carveout as reserved in the EFI memory map, or the driver (or kernel platform code) creates a ZONE_DEVICE memmap for IORT RMR ranges assigned to the GPU that are missing from the memory map, instead of assuming vmap() will work. And independently, nvidia-modeset should handle the LUT allocation failure without the NULL dereference.
Hardware support discussion with more detail: https://github.com/omacom/omarchy/discussions/15885
Investigated and written up with AI assistance (Claude); all data above comes from the affected machine and was tested on it.
- 主要言語
- C
- スター
- 17.5k
- フォーク
- 1.9k
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
NVIDIA/open-gpu-kernel-modules のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
NVIDIA/open-gpu-kernel-modules#1479 · コメント 2 件 ·
メンテナーはふだん 1 日以内に返信
-
PlatformRequestHandler: missing !bInit guard on bSystemParamLimitUpdate causes NV_ERR_INVALID_DATA at boot対応中かも @SammyTourani が 37 日前に担当しました。 オープン
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
NVIDIA/open-gpu-kernel-modules#1360 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
NVIDIA/open-gpu-kernel-modules#1343 · コメント 3 件 ·
メンテナーはふだん 1 日以内に返信
-
HKC G27H7Pro redundant long-HPD loop after DisplayPort link training (RTX 5060 Laptop, 610.57.04)オープンbug
難易度 2/5 1〜3時間 初心者へのやさしさ 88/100
NVIDIA/open-gpu-kernel-modules#1323 ·
メンテナーはふだん 1 日以内に返信
-
build-problem
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
NVIDIA/open-gpu-kernel-modules#1155 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
NVIDIA/open-gpu-kernel-modules の issue をすべて見る
似ている issue
-
examples/dnsdoctor: cleanup.sh stops at the first missing piece of a setup.sh that did not finishオープンseverity: low
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
luainkernel/lunatik#2263 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 半日 初心者へのやさしさ 72/100
vercel-labs/scriptc#2910 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
darktable-org/darktable#22939 ·
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
espressif/idf-extra-components#903 ·
メンテナーはふだん 1 日以内に返信
-
os: input_password leaves terminal echo disabled when reading fails対応中かも @davlgd が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
メンテナーはふだん 1 日以内に返信