X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_eventdev%2Frte_event_eth_tx_adapter.c;h=bb21dc40755824cbb116db70fa000489477ec9a7;hb=9dbe628a7ba2420d00bf8c15d066f9667092db2b;hp=3a21defba1e2559ee9311100944a5fecb3980f76;hpb=850716bc57c0ebb992b8455238a71adb0fd9fc1e;p=dpdk.git diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.c b/lib/librte_eventdev/rte_event_eth_tx_adapter.c index 3a21defba1..bb21dc4075 100644 --- a/lib/librte_eventdev/rte_event_eth_tx_adapter.c +++ b/lib/librte_eventdev/rte_event_eth_tx_adapter.c @@ -6,6 +6,7 @@ #include #include "rte_eventdev_pmd.h" +#include "rte_eventdev_trace.h" #include "rte_event_eth_tx_adapter.h" #define TXA_BATCH_SIZE 32 @@ -59,6 +60,20 @@ do {\ return -EINVAL; \ } while (0) +#define TXA_CHECK_TXQ(dev, queue) \ +do {\ + if ((dev)->data->nb_tx_queues == 0) { \ + RTE_EDEV_LOG_ERR("No tx queues configured"); \ + return -EINVAL; \ + } \ + if ((queue) != -1 && \ + (uint16_t)(queue) >= (dev)->data->nb_tx_queues) { \ + RTE_EDEV_LOG_ERR("Invalid tx queue_id %" PRIu16, \ + (uint16_t)(queue)); \ + return -EINVAL; \ + } \ +} while (0) + /* Tx retry callback structure */ struct txa_retry { /* Ethernet port id */ @@ -702,7 +717,7 @@ txa_service_queue_add(uint8_t id, struct txa_service_queue_info *tqi; struct rte_eth_dev_tx_buffer *tb; struct txa_retry *txa_retry; - int ret; + int ret = 0; txa = txa_service_id_to_data(id); @@ -795,20 +810,35 @@ txa_service_queue_del(uint8_t id, struct rte_eth_dev_tx_buffer *tb; uint16_t port_id; + txa = txa_service_id_to_data(id); + port_id = dev->data->port_id; + if (tx_queue_id == -1) { - uint16_t i; - int ret = -1; + uint16_t i, q, nb_queues; + int ret = 0; - for (i = 0; i < dev->data->nb_tx_queues; i++) { - ret = txa_service_queue_del(id, dev, i); - if (ret != 0) - break; + nb_queues = txa->nb_queues; + if (nb_queues == 0) + return 0; + + i = 0; + q = 0; + tqi = txa->txa_ethdev[port_id].queues; + + while (i < nb_queues) { + + if (tqi[q].added) { + ret = txa_service_queue_del(id, dev, q); + if (ret != 0) + break; + } + i++; + q++; } return ret; } txa = txa_service_id_to_data(id); - port_id = dev->data->port_id; tqi = txa_service_queue(txa, port_id, tx_queue_id); if (tqi == NULL || !tqi->added) @@ -875,7 +905,7 @@ txa_service_stop(uint8_t id) } -int __rte_experimental +int rte_event_eth_tx_adapter_create(uint8_t id, uint8_t dev_id, struct rte_event_port_conf *port_conf) { @@ -913,12 +943,13 @@ rte_event_eth_tx_adapter_create(uint8_t id, uint8_t dev_id, txa_dev_id_array[id] = TXA_INVALID_DEV_ID; return ret; } - + rte_eventdev_trace_eth_tx_adapter_create(id, dev_id, NULL, port_conf, + ret); txa_dev_id_array[id] = dev_id; return 0; } -int __rte_experimental +int rte_event_eth_tx_adapter_create_ext(uint8_t id, uint8_t dev_id, rte_event_eth_tx_adapter_conf_cb conf_cb, void *conf_arg) @@ -955,12 +986,14 @@ rte_event_eth_tx_adapter_create_ext(uint8_t id, uint8_t dev_id, return ret; } + rte_eventdev_trace_eth_tx_adapter_create(id, dev_id, conf_cb, conf_arg, + ret); txa_dev_id_array[id] = dev_id; return 0; } -int __rte_experimental +int rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id) { TXA_CHECK_OR_ERR_RET(id); @@ -968,7 +1001,7 @@ rte_event_eth_tx_adapter_event_port_get(uint8_t id, uint8_t *event_port_id) return txa_service_event_port_get(id, event_port_id); } -int __rte_experimental +int rte_event_eth_tx_adapter_free(uint8_t id) { int ret; @@ -983,10 +1016,11 @@ rte_event_eth_tx_adapter_free(uint8_t id) ret = txa_service_adapter_free(id); txa_dev_id_array[id] = TXA_INVALID_DEV_ID; + rte_eventdev_trace_eth_tx_adapter_free(id, ret); return ret; } -int __rte_experimental +int rte_event_eth_tx_adapter_queue_add(uint8_t id, uint16_t eth_dev_id, int32_t queue) @@ -999,11 +1033,7 @@ rte_event_eth_tx_adapter_queue_add(uint8_t id, TXA_CHECK_OR_ERR_RET(id); eth_dev = &rte_eth_devices[eth_dev_id]; - if (queue != -1 && (uint16_t)queue >= eth_dev->data->nb_tx_queues) { - RTE_EDEV_LOG_ERR("Invalid tx queue_id %" PRIu16, - (uint16_t)queue); - return -EINVAL; - } + TXA_CHECK_TXQ(eth_dev, queue); caps = 0; if (txa_dev_caps_get(id)) @@ -1018,10 +1048,12 @@ rte_event_eth_tx_adapter_queue_add(uint8_t id, else ret = txa_service_queue_add(id, txa_evdev(id), eth_dev, queue); + rte_eventdev_trace_eth_tx_adapter_queue_add(id, eth_dev_id, queue, + ret); return ret; } -int __rte_experimental +int rte_event_eth_tx_adapter_queue_del(uint8_t id, uint16_t eth_dev_id, int32_t queue) @@ -1034,11 +1066,6 @@ rte_event_eth_tx_adapter_queue_del(uint8_t id, TXA_CHECK_OR_ERR_RET(id); eth_dev = &rte_eth_devices[eth_dev_id]; - if (queue != -1 && (uint16_t)queue >= eth_dev->data->nb_tx_queues) { - RTE_EDEV_LOG_ERR("Invalid tx queue_id %" PRIu16, - (uint16_t)queue); - return -EINVAL; - } caps = 0; @@ -1053,10 +1080,12 @@ rte_event_eth_tx_adapter_queue_del(uint8_t id, else ret = txa_service_queue_del(id, eth_dev, queue); + rte_eventdev_trace_eth_tx_adapter_queue_del(id, eth_dev_id, queue, + ret); return ret; } -int __rte_experimental +int rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id) { TXA_CHECK_OR_ERR_RET(id); @@ -1064,7 +1093,7 @@ rte_event_eth_tx_adapter_service_id_get(uint8_t id, uint32_t *service_id) return txa_service_id_get(id, service_id); } -int __rte_experimental +int rte_event_eth_tx_adapter_start(uint8_t id) { int ret; @@ -1074,10 +1103,11 @@ rte_event_eth_tx_adapter_start(uint8_t id) ret = txa_dev_start(id) ? txa_dev_start(id)(id, txa_evdev(id)) : 0; if (ret == 0) ret = txa_service_start(id); + rte_eventdev_trace_eth_tx_adapter_start(id, ret); return ret; } -int __rte_experimental +int rte_event_eth_tx_adapter_stats_get(uint8_t id, struct rte_event_eth_tx_adapter_stats *stats) { @@ -1110,7 +1140,7 @@ rte_event_eth_tx_adapter_stats_get(uint8_t id, return ret; } -int __rte_experimental +int rte_event_eth_tx_adapter_stats_reset(uint8_t id) { int ret; @@ -1124,7 +1154,7 @@ rte_event_eth_tx_adapter_stats_reset(uint8_t id) return ret; } -int __rte_experimental +int rte_event_eth_tx_adapter_stop(uint8_t id) { int ret; @@ -1134,5 +1164,6 @@ rte_event_eth_tx_adapter_stop(uint8_t id) ret = txa_dev_stop(id) ? txa_dev_stop(id)(id, txa_evdev(id)) : 0; if (ret == 0) ret = txa_service_stop(id); + rte_eventdev_trace_eth_tx_adapter_stop(id, ret); return ret; }