[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/7] virtio: use address_space_map/unmap to acce
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [PATCH 3/7] virtio: use address_space_map/unmap to access descriptors |
Date: |
Tue, 24 Jan 2017 17:06:57 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 |
On 24/01/2017 13:30, Stefan Hajnoczi wrote:
> On Fri, Jan 20, 2017 at 06:07:53PM +0100, Paolo Bonzini wrote:
>> @@ -455,10 +455,18 @@ void virtqueue_get_avail_bytes(VirtQueue *vq, unsigned
>> int *in_bytes,
>> goto err;
>> }
>>
>> - desc_pa = vq->vring.desc;
>> - vring_desc_read(vdev, &desc, desc_pa, i);
>> + len = max * sizeof(VRingDesc);
>> + desc_ptr = address_space_map(vdev->dma_as, vq->vring.desc, &len,
>> false);
>> + if (len < max * sizeof(VRingDesc)) {
>> + virtio_error(vdev, "Cannot map descriptor ring");
>> + goto err;
>> + }
>> +
>> + vring_desc_read(vdev, &desc, desc_ptr, i);
>>
>> if (desc.flags & VRING_DESC_F_INDIRECT) {
>> + address_space_unmap(vdev->dma_as, desc_ptr, len, false, 0);
>
> Missing "dest_ptr = NULL" to prevent double unmap if the next goto err
> is taken.
>
>> @@ -689,18 +706,33 @@ void *virtqueue_pop(VirtQueue *vq, size_t sz)
>> }
>>
>> i = head;
>> - vring_desc_read(vdev, &desc, desc_pa, i);
>> +
>> + len = max * sizeof(VRingDesc);
>> + desc_ptr = address_space_map(vdev->dma_as, vq->vring.desc, &len, false);
>> + if (len < max * sizeof(VRingDesc)) {
>> + virtio_error(vdev, "Cannot map descriptor ring");
>> + return NULL;
>
> desc_ptr still needs to be unmapped if non-NULL. The same applies
> below in virtqueue_pop().
>
I'll redo this patch to look a lot more like 4/7.
Paolo
- [Qemu-devel] [PATCH 0/7] virtio: use MemoryRegionCache for descriptors and rings, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 2/7] virtio: add virtio_*_phys_cached, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 1/7] virtio: make virtio_should_notify static, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 4/7] virtio: use MemoryRegionCache to access descriptors, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 3/7] virtio: use address_space_map/unmap to access descriptors, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 5/7] virtio: add MemoryListener to cache ring translations, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 6/7] virtio: use VRingMemoryRegionCaches for descriptor ring, Paolo Bonzini, 2017/01/20
- [Qemu-devel] [PATCH 7/7] virtio: use VRingMemoryRegionCaches for avail and used rings, Paolo Bonzini, 2017/01/20
- Re: [Qemu-devel] [PATCH 0/7] virtio: use MemoryRegionCache for descriptors and rings, Michael S. Tsirkin, 2017/01/20
- Re: [Qemu-devel] [PATCH 0/7] virtio: use MemoryRegionCache for descriptors and rings, Michael S. Tsirkin, 2017/01/24