[dpdk-dev] [PATCH v5 2/6] vhost: rewrite enqueue

Wang, Zhihong zhihong.wang at intel.com
Wed Sep 14 10:20:20 CEST 2016


> > +				desc_current =
> > +					vq->avail->ring[(vq->last_used_idx)
> &
> > +					(vq->size - 1)];
> > +				desc_chain_head = desc_current;
> > +				desc = &vq->desc[desc_current];
> > +				desc_addr = gpa_to_vva(dev, desc->addr);
> > +				if (unlikely(!desc_addr))
> > +					goto error;
> >
> > -			desc = &vq->desc[desc->next];
> > -			desc_addr = gpa_to_vva(dev, desc->addr);
> > -			if (unlikely(!desc_addr))
> > -				return -1;
> > -
> > -			desc_offset = 0;
> > -			desc_avail  = desc->len;
> > +				desc_chain_len = 0;
> > +				desc_offset = 0;
> As I commented on v3, there is code duplication between next flag, and
> mrg buf cases:
> desc_offset = 0;
> 
> and:
> 
> desc = &vq->desc[desc_current];
> desc_addr = gpa_to_vva(dev, desc->addr);
> if (unlikely(!desc_addr))
>      goto error;
> 

Do you mean to add something like:

static inline int __attribute__((always_inline))
get_desc(struct virtio_net *dev, struct vhost_virtqueue *vq,
                uint32_t desc_idx, struct vring_desc **desc,
                uint64_t *desc_addr)
{
        *desc = &vq->desc[desc_idx];
        *desc_addr = gpa_to_vva(dev, (*desc)->addr);
        if (unlikely(!(*desc_addr)))
                return -1;

        return 0;
}


> Regards,
> Maxime


More information about the dev mailing list