On 16 June 2016 at 14:58, Ard Biesheuvel <ard.biesheu...@linaro.org> wrote: > On 2 June 2016 at 14:45, Alexander Graf <ag...@suse.de> wrote: >> On 02.06.16 14:32, Peter Maydell wrote: >>> This patch seems to change the property of the emulated PCIe controller >>> based on the host PCIe controller even if we're not doing any PCIe >>> passthrough at all. That seems definitely wrong to me. >>> >>> (Should the purely-emulated case be marked DMA-coherent anyway? >>> I forget the fiddly details...) >> >> I do too, let's involve a few people who know :). Not exposing it as >> coherent is definitely wrong, but whether "dma-coherent" is the right >> choice I don't know.
> As far as I understand it, the purely emulated case should be marked > DMA coherent, since otherwise, guest drivers may perform cache > maintenance that the host is not expecting. This is especially harmful > if the guest invalidates the caches after a device to memory transfer, > which may result in data being lost if the data was only present in > the caches to begin with (which is the case for devices that are > emulated by the host) So the consensus seems to be that: * emulated PCI devices definitely need dma-coherent * passthrough devices where the host controller is dma-coherent also need dma-coherent * passthrough devices where the host controller is not dma-coherent don't want dma-coherent, but we have to set things per-PCI-controller Would somebody like to write a patch which just unconditionally sets the dma-coherent property on our PCI controller dt node? That seems a clear improvement on what we have at the moment. We can look at whether we want to support passthrough from a non-dma-coherent host pci controller (via a 2nd guest pci controller?) later... thanks -- PMM