On Fri, Jun 08, 2018 at 05:07:23PM +0800, Marvin Liu wrote:
[...]
>  
> @@ -634,6 +634,24 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev 
> *dev, uint16_t queue_idx)
>                       virtio_rxq_rearm_vec(rxvq);
>                       nbufs += RTE_VIRTIO_VPMD_RX_REARM_THRESH;
>               }
> +     } else if (hw->use_inorder_rx) {
> +             if ((!virtqueue_full(vq))) {
> +                     uint16_t free_cnt = vq->vq_free_cnt;
> +                     struct rte_mbuf *pkts[free_cnt];
> +
> +                     if (!rte_pktmbuf_alloc_bulk(rxvq->mpool, pkts, 
> free_cnt)) {
> +                             error = virtqueue_enqueue_inorder_refill(vq,
> +                                             pkts,
> +                                             free_cnt);
> +                             if (unlikely(error)) {
> +                                     for (i = 0; i < free_cnt; i++)
> +                                             rte_pktmbuf_free(pkts[i]);
> +                             }
> +                     }
> +
> +                     nbufs += free_cnt;
> +                     vq_update_avail_idx(vq);

It looks a bit weird to introduce above code
in this patch.

> +             }
>       } else {
>               while (!virtqueue_full(vq)) {
>                       m = rte_mbuf_raw_alloc(rxvq->mpool);
> diff --git a/drivers/net/virtio/virtqueue.c b/drivers/net/virtio/virtqueue.c
> index a7d0a9cbe..56a77cc71 100644
> --- a/drivers/net/virtio/virtqueue.c
> +++ b/drivers/net/virtio/virtqueue.c
> @@ -74,6 +74,14 @@ virtqueue_rxvq_flush(struct virtqueue *vq)
>                       desc_idx = used_idx;
>                       rte_pktmbuf_free(vq->sw_ring[desc_idx]);
>                       vq->vq_free_cnt++;
> +             } else if (hw->use_inorder_rx) {
> +                     desc_idx = (uint16_t)uep->id;
> +                     dxp = &vq->vq_descx[desc_idx];
> +                     if (dxp->cookie != NULL) {
> +                             rte_pktmbuf_free(dxp->cookie);
> +                             dxp->cookie = NULL;
> +                     }

Ditto.

> +                     vq_ring_free_inorder(vq, desc_idx, 1);
>               } else {
>                       desc_idx = (uint16_t)uep->id;
>                       dxp = &vq->vq_descx[desc_idx];
> -- 
> 2.17.0
> 

Reply via email to