> +     /* Calculate total allocated mbufs */
> +     uint64_t total_allocated = 0;
> +     for (enum rte_mbuf_history_op op = RTE_MBUF_HISTORY_OP_LIB_ALLOC;
> +                     op < RTE_MBUF_HISTORY_OP_MAX; op++)
> +             total_allocated += stats[op];

I might be overly cautious here, but the app (or driver) might have a bug, and 
mark the mbuf with OP_APP_FREE (or OP_PMD_FREE) without actually freeing the 
mbuf back to the mempool.
So you should only trust the mempool library (OP_LIB_FREE) to mark the mbuf as 
actually freed. I.e. start the loop at op = RTE_MBUF_HISTORY_OP_LIB_FREE.
The app/driver should eventually call rte_mbuf_raw_free_bulk() or similar to 
release the mbuf back to the mempool.

> +/**
> + * History operation types.
> + */
> +enum rte_mbuf_history_op {
> +     RTE_MBUF_HISTORY_OP_NEVER     =  0, /**< Initial state - never
> allocated */
> +     RTE_MBUF_HISTORY_OP_LIB_FREE  =  1, /**< Freed back to pool */
> +     RTE_MBUF_HISTORY_OP_PMD_FREE  =  2, /**< Freed by PMD */
> +     RTE_MBUF_HISTORY_OP_APP_FREE  =  3, /**< Freed by application */
> +     /* With ops below, mbuf is considered allocated. */
> +     RTE_MBUF_HISTORY_OP_LIB_ALLOC =  4, /**< Allocation in mbuf
> library */
> +     RTE_MBUF_HISTORY_OP_PMD_ALLOC =  5, /**< Allocated by PMD for Rx
> */
> +     RTE_MBUF_HISTORY_OP_APP_ALLOC =  6, /**< Allocated by application
> */
> +     RTE_MBUF_HISTORY_OP_RX        =  7, /**< Received */
> +     RTE_MBUF_HISTORY_OP_TX        =  8, /**< Sent */
> +     RTE_MBUF_HISTORY_OP_TX_PREP   =  9, /**< Being prepared before Tx
> */
> +     RTE_MBUF_HISTORY_OP_TX_BUSY   = 10, /**< Returned due to Tx busy
> */
> +     RTE_MBUF_HISTORY_OP_ENQUEUE   = 11, /**< Enqueued for processing
> */
> +     RTE_MBUF_HISTORY_OP_DEQUEUE   = 12, /**< Dequeued for processing
> */
> +     /*                              13,      reserved for future */
> +     RTE_MBUF_HISTORY_OP_USR2      = 14, /**< Application-defined
> event 2 */
> +     RTE_MBUF_HISTORY_OP_USR1      = 15, /**< Application-defined
> event 1 */
> +     RTE_MBUF_HISTORY_OP_MAX       = 16, /**< Maximum number of
> operation types */
> +};

Reply via email to