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.

Reply via email to