eventdev: fix eth Tx adapter queue count checks

rte_event_eth_tx_adapter_queue_add() - add a check
that returns an error if the ethdev has zero Tx queues
configured.

rte_event_eth_tx_adapter_queue_del() - remove the
checks for ethdev queue count, instead check for
queues added to the adapter which maybe different
from the current ethdev queue count.

Fixes: a3bbf2e09756 ("eventdev: add eth Tx adapter implementation")
Cc: stable@dpdk.org

Signed-off-by: Nikhil Rao <nikhil.rao@intel.com>
This commit is contained in:
Nikhil Rao 2018-12-17 10:09:41 +05:30 committed by Jerin Jacob
parent 1f7a110269
commit 5bd4ae2d77

View File

@ -59,6 +59,20 @@ do {\
return -EINVAL; \ return -EINVAL; \
} while (0) } 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 */ /* Tx retry callback structure */
struct txa_retry { struct txa_retry {
/* Ethernet port id */ /* Ethernet port id */
@ -795,20 +809,35 @@ txa_service_queue_del(uint8_t id,
struct rte_eth_dev_tx_buffer *tb; struct rte_eth_dev_tx_buffer *tb;
uint16_t port_id; uint16_t port_id;
if (tx_queue_id == -1) { txa = txa_service_id_to_data(id);
uint16_t i; port_id = dev->data->port_id;
int ret = -1;
for (i = 0; i < dev->data->nb_tx_queues; i++) { if (tx_queue_id == -1) {
ret = txa_service_queue_del(id, dev, i); uint16_t i, q, nb_queues;
if (ret != 0) int 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; return ret;
} }
txa = txa_service_id_to_data(id); txa = txa_service_id_to_data(id);
port_id = dev->data->port_id;
tqi = txa_service_queue(txa, port_id, tx_queue_id); tqi = txa_service_queue(txa, port_id, tx_queue_id);
if (tqi == NULL || !tqi->added) if (tqi == NULL || !tqi->added)
@ -999,11 +1028,7 @@ rte_event_eth_tx_adapter_queue_add(uint8_t id,
TXA_CHECK_OR_ERR_RET(id); TXA_CHECK_OR_ERR_RET(id);
eth_dev = &rte_eth_devices[eth_dev_id]; eth_dev = &rte_eth_devices[eth_dev_id];
if (queue != -1 && (uint16_t)queue >= eth_dev->data->nb_tx_queues) { TXA_CHECK_TXQ(eth_dev, queue);
RTE_EDEV_LOG_ERR("Invalid tx queue_id %" PRIu16,
(uint16_t)queue);
return -EINVAL;
}
caps = 0; caps = 0;
if (txa_dev_caps_get(id)) if (txa_dev_caps_get(id))
@ -1034,11 +1059,6 @@ rte_event_eth_tx_adapter_queue_del(uint8_t id,
TXA_CHECK_OR_ERR_RET(id); TXA_CHECK_OR_ERR_RET(id);
eth_dev = &rte_eth_devices[eth_dev_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; caps = 0;