Skip to content

Instantly share code, notes, and snippets.

@comjf
Created April 18, 2016 18:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save comjf/c6c96703d77e3ff5cb3dbc309d86d5cf to your computer and use it in GitHub Desktop.
Save comjf/c6c96703d77e3ff5cb3dbc309d86d5cf to your computer and use it in GitHub Desktop.
#!/bin/bash
# Get pci-id host GPU
host_gpu=$(lspci | grep "GTX 980" | awk 'NR==1{print $1;}')
host_gpu_audio=$(echo $host_gpu | sed -e 's/\.0$/.1/')
# Get pci-id/vendor-id/device-id guest GPU
guest_gpu=$(lspci | grep "GTX 980" | awk 'NR==2{print $1;}')
guest_gpu_vendor=$(cat /sys/bus/pci/devices/0000:$guest_gpu/vendor)
guest_gpu_device=$(cat /sys/bus/pci/devices/0000:$guest_gpu/device)
guest_gpu_audio=$(echo $guest_gpu | sed -e 's/\.0$/.1/')
guest_gpu_audio_vendor=$(cat /sys/bus/pci/devices/0000:$guest_gpu_audio/vendor)
guest_gpu_audio_device=$(cat /sys/bus/pci/devices/0000:$guest_gpu_audio/device)
# Get pci-id/vendor-id/device-id guest USB
usb_pci=$(lspci | grep "uPD720201" | head -1 | awk '{print $1;}')
usb_pci_vendor=$(cat /sys/bus/pci/devices/0000:$usb_pci/vendor)
usb_pci_device=$(cat /sys/bus/pci/devices/0000:$usb_pci/device)
# Get pci-id/vendor-id/device-id guest NIC
nic_pci=$(lspci | grep "I218-V" | head -1 | awk '{print $1;}')
nic_pci_vendor=$(cat /sys/bus/pci/devices/0000:$nic_pci/vendor)
nic_pci_device=$(cat /sys/bus/pci/devices/0000:$nic_pci/device)
# Set real driver for host GPU/GPU-audio
echo nvidia > /sys/bus/pci/devices/0000:$host_gpu/driver_override
echo snd-hda-intel > /sys/bus/pci/devices/0000:$host_gpu_audio/driver_override
# Set vfio-pci driver for guest GPU/GPU-audio/USB/NIC
echo vfio-pci > /sys/bus/pci/devices/0000:$guest_gpu/driver_override
echo vfio-pci > /sys/bus/pci/devices/0000:$guest_gpu_audio/driver_override
echo vfio-pci > /sys/bus/pci/devices/0000:$usb_pci/driver_override
echo vfio-pci > /sys/bus/pci/devices/0000:$nic_pci/driver_override
# Load vfio-pci kernel module
modprobe vfio-pci
# Set GPU/GPU-audio/USB/NIC vfio-pci id
echo $guest_gpu_vendor $guest_gpu_device > /sys/bus/pci/drivers/vfio-pci/new_id
echo $guest_gpu_audio_vendor $guest_gpu_audio_device > /sys/bus/pci/drivers/vfio-pci/new_id
echo $usb_pci_vendor $usb_pci_device > /sys/bus/pci/drivers/vfio-pci/new_id
echo $nic_pci_vendor $nic_pci_device > /sys/bus/pci/drivers/vfio-pci/new_id
# Unbind GPU/GPU-audio/USB/NIC real driver
echo 0000:$guest_gpu > /sys/bus/pci/devices/0000:$guest_gpu/driver/unbind
echo 0000:$guest_gpu_audio > /sys/bus/pci/devices/0000:$guest_gpu_audio/driver/unbind
echo 0000:$usb_pci > /sys/bus/pci/devices/0000:$usb_pci/driver/unbind
echo 0000:$nic_pci > /sys/bus/pci/devices/0000:$nic_pci/driver/unbind
# Bind GPU/GPU-audio/USB/NIC to vfio-pci
echo 0000:$guest_gpu > /sys/bus/pci/drivers/vfio-pci/bind
echo 0000:$guest_gpu_audio > /sys/bus/pci/drivers/vfio-pci/bind
echo 0000:$usb_pci > /sys/bus/pci/drivers/vfio-pci/bind
echo 0000:$nic_pci > /sys/bus/pci/drivers/vfio-pci/bind
# Load nvidia kernel module
modprobe nvidia
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment