From eb3a363a3e89750d415ca3e1f9356e6c06e79cd4 Mon Sep 17 00:00:00 2001 From: Ionen Wolkens Date: Sat, 6 Dec 2025 19:02:10 -0500 Subject: [PATCH] x11-drivers/nvidia-drivers: fix build with ZONE_DEVICE + kernel 6.18 When marking as 6.18 compatible, I missed this USE=kernel-open build failure given it only happens when CONFIG_ZONE_DEVICE is enabled and the kernel I tested did not (option requires memory hotplugging and hotremove support to be enabled, not enabled by defconfig). Normally we do not backport kernel fixes, but in this case the only fixed version is currently the 590.x (unkeyworded) beta and given 6.18 is due to become LTS I'd rather get this fixed now (possible that new 0/vulkan releases will not include the fix too). Only 580.x is affected given older branches did not use this function. Signed-off-by: Ionen Wolkens --- ...l-module-source-580.95.05-kernel6.18.patch | 21 +++++++++++++++++++ .../nvidia-drivers-580.105.08.ebuild | 1 + .../nvidia-drivers-580.94.11.ebuild | 1 + .../nvidia-drivers-580.95.05.ebuild | 1 + 4 files changed, 24 insertions(+) create mode 100644 x11-drivers/nvidia-drivers/files/nvidia-kernel-module-source-580.95.05-kernel6.18.patch diff --git a/x11-drivers/nvidia-drivers/files/nvidia-kernel-module-source-580.95.05-kernel6.18.patch b/x11-drivers/nvidia-drivers/files/nvidia-kernel-module-source-580.95.05-kernel6.18.patch new file mode 100644 index 0000000000000..c0e061b6f4dc1 --- /dev/null +++ b/x11-drivers/nvidia-drivers/files/nvidia-kernel-module-source-580.95.05-kernel6.18.patch @@ -0,0 +1,21 @@ +get_dev_pagemap() is only used with CONFIG_ZONE_DEVICE and +USE=kernel-open, and in kernel 6.18 takes one argument in less that +NVIDIA seemingly did not need. + +This is a simplified version of 590.44.01's fix which skips the +conftest.sh changes for easier backporting (at worst the simple version +check may break if the kernel backports this to older kernels). + +[1] https://github.com/NVIDIA/open-gpu-kernel-modules/pull/951 +--- a/kernel-module-source/kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c ++++ b/kernel-module-source/kernel-open/nvidia-uvm/uvm_va_range_device_p2p.c +@@ -361,5 +361,9 @@ + if (gpu->parent->cdmm_enabled) { + get_page(page); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,18,0) ++ get_dev_pagemap(page_to_pfn(page)); ++#else + get_dev_pagemap(page_to_pfn(page), NULL); ++#endif + } + #else diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-580.105.08.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-580.105.08.ebuild index 76bc7af3e50de..624a5b36ea1a1 100644 --- a/x11-drivers/nvidia-drivers/nvidia-drivers-580.105.08.ebuild +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-580.105.08.ebuild @@ -101,6 +101,7 @@ QA_PREBUILT="lib/firmware/* usr/bin/* usr/lib*" PATCHES=( "${FILESDIR}"/nvidia-modprobe-390.141-uvm-perms.patch "${FILESDIR}"/nvidia-settings-530.30.02-desktop.patch + "${FILESDIR}"/nvidia-kernel-module-source-580.95.05-kernel6.18.patch ) pkg_setup() { diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-580.94.11.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-580.94.11.ebuild index 9f02b002dfa2e..b573563dc2b67 100644 --- a/x11-drivers/nvidia-drivers/nvidia-drivers-580.94.11.ebuild +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-580.94.11.ebuild @@ -101,6 +101,7 @@ QA_PREBUILT="lib/firmware/* usr/bin/* usr/lib*" PATCHES=( "${FILESDIR}"/nvidia-modprobe-390.141-uvm-perms.patch "${FILESDIR}"/nvidia-settings-530.30.02-desktop.patch + "${FILESDIR}"/nvidia-kernel-module-source-580.95.05-kernel6.18.patch ) pkg_setup() { diff --git a/x11-drivers/nvidia-drivers/nvidia-drivers-580.95.05.ebuild b/x11-drivers/nvidia-drivers/nvidia-drivers-580.95.05.ebuild index 9a47157f19c30..b3c27d82b45cf 100644 --- a/x11-drivers/nvidia-drivers/nvidia-drivers-580.95.05.ebuild +++ b/x11-drivers/nvidia-drivers/nvidia-drivers-580.95.05.ebuild @@ -100,6 +100,7 @@ QA_PREBUILT="lib/firmware/* usr/bin/* usr/lib*" PATCHES=( "${FILESDIR}"/nvidia-modprobe-390.141-uvm-perms.patch "${FILESDIR}"/nvidia-settings-530.30.02-desktop.patch + "${FILESDIR}"/nvidia-kernel-module-source-580.95.05-kernel6.18.patch ) pkg_setup() {