baseband/acc100: check AQ availability
In some corner case to run more batch enqueue than
supported. A protection is required to avoid that corner case.
Enhance all ACC100 enqueue operations with check to see if there is room
in the atomic queue(AQ) for enqueueing batches into the queue manager.
Fixes: 5ad5060f8f
("baseband/acc100: add LDPC processing functions")
Cc: stable@dpdk.org
Signed-off-by: Hernan Vargas <hernan.vargas@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
This commit is contained in:
parent
c24d53b4cc
commit
2df5fe2023
@ -2983,7 +2983,8 @@ static uint16_t
|
||||
acc100_enqueue_enc(struct rte_bbdev_queue_data *q_data,
|
||||
struct rte_bbdev_enc_op **ops, uint16_t num)
|
||||
{
|
||||
if (unlikely(num == 0))
|
||||
int32_t aq_avail = acc_aq_avail(q_data, num);
|
||||
if (unlikely((aq_avail <= 0) || (num == 0)))
|
||||
return 0;
|
||||
if (ops[0]->turbo_enc.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK)
|
||||
return acc100_enqueue_enc_tb(q_data, ops, num);
|
||||
@ -2996,7 +2997,8 @@ static uint16_t
|
||||
acc100_enqueue_ldpc_enc(struct rte_bbdev_queue_data *q_data,
|
||||
struct rte_bbdev_enc_op **ops, uint16_t num)
|
||||
{
|
||||
if (unlikely(num == 0))
|
||||
int32_t aq_avail = acc_aq_avail(q_data, num);
|
||||
if (unlikely((aq_avail <= 0) || (num == 0)))
|
||||
return 0;
|
||||
if (ops[0]->ldpc_enc.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK)
|
||||
return acc100_enqueue_enc_tb(q_data, ops, num);
|
||||
@ -3164,8 +3166,11 @@ static uint16_t
|
||||
acc100_enqueue_dec(struct rte_bbdev_queue_data *q_data,
|
||||
struct rte_bbdev_dec_op **ops, uint16_t num)
|
||||
{
|
||||
if (unlikely(num == 0))
|
||||
int32_t aq_avail = acc_aq_avail(q_data, num);
|
||||
|
||||
if (unlikely((aq_avail <= 0) || (num == 0)))
|
||||
return 0;
|
||||
|
||||
if (ops[0]->turbo_dec.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK)
|
||||
return acc100_enqueue_dec_tb(q_data, ops, num);
|
||||
else
|
||||
@ -3177,11 +3182,9 @@ static uint16_t
|
||||
acc100_enqueue_ldpc_dec(struct rte_bbdev_queue_data *q_data,
|
||||
struct rte_bbdev_dec_op **ops, uint16_t num)
|
||||
{
|
||||
struct acc_queue *q = q_data->queue_private;
|
||||
int32_t aq_avail = q->aq_depth +
|
||||
(q->aq_dequeued - q->aq_enqueued) / 128;
|
||||
int32_t aq_avail = acc_aq_avail(q_data, num);
|
||||
|
||||
if (unlikely((aq_avail == 0) || (num == 0)))
|
||||
if (unlikely((aq_avail <= 0) || (num == 0)))
|
||||
return 0;
|
||||
|
||||
if (ops[0]->ldpc_dec.code_block_mode == RTE_BBDEV_TRANSPORT_BLOCK)
|
||||
@ -3190,7 +3193,6 @@ acc100_enqueue_ldpc_dec(struct rte_bbdev_queue_data *q_data,
|
||||
return acc100_enqueue_ldpc_dec_cb(q_data, ops, num);
|
||||
}
|
||||
|
||||
|
||||
/* Dequeue one encode operations from ACC100 device in CB mode */
|
||||
static inline int
|
||||
dequeue_enc_one_op_cb(struct acc_queue *q, struct rte_bbdev_enc_op **ref_op,
|
||||
|
Loading…
Reference in New Issue
Block a user