From patchwork Tue May 21 15:09:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Dybkowski, AdamX" X-Patchwork-Id: 53573 X-Patchwork-Delegate: gakhil@marvell.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 789AE5A6A; Tue, 21 May 2019 17:19:47 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id 75F525589; Tue, 21 May 2019 17:19:45 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 May 2019 08:19:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,495,1549958400"; d="scan'208";a="174051921" Received: from adamdybx-mobl.ger.corp.intel.com (HELO addy-VirtualBox.isw.intel.com) ([10.103.104.111]) by fmsmga002.fm.intel.com with ESMTP; 21 May 2019 08:19:42 -0700 From: Adam Dybkowski To: dev@dpdk.org, fiona.trahe@intel.com, tomaszx.jozwiak@intel.com, stable@dpdk.org Date: Tue, 21 May 2019 17:09:41 +0200 Message-Id: <20190521150941.12689-1-adamx.dybkowski@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [PATCH] compress/qat: fixed overflow status return from qat pmd X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch fixes fail status returned from compression PMD in case destination buffer size in not enough to store all data. Fixes: 3dc9ef2d23fe ("compress/qat: fix returned status on overflow") Signed-off-by: Adam Dybkowski --- drivers/compress/qat/qat_comp.c | 21 +++++++++++++++++++++ drivers/compress/qat/qat_comp.h | 2 ++ 2 files changed, 23 insertions(+) diff --git a/drivers/compress/qat/qat_comp.c b/drivers/compress/qat/qat_comp.c index dd0fe1b..ef6cda5 100644 --- a/drivers/compress/qat/qat_comp.c +++ b/drivers/compress/qat/qat_comp.c @@ -170,6 +170,19 @@ qat_comp_build_request(void *in_op, uint8_t *out_msg, rte_pktmbuf_mtophys_offset(op->m_dst, op->dst.offset); } + if (unlikely(rte_pktmbuf_pkt_len(op->m_dst) < QAT_MIN_OUT_BUF_SIZE)) { + /* QAT doesn't support dest. buffer lower + * than QAT_MIN_OUT_BUF_SIZE. Propagate error mark + * by converting this request to the null one + * and check the status in the response. + */ + QAT_DP_LOG(ERR, "QAT dest. buffer overflow"); + comp_req->comn_hdr.service_type = ICP_QAT_FW_COMN_REQ_NULL; + comp_req->comn_hdr.service_cmd_id = ICP_QAT_FW_NULL_REQ_SERV_ID; + op->status = RTE_COMP_OP_STATUS_OUT_OF_SPACE_TERMINATED; + } else + op->status = RTE_COMP_OP_STATUS_SUCCESS; + #if RTE_LOG_DP_LEVEL >= RTE_LOG_DEBUG QAT_DP_LOG(DEBUG, "Direction: %s", qat_xform->qat_comp_request_type == QAT_COMP_REQUEST_DECOMPRESS ? @@ -201,6 +214,14 @@ qat_comp_process_response(void **op, uint8_t *resp, uint64_t *dequeue_err_count) sizeof(struct icp_qat_fw_comp_resp)); #endif + if (unlikely(rx_op->status != RTE_COMP_OP_STATUS_SUCCESS)) { + ++(*dequeue_err_count); + rx_op->debug_status = + *((uint16_t *)(&resp_msg->comn_resp.comn_error)); + *op = (void *)rx_op; + return 0; + } + if (likely(qat_xform->qat_comp_request_type != QAT_COMP_REQUEST_DECOMPRESS)) { if (unlikely(ICP_QAT_FW_COMN_HDR_CNV_FLAG_GET( diff --git a/drivers/compress/qat/qat_comp.h b/drivers/compress/qat/qat_comp.h index 1312ee9..aadf01e 100644 --- a/drivers/compress/qat/qat_comp.h +++ b/drivers/compress/qat/qat_comp.h @@ -24,6 +24,8 @@ /* fallback to fixed compression threshold */ #define QAT_FALLBACK_THLD ((uint32_t)(RTE_PMD_QAT_COMP_IM_BUFFER_SIZE / 1.1)) +#define QAT_MIN_OUT_BUF_SIZE 47 + enum qat_comp_request_type { QAT_COMP_REQUEST_FIXED_COMP_STATELESS, QAT_COMP_REQUEST_DYNAMIC_COMP_STATELESS,