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 63CC8A04FD; Wed, 8 Jun 2022 13:23:29 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4FC5140689; Wed, 8 Jun 2022 13:23:29 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mails.dpdk.org (Postfix) with ESMTP id 2D08F4021D for ; Wed, 8 Jun 2022 13:23:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1654687406; x=1686223406; h=from:to:subject:date:message-id:references:in-reply-to: content-transfer-encoding:mime-version; bh=WM+uSpu4D4q138ga8q+1tJRnMJLYEASTeMECx7s04Q4=; b=HFhnhYeNCCmZ/VqH8/aMoF6WpC2a3vu8fFVnj0yS73VkeeWk+CNTik/b dsW3nlszjSXLZvN7wlyoMJDp6BHxIU8H3qXv6IDpqkQX/VHLFvCrthufK Yx84X+M95pNAh58lyUoVXyxwcOgm6iZIpSG1q2UCM9QYbZnaOiMaXM1lu RRNBUSOg9cq4R3zcY651BkZ3Cd0eHKPa/Gy+/tnwA4FeOq2SROeCYwgGA 0eWESJvdifrUYCggVdbwnul/letkef9tK/oGY4GjtAi0BZTlNi9Zd5N5J 8OjXMGBJYx46LHqr7tvzD5BlbObyPmgfn+KyKHNNqA6tSYdX2iV9lcLn8 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10371"; a="278038138" X-IronPort-AV: E=Sophos;i="5.91,286,1647327600"; d="scan'208";a="278038138" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2022 04:23:25 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,286,1647327600"; d="scan'208";a="580013515" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by orsmga007.jf.intel.com with ESMTP; 08 Jun 2022 04:23:24 -0700 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 8 Jun 2022 04:23:24 -0700 Received: from fmsmsx604.amr.corp.intel.com (10.18.126.84) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Wed, 8 Jun 2022 04:23:23 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Wed, 8 Jun 2022 04:23:23 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.172) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.27; Wed, 8 Jun 2022 04:23:23 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=k5y/UV1vWs0hMLiDwKnWWGGWa9Npbu2T1PzKzDyjihu6S9rO/kSmY9tOtTUluF62ESx8McYvtfkjqDJ81EapkalH+X7Oi7ZuMEfQth0XKM4XMNaE2JHSHY54l3IL+V4eig7qJLnzJJ56aDNyb4df82+BSYQnUoaDdWbrNognbjFTGq7AL4U0GUnZFGYtGQfoJzVpV0ILXkx306wZ9+cUdXq+Cmi+wBbG19MTsp2xOH1KNglhJcpKjQdKlyzC4h4Zlq3+7rh9I+KXtCkJV2zNZ8yikpsZTSDpTToWtvOFD/aChVsySmEMd3Z7+O6X4QBVDaTlCXAT5ooDiXRNTM50Zw== 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=x/nu0v+B8TG0h/ylutxKs1wwJHCWL1+hVQE8FvtcNpk=; b=k/MMlDCIsL02n5iPLv0Dg8fAzjKiuU05Ufp441ipusDLbKWtMivSdTH//9NFNZkpEdRp8Ub6f3nQguoPbBfNS+KNd7+RJM4f0eTKwk7M6XkXBmzFyIHOxkBZKBQc295Vc7ByEG35PnMHX3PWvFfSKSlHTV6YCFeClTW51zW0qwbksnb0as5EkZ0Ac2F6VIhRpovBkG/SnlKoCvxsdN1jxWu9MBLg2tjF0pkBZGxN08CCFOhm/VDZxP7j3swOtOgNJ8/tl/XQk/ws2E9XBWUfpBtA2OxRkRd/Ml+54HI79Xe+V8zlYOfVPsFtMh0Kv5EFwtGtVVv+Fbm/xKeH82SVWw== 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 MW4PR11MB5911.namprd11.prod.outlook.com (2603:10b6:303:16b::16) by BN6PR11MB1473.namprd11.prod.outlook.com (2603:10b6:405:a::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.17; Wed, 8 Jun 2022 11:23:20 +0000 Received: from MW4PR11MB5911.namprd11.prod.outlook.com ([fe80::f87f:8209:4b7b:4ee1]) by MW4PR11MB5911.namprd11.prod.outlook.com ([fe80::f87f:8209:4b7b:4ee1%6]) with mapi id 15.20.5332.012; Wed, 8 Jun 2022 11:23:20 +0000 From: "Kundapura, Ganapati" To: "Jayatheerthan, Jay" , "jerinjacobk@gmail.com" , "dev@dpdk.org" Subject: RE: [PATCH v3] eventdev: add adapter instance get API Thread-Topic: [PATCH v3] eventdev: add adapter instance get API Thread-Index: AQHYekfdrWa+36HdBUqCz/lUFiiizq1D7Z+AgAFx3eA= Date: Wed, 8 Jun 2022 11:23:20 +0000 Message-ID: References: <20220607080730.3455482-1-ganapati.kundapura@intel.com> <20220607082115.3459593-1-ganapati.kundapura@intel.com> In-Reply-To: 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.500.17 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: bed0a00c-185d-47eb-aed9-08da49414b07 x-ms-traffictypediagnostic: BN6PR11MB1473:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: LtVM6fETJkt3W7PLvLtAgdqYFb0W84/LpqNqYaC/PfQAhAGwZo+qo9Y8bDiG5lyw63prlWfBIxVaDj1bKE+iQxIPCLVKLE9Fb0MK+qg8kD5mj85417E45rjN4zMDAA9lJxIELMyqcYfM2E5DHUGAyvnJJsQyyeshiNNmAoSKXgU8L1Sw7tTmbeQ+OhZj7DDMPCN+Jkzu6qAJsLsSik6uhAZGHtWcBa9+CpQVsHtq6nwI1QKINgNF5jroQIWwJ+k/WM11jyCWNIJON5vUMhBF8Yx7GczvJgI1R3+0IFqsZdbmMz7kwhD8J5UEuuvKzK9A6at4V/MIP0KoJHhurGqkUELJkaSgS+2qSc6Y8FGkxhQ7l+ddfE5ErdD9+BYhSJY38+q+9Ggt+QfSpEIO/47jPwUz/3Zz3hb0+TJjlDu/oZdH2A+5RD7VeLh8nwtUVdpniRqxaeErODIsn44U+lWd7CYnDZjOzAJrid7zfya7Ra1RX5B4WBVN4r5iEeEMbxo6I1XZMtzD0QaAiWSPR53Tno3b4Pld4FvMHyI8jJbER2JQkY7dpSvrqeoW2CoQKoVeIJ815mUSLRJwzLKmzOGgmIBj3LeFgGmF9g+ogoS+RP2kPCKkD2lpSeMi1FBW+ySV7QEXpOvhouD0MmfJJFFdYx1G42XBjHg4xEPEkdW1Tcq7Jm+0gfpGlj2SzwPhKYIoJsD4sY90vjiTv3GQbMnWcQ== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW4PR11MB5911.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(66946007)(55016003)(83380400001)(82960400001)(122000001)(38100700002)(186003)(110136005)(66476007)(8676002)(66556008)(64756008)(66446008)(30864003)(8936002)(5660300002)(76116006)(33656002)(2906002)(316002)(71200400001)(86362001)(508600001)(52536014)(38070700005)(55236004)(7696005)(6506007)(53546011)(9686003)(26005)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?/YXlBxn9hokqX4u8cOAzQDLkr43f3ji2mbAQbYAesJewzAN1dIyx+t0t97vO?= =?us-ascii?Q?OcOP7JvA9Hq2AUyYH+Lp7A140cJRTYX1yLoE+YczWFaGLL/UnEnjbbIFa7zs?= =?us-ascii?Q?ZdmsfBhweJ77dqN0BgXb6/WJ2BKEakmLG58Hyhm5B4Q45Xi4YzIHrretrY5+?= =?us-ascii?Q?+r/5FSIsQ7zJPJDPBhssVC12qctXoedLNqrwsj/UvslqiDDbozKgAxkOlcOJ?= =?us-ascii?Q?2NmyV8IP+MEsPWdEtnMmjxkVpVa6fA1TZQi0Rt8g1GSc1N7+v1HBJuw6O+Y7?= =?us-ascii?Q?ZZB5JbbIvi51OzAnGncWll7Bnu22cywJjiYIy7D+S+1lgYJo3WsGs6/9QhS/?= =?us-ascii?Q?VZecwKrGa7G8GJl8S/GIRSMHAvl2/yBmb6MekkMujJOsb+gpLP5Crhqgin4W?= =?us-ascii?Q?ciUlmhgmlVsqJBdazE6T2FLG7aONUMB3OjzQal7kWa7EoJeYLNxzrI0aZ0Uv?= =?us-ascii?Q?kqyNoYiSNnC3rAXnbdHrWcbeKrZFeaeIyaaxMyx7GSxoIFlmG4DCD2DCHIEf?= =?us-ascii?Q?Rxv3DiynfjS8Z2hRPlrNWXfkaqQLq6su3Y+1R7gon+hl0fwcS/hWGFn7EYU+?= =?us-ascii?Q?awgmoufxQObQgMr3SWHxY5fnCFdUgwt9ewwZqbjwWuHwwcI9gmoNMvmns6O8?= =?us-ascii?Q?YL6tBSyDfg35yZjiuJXPUql7FxN5oX1klxq2Fk5VF4/fLVogMlL/lemr5Fb6?= =?us-ascii?Q?CVP4qDxESe4iMhcqomFclRnpu6Gbd8FBT5+JEj7Xza6W0Mrdp+CMvi7U+Q+Y?= =?us-ascii?Q?RZd5IsypKlYbQenochcYNHq3HKyoSf9+R9E3/5nxceFCBKQQ8hIyB3YfcAVw?= =?us-ascii?Q?tkAVLC/Vfp880JjbI3kLRpMcYv/7fOu5SplN9VjRbeqiNmt95Bi9sbEddis1?= =?us-ascii?Q?gyqd6CIreHS0LUus+bLUs4vDh2AQ0tisYWMqHo6NhMYJYuccK13Oa/YE1Dy6?= =?us-ascii?Q?+PPep9bWmK+BA4+tN/VJbVdbkvkKBK+hjTgahu7JZL1SxsLU/jCZh6TpV+XZ?= =?us-ascii?Q?WCgrLTY/SjVa3dQljhAjxnCT30Sq90fb6BXw6xu/x6iLgP4QkJ+YoCDXrWXm?= =?us-ascii?Q?UAvQSXP+3Ez3Y/GZPwYWNvTTnUCgrjFVpbZ+1H2IsXHjlnmMAmpOzmRcQYsi?= =?us-ascii?Q?g9RQgSHYf+lEBWz+6CySpkgY0LFDOXLQIKaFkkbkdeefm1bw0U52WWz/OJm5?= =?us-ascii?Q?u+1crsSM6rV5pcLq3iFV6AxXBQbYIQO05XuQNyCiwouusiySWo/fjz5oW5ZD?= =?us-ascii?Q?jXxr0PBItL4TwMTiK8yBE2mZsdykS2ZlsvRJV1VZ12eRlqi5GOq+K6M+EzRW?= =?us-ascii?Q?WcHZQfqJUSPB1WugIe66p3FxWGfb3edc60l3J5bRnH6XbYKUdhJ5roUuxcHX?= =?us-ascii?Q?pA/11drGCBm3o7QT1PGGRdgADGTajQK8dKX0IETyt4DHIGKI5+cc4B6siWnb?= =?us-ascii?Q?1jkIBtI9UWfdqiZYANo15E2wuBKVLUC188woVHibPm2vdpzv4sxqdaWtCca8?= =?us-ascii?Q?vx3sOsdN7lxhWC+fRUUFgfoiQrWeKqiOFKBi5uLUAmAJ68IZzkQRy1qesbab?= =?us-ascii?Q?Npk5cCY8Pjki8tCCeMe9k5DgGom4Czd7ZEumwYbvE45wBwoeMrByTi4Y5YBR?= =?us-ascii?Q?n2rUUZGPoIU6XlVeacpDMb6GrDgAiLhIRHD8hAecNN+DiUDVzz31vTVer/Xh?= =?us-ascii?Q?FNzZCSk4loUvttKVM+ddHNdiAY5Cz+RJOJMu5AENAIWJXfORUIMxLDTIvft3?= =?us-ascii?Q?YGbE/zVIDa73ywfFvhL9KrfPcmNhAqw=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: MW4PR11MB5911.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: bed0a00c-185d-47eb-aed9-08da49414b07 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jun 2022 11:23:20.6361 (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: QCivPVhodh0UrqjboJam1bkatSN1EjjVSLtqH7y1L1S1DPne6ORYRNzlrfvQJHBNATnkgt3hwBOgwEFwkBBBxs38/Oocu2dVE0x2xbO9lYk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR11MB1473 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 Jay, Patch is split into 7 patch sets in V5 as suggested. Thanks, Ganapati > -----Original Message----- > From: Jayatheerthan, Jay > Sent: 07 June 2022 18:49 > To: Kundapura, Ganapati ; > jerinjacobk@gmail.com; dev@dpdk.org > Subject: RE: [PATCH v3] eventdev: add adapter instance get API >=20 > Hi Ganapati, > This patch could be split into multiple patches in a patchset to make it = easier > to review. >=20 > One way to split: > 1. Rx adapter API > 2. Telemetry changes for Rx adapter > 3. Test changes for Rx adapter API > 4. Tx adapter API > 5. Telemetry changes for Tx adapter ? > 6. Test changes for Tx adapter API > 7. Document update. >=20 > -Jay >=20 >=20 > > -----Original Message----- > > From: Kundapura, Ganapati > > Sent: Tuesday, June 7, 2022 1:51 PM > > To: jerinjacobk@gmail.com; dev@dpdk.org; Jayatheerthan, Jay > > > > Subject: [PATCH v3] eventdev: add adapter instance get API > > > > Added rte_event_eth_rx_adapter_instance_get() and > > rte_event_eth_tx_adapter_instance_get() api's to get the adapter > > instance id for a specified event port and queue index. > > > > Signed-off-by: Ganapati Kundapura > > --- > > v3: > > * Fixed checkpatch error > > > > v2: > > * Fixed build issues > > * Added telemetry support for rte_event_eth_rx_adapter_instance_get > > * arranged functions in alphabetical order in version.map > > > > diff --git a/app/test/test_event_eth_rx_adapter.c > > b/app/test/test_event_eth_rx_adapter.c > > index e358a70..878004b 100644 > > --- a/app/test/test_event_eth_rx_adapter.c > > +++ b/app/test/test_event_eth_rx_adapter.c > > @@ -39,6 +39,7 @@ test_event_eth_rx_intr_adapter_common(void) > > #define TEST_INST_ID 0 > > #define TEST_DEV_ID 0 > > #define TEST_ETHDEV_ID 0 > > +#define TEST_ETH_QUEUE_ID 0 > > > > struct event_eth_rx_adapter_test_params { > > struct rte_mempool *mp; > > @@ -1001,6 +1002,87 @@ adapter_queue_conf(void) > > return TEST_SUCCESS; > > } > > > > +static int > > +adapter_instance_get(void) > > +{ > > + int err; > > + uint8_t inst_id; > > + uint16_t eth_dev_id; > > + struct rte_eth_dev_info dev_info; > > + struct rte_event_eth_rx_adapter_queue_conf queue_conf =3D {0}; > > + > > + /* Case 1: Test without configuring eth */ > > + err =3D rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Case 2: Test with wrong eth port */ > > + eth_dev_id =3D rte_eth_dev_count_total() + 1; > > + err =3D rte_event_eth_rx_adapter_instance_get(eth_dev_id, > > + TEST_ETH_QUEUE_ID, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Case 3: Test with wrong rx queue */ > > + err =3D rte_eth_dev_info_get(TEST_ETHDEV_ID, &dev_info); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, > > + dev_info.max_rx_queues + > 1, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Case 4: Test with right instance, port & rxq */ > > + /* Add queue to Rx adapter */ > > + queue_conf.ev.queue_id =3D TEST_ETH_QUEUE_ID; > > + queue_conf.ev.sched_type =3D RTE_SCHED_TYPE_ATOMIC; > > + queue_conf.ev.priority =3D RTE_EVENT_DEV_PRIORITY_NORMAL; > > + > > + err =3D rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID, > > + &queue_conf); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + /* Add another queue */ > > + queue_conf.ev.queue_id =3D TEST_ETH_QUEUE_ID + 1; > > + err =3D rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 1, > > + &queue_conf); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 1, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + /* Case 5: Test with right instance, port & wrong rxq */ > > + err =3D rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 2, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Delete queues from the Rx adapter */ > > + err =3D rte_event_eth_rx_adapter_queue_del(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_rx_adapter_queue_del(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 1); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + return TEST_SUCCESS; > > +} > > + > > static struct unit_test_suite event_eth_rx_tests =3D { > > .suite_name =3D "rx event eth adapter test suite", > > .setup =3D testsuite_setup, > > @@ -1019,6 +1101,8 @@ static struct unit_test_suite event_eth_rx_tests = =3D > { > > adapter_queue_event_buf_test), > > TEST_CASE_ST(adapter_create_with_params, adapter_free, > > adapter_queue_stats_test), > > + TEST_CASE_ST(adapter_create, adapter_free, > > + adapter_instance_get), > > TEST_CASES_END() /**< NULL terminate unit test array */ > > } > > }; > > diff --git a/app/test/test_event_eth_tx_adapter.c > > b/app/test/test_event_eth_tx_adapter.c > > index 2900532..ebbc622 100644 > > --- a/app/test/test_event_eth_tx_adapter.c > > +++ b/app/test/test_event_eth_tx_adapter.c > > @@ -29,6 +29,7 @@ test_event_eth_tx_adapter_common(void) > > #define MAX_NUM_QUEUE RTE_PMD_RING_MAX_RX_RINGS > > #define TEST_INST_ID 0 > > #define TEST_DEV_ID 0 > > +#define TEST_ETH_QUEUE_ID 0 > > #define SOCKET0 0 > > #define RING_SIZE 256 > > #define ETH_NAME_LEN 32 > > @@ -639,6 +640,79 @@ tx_adapter_service(void) } > > > > static int > > +tx_adapter_instance_get(void) > > +{ > > + int err; > > + uint8_t inst_id; > > + uint16_t eth_dev_id; > > + struct rte_eth_dev_info dev_info; > > + > > + /* Case 1: Test without configuring eth */ > > + err =3D rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Case 2: Test with wrong eth port */ > > + eth_dev_id =3D rte_eth_dev_count_total() + 1; > > + err =3D rte_event_eth_tx_adapter_instance_get(eth_dev_id, > > + TEST_ETH_QUEUE_ID, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Case 3: Test with wrong tx queue */ > > + err =3D rte_eth_dev_info_get(TEST_ETHDEV_ID, &dev_info); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, > > + dev_info.max_tx_queues + > 1, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Case 4: Test with right instance, port & rxq */ > > + /* Add queue to tx adapter */ > > + err =3D rte_event_eth_tx_adapter_queue_add(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + /* Add another queue to tx adapter */ > > + err =3D rte_event_eth_tx_adapter_queue_add(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 1); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 1, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + /* Case 5: Test with right instance, port & wrong rxq */ > > + err =3D rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 2, > > + &inst_id); > > + TEST_ASSERT(err =3D=3D -EINVAL, "Expected -EINVAL got %d", err); > > + > > + /* Delete queues from the Tx adapter */ > > + err =3D rte_event_eth_tx_adapter_queue_del(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + err =3D rte_event_eth_tx_adapter_queue_del(TEST_INST_ID, > > + TEST_ETHDEV_ID, > > + TEST_ETH_QUEUE_ID + 1); > > + TEST_ASSERT(err =3D=3D 0, "Expected 0 got %d", err); > > + > > + return TEST_SUCCESS; > > +} > > + > > +static int > > tx_adapter_dynamic_device(void) > > { > > uint16_t port_id =3D rte_eth_dev_count_avail(); @@ -695,6 +769,8 > @@ > > static struct unit_test_suite event_eth_tx_tests =3D { > > tx_adapter_start_stop), > > TEST_CASE_ST(tx_adapter_create, tx_adapter_free, > > tx_adapter_service), > > + TEST_CASE_ST(tx_adapter_create, tx_adapter_free, > > + tx_adapter_instance_get), > > TEST_CASE_ST(NULL, NULL, tx_adapter_dynamic_device), > > TEST_CASES_END() /**< NULL terminate unit test array */ > > } > > diff --git a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > index 3b4ef50..a6d8987 100644 > > --- a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > +++ b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst > > @@ -177,6 +177,12 @@ used otherwise it returns -EINVAL. > > The ``rte_event_eth_rx_adapter_queue_stats_reset`` function can be > > used to reset queue level stats when queue level event buffer is in us= e. > > > > +Getting Adapter instance id > > +~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > + > > +The ``rte_event_eth_rx_adapter_instance_get()`` function reports rx > > +adapter instance id for a specified event port and rx queue index. > > + > > Interrupt Based Rx Queues > > ~~~~~~~~~~~~~~~~~~~~~~~~~~ > > > > diff --git a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > > b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > > index f80d226..b14131d 100644 > > --- a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > > +++ b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst > > @@ -165,6 +165,12 @@ in struct ``rte_event_eth_tx_adapter_stats``. The > > counter values are the sum of the counts from the eventdev PMD > > callback if the callback is supported, and the counts maintained by th= e > service function, if one exists. > > > > +Getting Adapter instance id > > +~~~~~~~~~~~~~~~~~~~~~~~~~~~ > > + > > +The ``rte_event_eth_tx_adapter_instanceget()`` function reports tx > > +adapter instance id for a specified event port and tx queue index. > > + > > Tx event vectorization > > ~~~~~~~~~~~~~~~~~~~~~~ > > > > diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c > > b/lib/eventdev/rte_event_eth_rx_adapter.c > > index bf8741d..3095647 100644 > > --- a/lib/eventdev/rte_event_eth_rx_adapter.c > > +++ b/lib/eventdev/rte_event_eth_rx_adapter.c > > @@ -6,6 +6,7 @@ > > #include > > #endif > > #include > > +#include > > > > #include > > #include > > @@ -42,7 +43,10 @@ > > /* Sentinel value to detect initialized file handle */ > > #define INIT_FD -1 > > > > -#define RXA_ADAPTER_ARRAY "rte_event_eth_rx_adapter_array" > > +#define RX_ADAPTER_DATA_ARRAY "rx_adapter_data_array" > > +#define RX_ADAPTER_INSTANCE_ARRAY "rx_adapter_instance_array" > > + > > +#define INVALID_INSTANCE_ID UINT8_MAX > > > > /* > > * Used to store port and queue ID of interrupting Rx queue @@ -251,7 > > +255,12 @@ struct eth_rx_queue_info { > > struct rte_event_eth_rx_adapter_stats *stats; }; > > > > +struct event_eth_rxa_inst_info { > > + uint8_t rxa_inst_id; > > +}; > > + > > static struct event_eth_rx_adapter **event_eth_rx_adapter; > > +static struct event_eth_rxa_inst_info **event_eth_rxa_inst_info; > > > > /* Enable dynamic timestamp field in mbuf */ static uint64_t > > event_eth_rx_timestamp_dynflag; @@ -1415,15 +1424,13 @@ > > rxa_service_func(void *args) > > return 0; > > } > > > > -static int > > -rte_event_eth_rx_adapter_init(void) > > +static void * > > +rxa_memzone_array_get(const char *name, unsigned int elt_size, int > > +nb_elems) > > { > > - const char *name =3D RXA_ADAPTER_ARRAY; > > const struct rte_memzone *mz; > > unsigned int sz; > > > > - sz =3D sizeof(*event_eth_rx_adapter) * > > - RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE; > > + sz =3D elt_size * nb_elems; > > sz =3D RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE); > > > > mz =3D rte_memzone_lookup(name); > > @@ -1431,13 +1438,46 @@ rte_event_eth_rx_adapter_init(void) > > mz =3D rte_memzone_reserve_aligned(name, sz, > rte_socket_id(), 0, > > RTE_CACHE_LINE_SIZE); > > if (mz =3D=3D NULL) { > > - RTE_EDEV_LOG_ERR("failed to reserve memzone err > =3D %" > > - PRId32, rte_errno); > > - return -rte_errno; > > + RTE_EDEV_LOG_ERR("failed to reserve memzone" > > + " name =3D %s, err =3D %" > > + PRId32, name, rte_errno); > > + return NULL; > > } > > } > > > > - event_eth_rx_adapter =3D mz->addr; > > + return mz->addr; > > +} > > + > > +static int > > +rte_event_eth_rx_adapter_init(void) > > +{ > > + uint8_t i; > > + > > + if (event_eth_rx_adapter =3D=3D NULL) { > > + event_eth_rx_adapter =3D > > + > rxa_memzone_array_get(RX_ADAPTER_DATA_ARRAY, > > + sizeof(*event_eth_rx_adapter), > > + > RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE); > > + if (event_eth_rx_adapter =3D=3D NULL) > > + return -ENOMEM; > > + > > + for (i =3D 0; i < > RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE; i++) > > + event_eth_rx_adapter[i] =3D NULL; > > + > > + } > > + > > + if (event_eth_rxa_inst_info =3D=3D NULL) { > > + event_eth_rxa_inst_info =3D > > + > rxa_memzone_array_get(RX_ADAPTER_INSTANCE_ARRAY, > > + sizeof(*event_eth_rxa_inst_info), > > + RTE_MAX_ETHPORTS); > > + if (event_eth_rxa_inst_info =3D=3D NULL) > > + return -ENOMEM; > > + > > + for (i =3D 0; i < RTE_MAX_ETHPORTS; i++) > > + event_eth_rxa_inst_info[i] =3D NULL; > > + } > > + > > return 0; > > } > > > > @@ -1447,12 +1487,21 @@ rxa_memzone_lookup(void) > > const struct rte_memzone *mz; > > > > if (event_eth_rx_adapter =3D=3D NULL) { > > - mz =3D rte_memzone_lookup(RXA_ADAPTER_ARRAY); > > + mz =3D rte_memzone_lookup(RX_ADAPTER_DATA_ARRAY); > > if (mz =3D=3D NULL) > > return -ENOMEM; > > + > > event_eth_rx_adapter =3D mz->addr; > > } > > > > + if (event_eth_rxa_inst_info =3D=3D NULL) { > > + mz =3D > rte_memzone_lookup(RX_ADAPTER_INSTANCE_ARRAY); > > + if (mz =3D=3D NULL) > > + return -ENOMEM; > > + > > + event_eth_rxa_inst_info =3D mz->addr; > > + } > > + > > return 0; > > } > > > > @@ -1950,6 +1999,7 @@ rxa_sw_del(struct event_eth_rx_adapter > *rx_adapter, > > int pollq; > > int intrq; > > int sintrq; > > + uint16_t eth_dev_id =3D dev_info->dev->data->port_id; > > > > > > if (rx_adapter->nb_queues =3D=3D 0) > > @@ -1993,6 +2043,11 @@ rxa_sw_del(struct event_eth_rx_adapter > *rx_adapter, > > dev_info->rx_queue[rx_queue_id].event_buf =3D NULL; > > dev_info->rx_queue[rx_queue_id].stats =3D NULL; > > } > > + > > + /* unset rxa_inst_id for rx_queue_id */ > > + if (event_eth_rxa_inst_info[eth_dev_id]) > > + > event_eth_rxa_inst_info[eth_dev_id][rx_queue_id].rxa_inst_id =3D > > + > INVALID_INSTANCE_ID; > > } > > > > static int > > @@ -2085,6 +2140,33 @@ rxa_add_queue(struct event_eth_rx_adapter > *rx_adapter, > > } > > } > > > > + /* Allocate storage to store rxa_inst_id for rxq */ > > + if (event_eth_rxa_inst_info[eth_dev_id] =3D=3D NULL) { > > + uint16_t n, i; > > + struct event_eth_rxa_inst_info *i_info; > > + > > + n =3D rte_eth_devices[eth_dev_id].data->nb_rx_queues; > > + > > + i_info =3D rte_zmalloc_socket("event_eth_rxa_inst_info", > > + n * sizeof(struct event_eth_rxa_inst_info), > > + 0, > > + rx_adapter->socket_id); > > + if (i_info =3D=3D NULL) { > > + RTE_EDEV_LOG_ERR("Failed to allocate storage for " > > + "event_eth_rxa_inst_info"); > > + return -ENOMEM; > > + } > > + > > + for (i =3D 0; i < n; i++) > > + i_info[i].rxa_inst_id =3D INVALID_INSTANCE_ID; > > + > > + event_eth_rxa_inst_info[eth_dev_id] =3D i_info; > > + } > > + > > + /* store rxa id for rx_queue_id in event_eth_rxa_inst_info */ > > + event_eth_rxa_inst_info[eth_dev_id][rx_queue_id].rxa_inst_id =3D > > + rx_adapter- > >id; > > + > > if (!rx_adapter->use_queue_event_buf) > > return 0; > > > > @@ -2523,6 +2605,10 @@ int > > rte_event_eth_rx_adapter_free(uint8_t id) { > > struct event_eth_rx_adapter *rx_adapter; > > + uint16_t eth_dev_id; > > + > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > > > RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, - > EINVAL); > > > > @@ -2544,6 +2630,13 @@ rte_event_eth_rx_adapter_free(uint8_t id) > > rte_free(rx_adapter); > > event_eth_rx_adapter[id] =3D NULL; > > > > + for (eth_dev_id =3D 0; eth_dev_id < RTE_MAX_ETHPORTS; > eth_dev_id++) { > > + if (event_eth_rxa_inst_info[eth_dev_id]) { > > + rte_free(event_eth_rxa_inst_info[eth_dev_id]); > > + event_eth_rxa_inst_info[eth_dev_id] =3D NULL; > > + } > > + } > > + > > rte_eventdev_trace_eth_rx_adapter_free(id); > > return 0; > > } > > @@ -2561,6 +2654,9 @@ rte_event_eth_rx_adapter_queue_add(uint8_t > id, > > struct eth_device_info *dev_info; > > struct rte_event_eth_rx_adapter_vector_limits limits; > > > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, - > EINVAL); > > RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); > > > > @@ -2726,6 +2822,9 @@ rte_event_eth_rx_adapter_queue_del(uint8_t > id, uint16_t eth_dev_id, > > uint32_t *rx_wrr =3D NULL; > > int num_intr_vec; > > > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, - > EINVAL); > > RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); > > > > @@ -2832,6 +2931,7 @@ rte_event_eth_rx_adapter_queue_del(uint8_t > id, > > uint16_t eth_dev_id, > > > > rte_eventdev_trace_eth_rx_adapter_queue_del(id, eth_dev_id, > > rx_queue_id, ret); > > + > > return ret; > > } > > > > @@ -3286,6 +3386,49 @@ > rte_event_eth_rx_adapter_queue_conf_get(uint8_t id, > > return 0; > > } > > > > +int > > +rte_event_eth_rx_adapter_instance_get(uint16_t eth_dev_id, > > + uint16_t rx_queue_id, > > + uint8_t *rxa_inst_id) > > +{ > > + uint8_t inst_id; > > + > > + if (rxa_memzone_lookup()) > > + return -ENOMEM; > > + > > + if (eth_dev_id >=3D rte_eth_dev_count_avail()) { > > + RTE_EDEV_LOG_ERR("Invalid ethernet port id %u", > eth_dev_id); > > + return -EINVAL; > > + } > > + > > + if (rx_queue_id >=3D rte_eth_devices[eth_dev_id].data- > >nb_rx_queues) { > > + RTE_EDEV_LOG_ERR("Invalid Rx queue %u", rx_queue_id); > > + return -EINVAL; > > + } > > + > > + if (rxa_inst_id =3D=3D NULL) { > > + RTE_EDEV_LOG_ERR("rxa_inst_id cannot be NULL"); > > + return -EINVAL; > > + } > > + > > + if (event_eth_rxa_inst_info[eth_dev_id] =3D=3D NULL) { > > + RTE_EDEV_LOG_ERR("No valid rxa instance for eth_dev_id > %u", > > + eth_dev_id); > > + return -EINVAL; > > + } > > + > > + inst_id =3D > event_eth_rxa_inst_info[eth_dev_id][rx_queue_id].rxa_inst_id; > > + if (inst_id =3D=3D INVALID_INSTANCE_ID) { > > + RTE_EDEV_LOG_ERR("Invalid rxa instance for eth_dev_id > %u, " > > + "rx_queue_id %u", eth_dev_id, > rx_queue_id); > > + return -EINVAL; > > + } > > + > > + *rxa_inst_id =3D inst_id; > > + > > + return 0; > > +} > > + > > #define RXA_ADD_DICT(stats, s) rte_tel_data_add_dict_u64(d, #s, > > stats.s) > > > > static int > > @@ -3554,6 +3697,68 @@ handle_rxa_queue_stats_reset(const char > *cmd __rte_unused, > > return ret; > > } > > > > +static int > > +handle_rxa_instance_get(const char *cmd __rte_unused, > > + const char *params, > > + struct rte_tel_data *d) > > +{ > > + uint8_t instance_id; > > + uint16_t rx_queue_id; > > + int eth_dev_id, ret =3D -1; > > + char *token, *l_params; > > + > > + if (params =3D=3D NULL || strlen(params) =3D=3D 0 || !isdigit(*params= )) > > + return -1; > > + > > + l_params =3D strdup(params); > > + if (l_params =3D=3D NULL) > > + return -ENOMEM; > > + token =3D strtok(l_params, ","); > > + > RTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET( > token, -1); > > + > > + /* Get device ID from parameter string */ > > + eth_dev_id =3D strtoul(token, NULL, 10); > > + RTE_ETH_VALID_PORTID_OR_GOTO_ERR_RET(eth_dev_id, - > EINVAL); > > + > > + token =3D strtok(NULL, ","); > > + > RTE_EVENT_ETH_RX_ADAPTER_TOKEN_VALID_OR_GOTO_ERR_RET( > token, -1); > > + > > + /* Get Rx queue ID from parameter string */ > > + rx_queue_id =3D strtoul(token, NULL, 10); > > + if (rx_queue_id >=3D rte_eth_devices[eth_dev_id].data- > >nb_rx_queues) { > > + RTE_EDEV_LOG_ERR("Invalid rx queue_id %u", > rx_queue_id); > > + ret =3D -EINVAL; > > + goto error; > > + } > > + > > + token =3D strtok(NULL, "\0"); > > + if (token !=3D NULL) > > + RTE_EDEV_LOG_ERR("Extra parameters passed to eventdev" > > + " telemetry command, ignoring"); > > + > > + /* Parsing parameter finished */ > > + free(l_params); > > + > > + if (rte_event_eth_rx_adapter_instance_get(eth_dev_id, > > + rx_queue_id, > > + &instance_id)) { > > + RTE_EDEV_LOG_ERR("Failed to get RX adapter instance ID " > > + " for rx_queue_id =3D %d", rx_queue_id); > > + return -1; > > + } > > + > > + rte_tel_data_start_dict(d); > > + rte_tel_data_add_dict_u64(d, "eth_dev_id", eth_dev_id); > > + rte_tel_data_add_dict_u64(d, "rx_queue_id", rx_queue_id); > > + rte_tel_data_add_dict_u64(d, "rxa_instance_id", instance_id); > > + > > + return 0; > > + > > +error: > > + free(l_params); > > + return ret; > > +} > > + > > RTE_INIT(rxa_init_telemetry) > > { > > rte_telemetry_register_cmd("/eventdev/rxa_stats", > > @@ -3575,4 +3780,8 @@ RTE_INIT(rxa_init_telemetry) > > rte_telemetry_register_cmd("/eventdev/rxa_queue_stats_reset", > > handle_rxa_queue_stats_reset, > > "Reset Rx queue stats. Parameter: rxa_id, dev_id, > queue_id"); > > + > > + rte_telemetry_register_cmd("/eventdev/rxa_rxq_instance_get", > > + handle_rxa_instance_get, > > + "Returns Rx adapter instance id. Parameter: dev_id, > queue_id"); > > } > > diff --git a/lib/eventdev/rte_event_eth_rx_adapter.h > > b/lib/eventdev/rte_event_eth_rx_adapter.h > > index 3608a7b..f56938d 100644 > > --- a/lib/eventdev/rte_event_eth_rx_adapter.h > > +++ b/lib/eventdev/rte_event_eth_rx_adapter.h > > @@ -38,6 +38,7 @@ > > * - rte_event_eth_rx_adapter_queue_stats_get() > > * - rte_event_eth_rx_adapter_queue_stats_reset() > > * - rte_event_eth_rx_adapter_event_port_get() > > + * - rte_event_eth_rx_adapter_instance_get() > > * > > * The application creates an ethernet to event adapter using > > * rte_event_eth_rx_adapter_create_ext() or > > rte_event_eth_rx_adapter_create() @@ -704,6 +705,28 @@ > > __rte_experimental int > > rte_event_eth_rx_adapter_event_port_get(uint8_t id, uint8_t > > *event_port_id); > > > > +/** > > + * Get RX adapter instance ID for a RX queue > > + * > > + * @param eth_dev_id > > + * Port identifier of Ethernet device. > > + * > > + * @param rx_queue_id > > + * Ethernet device receive queue index > > + * > > + * @param[out] rxa_inst_id > > + * RX adapter instance identifier. > > + * > > + * @return > > + * - 0: Success > > + * - <0: Error code on failure > > + */ > > +__rte_experimental > > +int > > +rte_event_eth_rx_adapter_instance_get(uint16_t eth_dev_id, > > + uint16_t rx_queue_id, > > + uint8_t *rxa_inst_id); > > + > > #ifdef __cplusplus > > } > > #endif > > diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c > > b/lib/eventdev/rte_event_eth_tx_adapter.c > > index 1b304f0..1c9f9fc 100644 > > --- a/lib/eventdev/rte_event_eth_tx_adapter.c > > +++ b/lib/eventdev/rte_event_eth_tx_adapter.c > > @@ -1,6 +1,8 @@ > > /* SPDX-License-Identifier: BSD-3-Clause > > * Copyright(c) 2018 Intel Corporation. > > */ > > +#include > > + > > #include > > #include > > #include > > @@ -17,6 +19,11 @@ > > #define TXA_MAX_NB_TX 128 > > #define TXA_INVALID_DEV_ID INT32_C(-1) > > #define TXA_INVALID_SERVICE_ID INT64_C(-1) > > +#define INVALID_INSTANCE_ID UINT8_MAX > > + > > +#define TXA_ADAPTER_ARRAY "txa_adapter_array" > > +#define TXA_SERVICE_DATA_ARRAY "txa_service_data_array" > > +#define TXA_ADAPTER_INSTANCE_ARRAY "txa_adapter_instance_array" > > > > #define txa_evdev(id) (&rte_eventdevs[txa_dev_id_array[(id)]]) > > > > @@ -140,6 +147,10 @@ struct txa_service_ethdev { > > void *queues; > > }; > > > > +struct event_eth_txa_inst_info { > > + uint8_t txa_inst_id; > > +}; > > + > > /* Array of adapter instances, initialized with event device id > > * when adapter is created > > */ > > @@ -148,6 +159,9 @@ static int *txa_dev_id_array; > > /* Array of pointers to service implementation data */ static struct > > txa_service_data **txa_service_data_array; > > > > +/* array of adapter instances to store tx queue specific instance */ > > +static struct event_eth_txa_inst_info **event_eth_txa_inst_info; > > + > > static int32_t txa_service_func(void *args); static int > > txa_service_adapter_create_ext(uint8_t id, > > struct rte_eventdev *dev, > > @@ -194,12 +208,42 @@ txa_memzone_array_get(const char *name, > unsigned > > int elt_size, int nb_elems) } > > > > static int > > +txa_memzone_lookup(void) > > +{ > > + const struct rte_memzone *mz; > > + > > + if (txa_dev_id_array =3D=3D NULL) { > > + mz =3D rte_memzone_lookup(TXA_ADAPTER_ARRAY); > > + if (mz =3D=3D NULL) > > + return -ENOMEM; > > + txa_dev_id_array =3D mz->addr; > > + } > > + > > + if (txa_service_data_array =3D=3D NULL) { > > + mz =3D rte_memzone_lookup(TXA_SERVICE_DATA_ARRAY); > > + if (mz =3D=3D NULL) > > + return -ENOMEM; > > + txa_service_data_array =3D mz->addr; > > + } > > + > > + if (event_eth_txa_inst_info =3D=3D NULL) { > > + mz =3D > rte_memzone_lookup(TXA_ADAPTER_INSTANCE_ARRAY); > > + if (mz =3D=3D NULL) > > + return -ENOMEM; > > + event_eth_txa_inst_info =3D mz->addr; > > + } > > + > > + return 0; > > +} > > + > > + > > +static int > > txa_dev_id_array_init(void) > > { > > if (txa_dev_id_array =3D=3D NULL) { > > int i; > > > > - txa_dev_id_array =3D > txa_memzone_array_get("txa_adapter_array", > > + txa_dev_id_array =3D > txa_memzone_array_get(TXA_ADAPTER_ARRAY, > > sizeof(int), > > > RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); > > if (txa_dev_id_array =3D=3D NULL) > > @@ -221,15 +265,30 @@ txa_init(void) > > static int > > txa_service_data_init(void) > > { > > + uint8_t i; > > + > > if (txa_service_data_array =3D=3D NULL) { > > txa_service_data_array =3D > > - > txa_memzone_array_get("txa_service_data_array", > > + > txa_memzone_array_get(TXA_SERVICE_DATA_ARRAY, > > sizeof(int), > > > RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); > > if (txa_service_data_array =3D=3D NULL) > > return -ENOMEM; > > } > > > > + if (event_eth_txa_inst_info =3D=3D NULL) { > > + event_eth_txa_inst_info =3D > > + > txa_memzone_array_get(TXA_ADAPTER_INSTANCE_ARRAY, > > + sizeof(*event_eth_txa_inst_info), > > + RTE_MAX_ETHPORTS); > > + if (event_eth_txa_inst_info =3D=3D NULL) > > + return -ENOMEM; > > + } > > + > > + /* Reset the txa instance pointers */ > > + for (i =3D 0; i < RTE_MAX_ETHPORTS; i++) > > + event_eth_txa_inst_info[i] =3D NULL; > > + > > return 0; > > } > > > > @@ -763,6 +822,7 @@ txa_service_queue_add(uint8_t id, > > struct rte_eth_dev_tx_buffer *tb; > > struct txa_retry *txa_retry; > > int ret =3D 0; > > + uint16_t eth_dev_id =3D eth_dev->data->port_id; > > > > txa =3D txa_service_id_to_data(id); > > > > @@ -836,6 +896,31 @@ txa_service_queue_add(uint8_t id, > > tdi->nb_queues++; > > txa->nb_queues++; > > > > + /* Allocate storage to store txa_inst_id for txq */ > > + if (event_eth_txa_inst_info[eth_dev_id] =3D=3D NULL) { > > + uint16_t n, i; > > + struct event_eth_txa_inst_info *i_info; > > + > > + n =3D eth_dev->data->nb_tx_queues; > > + > > + i_info =3D rte_zmalloc_socket("event_eth_txa_inst_info", > > + n * sizeof(event_eth_txa_inst_info), > > + 0, > > + txa->socket_id); > > + if (i_info =3D=3D NULL) { > > + RTE_EDEV_LOG_ERR("Failed to allocate storage for " > > + "event_eth_txa_inst_info"); > > + goto err_unlock; > > + } > > + > > + for (i =3D 0; i < n; i++) > > + i_info[i].txa_inst_id =3D INVALID_INSTANCE_ID; > > + > > + event_eth_txa_inst_info[eth_dev_id] =3D i_info; > > + } > > + > > + event_eth_txa_inst_info[eth_dev_id][tx_queue_id].txa_inst_id =3D > id; > > + > > ret_unlock: > > rte_spinlock_unlock(&txa->tx_lock); > > return 0; > > @@ -902,6 +987,12 @@ txa_service_queue_del(uint8_t id, > > txa->nb_queues--; > > txa->txa_ethdev[port_id].nb_queues--; > > > > + /* unset txa_inst_id for tx_queue_id */ > > + if (event_eth_txa_inst_info[port_id]) > > + event_eth_txa_inst_info[port_id][tx_queue_id].txa_inst_id > =3D > > + > INVALID_INSTANCE_ID; > > + > > + > > txa_service_queue_array_free(txa, port_id); > > return 0; > > } > > @@ -1056,6 +1147,10 @@ int > > rte_event_eth_tx_adapter_free(uint8_t id) { > > int ret; > > + uint16_t eth_dev_id; > > + > > + if (txa_memzone_lookup()) > > + return -ENOMEM; > > > > TXA_CHECK_OR_ERR_RET(id); > > > > @@ -1067,6 +1162,13 @@ rte_event_eth_tx_adapter_free(uint8_t id) > > ret =3D txa_service_adapter_free(id); > > txa_dev_id_array[id] =3D TXA_INVALID_DEV_ID; > > > > + for (eth_dev_id =3D 0; eth_dev_id < RTE_MAX_ETHPORTS; > eth_dev_id++) { > > + if (event_eth_txa_inst_info[eth_dev_id]) { > > + rte_free(event_eth_txa_inst_info[eth_dev_id]); > > + event_eth_txa_inst_info[eth_dev_id] =3D NULL; > > + } > > + } > > + > > rte_eventdev_trace_eth_tx_adapter_free(id, ret); > > return ret; > > } > > @@ -1080,6 +1182,9 @@ rte_event_eth_tx_adapter_queue_add(uint8_t > id, > > int ret; > > uint32_t caps; > > > > + if (txa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); > > TXA_CHECK_OR_ERR_RET(id); > > > > @@ -1113,6 +1218,9 @@ rte_event_eth_tx_adapter_queue_del(uint8_t > id, > > int ret; > > uint32_t caps; > > > > + if (txa_memzone_lookup()) > > + return -ENOMEM; > > + > > RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); > > TXA_CHECK_OR_ERR_RET(id); > > > > @@ -1218,3 +1326,46 @@ rte_event_eth_tx_adapter_stop(uint8_t id) > > rte_eventdev_trace_eth_tx_adapter_stop(id, ret); > > return ret; > > } > > + > > +int > > +rte_event_eth_tx_adapter_instance_get(uint16_t eth_dev_id, > > + uint16_t tx_queue_id, > > + uint8_t *txa_inst_id) > > +{ > > + uint8_t inst_id; > > + > > + if (txa_memzone_lookup()) > > + return -ENOMEM; > > + > > + if (eth_dev_id >=3D rte_eth_dev_count_avail()) { > > + RTE_EDEV_LOG_ERR("Invalid ethernet port id %u", > eth_dev_id); > > + return -EINVAL; > > + } > > + > > + if (tx_queue_id >=3D rte_eth_devices[eth_dev_id].data- > >nb_tx_queues) { > > + RTE_EDEV_LOG_ERR("Invalid tx queue id %u", tx_queue_id); > > + return -EINVAL; > > + } > > + > > + if (txa_inst_id =3D=3D NULL) { > > + RTE_EDEV_LOG_ERR("txa_instance_id cannot be NULL"); > > + return -EINVAL; > > + } > > + > > + if (event_eth_txa_inst_info[eth_dev_id] =3D=3D NULL) { > > + RTE_EDEV_LOG_ERR("No valid txa instance for eth_dev_id > %d", > > + eth_dev_id); > > + return -EINVAL; > > + } > > + > > + inst_id =3D > event_eth_txa_inst_info[eth_dev_id][tx_queue_id].txa_inst_id; > > + if (inst_id =3D=3D INVALID_INSTANCE_ID) { > > + RTE_EDEV_LOG_ERR("Invalid txa instance for eth_dev_id > %u, " > > + "tx_queue_id %u", eth_dev_id, > tx_queue_id); > > + return -EINVAL; > > + } > > + > > + *txa_inst_id =3D inst_id; > > + > > + return 0; > > +} > > diff --git a/lib/eventdev/rte_event_eth_tx_adapter.h > > b/lib/eventdev/rte_event_eth_tx_adapter.h > > index 3908c2d..28f4fa9 100644 > > --- a/lib/eventdev/rte_event_eth_tx_adapter.h > > +++ b/lib/eventdev/rte_event_eth_tx_adapter.h > > @@ -34,6 +34,7 @@ > > * - rte_event_eth_tx_adapter_enqueue() > > * - rte_event_eth_tx_adapter_event_port_get() > > * - rte_event_eth_tx_adapter_service_id_get() > > + * - rte_event_eth_tx_adapter_instance_get() > > * > > * The application creates the adapter using > > * rte_event_eth_tx_adapter_create() or > rte_event_eth_tx_adapter_create_ext(). > > @@ -423,6 +424,24 @@ rte_event_eth_tx_adapter_stats_reset(uint8_t > id); > > int rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t > > *service_id); > > > > +/** > > + * Get TX adapter instance id for TX queue > > + * > > + * @param eth_dev_id > > + * Port identifier of Ethernet device > > + * > > + * @param tx_queue_id > > + * Etherdev device TX queue index > > + * > > + * @param[out] txa_inst_id > > + * Pointer to TX adapter instance identifier */ __rte_experimental > > +int rte_event_eth_tx_adapter_instance_get(uint16_t eth_dev_id, > > + uint16_t tx_queue_id, > > + uint8_t *txa_inst_id); > > + > > #ifdef __cplusplus > > } > > #endif > > diff --git a/lib/eventdev/version.map b/lib/eventdev/version.map index > > 886e2ec..1c99d52 100644 > > --- a/lib/eventdev/version.map > > +++ b/lib/eventdev/version.map > > @@ -102,9 +102,11 @@ EXPERIMENTAL { > > > > # added in 21.11 > > rte_event_eth_rx_adapter_create_with_params; > > + rte_event_eth_rx_adapter_instance_get; > > rte_event_eth_rx_adapter_queue_conf_get; > > rte_event_eth_rx_adapter_queue_stats_get; > > rte_event_eth_rx_adapter_queue_stats_reset; > > + rte_event_eth_tx_adapter_instance_get; > > > > # added in 22.03 > > rte_event_eth_rx_adapter_event_port_get; > > -- > > 2.6.4