qemu-devel
[Top][All Lists]
Advanced

[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: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH 3/7] virtio: use address_space_map/unmap to access descriptors
Date: Tue, 24 Jan 2017 12:30:31 +0000
User-agent: Mutt/1.7.1 (2016-10-04)

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().

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]