История изменений
Исправление soomrack, (текущая версия) :
Мои заметки (правда для AMD):
ВНИМАНИЕ!
* root шину не пробрасывать — "vfio: Cannot reset device , no available reset mechanism"
dmesg | grep AMD-Vi
* AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
* AMD-Vi: Lazy IO/TLB flushing enabled
* AMD-Vi: Initialized for Passthrough Mode
Опции kernel — НИЧЕГО ВРОДЕ НЕ НУЖНО, но если что, пробовать это:
* iommu=pt iommu=1 amd_iommu=fullflush
* vfio_iommu_type1.allow_unsafe_interrupts=1
IOMMU
* dmesg | grep iommu | grep group
Скрипт:
#!/bin/sh
echo '0000:05:00.0' | tee '/sys/bus/pci/devices/0000:05:00.0/driver/unbind'
echo '0000:05:00.1' | tee '/sys/bus/pci/devices/0000:05:00.1/driver/unbind'
echo '1002 679a' | tee /sys/bus/pci/drivers/vfio-pci/new_id
echo '1002 aaa0' | tee /sys/bus/pci/drivers/vfio-pci/new_id
ls -hal /dev/vfio
qemu-system-x86_64
-device vfio-pci,host=00:14.2,addr=12.0
Видеокарта:
-----------
Проблемы (ati-drivers: 15.9-r1, kernel: 4.3.3):
(dmesg) vfio-pci 0000:05:00.1: Refused to change power state, currently in D3
* ATI Sapphire 11196-19-20G HD 7950
* ATI Gigabyte GV-R787OC-2GD HD 7870
* ATI Gigabyte GV-R785OC-1GD HD 7850
* ATI (какая-то древняя)
Работает:
* NVidia EVGA GTX 480
* GIGABYTE GV-N960G1 GAMING-2GD, GTX 960
С ядра 4.1, pci-stub не нужен, можно напрямую добавлять в vfio-pci
vfio-cpi
--------
1. /etc/modprobe.d/qemu.conf
# Reserve hardware with vfio_pci for guest
install nvidia /sbin/modprobe vfio_pci; /sbin/modprobe --ignore-install nvidia
install snd_hda_intel /sbin/modprobe vfio_pci; /sbin/modprobe --ignore-install snd_hda_intel
install vfio_pci /etc/modprobe.d/sh/qemu.sh
2. /etc/modprobe.d/sh/qemu.sh
#!/bin/sh
sleep 10
# reserve videocard and soundcard for guest
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:05:00.0/driver_override'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:05:00.1/driver_override'
# reserve usb for guest
echo '0000:02:00.0' > '/sys/bus/pci/devices/0000:02:00.0/driver/unbind'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:02:00.0/driver_override'
echo '0000:06:00.0' > '/sys/bus/pci/devices/0000:06:00.0/driver/unbind'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:06:00.0/driver_override'
# modprobe vfio-pci should be before all other modprobe
/sbin/modprobe --ignore-install vfio_pci
3. /etc/udev/rules.d/99-qemu.rules
GROUP="kvm", MODE="0660", ACTION=="add", DEVPATH=="/devices/virtual/misc/vhost-net"
GROUP="kvm", MODE="0660", ACTION=="add", DEVPATH=="/devices/virtual/vfio/20"
4. /etc/rc.conf (ulimits -a)
rc_ulimit="-l unlimited"
qemu-system-x86_64 -vga none -nographics
pci-assign
----------
С ядра 4.2 не работает.
dmesg:
[ 1097.172000] pci 0000:05:00.0: kvm assign device failed ret -22
This happens when kvm calls iommu_attach_device(), which was changed in
v4.2 to fail with -EINVAL (-22) when the device is part of a
non-singleton iommu group. Legacy kvm device assignment is not iommu
group aware and has been deprecated for some time.
Исходная версия soomrack, :
Мои заметки:
ВНИМАНИЕ!
* root шину не пробрасывать — "vfio: Cannot reset device , no available reset mechanism"
dmesg | grep AMD-Vi
* AMD-Vi: Enabling IOMMU at 0000:00:00.2 cap 0x40
* AMD-Vi: Lazy IO/TLB flushing enabled
* AMD-Vi: Initialized for Passthrough Mode
Опции kernel — НИЧЕГО ВРОДЕ НЕ НУЖНО, но если что, пробовать это:
* iommu=pt iommu=1 amd_iommu=fullflush
* vfio_iommu_type1.allow_unsafe_interrupts=1
IOMMU
* dmesg | grep iommu | grep group
Скрипт:
#!/bin/sh
echo '0000:05:00.0' | tee '/sys/bus/pci/devices/0000:05:00.0/driver/unbind'
echo '0000:05:00.1' | tee '/sys/bus/pci/devices/0000:05:00.1/driver/unbind'
echo '1002 679a' | tee /sys/bus/pci/drivers/vfio-pci/new_id
echo '1002 aaa0' | tee /sys/bus/pci/drivers/vfio-pci/new_id
ls -hal /dev/vfio
qemu-system-x86_64
-device vfio-pci,host=00:14.2,addr=12.0
Видеокарта:
-----------
Проблемы (ati-drivers: 15.9-r1, kernel: 4.3.3):
(dmesg) vfio-pci 0000:05:00.1: Refused to change power state, currently in D3
* ATI Sapphire 11196-19-20G HD 7950
* ATI Gigabyte GV-R787OC-2GD HD 7870
* ATI Gigabyte GV-R785OC-1GD HD 7850
* ATI (какая-то древняя)
Работает:
* NVidia EVGA GTX 480
* GIGABYTE GV-N960G1 GAMING-2GD, GTX 960
С ядра 4.1, pci-stub не нужен, можно напрямую добавлять в vfio-pci
vfio-cpi
--------
1. /etc/modprobe.d/qemu.conf
# Reserve hardware with vfio_pci for guest
install nvidia /sbin/modprobe vfio_pci; /sbin/modprobe --ignore-install nvidia
install snd_hda_intel /sbin/modprobe vfio_pci; /sbin/modprobe --ignore-install snd_hda_intel
install vfio_pci /etc/modprobe.d/sh/qemu.sh
2. /etc/modprobe.d/sh/qemu.sh
#!/bin/sh
sleep 10
# reserve videocard and soundcard for guest
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:05:00.0/driver_override'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:05:00.1/driver_override'
# reserve usb for guest
echo '0000:02:00.0' > '/sys/bus/pci/devices/0000:02:00.0/driver/unbind'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:02:00.0/driver_override'
echo '0000:06:00.0' > '/sys/bus/pci/devices/0000:06:00.0/driver/unbind'
echo 'vfio-pci' > '/sys/bus/pci/devices/0000:06:00.0/driver_override'
# modprobe vfio-pci should be before all other modprobe
/sbin/modprobe --ignore-install vfio_pci
3. /etc/udev/rules.d/99-qemu.rules
GROUP="kvm", MODE="0660", ACTION=="add", DEVPATH=="/devices/virtual/misc/vhost-net"
GROUP="kvm", MODE="0660", ACTION=="add", DEVPATH=="/devices/virtual/vfio/20"
4. /etc/rc.conf (ulimits -a)
rc_ulimit="-l unlimited"
qemu-system-x86_64 -vga none -nographics
pci-assign
----------
С ядра 4.2 не работает.
dmesg:
[ 1097.172000] pci 0000:05:00.0: kvm assign device failed ret -22
This happens when kvm calls iommu_attach_device(), which was changed in
v4.2 to fail with -EINVAL (-22) when the device is part of a
non-singleton iommu group. Legacy kvm device assignment is not iommu
group aware and has been deprecated for some time.