| 441 | } |
| 442 | |
| 443 | int |
| 444 | eth_dev_tx_queue_config(struct rte_eth_dev *dev, uint16_t nb_queues) |
| 445 | { |
| 446 | uint16_t old_nb_queues = dev->data->nb_tx_queues; |
| 447 | unsigned int i; |
| 448 | |
| 449 | if (dev->data->tx_queues == NULL && nb_queues != 0) { /* first time configuration */ |
| 450 | dev->data->tx_queues = rte_zmalloc("ethdev->tx_queues", |
| 451 | sizeof(dev->data->tx_queues[0]) * |
| 452 | RTE_MAX_QUEUES_PER_PORT, |
| 453 | RTE_CACHE_LINE_SIZE); |
| 454 | if (dev->data->tx_queues == NULL) { |
| 455 | dev->data->nb_tx_queues = 0; |
| 456 | return -(ENOMEM); |
| 457 | } |
| 458 | } else if (dev->data->tx_queues != NULL && nb_queues != 0) { /* re-configure */ |
| 459 | for (i = nb_queues; i < old_nb_queues; i++) |
| 460 | eth_dev_txq_release(dev, i); |
| 461 | |
| 462 | } else if (dev->data->tx_queues != NULL && nb_queues == 0) { |
| 463 | for (i = nb_queues; i < old_nb_queues; i++) |
| 464 | eth_dev_txq_release(dev, i); |
| 465 | |
| 466 | rte_free(dev->data->tx_queues); |
| 467 | dev->data->tx_queues = NULL; |
| 468 | } |
| 469 | dev->data->nb_tx_queues = nb_queues; |
| 470 | return 0; |
| 471 | } |
no test coverage detected