@@ -530,6 +530,7 @@ _mount_rootfs() {
530530 mount --make-private /sys
531531 mkdir -p ${RUN_DIR} /driver
532532 mount --rbind / ${RUN_DIR} /driver
533+ echo " Driver container rootfs mounted at ${RUN_DIR} /driver"
533534}
534535
535536# Unmount the driver rootfs from the run directory.
@@ -665,6 +666,31 @@ _ensure_persistence_running() {
665666 fi
666667}
667668
669+ _build_driver_config () {
670+ local config=" DRIVER_VERSION=${DRIVER_VERSION}
671+ KERNEL_VERSION=$( uname -r)
672+ GPU_DIRECT_RDMA_ENABLED=${GPU_DIRECT_RDMA_ENABLED}
673+ USE_HOST_MOFED=${USE_HOST_MOFED}
674+ KERNEL_MODULE_TYPE=${KERNEL_MODULE_TYPE} "
675+
676+ # Append config file contents directly
677+ for conf_file in nvidia.conf nvidia-uvm.conf nvidia-modeset.conf nvidia-peermem.conf; do
678+ if [ -f " /drivers/$conf_file " ]; then
679+ config=" ${config}
680+ $( cat " /drivers/$conf_file " ) "
681+ fi
682+ done
683+
684+ echo " $config "
685+ }
686+
687+ _store_driver_config () {
688+ local config_file=" /run/nvidia/driver-config.state"
689+ echo " Storing driver configuration state..."
690+ _build_driver_config > " $config_file "
691+ echo " Driver configuration stored at $config_file "
692+ }
693+
668694init () {
669695 if [ " ${DRIVER_TYPE} " = " vgpu" ]; then
670696 _find_vgpu_driver_version || exit 1
@@ -683,13 +709,15 @@ init() {
683709 trap " echo 'Caught signal'; exit 1" HUP INT QUIT PIPE TERM
684710 trap " _shutdown" EXIT
685711
686- # Fast path: if the NVIDIA kernel modules are already loaded and match the desired
687- # version, skip kernel module build/load but install userspace components.
712+ # Fast path: if the NVIDIA kernel modules are already loaded and driver config matches,
713+ # skip kernel module build/load but install userspace components.
688714 # This handles non-clean restarts where modules are in use and can't be unloaded.
689- if [ -f /sys/module/nvidia/refcnt ]; then
690- loaded_version=$( _read_loaded_version || true)
691- if [ -n " ${loaded_version} " ] && [ " ${loaded_version} " = " ${DRIVER_VERSION} " ]; then
692- echo " Detected matching loaded driver (${loaded_version} ); performing userspace-only install"
715+ if [ -f /sys/module/nvidia/refcnt ] && [ -f /run/nvidia/driver-config.state ]; then
716+ current_config=$( _build_driver_config)
717+ stored_config=$( cat /run/nvidia/driver-config.state)
718+
719+ if [ " ${current_config} " = " ${stored_config} " ]; then
720+ echo " Detected matching loaded driver & config (${DRIVER_VERSION} ); performing userspace-only install"
693721
694722 # Skip kernel module unload since they're already loaded with correct version
695723 # Unmount any existing rootfs
@@ -715,16 +743,19 @@ init() {
715743 --no-drm \
716744 --no-peermem
717745
718- # Mount the driver rootfs to make components available
719- _mount_rootfs
720-
721- # Ensure persistence daemon is running
722- _ensure_persistence_running
723-
724- # Write kernel update hook
725- _write_kernel_update_hook
726-
727- echo " Userspace-only install complete, now waiting for signal"
746+ # Mount the driver rootfs to make components available
747+ _mount_rootfs
748+
749+ # Ensure persistence daemon is running
750+ _ensure_persistence_running
751+
752+ # Write kernel update hook
753+ _write_kernel_update_hook
754+
755+ # Store driver configuration
756+ _store_driver_config
757+
758+ echo " Userspace-only install complete, now waiting for signal"
728759 sleep infinity &
729760 trap " echo 'Caught signal'; _shutdown && { kill $! ; exit 0; }" HUP INT QUIT PIPE TERM
730761 trap - EXIT
@@ -776,6 +807,7 @@ init() {
776807 _load_driver || exit 1
777808 _mount_rootfs
778809 _write_kernel_update_hook
810+ _store_driver_config
779811
780812 echo " Done, now waiting for signal"
781813 sleep infinity &
0 commit comments