hi

    I am using the dpdk bond of mlx5. There is a segment error in the process of starting the bond port. This is because EAL interrupt thread is processing LSC interrupt when slave_configure is executing the rte_eth_dev_rss_reta_update. rte_eth_dev_rss_reta_update will also use mlx5 flow list.

    I've also found another discussion about this issue.https://mails.dpdk.org/archives/dev/2019-March/125929.html <https://mails.dpdk.org/archives/dev/2019-March/125929.html>

    Do it need a lock to protect the mlx5 flow list?


int
slave_configure(struct rte_eth_dev *bonded_eth_dev,
        struct rte_eth_dev *slave_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 & ETH_MQ_RX_RSS) {
        int i;
        struct bond_dev_private *internals;

        internals = bonded_eth_dev->data->dev_private;

        for (i = 0; i < internals->slave_count; i++) {
            if (internals->slaves[i].port_id == slave_eth_dev->data->port_id) {
                errval = rte_eth_dev_rss_reta_update(
                        slave_eth_dev->data->port_id,
                        &internals->reta_conf[0],
                        internals->slaves[i].reta_size);
                if (errval != 0) {
                    RTE_BOND_LOG(WARNING,
                             "rte_eth_dev_rss_reta_update on slave port %d fails (err %d)."                              " RSS Configuration for bonding may be inconsistent.",
                             slave_eth_dev->data->port_id, errval);
                }
                break;
            }
        }
    }


Reply via email to