diff --git a/packages/kmod-6.1-nvidia/copy-open-gpu-kernel-modules.service.in b/packages/kmod-6.1-nvidia/copy-open-gpu-kernel-modules.service.in new file mode 100644 index 000000000..4f2fad8e7 --- /dev/null +++ b/packages/kmod-6.1-nvidia/copy-open-gpu-kernel-modules.service.in @@ -0,0 +1,20 @@ +[Unit] +Description=Link additional kernel modules +RequiresMountsFor=PREFIX/lib/modules PREFIX/src/kernels +# Rerunning this service after the system is fully loaded will override +# the already linked kernel modules. This doesn't affect the running system, +# since kernel modules are linked early in the boot sequence, but we still +# disable manual restarts to prevent unnecessary kernel modules rewrites. +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecCondition=/usr/bin/ghostdog match-nvidia-driver open-gpu +ExecStart=/usr/bin/driverdog --modules-set nvidia-open-gpu link-modules +ExecStart=/usr/bin/driverdog --modules-set nvidia-open-gpu-copy-only link-modules +RemainAfterExit=true +StandardError=journal+console + +[Install] +RequiredBy=preconfigured.target diff --git a/packages/kmod-6.1-nvidia/kmod-6.1-nvidia.spec b/packages/kmod-6.1-nvidia/kmod-6.1-nvidia.spec index fd7acbcb9..1e4a2d8a7 100644 --- a/packages/kmod-6.1-nvidia/kmod-6.1-nvidia.spec +++ b/packages/kmod-6.1-nvidia/kmod-6.1-nvidia.spec @@ -48,6 +48,10 @@ Source302: nvidia-open-gpu-config.toml.in Source303: nvidia-open-gpu-copy-only-config.toml.in Source304: nvidia-tesla-path.env.in Source305: nvidia-ld.so.conf.in +Source306: link-tesla-kernel-modules.service.in +Source307: load-tesla-kernel-modules.service.in +Source308: copy-open-gpu-kernel-modules.service.in +Source309: load-open-gpu-kernel-modules.service.in BuildRequires: %{_cross_os}glibc-devel BuildRequires: %{_cross_os}kernel-6.1-archive @@ -216,6 +220,21 @@ install -m 0644 nvidia-path.env %{buildroot}%{_cross_factorydir}/nvidia/tesla sed -e 's|__LIBDIR__|%{_cross_libdir}|' %{S:305} > nvidia-tesla.conf install -m 0644 nvidia-tesla.conf %{buildroot}%{_cross_factorydir}%{_cross_sysconfdir}/ld.so.conf.d/ +# Services to link/copy/load modules +sed -e 's|PREFIX|%{_cross_prefix}|g' %{S:306} > link-tesla-kernel-modules.service +sed -e 's|PREFIX|%{_cross_prefix}|g' %{S:307} > load-tesla-kernel-modules.service +install -p -m 0644 \ + link-tesla-kernel-modules.service \ + load-tesla-kernel-modules.service \ + %{buildroot}%{_cross_unitdir} + +sed -e 's|PREFIX|%{_cross_prefix}|g' %{S:308} > copy-open-gpu-kernel-modules.service +sed -e 's|PREFIX|%{_cross_prefix}|g' %{S:309} > load-open-gpu-kernel-modules.service +install -p -m 0644 \ + copy-open-gpu-kernel-modules.service \ + load-open-gpu-kernel-modules.service \ + %{buildroot}%{_cross_unitdir} + # proprietary driver install kernel/nvidia.mod.o %{buildroot}%{_cross_datadir}/nvidia/tesla/module-objects.d install kernel/nvidia/nv-interface.o %{buildroot}%{_cross_datadir}/nvidia/tesla/module-objects.d @@ -323,6 +342,12 @@ popd %dir %{_cross_datadir}/nvidia/tesla/module-objects.d %dir %{_cross_factorydir}/nvidia/tesla +# Service files for link/copy/loading drivers +%{_cross_unitdir}/link-tesla-kernel-modules.service +%{_cross_unitdir}/load-tesla-kernel-modules.service +%{_cross_unitdir}/copy-open-gpu-kernel-modules.service +%{_cross_unitdir}/load-open-gpu-kernel-modules.service + # Binaries %{_cross_libexecdir}/nvidia/tesla/bin/nvidia-debugdump %{_cross_libexecdir}/nvidia/tesla/bin/nvidia-smi diff --git a/packages/kmod-6.1-nvidia/link-tesla-kernel-modules.service.in b/packages/kmod-6.1-nvidia/link-tesla-kernel-modules.service.in new file mode 100644 index 000000000..1b5babf74 --- /dev/null +++ b/packages/kmod-6.1-nvidia/link-tesla-kernel-modules.service.in @@ -0,0 +1,19 @@ +[Unit] +Description=Link additional kernel modules +RequiresMountsFor=PREFIX/lib/modules PREFIX/src/kernels +# Rerunning this service after the system is fully loaded will override +# the already linked kernel modules. This doesn't affect the running system, +# since kernel modules are linked early in the boot sequence, but we still +# disable manual restarts to prevent unnecessary kernel modules rewrites. +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecCondition=/usr/bin/ghostdog match-nvidia-driver tesla +ExecStart=/usr/bin/driverdog --modules-set nvidia-tesla link-modules +RemainAfterExit=true +StandardError=journal+console + +[Install] +RequiredBy=preconfigured.target diff --git a/packages/kmod-6.1-nvidia/load-open-gpu-kernel-modules.service.in b/packages/kmod-6.1-nvidia/load-open-gpu-kernel-modules.service.in new file mode 100644 index 000000000..11d26ce76 --- /dev/null +++ b/packages/kmod-6.1-nvidia/load-open-gpu-kernel-modules.service.in @@ -0,0 +1,19 @@ +[Unit] +Description=Load additional kernel modules +RequiresMountsFor=PREFIX/lib/modules PREFIX/src/kernels +After=copy-open-gpu-kernel-modules.service +Requires=copy-open-gpu-kernel-modules.service +# Disable manual restarts to prevent loading kernel modules +# that weren't linked by the running system +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecCondition=/usr/bin/ghostdog match-nvidia-driver open-gpu +ExecStart=/usr/bin/driverdog --modules-set nvidia-open-gpu load-modules +RemainAfterExit=true +StandardError=journal+console + +[Install] +RequiredBy=preconfigured.target diff --git a/packages/kmod-6.1-nvidia/load-tesla-kernel-modules.service.in b/packages/kmod-6.1-nvidia/load-tesla-kernel-modules.service.in new file mode 100644 index 000000000..cc95e05dc --- /dev/null +++ b/packages/kmod-6.1-nvidia/load-tesla-kernel-modules.service.in @@ -0,0 +1,19 @@ +[Unit] +Description=Load additional kernel modules +RequiresMountsFor=PREFIX/lib/modules PREFIX/src/kernels +After=link-tesla-kernel-modules.service +Requires=link-tesla-kernel-modules.service +# Disable manual restarts to prevent loading kernel modules +# that weren't linked by the running system +RefuseManualStart=true +RefuseManualStop=true + +[Service] +Type=oneshot +ExecCondition=/usr/bin/ghostdog match-nvidia-driver tesla +ExecStart=/usr/bin/driverdog --modules-set nvidia-tesla load-modules +RemainAfterExit=true +StandardError=journal+console + +[Install] +RequiredBy=preconfigured.target