Last active
February 13, 2018 08:28
-
-
Save seiferteric/6da713564f1e65236229efdd7c9ad22f to your computer and use it in GitHub Desktop.
Script to start/stop my windows libvirt vm with Nvidia IOMMU GPU Passthrough
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
DEV1=01:00.0 | |
DEV2=01:00.1 | |
VM=Windows10 | |
NV_VER=384 | |
NV_MIN_VER=111 | |
ACTION=$1 | |
function pcidriver () { | |
#This was taken from a script I found online: | |
VENDOR=$(cat /sys/bus/pci/devices/0000\:$1/vendor) | |
DEVICE=$(cat /sys/bus/pci/devices/0000\:$1/device) | |
if [ -e /sys/bus/pci/devices/0000\:$1/driver ]; then | |
echo 0000:$1 > /sys/bus/pci/devices/0000\:$1/driver/unbind | |
fi | |
echo $VENDOR $DEVICE > /sys/bus/pci/drivers/$2/new_id | |
echo 0000:$1 > /sys/bus/pci/drivers/$2/bind | |
echo $VENDOR $DEVICE > /sys/bus/pci/drivers/$2/remove_id | |
} | |
if [[ $EUID -ne 0 ]]; then | |
echo "This script must be run as root" | |
exit 1 | |
fi | |
if [ "$ACTION" != "start" ] && [ "$ACTION" != "stop" ]; then | |
echo "usage: $0 [start|stop]" | |
exit 0 | |
fi | |
# gnome-session-quit --no-prompt | |
# sleep 1 | |
echo stopping gdm | |
systemctl stop gdm.service | |
while pgrep gdm3 || pgrep Xorg || pgrep gnome-shell || pgrep Xwayland; do | |
sleep 1 | |
done | |
if [ $ACTION == "start" ]; then | |
echo "STARTING VM" | |
#Set Nvidia card to use vfio-pci driver | |
while lspci -nnk | grep 'Kernel driver in use: nvidia'; do | |
echo rebind to vfio | |
pcidriver $DEV1 vfio-pci | |
pcidriver $DEV2 vfio-pci | |
sleep 1 | |
done | |
echo update alternatives | |
#Taken from the nvidia deb prerm script | |
update-alternatives --remove x86_64-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER/ld.so.conf | |
update-alternatives --remove x86_64-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER/ld.so.conf | |
update-alternatives --remove i386-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER/alt_ld.so.conf | |
update-alternatives --remove i386-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER/alt_ld.so.conf | |
update-alternatives --remove x86_64-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER-prime/ld.so.conf | |
update-alternatives --remove x86_64-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER-prime/ld.so.conf | |
update-alternatives --remove i386-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER-prime/alt_ld.so.conf | |
update-alternatives --remove i386-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER-prime/alt_ld.so.conf | |
update-alternatives --remove glamor_conf /usr/share/nvidia-$NV_VER/glamor.conf | |
echo starting windows | |
virsh start $VM | |
else | |
echo "STOPPING VM" | |
echo force stop windows | |
virsh destroy $VM || true | |
#Re-set Nvidia card to use Nvidia driver | |
while ! lspci -nnk | grep 'Kernel driver in use: nvidia'; do | |
echo rebinding to nvidia | |
pcidriver $DEV1 nvidia | |
pcidriver $DEV2 nvidia | |
sleep 1 | |
done | |
echo update alternatives | |
#Taken from the nvidia deb postinst script | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf x86_64-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER/ld.so.conf 8604 \ | |
--slave /usr/share/man/man1/nvidia-xconfig.1.gz x86_64-linux-gnu_man_nvidiaxconfig.gz /usr/share/man/man1/alt-nvidia-$NV_VER-xconfig.1.gz \ | |
--slave /usr/share/man/man1/nvidia-smi.1.gz x86_64-linux-gnu_nvidia-smi.1.gz /usr/share/man/man1/alt-nvidia-$NV_VER-smi.1.gz \ | |
--slave /usr/share/man/man1/nvidia-cuda-mps-control.1.gz x86_64-linux-gnu_nvidia-cuda-mps-control.1.gz /usr/share/man/man1/alt-nvidia-$NV_VER-cuda-mps-control.1.gz \ | |
--slave /usr/share/man/man1/nvidia-persistenced.1.gz x86_64-linux-gnu_man_persistenced.gz /usr/share/man/man1/alt-nvidia-$NV_VER-persistenced.1.gz \ | |
--slave /usr/bin/nvidia-smi x86_64-linux-gnu_nvidia_smi /usr/lib/nvidia-$NV_VER/bin/nvidia-smi \ | |
--slave /usr/bin/nvidia-xconfig x86_64-linux-gnu_nvidia_xconfig /usr/lib/nvidia-$NV_VER/bin/nvidia-xconfig \ | |
--slave /usr/bin/nvidia-bug-report.sh x86_64-linux-gnu_nvidia_bug_report /usr/lib/nvidia-$NV_VER/bin/nvidia-bug-report.sh \ | |
--slave /usr/bin/nvidia-debugdump x86_64-linux-gnu_nvidia-debugdump /usr/lib/nvidia-$NV_VER/bin/nvidia-debugdump \ | |
--slave /usr/bin/nvidia-cuda-mps-control x86_64-linux-gnu_nvidia-cuda-mps-control /usr/lib/nvidia-$NV_VER/bin/nvidia-cuda-mps-control \ | |
--slave /usr/bin/nvidia-cuda-mps-server x86_64-linux-gnu_nvidia-cuda-mps-server /usr/lib/nvidia-$NV_VER/bin/nvidia-cuda-mps-server \ | |
--slave /usr/bin/nvidia-persistenced x86_64-linux-gnu_nvidia_persistenced /usr/lib/nvidia-$NV_VER/bin/nvidia-persistenced \ | |
--slave /usr/share/nvidia/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-rc x86_64-linux-gnu_nvidia_app_profile /usr/share/nvidia-$NV_VER/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-rc \ | |
--slave /usr/share/nvidia/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-key-documentation x86_64-linux-gnu_nvidia_app_profile_keys /usr/share/nvidia-$NV_VER/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-key-documentation \ | |
--slave /usr/lib/xorg/modules/drivers/nvidia_drv.so x86_64-linux-gnu_nvidia_drv /usr/lib/nvidia-$NV_VER/xorg/nvidia_drv.so \ | |
--slave /etc/modprobe.d/nvidia-graphics-drivers.conf x86_64-linux-gnu_nvidia_modconf /lib/nvidia-$NV_VER/modprobe.conf \ | |
--slave /usr/lib/x86_64-linux-gnu/xorg/extra-modules x86_64-linux-gnu_xorg_extra_modules /usr/lib/nvidia-$NV_VER/xorg \ | |
--slave /usr/lib/vdpau/libvdpau_nvidia.so.1 x86_64-linux-gnu_libvdpau_nvidia.so.1 /usr/lib/nvidia-$NV_VER/vdpau/libvdpau_nvidia.so.1 \ | |
--slave /usr/lib/libvdpau_nvidia.so x86_64-linux-gnu_libvdpau_nvidia.so /usr/lib/nvidia-$NV_VER/vdpau/libvdpau_nvidia.so \ | |
--slave /usr/lib32/vdpau/libvdpau_nvidia.so.1 x86_64-linux-gnu_libvdpau_nvidia.so.1_lib32 /usr/lib32/nvidia-$NV_VER/vdpau/libvdpau_nvidia.so.1 \ | |
--slave /usr/lib32/libvdpau_nvidia.so x86_64-linux-gnu_libvdpau_nvidia.so_lib32 /usr/lib32/nvidia-$NV_VER/vdpau/libvdpau_nvidia.so | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf x86_64-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER/ld.so.conf 8604 | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf x86_64-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER-prime/ld.so.conf 8603 \ | |
--slave /usr/share/man/man1/nvidia-xconfig.1.gz x86_64-linux-gnu_man_nvidiaxconfig.gz /usr/share/man/man1/alt-nvidia-$NV_VER-xconfig.1.gz \ | |
--slave /usr/share/man/man1/nvidia-smi.1.gz x86_64-linux-gnu_nvidia-smi.1.gz /usr/share/man/man1/alt-nvidia-$NV_VER-smi.1.gz \ | |
--slave /usr/bin/nvidia-smi x86_64-linux-gnu_nvidia_smi /usr/lib/nvidia-$NV_VER/bin/nvidia-smi \ | |
--slave /usr/bin/nvidia-xconfig x86_64-linux-gnu_nvidia_xconfig /usr/lib/nvidia-$NV_VER/bin/nvidia-xconfig \ | |
--slave /usr/bin/nvidia-bug-report.sh x86_64-linux-gnu_nvidia_bug_report /usr/lib/nvidia-$NV_VER/bin/nvidia-bug-report.sh \ | |
--slave /usr/bin/nvidia-debugdump x86_64-linux-gnu_nvidia-debugdump /usr/lib/nvidia-$NV_VER/bin/nvidia-debugdump \ | |
--slave /usr/share/nvidia/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-rc x86_64-linux-gnu_nvidia_app_profile /usr/share/nvidia-$NV_VER/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-rc \ | |
--slave /usr/share/nvidia/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-key-documentation x86_64-linux-gnu_nvidia_app_profile_keys /usr/share/nvidia-$NV_VER/nvidia-application-profiles-$NV_VER.$NV_MIN_VER-key-documentation \ | |
--slave /etc/modprobe.d/nvidia-graphics-drivers.conf x86_64-linux-gnu_nvidia_modconf /lib/nvidia-$NV_VER/modprobe.conf | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf x86_64-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER-prime/ld.so.conf 8603 | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/i386-linux-gnu_GL.conf i386-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER/alt_ld.so.conf 8604 | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf i386-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER/alt_ld.so.conf 8604 | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/i386-linux-gnu_GL.conf i386-linux-gnu_gl_conf /usr/lib/nvidia-$NV_VER-prime/alt_ld.so.conf 8603 | |
update-alternatives --force \ | |
--install /etc/ld.so.conf.d/i386-linux-gnu_EGL.conf i386-linux-gnu_egl_conf /usr/lib/nvidia-$NV_VER-prime/alt_ld.so.conf 8603 | |
update-alternatives --force \ | |
--install /usr/share/X11/xorg.conf.d/glamoregl.conf glamor_conf \ | |
/usr/share/nvidia-$NV_VER/glamor.conf 600 | |
fi | |
# echo ldconfig | |
ldconfig | |
echo starting gdm | |
systemctl start graphical.target |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment