[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface
From: |
Laszlo Ersek |
Subject: |
Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface |
Date: |
Wed, 22 Jul 2015 13:40:10 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0 |
On 07/22/15 13:30, Andrew Jones wrote:
> 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.
I'd just point the address registers (or the address fields in the
descriptor structure) to a block of normal guest RAM, before flipping
the appropriate bit in the MMIO register that actually fires off the
transfer.
... Seems like that should work, then. Thanks!
Laszlo
- [Qemu-devel] [RFC 0/7] fw_cfg dma interface, Marc Marí, 2015/07/21
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Kevin O'Connor, 2015/07/22
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Marc Marí, 2015/07/22
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Kevin O'Connor, 2015/07/22
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Laszlo Ersek, 2015/07/23
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Peter Maydell, 2015/07/23
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Laszlo Ersek, 2015/07/23
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Marc Marí, 2015/07/23
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Kevin O'Connor, 2015/07/23
- Re: [Qemu-devel] [RFC 2/7] fw_cfg dma interface, Stefan Hajnoczi, 2015/07/22
[Qemu-devel] [RFC 4/7] enable fw_cfg dma for arm virt, Marc Marí, 2015/07/21