From: Akhil Goyal <gakhil@marvell.com>
To: Vidya Sagar Velumuri <vvelumuri@marvell.com>,
Fan Zhang <fanzhang.oss@gmail.com>
Cc: Jerin Jacob <jerinj@marvell.com>,
Anoob Joseph <anoobj@marvell.com>,
Vidya Sagar Velumuri <vvelumuri@marvell.com>,
Aakash Sasidharan <asasidharan@marvell.com>,
Tejasree Kondoj <ktejasree@marvell.com>,
Gowrishankar Muthukrishnan <gmuthukrishn@marvell.com>,
"dev@dpdk.org" <dev@dpdk.org>
Subject: RE: [PATCH v1 1/3] cryptodev: add queue pair reset API
Date: Wed, 18 Sep 2024 05:40:03 +0000 [thread overview]
Message-ID: <CO6PR18MB44847753C82BB1A3968D925AD8622@CO6PR18MB4484.namprd18.prod.outlook.com> (raw)
In-Reply-To: <20240822102856.3965710-1-vvelumuri@marvell.com>
> Subject: [PATCH v1 1/3] cryptodev: add queue pair reset API
>
> The API will reset the specific queue pair of a cryptodev.
> The current API, cryptodev_queue_pair_setup(), requires the cryptodev
> to be stopped before reconfiguring any queue pair. Stopping the
> cryptodev in one thread can result in a segmentation fault when
> multiple queues are used for enqueue and dequeue operations.
>
> On supported PMDs, the cryptodev_queue_pair_reset() will
> reconfigure/reset the queue pair without affecting other queues or
> the cryptodev state.
>
> The caller should ensure that there are no enqueue or dequeue operations
> ongoing on that queue and that there are no inflight packets before
> calling this API.
>
> Signed-off-by: Vidya Sagar Velumuri <vvelumuri@marvell.com>
Acked-by: Akhil Goyal <gakhil@marvell.com>
Please update release notes.
>
> diff --git a/lib/cryptodev/cryptodev_pmd.h b/lib/cryptodev/cryptodev_pmd.h
> index 6c114f7181..311ae63abb 100644
> --- a/lib/cryptodev/cryptodev_pmd.h
> +++ b/lib/cryptodev/cryptodev_pmd.h
> @@ -290,6 +290,22 @@ typedef int (*cryptodev_queue_pair_setup_t)(struct
> rte_cryptodev *dev,
> typedef int (*cryptodev_queue_pair_release_t)(struct rte_cryptodev *dev,
> uint16_t qp_id);
>
> +/**
> + * Reset or reconfigure a queue pair for a device.
> + *
> + * @param dev Crypto device pointer
> + * @param qp_id Queue pair index
> + * @param qp_conf Queue configuration structure
> + * @param socket_id Socket index
> + *
> + * @return
> + * - 0: on success.
> + * - ENOTSUP: if crypto device does not support the operation.
> + */
> +typedef int (*cryptodev_queue_pair_reset_t)(struct rte_cryptodev *dev,
> + uint16_t qp_id, const struct rte_cryptodev_qp_conf *qp_conf,
> + int socket_id);
> +
> /**
> * Create a session mempool to allocate sessions from
> *
> @@ -476,6 +492,8 @@ struct rte_cryptodev_ops {
> /**< Set up a device queue pair. */
> cryptodev_queue_pair_release_t queue_pair_release;
> /**< Release a queue pair. */
> + cryptodev_queue_pair_reset_t queue_pair_reset;
> + /**< Reset a queue pair. */
>
> cryptodev_sym_get_session_private_size_t sym_session_get_size;
> /**< Return private session. */
> diff --git a/lib/cryptodev/cryptodev_trace.h b/lib/cryptodev/cryptodev_trace.h
> index 935f0d564b..633f17afe1 100644
> --- a/lib/cryptodev/cryptodev_trace.h
> +++ b/lib/cryptodev/cryptodev_trace.h
> @@ -58,6 +58,16 @@ RTE_TRACE_POINT(
> rte_trace_point_emit_ptr(conf->mp_session);
> )
>
> +RTE_TRACE_POINT(
> + rte_cryptodev_trace_queue_pair_reset,
> + RTE_TRACE_POINT_ARGS(uint8_t dev_id, uint16_t queue_pair_id,
> + const struct rte_cryptodev_qp_conf *conf, int socket_id),
> + rte_trace_point_emit_u8(dev_id);
> + rte_trace_point_emit_u16(queue_pair_id);
> + rte_trace_point_emit_u32(conf->nb_descriptors);
> + rte_trace_point_emit_int(socket_id);
> +)
> +
> RTE_TRACE_POINT(
> rte_cryptodev_trace_sym_session_pool_create,
> RTE_TRACE_POINT_ARGS(const char *name, uint32_t nb_elts,
> diff --git a/lib/cryptodev/cryptodev_trace_points.c
> b/lib/cryptodev/cryptodev_trace_points.c
> index 7403412553..6f37780595 100644
> --- a/lib/cryptodev/cryptodev_trace_points.c
> +++ b/lib/cryptodev/cryptodev_trace_points.c
> @@ -21,6 +21,9 @@ RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_close,
> RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_queue_pair_setup,
> lib.cryptodev.queue.pair.setup)
>
> +RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_queue_pair_reset,
> + lib.cryptodev.queue.pair.reset)
> +
> RTE_TRACE_POINT_REGISTER(rte_cryptodev_trace_sym_session_pool_create,
> lib.cryptodev.sym.pool.create)
>
> diff --git a/lib/cryptodev/rte_cryptodev.c b/lib/cryptodev/rte_cryptodev.c
> index 682c9f49d0..281ca51cf3 100644
> --- a/lib/cryptodev/rte_cryptodev.c
> +++ b/lib/cryptodev/rte_cryptodev.c
> @@ -1222,6 +1222,30 @@ rte_cryptodev_queue_pairs_config(struct
> rte_cryptodev *dev, uint16_t nb_qpairs,
> return 0;
> }
>
> +int
> +rte_cryptodev_queue_pair_reset(uint8_t dev_id, uint16_t queue_pair_id,
> + const struct rte_cryptodev_qp_conf *qp_conf, int socket_id)
> +{
> + struct rte_cryptodev *dev;
> +
> + if (!rte_cryptodev_is_valid_dev(dev_id)) {
> + CDEV_LOG_ERR("Invalid dev_id=%" PRIu8, dev_id);
> + return -EINVAL;
> + }
> +
> + dev = &rte_crypto_devices[dev_id];
> + if (queue_pair_id >= dev->data->nb_queue_pairs) {
> + CDEV_LOG_ERR("Invalid queue_pair_id=%d", queue_pair_id);
> + return -EINVAL;
> + }
> +
> + if (*dev->dev_ops->queue_pair_reset == NULL)
> + return -ENOTSUP;
> +
> + rte_cryptodev_trace_queue_pair_reset(dev_id, queue_pair_id, qp_conf,
> socket_id);
> + return (*dev->dev_ops->queue_pair_reset)(dev, queue_pair_id, qp_conf,
> socket_id);
> +}
> +
> int
> rte_cryptodev_configure(uint8_t dev_id, struct rte_cryptodev_config *config)
> {
> diff --git a/lib/cryptodev/rte_cryptodev.h b/lib/cryptodev/rte_cryptodev.h
> index bec947f6d5..e0fc35db2a 100644
> --- a/lib/cryptodev/rte_cryptodev.h
> +++ b/lib/cryptodev/rte_cryptodev.h
> @@ -840,6 +840,35 @@ int
> rte_cryptodev_queue_pair_setup(uint8_t dev_id, uint16_t queue_pair_id,
> const struct rte_cryptodev_qp_conf *qp_conf, int socket_id);
>
> +/**
> + * @warning
> + * @b EXPERIMENTAL: this API may change without prior notice.
> + *
> + * Reset a queue pair for a device.
> + * The caller of this API must ensure that, there are no enqueues to the queue
> and there are no
> + * pending/inflight packets in the queue when the API is called.
> + * The API can reconfigure the queue pair when the queue pair configuration
> data is provided.
> + *
> + * @param dev_id The identifier of the device.
> + * @param queue_pair_id The index of the queue pairs to set up. The
> value must be in the
> + * range [0, nb_queue_pair - 1] previously supplied
> to
> + * rte_cryptodev_configure().
> + * @param qp_conf The pointer to configuration data to be used for
> the queue pair.
> + * It should be NULL, if the API is called from an
> interrupt context.
> + * @param socket_id The *socket_id* argument is the socket
> identifier in case of NUMA.
> + * The value can be *SOCKET_ID_ANY* if there is
> no NUMA constraint
> + * for the DMA memory allocated for the queue
> pair.
> + *
> + * @return
> + * - 0: Queue pair is reset successfully.
> + * - ENOTSUP: If the operation is not supported by the PMD.
> + * - <0: Queue pair reset failed
> + */
> +__rte_experimental
> +int
> +rte_cryptodev_queue_pair_reset(uint8_t dev_id, uint16_t queue_pair_id,
> + const struct rte_cryptodev_qp_conf *qp_conf, int socket_id);
> +
> /**
> * Get the status of queue pairs setup on a specific crypto device
> *
> diff --git a/lib/cryptodev/version.map b/lib/cryptodev/version.map
> index fdac0d876e..eec06d9939 100644
> --- a/lib/cryptodev/version.map
> +++ b/lib/cryptodev/version.map
> @@ -87,6 +87,9 @@ EXPERIMENTAL {
>
> # added in 24.03
> __rte_cryptodev_trace_qp_depth_used;
> +
> + # added in 24.07
> + rte_cryptodev_queue_pair_reset;
> };
>
> INTERNAL {
> --
> 2.25.1
prev parent reply other threads:[~2024-09-18 5:40 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-22 10:28 Vidya Sagar Velumuri
2024-08-22 10:28 ` [PATCH v1 2/3] crypto/cnxk: add queue pair reset support Vidya Sagar Velumuri
2024-09-18 5:40 ` Akhil Goyal
2024-08-22 10:28 ` [PATCH v1 3/3] test/crypto: add support for error recovery Vidya Sagar Velumuri
2024-09-18 5:42 ` Akhil Goyal
2024-09-18 5:40 ` Akhil Goyal [this message]
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=CO6PR18MB44847753C82BB1A3968D925AD8622@CO6PR18MB4484.namprd18.prod.outlook.com \
--to=gakhil@marvell.com \
--cc=anoobj@marvell.com \
--cc=asasidharan@marvell.com \
--cc=dev@dpdk.org \
--cc=fanzhang.oss@gmail.com \
--cc=gmuthukrishn@marvell.com \
--cc=jerinj@marvell.com \
--cc=ktejasree@marvell.com \
--cc=vvelumuri@marvell.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).