mirror of https://gitlab.com/YuriAlek/vfio
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.9 KiB
Bash
84 lines
1.9 KiB
Bash
#!/bin/bash
|
|
|
|
## IOMMU groups
|
|
IOMMU_GPU=06:00.0
|
|
IOMMU_GPU_AUDIO=06:00.1
|
|
IOMMU_USB=07:00.3
|
|
IOMMU_AUDIO=08:00.3
|
|
|
|
## Virsh devices
|
|
VIRSH_GPU=pci_0000_06_00_0
|
|
VIRSH_GPU_AUDIO=pci_0000_06_00_1
|
|
VIRSH_USB=pci_0000_07_00_3
|
|
VIRSH_AUDIO=pci_0000_08_00_3
|
|
|
|
## PCI BUS ID
|
|
videoid="10de 1184"
|
|
audioid="10de 0e0a"
|
|
videobusid="0000:${IOMMU_GPU}"
|
|
audiobusid="0000:${IOMMU_GPU_AUDIO}"
|
|
|
|
## QEMU options
|
|
RAM=12G
|
|
|
|
## Ulimit
|
|
ULIMIT=$(ulimit -a | grep "max locked memory" | awk '{print $6}')
|
|
ULIMIT_TARGET=$(( $(echo $RAM | tr -d 'G') * 1048576 + 100000 ))
|
|
|
|
## Log file
|
|
LOG=/tmp/passthrough.log
|
|
|
|
## Virtual interface name
|
|
VIRTNAME=virt1
|
|
|
|
if [[ $1 == "win10" ]]; then
|
|
if [[ $2 == "prepare" ]]; then
|
|
## Memory lock limit
|
|
[[ $ULIMIT != $ULIMIT_TARGET ]] && ulimit -l $ULIMIT_TAGET
|
|
|
|
## Kill the Window Manager
|
|
killall i3 > /dev/null 2>&1
|
|
sleep 5
|
|
|
|
## Remove the framebuffer and console
|
|
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
|
|
|
|
## Detach the GPU and USB
|
|
virsh nodedev-detach $VIRSH_GPU >> $LOG 2>&1
|
|
virsh nodedev-detach $VIRSH_GPU_AUDIO >> $LOG 2>&1
|
|
virsh nodedev-detach $VIRSH_USB >> $LOG 2>&1
|
|
|
|
## Load vfio
|
|
modprobe vfio-pci
|
|
|
|
## Start the network
|
|
if [[ $(virsh net-list --all | grep $VIRTNET | awk '{print $2}') != "active" ]]; then
|
|
virsh net-start $VIRTNET
|
|
fi
|
|
|
|
fi
|
|
if [[ $2 == 'release' ]]; then
|
|
|
|
## Unload vfio module
|
|
modprobe -r vfio-pci
|
|
modprobe -r vfio_iommu_type1
|
|
modprobe -r vfio
|
|
|
|
## Reattach the GPU and USB
|
|
virsh nodedev-reattach $VIRSH_USB >> $LOG 2>&1
|
|
virsh nodedev-reattach $VIRSH_GPU_AUDIO >> $LOG 2>&1
|
|
virsh nodedev-reattach $VIRSH_GPU >> $LOG 2>&1
|
|
|
|
## Reload the framebuffer and console
|
|
echo 1 > /sys/class/vtconsole/vtcon0/bind
|
|
nvidia-xconfig --query-gpu-info > /dev/null 2>&1
|
|
echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind
|
|
|
|
## Restore ulimit
|
|
ulimit -l $ULIMIT
|
|
|
|
fi
|
|
fi
|