On Thu, Apr 21, 2011 at 11:39:22AM +0200, Alexander Graf wrote: > On 21.04.2011, at 09:03, David Gibson wrote: [snip] > > @@ -934,6 +939,8 @@ echo " --enable-docs enable documentation > > build" > > echo " --disable-docs disable documentation build" > > echo " --disable-vhost-net disable vhost-net acceleration support" > > echo " --enable-vhost-net enable vhost-net acceleration support" > > +echo " --disable-iommu disable IOMMU emulation support" > > +echo " --enable-vhost-net enable IOMMU emulation support" > > eeh?
Oops, copy and paste error. Fix in my tree now. [snip] > > +#else > > +struct DMAMmu { > > + DeviceState *iommu; > > + DMATranslateFunc *translate; > > + QLIST_HEAD(memory_maps, DMAMemoryMap) memory_maps; > > +}; > > + > > +struct DMADevice { > > How exactly is this going to be used? Well, the guts of the dma layer is not my work, so I can't really answer that. > Also, in the end I think that > most devices should just go through a PCI specific interface that > then calls the DMA helpers: > > pci_memory_rw(PCIDevice *d, ...) > > even if it's only as simple as calling > > dma_memory_rw(d->iommu, ...) So, I was actually thinking it would make most sense to have an iommu pointer in *every* qdev, PCI or otherwise, so that we just use dma_memory_rw(qdev, ...) everywhere. Obviously a NULL iommu pointer would fall back to no translation. -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson