LINUX.ORG.RU

Device 'vfio-pci' could not be initialized

 , , ,


0

1
 qemu-system-x86_64 -enable-kvm -M q35 -m 6024 -cpu host -smp 6,cores=6,threads=1,sockets=1 -bios /usr/share/seabios/bios.bin -vga none -device ioh3420,bus=pcie.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 -device piix4-ide,bus=pcie.0,id=piix4-ide -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on -device vfio-pci,host=01:00.1,bus=pcie.0 -drive file=/media/Putin/windows8_SSD,id=disk,format=raw -drive file=/media/gs/win/steam_storage,id=disk1 


grep -i 'vfio' /boot/config-4.5.0
CONFIG_VFIO_IOMMU_TYPE1=y
CONFIG_VFIO_VIRQFD=y
CONFIG_VFIO=y
CONFIG_VFIO_NOIOMMU=y
CONFIG_VFIO_PCI=y
CONFIG_VFIO_PCI_VGA=y
CONFIG_VFIO_PCI_MMAP=y
CONFIG_VFIO_PCI_INTX=y
CONFIG_KVM_VFIO=y

uname -a
Linux debian64 4.5.0 #2 SMP PREEMPT Thu Mar 24 16:57:10 MSK 2016 x86_64 GNU/Linux

dmesg
pci-stub 0000:00:14.2: claimed by stub
[ 1827.071951] pci-stub 0000:01:00.0: claimed by stub
[ 1846.064574] pci-stub 0000:01:00.1: claimed by stub
[ 2173.337538] pci-stub 0000:01:00.0: enabling device (0000 -> 0003)
[ 2174.807914] pci-stub 0000:01:00.0: kvm assign device failed ret -22
[ 2264.101375] kvm: zapping shadow pages for mmio generation wraparound

default/grub
GRUB_CMDLINE_LINUX_DEFAULT=«pci-stub.ids=1002:6819,1002:aab0,1002:4383 amd_iommu=on iommu=1 iommu_inclusive_mapping=1 iommu=pt amd_iommu=fullflush cpufreq=dom0-kernel console=xvc console=tty xen-pciback.passthrough=1 kvm-amd npt=0»

darkenshvein ★★★★★ ()

и вот ещё что пишет после запуска, извиняюсь, забыл добавить
qemu-system-x86_64: -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on: vfio: error opening /dev/vfio/15: No such file or directory

darkenshvein ★★★★★ ()
Ответ на: комментарий от anonymous

А ты девайсы забиндил на vfio? Или qemu автоматом это делает?

Биндить надо. У меня правило в udev вписаны.

matrixd ()
Ответ на: комментарий от anonymous

угу
echo «1002 6819» > /sys/bus/pci/drivers/pci-stub/new_id
echo «0000:01:00.0» > /sys/bus/pci/devices/0000\:01\:00.0/driver/unbind
echo «0000:01:00.0» > /sys/bus/pci/drivers/pci-stub/bind
ну и так далее

darkenshvein ★★★★★ ()
Ответ на: комментарий от matrixd

очевидно, тогда бы ланчер ругался на iommu?
[ 0.901801] AMD-Vi: Found IOMMU at 0000:00:00.2 cap 0x40
[ 0.901833] AMD-Vi: Interrupt remapping enabled
[ 0.901943] AMD-Vi: IO/TLB flush on unmap enabled
[ 0.901978] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[ 0.902013] software IO TLB [mem 0xaa261000-0xae261000] (64MB) mapped at [ffff8800aa261000-ffff8800ae260fff]

darkenshvein ★★★★★ ()
Ответ на: комментарий от darkenshvein

Э, это не то - ты девайс забиндил на pci-stub, а надо на vfio.

#!/bin/sh

for dev in $@; do
  vendor=$(cat /sys/bus/pci/devices/$dev/vendor)
  device=$(cat /sys/bus/pci/devices/$dev/device)
  if [ -e /sys/bus/pci/devices/$dev/driver ]; then
    echo $dev > /sys/bus/pci/devices/$dev/driver/unbind
  fi
  echo $vendor $device > /sys/bus/pci/drivers/vfio-pci/new_id
done

P.S. Начиная с какой-то версии ядра, в модуле vfio-pci добавили аналогичную pci-stub возможность биндить устройства при загрузке модуля (при загрузке ядра, если собрано статически).

anonymous ()

А зачем stub? На vfio вешать девайс надо.
Успешно пробрасывается видяха + usb контроллер для клавы и мышки:

# grep vfio /etc/default/grub  
GRUB_CMDLINE_LINUX_DEFAULT="vfio-pci.ids=10de:13c2,10de:0fbb,8086:1e26 intel_iommu=on,igfx_off"
#!/bin/sh

sudo QEMU_AUDIO_DRV=pa apulse qemu-system-x86_64 \
        -nodefaults \
        -nodefconfig \
        -nographic \
        -serial none \
        -parallel none \
        -name Windows7 \
        -machine pc,accel=kvm \
        -enable-kvm \
        -cpu host,kvm=off,check \
        -smp cpus=4,sockets=1,cores=4,threads=1 \
        -m 8G \
        -balloon virtio \
        -rtc base=localtime,clock=host \
        -drive if=pflash,format=raw,readonly,file=/home/leo/qemu/ovmf64/OVMF-pure-efi.fd \
        -drive if=pflash,format=raw,file=/home/leo/qemu/ovmf64/OVMF_VARS-pure-efi.fd \
        -soundhw hda \
        -net nic,vlan=0,model=virtio -net tap,vlan=0,ifname=tap0,script=no,downscript=no \
        -vga none \
        -device vfio-pci,host=01:00.0,multifunction=on \
        -device vfio-pci,host=01:00.1 \
        -device vfio-pci,host=00:1d.0 \
        -drive file=/home/leo/qemu/data/win7x64.img,if=virtio,format=raw,index=0,media=disk,cache=none,aio=native \
        -drive file=/home/leo/qemu/data/virtio-win-0.1.110.iso,if=ide,index=1,media=cdrom,readonly=on,format=raw \
        -boot order=c \
        -monitor stdio \
        "$@"

Lavos ★★★★★ ()
Ответ на: комментарий от anonymous

+ Lavos
Спасибо, даже в рц.локал не пришлось переписывать с вфио всё сразу подхватилось.

darkenshvein ★★★★★ ()
Ответ на: комментарий от darkenshvein

amd_iommu=on iommu=1 iommu_inclusive_mapping=1 iommu=pt

можешь дать источник инфы об этом, откуда это ты взял, зачем нужно всё остальное, если есть и работает iommu=pt ?

с осени виртуалку не запускал, всё забыл к херам.

то же самое)), вот по крупицам собираю свои старые посты и ответы другим, почти можно сказать восстановил.

kep ()
Ответ на: комментарий от kep

When RMRR address range is not in reserved memory (BIOS issue), can use 'iommu_inclusive_mapping=1' to work around it.
собственно, эта фича для vtd. возможно, стоит её отключить. хз. для обхода чего-то в памяти

darkenshvein ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.