gpu_pass.sh (4012B) - View raw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149#!/bin/sh set -e WRKDIR=$PWD if [ "$(id -u)" -ne 0 ] then printf "The script has to be run as root.\n" exit fi if [ -x "$(command -v doas)" ]; then PERMUSER=$DOAS_USER evalcommand="doas -u $PERMUSER" else PERMUSER=$SUDO_USER evalcommand="sudo -u $PERMUSER" fi run_as_user() { $evalcommand "$@" } run_as_user mkdir -p /home/"$PERMUSER"/.local/share/vgabios run_as_user cp "$WRKDIR"/Hooks/patch.rom /home/"$PERMUSER"/.local/share/vgabios pacman -S qemu-desktop libvirt edk2-ovmf virt-manager dnsmasq wget --noconfirm mkdir /etc/libvirt/hooks # Online version #wget 'https://raw.githubusercontent.com/PassthroughPOST/VFIO-Tools/master/libvirt_hooks/qemu' \ # -O /etc/libvirt/hooks/qemu cp "$WRKDIR"/Hooks/qemu /etc/libvirt/hooks/ chmod +x /etc/libvirt/hooks/qemu mkdir -p /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin mkdir -p /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/start.sh #!/bin/bash set -x source "/etc/libvirt/hooks/kvm.conf" #systemctl stop sddm.service killall Hyprland 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 sleep 10 modprobe -r nvidia_drm modprobe -r nvidia_modeset modprobe -r nvidia_uvm modprobe -r drm_kms_helper modprobe -r nvidia #modprobe -r drm virsh nodedev-detach $VIRSH_GPU_VIDEO virsh nodedev-detach $VIRSH_GPU_AUDIO modprobe vfio modprobe vfio_pci modprobe vfio_iommu_type1 #./usr/share/UnbindUSB/vfio-usb.sh 0000:00:14.0 EOL cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/revert.sh #!/bin/bash set -x source "/etc/libvirt/hooks/kvm.conf" modprobe -r vfio_pci modprobe -r vfio_iommu_type1 modprobe -r vfio virsh nodedev-reattach $VIRSH_GPU_VIDEO virsh nodedev-reattach $VIRSH_GPU_AUDIO echo 1 > /sys/class/vtconsole/vtcon0/bind echo 0 > /sys/class/vtconsole/vtcon1/bind nvidia-xconfig --query-gpu-info > /dev/null 2>&1 echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind modprobe nvidia_drm modprobe nvidia_modeset modprobe drm_kms_helper modprobe nvidia modprobe drm modprobe nvidia_uvm #systemctl start sddm.service #echo 0000:00:14.0 > /sys/bus/pci/drivers/vfio-pci/unbind #echo 0000:00:14.0 > /sys/bus/pci/drivers/xhci_hcd/bind EOL chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/start.sh chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/revert.sh case "$(readlink -f /sbin/init)" in *systemd*) cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh #!/bin/sh systemctl set-property --runtime -- user.slice AllowedCPUs=0,6 systemctl set-property --runtime -- system.slice AllowedCPUs=0,6 systemctl set-property --runtime -- init.scope AllowedCPUs=0,6 EOL cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh #!/bin/sh systemctl set-property --runtime -- user.slice AllowedCPUs=0-11 systemctl set-property --runtime -- system.slice AllowedCPUs=0-11 systemctl set-property --runtime -- init.scope AllowedCPUs=0-11 EOL ;; *dinit*) pacman --noconfirm -S libvirt-dinit cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh #!/bin/sh echo "+cpuset" > /sys/fs/cgroup/cgroup.subtree_control echo "0,16" > /sys/fs/cgroup/1/cpuset.cpus EOL cat <<EOL >> /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh #!/bin/sh echo "0-31" > /sys/fs/cgroup/1/cpuset.cpus echo "+cpuset" > /sys/fs/cgroup/cgroup.subtree_control EOL dinitctl start libvirtd ;; esac chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/prepare/begin/cpuisolation.sh chmod +x /etc/libvirt/hooks/qemu.d/win10-hidden-pt/release/end/cpurevert.sh cat <<EOL >> /etc/libvirt/hooks/kvm.conf VIRSH_GPU_VIDEO=pci_0000_01_00_0 VIRSH_GPU_AUDIO=pci_0000_01_00_1 EOL # usermod -aG libvirt,kvm,input,audio,video "$PERMUSER" usermod -aG libvirt,input "$PERMUSER" virsh net-autostart default