From: Akhil Goyal <gakhil@marvell.com>
To: Ciara Power <ciara.power@intel.com>, "dev@dpdk.org" <dev@dpdk.org>
Cc: "roy.fan.zhang@intel.com" <roy.fan.zhang@intel.com>,
"piotrx.bronowski@intel.com" <piotrx.bronowski@intel.com>,
Pablo de Lara <pablo.de.lara.guarch@intel.com>,
Anatoly Burakov <anatoly.burakov@intel.com>
Subject: Re: [dpdk-dev] [EXT] [PATCH v3 02/10] crypto/ipsec_mb: add multiprocess support
Date: Wed, 6 Oct 2021 14:01:10 +0000 [thread overview]
Message-ID: <CO6PR18MB44845FA1DBC9E0863140CDA5D8B09@CO6PR18MB4484.namprd18.prod.outlook.com> (raw)
In-Reply-To: <20210929163035.608387-3-ciara.power@intel.com>
> The ipsec_mb SW PMD now has multiprocess support.
> The queue-pair IMB_MGR is stored in a memzone instead of being allocated
> externally by the Intel IPSec MB library, when v1.1 is used.
> If v1.0 is used, multi process is not supported, and allocation is
> done as before.
> The secondary process needs to reconfigure the queue-pair to allow for
> IMB_MGR function pointers be updated.
>
> Intel IPsec MB library version 1.1 is required for this support.
>
> Signed-off-by: Ciara Power <ciara.power@intel.com>
> ---
> doc/guides/rel_notes/release_21_11.rst | 7 ++
> .../crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c | 110 +++++++++++++++---
> .../ipsec_mb/rte_ipsec_mb_pmd_private.h | 5 +
Missed to comment on first patch.
rte_ may be skipped from the internal files of the PMD.
rte_ is normally added for files which are exposed to the user.
> 3 files changed, 106 insertions(+), 16 deletions(-)
>
> diff --git a/doc/guides/rel_notes/release_21_11.rst
> b/doc/guides/rel_notes/release_21_11.rst
> index 43d367bcad..3c9d7e19cb 100644
> --- a/doc/guides/rel_notes/release_21_11.rst
> +++ b/doc/guides/rel_notes/release_21_11.rst
> @@ -62,6 +62,13 @@ New Features
> * Added bus-level parsing of the devargs syntax.
> * Kept compatibility with the legacy syntax as parsing fallback.
>
> +* **Added multi-process support for IPsec-mb PMD.**
> +
> + Added multi-process support to IPsec-mb PMD, which will add support
> + for PMDs that are moved to use this shared framework.
> + This feature makes use of an intel-ipsec-mb API found in v1.1,
> + which is the minimum required version to use this multi-process support.
> +
I believe first new PMD framework should be introduced in the release note and
a sub bullet may be added to specify multi process support.
> * **Updated Marvell cnxk crypto PMD.**
>
> * Added AES-CBC SHA1-HMAC support in lookaside protocol (IPsec) for
> CN10K.
> diff --git a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c
> b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c
> index 1146297216..c7bcfd3dce 100644
> --- a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c
> +++ b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_ops.c
> @@ -9,6 +9,8 @@
>
> #include "rte_ipsec_mb_pmd_private.h"
>
> +#define IMB_MP_REQ_VER_STR "1.1.0"
> +
> /** Configure device */
> int
> ipsec_mb_pmd_config(__rte_unused struct rte_cryptodev *dev,
> @@ -98,10 +100,20 @@ ipsec_mb_pmd_qp_release(struct rte_cryptodev
> *dev, uint16_t qp_id)
> struct ipsec_mb_qp *qp = dev->data->queue_pairs[qp_id];
> struct rte_ring *r = NULL;
>
> - if (qp != NULL) {
> + if (qp != NULL && rte_eal_process_type() == RTE_PROC_PRIMARY) {
> r = rte_ring_lookup(qp->name);
> if (r)
> rte_ring_free(r);
> +
> +#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM
> + if (qp->mb_mgr)
> + free_mb_mgr(qp->mb_mgr);
> +#else
> + if (qp->mb_mgr_mz) {
> + rte_memzone_free(qp->mb_mgr_mz);
> + qp->mb_mgr = NULL;
> + }
> +#endif
> rte_free(qp);
> dev->data->queue_pairs[qp_id] = NULL;
> }
> @@ -154,6 +166,42 @@ static struct rte_ring
> RING_F_SP_ENQ | RING_F_SC_DEQ);
> }
>
> +#if IMB_VERSION(1, 1, 0) <= IMB_VERSION_NUM
> +static IMB_MGR *
> +ipsec_mb_pmd_alloc_mb_from_memzone(const struct rte_memzone
> **mb_mgr_mz,
> + const char *mb_mgr_mz_name)
> +{
> + IMB_MGR *mb_mgr;
> +
> + if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
> + *mb_mgr_mz = rte_memzone_lookup(mb_mgr_mz_name);
> + if (*mb_mgr_mz == NULL) {
> + *mb_mgr_mz =
> rte_memzone_reserve(mb_mgr_mz_name,
> + imb_get_mb_mgr_size(),
> + rte_socket_id(), 0);
> + }
> + if (*mb_mgr_mz == NULL) {
> + IPSEC_MB_LOG(DEBUG, "Error allocating memzone
> for %s",
> + mb_mgr_mz_name);
> + return NULL;
> + }
> + mb_mgr = imb_set_pointers_mb_mgr((*mb_mgr_mz)->addr,
> 0, 1);
> + init_mb_mgr_auto(mb_mgr, NULL);
> + } else {
> + *mb_mgr_mz = rte_memzone_lookup(mb_mgr_mz_name);
> + if (*mb_mgr_mz == NULL) {
> + IPSEC_MB_LOG(ERR,
> + "Secondary can't find %s mz, did primary
> create it?",
> + mb_mgr_mz_name);
> + return NULL;
> + }
> + mb_mgr = imb_set_pointers_mb_mgr((*mb_mgr_mz)->addr,
> 0, 0);
> + init_mb_mgr_auto(mb_mgr, NULL);
> + }
> + return mb_mgr;
> +}
> +#endif
> +
> /** Setup a queue pair */
> int
> ipsec_mb_pmd_qp_setup(struct rte_cryptodev *dev, uint16_t qp_id,
> @@ -167,16 +215,44 @@ ipsec_mb_pmd_qp_setup(struct rte_cryptodev
> *dev, uint16_t qp_id,
> uint32_t qp_size;
> int ret = -1;
>
> - /* Free memory prior to re-allocation if needed. */
> - if (dev->data->queue_pairs[qp_id] != NULL)
> - ipsec_mb_pmd_qp_release(dev, qp_id);
> + if (rte_eal_process_type() == RTE_PROC_SECONDARY) {
> +#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM
> + IPSEC_MB_LOG(ERR, "The intel-ipsec-mb version (%s) does
> not support multiprocess,"
> + "the minimum version required for this
> feature is %s.",
> + IMB_VERSION_STR, IMB_MP_REQ_VER_STR);
> + return -EINVAL;
> +#endif
> + if (dev->data->queue_pairs[qp_id] != NULL)
> + qp = dev->data->queue_pairs[qp_id];
> + } else {
> + /* Free memory prior to re-allocation if needed. */
> + if (dev->data->queue_pairs[qp_id] != NULL)
> + ipsec_mb_pmd_qp_release(dev, qp_id);
> +
> + qp_size = sizeof(*qp) + pmd_data->qp_priv_size;
> + /* Allocate the queue pair data structure. */
> + qp = rte_zmalloc_socket("IPSEC PMD Queue Pair", qp_size,
> + RTE_CACHE_LINE_SIZE, socket_id);
> + if (qp == NULL)
> + return -ENOMEM;
> + }
> +
> +#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM
> + qp->mb_mgr = alloc_init_mb_mgr();
> +#else
> + char mz_name[IPSEC_MB_MAX_MZ_NAME];
> + snprintf(mz_name, sizeof(mz_name), "IMB_MGR_DEV_%d_QP_%d",
> + dev->data->dev_id, qp_id);
> + qp->mb_mgr = ipsec_mb_pmd_alloc_mb_from_memzone(&(qp-
> >mb_mgr_mz),
> + mz_name);
_pmd_ may be skipped from the internal APIs. The function names are pretty long.
> +#endif
> + if (qp->mb_mgr == NULL) {
> + ret = -ENOMEM;
> + goto qp_setup_cleanup;
> + }
>
> - qp_size = sizeof(*qp) + pmd_data->qp_priv_size;
> - /* Allocate the queue pair data structure. */
> - qp = rte_zmalloc_socket("IPSEC PMD Queue Pair", qp_size,
> - RTE_CACHE_LINE_SIZE, socket_id);
> - if (qp == NULL)
> - return -ENOMEM;
> + if (rte_eal_process_type() == RTE_PROC_SECONDARY)
> + return 0;
>
> qp->id = qp_id;
> dev->data->queue_pairs[qp_id] = qp;
> @@ -194,12 +270,6 @@ ipsec_mb_pmd_qp_setup(struct rte_cryptodev
> *dev, uint16_t qp_id,
> goto qp_setup_cleanup;
> }
>
> - qp->mb_mgr = alloc_init_mb_mgr();
> - if (!qp->mb_mgr) {
> - ret = -ENOMEM;
> - goto qp_setup_cleanup;
> - }
> -
> memset(&qp->stats, 0, sizeof(qp->stats));
>
> if (pmd_data->queue_pair_configure) {
> @@ -211,8 +281,15 @@ ipsec_mb_pmd_qp_setup(struct rte_cryptodev
> *dev, uint16_t qp_id,
> return 0;
>
> qp_setup_cleanup:
> +#if IMB_VERSION(1, 1, 0) > IMB_VERSION_NUM
> if (qp->mb_mgr)
> free_mb_mgr(qp->mb_mgr);
> +#else
> + if (rte_eal_process_type() == RTE_PROC_SECONDARY)
> + return ret;
> + if (qp->mb_mgr_mz)
> + rte_memzone_free(qp->mb_mgr_mz);
> +#endif
> if (qp)
> rte_free(qp);
> return ret;
> @@ -269,6 +346,7 @@ ipsec_mb_pmd_sym_session_configure(
>
> set_sym_session_private_data(sess, dev->driver_id,
> sess_private_data);
>
> + free_mb_mgr(mb_mgr);
> return 0;
> }
>
> diff --git a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h
> b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h
> index 754259aa59..35860b1b10 100644
> --- a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h
> +++ b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h
> @@ -18,6 +18,9 @@
> /* Maximum length for digest */
> #define DIGEST_LENGTH_MAX 64
>
> +/* Maximum length for memzone name */
> +#define IPSEC_MB_MAX_MZ_NAME 32
> +
> enum ipsec_mb_vector_mode {
> IPSEC_MB_NOT_SUPPORTED = 0,
> IPSEC_MB_SSE,
> @@ -95,6 +98,8 @@ struct ipsec_mb_qp {
> */
> IMB_MGR *mb_mgr;
> /* Multi buffer manager */
> + const struct rte_memzone *mb_mgr_mz;
> + /* Shared memzone for storing mb_mgr */
> __extension__ uint8_t additional_data[0];
> /**< Storing PMD specific additional data */
> };
> --
> 2.25.1
next prev parent reply other threads:[~2021-10-06 14:01 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-05 17:15 [dpdk-dev] [dpdk-dev v1] crypto/snow3g: add support for digest appended ops Kai Ji
2021-05-08 12:57 ` [dpdk-dev] [EXT] " Akhil Goyal
2021-05-10 9:50 ` [dpdk-dev] [dpdk-dev v2] " Kai Ji
2021-06-29 20:14 ` [dpdk-dev] [EXT] " Akhil Goyal
2021-06-30 12:08 ` Zhang, Roy Fan
2021-07-06 19:48 ` Akhil Goyal
2021-07-21 9:22 ` [dpdk-dev] [dpdk-dev v3] " Kai Ji
2021-07-27 8:38 ` [dpdk-dev] [dpdk-dev v4] " Fan Zhang
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 00/10] drivers/crypto: introduce ipsec_mb framework Ciara Power
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 01/10] drivers/crypto: introduce IPsec-mb framework Ciara Power
2021-09-30 9:51 ` Kinsella, Ray
2021-10-06 13:50 ` [dpdk-dev] [EXT] " Akhil Goyal
2021-10-06 15:45 ` Power, Ciara
2021-10-06 17:34 ` Akhil Goyal
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 02/10] crypto/ipsec_mb: add multiprocess support Ciara Power
2021-10-06 14:01 ` Akhil Goyal [this message]
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 03/10] drivers/crypto: move aesni-mb PMD to IPsec-mb framework Ciara Power
2021-10-11 11:09 ` De Lara Guarch, Pablo
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 04/10] drivers/crypto: move aesni-gcm " Ciara Power
2021-10-06 14:31 ` [dpdk-dev] [EXT] " Akhil Goyal
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 05/10] drivers/crypto: move kasumi " Ciara Power
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 06/10] drivers/crypto: move snow3g " Ciara Power
2021-10-04 12:45 ` De Lara Guarch, Pablo
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 07/10] crypto/ipsec_mb: add snow3g digest appended ops support Ciara Power
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 08/10] drivers/crypto: move zuc PMD to IPsec-mb framework Ciara Power
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 09/10] crypto/ipsec_mb: add chacha20-poly1305 PMD to framework Ciara Power
2021-10-06 14:48 ` [dpdk-dev] [EXT] " Akhil Goyal
2021-10-07 15:07 ` Ji, Kai
2021-10-07 15:22 ` Akhil Goyal
2021-09-29 16:30 ` [dpdk-dev] [PATCH v3 10/10] doc/rel_notes: added note for SW Crypto PMD change Ciara Power
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CO6PR18MB44845FA1DBC9E0863140CDA5D8B09@CO6PR18MB4484.namprd18.prod.outlook.com \
--to=gakhil@marvell.com \
--cc=anatoly.burakov@intel.com \
--cc=ciara.power@intel.com \
--cc=dev@dpdk.org \
--cc=pablo.de.lara.guarch@intel.com \
--cc=piotrx.bronowski@intel.com \
--cc=roy.fan.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).