From 44f9f4db741f2a9abea8382deaa31f996732da65 Mon Sep 17 00:00:00 2001 From: Hilton Chain Date: Wed, 11 Mar 2026 13:51:13 +0800 Subject: services: nvidia: Use nvidia-modprobe. * nongnu/services/nvidia.scm (nvidia-configuration) [modprobe]: New field. (nvidia-privileged-program, nvidia-special-files, nvidia-udev-rule): New procedures. (nvidia-shepherd-service): Delete procedure. (nvidia-service-type) [extensions]: Update accordingly. * nongnu/packages/nvidia.scm (%nvidia-script-create-device-nodes) (%nvidia-udev-rules): Delete in favor of nvidia-udev-rule. (nvidia-driver): Remove udev rule from the package. * nonguix/transformations.scm (nonguix-transformation-nvidia): Use the new modprobe field for nvidia-configuration. --- nongnu/packages/nvidia.scm | 97 +--------------------------------------------- 1 file changed, 2 insertions(+), 95 deletions(-) (limited to 'nongnu/packages') diff --git a/nongnu/packages/nvidia.scm b/nongnu/packages/nvidia.scm index e075e43..d7fabd6 100644 --- a/nongnu/packages/nvidia.scm +++ b/nongnu/packages/nvidia.scm @@ -6,7 +6,7 @@ ;;; Copyright © 2021 Pierre Langlois ;;; Copyright © 2022, 2023 Petr Hodina ;;; Copyright © 2022 Alexey Abramov -;;; Copyright © 2022, 2023, 2024 Hilton Chain +;;; Copyright © 2022-2026 Hilton Chain (define-module (nongnu packages nvidia) #:use-module (guix packages) @@ -139,95 +139,6 @@ its unpacked checkout." ;;; -(define %nvidia-script-create-device-nodes - (program-file - "create-device-nodes.scm" - (with-imported-modules '((guix build utils)) - #~(begin - (use-modules (ice-9 regex) - (rnrs io ports) - (srfi srfi-1) - (guix build utils)) - - (define %nvidia-character-devices - (call-with-input-file "/proc/devices" - (lambda (port) - (filter-map - (lambda (line) - (if (string-contains line "nvidia") - (apply cons (reverse (string-tokenize line))) - #f)) - (string-split (get-string-all port) #\newline))))) - - (define %nvidia-driver-device-minors - (let ((device-minor-regexp (make-regexp "^Device Minor: \t (.*)"))) - (append-map - (lambda (file) - (call-with-input-file file - (lambda (port) - (filter-map - (lambda (line) - (let ((matched (regexp-exec device-minor-regexp line))) - (if matched - (match:substring matched 1) - #f))) - (string-split (get-string-all port) #\newline))))) - (find-files "/proc/driver/nvidia/gpus/" "information$")))) - - (define (create-device-node path name minor) - (let ((major - (or (assoc-ref %nvidia-character-devices name) - (assoc-ref %nvidia-character-devices "nvidia-frontend"))) - (mknod #$(file-append coreutils "/bin/mknod"))) - (system* mknod "-Zm0666" path "c" major minor))) - - (define (main args) - (case (string->symbol (first args)) - ((nvidia_modeset) - (create-device-node "/dev/nvidia-modeset" "nvidia-modeset" "254")) - ((nvidia_uvm) - (begin - (create-device-node "/dev/nvidia-uvm" "nvidia-uvm" "0") - (create-device-node "/dev/nvidia-uvm-tools" "nvidia-uvm" "1"))) - ((nvidia) - (begin - (create-device-node "/dev/nvidiactl" "nvidiactl" "255") - (for-each - (lambda (minor) - (create-device-node - (string-append "/dev/nvidia" minor) "nvidia" minor)) - %nvidia-driver-device-minors))))) - - (main (cdr (command-line))))))) - -;; Adapted from -(define %nvidia-udev-rules - (mixed-text-file - "90-nvidia.rules" "\ -# Make sure device nodes are present even when the DDX is not started for the Wayland/EGLStream case -KERNEL==\"nvidia\", RUN+=\"" %nvidia-script-create-device-nodes " nvidia\" -KERNEL==\"nvidia_modeset\", RUN+=\"" %nvidia-script-create-device-nodes " nvidia_modeset\" -KERNEL==\"nvidia_uvm\", RUN+=\"" %nvidia-script-create-device-nodes " nvidia_uvm\" - -# Enable runtime PM for NVIDIA VGA/3D controller devices -ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x03[0-9]*\", TEST==\"power/control\", ATTR{power/control}=\"auto\" -# Enable runtime PM for NVIDIA Audio devices -ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x040300\", TEST==\"power/control\", ATTR{power/control}=\"auto\" -# Enable runtime PM for NVIDIA USB xHCI Host Controller devices -ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c0330\", TEST==\"power/control\", ATTR{power/control}=\"auto\" -# Enable runtime PM for NVIDIA USB Type-C UCSI devices -ACTION==\"bind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c8000\", TEST==\"power/control\", ATTR{power/control}=\"auto\" - -# Disable runtime PM for NVIDIA VGA/3D controller devices -ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x03[0-9]*\", TEST==\"power/control\", ATTR{power/control}=\"on\" -# Disable runtime PM for NVIDIA Audio devices -ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x040300\", TEST==\"power/control\", ATTR{power/control}=\"on\" -# Disable runtime PM for NVIDIA USB xHCI Host Controller devices -ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c0330\", TEST==\"power/control\", ATTR{power/control}=\"on\" -# Disable runtime PM for NVIDIA USB Type-C UCSI devices -ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\"0x0c8000\", TEST==\"power/control\", ATTR{power/control}=\"on\" -")) - (define-public nvidia-driver (package (name "nvidia-driver") @@ -252,7 +163,6 @@ ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\ ("." "share/nvidia/" #:include-regexp ("nvidia-application-profiles|nvoptix.bin")) ("." "share/egl/egl_external_platform.d/" #:include-regexp ("(gbm|wayland|xcb|xlib)\\.json")) ("10_nvidia.json" "share/glvnd/egl_vendor.d/") - ("90-nvidia.rules" "lib/udev/rules.d/") ("nvidia-drm-outputclass.conf" "share/X11/xorg.conf.d/") ("nvidia-dbus.conf" "share/dbus-1/system.d/") ("nvidia.icd" "etc/OpenCL/vendors/") @@ -297,10 +207,7 @@ ACTION==\"unbind\", SUBSYSTEM==\"pci\", ATTR{vendor}==\"0x10de\", ATTR{class}==\ ;; VulkanSC ICD configuration (substitute* "nvidia_icd_vksc.json" (("libnvidia-vksc-core\\.so\\.." all) - (string-append #$output "/lib/" all))) - - ;; Add udev rules - (symlink #$%nvidia-udev-rules "90-nvidia.rules"))) + (string-append #$output "/lib/" all))))) (add-after 'install 'add-architecture-to-filename (lambda _ (for-each -- cgit v1.3