From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 4C5BDA053A for ; Tue, 4 Aug 2020 07:20:37 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3BF1BF04; Tue, 4 Aug 2020 07:20:37 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 43AA6F04 for ; Tue, 4 Aug 2020 07:20:35 +0200 (CEST) IronPort-SDR: pGJAH1zp0NB833iATrcHG9nsUkjzzPN7x3EK956LuksUKlhzDkav97dDkVBnl7LJrudB559u/S 6ECdG/kHQqvA== X-IronPort-AV: E=McAfee;i="6000,8403,9702"; a="132311102" X-IronPort-AV: E=Sophos;i="5.75,432,1589266800"; d="scan'208";a="132311102" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2020 22:20:34 -0700 IronPort-SDR: STw4mnML73S/Eedi/xZBx3Lss79a7KKi84R2m+UWhZ4eGxE/8wJjtYnCHwtrdwkQG59h8QAQpx 1lw5O9IFmaVQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,432,1589266800"; d="scan'208";a="306217640" Received: from kaminskx-mobl1.ger.corp.intel.com (HELO akusztax-MOBL.ger.corp.intel.com) ([10.104.125.117]) by orsmga002.jf.intel.com with ESMTP; 03 Aug 2020 22:20:32 -0700 From: Arek Kusztal To: fiona.trahe@intel.com Cc: Arek Kusztal , stable@dpdk.org Date: Tue, 4 Aug 2020 07:17:05 +0200 Message-Id: <20200804051705.13964-3-arkadiuszx.kusztal@intel.com> X-Mailer: git-send-email 2.19.1.windows.1 In-Reply-To: <20200804051705.13964-1-arkadiuszx.kusztal@intel.com> References: <20200804051705.13964-1-arkadiuszx.kusztal@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] [19.11 v2 3/3] drivers/qat: add handling of capabilities in multi process X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" [ upstream commit 7788dceccb80b3a144942d79da81b9fa6e8134db ] Move qat capabilities data into a memzone where it can be shared by primary and secondary processes. Cc: stable@dpdk.org Signed-off-by: Arek Kusztal --- v2: - added checks for memzone in comp capability drivers/compress/qat/qat_comp_pmd.c | 35 ++++++++++++++++++++++++- drivers/compress/qat/qat_comp_pmd.h | 2 ++ drivers/crypto/qat/qat_asym_pmd.c | 27 +++++++++++++++++++ drivers/crypto/qat/qat_asym_pmd.h | 2 ++ drivers/crypto/qat/qat_sym_pmd.c | 52 +++++++++++++++++++++++++++++++++---- drivers/crypto/qat/qat_sym_pmd.h | 2 ++ 6 files changed, 114 insertions(+), 6 deletions(-) diff --git a/drivers/compress/qat/qat_comp_pmd.c b/drivers/compress/qat/qat_comp_pmd.c index 9aeb9db..cb25916 100644 --- a/drivers/compress/qat/qat_comp_pmd.c +++ b/drivers/compress/qat/qat_comp_pmd.c @@ -674,8 +674,11 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) .socket_id = qat_dev_instance->pci_dev->device.numa_node, }; char name[RTE_COMPRESSDEV_NAME_MAX_LEN]; + char capa_memz_name[RTE_COMPRESSDEV_NAME_MAX_LEN]; struct rte_compressdev *compressdev; struct qat_comp_dev_private *comp_dev; + const struct rte_compressdev_capabilities *capabilities; + uint64_t capa_size; snprintf(name, RTE_COMPRESSDEV_NAME_MAX_LEN, "%s_%s", qat_pci_dev->name, "comp"); @@ -705,6 +708,10 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; + snprintf(capa_memz_name, RTE_COMPRESSDEV_NAME_MAX_LEN, + "QAT_COMP_CAPA_GEN_%d", + qat_pci_dev->qat_dev_gen); + comp_dev = compressdev->data->dev_private; comp_dev->qat_dev = qat_pci_dev; comp_dev->compressdev = compressdev; @@ -713,14 +720,37 @@ qat_comp_dev_create(struct qat_pci_device *qat_pci_dev) case QAT_GEN1: case QAT_GEN2: case QAT_GEN3: - comp_dev->qat_dev_capabilities = qat_comp_gen_capabilities; + capabilities = qat_comp_gen_capabilities; + capa_size = sizeof(qat_comp_gen_capabilities); break; default: + capabilities = qat_comp_gen_capabilities; + capa_size = sizeof(qat_comp_gen_capabilities); QAT_LOG(DEBUG, "QAT gen %d capabilities unknown, default to GEN1", qat_pci_dev->qat_dev_gen); break; } + + comp_dev->capa_mz = rte_memzone_lookup(capa_memz_name); + if (comp_dev->capa_mz == NULL) { + comp_dev->capa_mz = rte_memzone_reserve(capa_memz_name, + capa_size, + rte_socket_id(), 0); + } + if (comp_dev->capa_mz == NULL) { + QAT_LOG(DEBUG, + "Error allocating memzone for capabilities, destroying PMD for %s", + name); + memset(&qat_dev_instance->comp_rte_dev, 0, + sizeof(qat_dev_instance->comp_rte_dev)); + rte_compressdev_pmd_destroy(compressdev); + return -EFAULT; + } + + memcpy(comp_dev->capa_mz->addr, capabilities, capa_size); + comp_dev->qat_dev_capabilities = comp_dev->capa_mz->addr; + qat_pci_dev->comp_dev = comp_dev; QAT_LOG(DEBUG, "Created QAT COMP device %s as compressdev instance %d", @@ -740,6 +770,9 @@ qat_comp_dev_destroy(struct qat_pci_device *qat_pci_dev) if (comp_dev == NULL) return 0; + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + rte_memzone_free(qat_pci_dev->comp_dev->capa_mz); + /* clean up any resources used by the device */ qat_comp_dev_close(comp_dev->compressdev); diff --git a/drivers/compress/qat/qat_comp_pmd.h b/drivers/compress/qat/qat_comp_pmd.h index 6979de1..bd5a64f 100644 --- a/drivers/compress/qat/qat_comp_pmd.h +++ b/drivers/compress/qat/qat_comp_pmd.h @@ -32,6 +32,8 @@ struct qat_comp_dev_private { /**< The device's pool for qat_comp_xforms */ struct rte_mempool *streampool; /**< The device's pool for qat_comp_streams */ + const struct rte_memzone *capa_mz; + /* Shared memzone for storing capabilities */ }; int diff --git a/drivers/crypto/qat/qat_asym_pmd.c b/drivers/crypto/qat/qat_asym_pmd.c index 9645104..7ac41f2 100644 --- a/drivers/crypto/qat/qat_asym_pmd.c +++ b/drivers/crypto/qat/qat_asym_pmd.c @@ -247,6 +247,7 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) .private_data_size = sizeof(struct qat_asym_dev_private) }; char name[RTE_CRYPTODEV_NAME_MAX_LEN]; + char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN]; struct rte_cryptodev *cryptodev; struct qat_asym_dev_private *internals; @@ -295,11 +296,35 @@ qat_asym_dev_create(struct qat_pci_device *qat_pci_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; + snprintf(capa_memz_name, RTE_CRYPTODEV_NAME_MAX_LEN, + "QAT_ASYM_CAPA_GEN_%d", + qat_pci_dev->qat_dev_gen); + internals = cryptodev->data->dev_private; internals->qat_dev = qat_pci_dev; internals->asym_dev_id = cryptodev->data->dev_id; internals->qat_dev_capabilities = qat_gen1_asym_capabilities; + internals->capa_mz = rte_memzone_lookup(capa_memz_name); + if (internals->capa_mz == NULL) { + internals->capa_mz = rte_memzone_reserve(capa_memz_name, + sizeof(qat_gen1_asym_capabilities), + rte_socket_id(), 0); + } + if (internals->capa_mz == NULL) { + QAT_LOG(DEBUG, + "Error allocating memzone for capabilities, destroying PMD for %s", + name); + rte_cryptodev_pmd_destroy(cryptodev); + memset(&qat_dev_instance->asym_rte_dev, 0, + sizeof(qat_dev_instance->asym_rte_dev)); + return -EFAULT; + } + + memcpy(internals->capa_mz->addr, qat_gen1_asym_capabilities, + sizeof(qat_gen1_asym_capabilities)); + internals->qat_dev_capabilities = internals->capa_mz->addr; + qat_pci_dev->asym_dev = internals; QAT_LOG(DEBUG, "Created QAT ASYM device %s as cryptodev instance %d", cryptodev->data->name, internals->asym_dev_id); @@ -315,6 +340,8 @@ qat_asym_dev_destroy(struct qat_pci_device *qat_pci_dev) return -ENODEV; if (qat_pci_dev->asym_dev == NULL) return 0; + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + rte_memzone_free(qat_pci_dev->asym_dev->capa_mz); /* free crypto device */ cryptodev = rte_cryptodev_pmd_get_dev( diff --git a/drivers/crypto/qat/qat_asym_pmd.h b/drivers/crypto/qat/qat_asym_pmd.h index 024a02d..3efb900 100644 --- a/drivers/crypto/qat/qat_asym_pmd.h +++ b/drivers/crypto/qat/qat_asym_pmd.h @@ -26,6 +26,8 @@ struct qat_asym_dev_private { /**< Device instance for this rte_cryptodev */ const struct rte_cryptodev_capabilities *qat_dev_capabilities; /* QAT device asymmetric crypto capabilities */ + const struct rte_memzone *capa_mz; + /* Shared memzone for storing capabilities */ }; uint16_t diff --git a/drivers/crypto/qat/qat_sym_pmd.c b/drivers/crypto/qat/qat_sym_pmd.c index e5267f3..b144037 100644 --- a/drivers/crypto/qat/qat_sym_pmd.c +++ b/drivers/crypto/qat/qat_sym_pmd.c @@ -27,6 +27,12 @@ static const struct rte_cryptodev_capabilities qat_gen2_sym_capabilities[] = { RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() }; +static const struct rte_cryptodev_capabilities qat_gen3_sym_capabilities[] = { + QAT_BASE_GEN1_SYM_CAPABILITIES, + QAT_EXTRA_GEN2_SYM_CAPABILITIES, + RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() +}; + static int qat_sym_qp_release(struct rte_cryptodev *dev, uint16_t queue_pair_id); @@ -249,8 +255,11 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) .private_data_size = sizeof(struct qat_sym_dev_private) }; char name[RTE_CRYPTODEV_NAME_MAX_LEN]; + char capa_memz_name[RTE_CRYPTODEV_NAME_MAX_LEN]; struct rte_cryptodev *cryptodev; struct qat_sym_dev_private *internals; + const struct rte_cryptodev_capabilities *capabilities; + uint64_t capa_size; /* * All processes must use same driver id so they can share sessions. @@ -307,24 +316,55 @@ qat_sym_dev_create(struct qat_pci_device *qat_pci_dev) if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; + snprintf(capa_memz_name, RTE_CRYPTODEV_NAME_MAX_LEN, + "QAT_SYM_CAPA_GEN_%d", + qat_pci_dev->qat_dev_gen); + internals = cryptodev->data->dev_private; internals->qat_dev = qat_pci_dev; internals->sym_dev_id = cryptodev->data->dev_id; switch (qat_pci_dev->qat_dev_gen) { case QAT_GEN1: - internals->qat_dev_capabilities = qat_gen1_sym_capabilities; + capabilities = qat_gen1_sym_capabilities; + capa_size = sizeof(qat_gen1_sym_capabilities); break; case QAT_GEN2: + capabilities = qat_gen2_sym_capabilities; + capa_size = sizeof(qat_gen2_sym_capabilities); + break; case QAT_GEN3: - internals->qat_dev_capabilities = qat_gen2_sym_capabilities; + capabilities = qat_gen3_sym_capabilities; + capa_size = sizeof(qat_gen3_sym_capabilities); break; default: QAT_LOG(DEBUG, - "QAT gen %d capabilities unknown, default to GEN2", - qat_pci_dev->qat_dev_gen); - break; + "QAT gen %d capabilities unknown", + qat_pci_dev->qat_dev_gen); + rte_cryptodev_pmd_destroy(cryptodev); + memset(&qat_dev_instance->sym_rte_dev, 0, + sizeof(qat_dev_instance->sym_rte_dev)); + return -(EINVAL); + } + internals->capa_mz = rte_memzone_lookup(capa_memz_name); + if (internals->capa_mz == NULL) { + internals->capa_mz = rte_memzone_reserve(capa_memz_name, + capa_size, + rte_socket_id(), 0); + } + if (internals->capa_mz == NULL) { + QAT_LOG(DEBUG, + "Error allocating memzone for capabilities, destroying PMD for %s", + name); + rte_cryptodev_pmd_destroy(cryptodev); + memset(&qat_dev_instance->sym_rte_dev, 0, + sizeof(qat_dev_instance->sym_rte_dev)); + return -EFAULT; } + + memcpy(internals->capa_mz->addr, capabilities, capa_size); + internals->qat_dev_capabilities = internals->capa_mz->addr; + qat_pci_dev->sym_dev = internals; QAT_LOG(DEBUG, "Created QAT SYM device %s as cryptodev instance %d", cryptodev->data->name, internals->sym_dev_id); @@ -340,6 +380,8 @@ qat_sym_dev_destroy(struct qat_pci_device *qat_pci_dev) return -ENODEV; if (qat_pci_dev->sym_dev == NULL) return 0; + if (rte_eal_process_type() == RTE_PROC_PRIMARY) + rte_memzone_free(qat_pci_dev->sym_dev->capa_mz); /* free crypto device */ cryptodev = rte_cryptodev_pmd_get_dev(qat_pci_dev->sym_dev->sym_dev_id); diff --git a/drivers/crypto/qat/qat_sym_pmd.h b/drivers/crypto/qat/qat_sym_pmd.h index 0c05453..c72725b 100644 --- a/drivers/crypto/qat/qat_sym_pmd.h +++ b/drivers/crypto/qat/qat_sym_pmd.h @@ -28,6 +28,8 @@ struct qat_sym_dev_private { /**< Device instance for this rte_cryptodev */ const struct rte_cryptodev_capabilities *qat_dev_capabilities; /* QAT device symmetric crypto capabilities */ + const struct rte_memzone *capa_mz; + /* Shared memzone for storing capabilities */ }; int -- 2.1.0