pdump: free mbuf in bulk
[dpdk.git] / lib / librte_pdump / rte_pdump.c
index 8a01ac5..3c11bd7 100644 (file)
@@ -14,8 +14,9 @@
 
 #define DEVICE_ID_SIZE 64
 
+RTE_LOG_REGISTER(pdump_logtype, lib.pdump, NOTICE);
+
 /* Macro for printing using RTE_LOG */
-static int pdump_logtype;
 #define PDUMP_LOG(level, fmt, args...)                         \
        rte_log(RTE_LOG_ ## level, pdump_logtype, "%s(): " fmt, \
                __func__, ## args)
@@ -92,11 +93,11 @@ pdump_copy(struct rte_mbuf **pkts, uint16_t nb_pkts, void *user_params)
 
        ring_enq = rte_ring_enqueue_burst(ring, (void *)dup_bufs, d_pkts, NULL);
        if (unlikely(ring_enq < d_pkts)) {
+               unsigned int drops = d_pkts - ring_enq;
+
                PDUMP_LOG(DEBUG,
                        "only %d of packets enqueued to ring\n", ring_enq);
-               do {
-                       rte_pktmbuf_free(dup_bufs[ring_enq]);
-               } while (++ring_enq < d_pkts);
+               rte_pktmbuf_free_bulk(&dup_bufs[ring_enq], drops);
        }
 }
 
@@ -380,7 +381,7 @@ pdump_validate_ring_mp(struct rte_ring *ring, struct rte_mempool *mp)
                rte_errno = EINVAL;
                return -1;
        }
-       if (ring->prod.single || ring->cons.single) {
+       if (rte_ring_is_prod_single(ring) || rte_ring_is_cons_single(ring)) {
                PDUMP_LOG(ERR, "ring with either SP or SC settings"
                " is not valid for pdump, should have MP and MC settings\n");
                rte_errno = EINVAL;
@@ -560,10 +561,3 @@ rte_pdump_disable_by_deviceid(char *device_id, uint16_t queue,
 
        return ret;
 }
-
-RTE_INIT(pdump_log)
-{
-       pdump_logtype = rte_log_register("lib.pdump");
-       if (pdump_logtype >= 0)
-               rte_log_set_level(pdump_logtype, RTE_LOG_NOTICE);
-}