Skip to content

Commit

Permalink
kmod-6.1-nvidia: move kernel module services into package
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
yeazelm committed Sep 23, 2024
1 parent 30a7b88 commit b44e4c7
Show file tree
Hide file tree
Showing 5 changed files with 102 additions and 0 deletions.
20 changes: 20 additions & 0 deletions packages/kmod-6.1-nvidia/copy-open-gpu-kernel-modules.service.in
Original file line number Diff line number Diff line change
@@ -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
25 changes: 25 additions & 0 deletions packages/kmod-6.1-nvidia/kmod-6.1-nvidia.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
19 changes: 19 additions & 0 deletions packages/kmod-6.1-nvidia/link-tesla-kernel-modules.service.in
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions packages/kmod-6.1-nvidia/load-open-gpu-kernel-modules.service.in
Original file line number Diff line number Diff line change
@@ -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
19 changes: 19 additions & 0 deletions packages/kmod-6.1-nvidia/load-tesla-kernel-modules.service.in
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit b44e4c7

Please sign in to comment.