From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C45BA459AA; Mon, 16 Sep 2024 09:57:39 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B4544025F; Mon, 16 Sep 2024 09:57:39 +0200 (CEST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mails.dpdk.org (Postfix) with ESMTP id D08C140041 for ; Mon, 16 Sep 2024 09:57:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1726473456; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:autocrypt:autocrypt; bh=5Xpr0ZbDkXbNVglSvN05jZqKjh0ItTNogpHn6t49pFw=; b=YK4fCa1aPtqcW6A3/2rW9T79KTY0x3FzEtqYNwgKVZApIIY7ORyEBmxW/ylHaPgZwJgtnN rDgXir47P0DYAxDEmeybnNyqknuq7UHk21eLk7ruo0enk7NUrgg6ouNuLUxiqL+ezps9+2 sE3BK2+2G0q1AeuUnhHF1OR0siDO7ew= Received: from mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-554-CV1Fk_zFPbePJEiGn07WSA-1; Mon, 16 Sep 2024 03:57:33 -0400 X-MC-Unique: CV1Fk_zFPbePJEiGn07WSA-1 Received: from mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.15]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 33E5419560A2; Mon, 16 Sep 2024 07:57:32 +0000 (UTC) Received: from [10.39.208.31] (unknown [10.39.208.31]) by mx-prod-int-02.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C0E3F1956086; Mon, 16 Sep 2024 07:57:29 +0000 (UTC) Message-ID: <4dd48a09-4212-48e3-865e-67c01add683d@redhat.com> Date: Mon, 16 Sep 2024 09:57:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 2/2] baseband/acc: improvement to logging mechanism To: "Chautru, Nicolas" , "dev@dpdk.org" Cc: "hemant.agrawal@nxp.com" , "Marchand, David" , "Vargas, Hernan" References: <20240829200624.38551-1-nicolas.chautru@intel.com> <20240829200624.38551-3-nicolas.chautru@intel.com> <7cb5ea2d-71d8-4eb9-b273-bd176a8373be@redhat.com> From: Maxime Coquelin Autocrypt: addr=maxime.coquelin@redhat.com; keydata= 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 Mwqu3GQ= In-Reply-To: X-Scanned-By: MIMEDefang 3.0 on 10.30.177.15 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 9/13/24 21:00, Chautru, Nicolas wrote: > Hi Maxime, > >> -----Original Message----- >> From: Maxime Coquelin >> Sent: Friday, September 13, 2024 7:18 AM >> To: Chautru, Nicolas ; dev@dpdk.org >> Cc: hemant.agrawal@nxp.com; Marchand, David >> ; Vargas, Hernan >> Subject: Re: [PATCH v2 2/2] baseband/acc: improvement to logging >> mechanism >> >> >> >> On 8/29/24 22:06, Nicolas Chautru wrote: >>> Support the new dev op to dump operations information related to a >>> given queue and information on previous errors detected by the driver >>> and tracked internally in PMD. >>> >>> Signed-off-by: Nicolas Chautru >>> --- >>> drivers/baseband/acc/acc_common.h | 37 +++++++++ >>> drivers/baseband/acc/rte_vrb_pmd.c | 128 +++++++++++++++++++++++----- >> - >>> 2 files changed, 138 insertions(+), 27 deletions(-) >>> >>> diff --git a/drivers/baseband/acc/acc_common.h >>> b/drivers/baseband/acc/acc_common.h >>> index e249f37e38..c8914b23e0 100644 >>> --- a/drivers/baseband/acc/acc_common.h >>> +++ b/drivers/baseband/acc/acc_common.h >>> @@ -149,6 +149,8 @@ >>> #define VRB2_VF_ID_SHIFT 6 >>> >>> #define ACC_MAX_FFT_WIN 16 >>> +#define ACC_MAX_LOGLEN 256 >>> +#define ACC_MAX_BUFFERLEN 256 >>> >>> extern int acc_common_logtype; >>> >>> @@ -646,8 +648,43 @@ struct __rte_cache_aligned acc_queue { >>> rte_iova_t fcw_ring_addr_iova; >>> int8_t *derm_buffer; /* interim buffer for de-rm in SDK */ >>> struct acc_device *d; >>> + char error_bufs[ACC_MAX_BUFFERLEN][ACC_MAX_LOGLEN]; /**< >> Buffer for >>> +error log. */ >> >> 65KB is quite big for each queues >> >> I don't see the point of all this, as errors are already logged using >> rte_bbdev_log. Only thing you miss is the queue/device info in curretn >> solution, no? > > The rte_bbdev_log is only for std_output which would be disabled by default for real time application so very limited usability. > Here we store the related information for the application to be able to retrieve themselves as required after the fact (not impacting real time). If you really care about realtime, then the objects should be saved in binary form, and post-processed into strings in the dump function. Doing this, no wasted CPU cycles in the datapath performing strings processing, and less memory wasted. > >> >>> + uint16_t error_head; /**< Head - Buffer for error log. */ >>> + uint16_t error_wrap; /**< Wrap Counter - Buffer for error log. */ >>> }; >>> >>> +/** >>> + * @brief Report error both through RTE logging and into internal driver >> memory. >>> + * >>> + * This function is used to log an error for a specific ACC queue and >> operation. >>> + * >>> + * @param q Pointer to the ACC queue. >>> + * @param op Pointer to the operation. >>> + * @param fmt Format string for the error message. >>> + * @param ... Additional arguments for the format string. >>> + */ >>> +__rte_format_printf(3, 4) >>> +static inline void >>> +acc_error_log(struct acc_queue *q, void *op, const char *fmt, ...) { >>> + va_list args, args2; >>> + >>> + va_start(args, fmt); >>> + va_copy(args2, args); >>> + rte_vlog(RTE_LOG_ERR, acc_common_logtype, fmt, args); >>> + vsnprintf(q->error_bufs[q->error_head], ACC_MAX_LOGLEN, fmt, >> args2); >>> + q->error_head++; >>> + snprintf(q->error_bufs[q->error_head], ACC_MAX_LOGLEN, >>> + "%s", rte_bbdev_ops_param_string(op, q->op_type)); >>> + q->error_head++; >>> + if (q->error_head == ACC_MAX_LOGLEN) { >>> + q->error_head = 0; >>> + q->error_wrap++; >>> + } >>> + va_end(args); >>> + va_end(args2); >>> +} >>> + >>> /* Write to MMIO register address */ >>> static inline void >>> mmio_write(void *addr, uint32_t value) diff --git >>> a/drivers/baseband/acc/rte_vrb_pmd.c >>> b/drivers/baseband/acc/rte_vrb_pmd.c >>> index 585dc49bd6..9d0145d09b 100644 >>> --- a/drivers/baseband/acc/rte_vrb_pmd.c >>> +++ b/drivers/baseband/acc/rte_vrb_pmd.c >>> @@ -1022,6 +1022,10 @@ vrb_queue_setup(struct rte_bbdev *dev, >> uint16_t queue_id, >>> q->mmio_reg_enqueue = RTE_PTR_ADD(d->mmio_base, >>> d->queue_offset(d->pf_device, q->vf_id, q->qgrp_id, q- >>> aq_id)); >>> >>> + /** initialize the error buffer. */ >>> + q->error_head = 0; >>> + q->error_wrap = 0; >>> + >>> rte_bbdev_log_debug( >>> "Setup dev%u q%u: qgrp_id=%u, vf_id=%u, aq_id=%u, >> aq_depth=%u, mmio_reg_enqueue=%p base %p\n", >>> dev->data->dev_id, queue_id, q->qgrp_id, q->vf_id, >> @@ -1434,6 >>> +1438,74 @@ vrb_queue_intr_disable(struct rte_bbdev *dev, uint16_t >> queue_id) >>> return 0; >>> } >>> >>> + >>> +static int >>> +vrb_queue_ops_dump(struct rte_bbdev *dev, uint16_t queue_id, FILE *f) >>> +{ >>> + struct acc_queue *q = dev->data->queues[queue_id].queue_private; >>> + struct rte_bbdev_dec_op *op; >>> + uint16_t start_err, end_err, i, int_nb; >>> + volatile union acc_info_ring_data *ring_data; >>> + uint16_t info_ring_head = q->d->info_ring_head; >>> + >>> + if (f == NULL) { >>> + rte_bbdev_log(ERR, "Invalid File input"); >>> + return -EINVAL; >>> + } >>> + >>> + /** Print generic information on queue status. */ >>> + fprintf(f, "Dump of operations %s on Queue %d by %s\n", >>> + rte_bbdev_op_type_str(q->op_type), queue_id, dev- >>> device->driver->name); >>> + fprintf(f, " AQ Enqueued %d Dequeued %d Depth %d - Available Enq >> %d Deq %d\n", >>> + q->aq_enqueued, q->aq_dequeued, q->aq_depth, >>> + acc_ring_avail_enq(q), acc_ring_avail_deq(q)); >>> + >>> + /** Print information captured in the error buffer. */ >>> + if (q->error_wrap == 0) { >>> + start_err = 0; >>> + end_err = q->error_head; >>> + } else { >>> + start_err = q->error_head; >>> + end_err = q->error_head + ACC_MAX_BUFFERLEN; >>> + } >>> + fprintf(f, "Error Buffer - Head %d Wrap %d\n", q->error_head, q- >>> error_wrap); >>> + for (i = start_err; i < end_err; ++i) >>> + fprintf(f, " %d\t%s", i, q->error_bufs[i % >> ACC_MAX_BUFFERLEN]); >>> + >>> + /** Print information captured in the info ring. */ >>> + if (q->d->info_ring != NULL) { >>> + fprintf(f, "Info Ring Buffer - Head %d\n", q->d- >>> info_ring_head); >>> + ring_data = q->d->info_ring + (q->d->info_ring_head & >> ACC_INFO_RING_MASK); >>> + while (ring_data->valid) { >>> + int_nb = int_from_ring(*ring_data, q->d- >>> device_variant); >>> + if ((int_nb < ACC_PF_INT_DMA_DL_DESC_IRQ) || ( >>> + int_nb > >> ACC_PF_INT_DMA_MLD_DESC_IRQ)) { >>> + fprintf(f, " InfoRing: ITR:%d Info:0x%x", >>> + int_nb, ring_data- >>> detailed_info); >>> + /* Initialize Info Ring entry and move forward. >> */ >>> + ring_data->valid = 0; >>> + } >>> + info_ring_head++; >>> + ring_data = q->d->info_ring + (info_ring_head & >> ACC_INFO_RING_MASK); >>> + } >>> + } >>> + >>> + fprintf(f, "Ring Content - Head %d Tail %d Depth %d\n", >>> + q->sw_ring_head, q->sw_ring_tail, q->sw_ring_depth); >>> + /** Print information about each operation in the software ring. */ >>> + for (i = 0; i < q->sw_ring_depth; ++i) { >>> + op = (q->ring_addr + i)->req.op_addr; >>> + if (op != NULL) >>> + fprintf(f, " %d\tn %d %s", >>> + i, (q->ring_addr + i)->req.numCBs, >>> + rte_bbdev_ops_param_string(op, q- >>> op_type)); >>> + } >>> + >>> + fprintf(f, "== End of File ==\n"); >>> + >>> + return 0; >>> +} >>> + >>> static const struct rte_bbdev_ops vrb_bbdev_ops = { >>> .setup_queues = vrb_setup_queues, >>> .intr_enable = vrb_intr_enable, >>> @@ -1443,7 +1515,8 @@ static const struct rte_bbdev_ops vrb_bbdev_ops >> = { >>> .queue_release = vrb_queue_release, >>> .queue_stop = vrb_queue_stop, >>> .queue_intr_enable = vrb_queue_intr_enable, >>> - .queue_intr_disable = vrb_queue_intr_disable >>> + .queue_intr_disable = vrb_queue_intr_disable, >>> + .queue_ops_dump = vrb_queue_ops_dump >>> }; >>> >>> /* PCI PF address map. */ >>> @@ -1680,7 +1753,7 @@ vrb_dma_desc_td_fill(struct rte_bbdev_dec_op >> *op, >>> uint32_t *in_offset, uint32_t *h_out_offset, >>> uint32_t *s_out_offset, uint32_t *h_out_length, >>> uint32_t *s_out_length, uint32_t *mbuf_total_left, >>> - uint32_t *seg_total_left, uint8_t r) >>> + uint32_t *seg_total_left, uint8_t r, struct acc_queue *q) >>> { >>> int next_triplet = 1; /* FCW already done. */ >>> uint16_t k; >>> @@ -1724,8 +1797,8 @@ vrb_dma_desc_td_fill(struct rte_bbdev_dec_op >> *op, >>> kw = RTE_ALIGN_CEIL(k + 4, 32) * 3; >>> >>> if (unlikely((*mbuf_total_left == 0) || (*mbuf_total_left < kw))) { >>> - rte_bbdev_log(ERR, >>> - "Mismatch between mbuf length and included >> CB sizes: mbuf len %u, cb len %u", >>> + acc_error_log(q, (void *)op, >>> + "Mismatch between mbuf length and included >> CB sizes: mbuf len %u, >>> +cb len %u\n", >>> *mbuf_total_left, kw); >>> return -1; >>> } >>> @@ -1735,8 +1808,8 @@ vrb_dma_desc_td_fill(struct rte_bbdev_dec_op >> *op, >>> check_bit(op->turbo_dec.op_flags, >>> RTE_BBDEV_TURBO_DEC_SCATTER_GATHER)); >>> if (unlikely(next_triplet < 0)) { >>> - rte_bbdev_log(ERR, >>> - "Mismatch between data to process and mbuf >> data length in bbdev_op: %p", >>> + acc_error_log(q, (void *)op, >>> + "Mismatch between data to process and mbuf >> data length in >>> +bbdev_op: %p\n", >>> op); >>> return -1; >>> } >>> @@ -1748,7 +1821,7 @@ vrb_dma_desc_td_fill(struct rte_bbdev_dec_op >> *op, >>> desc, h_output, *h_out_offset, >>> *h_out_length, next_triplet, >> ACC_DMA_BLKID_OUT_HARD); >>> if (unlikely(next_triplet < 0)) { >>> - rte_bbdev_log(ERR, >>> + acc_error_log(q, (void *)op, >>> "Mismatch between data to process and mbuf >> data length in bbdev_op: %p", >>> op); >>> return -1; >>> @@ -1760,7 +1833,7 @@ vrb_dma_desc_td_fill(struct rte_bbdev_dec_op >> *op, >>> /* Soft output. */ >>> if (check_bit(op->turbo_dec.op_flags, >> RTE_BBDEV_TURBO_SOFT_OUTPUT)) { >>> if (op->turbo_dec.soft_output.data == 0) { >>> - rte_bbdev_log(ERR, "Soft output is not defined"); >>> + acc_error_log(q, (void *)op, "Soft output is not >> defined\n"); >>> return -1; >>> } >>> if (check_bit(op->turbo_dec.op_flags, >>> @@ -1773,8 +1846,8 @@ vrb_dma_desc_td_fill(struct rte_bbdev_dec_op >> *op, >>> *s_out_offset, *s_out_length, next_triplet, >>> ACC_DMA_BLKID_OUT_SOFT); >>> if (unlikely(next_triplet < 0)) { >>> - rte_bbdev_log(ERR, >>> - "Mismatch between data to process >> and mbuf data length in bbdev_op: %p", >>> + acc_error_log(q, (void *)op, >>> + "Mismatch between data to process >> and mbuf data length in >>> +bbdev_op: %p\n", >>> op); >>> return -1; >>> } >>> @@ -1797,7 +1870,8 @@ vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op >> *op, >>> struct rte_mbuf **input, struct rte_mbuf *h_output, >>> uint32_t *in_offset, uint32_t *h_out_offset, >>> uint32_t *h_out_length, uint32_t *mbuf_total_left, >>> - uint32_t *seg_total_left, struct acc_fcw_ld *fcw, uint16_t >> device_variant) >>> + uint32_t *seg_total_left, struct acc_fcw_ld *fcw, uint16_t >> device_variant, >>> + struct acc_queue *q) >>> { >>> struct rte_bbdev_op_ldpc_dec *dec = &op->ldpc_dec; >>> int next_triplet = 1; /* FCW already done. */ @@ -1808,8 +1882,8 >> @@ >>> vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op *op, >>> if (device_variant == VRB1_VARIANT) { >>> if (check_bit(op->ldpc_dec.op_flags, >> RTE_BBDEV_LDPC_HARQ_4BIT_COMPRESSION) || >>> check_bit(op->ldpc_dec.op_flags, >> RTE_BBDEV_LDPC_SOFT_OUT_ENABLE)) { >>> - rte_bbdev_log(ERR, >>> - "VRB1 does not support the requested >> capabilities %x", >>> + acc_error_log(q, (void *)op, >>> + "VRB1 does not support the requested >> capabilities %x\n", You should not re-introduce "\n", David is currently working on getting rid off them all. >>> op->ldpc_dec.op_flags); >>> return -1; >>> } >>> @@ -1829,8 +1903,8 @@ vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op >> *op, >>> output_length = K - dec->n_filler - crc24_overlap; >>> >>> if (unlikely((*mbuf_total_left == 0) || (*mbuf_total_left < >> input_length))) { >>> - rte_bbdev_log(ERR, >>> - "Mismatch between mbuf length and included >> CB sizes: mbuf len %u, cb len %u", >>> + acc_error_log(q, (void *)op, >>> + "Mismatch between mbuf length and included >> CB sizes: mbuf len %u, >>> +cb len %u\n", >>> *mbuf_total_left, input_length); >>> return -1; >>> } >>> @@ -1842,15 +1916,15 @@ vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op >> *op, >>> RTE_BBDEV_LDPC_DEC_SCATTER_GATHER)); >>> >>> if (unlikely(next_triplet < 0)) { >>> - rte_bbdev_log(ERR, >>> - "Mismatch between data to process and mbuf >> data length in bbdev_op: %p", >>> + acc_error_log(q, (void *)op, >>> + "Mismatch between data to process and mbuf >> data length in >>> +bbdev_op: %p\n", >>> op); >>> return -1; >>> } >>> >>> if (check_bit(op->ldpc_dec.op_flags, >> RTE_BBDEV_LDPC_HQ_COMBINE_IN_ENABLE)) { >>> if (op->ldpc_dec.harq_combined_input.data == 0) { >>> - rte_bbdev_log(ERR, "HARQ input is not defined"); >>> + acc_error_log(q, (void *)op, "HARQ input is not >> defined\n"); >>> return -1; >>> } >>> h_p_size = fcw->hcin_size0 + fcw->hcin_size1; @@ -1859,7 >> +1933,7 >>> @@ vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op *op, >>> else if (fcw->hcin_decomp_mode == 4) >>> h_p_size = h_p_size / 2; >>> if (op->ldpc_dec.harq_combined_input.data == 0) { >>> - rte_bbdev_log(ERR, "HARQ input is not defined"); >>> + acc_error_log(q, (void *)op, "HARQ input is not >> defined\n"); >>> return -1; >>> } >>> acc_dma_fill_blk_type( >>> @@ -1882,7 +1956,7 @@ vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op >>> *op, >>> >>> if (check_bit(op->ldpc_dec.op_flags, >> RTE_BBDEV_LDPC_SOFT_OUT_ENABLE)) { >>> if (op->ldpc_dec.soft_output.data == 0) { >>> - rte_bbdev_log(ERR, "Soft output is not defined"); >>> + acc_error_log(q, (void *)op, "Soft output is not >> defined\n"); >>> return -1; >>> } >>> dec->soft_output.length = fcw->rm_e; @@ -1894,7 +1968,7 >> @@ >>> vrb_dma_desc_ld_fill(struct rte_bbdev_dec_op *op, >>> if (check_bit(op->ldpc_dec.op_flags, >>> >> RTE_BBDEV_LDPC_HQ_COMBINE_OUT_ENABLE)) { >>> if (op->ldpc_dec.harq_combined_output.data == 0) { >>> - rte_bbdev_log(ERR, "HARQ output is not defined"); >>> + acc_error_log(q, (void *)op, "HARQ output is not >> defined\n"); >>> return -1; >>> } >>> >>> @@ -2326,8 +2400,8 @@ vrb2_enqueue_ldpc_enc_one_op_tb(struct >> acc_queue *q, struct rte_bbdev_enc_op *op >>> in_length_in_bytes, &seg_total_left, next_triplet, >>> check_bit(enc->op_flags, >> RTE_BBDEV_LDPC_ENC_SCATTER_GATHER)); >>> if (unlikely(next_triplet < 0)) { >>> - rte_bbdev_log(ERR, >>> - "Mismatch between data to process and mbuf >> data length in bbdev_op: %p", >>> + acc_error_log(q, (void *)op, >>> + "Mismatch between data to process and mbuf >> data length in >>> +bbdev_op: %p\n", >>> op); >>> return -1; >>> } >>> @@ -2399,7 +2473,7 @@ enqueue_dec_one_op_cb(struct acc_queue *q, >> struct rte_bbdev_dec_op *op, >>> ret = vrb_dma_desc_td_fill(op, &desc->req, &input, h_output, >>> s_output, &in_offset, &h_out_offset, &s_out_offset, >>> &h_out_length, &s_out_length, &mbuf_total_left, >>> - &seg_total_left, 0); >>> + &seg_total_left, 0, q); >>> >>> if (unlikely(ret < 0)) >>> return ret; >>> @@ -2478,7 +2552,7 @@ vrb_enqueue_ldpc_dec_one_op_cb(struct >> acc_queue *q, struct rte_bbdev_dec_op *op, >>> ret = vrb_dma_desc_ld_fill(op, &desc->req, &input, h_output, >>> &in_offset, &h_out_offset, >>> &h_out_length, &mbuf_total_left, >>> - &seg_total_left, fcw, q->d->device_variant); >>> + &seg_total_left, fcw, q->d->device_variant, q); >>> if (unlikely(ret < 0)) >>> return ret; >>> } >>> @@ -2572,7 +2646,7 @@ vrb_enqueue_ldpc_dec_one_op_tb(struct >> acc_queue *q, struct rte_bbdev_dec_op *op, >>> h_output, &in_offset, &h_out_offset, >>> &h_out_length, >>> &mbuf_total_left, &seg_total_left, >>> - &desc->req.fcw_ld, q->d->device_variant); >>> + &desc->req.fcw_ld, q->d->device_variant, q); >>> >>> if (unlikely(ret < 0)) >>> return ret; >>> @@ -2658,7 +2732,7 @@ enqueue_dec_one_op_tb(struct acc_queue *q, >> struct rte_bbdev_dec_op *op, >>> ret = vrb_dma_desc_td_fill(op, &desc->req, &input, >>> h_output, s_output, &in_offset, >> &h_out_offset, >>> &s_out_offset, &h_out_length, >> &s_out_length, >>> - &mbuf_total_left, &seg_total_left, r); >>> + &mbuf_total_left, &seg_total_left, r, q); >>> >>> if (unlikely(ret < 0)) >>> return ret; >