On 25/01/2017 14:22, Stefan Hajnoczi wrote:
> On Tue, Jan 24, 2017 at 07:04:15PM +0100, Paolo Bonzini wrote:
>> @@ -689,18 +714,34 @@ void *virtqueue_pop(VirtQueue *vq, size_t sz)
>> }
>>
>> i = head;
>> - vring_desc_read(vdev, &desc, desc_pa, i);
>> +
>> + len = max * sizeof(VRingDesc);
>> + vring_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;
>
> Missing address_space_unmap() if vring_desc_ptr is non-NULL.
>
Will send v3 with just
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 1b421cb..7517f7c 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -719,7 +719,7 @@ void *virtqueue_pop(VirtQueue *vq, size_t sz)
vring_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;
+ goto done;
}
desc_ptr = vring_desc_ptr;
Paolo
signature.asc
Description: OpenPGP digital signature
