This code could be more concise. > +/* > + * Returns -1 on fail, 0 on success > + */
That is standard convention, and probably doesn't need a comment. > +static inline int > +vhost_enqueue_single_packed(struct virtio_net *dev, struct vhost_virtqueue > *vq, > + struct rte_mbuf *pkt, struct buf_vector *buf_vec, uint16_t *nr_descs) > +{ > + uint16_t nr_vec = 0; > + > + uint16_t avail_idx; > + uint16_t max_tries, tries = 0; > + > + uint16_t buf_id = 0; > + uint32_t len = 0; > + uint16_t desc_count; You don't need extra blank lines in declarations. > + > + uint32_t size = pkt->pkt_len + dev->vhost_hlen; > + avail_idx = vq->last_avail_idx; > + > + if (rxvq_is_mergeable(dev)) > + max_tries = vq->size - 1; > + else > + max_tries = 1; > + > + uint16_t num_buffers = 0; > + > + while (size > 0) { > + /* > + * if we tried all available ring items, and still > + * can't get enough buf, it means something abnormal > + * happened. > + */ > + if (unlikely(++tries > max_tries)) > + return -1; > + > + if (unlikely(fill_vec_buf_packed(dev, vq, > + avail_idx, &desc_count, > + buf_vec, &nr_vec, > + &buf_id, &len, > + VHOST_ACCESS_RW) < 0)) { > + return -1; > + } Brackets are not necessary on single statement return. > + len = RTE_MIN(len, size); > + > + size -= len; No need for blank line in between. > + > + avail_idx += desc_count; > + if (avail_idx >= vq->size) > + avail_idx -= vq->size; > + > + *nr_descs += desc_count; > + num_buffers += 1; > + } > + > + if (copy_mbuf_to_desc(dev, vq, pkt, > + buf_vec, nr_vec, > + num_buffers) < 0) { > + return 0; > + } > + > + return 0; > +} > + > +