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:
parent
1f7a110269
commit
5bd4ae2d77
@ -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;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user