From patchwork Thu Jun 23 09:30:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ganapati Kundapura X-Patchwork-Id: 113325 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 68308A0093; Thu, 23 Jun 2022 11:30:41 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 55F2040A82; Thu, 23 Jun 2022 11:30:41 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 3F7C14003F for ; Thu, 23 Jun 2022 11:30:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655976640; x=1687512640; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=GjG3z8xnc0e82hlz6x7Yx4IBgbX4s+1lZ8a7EJnbv1Q=; b=gqnZ81yaCxyZMfCT0Ih+8yp15fOpR69jd9VwMRx8t+F4qd/A9dOKM7At kK1/voqpl76tDXViek3yx4isQaaOGDjE2NyGfcekeKC6kaN2503RTvU4T WqDARe8e3kRnyrxlpeAajKQGy99vSGCem1EJ1T66APF2TrtkY6nPiLvVD 802h1EUM3VjxGo1KLlTM8vN7EFaFetM7aTluwVF/JkacMjJgmj3JEafGX P0TzDPDv/l6Xg4UyyMfPQ1aaztKlZZgdzJd/HBDWM8zXB/3uwNlKG/20d kGLZNHaDVKp1mwlBLyBIrBgFHyWHRLm6R/kzXFAcLKnTJK3Cz55cApaWj A==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662868" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662868" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677983991" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:38 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 1/7] eventdev/eth_rx: add adapter instance get API Date: Thu, 23 Jun 2022 04:30:30 -0500 Message-Id: <20220623093036.708448-1-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623062418.694734-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-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. Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan --- 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 --- lib/eventdev/eventdev_pmd.h | 22 +++++ lib/eventdev/rte_event_eth_rx_adapter.c | 140 +++++++++++++++++++++++++++++--- lib/eventdev/rte_event_eth_rx_adapter.h | 24 ++++++ lib/eventdev/version.map | 1 + 4 files changed, 177 insertions(+), 10 deletions(-) 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 886e2ec..d1ecda4 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -110,6 +110,7 @@ EXPERIMENTAL { rte_event_eth_rx_adapter_event_port_get; # added in 22.07 + rte_event_eth_rx_adapter_instance_get; rte_event_port_quiesce; rte_event_queue_attr_set; }; From patchwork Thu Jun 23 09:30: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: 113326 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 B5060A0093; Thu, 23 Jun 2022 11:30:45 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 484E84069D; Thu, 23 Jun 2022 11:30:45 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 066154003F for ; Thu, 23 Jun 2022 11:30:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655976641; x=1687512641; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=X3RRhrjbm1SNua87DKflTQyiDa6nIKk7dfd4LonvS/A=; b=fZ25DiUkV6rif7P0usaR3n77rXZPlf0+KMP9ZKuhI5tU3CNcRsfll7/C ZdWG1xwqrriYKFJe8XGgsEi/bHDr9dy1V+9ernyz25IF9I3s+UT7ptwSM +3c6VxNrBzOUG2EvU8K65R5dWDH24u0U2W4B6HWxOvsuPgNU8a1P40CQY Q6xPviBbEc2gt9vCtsBoeUw54b3pX5SqVWStrv5huXTarWJQgYerI6O2d oXlHyhFBwUF/OEwWYV9+BpvmqOXWA7nIF3TmZIln5Qp0BEA1JIO2w+9by +rCfBHI48V7edLaSbuJfg0YsIYG7RhPBA/7vF6rlP+vKVDBOVnr1G4woP g==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662869" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662869" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:39 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677983995" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:39 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 2/7] eventdev/eth_rx: add telemetry callback for instance get Date: Thu, 23 Jun 2022 04:30:31 -0500 Message-Id: <20220623093036.708448-2-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623093036.708448-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-1-ganapati.kundapura@intel.com> <20220623093036.708448-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 --- lib/eventdev/rte_event_eth_rx_adapter.c | 66 +++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) 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 Thu Jun 23 09:30: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: 113327 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 A5D96A0093; Thu, 23 Jun 2022 11:30:51 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2C4DC4280C; Thu, 23 Jun 2022 11:30:46 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 40AE14067B for ; Thu, 23 Jun 2022 11:30:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655976641; x=1687512641; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=hVcm+YuvfFnBwBaGcDFlVVVfmvcKdh5wvPaAziO+uXM=; b=VnOVKCbkoTehvf6f79XjR5drM+6fuIZ0puIiR17XqSarCoJzPoS2PtHC TgYHWpGrePIC/HpnUTeuy4xRA1XkJWWORxRBzsAtU2u6ulq8AisT+Dcm3 x+yQ62pfOdPvikddIXvZovCoQfBTstCLG7xL7xV58YpJKs7fpQcRlfnHB +cjiWawEA4WH9GltSo8yDUCHY6ZbRsx9htfYIFeFRFYXCw5ykv+UjPwXN feH/p4QaoaGjCIJI4d07hxm1gXO9RRSxprr5/hgtgcbuMN3X83+BBvRiD 9/TC7c69z+T1QCZ1VSBckqjUuFWGoPXgcDncA8SqsnCSVLt8ZpwjAulW+ w==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662871" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662871" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677983999" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:39 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 3/7] test/eth_rx: add test case for instance get API Date: Thu, 23 Jun 2022 04:30:32 -0500 Message-Id: <20220623093036.708448-3-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623093036.708448-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-1-ganapati.kundapura@intel.com> <20220623093036.708448-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 --- app/test/test_event_eth_rx_adapter.c | 203 ++++++++++++++++++++++++++++++++++- 1 file changed, 202 insertions(+), 1 deletion(-) 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 Thu Jun 23 09:30: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: 113328 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 E93EBA0093; Thu, 23 Jun 2022 11:30:56 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 35DFA42820; Thu, 23 Jun 2022 11:30:47 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 9C3804003F for ; Thu, 23 Jun 2022 11:30:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1655976641; x=1687512641; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=W9B2MlCjwdOdBEHy5UmKN4Mdn9vsZ0HUakXer6WvM4c=; b=XINNAcvFgxsEkT1+Bix4AZHwAhMArGo6aidVSQNmjGqAYYxRWf55/wwP jH1gA+gbjsfjjrc9dmwgb9hnJbHjACuVxxxnjW51FtxaaPg1h2shcYxUb /7c8yNwHBkHM1DY2LHM72P6CATWexf8e8fX1D8YrNh8QdWLus9/IdiLH+ SN7JYYtmodcm9xsKptSqPm3I8qoWoRrch8dOQayzdDwYhyeFWmvpjJyxi K8km5Khq33JjTyfaXZmTizK3foYzRcwLxYSL0lAlr5pxiDu1oRLGDzF6S jMDfFBBwOXqANBZXQ0i6orY7K2ZEYeSI2KAKcHJyQMURE2mNlqTr1KZep w==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662872" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662872" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677984005" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:40 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 4/7] eventdev/eth_tx: add instance get API Date: Thu, 23 Jun 2022 04:30:33 -0500 Message-Id: <20220623093036.708448-4-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623093036.708448-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-1-ganapati.kundapura@intel.com> <20220623093036.708448-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. Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan --- lib/eventdev/eventdev_pmd.h | 23 +++++++ lib/eventdev/rte_event_eth_tx_adapter.c | 102 +++++++++++++++++++++++++++++++- lib/eventdev/rte_event_eth_tx_adapter.h | 24 ++++++++ lib/eventdev/version.map | 1 + 4 files changed, 148 insertions(+), 2 deletions(-) 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 c700fb7..44a60cc 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; @@ -1218,3 +1252,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 d1ecda4..dd9255c 100644 --- a/lib/eventdev/version.map +++ b/lib/eventdev/version.map @@ -111,6 +111,7 @@ EXPERIMENTAL { # added in 22.07 rte_event_eth_rx_adapter_instance_get; + rte_event_eth_tx_adapter_instance_get; rte_event_port_quiesce; rte_event_queue_attr_set; }; From patchwork Thu Jun 23 09:30: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: 113329 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 61005A0093; Thu, 23 Jun 2022 11:31:03 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 35D744282C; Thu, 23 Jun 2022 11:30:48 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 41DC8427EE for ; Thu, 23 Jun 2022 11:30: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=1655976642; x=1687512642; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=+frSh5ketlYyq9g8DIvcCE4e4LnZw9ifRa7rNh1behU=; b=gn/7k609EOTIWlmthS90/fdCYWENo5vAwniPXGM6zddi86h5/WesfF41 iuDSjPspYEc9XT2GuMX31QxV9uFOo8ZiwQfbex6LnSLM4pz6oz13o+l2M CqtFrbVgOQ7qnL3Hyx/mqj56TQRVLniQcx71jbpo74BBZoZ3Ri1O3TQiU gjTYohX4+GtWzIR130MxkJ6yIIldFEGsqcN+AkdwE8k0puPx872vN5YUu lD60kys/CX4KarWamT0lOhyhaGnzsrI1RN78hQKYoWnEV9W6z88oGFQO3 P0OzyvX8d6Rcj8tUblwUW+xEEMUx90tczO093r/PWMIZ57LnL+59Z489p g==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662873" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662873" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:40 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677984009" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:40 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 5/7] test/eth_tx: add testcase for instance get API Date: Thu, 23 Jun 2022 04:30:34 -0500 Message-Id: <20220623093036.708448-5-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623093036.708448-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-1-ganapati.kundapura@intel.com> <20220623093036.708448-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 --- app/test/test_event_eth_tx_adapter.c | 75 ++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) 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 Thu Jun 23 09:30: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: 113330 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 1DB59A0093; Thu, 23 Jun 2022 11:31:10 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3FE4142905; Thu, 23 Jun 2022 11:30:49 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 65275427F1 for ; Thu, 23 Jun 2022 11:30: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=1655976642; x=1687512642; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=jBm0x4xzWzWhdMB/JBrhenTwYCzePz/OvrqpOy5RKdY=; b=YHzkSTuLLfBCyDYQLGkIR+m9XxiaqhLHgv06ftDTk7nxKVjb/+SZS+FB INS/CqyBuNpVM/2HFz7/0sSnn3Wf7tLm9TmSJoA+PDfkFBb2cD2+pQLXO j5aJEWAbh7awxG0XIQgQC/R+QDhztGieycbTBWLrLqtQZqyCuCHNXhew6 nFJLRubqrp76T+bbWLkooQRHjEwEf266klXqbvAUPqJVTx9pQTiYU0ncp VPjB9frFxevS9apjN4aWOnDbYbdJm/3dyRvOTXt3yocTbSqeY13s6AIFH 52hT8LHWG7Wqaskne/PbOSKBaTZIa7WASPyXEjIqDbwGDH8j+hiQhcCrJ g==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662874" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662874" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677984012" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:40 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 6/7] doc/eth_rx: update instance get API Date: Thu, 23 Jun 2022 04:30:35 -0500 Message-Id: <20220623093036.708448-6-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623093036.708448-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-1-ganapati.kundapura@intel.com> <20220623093036.708448-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() details Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan --- doc/guides/prog_guide/event_ethernet_rx_adapter.rst | 6 ++++++ 1 file changed, 6 insertions(+) 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 ~~~~~~~~~~~~~~~~~~~~~~~~~~ From patchwork Thu Jun 23 09:30: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: 113331 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 5BB56A0093; Thu, 23 Jun 2022 11:31:16 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 33F6842B70; Thu, 23 Jun 2022 11:30:50 +0200 (CEST) Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mails.dpdk.org (Postfix) with ESMTP id 8BFA84003F for ; Thu, 23 Jun 2022 11:30: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=1655976642; x=1687512642; h=from:to:subject:date:message-id:in-reply-to:references: mime-version:content-transfer-encoding; bh=IPIPdYui6nsvmpc6lxB5avuV4oYGCt0G73EbNCdd5Ho=; b=anE2WhonzgIqu8elzfcE1VEvJNRS+csNlKYpHKmE1KHeKx9AcEqJDQ/o 1R2i7mX79WvqUxXr+cn8UsNW5RnImilwfw5QSrfXTJ2tTVD1Ec+WstD53 PQYr+u+IKunzzGnpZxvLTGzuSG6NZl7s+GWpkNYPExf2W1PHYuaUBOeGT 1Y1q1CiAcCZxzTErX/QqMYqMbobs+JMeAObjS+4gD0ssLGQ0jm+DdPUKg /OBTmfkfbk4tvucG2AZfRZ2bT37MaAOOtdQFPr27JEcKqKcWB7ai4pKvZ KsfxnTLDg3i0ucfUn2/9eEs8X8qcN/pQFZiTQKcKtn9Z6KHqO56o1MtoN A==; X-IronPort-AV: E=McAfee;i="6400,9594,10386"; a="344662875" X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="344662875" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jun 2022 02:30:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.92,215,1650956400"; d="scan'208";a="677984015" Received: from txandevlnx322.an.intel.com ([10.123.117.44]) by FMSMGA003.fm.intel.com with ESMTP; 23 Jun 2022 02:30:41 -0700 From: Ganapati Kundapura To: dev@dpdk.org, jerinj@marvell.com, jay.jayatheerthan@intel.com, s.v.naga.harish.k@intel.com Subject: [PATCH v10 7/7] doc/eth_tx: update instance get API Date: Thu, 23 Jun 2022 04:30:36 -0500 Message-Id: <20220623093036.708448-7-ganapati.kundapura@intel.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20220623093036.708448-1-ganapati.kundapura@intel.com> References: <20220623062418.694734-1-ganapati.kundapura@intel.com> <20220623093036.708448-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() details. Signed-off-by: Ganapati Kundapura Reviewed-by: Naga Harish K S V Acked-by: Jay Jayatheerthan --- doc/guides/prog_guide/event_ethernet_tx_adapter.rst | 6 ++++++ 1 file changed, 6 insertions(+) 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 ~~~~~~~~~~~~~~~~~~~~~~