Updated description to reflect cause identified in comment #7 (the 
framebuffer-nvidia
initramfs hook matches only "*.ko"), DKMS compression mechanism from comment 
#11, and a
correction: initramfs-tools does handle compressed modules correctly; the 
initramfs-tools task
is likely invalid. Original description is retained below the new.

New information: the identical hook is also shipped by nvidia-kernel-common-580
(580.178.04-0ubuntu0.24.04.1), so the 580 branch is affected as well. The 
original report
was on nvidia-dkms-580.

** Description changed:

+ DKMS-built NVIDIA modules installed as .ko.zst are not included in the
+ initramfs, so the driver is unavailable at early boot (e.g., wrong-
+ resolution splash; early Vulkan apps may fall back to llvmpipe -- Zed
+ does). Driver still loads later from the root filesystem.
+ 
+ CAUSE: the framebuffer-nvidia initramfs hook (nvidia-kernel-
+ common-<branch>) only matches "*.ko" (comment #7). initramfs-tools
+ itself handles .ko.zst correctly. DKMS compresses its output when the
+ kernel's modules.dep already lists .zst modules (comment #11).
+ 
+ AFFECTED: nvidia-kernel-common-580 and -595 (identical hook).
+ 
+ SUGGESTED FIX (/usr/share/initramfs-tools/hooks/framebuffer-nvidia):
+ -    for kmod in $(find "${MODULESDIR}/${dir}" ${exclude:-} -name 
"$pattern*.ko" -print); do
+ -        manual_add_modules $(basename ${kmod} .ko)
+ +    for kmod in $(find "${MODULESDIR}/${dir}" ${exclude:-} -name 
"$pattern*.ko*" -print); do
+ +        kmod="${kmod##*/}"
+ +        manual_add_modules "${kmod%%.ko*}"
+ 
+ WORKAROUND: unzstd the .ko.zst files in 
/usr/lib/modules/<kernel>/updates/dkms/ and
+ /var/lib/dkms/nvidia/<ver>/<kernel>/x86_64/module/, then depmod and 
update-initramfs.
+ 
+ --- Original description (2026-05-27) ---
+ 
  DKMS-built kernel modules are installed as .ko.zst (zstd-compressed)
  rather than uncompressed .ko files. The initramfs-tools module inclusion
  code does not handle .ko.zst files — it finds and includes only
  uncompressed .ko files. As a result, DKMS-managed modules are absent
  from the initramfs, and drivers depending on them fail to load at early
  boot.
  
  The current workaround are manual steps to run unzstd --rm on the
  modules, depmod -a, and update-initramfs to include them.
  
  Affected kernels (confirmed on this system):
-   6.8.0-50-generic: broken (first occurrence)
-   6.11.0-24-generic: broken
-   6.11.0-25-generic: broken
-   6.11.0-26-generic: working (uncompressed .ko files present after upgrade)
-   6.11.0-28-generic: broken (regression)
-   All subsequent kernels through 6.17.0-29-generic: broken
+   6.8.0-50-generic: broken (first occurrence)
+   6.11.0-24-generic: broken
+   6.11.0-25-generic: broken
+   6.11.0-26-generic: working (uncompressed .ko files present after upgrade)
+   6.11.0-28-generic: broken (regression)
+   All subsequent kernels through 6.17.0-29-generic: broken
  
  Cause:
  July 2023, a patch series by Dimitri John Ledkov was applied to Ubuntu's 
kernel packaging to enable zstd-compressed modules:  
https://lists.ubuntu.com/archives/kernel-team/2023-July/141412.html
  
  The patch series description makes clear the intent was for DKMS-built
  modules to remain uncompressed.  It explicitly states: "the makefile is
  patched to not attempt installing random modules compressed — this is to
  ensure that any dkms / lrm / modules builds."
  
  However, in practice, DKMS reads CONFIG_MODULE_COMPRESS_ZSTD from the
  kernel configuration and compresses its output accordingly, regardless
  of that intent. The result is that DKMS modules are installed as .ko.zst
  rather than as .ko.
  
  Investigation shows initramfs-tools does have .zst handling, but only in
  the add_firmware() function (searching /lib/firmware/ paths). There is
  no corresponding .zst handling in the module inclusion code path.
  Confirmed by: $ grep -A 10 -B 10 "zst" /usr/share/initramfs-tools/hook-
  functions
  
  This leaves a conflict between the actions of the components:
  - Ubuntu kernel packaging compresses modules and intends to exclude DKMS — 
but does not fully achieve that exclusion
  - DKMS follows CONFIG_MODULE_COMPRESS_ZSTD from the kernel config and 
compresses its output
  - initramfs-tools has no .zst handling in its module inclusion path, only in 
its firmware path
  
  Environment:
-   Distribution: Linux Mint 22.3 (Ubuntu Noble/24.04 base)
-   Kernel: Affects 6.8.0-50-generic and all subsequent kernels tested through 
6.17.0-29-generic, with one exception noted above
-   GPU: NVIDIA GeForce GTX 1660 Super
-   NVIDIA driver: 580.159.03 (nvidia-dkms-580)
+   Distribution: Linux Mint 22.3 (Ubuntu Noble/24.04 base)
+   Kernel: Affects 6.8.0-50-generic and all subsequent kernels tested through 
6.17.0-29-generic, with one exception noted above
+   GPU: NVIDIA GeForce GTX 1660 Super
+   NVIDIA driver: 580.159.03 (nvidia-dkms-580)

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2154307

Title:
  framebuffer-nvidia initramfs hook skips compressed (.ko.zst) DKMS
  modules

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/initramfs-tools/+bug/2154307/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to