From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B72A0A0544; Mon, 10 Oct 2022 18:56:47 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 327EB4114E; Mon, 10 Oct 2022 18:56:47 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 6E40141144 for ; Mon, 10 Oct 2022 18:56:45 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 29ADCHU4022452; Mon, 10 Oct 2022 09:56:44 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=dxTxauYvl0pWSXcvG8a4iUGZ5B4fw3aILYPnoJKdPps=; b=P5+s3M4rmfEye8nzk+hJVMocp61Np3XZeNg5EQr6eym1RvNWAfC95UHw9OM3JPlq73Ug RmwpE3ysbncjpJOSBlZvxBI9GinEsnRdCRkP/aELWzsNMHneZLgic/AkNKt8/pv7gRNO UHzUMJArgAHkGfO/dMX/mZzv8hxP6QTTmVXV+WHspdY/2FBzerUCSHix5HDLxM2bHbuI rfDthkMGBBi6Ui3rIaYKwooR8TegwOnLbKD7Rs+VMwklqV4BEBvn7ppFAXdydAxXHkPF bpzGNVCVS7WCR1Y6ksTu2mNKBgMeIp4UeJGeOJxeVNqajbbWdgNvEfodXLTIvccLfmLl Rg== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3k36jppjkk-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 10 Oct 2022 09:56:44 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Mon, 10 Oct 2022 09:56:42 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Mon, 10 Oct 2022 09:56:42 -0700 Received: from localhost.localdomain (unknown [10.28.34.39]) by maili.marvell.com (Postfix) with ESMTP id 5AEC63F7081; Mon, 10 Oct 2022 09:56:40 -0700 (PDT) From: Volodymyr Fialko To: , Radu Nicolau , Akhil Goyal CC: , , , Volodymyr Fialko Subject: [PATCH v3 1/6] examples/ipsec-secgw: add event crypto adapter init Date: Mon, 10 Oct 2022 18:56:24 +0200 Message-ID: <20221010165629.17744-2-vfialko@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221010165629.17744-1-vfialko@marvell.com> References: <20221010123102.3962719-1-vfialko@marvell.com> <20221010165629.17744-1-vfialko@marvell.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Proofpoint-GUID: ZghWtqNXAML-Huehivso04QhgOcjUnVf X-Proofpoint-ORIG-GUID: ZghWtqNXAML-Huehivso04QhgOcjUnVf X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.528,FMLib:17.11.122.1 definitions=2022-10-10_10,2022-10-10_02,2022-06-22_01 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 Create, configure and start an event crypto adapter. This adapter will be used in lookaside event mode processing. Signed-off-by: Volodymyr Fialko --- examples/ipsec-secgw/event_helper.c | 144 ++++++++++++++++++++++++++++ examples/ipsec-secgw/event_helper.h | 2 + examples/ipsec-secgw/ipsec-secgw.c | 27 +++--- 3 files changed, 161 insertions(+), 12 deletions(-) diff --git a/examples/ipsec-secgw/event_helper.c b/examples/ipsec-secgw/event_helper.c index 22b1760949..30a1f253c8 100644 --- a/examples/ipsec-secgw/event_helper.c +++ b/examples/ipsec-secgw/event_helper.c @@ -4,8 +4,10 @@ #include #include +#include #include #include +#include #include #include #include @@ -744,6 +746,126 @@ eh_start_eventdev(struct eventmode_conf *em_conf) return 0; } +static int +eh_initialize_crypto_adapter(struct eventmode_conf *em_conf) +{ + struct rte_event_dev_info evdev_default_conf = {0}; + struct rte_event_port_conf port_conf = {0}; + struct eventdev_params *eventdev_config; + uint8_t eventdev_id, cdev_id, n; + uint32_t cap; + int ret; + + if (!em_conf->enable_event_crypto_adapter) + return 0; + + /* + * More then one eventdev is not supported, + * all event crypto adapters will be assigned to one eventdev + */ + RTE_ASSERT(em_conf->nb_eventdev == 1); + + /* Get event device configuration */ + eventdev_config = &(em_conf->eventdev_config[0]); + eventdev_id = eventdev_config->eventdev_id; + + n = rte_cryptodev_count(); + + for (cdev_id = 0; cdev_id != n; cdev_id++) { + /* Check event's crypto capabilities */ + ret = rte_event_crypto_adapter_caps_get(eventdev_id, cdev_id, &cap); + if (ret < 0) { + EH_LOG_ERR("Failed to get event device's crypto capabilities %d", ret); + return ret; + } + + if (!(cap & RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD)) { + EH_LOG_ERR("Event crypto adapter does not support forward mode!"); + return -EINVAL; + } + + /* Create event crypto adapter */ + + /* Get default configuration of event dev */ + ret = rte_event_dev_info_get(eventdev_id, &evdev_default_conf); + if (ret < 0) { + EH_LOG_ERR("Failed to get event dev info %d", ret); + return ret; + } + + /* Setup port conf */ + port_conf.new_event_threshold = + evdev_default_conf.max_num_events; + port_conf.dequeue_depth = + evdev_default_conf.max_event_port_dequeue_depth; + port_conf.enqueue_depth = + evdev_default_conf.max_event_port_enqueue_depth; + + /* Create adapter */ + ret = rte_event_crypto_adapter_create(cdev_id, eventdev_id, + &port_conf, RTE_EVENT_CRYPTO_ADAPTER_OP_FORWARD); + if (ret < 0) { + EH_LOG_ERR("Failed to create event crypto adapter %d", ret); + return ret; + } + + /* Add crypto queue pairs to event crypto adapter */ + ret = rte_event_crypto_adapter_queue_pair_add(cdev_id, eventdev_id, + -1, /* adds all the pre configured queue pairs to the instance */ + NULL); + if (ret < 0) { + EH_LOG_ERR("Failed to add queue pairs to event crypto adapter %d", ret); + return ret; + } + } + + return 0; +} + +static int +eh_start_crypto_adapter(struct eventmode_conf *em_conf) +{ + uint8_t cdev_id, n; + int ret; + + if (!em_conf->enable_event_crypto_adapter) + return 0; + + n = rte_cryptodev_count(); + for (cdev_id = 0; cdev_id != n; cdev_id++) { + ret = rte_event_crypto_adapter_start(cdev_id); + if (ret < 0) { + EH_LOG_ERR("Failed to start event crypto device %d (%d)", + cdev_id, ret); + return ret; + } + } + + return 0; +} + +static int +eh_stop_crypto_adapter(struct eventmode_conf *em_conf) +{ + uint8_t cdev_id, n; + int ret; + + if (!em_conf->enable_event_crypto_adapter) + return 0; + + n = rte_cryptodev_count(); + for (cdev_id = 0; cdev_id != n; cdev_id++) { + ret = rte_event_crypto_adapter_stop(cdev_id); + if (ret < 0) { + EH_LOG_ERR("Failed to stop event crypto device %d (%d)", + cdev_id, ret); + return ret; + } + } + + return 0; +} + static int eh_event_vector_limits_validate(struct eventmode_conf *em_conf, uint8_t ev_dev_id, uint8_t ethdev_id) @@ -1697,6 +1819,13 @@ eh_devs_init(struct eh_conf *conf) return ret; } + /* Setup event crypto adapter */ + ret = eh_initialize_crypto_adapter(em_conf); + if (ret < 0) { + EH_LOG_ERR("Failed to start event dev %d", ret); + return ret; + } + /* Setup Rx adapter */ ret = eh_initialize_rx_adapter(em_conf); if (ret < 0) { @@ -1718,6 +1847,14 @@ eh_devs_init(struct eh_conf *conf) return ret; } + /* Start event crypto adapter */ + ret = eh_start_crypto_adapter(em_conf); + if (ret < 0) { + EH_LOG_ERR("Failed to start event crypto dev %d", ret); + return ret; + } + + /* Start eth devices after setting up adapter */ RTE_ETH_FOREACH_DEV(port_id) { @@ -1788,6 +1925,13 @@ eh_devs_uninit(struct eh_conf *conf) } } + /* Stop event crypto adapter */ + ret = eh_stop_crypto_adapter(em_conf); + if (ret < 0) { + EH_LOG_ERR("Failed to start event crypto dev %d", ret); + return ret; + } + /* Stop and release event devices */ for (i = 0; i < em_conf->nb_eventdev; i++) { diff --git a/examples/ipsec-secgw/event_helper.h b/examples/ipsec-secgw/event_helper.h index f3cbe57cb3..4b26dc8fc2 100644 --- a/examples/ipsec-secgw/event_helper.h +++ b/examples/ipsec-secgw/event_helper.h @@ -185,6 +185,8 @@ struct eventmode_conf { /**< Max vector timeout in nanoseconds */ uint64_t vector_pool_sz; /**< Vector pool size */ + bool enable_event_crypto_adapter; + /**< Enables event crypto adapter related configuration */ }; /** diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c index bcf2dfa6d8..50b0cf158a 100644 --- a/examples/ipsec-secgw/ipsec-secgw.c +++ b/examples/ipsec-secgw/ipsec-secgw.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include #include @@ -2098,8 +2099,8 @@ session_pool_init(struct socket_ctx *ctx, int32_t socket_id, size_t sess_sz) nb_sess = RTE_MAX(nb_sess, CDEV_MP_CACHE_SZ * CDEV_MP_CACHE_MULTIPLIER); sess_mp = rte_cryptodev_sym_session_pool_create( - mp_name, nb_sess, sess_sz, CDEV_MP_CACHE_SZ, 0, - socket_id); + mp_name, nb_sess, sess_sz, CDEV_MP_CACHE_SZ, + 0, socket_id); ctx->session_pool = sess_mp; if (ctx->session_pool == NULL) @@ -2378,7 +2379,8 @@ signal_handler(int signum) } static void -ev_mode_sess_verify(struct ipsec_sa *sa, int nb_sa) +ev_mode_sess_verify(struct ipsec_sa *sa, int nb_sa, + struct eventmode_conf *em_conf) { struct rte_ipsec_session *ips; int32_t i; @@ -2388,9 +2390,11 @@ ev_mode_sess_verify(struct ipsec_sa *sa, int nb_sa) for (i = 0; i < nb_sa; i++) { ips = ipsec_get_primary_session(&sa[i]); - if (ips->type != RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL) - rte_exit(EXIT_FAILURE, "Event mode supports only " - "inline protocol sessions\n"); + if (ips->type == RTE_SECURITY_ACTION_TYPE_LOOKASIDE_PROTOCOL) + em_conf->enable_event_crypto_adapter = true; + else if (ips->type != RTE_SECURITY_ACTION_TYPE_INLINE_PROTOCOL) + rte_exit(EXIT_FAILURE, "Event mode supports inline " + "and lookaside protocol sessions\n"); } } @@ -2423,13 +2427,12 @@ check_event_mode_params(struct eh_conf *eh_conf) em_conf->ext_params.sched_type = RTE_SCHED_TYPE_ORDERED; /* - * Event mode currently supports only inline protocol sessions. - * If there are other types of sessions configured then exit with - * error. + * Event mode currently supports inline and lookaside protocol + * sessions. If there are other types of sessions configured then exit + * with error. */ - ev_mode_sess_verify(sa_in, nb_sa_in); - ev_mode_sess_verify(sa_out, nb_sa_out); - + ev_mode_sess_verify(sa_in, nb_sa_in, em_conf); + ev_mode_sess_verify(sa_out, nb_sa_out, em_conf); /* Option --config does not apply to event mode */ if (nb_lcore_params > 0) { -- 2.25.1