virt-manager PCI passthrough gives error "No IOMMU Found" even w/ Intel IOMMU enabled
Actually, I just found out that this processor supports VT-x but not VT-d, so I can't do IOMMU.
Related videos on Youtube
Comments
-
J. Taylor over 1 year
I am trying to set up PCI passthrough in virt-manager to grant my Debian Wheezy guest VM access to my laptop's Intel Centrino N wireless card.
The Debian default kernel has Intel IOMMU enabled, and I have passed
intel_iommu=on
to the kernel at boot (by editing/etc/default/grub
and settingGRUB_CMDLINE_LINUX="intel_iommu=on"
, and then runninggrub-update
) ...Looking at dmesg to verify that IOMMU is indeed enabled, I see:
[ 0.000000] Intel-IOMMU: enabled
...I tried following the instructions here, and used virsh to detach the PCI device before adding it to the VM (i.e.
virsh nodedev-detach pci_0000_01_00_0
) just to be sure.However, I cannot boot into the guest VM at all with PCI passthrough enabled for this wireless card, and I am getting the following error (from
/var/log/libvirt/libvirtd.log
):2014-09-22 04:45:19.325+0000: 2990: error : qemuMonitorOpenUnix:305 : failed to connect to monitor socket: No such process 2014-09-22 04:45:19.325+0000: 2990: error : qemuProcessWaitForMonitor:1593 : internal error process exited while connecting to monitor: char device redirected to /dev/pts/1 **No IOMMU found. Unable to assign device "hostdev0" kvm: -device pci-assign,host=01:00.0,id=hostdev0,configfd=22,bus=pci.0,addr=0x7: Device 'pci-assign' could not be initialized**
Here is the full output from
/var/log/libvirt/qemu/
:2014-09-22 04:10:47.002+0000: starting up LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/ QEMU_AUDIO_DRV=none /usr/bin/kvm -S -M pc-1.1 -cpu Nehalem,+rdtscp,+avx,+osxsave,+xsave,+tsc-deadline,+x2apic,+pdcm,+xtpr,+tm2,+est,+vmx,+ds_cpl,+monitor,+dtes64,+pclmuldq,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -enable-kvm -m 2500 -smp 4,sockets=4,cores=1,threads=1 -name DebianStableSandbox -uuid c18e2808-c98a-2b4d-54f1-00977d3ec1d2 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/DebianStableSandbox.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/lib/libvirt/images/DebianNET.img,if=none,id=drive-virtio-disk0,format=raw -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-1-0,readonly=on,format=raw -device ide-cd,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=21,id=hostnet0 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:c5:4a:a9,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -device pci-assign,host=01:00.0,id=hostdev0,configfd=22,bus=pci.0,addr=0x7 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 char device redirected to /dev/pts/1 No IOMMU found. Unable to assign device "hostdev0" kvm: -device pci-assign,host=01:00.0,id=hostdev0,configfd=22,bus=pci.0,addr=0x7: Device 'pci-assign' could not be initialized 2014-09-22 04:10:47.610+0000: shutting down
I think that the "failed to connect to monitor" message is somehow related. If I use virt-manager to add the wireless card as a PCI device, without first detaching it with
virsh nodedev-detach
(as mentioned above), then I get an error message from virt-manager saying:Error starting domain: Unable to read from monitor: Connection reset by peer Traceback (most recent call last): File "/usr/share/virt-manager/virtManager/asyncjob.py", line 45, in cb_wrapper callback(asyncjob, *args, **kwargs) File "/usr/share/virt-manager/virtManager/asyncjob.py", line 66, in tmpcb callback(*args, **kwargs) File "/usr/share/virt-manager/virtManager/domain.py", line 1114, in startup self._backend.create() File "/usr/lib/python2.7/dist-packages/libvirt.py", line 620, in create if ret == -1: raise libvirtError ('virDomainCreate() failed', dom=self) libvirtError: Unable to read from monitor: Connection reset by peer
... and all that shows up in
/var/log/libvirt/libvirtd.log
in this case is:2014-09-22 04:48:26.387+0000: 2985: error : qemuMonitorIORead:523 : Unable to read from monitor: Connection reset by peer
In case it is helpful, here is some of the relevant output from
lspci -v
:00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09) Subsystem: Dell Device 04d8 Flags: bus master, fast devsel, latency 0 Capabilities: [e0] Vendor Specific Information: Len=0c <?> Kernel driver in use: agpgart-intel 00:1c.0 PCI bridge: Intel Corporation 6 Series/C200 Series Chipset Family PCI Express Root Port 1 (rev b5) (prog-if 00 [Normal decode]) Flags: bus master, fast devsel, latency 0 Bus: primary=00, secondary=01, subordinate=01, sec-latency=0 Memory behind bridge: d1600000-d16fffff Capabilities: [40] Express Root Port (Slot+), MSI 00 Capabilities: [80] MSI: Enable- Count=1/1 Maskable- 64bit- Capabilities: [90] Subsystem: Dell Device 04d8 Capabilities: [a0] Power Management version 2 Kernel driver in use: pcieport 01:00.0 Network controller: Intel Corporation Centrino Wireless-N 1030 [Rainbow Peak] (rev 34) Subsystem: Intel Corporation Centrino Wireless-N 1030 BGN Flags: fast devsel, IRQ 16 Memory at d1600000 (64-bit, non-prefetchable) [size=8K] Capabilities: [c8] Power Management version 3 Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [e0] Express Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Capabilities: [140] Device Serial Number bc-77-37-ff-ff-0d-3f-90 Kernel driver in use: pci-stub
Also, just to be clear, I was able to boot into this VM fine before adding the wireless card as a PCI passthrough device, and once I remove it via virt-manager, everything goes back to working as usual.
Does anyone have any idea how to fix this? Thanks!
-
StrongBad over 9 yearsAre you sure your BIOS really supports IOMMU. The Xen wiki suggests that "there are many buggy BIOSes causing Xen to disable IO virtualization because of errors in the BIOS DMAR/ACPI tables."
-
J. Taylor over 9 yearsI am using a Core-i5 2410M processor, and my BIOS is Phoenix SecureCore Tiano ... I can't find any info one way or the other whether this BIOS supports IOMMU or not.
-
J. Taylor over 9 yearsActually, I just found out that this processor supports VT-x but not VT-d, so I can't do IOMMU.
-
William Levi over 5 yearsI want to know if the problem was solved by the author, as if the latest Linux version of the kernel suggested abolishing the KVM_ASSIGN mechanism and supporting only vfio
-
Amitav Pajni over 5 years@WilliamLevi The problem was solved by the author; he even posted an answer about it. If you read his answer, you will see his solution. Though it may or may not apply to you because your situation is different.
-