vhost-dpdk: dequeue size fix
Burst size for DPDK is 32, which is different from VLIB_FRAME_SIZE. A loop is needed to dequeue all packets. Change-Id: Ie611c58c4e3434251a47fe6ad1f38abcb85180cb Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
This commit is contained in:

committed by
Damjan Marion

parent
07515d7aae
commit
692581faf8
@ -92,12 +92,20 @@ dpdk_rx_burst ( dpdk_main_t * dm, dpdk_device_t * xd, u16 queue_id)
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
n_buffers = rte_vhost_dequeue_burst(&xd->vu_vhost_dev, offset + VIRTIO_TXQ,
|
||||
bm->pktmbuf_pools[socket_id],
|
||||
xd->rx_vectors[queue_id], VLIB_FRAME_SIZE);
|
||||
struct rte_mbuf **pkts = xd->rx_vectors[queue_id];
|
||||
while (n_left) {
|
||||
n_this_chunk = rte_vhost_dequeue_burst(&xd->vu_vhost_dev,
|
||||
offset + VIRTIO_TXQ,
|
||||
bm->pktmbuf_pools[socket_id],
|
||||
pkts + n_buffers,
|
||||
n_left);
|
||||
n_buffers += n_this_chunk;
|
||||
n_left -= n_this_chunk;
|
||||
if (n_this_chunk == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
int i; u32 bytes = 0;
|
||||
struct rte_mbuf **pkts = xd->rx_vectors[queue_id];
|
||||
for (i = 0; i < n_buffers; i++) {
|
||||
struct rte_mbuf *buff = pkts[i];
|
||||
bytes += rte_pktmbuf_data_len(buff);
|
||||
|
Reference in New Issue
Block a user