[PATCH v2] net/bonding: fix error in bonding mode 4 with dedicated queues enabled

Usman Tanveer usman.tanveer at emumba.com
Thu Sep 29 06:16:12 CEST 2022


We cannot configure the queues when the device is started. So, that
part is still before the device starts. I just moved
bond_ethdev_8023ad_flow_set() after the device start.


On Thu, Sep 29, 2022 at 9:05 AM Usman Tanveer <usman.tanveer at emumba.com> wrote:
>
> 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.tanveer at 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
>


More information about the dev mailing list