net/bonding: fix RSS with early configure
authorYu Wenjun <yuwenjun@cmss.chinamobile.com>
Tue, 18 Jan 2022 09:18:52 +0000 (17:18 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 26 Jan 2022 15:47:17 +0000 (16:47 +0100)
RSS don't work when bond_ethdev_configure called before
rte_eth_bond_slave_add.

This is because internals->rss_key_len is 0 in bond_ethdev_configure().
If internals->rss_key_len is 0, internals->rss_key can not be set
properly.

e.g.:
doesn't work (examples/bond/main.c):
rte_eth_bond_create()
rte_eth_dev_configure()
rte_eth_bond_slave_add()
rte_eth_dev_start()

works (testpmd):
rte_eth_bond_create()
rte_eth_bond_slave_add()
rte_eth_dev_configure()
rte_eth_dev_start()

Fixing by using 'default_rss_key' when 'internals->rss_key_len' is 0.

Fixes: 6b1a001ec546 ("net/bonding: fix RSS key length")
Cc: stable@dpdk.org
Signed-off-by: Yu Wenjun <yuwenjun@cmss.chinamobile.com>
Acked-by: Min Hu (Connor) <humin29@huawei.com>
drivers/net/bonding/rte_eth_bond_pmd.c

index 9607141..c72fc64 100644 (file)
@@ -3511,6 +3511,11 @@ bond_ethdev_configure(struct rte_eth_dev *dev)
        if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {
                struct rte_eth_rss_conf *rss_conf =
                        &dev->data->dev_conf.rx_adv_conf.rss_conf;
+
+               if (internals->rss_key_len == 0) {
+                       internals->rss_key_len = sizeof(default_rss_key);
+               }
+
                if (rss_conf->rss_key != NULL) {
                        if (internals->rss_key_len > rss_conf->rss_key_len) {
                                RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",