From patchwork Fri Feb 10 01:55:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Naga Harish K, S V" X-Patchwork-Id: 123644 X-Patchwork-Delegate: jerinj@marvell.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7D63641C58; Fri, 10 Feb 2023 02:55:53 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6A26042BC9; Fri, 10 Feb 2023 02:55:53 +0100 (CET) Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by mails.dpdk.org (Postfix) with ESMTP id 75B2D42BC9 for ; Fri, 10 Feb 2023 02:55:49 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1675994151; x=1707530151; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=jES3YDya+3gVvNmldP1iaAga2uiktuX8JhFIz03KR80=; b=P9PfEj/fbB60/1waQ/Nxi6qVpIggGa7GoAYifD3k1LrALKcXb2V2tLLl 3aqTLeQDA9dPhf14PrEJU+6pwmVZHB2bvGQ67sucope17NsKc4tByloc/ 51uIsxnmwDD8/FIn2FxA6oFPNGSYzxqV4R7Qj1kV+erP6cMhH8kx1k6YO y7mLz43gDorNfG6CKywAEH6U1bkXZJtLb/nQz5Uyn2DnwA5kJSe1HlPus Zv6pWp52l2e6S3j5TCYZWCbkmKRcWEIIlLJ+25zfTbPaMA+bqRBtbHzdx Oti2dqqY18gKaHp02vc0SvQhFmwRcETCzf99rJcAUw9NDdxZ9qG4OIlWI A==; X-IronPort-AV: E=McAfee;i="6500,9779,10616"; a="392709019" X-IronPort-AV: E=Sophos;i="5.97,285,1669104000"; d="scan'208";a="392709019" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Feb 2023 17:55:44 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10616"; a="996783574" X-IronPort-AV: E=Sophos;i="5.97,285,1669104000"; d="scan'208";a="996783574" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga005.fm.intel.com with ESMTP; 09 Feb 2023 17:55:43 -0800 From: Naga Harish K S V To: jerinj@marvell.com, erik.g.carrillo@intel.com, abhinandan.gujjar@intel.com Cc: dev@dpdk.org, jay.jayatheerthan@intel.com Subject: [PATCH v3 3/3] eventdev/crypto: add params set/get APIs Date: Thu, 9 Feb 2023 19:55:13 -0600 Message-Id: <20230210015513.2995810-3-s.v.naga.harish.k@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20230210015513.2995810-1-s.v.naga.harish.k@intel.com> References: <20230123180458.486189-1-s.v.naga.harish.k@intel.com> <20230210015513.2995810-1-s.v.naga.harish.k@intel.com> MIME-Version: 1.0 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The adapter runtime configuration parameters defined in the ``struct rte_event_crypto_adapter_runtime_params`` can be configured and retrieved using ``rte_event_crypto_adapter_runtime_params_set`` and ``rte_event_eth_rx_adapter_runtime_params_get`` respectively. Signed-off-by: Naga Harish K S V --- app/test/test_event_crypto_adapter.c | 109 ++++++++++++++++++ .../prog_guide/event_crypto_adapter.rst | 11 ++ lib/eventdev/rte_event_crypto_adapter.c | 89 +++++++++++++- lib/eventdev/rte_event_crypto_adapter.h | 90 +++++++++++++++ lib/eventdev/version.map | 2 + 5 files changed, 300 insertions(+), 1 deletion(-) diff --git a/app/test/test_event_crypto_adapter.c b/app/test/test_event_crypto_adapter.c index a38e389abd..264d6f731e 100644 --- a/app/test/test_event_crypto_adapter.c +++ b/app/test/test_event_crypto_adapter.c @@ -272,6 +272,111 @@ test_crypto_adapter_stats(void) return TEST_SUCCESS; } +static int +test_crypto_adapter_params(void) +{ + int err; + struct rte_event_crypto_adapter_runtime_params in_params; + struct rte_event_crypto_adapter_runtime_params out_params; + uint32_t cap; + struct rte_event_crypto_adapter_queue_conf queue_conf = { + .ev = response_info, + }; + + err = rte_event_crypto_adapter_caps_get(evdev, TEST_CDEV_ID, &cap); + TEST_ASSERT_SUCCESS(err, "Failed to get adapter capabilities\n"); + + if (cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_QP_EV_BIND) { + err = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, + TEST_CDEV_ID, TEST_CDEV_QP_ID, &queue_conf); + } else + err = rte_event_crypto_adapter_queue_pair_add(TEST_ADAPTER_ID, + TEST_CDEV_ID, TEST_CDEV_QP_ID, NULL); + + TEST_ASSERT_SUCCESS(err, "Failed to add queue pair\n"); + + err = rte_event_crypto_adapter_runtime_params_init(&in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + err = rte_event_crypto_adapter_runtime_params_init(&out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + /* Case 1: Get the default value of mbufs processed by adapter */ + err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, + &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + /* Case 2: Set max_nb = 32 (=BATCH_SEIZE) */ + in_params.max_nb = 32; + + err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, + &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, + &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", + in_params.max_nb, out_params.max_nb); + + /* Case 3: Set max_nb = 192 */ + in_params.max_nb = 192; + + err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, + &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, + &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", + in_params.max_nb, out_params.max_nb); + + /* Case 4: Set max_nb = 256 */ + in_params.max_nb = 256; + + err = rte_event_crypto_adapter_runtime_params_set(TEST_ADAPTER_ID, + &in_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_crypto_adapter_runtime_params_get(TEST_ADAPTER_ID, + &out_params); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(in_params.max_nb == out_params.max_nb, "Expected %u got %u", + in_params.max_nb, out_params.max_nb); + + /* Case 5: Set max_nb = 30(nb_qps) + return -EINVAL; + ret = rte_event_crypto_adapter_caps_get(adapter->eventdev_id, + adapter->next_cdev_id, + &caps); + if (ret) { + RTE_EDEV_LOG_ERR("Failed to get adapter caps dev %" PRIu8 + " cdev %" PRIu8, adapter->eventdev_id, + adapter->next_cdev_id); + return ret; + } + + if ((caps & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD) || + (caps & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_NEW)) + return -ENOTSUP; + + return 0; +} + +int +rte_event_crypto_adapter_runtime_params_set(uint8_t id, + struct rte_event_crypto_adapter_runtime_params *params) +{ + struct event_crypto_adapter *adapter; + int ret; + + if (eca_memzone_lookup()) + return -ENOMEM; + + EVENT_CRYPTO_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); + + if (params == NULL) { + RTE_EDEV_LOG_ERR("params pointer is NULL\n"); + return -EINVAL; + } + + adapter = eca_id_to_adapter(id); + if (adapter == NULL) + return -EINVAL; + + ret = crypto_adapter_cap_check(adapter); + if (ret) + return ret; + + rte_spinlock_lock(&adapter->lock); + adapter->max_nb = params->max_nb; + rte_spinlock_unlock(&adapter->lock); + + return 0; +} + +int +rte_event_crypto_adapter_runtime_params_get(uint8_t id, + struct rte_event_crypto_adapter_runtime_params *params) +{ + struct event_crypto_adapter *adapter; + int ret; + + if (eca_memzone_lookup()) + return -ENOMEM; + + + EVENT_CRYPTO_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); + + if (params == NULL) { + RTE_EDEV_LOG_ERR("params pointer is NULL\n"); + return -EINVAL; + } + + adapter = eca_id_to_adapter(id); + if (adapter == NULL) + return -EINVAL; + + ret = crypto_adapter_cap_check(adapter); + if (ret) + return ret; + + params->max_nb = adapter->max_nb; + + return 0; +} + int rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id) { diff --git a/lib/eventdev/rte_event_crypto_adapter.h b/lib/eventdev/rte_event_crypto_adapter.h index fad4543506..106e83102f 100644 --- a/lib/eventdev/rte_event_crypto_adapter.h +++ b/lib/eventdev/rte_event_crypto_adapter.h @@ -138,6 +138,8 @@ * - rte_event_crypto_adapter_stop() * - rte_event_crypto_adapter_stats_get() * - rte_event_crypto_adapter_stats_reset() + * - rte_event_crypto_adapter_runtime_params_get() + * - rte_event_crypto_adapter_runtime_params_set() * The application creates an instance using rte_event_crypto_adapter_create() * or rte_event_crypto_adapter_create_ext(). @@ -253,6 +255,24 @@ struct rte_event_crypto_adapter_conf { */ }; +#define DEFAULT_MAX_NB 128 +/**< The default value for maximum number of packets processed by service + * based adapter per each call. + */ + +/** + * Adapter runtime configuration parameters + */ +struct rte_event_crypto_adapter_runtime_params { + uint32_t max_nb; + /**< The adapter can return early if it has processed at least + * max_nb crypto ops. This isn't treated as a requirement; batching + * may cause the adapter to process more than max_nb crypto ops. + */ + uint32_t rsvd[15]; + /**< Reserved fields for future expansion */ +}; + #define RTE_EVENT_CRYPTO_ADAPTER_EVENT_VECTOR 0x1 /**< This flag indicates that crypto operations processed on the crypto * adapter need to be vectorized @@ -608,6 +628,76 @@ rte_event_crypto_adapter_service_id_get(uint8_t id, uint32_t *service_id); int rte_event_crypto_adapter_event_port_get(uint8_t id, uint8_t *event_port_id); +/** + * Initialize the adapter runtime configuration parameters + * + * @param params + * A pointer to structure of type struct rte_event_crypto_adapter_runtime_params + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +static inline int +rte_event_crypto_adapter_runtime_params_init( + struct rte_event_crypto_adapter_runtime_params *params) +{ + if (params == NULL) + return -EINVAL; + + memset(params, 0, sizeof(*params)); + params->max_nb = DEFAULT_MAX_NB; + + return 0; +} + +/** + * Set the adapter runtime configuration parameters + * + * This API needs to be called after adding at least one qp to the adapter + * and is supported only for the service-based adapter. + * + * @param id + * Adapter identifier + * + * @param params + * A pointer to structure of type struct rte_event_crypto_adapter_runtime_params + * with configuration parameter values. This struct can be initialized using + * rte_event_crypto_adapter_runtime_params_init() API to default values or + * application may reset this struct and update required fields. + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_crypto_adapter_runtime_params_set(uint8_t id, + struct rte_event_crypto_adapter_runtime_params *params); + +/** + * Get the adapter runtime configuration parameters + * + * This API needs to be called after adding at least one qp to the adapter + * and is supported only for the service-based adapter. + * + * @param id + * Adapter identifier + * + * @param[out] params + * A pointer to structure of type struct rte_event_crypto_adapter_runtime_params + * containing valid adapter parameters when return value is 0. + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__rte_experimental +int +rte_event_crypto_adapter_runtime_params_get(uint8_t id, + struct rte_event_crypto_adapter_runtime_params *params); + /** * @warning * @b EXPERIMENTAL: this API may change without prior notice diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index 38dfbb1f41..60e5e3a593 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -121,6 +121,8 @@ EXPERIMENTAL { rte_event_eth_tx_adapter_queue_stop; # added in 23.03 + rte_event_crypto_adapter_runtime_params_get; + rte_event_crypto_adapter_runtime_params_set; rte_event_eth_rx_adapter_runtime_params_get; rte_event_eth_rx_adapter_runtime_params_set; rte_event_eth_tx_adapter_runtime_params_get;