From patchwork Mon Aug 29 08:14:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 115568 X-Patchwork-Delegate: jerinj@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 553E7A0542; Mon, 29 Aug 2022 10:14:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CF5A240DF7; Mon, 29 Aug 2022 10:14:44 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 0A1FD40694 for ; Mon, 29 Aug 2022 10:14:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661760883; x=1693296883; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=CPIpJ2suSwjfdRAjyAIjYRni50pob7aepsBQ7yLnza4=; b=VYCULbEGUT+biyN8nQ+q0FKmH6J17xmEyvqj/efkTcdji6dsbWCh8U1S uvM42f05T53RBL+bBVfTewrkoQVvtKXPFGhGqziGIRrxFj9yaifbffULH EburpHmKdtL2c/Ycagk4P9zuzWEuazGD4QNNidWewu39hlyjJ5JijDkHz niUGBdXdo+UZuJWIuSbsb19qoXmVKCxnbuklXA99vjAgnhZ3H0DywLbbH IWgqo/QNozZkFDdPpY7O2xSf+3nFz8P7kC9n7H2mCttGym799iKjO5+pp DuaixHPmiFgWe6g/g1Ne/j3xUn7dfFMCjjWzbzjz1eS3ImDO5THOK6uO5 w==; X-IronPort-AV: E=McAfee;i="6500,9779,10453"; a="274589937" X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="274589937" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Aug 2022 01:14:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="672289679" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga008.fm.intel.com with ESMTP; 29 Aug 2022 01:14:41 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com Cc: s.v.naga.harish.k@intel.com Subject: [PATCH v12 1/6] eventdev/eth_rx: add adapter instance get API Date: Mon, 29 Aug 2022 03:14:31 -0500 Message-Id: <20220829081437.3114188-1-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220719082538.274845-1-ganapati.kundapura@intel.com> References: <20220719082538.274845-1-ganapati.kundapura@intel.com> MIME-Version: 1.0 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 Added rte_event_eth_rx_adapter_instance_get() to get adapter instance id for specified ethernet device id and rx queue index. Added rte_event_eth_rx_adapter_instance_get() details in prog_guide/event_ethernet_rx_adapter.rst Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan Acked-by: Jerin Jacob --- V12: * Squashed 1/7 and 6/7 * Squashed 4/7 and 7/7 * Updated 22.11.rst for the new APIs v11: * added instance_get under 22.11 in version.map v10: * Add Review and Ack to series v9: * Corrected rte_event_eth_tx_adapter_instanceget to * rte_event_eth_tx_adapter_instance_get in event_ethernet_tx_adapter.rst v8: * Removed limits.h inclusion v7: * Remove allocation of instance array and storage of instnace id * in instance array * Use Rx adapter instance data to query instance id for specified * eth_dev_id and rx_queue_id v6: * rx adapter changes removed from patch4 and moved to patch1 v5: * patch is split into saperate patches v4: * Moved instance array allocation and instance id storage before adapter's nb_queue updation for handling the error case properly 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/doc/guides/prog_guide/event_ethernet_rx_adapter.rst b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst index 3b4ef50..5b9d0cf 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 use. +Getting Adapter instance id +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``rte_event_eth_rx_adapter_instance_get()`` function reports +rx adapter instance id for a specified ethernet device id and rx queue index. + Interrupt Based Rx Queues ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index 6940266..c58ba05 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -888,6 +888,26 @@ typedef int (*eventdev_eth_rx_adapter_vector_limits_get_t)( const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, struct rte_event_eth_rx_adapter_vector_limits *limits); +/** + * Get Rx adapter instance id for Rx queue + * + * @param eth_dev_id + * Port identifier of ethernet device + * + * @param rx_queue_id + * Ethernet device Rx queue index + * + * @param[out] rxa_inst_id + * Pointer to Rx adapter instance identifier. + * Contains valid Rx adapter instance id when return value is 0 + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +typedef int (*eventdev_eth_rx_adapter_instance_get_t) + (uint16_t eth_dev_id, uint16_t rx_queue_id, uint8_t *rxa_inst_id); + typedef uint32_t rte_event_pmd_selftest_seqn_t; extern int rte_event_pmd_selftest_seqn_dynfield_offset; @@ -1321,6 +1341,8 @@ struct eventdev_ops { eventdev_eth_rx_adapter_vector_limits_get_t eth_rx_adapter_vector_limits_get; /**< Get event vector limits for the Rx adapter */ + eventdev_eth_rx_adapter_instance_get_t eth_rx_adapter_instance_get; + /**< Get Rx adapter instance id for Rx queue */ eventdev_timer_adapter_caps_get_t timer_adapter_caps_get; /**< Get timer adapter capabilities */ diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c index bf8741d..ababe13 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.c +++ b/lib/eventdev/rte_event_eth_rx_adapter.c @@ -1415,15 +1415,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 = RXA_ADAPTER_ARRAY; const struct rte_memzone *mz; unsigned int sz; - sz = sizeof(*event_eth_rx_adapter) * - RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE; + sz = elt_size * nb_elems; sz = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE); mz = rte_memzone_lookup(name); @@ -1431,13 +1429,34 @@ rte_event_eth_rx_adapter_init(void) mz = rte_memzone_reserve_aligned(name, sz, rte_socket_id(), 0, RTE_CACHE_LINE_SIZE); if (mz == NULL) { - RTE_EDEV_LOG_ERR("failed to reserve memzone err = %" - PRId32, rte_errno); - return -rte_errno; + RTE_EDEV_LOG_ERR("failed to reserve memzone" + " name = %s, err = %" + PRId32, name, rte_errno); + return NULL; } } - event_eth_rx_adapter = mz->addr; + return mz->addr; +} + +static int +rte_event_eth_rx_adapter_init(void) +{ + uint8_t i; + + if (event_eth_rx_adapter == NULL) { + event_eth_rx_adapter = + rxa_memzone_array_get(RXA_ADAPTER_ARRAY, + sizeof(*event_eth_rx_adapter), + RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE); + if (event_eth_rx_adapter == NULL) + return -ENOMEM; + + for (i = 0; i < RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE; i++) + event_eth_rx_adapter[i] = NULL; + + } + return 0; } @@ -1450,6 +1469,7 @@ rxa_memzone_lookup(void) mz = rte_memzone_lookup(RXA_ADAPTER_ARRAY); if (mz == NULL) return -ENOMEM; + event_eth_rx_adapter = mz->addr; } @@ -1951,7 +1971,6 @@ rxa_sw_del(struct event_eth_rx_adapter *rx_adapter, int intrq; int sintrq; - if (rx_adapter->nb_queues == 0) return; @@ -2524,6 +2543,9 @@ rte_event_eth_rx_adapter_free(uint8_t id) { struct event_eth_rx_adapter *rx_adapter; + if (rxa_memzone_lookup()) + return -ENOMEM; + RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); rx_adapter = rxa_id_to_adapter(id); @@ -2561,6 +2583,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 +2751,9 @@ rte_event_eth_rx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id, uint32_t *rx_wrr = 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 +2860,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 +3315,97 @@ rte_event_eth_rx_adapter_queue_conf_get(uint8_t id, return 0; } +static int +rxa_is_queue_added(struct event_eth_rx_adapter *rx_adapter, + uint16_t eth_dev_id, + uint16_t rx_queue_id) +{ + struct eth_device_info *dev_info; + struct eth_rx_queue_info *queue_info; + + if (!rx_adapter->eth_devices) + return 0; + + dev_info = &rx_adapter->eth_devices[eth_dev_id]; + if (!dev_info || !dev_info->rx_queue) + return 0; + + queue_info = &dev_info->rx_queue[rx_queue_id]; + + return queue_info && queue_info->queue_enabled; +} + +#define rxa_evdev(rx_adapter) (&rte_eventdevs[(rx_adapter)->eventdev_id]) + +#define rxa_dev_instance_get(rx_adapter) \ + rxa_evdev((rx_adapter))->dev_ops->eth_rx_adapter_instance_get + +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 id; + int ret = -EINVAL; + uint32_t caps; + struct event_eth_rx_adapter *rx_adapter; + + if (rxa_memzone_lookup()) + return -ENOMEM; + + if (eth_dev_id >= rte_eth_dev_count_avail()) { + RTE_EDEV_LOG_ERR("Invalid ethernet port id %u", eth_dev_id); + return -EINVAL; + } + + if (rx_queue_id >= 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 == NULL) { + RTE_EDEV_LOG_ERR("rxa_inst_id cannot be NULL"); + return -EINVAL; + } + + /* Iterate through all adapter instances */ + for (id = 0; id < RTE_EVENT_ETH_RX_ADAPTER_MAX_INSTANCE; id++) { + rx_adapter = rxa_id_to_adapter(id); + if (!rx_adapter) + continue; + + if (rxa_is_queue_added(rx_adapter, eth_dev_id, rx_queue_id)) { + *rxa_inst_id = rx_adapter->id; + ret = 0; + } + + /* Rx adapter internally mainatains queue information + * for both internal port and DPDK service port. + * Eventdev PMD callback is called for future proof only and + * overrides the above return value if defined. + */ + caps = 0; + if (!rte_event_eth_rx_adapter_caps_get(rx_adapter->eventdev_id, + eth_dev_id, + &caps)) { + if (caps & RTE_EVENT_ETH_RX_ADAPTER_CAP_INTERNAL_PORT) { + ret = rxa_dev_instance_get(rx_adapter) ? + rxa_dev_instance_get(rx_adapter) + (eth_dev_id, + rx_queue_id, + rxa_inst_id) + : -EINVAL; + } + } + + /* return if entry found */ + if (ret == 0) + return ret; + } + + return -EINVAL; +} + #define RXA_ADD_DICT(stats, s) rte_tel_data_add_dict_u64(d, #s, stats.s) static int diff --git a/lib/eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h index 3608a7b..a3313c8 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,29 @@ __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 + * Pointer to store RX adapter instance identifier. + * Contains valid Rx adapter instance id when return value is 0 + * + * @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/version.map b/lib/eventdev/version.map index d99f996..0066187 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -112,6 +112,9 @@ EXPERIMENTAL { # added in 22.07 rte_event_port_quiesce; rte_event_queue_attr_set; + + # added in 22.11 + rte_event_eth_rx_adapter_instance_get; }; INTERNAL { From patchwork Mon Aug 29 08:14:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 115569 X-Patchwork-Delegate: jerinj@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 65730A0542; Mon, 29 Aug 2022 10:14:49 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B032141148; Mon, 29 Aug 2022 10:14:45 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id D025240694 for ; Mon, 29 Aug 2022 10:14:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661760884; x=1693296884; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=dKiZWZOJIBSQeZQHighBbReZbgKQITqSfYEeATlbwAU=; b=Y2jnSa7C+hSOzrI/HJHbIHi+tUnSmsg/w9Zy4ii6lSZyTseNSbV7dLf1 TzM86/PkwKL81AKX8X2vIBGxqoFheURb2DrMN7t703Wh+CAmD6lH8pFm1 8ApmsRIFXvknLqeAQAE7pUzTxzxUDVPp6ZtLclOA8ejrDObpkmvQnGvYn DIFCZoOZ4rl1vGUC2WHwNXknUzqTGIlX5b+HxCXH3ESknQbHIqZWqwqJ4 VfDk1vLQYkSQzho0nCLcyRlISUxPHui2Vkn2KWJYcBFm5tz8UqqCFdcrx K37M5rcITJdYFV62Vr4HUfuzfC7jtw5LJHV3txOfj8u/Ym/kXYG/FRK+y g==; X-IronPort-AV: E=McAfee;i="6500,9779,10453"; a="274589938" X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="274589938" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Aug 2022 01:14:42 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="672289687" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga008.fm.intel.com with ESMTP; 29 Aug 2022 01:14:42 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com Cc: s.v.naga.harish.k@intel.com Subject: [PATCH v12 2/6] eventdev/eth_rx: add telemetry callback for instance get Date: Mon, 29 Aug 2022 03:14:32 -0500 Message-Id: <20220829081437.3114188-2-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220829081437.3114188-1-ganapati.kundapura@intel.com> References: <20220719082538.274845-1-ganapati.kundapura@intel.com> <20220829081437.3114188-1-ganapati.kundapura@intel.com> MIME-Version: 1.0 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 Added telemetry handler for rte_event_eth_rx_adapter_instance_get() to retrieve adapter instance id for specified ethernet device id and rx queue index. Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan diff --git a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c index ababe13..64a6add 100644 --- a/lib/eventdev/rte_event_eth_rx_adapter.c +++ b/lib/eventdev/rte_event_eth_rx_adapter.c @@ -3674,6 +3674,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 = -1; + char *token, *l_params; + + if (params == NULL || strlen(params) == 0 || !isdigit(*params)) + return -1; + + l_params = strdup(params); + if (l_params == NULL) + return -ENOMEM; + token = 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 = strtoul(token, NULL, 10); + RTE_ETH_VALID_PORTID_OR_GOTO_ERR_RET(eth_dev_id, -EINVAL); + + token = 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 = strtoul(token, NULL, 10); + if (rx_queue_id >= rte_eth_devices[eth_dev_id].data->nb_rx_queues) { + RTE_EDEV_LOG_ERR("Invalid rx queue_id %u", rx_queue_id); + ret = -EINVAL; + goto error; + } + + token = strtok(NULL, "\0"); + if (token != 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 = %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", @@ -3695,4 +3757,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"); } From patchwork Mon Aug 29 08:14:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 115570 X-Patchwork-Delegate: jerinj@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 D38C8A0542; Mon, 29 Aug 2022 10:14:54 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8B18641181; Mon, 29 Aug 2022 10:14:47 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 72A3B40694 for ; Mon, 29 Aug 2022 10:14:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661760884; x=1693296884; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Z10QHUYdbwsB4upZJrCqErab64p2ruXVGbCKVX4ukcY=; b=RJFrz0sB3M1At+KpaT8XF6FA2iU/5fRSyCkHEvZf2sl6yMebewTBj+en bfNQZb0vyCBGXvMfMG2uH0R3Wh+RGLjq5ttUcNjzXvKZjmPAIrU4jTJDi A7dOH1KIqBLt9fFjtsSOl3K3hbQ3CvE2iUWrKB1h/KoAV4Qbf9MfMsFWU X0/5HGfmM1RqyNeUbzVR4sgNiNDKsIcuuXvcEmZ+2DB3LVzxR2jWHNZBd hyBN1wCCtubRZCQ0KnZ5DipxaZs6sCXWYadT7yS6JOKVled1foPK+cdrc 4Y2UXViaY3FUahTJLbAOzNRctQldxr9GHpXIMs9poxmzPOl6O7VaMTXhV Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10453"; a="274589943" X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="274589943" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Aug 2022 01:14:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="672289692" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga008.fm.intel.com with ESMTP; 29 Aug 2022 01:14:42 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com Cc: s.v.naga.harish.k@intel.com Subject: [PATCH v12 3/6] test/eth_rx: add test case for instance get API Date: Mon, 29 Aug 2022 03:14:33 -0500 Message-Id: <20220829081437.3114188-3-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220829081437.3114188-1-ganapati.kundapura@intel.com> References: <20220719082538.274845-1-ganapati.kundapura@intel.com> <20220829081437.3114188-1-ganapati.kundapura@intel.com> MIME-Version: 1.0 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 Added test case for rte_event_eth_rx_adapter_instance_get() Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan diff --git a/app/test/test_event_eth_rx_adapter.c b/app/test/test_event_eth_rx_adapter.c index e358a70..1da7782 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,202 @@ adapter_queue_conf(void) return TEST_SUCCESS; } +static int +adapter_pollq_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 = {0}; + + /* Case 1: Test without configuring eth */ + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 2: Test with wrong eth port */ + eth_dev_id = rte_eth_dev_count_total() + 1; + err = rte_event_eth_rx_adapter_instance_get(eth_dev_id, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 3: Test with wrong rx queue */ + err = rte_eth_dev_info_get(TEST_ETHDEV_ID, &dev_info); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + dev_info.max_rx_queues + 1, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 4: Test with right instance, port & rxq */ + /* Add queue 1 to Rx adapter */ + queue_conf.ev.queue_id = TEST_ETH_QUEUE_ID; + queue_conf.ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + queue_conf.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL; + queue_conf.servicing_weight = 1; /* poll queue */ + + err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &queue_conf); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Add queue 2 to Rx adapter */ + queue_conf.ev.queue_id = TEST_ETH_QUEUE_ID + 1; + err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 1, + &queue_conf); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 1, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Add queue 3 to Rx adapter */ + queue_conf.ev.queue_id = TEST_ETH_QUEUE_ID + 2; + err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 2, + &queue_conf); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 2, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Case 5: Test with right instance, port & wrong rxq */ + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 3, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Delete all queues from the Rx adapter */ + err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID, + TEST_ETHDEV_ID, + -1); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + return TEST_SUCCESS; +} + +static int +adapter_intrq_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 = {0}; + + /* Case 1: Test without configuring eth */ + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 2: Test with wrong eth port */ + eth_dev_id = rte_eth_dev_count_total() + 1; + err = rte_event_eth_rx_adapter_instance_get(eth_dev_id, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 3: Test with wrong rx queue */ + err = rte_eth_dev_info_get(TEST_ETHDEV_ID, &dev_info); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + dev_info.max_rx_queues + 1, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 4: Test with right instance, port & rxq */ + /* Intr enabled eth device can have both polled and intr queues. + * Add polled queue 1 to Rx adapter + */ + queue_conf.ev.queue_id = TEST_ETH_QUEUE_ID; + queue_conf.ev.sched_type = RTE_SCHED_TYPE_ATOMIC; + queue_conf.ev.priority = RTE_EVENT_DEV_PRIORITY_NORMAL; + queue_conf.servicing_weight = 1; /* poll queue */ + + err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &queue_conf); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Add intr queue 2 to Rx adapter */ + queue_conf.ev.queue_id = TEST_ETH_QUEUE_ID + 1; + queue_conf.servicing_weight = 0; /* intr queue */ + err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 1, + &queue_conf); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 1, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Add intr queue 3 to Rx adapter */ + queue_conf.ev.queue_id = TEST_ETH_QUEUE_ID + 2; + queue_conf.servicing_weight = 0; /* intr queue */ + err = rte_event_eth_rx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 2, + &queue_conf); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 2, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Case 5: Test with right instance, port & wrong rxq */ + err = rte_event_eth_rx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 3, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Delete all queues from the Rx adapter */ + err = rte_event_eth_rx_adapter_queue_del(TEST_INST_ID, + TEST_ETHDEV_ID, + -1); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + return TEST_SUCCESS; +} + static struct unit_test_suite event_eth_rx_tests = { .suite_name = "rx event eth adapter test suite", .setup = testsuite_setup, @@ -1019,6 +1216,8 @@ static struct unit_test_suite event_eth_rx_tests = { 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_pollq_instance_get), TEST_CASES_END() /**< NULL terminate unit test array */ } }; @@ -1029,7 +1228,9 @@ static struct unit_test_suite event_eth_rx_intr_tests = { .teardown = testsuite_teardown_rx_intr, .unit_test_cases = { TEST_CASE_ST(adapter_create, adapter_free, - adapter_intr_queue_add_del), + adapter_intr_queue_add_del), + TEST_CASE_ST(adapter_create, adapter_free, + adapter_intrq_instance_get), TEST_CASES_END() /**< NULL terminate unit test array */ } }; From patchwork Mon Aug 29 08:14:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 115571 X-Patchwork-Delegate: jerinj@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 1AC8CA0542; Mon, 29 Aug 2022 10:15:01 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7C05C427F9; Mon, 29 Aug 2022 10:14:48 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id A27484069D for ; Mon, 29 Aug 2022 10:14:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661760884; x=1693296884; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=fGiAoQbH7SA7Xkyb8vddxy5NqULGJPr+RdSZy4t4bSI=; b=PkmGll636vYJzEoj6POjKs4mlkUjPZvcD91KBZwmdf6W3Op4lhd1o50g bUqJwOXAIKhFn6PsETYQDcYDUSgrXUNYZGsu/kwVQGAm9UjY9hgA3d+z5 Bs7rDANIANE37+CX+Yg253t0SgFohZysj0NrjBdKj4lwKdjoH+NObqcp0 vj9u2ecwBTJ1vqxcEUsBqppTnfNPfyfRNi/M3W3QkYDDUFUNH271H2iJE lSQHOgl1eAFiEGCietJ+HRLoQkeRhDlCMV04i2E+HzIzTaLZTBH0xCqkN MiwTjfAVBKVY35z5vI2hSGMOXwyeg83ga8QI1cgwUWkLK/uQQ5nPRKDKS A==; X-IronPort-AV: E=McAfee;i="6500,9779,10453"; a="274589946" X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="274589946" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Aug 2022 01:14:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="672289696" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga008.fm.intel.com with ESMTP; 29 Aug 2022 01:14:43 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com Cc: s.v.naga.harish.k@intel.com Subject: [PATCH v12 4/6] eventdev/eth_tx: add instance get API Date: Mon, 29 Aug 2022 03:14:34 -0500 Message-Id: <20220829081437.3114188-4-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220829081437.3114188-1-ganapati.kundapura@intel.com> References: <20220719082538.274845-1-ganapati.kundapura@intel.com> <20220829081437.3114188-1-ganapati.kundapura@intel.com> MIME-Version: 1.0 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 Added rte_event_eth_tx_adapter_instance_get() to get the adapter instance id for specified ethernet device id and tx queue index. Added rte_event_eth_tx_adapter_instance_get() details in prog_guide/event_ethernet_tx_adapter.rst Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan Acked-by: Jerin Jacob diff --git a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst index f80d226..4da9bcd 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 the service function, if one exists. +Getting Adapter instance id +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``rte_event_eth_tx_adapter_instance_get()`` function reports +tx adapter instance id for a specified ethernet device id and tx queue index. + Tx event vectorization ~~~~~~~~~~~~~~~~~~~~~~ diff --git a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h index c58ba05..f514a37 100644 --- a/lib/eventdev/eventdev_pmd.h +++ b/lib/eventdev/eventdev_pmd.h @@ -1274,6 +1274,27 @@ typedef int (*eventdev_eth_tx_adapter_stats_get_t)( typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id, const struct rte_eventdev *dev); +/** + * Get TX adapter instance id for TX queue + * + * @param eth_dev_id + * Port identifier of Ethernet device + * + * @param tx_queue_id + * Ethernet device TX queue index + * + * @param[out] txa_inst_id + * Pointer to TX adapter instance identifier + * Contains valid Tx adapter instance id when return value is 0 + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +typedef int (*eventdev_eth_tx_adapter_instance_get_t) + (uint16_t eth_dev_id, uint16_t tx_queue_id, uint8_t *txa_inst_id); + + /** Event device operations function pointer table */ struct eventdev_ops { eventdev_info_get_t dev_infos_get; /**< Get device info. */ @@ -1386,6 +1407,8 @@ struct eventdev_ops { /**< Get eth Tx adapter statistics */ eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset; /**< Reset eth Tx adapter statistics */ + eventdev_eth_tx_adapter_instance_get_t eth_tx_adapter_instance_get; + /**< Get Tx adapter instance id for Tx queue */ eventdev_selftest dev_selftest; /**< Start eventdev Selftest */ diff --git a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c index b4b37f1..aaef352 100644 --- a/lib/eventdev/rte_event_eth_tx_adapter.c +++ b/lib/eventdev/rte_event_eth_tx_adapter.c @@ -18,6 +18,9 @@ #define TXA_INVALID_DEV_ID INT32_C(-1) #define TXA_INVALID_SERVICE_ID INT64_C(-1) +#define TXA_ADAPTER_ARRAY "txa_adapter_array" +#define TXA_SERVICE_DATA_ARRAY "txa_service_data_array" + #define txa_evdev(id) (&rte_eventdevs[txa_dev_id_array[(id)]]) #define txa_dev_caps_get(id) txa_evdev((id))->dev_ops->eth_tx_adapter_caps_get @@ -41,6 +44,9 @@ #define txa_dev_stats_get(t) txa_evdev(t)->dev_ops->eth_tx_adapter_stats_get +#define txa_dev_instance_get(id) \ + txa_evdev(id)->dev_ops->eth_tx_adapter_instance_get + #define RTE_EVENT_ETH_TX_ADAPTER_ID_VALID_OR_ERR_RET(id, retval) \ do { \ if (!txa_valid_id(id)) { \ @@ -194,12 +200,34 @@ txa_memzone_array_get(const char *name, unsigned int elt_size, int nb_elems) } static int +txa_lookup(void) +{ + const struct rte_memzone *mz; + + if (txa_dev_id_array == NULL) { + mz = rte_memzone_lookup(TXA_ADAPTER_ARRAY); + if (mz == NULL) + return -ENOMEM; + txa_dev_id_array = mz->addr; + } + + if (txa_service_data_array == NULL) { + mz = rte_memzone_lookup(TXA_SERVICE_DATA_ARRAY); + if (mz == NULL) + return -ENOMEM; + txa_service_data_array = mz->addr; + } + + return 0; +} + +static int txa_dev_id_array_init(void) { if (txa_dev_id_array == NULL) { int i; - txa_dev_id_array = txa_memzone_array_get("txa_adapter_array", + txa_dev_id_array = txa_memzone_array_get(TXA_ADAPTER_ARRAY, sizeof(int), RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); if (txa_dev_id_array == NULL) @@ -222,12 +250,18 @@ static int txa_service_data_init(void) { if (txa_service_data_array == NULL) { + int i; + txa_service_data_array = - txa_memzone_array_get("txa_service_data_array", + txa_memzone_array_get(TXA_SERVICE_DATA_ARRAY, sizeof(*txa_service_data_array), RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); if (txa_service_data_array == NULL) return -ENOMEM; + + /* Reset the txa service pointers */ + for (i = 0; i < RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE; i++) + txa_service_data_array[i] = NULL; } return 0; @@ -1222,3 +1256,67 @@ 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 id; + int ret = -EINVAL; + uint32_t caps; + struct txa_service_data *txa; + + if (txa_lookup()) + return -ENOMEM; + + if (eth_dev_id >= rte_eth_dev_count_avail()) { + RTE_EDEV_LOG_ERR("Invalid ethernet port id %u", eth_dev_id); + return -EINVAL; + } + + if (tx_queue_id >= 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 == NULL) { + RTE_EDEV_LOG_ERR("txa_instance_id cannot be NULL"); + return -EINVAL; + } + + /* Iterate through all Tx adapter instances */ + for (id = 0; id < RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE; id++) { + txa = txa_service_id_to_data(id); + if (!txa) + continue; + + caps = 0; + if (rte_event_eth_tx_adapter_caps_get(txa->eventdev_id, + eth_dev_id, + &caps)) + continue; + + if (caps & RTE_EVENT_ETH_TX_ADAPTER_CAP_INTERNAL_PORT) { + ret = txa_dev_instance_get(id) ? + txa_dev_instance_get(id)(eth_dev_id, + tx_queue_id, + txa_inst_id) + : -EINVAL; + if (ret == 0) + return ret; + } else { + struct rte_eth_dev *eth_dev; + + eth_dev = &rte_eth_devices[eth_dev_id]; + + if (txa_service_is_queue_added(txa, eth_dev, + tx_queue_id)) { + *txa_inst_id = txa->id; + return 0; + } + } + } + + return -EINVAL; +} diff --git a/lib/eventdev/rte_event_eth_tx_adapter.h b/lib/eventdev/rte_event_eth_tx_adapter.h index 3908c2d..9432b74 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,29 @@ 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 + * Contains valid Tx adapter instance id when return value is 0 + * + * @return + * - 0: Success + * - <0: Error code on failure + */ +__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 0066187..9a71cf3 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -115,6 +115,7 @@ EXPERIMENTAL { # added in 22.11 rte_event_eth_rx_adapter_instance_get; + rte_event_eth_tx_adapter_instance_get; }; INTERNAL { From patchwork Mon Aug 29 08:14:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 115572 X-Patchwork-Delegate: jerinj@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 F39AFA0542; Mon, 29 Aug 2022 10:15:06 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5C62C4281E; Mon, 29 Aug 2022 10:14:49 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 4326E4113C for ; Mon, 29 Aug 2022 10:14:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661760885; x=1693296885; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sBGcQjm+sKU2mKU1z3N7ULN0vBaSnaclhq9x8DvdLLE=; b=CdtBanMG5pBCr2mRrKNTCLX0S6o8hzNyzKmMtEL4N9Jd7npaNbDHv9oA zqoB4poNxT9BL+rtfWQ4iv13V8qg9tbpj6NdGpF4Pa6/AauuRFg49t6hk NHg/AT4Vudr9HwCzTUVpyBk5OlwhFfWHw2lRf41ptzI/UHbah50AP3saD 8eEWyBEfmI77go2qc4STNi05Gwqc1VtT8FYFfswMxAo8bWimvpMuDkzv7 iqA+duBxz/iVhPXfIEXbohTLfg7ffrITyYSzDulp85R7nv6uiWuSAI5b7 zAleCoo8RU4wK9VCwI7Za55bDrWvI9x8O7FGstqcFvLaMHIc1CehQuwqU A==; X-IronPort-AV: E=McAfee;i="6500,9779,10453"; a="274589947" X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="274589947" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Aug 2022 01:14:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="672289701" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga008.fm.intel.com with ESMTP; 29 Aug 2022 01:14:43 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com Cc: s.v.naga.harish.k@intel.com Subject: [PATCH v12 5/6] test/eth_tx: add testcase for instance get API Date: Mon, 29 Aug 2022 03:14:35 -0500 Message-Id: <20220829081437.3114188-5-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220829081437.3114188-1-ganapati.kundapura@intel.com> References: <20220719082538.274845-1-ganapati.kundapura@intel.com> <20220829081437.3114188-1-ganapati.kundapura@intel.com> MIME-Version: 1.0 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 Added testcase for rte_event_eth_tx_adapter_instance_get() Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan diff --git a/app/test/test_event_eth_tx_adapter.c b/app/test/test_event_eth_tx_adapter.c index 2900532..98debfd 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,78 @@ 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 = rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 2: Test with wrong eth port */ + eth_dev_id = rte_eth_dev_count_total() + 1; + err = rte_event_eth_tx_adapter_instance_get(eth_dev_id, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 3: Test with wrong tx queue */ + err = rte_eth_dev_info_get(TEST_ETHDEV_ID, &dev_info); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, + dev_info.max_tx_queues + 1, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Case 4: Test with right instance, port & rxq */ + /* Add queue to tx adapter */ + err = rte_event_eth_tx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Add another queue to tx adapter */ + err = rte_event_eth_tx_adapter_queue_add(TEST_INST_ID, + TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 1); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + err = rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 1, + &inst_id); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + TEST_ASSERT(inst_id == TEST_INST_ID, "Expected %d got %d", + TEST_INST_ID, err); + + /* Case 5: Test with right instance, port & wrong rxq */ + err = rte_event_eth_tx_adapter_instance_get(TEST_ETHDEV_ID, + TEST_ETH_QUEUE_ID + 2, + &inst_id); + TEST_ASSERT(err == -EINVAL, "Expected -EINVAL got %d", err); + + /* Delete all queues from the Tx adapter */ + err = rte_event_eth_tx_adapter_queue_del(TEST_INST_ID, + TEST_ETHDEV_ID, + -1); + TEST_ASSERT(err == 0, "Expected 0 got %d", err); + + return TEST_SUCCESS; +} + +static int tx_adapter_dynamic_device(void) { uint16_t port_id = rte_eth_dev_count_avail(); @@ -695,6 +768,8 @@ static struct unit_test_suite event_eth_tx_tests = { 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 */ } From patchwork Mon Aug 29 08:14:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 115573 X-Patchwork-Delegate: jerinj@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 DE6CAA0542; Mon, 29 Aug 2022 10:15:12 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 41D664282B; Mon, 29 Aug 2022 10:14:50 +0200 (CEST) Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mails.dpdk.org (Postfix) with ESMTP id 690DC4069D for ; Mon, 29 Aug 2022 10:14:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1661760885; x=1693296885; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xVGD2qiWI2lb5w4XYVnymVQ+xDiDIh5Ju9l49Fh0HuY=; b=QkB0fMk3iKoghYFZZ4z+3IFWS1YOwN+GZF+kMgQMvI8lTuPkTAuodCK6 8fa2QltFu8H9vA8gvk97/IGcvv1RS5MwOW+CitC0OlGc7es6EndB/rOLP jN7h6S4angYimFQ2nK/HEoOFKBzMolIidO6gbd78R6gLtV+3eUP0bT8Br ivG/275CZAng8hFxr6ohtiDvsvuAtYE2lXJuHHGq0VuI+mSwzg+oCrlfT L4gyIZBN7fIBJHaQ6UdmKFlaY0t6hZjgJ9R4A7biG1hh8/f8L3ZEm7Z6L i/0O9Z35dFD8Q1+r2ZzORJsMklbu3OyYaFDQ6inzvLVgG54Z+TqNfHQDk w==; X-IronPort-AV: E=McAfee;i="6500,9779,10453"; a="274589950" X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="274589950" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Aug 2022 01:14:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.93,272,1654585200"; d="scan'208";a="672289707" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by fmsmga008.fm.intel.com with ESMTP; 29 Aug 2022 01:14:44 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com Cc: s.v.naga.harish.k@intel.com Subject: [PATCH v12 6/6] doc: Added adapter instance get API Date: Mon, 29 Aug 2022 03:14:36 -0500 Message-Id: <20220829081437.3114188-6-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220829081437.3114188-1-ganapati.kundapura@intel.com> References: <20220719082538.274845-1-ganapati.kundapura@intel.com> <20220829081437.3114188-1-ganapati.kundapura@intel.com> MIME-Version: 1.0 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 Added rx adapter instance get - rte_event_eth_rx_adapter_instance_get() and tx adapter instance get - rte_event_eth_tx_adapter_instance_get() Signed-off-by: Ganapati Kundapura diff --git a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst index 8c021cf..091cc84 100644 --- a/doc/guides/rel_notes/release_22_11.rst +++ b/doc/guides/rel_notes/release_22_11.rst @@ -23,6 +23,14 @@ DPDK Release 22.11 New Features ------------ +* **Added adapter instance get API** + +* Added ``rte_event_eth_rx_adapter_instance_get`` to get + rx adapter instance id for specified ethernet device id and + rx queue index. +* Added ``rte_event_eth_tx_adapter_instance_get`` to get the + tx adapter instance id for specified ethernet device id and + tx queue index. .. This section should contain new features added in this release. Sample format: