-----Original Message----- > Date: Thu, 29 Nov 2018 16:41:48 +0530 > From: Nikhil Rao <nikhil....@intel.com> > To: jerin.ja...@caviumnetworks.com > CC: dev@dpdk.org, Nikhil Rao <nikhil....@intel.com>, sta...@dpdk.org > Subject: [PATCH] eventdev: fix eth Tx adapter queue count checks > X-Mailer: git-send-email 1.8.3.1 > > > rte_event_eth_tx_adapter_queue_add() - add a check > that returns an error if the ethdev the 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: sta...@dpdk.org > Signed-off-by: Nikhil Rao <nikhil....@intel.com> > --- > lib/librte_eventdev/rte_event_eth_tx_adapter.c | 53 > +++++++++++++++++--------- > 1 file changed, 36 insertions(+), 17 deletions(-) > > diff --git a/lib/librte_eventdev/rte_event_eth_tx_adapter.c > b/lib/librte_eventdev/rte_event_eth_tx_adapter.c > index ccf8a75..8431656 100644 > --- a/lib/librte_eventdev/rte_event_eth_tx_adapter.c > +++ b/lib/librte_eventdev/rte_event_eth_tx_adapter.c > @@ -59,6 +59,19 @@ > 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) { \
The queue should be bracket i.e ((queue) != 1) to avoid any side effect > + RTE_EDEV_LOG_ERR("Invalid tx queue_id %" PRIu16, \ > + (uint16_t)queue); \ > + return -EINVAL; \ > + } \ > +} while (0) > + > 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) > @@ -999,11 +1027,7 @@ static int txa_service_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; > - } > + TXA_CHECK_TXQ(eth_dev, queue); > > caps = 0; > if (txa_dev_caps_get(id)) > @@ -1034,11 +1058,6 @@ static int txa_service_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; > - } Shouldn't we need TXA_CHECK_TXQ here? If we need only one place, Do we need macro? > > caps = 0; > > -- > 1.8.3.1 >