From b44e4c7177cdf30952accd2b7169b6e4bd294086 Mon Sep 17 00:00:00 2001 From: Matthew Yeazel Date: Wed, 18 Sep 2024 02:35:44 +0000 Subject: [PATCH] kmod-6.1-nvidia: move kernel module services into package The os package doesn't need to concern itself with NVIDIA specific loading behavior. It will provide driverdog, but the configurations read by driverdog will be included with the specific kernel modules package that provides the drivers described in the configuration. This moves the tesla and open-gpu services into the kmod-6.1-nvidia package instead. Signed-off-by: Matthew Yeazel --- .../copy-open-gpu-kernel-modules.service.in | 20 +++++++++++++++ packages/kmod-6.1-nvidia/kmod-6.1-nvidia.spec | 25 +++++++++++++++++++ .../link-tesla-kernel-modules.service.in | 19 ++++++++++++++ .../load-open-gpu-kernel-modules.service.in | 19 ++++++++++++++ .../load-tesla-kernel-modules.service.in | 19 ++++++++++++++ 5 files changed, 102 insertions(+) create mode 100644 packages/kmod-6.1-nvidia/copy-open-gpu-kernel-modules.service.in create mode 100644 packages/kmod-6.1-nvidia/link-tesla-kernel-modules.service.in create mode 100644 packages/kmod-6.1-nvidia/load-open-gpu-kernel-modules.service.in create mode 100644 packages/kmod-6.1-nvidia/load-tesla-kernel-modules.service.in 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..2c3420b61 --- /dev/null +++ b/packages/kmod-6.1-nvidia/copy-open-gpu-kernel-modules.service.in @@ -0,0 +1,20 @@ +[Unit] +Description=Copy open GPU 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..8fc779212 --- /dev/null +++ b/packages/kmod-6.1-nvidia/link-tesla-kernel-modules.service.in @@ -0,0 +1,19 @@ +[Unit] +Description=Link Tesla 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..3862b3e75 --- /dev/null +++ b/packages/kmod-6.1-nvidia/load-open-gpu-kernel-modules.service.in @@ -0,0 +1,19 @@ +[Unit] +Description=Load open GPU 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..60024004c --- /dev/null +++ b/packages/kmod-6.1-nvidia/load-tesla-kernel-modules.service.in @@ -0,0 +1,19 @@ +[Unit] +Description=Load Tesla 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