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 680AEA0093; Thu, 13 Jan 2022 12:05:52 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D003642720; Thu, 13 Jan 2022 12:05:51 +0100 (CET) Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mails.dpdk.org (Postfix) with ESMTP id 6360240150 for ; Thu, 13 Jan 2022 12:05: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=1642071949; x=1673607949; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=R+SGF2HWhM9ad9Ri2hO42YDd51tK53HM2Vnd/uJV6lE=; b=RvDBu9OLMd1NtLnMIjX6RUXqPR2y2DJImTemT3gMnwN7o2Acx/EKzf/e HmaVrAzwicCLzOAhkUTUzEDvteC6m8BC0/7N1xA4A8w4sPLnpeDe0PXGJ jFrQMgeU36pBW/Ef0cq4zOXgN9I08POF3u+XcE4Ela4J4gM3qm8791q8F psHkaQit8nI7krGSopjhP797VC3ynpyfwws/ePOLpK41hKYp4tExhYwp5 EzlORZHTcGmjGMztzJP9GOhlbPROpFPB1QZMciX8J8+roveiW4oPmnzyh Hxa95b9Jdtbb6bCpAw5NoJjYpiilopajZ0RYRe+L3McgYgOYCKVSZzp/q Q==; X-IronPort-AV: E=McAfee;i="6200,9189,10225"; a="330334524" X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="330334524" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Jan 2022 03:05:45 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,284,1635231600"; d="scan'208";a="475271150" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga006.jf.intel.com with ESMTP; 13 Jan 2022 03:05:44 -0800 Received: from orsmsx606.amr.corp.intel.com (10.22.229.19) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Thu, 13 Jan 2022 03:05:44 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Thu, 13 Jan 2022 03:05:44 -0800 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.176) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Thu, 13 Jan 2022 03:05:44 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JUZqCsWMWsv1rDSwDovwKcdxIsNisbRBVgf03XhiTUyZftVhDzT9K/S7L9UfszJsd9BUvrT79IBSCx0sR3CKkto2LkPtTqU20ihW14mtS3zln5lnjSP/CadoBOhpT+CnV2BC5tyB5kyfaZnbVxf1fBJB4WjGEbzAFcHp/tT/GNznesZ2A4Lw7L4YE3VrxXcZD9BimRhdvrSouWt8S68jAhjM5xHkhMaPRg3zzGCp+A1AXbN/oHCtXBnSHS+OGJx3pWUgH0TfHDP9i81C7IdLI0cmE0jS8jNWgTJ4um8pAygUeqfZiuMCgc98znsyIVZeliG4HmeqBp4Dg96DZVnm1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=iABF3RpUzlAvDcFVGBmybiKOicBktMHcba1vNDr1fHM=; b=fZ8sfAngvXorORN8EPjfBsSulEyUlNRJ8qCnYMdyPqnt+FLcmfXUbf9qf3RjdrsF9l94JLVtZHOCGZl+eqPAb6osiCMUqwwdvBNbE4IbKKvCLkK+5qyO71QMnWbRHEzW7Wwrx9ueVXXN4DhQJeQrJKyiInG+zkNQknHPAEU6XX0olZKrVAkyodiXiWJMM+l6ixZ0ByZzZuqsTz4+KgrNgmRXjW/LwU5cm0Abq7AOelFcWjBENDIuyp7Bsr8rrZRbIj6BnsK4+0rcOJxmnCFXzc3ZtVs8c7EmmictHF3unBhf9PDBeH9hUpMy5ys1DeidiSttr6ejDDFYVf5lVE6bKA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH0PR11MB4824.namprd11.prod.outlook.com (2603:10b6:510:38::13) by DM5PR11MB1833.namprd11.prod.outlook.com (2603:10b6:3:110::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4867.11; Thu, 13 Jan 2022 11:05:42 +0000 Received: from PH0PR11MB4824.namprd11.prod.outlook.com ([fe80::8087:583f:a2f0:111a]) by PH0PR11MB4824.namprd11.prod.outlook.com ([fe80::8087:583f:a2f0:111a%4]) with mapi id 15.20.4888.011; Thu, 13 Jan 2022 11:05:42 +0000 From: "Gujjar, Abhinandan S" To: "Kundapura, Ganapati" , "jerinjacobk@gmail.com" , "Jayatheerthan, Jay" , "dev@dpdk.org" Subject: RE: [PATCH v3 1/2] eventdev/crypto_adapter: move crypto ops to circular buffer Thread-Topic: [PATCH v3 1/2] eventdev/crypto_adapter: move crypto ops to circular buffer Thread-Index: AQHYBtcgTivXShkspkexOSBtRS31MqxgxSuQ Date: Thu, 13 Jan 2022 11:05:42 +0000 Message-ID: References: <20220104123114.1053806-1-ganapati.kundapura@intel.com> <20220111103631.3664763-1-ganapati.kundapura@intel.com> In-Reply-To: <20220111103631.3664763-1-ganapati.kundapura@intel.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.6.200.16 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: fda8cf5f-830d-4057-6124-08d9d684a403 x-ms-traffictypediagnostic: DM5PR11MB1833:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:378; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: YIyeu1s5Gu3jYKqCjNa0A6XlKJM8aWCyXmNJDX0Y7wGs8mQ/5ofMwoo6xQZ4h4fCzJSTPo8DkP/aZnp+cEXKmxRfjmvweDrHAnhg1Te0oZlVSPggHd1JNNVFoxZrImPI6uotFU7RNSo55kg9juja/pXZ3HwErV2RcrvFFmfYM1Sc78azXHqtilBIsCvnrcP2DR9+yzm1eQvhEckj+d9j0o/z8lLkF7b+VvMktRxnETPKhrDNapHKGk8L920QFd6a5hmfe51bPoqTZhH7PupyHoWKHqg8634EEUGb1WJ0A2YwbXjY68AjscerFCjD3s6w418Xvm+jxj9rZGmwYyURdalVN+LI7LdqPpHLyi8HkTXpdpsYG2zlNDvG7/nFoglNvqmUh+AKOS0NuEH/4JTUoYnijvAX1nuzh+LVw0xLrWCgzozQLKO3pfSYjHTQekl3KHiVgXsnSnZXuDhcmZNrfyJbMzIRAFVh6RLMtMAHObRSk9XLV0JMB8s3UxbOdmWZnctZ2hBOWfZMulT8zFxolk0dBffkCrQgr9R77bafxbJp02AEUwFt/vl96IEWs/VrYmyn7uRcHVZk9PrpGJwHpmWQFr1CYd9wna50OPM3aTyiCkqASsnxukHGS2DEq/+Uvn3E8OBgkz9/y1UCWZF3g4XW1voXZkIsary2samW8duPwrR3sNt/B2plu7o0rNOYDAFD1wnhIoyG7PRE/S3uwQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR11MB4824.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(366004)(84040400005)(7696005)(8936002)(86362001)(33656002)(71200400001)(76116006)(2906002)(82960400001)(8676002)(55016003)(30864003)(53546011)(508600001)(6506007)(26005)(186003)(38070700005)(316002)(5660300002)(66446008)(66556008)(66476007)(66946007)(38100700002)(64756008)(110136005)(52536014)(9686003)(122000001)(83380400001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?P7AUvKCDjpjc14CRdzrhvxRM+8Jz6lObP7mmH8+xMDykEOJau8gyrgWHgjJT?= =?us-ascii?Q?2tlsZobcFUP8ljVGiuxwFjJ/6yLHjeJS1ojTopOnAPc3fv5qyq1KvrR3B3ht?= =?us-ascii?Q?4aIdEiHebKgvGPQsUYCDHfNNqrjOik1gWjEK3YFVADE9hKjoivc2eob7+zmN?= =?us-ascii?Q?17WnEB+fvbZmeHf1IOoPAlVNA7DizkJgfvTI8DKm+2mY8f97k55n9ZNKt/SF?= =?us-ascii?Q?GHMyAMAtP7MXk63UZB7kxcxUm9Zw5DzXfJOglQap/akL9ArbHlABUzUSdyhG?= =?us-ascii?Q?tPHBmN+fog3Uq0/Zofop4kaNJB5KJ6r+hwqSIpepO5N1j9rJgpx7lXGECc/r?= =?us-ascii?Q?STBOtfsTRq6h4Zdb7yHDJg3bz1jXlot3Dz29XAG3wMa3O9YLsCamktYYQUpt?= =?us-ascii?Q?CvVwQsOFeC/+Ox2LRJshs0s7NjLSt21KZYeYPot3SDYuCeIKdBkkRhvHvfmX?= =?us-ascii?Q?kzGu/Z0JRMACLWTUBDu3jId4FH7P5Zr7SQwDUGKG81NxwwPSGgWoh5yWdVLC?= =?us-ascii?Q?ooLDD1eeMtNfEhtomp6wKWsuM+OcLhM1Vt78mdnR/K0m31xjuJdbYPZ1pLPy?= =?us-ascii?Q?AlT3D/PDSzS2U2E1Qq3ds2dSabHht3YfOxhJztl8LhvqH9V9F1JBvwm52nYD?= =?us-ascii?Q?BkhoTdNG8dVotL9+n2HonoWSdFh3eEBdAfpg+imlQpVSd16AdkH2SXwAebN1?= =?us-ascii?Q?v1Xs+oXc+STEZvRjSm8o7fmvs3ViqLL5d9TRq478HJw95ZBYa8HS2DgPHJOM?= =?us-ascii?Q?UJ3bxD3m7LVbp2yqxMqcb3J6ZKQrdR3qQY6xxa8pD87X8ZdrlBfPIfQElXxc?= =?us-ascii?Q?/FtrAdZXTXp6j3J1tPUCQdcjl9XQqhCkctO4vmTaskPBxO+Mt9tRxEHXObZa?= =?us-ascii?Q?lk9fmJRFN16+Mgpb/N0BlKmu5kFQf6VJ83zlaUy2v0OmRvpmaRury3uAe0ej?= =?us-ascii?Q?EYPFi1hOVaXd26uS1tJsYGHe7Fyor+vrjMZ1acdOs3b9VbpmH2tVSDlBnnUA?= =?us-ascii?Q?bdbaStvfstDcmaPKw2lggBbL0um9424eoK+monmtGSgO0NJU1F/tY49uAxrQ?= =?us-ascii?Q?5zBmang4WBQ8WbGOb9K+s3EJciCMVcxbFNFB7HhMzJgyMJrx6jCDTWSJfUEA?= =?us-ascii?Q?MedTUfAQRkl6JLaSQjlCx8uGhK6XAiQgXBzFgsySwqsndmF7Gt6KgtizclVG?= =?us-ascii?Q?gL2f9aQwaBxTPPr7FCMWx9cba0OmBQ58vwF4ymtHcgbMKYgN03VPWsuYFPFS?= =?us-ascii?Q?V/+Z6IUdrIlRab1WDSz5YwJDt8xXuOb8oUkwnDdZ4pjc2USp0zihEBOaCa19?= =?us-ascii?Q?6Mu/zBYYMfAFd6De05tn8NioFLeBPKyKTbsHeBwquMvOTa9cFSzF2cOVCGUQ?= =?us-ascii?Q?WhQmz3VNWSzKXMs4a84VHfWb1LFEheFinvTBoSZLqneSK2U6ekA1fuCowYS6?= =?us-ascii?Q?MslonA7z/8tvY4CDRPNrAzM0mToZfTJm/tTmHJgjN/qihqFz4vwImw6Q3Rx/?= =?us-ascii?Q?t+JVqr1lBJgqoU6sHVXqcvVZyVDN1m9TQmtSiQpI/byNvGLusT22TXJzHDpG?= =?us-ascii?Q?fQhZ0v/DvkUDIDWbDI6JZ7HLcmuUQgBa53bxfe2y/4gKMTfj5D/V1EXDorC6?= =?us-ascii?Q?OqeRpE0/wvmRAxroUn0yZDCCoxG9HcFNNbXbCcHN+5y1mGqMi+quk3jY+6yY?= =?us-ascii?Q?8oLl+g=3D=3D?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB4824.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: fda8cf5f-830d-4057-6124-08d9d684a403 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Jan 2022 11:05:42.4254 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zMK99ong6WgTltLOZ+eLAZ4nc5lYxaTqWYfgsUTYcclSNpNwCxkqU8G6RVe+FA4lvOabfWKrJG7o+RTp6ySayJ7ztBfbaW5AG5IVEhHICfY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1833 X-OriginatorOrg: intel.com 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 Hi Ganapati, > -----Original Message----- > From: Kundapura, Ganapati > Sent: Tuesday, January 11, 2022 4:07 PM > To: jerinjacobk@gmail.com; Jayatheerthan, Jay ; > dev@dpdk.org > Cc: Gujjar, Abhinandan S > Subject: [PATCH v3 1/2] eventdev/crypto_adapter: move crypto ops to circu= lar > buffer >=20 > Move crypto ops to circular buffer to retain crypto ops when > cryptodev/eventdev are temporarily full >=20 > --- > v3: > * update eca_ops_buffer_flush() to flush out all the crypto > ops out of circular buffer. > * remove freeing of failed crypto ops from eca_ops_enqueue_burst() > and add to cirular buffer for later processing. >=20 > v2: > * reset cryptp adapter next cdev id before dequeueing from the Cryptp -> crypto > next cdev > --- >=20 > Signed-off-by: Ganapati Kundapura I don't see sign off after applying the patch. Could you take a look? commit 18d9c3b1728f325dba5fe5dbb51df2366b70527a Author: Ganapati Kundapura Date: Tue Jan 11 04:36:30 2022 -0600 eventdev/crypto_adapter: move crypto ops to circular buffer =20 Move crypto ops to circular buffer to retain crypto ops when cryptodev/eventdev are temporarily full >=20 > diff --git a/lib/eventdev/rte_event_crypto_adapter.c > b/lib/eventdev/rte_event_crypto_adapter.c > index d840803..9086368 100644 > --- a/lib/eventdev/rte_event_crypto_adapter.c > +++ b/lib/eventdev/rte_event_crypto_adapter.c > @@ -25,11 +25,27 @@ > #define CRYPTO_ADAPTER_MEM_NAME_LEN 32 > #define CRYPTO_ADAPTER_MAX_EV_ENQ_RETRIES 100 >=20 > +#define CRYPTO_ADAPTER_OPS_BUFFER_SZ (BATCH_SIZE + BATCH_SIZE) > #define > +CRYPTO_ADAPTER_BUFFER_SZ 1024 > + > /* Flush an instance's enqueue buffers every CRYPTO_ENQ_FLUSH_THRESHOLD > * iterations of eca_crypto_adapter_enq_run() > */ > #define CRYPTO_ENQ_FLUSH_THRESHOLD 1024 >=20 > +struct crypto_ops_circular_buffer { > + /* index of head element in circular buffer */ > + uint16_t head; > + /* index of tail element in circular buffer */ > + uint16_t tail; > + /* number elements in buffer */ number elements -> number of elements=20 > + uint16_t count; > + /* size of circular buffer */ > + uint16_t size; > + /* Pointer to hold rte_crypto_ops for batching */ > + struct rte_crypto_op **op_buffer; > +} __rte_cache_aligned; > + > struct event_crypto_adapter { > /* Event device identifier */ > uint8_t eventdev_id; > @@ -47,6 +63,8 @@ struct event_crypto_adapter { > struct crypto_device_info *cdevs; > /* Loop counter to flush crypto ops */ > uint16_t transmit_loop_count; > + /* Circular buffer for batching crypto ops to eventdev */ > + struct crypto_ops_circular_buffer ebuf; > /* Per instance stats structure */ > struct rte_event_crypto_adapter_stats crypto_stats; > /* Configuration callback for rte_service configuration */ @@ -93,8 > +111,8 @@ struct crypto_device_info { struct crypto_queue_pair_info { > /* Set to indicate queue pair is enabled */ > bool qp_enabled; > - /* Pointer to hold rte_crypto_ops for batching */ > - struct rte_crypto_op **op_buffer; > + /* Circular buffer for batching crypto ops to cdev */ > + struct crypto_ops_circular_buffer cbuf; > /* No of crypto ops accumulated */ > uint8_t len; > } __rte_cache_aligned; > @@ -141,6 +159,77 @@ eca_init(void) > return 0; > } >=20 > +static inline bool > +eca_circular_buffer_batch_ready(struct crypto_ops_circular_buffer > +*bufp) { > + return bufp->count >=3D BATCH_SIZE; > +} > + > +static inline void > +eca_circular_buffer_free(struct crypto_ops_circular_buffer *bufp) { > + rte_free(bufp->op_buffer); > +} > + > +static inline int > +eca_circular_buffer_init(const char *name, > + struct crypto_ops_circular_buffer *bufp, > + uint16_t sz) > +{ > + bufp->op_buffer =3D rte_zmalloc(name, > + sizeof(struct rte_crypto_op *) * sz, > + 0); > + if (bufp->op_buffer =3D=3D NULL) > + return -ENOMEM; > + > + bufp->size =3D sz; > + return 0; > +} > + > +static inline int > +eca_circular_buffer_add(struct crypto_ops_circular_buffer *bufp, > + struct rte_crypto_op *op) > +{ > + uint16_t *tailp =3D &bufp->tail; > + > + bufp->op_buffer[*tailp] =3D op; > + *tailp =3D (*tailp + 1) % bufp->size; Provide a comment saying you are taking care of buffer rollover condition > + bufp->count++; > + > + return 0; > +} > + > +static inline int > +eca_circular_buffer_flush_to_cdev(struct crypto_ops_circular_buffer *buf= p, > + uint8_t cdev_id, uint16_t qp_id, > + uint16_t *nb_ops_flushed) This function is returning a value but caller does not check! > +{ > + uint16_t n =3D 0; > + uint16_t *headp =3D &bufp->head; > + uint16_t *tailp =3D &bufp->tail; > + struct rte_crypto_op **ops =3D bufp->op_buffer; > + > + if (*tailp > *headp) > + n =3D *tailp - *headp; > + else if (*tailp < *headp) > + n =3D bufp->size - *headp; > + else { > + *nb_ops_flushed =3D 0; > + return 0; /* buffer empty */ > + } > + > + *nb_ops_flushed =3D rte_cryptodev_enqueue_burst(cdev_id, qp_id, > + &ops[*headp], n); > + bufp->count -=3D *nb_ops_flushed; > + if (!bufp->count) { > + *headp =3D 0; > + *tailp =3D 0; > + } else > + *headp =3D (*headp + *nb_ops_flushed) % bufp->size; > + > + return *nb_ops_flushed =3D=3D n ? 0 : -1; > +} > + > static inline struct event_crypto_adapter * eca_id_to_adapter(uint8_t i= d) { > @@ -237,10 +326,19 @@ rte_event_crypto_adapter_create_ext(uint8_t id, > uint8_t dev_id, > return -ENOMEM; > } >=20 > + if (eca_circular_buffer_init("eca_edev_circular_buffer", > + &adapter->ebuf, > + CRYPTO_ADAPTER_BUFFER_SZ)) { > + RTE_EDEV_LOG_ERR("Failed to get mem for edev buffer"); Mem -> memory, edev -> eventdev.=20 > + rte_free(adapter); > + return -ENOMEM; > + } > + > ret =3D rte_event_dev_info_get(dev_id, &dev_info); > if (ret < 0) { > RTE_EDEV_LOG_ERR("Failed to get info for eventdev %d: %s!", > dev_id, dev_info.driver_name); > + eca_circular_buffer_free(&adapter->ebuf); > rte_free(adapter); > return ret; > } > @@ -259,6 +357,7 @@ rte_event_crypto_adapter_create_ext(uint8_t id, > uint8_t dev_id, > socket_id); > if (adapter->cdevs =3D=3D NULL) { > RTE_EDEV_LOG_ERR("Failed to get mem for crypto devices\n"); > + eca_circular_buffer_free(&adapter->ebuf); > rte_free(adapter); > return -ENOMEM; > } > @@ -337,11 +436,10 @@ eca_enq_to_cryptodev(struct event_crypto_adapter > *adapter, struct rte_event *ev, > struct crypto_queue_pair_info *qp_info =3D NULL; > struct rte_crypto_op *crypto_op; > unsigned int i, n; > - uint16_t qp_id, len, ret; > + uint16_t qp_id, len, nb_enqueued =3D 0; > uint8_t cdev_id; >=20 > len =3D 0; > - ret =3D 0; > n =3D 0; > stats->event_deq_count +=3D cnt; >=20 > @@ -367,7 +465,7 @@ eca_enq_to_cryptodev(struct event_crypto_adapter > *adapter, struct rte_event *ev, > continue; > } > len =3D qp_info->len; > - qp_info->op_buffer[len] =3D crypto_op; > + eca_circular_buffer_add(&qp_info->cbuf, crypto_op); > len++; > } else if (crypto_op->sess_type =3D=3D > RTE_CRYPTO_OP_SESSIONLESS && > crypto_op->private_data_offset) { > @@ -383,7 +481,7 @@ eca_enq_to_cryptodev(struct event_crypto_adapter > *adapter, struct rte_event *ev, > continue; > } > len =3D qp_info->len; > - qp_info->op_buffer[len] =3D crypto_op; > + eca_circular_buffer_add(&qp_info->cbuf, crypto_op); > len++; > } else { > rte_pktmbuf_free(crypto_op->sym->m_src); > @@ -391,18 +489,17 @@ eca_enq_to_cryptodev(struct event_crypto_adapter > *adapter, struct rte_event *ev, > continue; > } >=20 > - if (len =3D=3D BATCH_SIZE) { > - struct rte_crypto_op **op_buffer =3D qp_info- > >op_buffer; > - ret =3D rte_cryptodev_enqueue_burst(cdev_id, > + if (eca_circular_buffer_batch_ready(&qp_info->cbuf)) { > + eca_circular_buffer_flush_to_cdev(&qp_info->cbuf, > + cdev_id, > qp_id, > - op_buffer, > - BATCH_SIZE); > + &nb_enqueued); > + stats->crypto_enq_count +=3D nb_enqueued; > + n +=3D nb_enqueued; >=20 > - stats->crypto_enq_count +=3D ret; > - > - while (ret < len) { > + while (nb_enqueued < len) { > struct rte_crypto_op *op; > - op =3D op_buffer[ret++]; > + op =3D qp_info- > >cbuf.op_buffer[nb_enqueued++]; > stats->crypto_enq_fail++; > rte_pktmbuf_free(op->sym->m_src); > rte_crypto_op_free(op); Not sure, why are you free the ops which are not enqueued to cryptodev. Isn't it the goal of the patch is to retain those non-enqueued crypto_ops t= emporarily and retry later? > @@ -413,7 +510,6 @@ eca_enq_to_cryptodev(struct event_crypto_adapter > *adapter, struct rte_event *ev, >=20 > if (qp_info) > qp_info->len =3D len; > - n +=3D ret; > } >=20 > return n; > @@ -425,14 +521,12 @@ eca_crypto_enq_flush(struct event_crypto_adapter > *adapter) > struct rte_event_crypto_adapter_stats *stats =3D &adapter->crypto_stats= ; > struct crypto_device_info *curr_dev; > struct crypto_queue_pair_info *curr_queue; > - struct rte_crypto_op **op_buffer; > struct rte_cryptodev *dev; > uint8_t cdev_id; > uint16_t qp; > - uint16_t ret; > + uint16_t nb_enqueued =3D 0, nb =3D 0; > uint16_t num_cdev =3D rte_cryptodev_count(); >=20 > - ret =3D 0; > for (cdev_id =3D 0; cdev_id < num_cdev; cdev_id++) { > curr_dev =3D &adapter->cdevs[cdev_id]; > dev =3D curr_dev->dev; > @@ -444,16 +538,17 @@ eca_crypto_enq_flush(struct event_crypto_adapter > *adapter) > if (!curr_queue->qp_enabled) > continue; >=20 > - op_buffer =3D curr_queue->op_buffer; > - ret =3D rte_cryptodev_enqueue_burst(cdev_id, > + eca_circular_buffer_flush_to_cdev(&curr_queue->cbuf, > + cdev_id, > qp, > - op_buffer, > - curr_queue->len); > - stats->crypto_enq_count +=3D ret; > + &nb_enqueued); >=20 > - while (ret < curr_queue->len) { > + stats->crypto_enq_count +=3D nb_enqueued; > + nb +=3D nb_enqueued; > + > + while (nb_enqueued < curr_queue->len) { > struct rte_crypto_op *op; > - op =3D op_buffer[ret++]; > + op =3D curr_queue- > >cbuf.op_buffer[nb_enqueued++]; > stats->crypto_enq_fail++; > rte_pktmbuf_free(op->sym->m_src); > rte_crypto_op_free(op); > @@ -462,7 +557,7 @@ eca_crypto_enq_flush(struct event_crypto_adapter > *adapter) > } > } >=20 > - return ret; > + return nb; > } >=20 > static int > @@ -499,9 +594,9 @@ eca_crypto_adapter_enq_run(struct > event_crypto_adapter *adapter, > return nb_enqueued; > } >=20 > -static inline void > +static inline uint16_t > eca_ops_enqueue_burst(struct event_crypto_adapter *adapter, > - struct rte_crypto_op **ops, uint16_t num) > + struct rte_crypto_op **ops, uint16_t num) > { > struct rte_event_crypto_adapter_stats *stats =3D &adapter->crypto_stats= ; > union rte_event_crypto_metadata *m_data =3D NULL; @@ -518,6 +613,8 > @@ eca_ops_enqueue_burst(struct event_crypto_adapter *adapter, > num =3D RTE_MIN(num, BATCH_SIZE); > for (i =3D 0; i < num; i++) { > struct rte_event *ev =3D &events[nb_ev++]; > + > + m_data =3D NULL; > if (ops[i]->sess_type =3D=3D RTE_CRYPTO_OP_WITH_SESSION) { > m_data =3D rte_cryptodev_sym_session_get_user_data( > ops[i]->sym->session); > @@ -548,21 +645,58 @@ eca_ops_enqueue_burst(struct event_crypto_adapter > *adapter, > event_port_id, > &events[nb_enqueued], > nb_ev - nb_enqueued); > + > } while (retry++ < CRYPTO_ADAPTER_MAX_EV_ENQ_RETRIES && > nb_enqueued < nb_ev); >=20 > - /* Free mbufs and rte_crypto_ops for failed events */ > - for (i =3D nb_enqueued; i < nb_ev; i++) { > - struct rte_crypto_op *op =3D events[i].event_ptr; > - rte_pktmbuf_free(op->sym->m_src); > - rte_crypto_op_free(op); > - } > - > stats->event_enq_fail_count +=3D nb_ev - nb_enqueued; > stats->event_enq_count +=3D nb_enqueued; > stats->event_enq_retry_count +=3D retry - 1; > + > + return nb_enqueued; > } >=20 > +static int > +eca_circular_buffer_flush_to_evdev(struct event_crypto_adapter *adapter, > + struct crypto_ops_circular_buffer *bufp) { > + uint16_t n =3D 0, nb_ops_flushed; > + uint16_t *headp =3D &bufp->head; > + uint16_t *tailp =3D &bufp->tail; > + struct rte_crypto_op **ops =3D bufp->op_buffer; > + > + if (*tailp > *headp) > + n =3D *tailp - *headp; > + else if (*tailp < *headp) > + n =3D bufp->size - *headp; > + else > + return 0; /* buffer empty */ > + > + nb_ops_flushed =3D eca_ops_enqueue_burst(adapter, ops, n); > + bufp->count -=3D nb_ops_flushed; > + if (!bufp->count) { > + *headp =3D 0; > + *tailp =3D 0; > + Extra line not required > + return 0; /* buffer empty */ > + } > + > + *headp =3D (*headp + nb_ops_flushed) % bufp->size; > + Extra line not required > + return 1; > +} > + > + > +static void > +eca_ops_buffer_flush(struct event_crypto_adapter *adapter) { > + if (adapter->ebuf.count =3D=3D 0) > + return; > + > + while (eca_circular_buffer_flush_to_evdev(adapter, > + &adapter->ebuf)) > + ; > +} > static inline unsigned int > eca_crypto_adapter_deq_run(struct event_crypto_adapter *adapter, > unsigned int max_deq) > @@ -571,7 +705,7 @@ eca_crypto_adapter_deq_run(struct > event_crypto_adapter *adapter, > struct crypto_device_info *curr_dev; > struct crypto_queue_pair_info *curr_queue; > struct rte_crypto_op *ops[BATCH_SIZE]; > - uint16_t n, nb_deq; > + uint16_t n, nb_deq, nb_enqueued, i; > struct rte_cryptodev *dev; > uint8_t cdev_id; > uint16_t qp, dev_qps; > @@ -579,16 +713,20 @@ eca_crypto_adapter_deq_run(struct > event_crypto_adapter *adapter, > uint16_t num_cdev =3D rte_cryptodev_count(); >=20 > nb_deq =3D 0; > + eca_ops_buffer_flush(adapter); > + > do { > - uint16_t queues =3D 0; > done =3D true; >=20 > for (cdev_id =3D adapter->next_cdev_id; > cdev_id < num_cdev; cdev_id++) { > + uint16_t queues =3D 0; > + > curr_dev =3D &adapter->cdevs[cdev_id]; > dev =3D curr_dev->dev; > if (dev =3D=3D NULL) > continue; > + > dev_qps =3D dev->data->nb_queue_pairs; >=20 > for (qp =3D curr_dev->next_queue_pair_id; @@ -596,7 > +734,8 @@ eca_crypto_adapter_deq_run(struct event_crypto_adapter > *adapter, > queues++) { >=20 > curr_queue =3D &curr_dev->qpairs[qp]; > - if (!curr_queue->qp_enabled) > + if (curr_queue =3D=3D NULL || > + !curr_queue->qp_enabled) > continue; >=20 > n =3D rte_cryptodev_dequeue_burst(cdev_id, qp, > @@ -605,11 +744,27 @@ eca_crypto_adapter_deq_run(struct > event_crypto_adapter *adapter, > continue; >=20 > done =3D false; > + nb_enqueued =3D 0; > + > stats->crypto_deq_count +=3D n; > - eca_ops_enqueue_burst(adapter, ops, n); > + > + if (unlikely(!adapter->ebuf.count)) > + nb_enqueued =3D > eca_ops_enqueue_burst( > + adapter, ops, n); > + > + if (nb_enqueued =3D=3D n) > + goto check; > + > + /* Failed to enqueue events case */ > + for (i =3D nb_enqueued; i < n; i++) > + eca_circular_buffer_add( > + &adapter->ebuf, > + ops[nb_enqueued]); > + > +check: > nb_deq +=3D n; >=20 > - if (nb_deq > max_deq) { > + if (nb_deq >=3D max_deq) { > if ((qp + 1) =3D=3D dev_qps) { > adapter->next_cdev_id =3D > (cdev_id + 1) > @@ -622,6 +777,7 @@ eca_crypto_adapter_deq_run(struct > event_crypto_adapter *adapter, > } > } > } > + adapter->next_cdev_id =3D 0; > } while (done =3D=3D false); > return nb_deq; > } > @@ -751,11 +907,10 @@ eca_add_queue_pair(struct event_crypto_adapter > *adapter, uint8_t cdev_id, > return -ENOMEM; >=20 > qpairs =3D dev_info->qpairs; > - qpairs->op_buffer =3D rte_zmalloc_socket(adapter->mem_name, > - BATCH_SIZE * > - sizeof(struct rte_crypto_op *), > - 0, adapter->socket_id); > - if (!qpairs->op_buffer) { > + > + if (eca_circular_buffer_init("eca_cdev_circular_buffer", > + &qpairs->cbuf, > + > CRYPTO_ADAPTER_OPS_BUFFER_SZ)) { > rte_free(qpairs); > return -ENOMEM; > } > -- > 2.6.4