From 07880405bb6be41717fa9e646bb045f9cd404771 Mon Sep 17 00:00:00 2001 From: ooonea <35407790+ooonea@users.noreply.github.com> Date: Thu, 15 Oct 2026 22:08:05 +0200 Subject: [PATCH] nixos/nvidia: use nvidia-modprobe to create device nodes Use the native helper to handle existing nodes and driver device-file parameters, including stale UVM major numbers. Create the reverse-link directory before the module add handlers, keep GPU minor enumeration, and do not recreate nodes on remove events. Backport the independently prepared helper fix for concurrent device creation. Assisted-by: OpenAI Codex (gpt-6.1-sol) --- nixos/modules/hardware/video/nvidia.nix | 12 ++++++------ pkgs/by-name/nv/nvidia-modprobe/package.nix | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/nixos/modules/hardware/video/nvidia.nix b/nixos/modules/hardware/video/nvidia.nix index 91424fbb643d..77461de17ca5 100644 --- a/nixos/modules/hardware/video/nvidia.nix +++ b/nixos/modules/hardware/video/nvidia.nix @@ -456,12 +456,12 @@ in "L+ /run/nvidia-docker/bin - - - - ${nvidia_x11.bin}/origBin" ]; services.udev.extraRules = '' - # Create /dev/nvidia-uvm when the nvidia-uvm module is loaded. - KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidiactl c 195 255'" - KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'for i in $$(cat /proc/driver/nvidia/gpus/*/information | grep Minor | cut -d \ -f 4); do mknod -m 666 /dev/nvidia$${i} c 195 $${i}; done'" - KERNEL=="nvidia_modeset", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-modeset c 195 254'" - KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 0'" - KERNEL=="nvidia_uvm", RUN+="${pkgs.runtimeShell} -c 'mknod -m 666 /dev/nvidia-uvm-tools c $$(grep nvidia-uvm /proc/devices | cut -d \ -f 1) 1'" + # nvidia-modprobe honors the driver's device-file parameters. + ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia|nvidia_modeset|nvidia_uvm", RUN+="${pkgs.coreutils}/bin/mkdir -m 755 -p /dev/char" + ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia", RUN+="${pkgs.nvidia-modprobe}/bin/nvidia-modprobe -c 255" + ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia", RUN+="${pkgs.runtimeShell} -c 'for i in $$(cat /proc/driver/nvidia/gpus/*/information | grep Minor | cut -d \ -f 4); do ${pkgs.nvidia-modprobe}/bin/nvidia-modprobe -c $${i} || exit; done'" + ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia_modeset", RUN+="${pkgs.nvidia-modprobe}/bin/nvidia-modprobe -m" + ACTION=="add", SUBSYSTEM=="module", KERNEL=="nvidia_uvm", RUN+="${pkgs.nvidia-modprobe}/bin/nvidia-modprobe -u -c 0" ''; hardware.graphics = let diff --git a/pkgs/by-name/nv/nvidia-modprobe/package.nix b/pkgs/by-name/nv/nvidia-modprobe/package.nix index b1c9c7f9c0d9..84ed230b36c1 100644 --- a/pkgs/by-name/nv/nvidia-modprobe/package.nix +++ b/pkgs/by-name/nv/nvidia-modprobe/package.nix @@ -2,6 +2,7 @@ stdenv, lib, fetchFromGitHub, + fetchpatch, gnum4, }: stdenv.mkDerivation (finalAttrs: { @@ -15,6 +16,13 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-XVWvnUZkEqEh3UjPIU6DaZuYU9DvjfIMsWbLJ78jJWs="; }; + patches = [ + (fetchpatch { + url = "https://github.com/ooonea/nvidia-modprobe/commit/450f0c15ad9229fe5f4d3f80ae4d95e42d9c038e.patch"; + hash = "sha256-SKJqt2MJDQxzRnfGcgB9oJHyt6Rwrm4hLh9zgIPEv/0="; + }) + ]; + nativeBuildInputs = [ gnum4 ]; postPatch = ''