diff --git a/modules/graphical/plasma.nix b/modules/graphical/plasma.nix index dd0a71b..d9efd0b 100644 --- a/modules/graphical/plasma.nix +++ b/modules/graphical/plasma.nix @@ -33,6 +33,7 @@ in environment.sessionVariables = { + __GL_YIELD = "usleep"; MOZ_ENABLE_WAYLAND = "1"; NIXOS_OZONE_WL = "1"; }; diff --git a/modules/hardware/vfio.nix b/modules/hardware/vfio.nix index 77419f2..8966ea7 100644 --- a/modules/hardware/vfio.nix +++ b/modules/hardware/vfio.nix @@ -9,6 +9,6 @@ in }; config = mkIf (cfg.enable && config.virtualisation.libvirtd.enable) { - boot.kernelParams = [ "amd_iommu=on" ]; + boot.kernelParams = [ "amd_iommu=on" "iommu=pt" ]; }; } diff --git a/modules/misc/hook.sh b/modules/misc/hook.sh index 808cc2d..37bac3b 100644 --- a/modules/misc/hook.sh +++ b/modules/misc/hook.sh @@ -1,53 +1,41 @@ -exec 19>>/home/kopatz/Desktop/stoplogfile -BASH_XTRACEFD=19 -set -x -set +o errexit -set +o nounset -set +o pipefail +#exec 19>>/home/kopatz/Desktop/stoplogfile +#BASH_XTRACEFD=19 +#set -x +#set +o errexit +#set +o nounset +#set +o pipefail GUEST_NAME="$1" HOOK_NAME="$2" STATE_NAME="$3" -GPU_PCI="pci_0000_2B_00_0" -GPU_AUDIO_PCI="pci_0000_2B_00_1" -GPU_MODULES="nvidia_drm nvidia_modeset nvidia_uvm nvidia" +GPU_PCI="pci_0000_2b_00_0" +GPU_AUDIO_PCI="pci_0000_2b_00_1" +#GPU_MODULES="nvidia_uvm nvidia_drm nvidia_modeset nvidia" -if [ "$GUEST_NAME" != "gpu_passthrough" ]; then +if [[ ! "$GUEST_NAME" =~ ^gpu_passthrough ]]; then exit 0 fi if [ "$HOOK_NAME" == "prepare" ] && [ "$STATE_NAME" == "begin" ]; then - # Unbind VTconsoles - echo 0 > /sys/class/vtconsole/vtcon0/bind - echo 0 > /sys/class/vtconsole/vtcon1/bind - - # Unbind EFI Framebuffer - echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind - # Stop plasma - systemctl --user --machine=kopatz@ stop plasma-\* systemctl stop display-manager.service - sleep 2 + echo 0 > /sys/class/vtconsole/vtcon0/bind + echo 0 > /sys/class/vtconsole/vtcon1/bind + echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind - # Start default network - virsh net-start default - - # Unload AMDGPU kernel module - modprobe -r $GPU_MODULES + # Unload kernel module + modprobe -r nvidia_uvm + modprobe -r nvidia_drm + modprobe -r nvidia_modeset + modprobe -r nvidia # Detach GPU from host virsh nodedev-detach $GPU_PCI virsh nodedev-detach $GPU_AUDIO_PCI - sleep 10 - # Load VFIO kernel modules - modprobe vfio_pci - exit 0 + modprobe vfio-pci elif [ "$HOOK_NAME" == "release" ] && [ "$STATE_NAME" == "end" ]; then - # Stop default network - virsh net-destroy default - # Unload VFIO kernel modules modprobe -r vfio-pci @@ -55,21 +43,16 @@ elif [ "$HOOK_NAME" == "release" ] && [ "$STATE_NAME" == "end" ]; then virsh nodedev-reattach $GPU_PCI virsh nodedev-reattach $GPU_AUDIO_PCI - sleep 5 + echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind # Load NVIDIA kernel modules - modprobe $GPU_MODULES + modprobe nvidia + modprobe nvidia_modeset + modprobe nvidia_drm + modprobe nvidia_uvm - sleep 2 - - # Bind EFI Framebuffer - echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/bind - - - # Bind VTconsoles echo 1 > /sys/class/vtconsole/vtcon0/bind echo 1 > /sys/class/vtconsole/vtcon1/bind - # Start DM systemctl start display-manager.service fi diff --git a/modules/misc/virt-manager.nix b/modules/misc/virt-manager.nix index 54909ff..c04a222 100644 --- a/modules/misc/virt-manager.nix +++ b/modules/misc/virt-manager.nix @@ -20,7 +20,8 @@ in libvirtd = { enable = true; qemu = { - package = pkgs.qemu_kvm; + #package = pkgs.qemu_kvm; + runAsRoot = true; swtpm.enable = true; ovmf.enable = true; ovmf.packages = [ pkgs.OVMFFull.fd ];