From 5f54ecfd9e0d63dbcd7d8a9fe2863c7497934724 Mon Sep 17 00:00:00 2001 From: Daniel Zatovic Date: Wed, 26 Mar 2025 22:36:54 +0100 Subject: [PATCH] setup-nvidia: Stop when NVIDIA sysext is loaded Don't build NVIDIA drivers when the flatcar-nvidia-drivers sysext is loaded, only load the prebuilt modules. Also make the nvidia.service run after the sysexts are merged. Otherwise, it might start building the modules and conflict with the prebuilt drivers sysext. --- .../files/bin/setup-nvidia | 35 +++++++++++++------ .../files/units/nvidia.service | 2 +- 2 files changed, 26 insertions(+), 11 deletions(-) mode change 100644 => 100755 sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/bin/setup-nvidia diff --git a/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/bin/setup-nvidia b/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/bin/setup-nvidia old mode 100644 new mode 100755 index dd936f6aff..4e384b36fd --- a/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/bin/setup-nvidia +++ b/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/bin/setup-nvidia @@ -97,20 +97,30 @@ EOF } function install_and_load() { - # This creates symlinks to sonames - mkdir -p /etc/ld.so.conf.d/ - echo "/opt/nvidia/${NVIDIA_CURRENT_INSTALLATION}/usr/lib64" > /etc/ld.so.conf.d/nvidia.conf - ldconfig - modprobe -a i2c_core ipmi_msghandler ipmi_devintf # This is needed on amd64 due to CONFIG_ACPI_VIDEO=m modprobe -q video || true - pushd "/opt/nvidia/${NVIDIA_CURRENT_INSTALLATION}/usr/lib/modules/$(uname -r)/video/" - insmod nvidia.ko - insmod nvidia-modeset.ko - insmod nvidia-uvm.ko - popd + if systemd-sysext list | grep -q flatcar-nvidia-drivers; then + modprobe nvidia + modprobe nvidia-modeset + modprobe nvidia-uvm + + systemctl daemon-reload + # create the nvpd user + systemd-sysusers + else + # This creates symlinks to sonames + mkdir -p /etc/ld.so.conf.d/ + echo "/opt/nvidia/${NVIDIA_CURRENT_INSTALLATION}/usr/lib64" > /etc/ld.so.conf.d/nvidia.conf + + pushd "/opt/nvidia/${NVIDIA_CURRENT_INSTALLATION}/usr/lib/modules/$(uname -r)/video/" + insmod nvidia.ko + insmod nvidia-modeset.ko + insmod nvidia-uvm.ko + popd + fi + ldconfig # based on https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#runfile-verifications if [ ! -c /dev/nvidiactl ] @@ -161,6 +171,11 @@ function is_nvidia_installation_required() { if [[ -d "/opt/nvidia/${NVIDIA_FLATCAR_VERSION_PAIR}" ]]; then return 1 fi + + if systemd-sysext list | grep -q flatcar-nvidia-drivers; then + echo "Pre-build NVIDIA drivers sysext is loaded, skipping drivers build." + return 1 + fi } function presetup() { diff --git a/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/units/nvidia.service b/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/units/nvidia.service index c5cb85e30c..702f17eb8c 100644 --- a/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/units/nvidia.service +++ b/sdk_container/src/third_party/coreos-overlay/x11-drivers/nvidia-drivers-service/files/units/nvidia.service @@ -1,7 +1,7 @@ [Unit] Description=NVIDIA Configure Service Wants=network-online.target -After=network-online.target +After=network-online.target systemd-sysext.service Before=containerd.target [Service]