Add vfio stuff for win10

Add a whole bunch of stuff to start/stop displays for the win10 vm
Hopefully this will allow win10 to directly use the same GPU in passthru
mode
This commit is contained in:
Greg Hellings
2025-01-08 08:05:24 -06:00
parent 8a0b0f55e8
commit 2bbbeaa5f1
7 changed files with 131 additions and 7 deletions
+3
View File
@@ -13,7 +13,10 @@ in
inject-darwin = c ./inject-darwin.nix { };
inject = c ./inject.nix { };
hms = c ./hms { };
qemu-hook = c ./qemu-hook.nix { };
setup-ssh = c ./setup-ssh { };
upgrade-pg-cluster = c ./upgrade-pg-cluster.nix { };
vfio_startup = c ./vfio_startup.nix { };
vfio_shutdown = c ./vfio_shutdown.nix { };
zim = c ./zim.nix { };
}
+31
View File
@@ -0,0 +1,31 @@
{
writeShellApplication,
vfio_shutdown,
vfio_startup,
}:
writeShellApplication {
name = "qemu_hook";
runtimeInputs = [
vfio_shutdown
vfio_startup
];
text = ''
OBJECT="''${1}"
OPERATION="''${2}"
if [[ "''${OBJECT}" == "win10" ]]; then
case "''${OPERATION}" in
"prepare")
systemctl start libvirt-nosleep@"''${OBJECT}".service
systemctl start bluetooth.service
vfio_startup 2>&1 | tee -a /var/log/qemu_hook.log
;;
"release")
systemctl stop libvirt-nosleep@"''${OBJECT}".service
vfio_shutdown 2>&1 | tee -a /var/log/qemu_hook.log
esac
fi
'';
}
+32
View File
@@ -0,0 +1,32 @@
{
writeShellApplication,
coreutils,
kmod,
systemd,
}:
writeShellApplication {
name = "vfio_shutdown";
runtimeInputs = [
coreutils
kmod
systemd
];
text = ''
echo "Removing vfio modules..."
modprobe -r vfio_pci
modprobe -r vfio_iommu_type1
modprobe -r vfio
echo "Reload the GPU modules..."
modprobe nvidia
modprobe nvidia_modeset
modprobe nvidia_drm
modprobe nvidia_uvm
echo "Starting the display manager..."
systemctl start display-manager.service
echo "All done!"
'';
}
+33
View File
@@ -0,0 +1,33 @@
{
writeShellApplication,
kmod,
systemd,
}:
writeShellApplication {
name = "vfio_startup";
runtimeInputs = [
kmod
systemd
];
text = ''
# Stop the service that uses the GPU
echo "Stopping the display manager..."
systemctl stop display-manager.service
# Unload the GPU modules
echo "Unloading the GPU modules..."
modprobe -r nvidia_uvm
modprobe -r nvidia_drm
modprobe -r nvidia_modeset
modprobe -r nvidia
# Insert the vfio modules
echo "Inserting the vfio modules..."
modprobe vfio
modprobe vfio_pci
modprobe vfio_iommu_type1
echo "Aaaand... off you go!"
'';
}