ethdev: move a queue id check to generic layer
The check of queue_id is done in all drivers implementing rte_eth_rx_queue_count(). Factorize this check in the generic function. Note that the nfp driver was doing the check differently, which could induce crashes if the queue index was too big. Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
44e93f4a34
commit
0ef850c4f6
@ -1436,11 +1436,6 @@ eth_em_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)
|
||||
struct em_rx_queue *rxq;
|
||||
uint32_t desc = 0;
|
||||
|
||||
if (rx_queue_id >= dev->data->nb_rx_queues) {
|
||||
PMD_RX_LOG(DEBUG, "Invalid RX queue_id=%d", rx_queue_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
rxq = dev->data->rx_queues[rx_queue_id];
|
||||
rxdp = &(rxq->rx_ring[rxq->rx_tail]);
|
||||
|
||||
|
@ -1569,11 +1569,6 @@ eth_igb_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)
|
||||
struct igb_rx_queue *rxq;
|
||||
uint32_t desc = 0;
|
||||
|
||||
if (rx_queue_id >= dev->data->nb_rx_queues) {
|
||||
PMD_RX_LOG(ERR, "Invalid RX queue id=%d", rx_queue_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
rxq = dev->data->rx_queues[rx_queue_id];
|
||||
rxdp = &(rxq->rx_ring[rxq->rx_tail]);
|
||||
|
||||
|
@ -272,11 +272,6 @@ static uint32_t enicpmd_dev_rx_queue_count(struct rte_eth_dev *dev,
|
||||
uint16_t cq_idx;
|
||||
int rq_num;
|
||||
|
||||
if (rx_queue_id >= dev->data->nb_rx_queues) {
|
||||
dev_err(enic, "Invalid RX queue id=%d", rx_queue_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
rq_num = enic_rte_rq_idx_to_sop_idx(rx_queue_id);
|
||||
cq = &enic->cq[enic_cq_rq(enic, rq_num)];
|
||||
cq_idx = cq->to_clean;
|
||||
|
@ -1876,11 +1876,6 @@ i40e_dev_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)
|
||||
struct i40e_rx_queue *rxq;
|
||||
uint16_t desc = 0;
|
||||
|
||||
if (unlikely(rx_queue_id >= dev->data->nb_rx_queues)) {
|
||||
PMD_DRV_LOG(ERR, "Invalid RX queue id %u", rx_queue_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
rxq = dev->data->rx_queues[rx_queue_id];
|
||||
rxdp = &(rxq->rx_ring[rxq->rx_tail]);
|
||||
while ((desc < rxq->nb_rx_desc) &&
|
||||
|
@ -2911,11 +2911,6 @@ ixgbe_dev_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id)
|
||||
struct ixgbe_rx_queue *rxq;
|
||||
uint32_t desc = 0;
|
||||
|
||||
if (rx_queue_id >= dev->data->nb_rx_queues) {
|
||||
PMD_RX_LOG(ERR, "Invalid RX queue id=%d", rx_queue_id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
rxq = dev->data->rx_queues[rx_queue_id];
|
||||
rxdp = &(rxq->rx_ring[rxq->rx_tail]);
|
||||
|
||||
|
@ -1184,11 +1184,6 @@ nfp_net_rx_queue_count(struct rte_eth_dev *dev, uint16_t queue_idx)
|
||||
|
||||
rxq = (struct nfp_net_rxq *)dev->data->rx_queues[queue_idx];
|
||||
|
||||
if (rxq == NULL) {
|
||||
PMD_INIT_LOG(ERR, "Bad queue: %u", queue_idx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
idx = rxq->rd_p;
|
||||
|
||||
count = 0;
|
||||
|
@ -2732,16 +2732,19 @@ rte_eth_rx_burst(uint8_t port_id, uint16_t queue_id,
|
||||
* The queue id on the specific port.
|
||||
* @return
|
||||
* The number of used descriptors in the specific queue, or:
|
||||
* (-EINVAL) if *port_id* is invalid
|
||||
* (-EINVAL) if *port_id* or *queue_id* is invalid
|
||||
* (-ENOTSUP) if the device does not support this function
|
||||
*/
|
||||
static inline int
|
||||
rte_eth_rx_queue_count(uint8_t port_id, uint16_t queue_id)
|
||||
{
|
||||
struct rte_eth_dev *dev = &rte_eth_devices[port_id];
|
||||
struct rte_eth_dev *dev;
|
||||
|
||||
RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -EINVAL);
|
||||
dev = &rte_eth_devices[port_id];
|
||||
RTE_FUNC_PTR_OR_ERR_RET(*dev->dev_ops->rx_queue_count, -ENOTSUP);
|
||||
if (queue_id >= dev->data->nb_rx_queues)
|
||||
return -EINVAL;
|
||||
|
||||
return (*dev->dev_ops->rx_queue_count)(dev, queue_id);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user