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:
@@ -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 { };
|
||||
}
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
}
|
||||
@@ -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!"
|
||||
'';
|
||||
}
|
||||
@@ -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!"
|
||||
'';
|
||||
}
|
||||
Reference in New Issue
Block a user