I've just spent a day or so trying to track down why PCI passthrough
of a virtio-blk-pci device wasn't working. The problem turns out to be
that by default virtio pci devices don't use the IOMMU, even when the
machine model has created an IOMMU and arranged for the PCI bus to
be underneath it. So when the L2 guest tries to program the virtio device,
the virtio device treats the IPAs it writes as if they were PAs and
of course the data structures it's looking for aren't there.

Why do we default this to 'off'? It seems pretty unhelpful not to
honour the existence of the IOMMU, and the failure mode is pretty
opaque (L2 guest just hangs)...

thanks
-- PMM

Reply via email to