net/mlx5: fix descriptors number adjustment
The number of descriptors to configure in a Rx/Tx queue is passed to the mlx5_tx/rx_queue_pre_setup() function by value. That means any adjustments of this variable are local and cannot affect the actual value that is used to allocate mbufs in the mlx5_txq/rxq_new() functions. Pass the number as a reference to actually update it. Fixes:6218063b39
("net/mlx5: refactor Rx data path") Fixes:1d88ba1719
("net/mlx5: refactor Tx data path") Cc: stable@dpdk.org Signed-off-by: Alexander Kozyrev <akozyrev@mellanox.com> Acked-by: Matan Azrad <matan@mellanox.com>
This commit is contained in:
parent
a23d96ae59
commit
e891b54a9e
@ -453,19 +453,19 @@ mlx5_rxq_releasable(struct rte_eth_dev *dev, uint16_t idx)
|
|||||||
* 0 on success, a negative errno value otherwise and rte_errno is set.
|
* 0 on success, a negative errno value otherwise and rte_errno is set.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
mlx5_rx_queue_pre_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc)
|
mlx5_rx_queue_pre_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t *desc)
|
||||||
{
|
{
|
||||||
struct mlx5_priv *priv = dev->data->dev_private;
|
struct mlx5_priv *priv = dev->data->dev_private;
|
||||||
|
|
||||||
if (!rte_is_power_of_2(desc)) {
|
if (!rte_is_power_of_2(*desc)) {
|
||||||
desc = 1 << log2above(desc);
|
*desc = 1 << log2above(*desc);
|
||||||
DRV_LOG(WARNING,
|
DRV_LOG(WARNING,
|
||||||
"port %u increased number of descriptors in Rx queue %u"
|
"port %u increased number of descriptors in Rx queue %u"
|
||||||
" to the next power of two (%d)",
|
" to the next power of two (%d)",
|
||||||
dev->data->port_id, idx, desc);
|
dev->data->port_id, idx, *desc);
|
||||||
}
|
}
|
||||||
DRV_LOG(DEBUG, "port %u configuring Rx queue %u for %u descriptors",
|
DRV_LOG(DEBUG, "port %u configuring Rx queue %u for %u descriptors",
|
||||||
dev->data->port_id, idx, desc);
|
dev->data->port_id, idx, *desc);
|
||||||
if (idx >= priv->rxqs_n) {
|
if (idx >= priv->rxqs_n) {
|
||||||
DRV_LOG(ERR, "port %u Rx queue index out of range (%u >= %u)",
|
DRV_LOG(ERR, "port %u Rx queue index out of range (%u >= %u)",
|
||||||
dev->data->port_id, idx, priv->rxqs_n);
|
dev->data->port_id, idx, priv->rxqs_n);
|
||||||
@ -511,7 +511,7 @@ mlx5_rx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
|
|||||||
container_of(rxq, struct mlx5_rxq_ctrl, rxq);
|
container_of(rxq, struct mlx5_rxq_ctrl, rxq);
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
res = mlx5_rx_queue_pre_setup(dev, idx, desc);
|
res = mlx5_rx_queue_pre_setup(dev, idx, &desc);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
rxq_ctrl = mlx5_rxq_new(dev, idx, desc, socket, conf, mp);
|
rxq_ctrl = mlx5_rxq_new(dev, idx, desc, socket, conf, mp);
|
||||||
@ -552,7 +552,7 @@ mlx5_rx_hairpin_queue_setup(struct rte_eth_dev *dev, uint16_t idx,
|
|||||||
container_of(rxq, struct mlx5_rxq_ctrl, rxq);
|
container_of(rxq, struct mlx5_rxq_ctrl, rxq);
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
res = mlx5_rx_queue_pre_setup(dev, idx, desc);
|
res = mlx5_rx_queue_pre_setup(dev, idx, &desc);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
if (hairpin_conf->peer_count != 1 ||
|
if (hairpin_conf->peer_count != 1 ||
|
||||||
|
@ -150,27 +150,27 @@ mlx5_get_tx_port_offloads(struct rte_eth_dev *dev)
|
|||||||
* 0 on success, a negative errno value otherwise and rte_errno is set.
|
* 0 on success, a negative errno value otherwise and rte_errno is set.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
mlx5_tx_queue_pre_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc)
|
mlx5_tx_queue_pre_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t *desc)
|
||||||
{
|
{
|
||||||
struct mlx5_priv *priv = dev->data->dev_private;
|
struct mlx5_priv *priv = dev->data->dev_private;
|
||||||
|
|
||||||
if (desc <= MLX5_TX_COMP_THRESH) {
|
if (*desc <= MLX5_TX_COMP_THRESH) {
|
||||||
DRV_LOG(WARNING,
|
DRV_LOG(WARNING,
|
||||||
"port %u number of descriptors requested for Tx queue"
|
"port %u number of descriptors requested for Tx queue"
|
||||||
" %u must be higher than MLX5_TX_COMP_THRESH, using %u"
|
" %u must be higher than MLX5_TX_COMP_THRESH, using %u"
|
||||||
" instead of %u",
|
" instead of %u", dev->data->port_id, idx,
|
||||||
dev->data->port_id, idx, MLX5_TX_COMP_THRESH + 1, desc);
|
MLX5_TX_COMP_THRESH + 1, *desc);
|
||||||
desc = MLX5_TX_COMP_THRESH + 1;
|
*desc = MLX5_TX_COMP_THRESH + 1;
|
||||||
}
|
}
|
||||||
if (!rte_is_power_of_2(desc)) {
|
if (!rte_is_power_of_2(*desc)) {
|
||||||
desc = 1 << log2above(desc);
|
*desc = 1 << log2above(*desc);
|
||||||
DRV_LOG(WARNING,
|
DRV_LOG(WARNING,
|
||||||
"port %u increased number of descriptors in Tx queue"
|
"port %u increased number of descriptors in Tx queue"
|
||||||
" %u to the next power of two (%d)",
|
" %u to the next power of two (%d)",
|
||||||
dev->data->port_id, idx, desc);
|
dev->data->port_id, idx, *desc);
|
||||||
}
|
}
|
||||||
DRV_LOG(DEBUG, "port %u configuring queue %u for %u descriptors",
|
DRV_LOG(DEBUG, "port %u configuring queue %u for %u descriptors",
|
||||||
dev->data->port_id, idx, desc);
|
dev->data->port_id, idx, *desc);
|
||||||
if (idx >= priv->txqs_n) {
|
if (idx >= priv->txqs_n) {
|
||||||
DRV_LOG(ERR, "port %u Tx queue index out of range (%u >= %u)",
|
DRV_LOG(ERR, "port %u Tx queue index out of range (%u >= %u)",
|
||||||
dev->data->port_id, idx, priv->txqs_n);
|
dev->data->port_id, idx, priv->txqs_n);
|
||||||
@ -213,7 +213,7 @@ mlx5_tx_queue_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t desc,
|
|||||||
container_of(txq, struct mlx5_txq_ctrl, txq);
|
container_of(txq, struct mlx5_txq_ctrl, txq);
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
res = mlx5_tx_queue_pre_setup(dev, idx, desc);
|
res = mlx5_tx_queue_pre_setup(dev, idx, &desc);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
txq_ctrl = mlx5_txq_new(dev, idx, desc, socket, conf);
|
txq_ctrl = mlx5_txq_new(dev, idx, desc, socket, conf);
|
||||||
@ -254,7 +254,7 @@ mlx5_tx_hairpin_queue_setup(struct rte_eth_dev *dev, uint16_t idx,
|
|||||||
container_of(txq, struct mlx5_txq_ctrl, txq);
|
container_of(txq, struct mlx5_txq_ctrl, txq);
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
res = mlx5_tx_queue_pre_setup(dev, idx, desc);
|
res = mlx5_tx_queue_pre_setup(dev, idx, &desc);
|
||||||
if (res)
|
if (res)
|
||||||
return res;
|
return res;
|
||||||
if (hairpin_conf->peer_count != 1 ||
|
if (hairpin_conf->peer_count != 1 ||
|
||||||
|
Loading…
Reference in New Issue
Block a user