On Wed, Sep 23, 2020 at 2:19 PM Alex Williamson <alex.william...@redhat.com> wrote:
> On Wed, 23 Sep 2020 13:08:10 -0700 > Maran Wilson <maran.wil...@gmail.com> wrote: > > > Just wanted to wrap up this thread by confirming what Alex said is true > (in > > case anyone else is interested in this topic in the future). After > enabling > > IOMMU tracing on the host I was able to confirm that IOMMU mappings were, > > in fact, being created properly to map the gPA to hPA of both devices' > BAR > > resources. > > > > It turns out that our hardware device provides a backdoor way of reading > > PCI config space via BAR mapped register space. The driver inside the VM > > was using that and thereby reading back the hPA of the BAR (and using > that > > to program the DMA controller). This sort of breaks the whole > pass-through > > model so I'll have to sort that out on the driver/device side to close > that > > loophole somehow so that the driver inside the VM is forced to use > standard > > Linux APIs to read PCI config space. That way KVM/Qemu can properly > > intercept the access and return the gPA values. > > Thanks for the follow-up! It sounds like another option for you might > be to virtualize those backdoor accesses like we do for GPUs that have > similar features. That could allow existing drivers to work > unmodified. If you're interested, take a look at hw/vfio/pci-quirks.c > in QEMU. We have generic support for both a VFIOConfigWindowQuirk, > where access to config space is through separate data and offset > registers, and a VFIOConfigMirrorQuirk, where a range of MMIO space > maps to config space. We just need to know the parameters to apply to > your device. The only downside to the virtualization is that we trap > MMIO accesses at page size granularity, so MMIO accesses within that > shared page would fault into QEMU to do a read or write rather than > make use of the direct access provided through an mmap. Thanks, > > Alex > Oh yeah. That's exactly what we have going on with our hardware. So if I'm understanding properly, we would just have to run with a patched version of Qemu on the host and the rest of the SW stack (kernel, vfio-pci driver, etc) can run as-is right? Thanks so much, -Maran
_______________________________________________ vfio-users mailing list vfio-users@redhat.com https://www.redhat.com/mailman/listinfo/vfio-users