test/distributor: collect return mbufs
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Sat, 17 Oct 2020 03:06:53 +0000 (05:06 +0200)
committerDavid Marchand <david.marchand@redhat.com>
Mon, 19 Oct 2020 08:57:17 +0000 (10:57 +0200)
During quit_workers function distributor's main core processes
some packets to wake up pending worker cores so they can quit.
As quit_workers acts also as a cleanup procedure for next test
case it should also collect these packets returned by workers'
handlers, so the cyclic buffer with returned packets
in distributor remains empty.

Fixes: c3eabff124e6 ("distributor: add unit tests")
Fixes: c0de0eb82e40 ("distributor: switch over to new API")
Cc: stable@dpdk.org
Signed-off-by: Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Acked-by: David Hunt <david.hunt@intel.com>
app/test/test_distributor.c

index 4343efe..3f0aeb7 100644 (file)
@@ -591,6 +591,7 @@ quit_workers(struct worker_params *wp, struct rte_mempool *p)
        const unsigned num_workers = rte_lcore_count() - 1;
        unsigned i;
        struct rte_mbuf *bufs[RTE_MAX_LCORE];
+       struct rte_mbuf *returns[RTE_MAX_LCORE];
        if (rte_mempool_get_bulk(p, (void *)bufs, num_workers) != 0) {
                printf("line %d: Error getting mbufs from pool\n", __LINE__);
                return;
@@ -606,6 +607,10 @@ quit_workers(struct worker_params *wp, struct rte_mempool *p)
        rte_distributor_flush(d);
        rte_eal_mp_wait_lcore();
 
+       while (rte_distributor_returned_pkts(d, returns, RTE_MAX_LCORE))
+               ;
+
+       rte_distributor_clear_returns(d);
        rte_mempool_put_bulk(p, (void *)bufs, num_workers);
 
        quit = 0;