From patchwork Thu Jul 15 06:09:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nithin Dabilpuram X-Patchwork-Id: 95875 X-Patchwork-Delegate: gakhil@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 9A764A0C4D; Thu, 15 Jul 2021 08:10:17 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 86D6B41123; Thu, 15 Jul 2021 08:10:17 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 0D28C411A9 for ; Thu, 15 Jul 2021 08:10:15 +0200 (CEST) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 16F65C95028539; Wed, 14 Jul 2021 23:10:14 -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-type; s=pfpt0220; bh=QRvV4m5Joz96GM0FSxdxt/KLXY2Lmo4RPGEE9K4nhHI=; b=RwYM7pHduDJaq62lsDCU7f5ZqmeJuono1vGbebY0F8jVTRqedM3IATVntQMpV6yn45KK LrMSfIzeCq9SVjAQrmWJMDLyupP99Q7lw4lHtltzSujdHwjoz3bMyH+JrF1i5i3k/SAs A8S99fwhksjbNB7gQq9NalXKngXH+wRdWwhgKt3E9OKrztIRg8OcMbC44wCjBGA7Mww+ RrMbmyH8lKT7miPm6b8zi1dwKIMW00r9OYuK7eZSN8AOum5hkxnMs3X/Yvau11hh7Tq8 TJ1FdyINBIoXG6XVo0650Ts4f9hc2rQyGg5oqdJxoXw8GLSDXQv51ghkcUASfTaARfe9 pw== Received: from dc5-exch02.marvell.com ([199.233.59.182]) by mx0a-0016f401.pphosted.com with ESMTP id 39swveuuqs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Wed, 14 Jul 2021 23:10:14 -0700 Received: from DC5-EXCH01.marvell.com (10.69.176.38) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server (TLS) id 15.0.1497.18; Wed, 14 Jul 2021 23:10:13 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server id 15.0.1497.18 via Frontend Transport; Wed, 14 Jul 2021 23:10:12 -0700 Received: from hyd1588t430.marvell.com (unknown [10.29.52.204]) by maili.marvell.com (Postfix) with ESMTP id C16343F70E1; Wed, 14 Jul 2021 23:10:04 -0700 (PDT) From: Nithin Dabilpuram To: CC: , , , , , , , , , , , , Nithin Dabilpuram Date: Thu, 15 Jul 2021 11:39:46 +0530 Message-ID: <20210715060947.20186-3-ndabilpuram@marvell.com> X-Mailer: git-send-email 2.8.4 In-Reply-To: <20210715060947.20186-1-ndabilpuram@marvell.com> References: <20210624102848.3878788-1-gakhil@marvell.com> <20210715060947.20186-1-ndabilpuram@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: 6hnnRMCkEejAl52wJqykljxOJcInsdr7 X-Proofpoint-ORIG-GUID: 6hnnRMCkEejAl52wJqykljxOJcInsdr7 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790 definitions=2021-07-15_02:2021-07-14, 2021-07-15 signatures=0 Subject: [dpdk-dev] [PATCH v2 2/3] security: add option for faster udata or mdata access 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 Sender: "dev" Currently rte_security_set_pkt_metadata() and rte_security_get_userdata() methods to set pkt metadata on Inline outbound and get userdata after Inline inbound processing is always driver specific callbacks. For drivers that do not have much to do in the callbacks but just to update metadata in rte_security dynamic field and get userdata from rte_security dynamic field, having to just to PMD specific callback is costly per packet operation. This patch provides a mechanism to do the same in inline function and avoid function pointer jump if a driver supports the same. Signed-off-by: Nithin Dabilpuram --- lib/security/rte_security.c | 8 ++++---- lib/security/rte_security.h | 49 +++++++++++++++++++++++++++++++++++++++++---- lib/security/version.map | 2 ++ 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/lib/security/rte_security.c b/lib/security/rte_security.c index e8116d5..fe81ed3 100644 --- a/lib/security/rte_security.c +++ b/lib/security/rte_security.c @@ -122,9 +122,9 @@ rte_security_session_destroy(struct rte_security_ctx *instance, } int -rte_security_set_pkt_metadata(struct rte_security_ctx *instance, - struct rte_security_session *sess, - struct rte_mbuf *m, void *params) +__rte_security_set_pkt_metadata(struct rte_security_ctx *instance, + struct rte_security_session *sess, + struct rte_mbuf *m, void *params) { #ifdef RTE_DEBUG RTE_PTR_OR_ERR_RET(sess, -EINVAL); @@ -137,7 +137,7 @@ rte_security_set_pkt_metadata(struct rte_security_ctx *instance, } void * -rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md) +__rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md) { void *userdata = NULL; diff --git a/lib/security/rte_security.h b/lib/security/rte_security.h index 88d31de..da1108b 100644 --- a/lib/security/rte_security.h +++ b/lib/security/rte_security.h @@ -71,8 +71,18 @@ struct rte_security_ctx { /**< Pointer to security ops for the device */ uint16_t sess_cnt; /**< Number of sessions attached to this context */ + uint32_t flags; + /**< Flags for security context */ }; +#define RTE_SEC_CTX_F_FAST_SET_MDATA 0x00000001 +/**< Driver uses fast metadata update without using driver specific callback */ + +#define RTE_SEC_CTX_F_FAST_GET_UDATA 0x00000002 +/**< Driver provides udata using fast method without using driver specific + * callback. + */ + /** * IPSEC tunnel parameters * @@ -493,6 +503,12 @@ static inline bool rte_security_dynfield_is_registered(void) return rte_security_dynfield_offset >= 0; } +/** Function to call PMD specific function pointer set_pkt_metadata() */ +__rte_experimental +extern int __rte_security_set_pkt_metadata(struct rte_security_ctx *instance, + struct rte_security_session *sess, + struct rte_mbuf *m, void *params); + /** * Updates the buffer with device-specific defined metadata * @@ -506,10 +522,27 @@ static inline bool rte_security_dynfield_is_registered(void) * - On success, zero. * - On failure, a negative value. */ -int +static inline int rte_security_set_pkt_metadata(struct rte_security_ctx *instance, struct rte_security_session *sess, - struct rte_mbuf *mb, void *params); + struct rte_mbuf *mb, void *params) +{ + /* Fast Path */ + if (instance->flags & RTE_SEC_CTX_F_FAST_SET_MDATA) { + *rte_security_dynfield(mb) = + (rte_security_dynfield_t)(sess->sess_private_data); + return 0; + } + + /* Jump to PMD specific function pointer */ + return __rte_security_set_pkt_metadata(instance->device, sess, mb, + params); +} + +/** Function to call PMD specific function pointer get_userdata() */ +__rte_experimental +extern void *__rte_security_get_userdata(struct rte_security_ctx *instance, + uint64_t md); /** * Get userdata associated with the security session. Device specific metadata @@ -529,8 +562,16 @@ rte_security_set_pkt_metadata(struct rte_security_ctx *instance, * - On failure, NULL */ __rte_experimental -void * -rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md); +static inline void * +rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md) +{ + /* Fast Path */ + if (instance->flags & RTE_SEC_CTX_F_FAST_GET_UDATA) + return (void *)md; + + /* Jump to PMD specific function pointer */ + return __rte_security_get_userdata(instance, md); +} /** * Attach a session to a symmetric crypto operation diff --git a/lib/security/version.map b/lib/security/version.map index 2277555..e1c8148 100644 --- a/lib/security/version.map +++ b/lib/security/version.map @@ -20,4 +20,6 @@ EXPERIMENTAL { rte_security_get_userdata; rte_security_session_stats_get; rte_security_session_update; + __rte_security_set_pkt_metadata; + __rte_security_get_userdata; };