From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fiona Trahe Subject: [PATCH v2 15/16] compress/qat: prevent device usage if incorrect firmware Date: Thu, 5 Jul 2018 17:05:29 +0100 Message-ID: <1530806730-11822-16-git-send-email-fiona.trahe@intel.com> References: <1527100807-30814-1-git-send-email-fiona.trahe@intel.com> Cc: pablo.de.lara.guarch@intel.com, fiona.trahe@intel.com, tomaszx.jozwiak@intel.com To: dev@dpdk.org Return-path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 760221BFB8 for ; Thu, 5 Jul 2018 18:06:05 +0200 (CEST) In-Reply-To: <1527100807-30814-1-git-send-email-fiona.trahe@intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Previous check only causes op to fail on dequeue. This extends so once first fail is detected, application can no longer enqueue ops to the device and will also get an appropriate error if trying to reconfigure or setup the device. Change-Id: Ie196fbaa0ab09ecdf5dfb8e4c3059b3d437a53a6 Signed-off-by: Tomasz Jozwiak --- drivers/compress/qat/qat_comp_pmd.c | 57 ++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c index 4ff1518..89b7ad6 100644 --- a/drivers/compress/qat/qat_comp_pmd.c +++ b/drivers/compress/qat/qat_comp_pmd.c @@ -250,6 +250,61 @@ qat_comp_pmd_dequeue_op_burst(void *qp, struct rte_comp_op **ops, } +static uint16_t +qat_comp_pmd_enq_deq_dummy_op_burst(void *qp __rte_unused, + struct rte_comp_op **ops __rte_unused, + uint16_t nb_ops __rte_unused) +{ + QAT_DP_LOG(ERR, "QAT PMD detected wrong FW version !"); + return 0; +} + +static struct rte_compressdev_ops compress_qat_dummy_ops = { + + /* Device related operations */ + .dev_configure = NULL, + .dev_start = NULL, + .dev_stop = qat_comp_dev_stop, + .dev_close = qat_comp_dev_close, + .dev_infos_get = NULL, + + .stats_get = NULL, + .stats_reset = qat_comp_stats_reset, + .queue_pair_setup = NULL, + .queue_pair_release = qat_comp_qp_release, + + /* Compression related operations */ + .private_xform_create = NULL, + .private_xform_free = qat_comp_private_xform_free +}; + +static uint16_t +qat_comp_pmd_dequeue_frst_op_burst(void *qp, struct rte_comp_op **ops, + uint16_t nb_ops) +{ + uint16_t ret = qat_dequeue_op_burst(qp, (void **)ops, nb_ops); + struct qat_qp *tmp_qp = (struct qat_qp *)qp; + + if (ret) { + if ((*ops)->debug_status == + (uint64_t)ERR_CODE_QAT_COMP_WRONG_FW) { + tmp_qp->qat_dev->comp_dev->compressdev->enqueue_burst = + qat_comp_pmd_enq_deq_dummy_op_burst; + tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst = + qat_comp_pmd_enq_deq_dummy_op_burst; + + tmp_qp->qat_dev->comp_dev->compressdev->dev_ops = + &compress_qat_dummy_ops; + QAT_LOG(ERR, "QAT PMD detected wrong FW version !"); + + } else { + tmp_qp->qat_dev->comp_dev->compressdev->dequeue_burst = + qat_comp_pmd_dequeue_op_burst; + } + } + return ret; +} + static struct rte_compressdev_ops compress_qat_ops = { /* Device related operations */ @@ -300,7 +355,7 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) compressdev->dev_ops = &compress_qat_ops; compressdev->enqueue_burst = qat_comp_pmd_enqueue_op_burst; - compressdev->dequeue_burst = qat_comp_pmd_dequeue_op_burst; + compressdev->dequeue_burst = qat_comp_pmd_dequeue_frst_op_burst; compressdev->feature_flags = RTE_COMPDEV_FF_HW_ACCELERATED; -- 2.7.4