[libvirt-users] PCI passthrough error

Jaap Winius jwinius at umrk.nl
Fri Mar 30 01:50:56 UTC 2012


Quoting Jaap Winius <jwinius at umrk.nl>:

>   error: internal error Process exited while reading console \
>          log output: char device redirected to /dev/pts/1
>   assigned_dev_pci_read: pread failed, ret = 0 errno = 2

It turns out this is a KVM bug related to the Linux 2.6.32-5-amd64  
kernel I was using with Debian squeeze. I fixed this by using Debian  
backports again to upgrade to the 3.2.0-0.bpo.2-amd64 kernel.  
Unfortunately, now when I try to get PCI passthrough to work I get this:

   error: Unable to read from monitor: Connection reset by peer

Actually, when I checked to see if it would still work without the PCI  
passthrough stuff I seemed to get no errors, but it wouldn't start  
either. Then I found this kvm error in the guest's log:

   memory_region_add_subregion_common: Assertion `!subregion->parent' failed.

Luckily, I found I could fix this by changing the machine type from  
pc-0.12 to pc-1.0 (I changed that with "virsh edit ..."). However, I  
still get the "Unable to read from monitor" error if I activate PCI  
passthrough, and I found some more in the guest's log too:

char device redirected to /dev/pts/1
PCI region 0 at address 0xfb207000 has size 0x400, which is not a  
multiple of 4K. You might experience some performance hit due to that.
No IOMMU found.  Unable to assign device "hostdev0"
kvm: -device  
pci-assign,host=00:1a.0,id=hostdev0,configfd=20,bus=pci.0,addr=0x5:  
Device 'pci-assign' could not be initialized
2012-03-30 00:49:58.209+0000: shutting down

No IOMMU?? But, this new 3.2.0-0.bpo.2-amd64 kernel says "Intel-IOMMU:  
enabled" (that's from dmesg) when the system boots up, so what am I  
missing here?

Well, whaddaya know. I did some more research on the chipset and found  
it to be an Intel BD82H61 PCH...

   http://ark.intel.com/products/52806/Intel-BD82H61-PCH

... which apparently does not support VT-d (have an IOMMU) after all.  
Doh! The BIOS does include a virtualization option, but I guess it's  
not about VT-d. I think what would have saved me a lot of time here  
(besides a better brain) is a simple way to test for the presence of  
an IOMMU, but I don't know of one.

Anyway I guess now it's USB passthrough or bust. Or get a board with an IOMMU.

Cheers,

Jaap




More information about the libvirt-users mailing list