@@ -120,71 +120,22 @@ _kernel_requires_package() {
120120 return 0
121121}
122122
123- # Compile the kernel modules, optionally sign them, and generate a precompiled package for use by the nvidia-installer.
124- _create_driver_package () (
125- local pkg_name=" nvidia-modules-${KERNEL_VERSION% -* }${PACKAGE_TAG: +-${PACKAGE_TAG} } "
126- local nvidia_sign_args=" "
127- local nvidia_modeset_sign_args=" "
128- local nvidia_uvm_sign_args=" "
129-
130- trap " make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION} /build clean > /dev/null" EXIT
131-
132- echo " Compiling NVIDIA driver kernel modules..."
133- cd /usr/src/nvidia-${DRIVER_VERSION} /${KERNEL_TYPE}
134-
123+ # This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default
124+ # or kernel-version folder.
125+ _link_ofa_kernel () (
135126 if _gpu_direct_rdma_enabled; then
136127 ln -s /run/mellanox/drivers/usr/src/ofa_kernel /usr/src/
137128 # if arch directory exists(MOFED >=5.5) then create a symlink as expected by GPU driver installer
138- # This is required as currently GPU driver installer doesn't expect headers in x86_64 folder, but only in either default or kernel-version folder.
139129 # ls -ltr /usr/src/ofa_kernel/
140130 # lrwxrwxrwx 1 root root 36 Dec 8 20:10 default -> /etc/alternatives/ofa_kernel_headers
141131 # drwxr-xr-x 4 root root 4096 Dec 8 20:14 x86_64
142132 # lrwxrwxrwx 1 root root 44 Dec 9 19:05 5.4.0-90-generic -> /usr/src/ofa_kernel/x86_64/5.4.0-90-generic/
143- if [[ -d /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH /` uname -r` ]]; then
144- if [[ ! -e /usr/src/ofa_kernel/` uname -r` ]]; then
145- ln -s /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH /` uname -r` /usr/src/ofa_kernel/
133+ if [[ -d /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH /$( uname -r) ]]; then
134+ if [[ ! -e /usr/src/ofa_kernel/$( uname -r) ]]; then
135+ ln -s /run/mellanox/drivers/usr/src/ofa_kernel/$DRIVER_ARCH /$( uname -r) /usr/src/ofa_kernel/
146136 fi
147137 fi
148138 fi
149-
150- export IGNORE_CC_MISMATCH=1
151- make -s -j ${MAX_THREADS} SYSSRC=/lib/modules/${KERNEL_VERSION} /build nv-linux.o nv-modeset-linux.o > /dev/null
152-
153- echo " Relinking NVIDIA driver kernel modules..."
154- rm -f nvidia.ko nvidia-modeset.ko
155- ld -d -r -o nvidia.ko ./nv-linux.o ./nvidia/nv-kernel.o_binary
156- ld -d -r -o nvidia-modeset.ko ./nv-modeset-linux.o ./nvidia-modeset/nv-modeset-kernel.o_binary
157-
158- if [ -n " ${PRIVATE_KEY} " ]; then
159- echo " Signing NVIDIA driver kernel modules..."
160- donkey get ${PRIVATE_KEY} sh -c " PATH=${PATH} :/usr/src/linux-headers-${KERNEL_VERSION} /scripts && \
161- sign-file sha512 \$ DONKEY_FILE pubkey.x509 nvidia.ko nvidia.ko.sign && \
162- sign-file sha512 \$ DONKEY_FILE pubkey.x509 nvidia-modeset.ko nvidia-modeset.ko.sign && \
163- sign-file sha512 \$ DONKEY_FILE pubkey.x509 nvidia-uvm.ko"
164- nvidia_sign_args=" --linked-module nvidia.ko --signed-module nvidia.ko.sign"
165- nvidia_modeset_sign_args=" --linked-module nvidia-modeset.ko --signed-module nvidia-modeset.ko.sign"
166- nvidia_uvm_sign_args=" --signed"
167- fi
168-
169- echo " Building NVIDIA driver package ${pkg_name} ..."
170- ../mkprecompiled --pack ${pkg_name} --description ${KERNEL_VERSION} \
171- --proc-mount-point /lib/modules/${KERNEL_VERSION} /proc \
172- --driver-version ${DRIVER_VERSION} \
173- --kernel-interface nv-linux.o \
174- --linked-module-name nvidia.ko \
175- --core-object-name nvidia/nv-kernel.o_binary \
176- ${nvidia_sign_args} \
177- --target-directory . \
178- --kernel-interface nv-modeset-linux.o \
179- --linked-module-name nvidia-modeset.ko \
180- --core-object-name nvidia-modeset/nv-modeset-kernel.o_binary \
181- ${nvidia_modeset_sign_args} \
182- --target-directory . \
183- --kernel-module nvidia-uvm.ko \
184- ${nvidia_uvm_sign_args} \
185- --target-directory .
186- mkdir -p precompiled
187- mv ${pkg_name} precompiled
188139)
189140
190141_assert_nvswitch_system () {
@@ -420,18 +371,33 @@ _unload_driver() {
420371_install_driver () {
421372 local install_args=()
422373
423- echo " Installing NVIDIA driver kernel modules..."
424- cd /usr/src/nvidia-${DRIVER_VERSION}
425- if [ -d /lib/modules/${KERNEL_VERSION} /kernel/drivers/video ]; then
426- rm -rf /lib/modules/${KERNEL_VERSION} /kernel/drivers/video
427- else
428- rm -rf /lib/modules/${KERNEL_VERSION} /video
429- fi
430-
431374 if [ " ${ACCEPT_LICENSE} " = " yes" ]; then
432375 install_args+=(" --accept-license" )
433376 fi
434- nvidia-installer --kernel-module-only --no-drm --ui=none --no-nouveau-check -m=${KERNEL_TYPE} ${install_args[@]+" ${install_args[@]} " }
377+
378+ if [ -n " ${MAX_THREADS} " ]; then
379+ install_args+=(" --concurrency-level=${MAX_THREADS} " )
380+ fi
381+
382+ # Install the NVIDIA driver in one step
383+ sh NVIDIA-Linux-$DRIVER_ARCH -$DRIVER_VERSION .run -x && \
384+ cd NVIDIA-Linux-$DRIVER_ARCH -$DRIVER_VERSION && \
385+ ./nvidia-installer --silent \
386+ --ui=none \
387+ --no-drm \
388+ --no-nouveau-check \
389+ --no-nvidia-modprobe \
390+ --no-rpms \
391+ --no-backup \
392+ --no-check-for-alternate-installs \
393+ --no-libglx-indirect \
394+ --no-install-libglvnd \
395+ --x-prefix=/tmp/null \
396+ --x-module-path=/tmp/null \
397+ --x-library-path=/tmp/null \
398+ --x-sysconfig-path=/tmp/null \
399+ -m=" ${KERNEL_TYPE} " \
400+ ${install_args[@]+" ${install_args[@]} " }
435401}
436402
437403# Mount the driver rootfs into the run directory with the exception of sysfs.
@@ -524,26 +490,6 @@ init() {
524490 _find_vgpu_driver_version || exit 1
525491 fi
526492
527- # Install the userspace components and copy the kernel module sources.
528- sh NVIDIA-Linux-$DRIVER_ARCH -$DRIVER_VERSION .run -x && \
529- cd NVIDIA-Linux-$DRIVER_ARCH -$DRIVER_VERSION && \
530- ./nvidia-installer --silent \
531- --no-kernel-module \
532- --no-nouveau-check \
533- --no-nvidia-modprobe \
534- --no-rpms \
535- --no-backup \
536- --no-check-for-alternate-installs \
537- --no-libglx-indirect \
538- --no-install-libglvnd \
539- --x-prefix=/tmp/null \
540- --x-module-path=/tmp/null \
541- --x-library-path=/tmp/null \
542- --x-sysconfig-path=/tmp/null && \
543- mkdir -p /usr/src/nvidia-${DRIVER_VERSION} && \
544- mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-${DRIVER_VERSION} && \
545- sed ' 9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-${DRIVER_VERSION} /.manifest
546-
547493 echo -e " \n========== NVIDIA Software Installer ==========\n"
548494 echo -e " Starting installation of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION} \n"
549495
@@ -565,7 +511,7 @@ init() {
565511 _update_package_cache
566512 _resolve_kernel_version || exit 1
567513 _install_prerequisites
568- _create_driver_package
514+ _link_ofa_kernel
569515 # _remove_prerequisites
570516 # _cleanup_package_cache
571517 fi
@@ -583,63 +529,6 @@ init() {
583529 exit 0
584530}
585531
586- update () {
587- exec 3>&2
588- if exec 2> /dev/null 4< ${PID_FILE} ; then
589- if ! flock -n 4 && read pid < & 4 && kill -0 " ${pid} " ; then
590- exec > >( tee -a " /proc/${pid} /fd/1" )
591- exec 2> >( tee -a " /proc/${pid} /fd/2" >&3 )
592- else
593- exec 2>&3
594- fi
595- exec 4>& -
596- fi
597- exec 3>& -
598-
599- # vgpu driver version is choosen dynamically during runtime, so pre-compile modules for
600- # only non-vgpu driver types
601- if [ " ${DRIVER_TYPE} " != " vgpu" ]; then
602- # Install the userspace components and copy the kernel module sources.
603- if [ ! -e /usr/src/nvidia-${DRIVER_VERSION} /mkprecompiled ]; then
604- sh NVIDIA-Linux-$DRIVER_ARCH -$DRIVER_VERSION .run -x && \
605- cd NVIDIA-Linux-$DRIVER_ARCH -$DRIVER_VERSION && \
606- ./nvidia-installer --silent \
607- --no-kernel-module \
608- --no-nouveau-check \
609- --no-nvidia-modprobe \
610- --no-rpms \
611- --no-backup \
612- --no-check-for-alternate-installs \
613- --no-libglx-indirect \
614- --no-install-libglvnd \
615- --x-prefix=/tmp/null \
616- --x-module-path=/tmp/null \
617- --x-library-path=/tmp/null \
618- --x-sysconfig-path=/tmp/null && \
619- mkdir -p /usr/src/nvidia-${DRIVER_VERSION} && \
620- mv LICENSE mkprecompiled ${KERNEL_TYPE} /usr/src/nvidia-${DRIVER_VERSION} && \
621- sed ' 9,${/^\(kernel\|LICENSE\)/!d}' .manifest > /usr/src/nvidia-${DRIVER_VERSION} /.manifest
622- fi
623- fi
624-
625- echo -e " \n========== NVIDIA Software Updater ==========\n"
626- echo -e " Starting update of NVIDIA driver version ${DRIVER_VERSION} for Linux kernel version ${KERNEL_VERSION} \n"
627-
628- trap " echo 'Caught signal'; exit 1" HUP INT QUIT PIPE TERM
629-
630- _update_package_cache
631- _resolve_kernel_version || exit 1
632- _install_prerequisites
633- if _kernel_requires_package; then
634- _create_driver_package
635- fi
636- _remove_prerequisites
637- _cleanup_package_cache
638-
639- echo " Done"
640- exit 0
641- }
642-
643532# Wait for MOFED drivers to be loaded and load nvidia-peermem whenever it gets unloaded during MOFED driver updates
644533reload_nvidia_peermem () {
645534 if [ " $USE_HOST_MOFED " = " true" ]; then
0 commit comments