when dedicated queues are enable with bonding mode 4 (mlx5), the application sets the flow, which cannot be set if the device is not started. This fixed the issue by starting the device just before setting the flow. Because device should be started to set the flow. Also it does not effect other driver codes (I have tried on ixgbe).
Bugzilla ID: 759 Signed-off-by: Usman Tanveer <usman.tanv...@emumba.com> --- drivers/net/bonding/rte_eth_bond_pmd.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c b/drivers/net/bonding/rte_eth_bond_pmd.c index fd2d95a751..69cbbe19ff 100644 --- a/drivers/net/bonding/rte_eth_bond_pmd.c +++ b/drivers/net/bonding/rte_eth_bond_pmd.c @@ -1828,7 +1828,18 @@ slave_start(struct rte_eth_dev *bonded_eth_dev, RTE_BOND_LOG(ERR, "bond_ethdev_8023ad_flow_destroy: port=%d, err (%d)", slave_eth_dev->data->port_id, errval); } + } + + /* Start device */ + errval = rte_eth_dev_start(slave_eth_dev->data->port_id); + if (errval != 0) { + RTE_BOND_LOG(ERR, "rte_eth_dev_start: port=%u, err (%d)", + slave_eth_dev->data->port_id, errval); + return -1; + } + if (internals->mode == BONDING_MODE_8023AD && + internals->mode4.dedicated_queues.enabled == 1) { errval = bond_ethdev_8023ad_flow_set(bonded_eth_dev, slave_eth_dev->data->port_id); if (errval != 0) { @@ -1839,14 +1850,6 @@ slave_start(struct rte_eth_dev *bonded_eth_dev, } } - /* Start device */ - errval = rte_eth_dev_start(slave_eth_dev->data->port_id); - if (errval != 0) { - RTE_BOND_LOG(ERR, "rte_eth_dev_start: port=%u, err (%d)", - slave_eth_dev->data->port_id, errval); - return -1; - } - /* If RSS is enabled for bonding, synchronize RETA */ if (bonded_eth_dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) { int i; -- 2.25.1