Test-Label: iol-testing Test-Status: WARNING http://dpdk.org/patch/115568 _apply patch failure_ Submitter: Ganapati Kundapura Date: Monday, August 29 2022 08:14:36 Applied on: CommitID:4fe5844176fe78dcde1e32db0775b99ec146c90b Apply patch set 115568-115573 failed: Checking patch doc/guides/prog_guide/event_ethernet_rx_adapter.rst... error: while searching for: 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. Interrupt Based Rx Queues ~~~~~~~~~~~~~~~~~~~~~~~~~~ error: patch failed: doc/guides/prog_guide/event_ethernet_rx_adapter.rst:177 Checking patch lib/eventdev/eventdev_pmd.h... error: while searching for: const struct rte_eventdev *dev, const struct rte_eth_dev *eth_dev, struct rte_event_eth_rx_adapter_vector_limits *limits); typedef uint32_t rte_event_pmd_selftest_seqn_t; extern int rte_event_pmd_selftest_seqn_dynfield_offset; error: patch failed: lib/eventdev/eventdev_pmd.h:888 error: while searching for: eventdev_eth_rx_adapter_vector_limits_get_t eth_rx_adapter_vector_limits_get; /**< Get event vector limits for the Rx adapter */ eventdev_timer_adapter_caps_get_t timer_adapter_caps_get; /**< Get timer adapter capabilities */ error: patch failed: lib/eventdev/eventdev_pmd.h:1321 Checking patch lib/eventdev/rte_event_eth_rx_adapter.c... error: while searching for: return 0; } static int rte_event_eth_rx_adapter_init(void) { 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 = RTE_ALIGN(sz, RTE_CACHE_LINE_SIZE); mz = rte_memzone_lookup(name); error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:1415 error: while searching for: 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; } } event_eth_rx_adapter = mz->addr; return 0; } error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:1431 error: while searching for: mz = rte_memzone_lookup(RXA_ADAPTER_ARRAY); if (mz == NULL) return -ENOMEM; event_eth_rx_adapter = mz->addr; } error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:1450 error: while searching for: int intrq; int sintrq; if (rx_adapter->nb_queues == 0) return; error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:1951 error: while searching for: { struct event_eth_rx_adapter *rx_adapter; RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); rx_adapter = rxa_id_to_adapter(id); error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:2524 error: while searching for: struct eth_device_info *dev_info; struct rte_event_eth_rx_adapter_vector_limits limits; RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:2561 error: while searching for: uint32_t *rx_wrr = NULL; int num_intr_vec; RTE_EVENT_ETH_RX_ADAPTER_ID_VALID_OR_ERR_RET(id, -EINVAL); RTE_ETH_VALID_PORTID_OR_ERR_RET(eth_dev_id, -EINVAL); error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:2726 error: while searching for: rte_eventdev_trace_eth_rx_adapter_queue_del(id, eth_dev_id, rx_queue_id, ret); return ret; } error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:2832 error: while searching for: return 0; } #define RXA_ADD_DICT(stats, s) rte_tel_data_add_dict_u64(d, #s, stats.s) static int error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:3286 Checking patch lib/eventdev/rte_event_eth_rx_adapter.h... error: while searching for: * - rte_event_eth_rx_adapter_queue_stats_get() * - rte_event_eth_rx_adapter_queue_stats_reset() * - rte_event_eth_rx_adapter_event_port_get() * * The application creates an ethernet to event adapter using * rte_event_eth_rx_adapter_create_ext() or rte_event_eth_rx_adapter_create() error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.h:38 error: while searching for: int rte_event_eth_rx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id); #ifdef __cplusplus } #endif error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.h:704 Checking patch lib/eventdev/version.map... error: while searching for: # added in 22.07 rte_event_port_quiesce; rte_event_queue_attr_set; }; INTERNAL { error: patch failed: lib/eventdev/version.map:112 Applying patch doc/guides/prog_guide/event_ethernet_rx_adapter.rst with 1 reject... Rejected hunk #1. Applying patch lib/eventdev/eventdev_pmd.h with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch lib/eventdev/rte_event_eth_rx_adapter.c with 9 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Rejected hunk #5. Rejected hunk #6. Rejected hunk #7. Rejected hunk #8. Rejected hunk #9. Applying patch lib/eventdev/rte_event_eth_rx_adapter.h with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch lib/eventdev/version.map with 1 reject... Rejected hunk #1. diff a/doc/guides/prog_guide/event_ethernet_rx_adapter.rst b/doc/guides/prog_guide/event_ethernet_rx_adapter.rst (rejected hunks) @@ -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 a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h (rejected hunks) @@ -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 a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c (rejected hunks) @@ -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 a/lib/eventdev/rte_event_eth_rx_adapter.h b/lib/eventdev/rte_event_eth_rx_adapter.h (rejected hunks) @@ -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 a/lib/eventdev/version.map b/lib/eventdev/version.map (rejected hunks) @@ -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 { Checking patch lib/eventdev/rte_event_eth_rx_adapter.c... Hunk #1 succeeded at 3736 (offset 62 lines). error: while searching for: 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"); } error: patch failed: lib/eventdev/rte_event_eth_rx_adapter.c:3695 Applying patch lib/eventdev/rte_event_eth_rx_adapter.c with 1 reject... Hunk #1 applied cleanly. Rejected hunk #2. diff a/lib/eventdev/rte_event_eth_rx_adapter.c b/lib/eventdev/rte_event_eth_rx_adapter.c (rejected hunks) @@ -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"); } Checking patch app/test/test_event_eth_rx_adapter.c... error: while searching for: #define TEST_INST_ID 0 #define TEST_DEV_ID 0 #define TEST_ETHDEV_ID 0 struct event_eth_rx_adapter_test_params { struct rte_mempool *mp; error: patch failed: app/test/test_event_eth_rx_adapter.c:39 Hunk #2 succeeded at 1198 (offset 196 lines). error: while searching for: adapter_queue_event_buf_test), TEST_CASE_ST(adapter_create_with_params, adapter_free, adapter_queue_stats_test), TEST_CASES_END() /**< NULL terminate unit test array */ } }; error: patch failed: app/test/test_event_eth_rx_adapter.c:1019 error: while searching for: .teardown = testsuite_teardown_rx_intr, .unit_test_cases = { TEST_CASE_ST(adapter_create, adapter_free, adapter_intr_queue_add_del), TEST_CASES_END() /**< NULL terminate unit test array */ } }; error: patch failed: app/test/test_event_eth_rx_adapter.c:1029 Applying patch app/test/test_event_eth_rx_adapter.c with 3 rejects... Rejected hunk #1. Hunk #2 applied cleanly. Rejected hunk #3. Rejected hunk #4. diff a/app/test/test_event_eth_rx_adapter.c b/app/test/test_event_eth_rx_adapter.c (rejected hunks) @@ -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; @@ -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 */ } }; Checking patch doc/guides/prog_guide/event_ethernet_tx_adapter.rst... error: while searching for: the counts from the eventdev PMD callback if the callback is supported, and the counts maintained by the service function, if one exists. Tx event vectorization ~~~~~~~~~~~~~~~~~~~~~~ error: patch failed: doc/guides/prog_guide/event_ethernet_tx_adapter.rst:165 Checking patch lib/eventdev/eventdev_pmd.h... error: while searching for: typedef int (*eventdev_eth_tx_adapter_stats_reset_t)(uint8_t id, const struct rte_eventdev *dev); /** Event device operations function pointer table */ struct eventdev_ops { eventdev_info_get_t dev_infos_get; /**< Get device info. */ error: patch failed: lib/eventdev/eventdev_pmd.h:1274 error: while searching for: /**< Get eth Tx adapter statistics */ eventdev_eth_tx_adapter_stats_reset_t eth_tx_adapter_stats_reset; /**< Reset eth Tx adapter statistics */ eventdev_selftest dev_selftest; /**< Start eventdev Selftest */ error: patch failed: lib/eventdev/eventdev_pmd.h:1386 Checking patch lib/eventdev/rte_event_eth_tx_adapter.c... error: while searching for: #define TXA_INVALID_DEV_ID INT32_C(-1) #define TXA_INVALID_SERVICE_ID INT64_C(-1) #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 error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.c:18 error: while searching for: #define txa_dev_stats_get(t) txa_evdev(t)->dev_ops->eth_tx_adapter_stats_get #define RTE_EVENT_ETH_TX_ADAPTER_ID_VALID_OR_ERR_RET(id, retval) \ do { \ if (!txa_valid_id(id)) { \ error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.c:41 error: while searching for: } 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", sizeof(int), RTE_EVENT_ETH_TX_ADAPTER_MAX_INSTANCE); if (txa_dev_id_array == NULL) error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.c:194 error: while searching for: txa_service_data_init(void) { if (txa_service_data_array == NULL) { 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; } return 0; error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.c:222 error: while searching for: rte_eventdev_trace_eth_tx_adapter_stop(id, ret); return ret; } error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.c:1222 Checking patch lib/eventdev/rte_event_eth_tx_adapter.h... error: while searching for: * - rte_event_eth_tx_adapter_enqueue() * - rte_event_eth_tx_adapter_event_port_get() * - rte_event_eth_tx_adapter_service_id_get() * * The application creates the adapter using * rte_event_eth_tx_adapter_create() or rte_event_eth_tx_adapter_create_ext(). error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.h:34 error: while searching for: int rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id); #ifdef __cplusplus } #endif error: patch failed: lib/eventdev/rte_event_eth_tx_adapter.h:423 Checking patch lib/eventdev/version.map... error: while searching for: # added in 22.11 rte_event_eth_rx_adapter_instance_get; }; INTERNAL { error: patch failed: lib/eventdev/version.map:115 Applying patch doc/guides/prog_guide/event_ethernet_tx_adapter.rst with 1 reject... Rejected hunk #1. Applying patch lib/eventdev/eventdev_pmd.h with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch lib/eventdev/rte_event_eth_tx_adapter.c with 5 rejects... Rejected hunk #1. Rejected hunk #2. Rejected hunk #3. Rejected hunk #4. Rejected hunk #5. Applying patch lib/eventdev/rte_event_eth_tx_adapter.h with 2 rejects... Rejected hunk #1. Rejected hunk #2. Applying patch lib/eventdev/version.map with 1 reject... Rejected hunk #1. diff a/doc/guides/prog_guide/event_ethernet_tx_adapter.rst b/doc/guides/prog_guide/event_ethernet_tx_adapter.rst (rejected hunks) @@ -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 a/lib/eventdev/eventdev_pmd.h b/lib/eventdev/eventdev_pmd.h (rejected hunks) @@ -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 a/lib/eventdev/rte_event_eth_tx_adapter.c b/lib/eventdev/rte_event_eth_tx_adapter.c (rejected hunks) @@ -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 a/lib/eventdev/rte_event_eth_tx_adapter.h b/lib/eventdev/rte_event_eth_tx_adapter.h (rejected hunks) @@ -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 a/lib/eventdev/version.map b/lib/eventdev/version.map (rejected hunks) @@ -115,6 +115,7 @@ EXPERIMENTAL { # added in 22.11 rte_event_eth_rx_adapter_instance_get; + rte_event_eth_tx_adapter_instance_get; }; INTERNAL { Checking patch app/test/test_event_eth_tx_adapter.c... error: while searching for: #define MAX_NUM_QUEUE RTE_PMD_RING_MAX_RX_RINGS #define TEST_INST_ID 0 #define TEST_DEV_ID 0 #define SOCKET0 0 #define RING_SIZE 256 #define ETH_NAME_LEN 32 error: patch failed: app/test/test_event_eth_tx_adapter.c:29 Hunk #2 succeeded at 712 (offset 72 lines). error: while searching for: tx_adapter_start_stop), TEST_CASE_ST(tx_adapter_create, tx_adapter_free, tx_adapter_service), TEST_CASE_ST(NULL, NULL, tx_adapter_dynamic_device), TEST_CASES_END() /**< NULL terminate unit test array */ } error: patch failed: app/test/test_event_eth_tx_adapter.c:695 Applying patch app/test/test_event_eth_tx_adapter.c with 2 rejects... Rejected hunk #1. Hunk #2 applied cleanly. Rejected hunk #3. diff a/app/test/test_event_eth_tx_adapter.c b/app/test/test_event_eth_tx_adapter.c (rejected hunks) @@ -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 @@ -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 */ } Checking patch doc/guides/rel_notes/release_22_11.rst... error: while searching for: New Features ------------ .. This section should contain new features added in this release. Sample format: error: patch failed: doc/guides/rel_notes/release_22_11.rst:23 Applying patch doc/guides/rel_notes/release_22_11.rst with 1 reject... Rejected hunk #1. diff a/doc/guides/rel_notes/release_22_11.rst b/doc/guides/rel_notes/release_22_11.rst (rejected hunks) @@ -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: https://lab.dpdk.org/results/dashboard/patchsets/23329/ UNH-IOL DPDK Community Lab