LINUX.ORG.RU

История изменений

Исправление 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.