From mboxrd@z Thu Jan 1 00:00:00 1970 From: Akhil Goyal Subject: Re: [PATCH 1/2] cryptodev: add api for attach-detach session with queue pair Date: Tue, 21 Mar 2017 11:01:36 +0530 Message-ID: References: <20170317084510.2120-1-akhil.goyal@nxp.com> <348A99DA5F5B7549AA880327E580B435891A9111@IRSMSX101.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Transfer-Encoding: 7bit Cc: "Gonzalez Monroy, Sergio" , "Doherty, Declan" , "De Lara Guarch, Pablo" , "hemant.agrawal@nxp.com" To: "Trahe, Fiona" , "dev@dpdk.org" Return-path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0040.outbound.protection.outlook.com [104.47.38.40]) by dpdk.org (Postfix) with ESMTP id 0E718101B for ; Tue, 21 Mar 2017 06:31:48 +0100 (CET) In-Reply-To: <348A99DA5F5B7549AA880327E580B435891A9111@IRSMSX101.ger.corp.intel.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 3/20/2017 9:56 PM, Trahe, Fiona wrote: > Hi Akhil, > >> -----Original Message----- >> From: akhil.goyal@nxp.com [mailto:akhil.goyal@nxp.com] >> Sent: Friday, March 17, 2017 8:45 AM >> To: dev@dpdk.org >> Cc: Gonzalez Monroy, Sergio ; Doherty, >> Declan ; De Lara Guarch, Pablo >> ; Trahe, Fiona ; >> Akhil Goyal >> Subject: [PATCH 1/2] cryptodev: add api for attach-detach session with queue >> pair >> >> From: Akhil Goyal >> >> HW based crypto drivers may only support limited number of >> sessions per queue pair. This requires support for attaching >> sessions to specific queue pair. New APIs are introduced to >> attach/detach a session with/from a particular queue pair. >> These are optional APIs. >> >> Application can call attach API after creating a session >> and can call detach API before deleting a session. >> >> Application needs to check if max_nb_sessions_per_qp > 0, >> then it should call the attach API. >> >> max_nb_sessions_per_qp = 0 means infinite sessions per qp >> >> Signed-off-by: Akhil Goyal >> --- >> lib/librte_cryptodev/rte_cryptodev.c | 41 >> ++++++++++++++++++++++++++ >> lib/librte_cryptodev/rte_cryptodev.h | 27 +++++++++++++++++ >> lib/librte_cryptodev/rte_cryptodev_pmd.h | 29 ++++++++++++++++++ >> lib/librte_cryptodev/rte_cryptodev_version.map | 2 ++ >> 4 files changed, 99 insertions(+) >> >> diff --git a/lib/librte_cryptodev/rte_cryptodev.c >> b/lib/librte_cryptodev/rte_cryptodev.c >> index 0ac23ed..f1eabd0 100644 >> --- a/lib/librte_cryptodev/rte_cryptodev.c >> +++ b/lib/librte_cryptodev/rte_cryptodev.c >> @@ -1393,6 +1393,47 @@ rte_cryptodev_sym_session_create(uint8_t >> dev_id, >> return sess; >> } >> >> +void >> +rte_cryptodev_queue_pair_attach_sym_session(uint16_t qp_id, >> + struct rte_cryptodev_sym_session *sess) >> +{ >> + struct rte_cryptodev *dev; >> + >> + if (!rte_cryptodev_pmd_is_valid_dev(sess->dev_id)) { >> + CDEV_LOG_ERR("Invalid dev_id=%d", sess->dev_id); >> + return; >> + } >> + >> + dev = &rte_crypto_devices[sess->dev_id]; >> + >> + RTE_FUNC_PTR_OR_RET(*dev->dev_ops->qp_attach_session); >> + if (dev->dev_ops->qp_attach_session(dev, qp_id, sess->_private)) { >> + CDEV_LOG_ERR("dev_id %d failed to attach qp: %d with >> session", >> + sess->dev_id, qp_id); >> + return; >> + } >> +} > > > Wouldn't it be better if this returned an error if e.g. the qp already has max num sessions attached? ok.. I would correct this. Regards, Akhil > > > >> + >> +void >> +rte_cryptodev_queue_pair_detach_sym_session(uint16_t qp_id, >> + struct rte_cryptodev_sym_session *sess) >> +{ >> + struct rte_cryptodev *dev; >> + >> + if (!rte_cryptodev_pmd_is_valid_dev(sess->dev_id)) { >> + CDEV_LOG_ERR("Invalid dev_id=%d", sess->dev_id); >> + return; >> + } >> + >> + dev = &rte_crypto_devices[sess->dev_id]; >> + >> + RTE_FUNC_PTR_OR_RET(*dev->dev_ops->qp_detach_session); >> + if (dev->dev_ops->qp_detach_session(dev, qp_id, sess->_private)) { >> + CDEV_LOG_ERR("dev_id %d failed to detach qp: %d from >> session", >> + sess->dev_id, qp_id); >> + return; >> + } >> +} >> struct rte_cryptodev_sym_session * >> rte_cryptodev_sym_session_free(uint8_t dev_id, >> struct rte_cryptodev_sym_session *sess) >> diff --git a/lib/librte_cryptodev/rte_cryptodev.h >> b/lib/librte_cryptodev/rte_cryptodev.h >> index d61a43e..b322bea 100644 >> --- a/lib/librte_cryptodev/rte_cryptodev.h >> +++ b/lib/librte_cryptodev/rte_cryptodev.h >> @@ -332,6 +332,9 @@ struct rte_cryptodev_info { >> struct { >> unsigned max_nb_sessions; >> /**< Maximum number of sessions supported by device. */ >> + unsigned max_nb_sessions_per_qp; >> + /**< Maximum number of sessions per queue pair. >> + * Default 0 for infinite sessions. */ >> } sym; >> }; >> >> @@ -915,6 +918,30 @@ extern struct rte_cryptodev_sym_session * >> rte_cryptodev_sym_session_free(uint8_t dev_id, >> struct rte_cryptodev_sym_session *session); >> >> +/** >> + * Attach queue pair with sym session. >> + * >> + * @param qp_id Queue pair to which session will be attached. >> + * @param session Session pointer previously allocated by >> + * *rte_cryptodev_sym_session_create*. >> + * >> + */ >> +extern void >> +rte_cryptodev_queue_pair_attach_sym_session(uint16_t qp_id, >> + struct rte_cryptodev_sym_session *session); >> + >> +/** >> + * Detach queue pair with sym session. >> + * >> + * @param qp_id Queue pair to which session is attached. >> + * @param session Session pointer previously allocated by >> + * *rte_cryptodev_sym_session_create*. >> + * >> + */ >> +extern void >> +rte_cryptodev_queue_pair_detach_sym_session(uint16_t qp_id, >> + struct rte_cryptodev_sym_session *session); >> + >> >> #ifdef __cplusplus >> } >> diff --git a/lib/librte_cryptodev/rte_cryptodev_pmd.h >> b/lib/librte_cryptodev/rte_cryptodev_pmd.h >> index 1a417e2..df92817 100644 >> --- a/lib/librte_cryptodev/rte_cryptodev_pmd.h >> +++ b/lib/librte_cryptodev/rte_cryptodev_pmd.h >> @@ -381,6 +381,31 @@ typedef void * >> (*cryptodev_sym_configure_session_t)(struct rte_cryptodev *dev, >> typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev, >> void *session_private); >> >> +/** >> + * Optional API for drivers to attach sessions with queue pair. >> + * @param dev Crypto device pointer >> + * @param qp_id queue pair id for attaching session >> + * @param priv_sess Pointer to cryptodev's private session structure >> + * @return >> + * - Return 0 on success >> + */ >> +typedef int (*cryptodev_sym_queue_pair_attach_session_t)( >> + struct rte_cryptodev *dev, >> + uint16_t qp_id, >> + void *session_private); >> + >> +/** >> + * Optional API for drivers to detach sessions from queue pair. >> + * @param dev Crypto device pointer >> + * @param qp_id queue pair id for detaching session >> + * @param priv_sess Pointer to cryptodev's private session structure >> + * @return >> + * - Return 0 on success >> + */ >> +typedef int (*cryptodev_sym_queue_pair_detach_session_t)( >> + struct rte_cryptodev *dev, >> + uint16_t qp_id, >> + void *session_private); >> >> /** Crypto device operations function pointer table */ >> struct rte_cryptodev_ops { >> @@ -415,6 +440,10 @@ struct rte_cryptodev_ops { >> /**< Configure a Crypto session. */ >> cryptodev_sym_free_session_t session_clear; >> /**< Clear a Crypto sessions private data. */ >> + cryptodev_sym_queue_pair_attach_session_t qp_attach_session; >> + /**< Attach queue pair with session. */ >> + cryptodev_sym_queue_pair_attach_session_t qp_detach_session; >> + /**< Detach queue pair from session. */ >> }; >> >> >> diff --git a/lib/librte_cryptodev/rte_cryptodev_version.map >> b/lib/librte_cryptodev/rte_cryptodev_version.map >> index 831a15c..9ac510e 100644 >> --- a/lib/librte_cryptodev/rte_cryptodev_version.map >> +++ b/lib/librte_cryptodev/rte_cryptodev_version.map >> @@ -70,5 +70,7 @@ DPDK_17.05 { >> >> rte_cryptodev_get_auth_algo_enum; >> rte_cryptodev_get_cipher_algo_enum; >> + rte_cryptodev_queue_pair_attach_sym_session; >> + rte_cryptodev_queue_pair_detach_sym_session; >> >> } DPDK_17.02; >> -- >> 2.9.3 > >