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

Maxime Coquelin maxime.coquelin at redhat.com
Thu Sep 15 18:35:35 CEST 2016


Hi,
On 09/14/2016 10:20 AM, Wang, Zhihong wrote:
>>> +				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;
> }

I meant, move this code after the if/else.
You can do it in a function if it is done elsewhere in the file.



More information about the dev mailing list