[dpdk-users] Issue with mlx5_rxtx.c while calling rte_eth_tx_burst() in DPDK 18.11

Arvind Narayanan webguru2688 at gmail.com
Mon Apr 22 06:59:49 CEST 2019


I am running into a weird problem when using rte_eth_tx_burst() using mlx5
in dpdk 18.11, running on Ubuntu 18.04 LTS (using Mellanox Connect X5 100G
EN).

Here is a simplified snippet.

==================
#define MAX_BATCHES 64
#define MAX_BURST_SIZE 64

struct batch {
    struct rte_mbuf *mbufs[MAX_BURST_SIZE]; // array of packets
    int num_mbufs; // num of mbufs
    int queue; // outgoing tx_queue
    int port; // outgoing port
}

struct batch * batches[MAX_BATCHES];

/* dequeue a number of batches */
int batch_count = rte_ring_sc_dequeue_bulk(some_rte_ring, (void **)
&(batches), MAX_BATCHES, NULL);

/* transmit out all pkts from every batch */
if (likely(batch_count > 0)) {
    for (i = 0; i < batch_count; i++) {
        ret = rte_eth_tx_burst(batches[i]->port, batches[i]->queue, (struct
rte_mbuf **) batches[i]->mbufs,
                               batches[i]->num_mbufs);
    }
}

==================

At rte_eth_tx_burst(), I keep getting an error saying:
myapp: /home/arvind/dpdk/drivers/net/mlx5/mlx5_rxtx.c:1652: uint16_t
txq_burst_empw(struct mlx5_txq_data *, struct rte_mbuf **, uint16_t):
Assertion `length == DATA_LEN(buf)' failed.
OR
myapp: /home/arvind/dpdk/drivers/net/mlx5/mlx5_rxtx.c:1609: uint16_t
txq_burst_empw(struct mlx5_txq_data *, struct rte_mbuf **, uint16_t):
Assertion `length == DATA_LEN(buf)' failed.

I have debugged and ensured all the mbuf counts (at least in my code) are
good. All the memory references to the mbufs also look good. However, I am
not sure why Mellanox driver would complain.

I have also tried to play with mlx5_rxtx.c by changing above lines to
something like
assert(length == pkts_n); // pkts_n is an argument passed to the func.
Didn't help.

Any thoughts?

Thanks,
Arvind


More information about the users mailing list