On Tue, Jul 21, 2015 at 09:44:49PM +0200, Laszlo Ersek wrote: > On 07/21/15 18:03, Marc Marí wrote: > > +static void fw_cfg_dma_transfer(FWCfgState *s) > > +{ > > + dma_addr_t len; > > + uint8_t *ptr; > > + uint32_t i; > > + > > + if (s->dma_ctl & FW_CFG_DMA_CTL_ERROR) { > > + return; > > + } > > + if (!(s->dma_ctl & FW_CFG_DMA_CTL_READ)) { > > + return; > > + } > > + > > + while (s->dma_len > 0) { > > + len = s->dma_len; > > + ptr = dma_memory_map(s->dma_as, s->dma_addr, &len, > > + DMA_DIRECTION_FROM_DEVICE); > > + if (!ptr || !len) { > > + s->dma_ctl |= FW_CFG_DMA_CTL_ERROR; > > + return; > > + } > > + > > + for (i = 0; i < len; i++) { > > + ptr[i] = fw_cfg_read(s); > > + } > > + > > + s->dma_addr += i; > > + s->dma_len -= i; > > + dma_memory_unmap(s->dma_as, ptr, len, > > + DMA_DIRECTION_FROM_DEVICE, i); > > + } > > + s->dma_ctl = 0; > > +} > > On Aarch64 KVM, is this going to show the same cache coherence problems > as VGA memory access? >
Does the guest (AAVMF) need to map all regions it DMAs to/from as noncacheable? If so, then yes. If not, then I don't think it should map fw-cfg DMA regions that way. fw-cfg is a paravirt device, so I don't think we should have to treat it like a real one. drew