[PATCH v4 6/7] bbdev: add queue related warning and status information

Tom Rix trix at redhat.com
Wed Jul 6 20:57:01 CEST 2022


On 7/5/22 5:23 PM, Nicolas Chautru wrote:
> This allows to expose more information with regards to any
> queue related failure and warning which cannot be supported
> in existing API.
>
> Signed-off-by: Nicolas Chautru <nicolas.chautru at intel.com>
> ---
>   app/test-bbdev/test_bbdev_perf.c |  2 ++
>   lib/bbdev/rte_bbdev.c            | 21 +++++++++++++++++++++
>   lib/bbdev/rte_bbdev.h            | 34 ++++++++++++++++++++++++++++++++++
>   lib/bbdev/version.map            |  1 +
>   4 files changed, 58 insertions(+)
>
> diff --git a/app/test-bbdev/test_bbdev_perf.c b/app/test-bbdev/test_bbdev_perf.c
> index 1abda2d..653b21f 100644
> --- a/app/test-bbdev/test_bbdev_perf.c
> +++ b/app/test-bbdev/test_bbdev_perf.c
> @@ -4360,6 +4360,8 @@ typedef int (test_case_function)(struct active_device *ad,
>   	stats->dequeued_count = q_stats->dequeued_count;
>   	stats->enqueue_err_count = q_stats->enqueue_err_count;
>   	stats->dequeue_err_count = q_stats->dequeue_err_count;
> +	stats->enqueue_warning_count = q_stats->enqueue_warning_count;
> +	stats->dequeue_warning_count = q_stats->dequeue_warning_count;
>   	stats->acc_offload_cycles = q_stats->acc_offload_cycles;
>   
>   	return 0;
> diff --git a/lib/bbdev/rte_bbdev.c b/lib/bbdev/rte_bbdev.c
> index 28b105d..ddad464 100644
> --- a/lib/bbdev/rte_bbdev.c
> +++ b/lib/bbdev/rte_bbdev.c
> @@ -27,6 +27,8 @@
>   #define BBDEV_OP_TYPE_COUNT 6
>   /* Number of supported device status */
>   #define BBDEV_DEV_STATUS_COUNT 9
> +/* Number of supported enqueue status */
> +#define BBDEV_ENQ_STATUS_COUNT 4
>   
>   /* BBDev library logging ID */
>   RTE_LOG_REGISTER_DEFAULT(bbdev_logtype, NOTICE);
> @@ -723,6 +725,8 @@ struct rte_bbdev *
>   		stats->dequeued_count += q_stats->dequeued_count;
>   		stats->enqueue_err_count += q_stats->enqueue_err_count;
>   		stats->dequeue_err_count += q_stats->dequeue_err_count;
> +		stats->enqueue_warn_count += q_stats->enqueue_warn_count;
> +		stats->dequeue_warn_count += q_stats->dequeue_warn_count;
>   	}
>   	rte_bbdev_log_debug("Got stats on %u", dev->data->dev_id);
>   }
> @@ -1165,3 +1169,20 @@ struct rte_mempool *
>   	rte_bbdev_log(ERR, "Invalid device status");
>   	return NULL;
>   }
> +
> +const char *
> +rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status)
> +{
> +	static const char * const enq_sta_string[] = {
> +		"RTE_BBDEV_ENQ_STATUS_NONE",
> +		"RTE_BBDEV_ENQ_STATUS_QUEUE_FULL",
> +		"RTE_BBDEV_ENQ_STATUS_RING_FULL",
> +		"RTE_BBDEV_ENQ_STATUS_INVALID_OP",
> +	};
> +
> +	if (status < BBDEV_ENQ_STATUS_COUNT)
Single use of #define, could just be an array size check and remove the 
#define
> +		return enq_sta_string[status];
> +
> +	rte_bbdev_log(ERR, "Invalid enqueue status");
> +	return NULL;
> +}
> diff --git a/lib/bbdev/rte_bbdev.h b/lib/bbdev/rte_bbdev.h
> index ed528b8..b7ecf94 100644
> --- a/lib/bbdev/rte_bbdev.h
> +++ b/lib/bbdev/rte_bbdev.h
> @@ -224,6 +224,19 @@ struct rte_bbdev_queue_conf {
>   rte_bbdev_queue_stop(uint16_t dev_id, uint16_t queue_id);
>   
>   /**
> + * Flags indicate the reason why a previous enqueue may not have
> + * consumed all requested operations
> + * In case of multiple reasons the latter superdes a previous one
> + */
> +enum rte_bbdev_enqueue_status {
> +	RTE_BBDEV_ENQ_STATUS_NONE,             /**< Nothing to report */
> +	RTE_BBDEV_ENQ_STATUS_QUEUE_FULL,       /**< Not enough room in queue */
> +	RTE_BBDEV_ENQ_STATUS_RING_FULL,        /**< Not enough room in ring */
> +	RTE_BBDEV_ENQ_STATUS_INVALID_OP,       /**< Operation was rejected as invalid */
> +	RTE_BBDEV_ENQ_STATUS_PADDED_MAX = 6,   /**< Maximum enq status number including padding */
Pad to 8 like the other patch ?
> +};
> +
> +/**
>    * Flags indicate the status of the device
>    */
>   enum rte_bbdev_device_status {
> @@ -246,6 +259,12 @@ struct rte_bbdev_stats {
>   	uint64_t enqueue_err_count;
>   	/** Total error count on operations dequeued */
>   	uint64_t dequeue_err_count;
> +	/** Total warning count on operations enqueued */
> +	uint64_t enqueue_warn_count;
> +	/** Total warning count on operations dequeued */
> +	uint64_t dequeue_warn_count;
> +	/** Total enqueue status count based on rte_bbdev_enqueue_status enum */
> +	uint64_t enqueue_status_count[RTE_BBDEV_ENQ_STATUS_PADDED_MAX];
This element is not used in this patch, is it needed ?
>   	/** CPU cycles consumed by the (HW/SW) accelerator device to offload
>   	 *  the enqueue request to its internal queues.
>   	 *  - For a HW device this is the cycles consumed in MMIO write
> @@ -386,6 +405,7 @@ struct rte_bbdev_queue_data {
>   	void *queue_private;  /**< Driver-specific per-queue data */
>   	struct rte_bbdev_queue_conf conf;  /**< Current configuration */
>   	struct rte_bbdev_stats queue_stats;  /**< Queue statistics */
> +	enum rte_bbdev_enqueue_status enqueue_status; /**< Enqueue status when op is rejected */

This element is not used in this patch, is it needed ?

Tom

>   	bool started;  /**< Queue state */
>   };
>   
> @@ -938,6 +958,20 @@ typedef void (*rte_bbdev_cb_fn)(uint16_t dev_id,
>   const char*
>   rte_bbdev_device_status_str(enum rte_bbdev_device_status status);
>   
> +/**
> + * Converts queue status from enum to string
> + *
> + * @param status
> + *   Queue status as enum
> + *
> + * @returns
> + *  Queue status as string or NULL if op_type is invalid
> + *
> + */
> +__rte_experimental
> +const char*
> +rte_bbdev_enqueue_status_str(enum rte_bbdev_enqueue_status status);
> +
>   #ifdef __cplusplus
>   }
>   #endif
> diff --git a/lib/bbdev/version.map b/lib/bbdev/version.map
> index efae50b..1c06738 100644
> --- a/lib/bbdev/version.map
> +++ b/lib/bbdev/version.map
> @@ -44,6 +44,7 @@ EXPERIMENTAL {
>   	global:
>   
>   	rte_bbdev_device_status_str;
> +	rte_bbdev_enqueue_status_str;
>   	rte_bbdev_enqueue_fft_ops;
>   	rte_bbdev_dequeue_fft_ops;
>   	rte_bbdev_fft_op_alloc_bulk;



More information about the dev mailing list