<p>Sorry,mq_mode is RTE_ETH_MQ_RX_RSS in rte_eth_conf.</p><p><br/></p><p>call chain: </p><p>rte_eth_bond_create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_start()</p><p><br/></p><p>Consider this call chain, internals->rss_key_len is 0 in bond_ethdev_configure() when we call rte_eth_dev_configure().</p><p>If internals->rss_key_len is 0, internals->rss_key can not be set properly.</p><p>Because memcpy in bond_ethdev_configure() use internals->rss_key_len(it is 0) as copy size, and internals->rss_key will not be set in other functions.</p><p><br/></p><p>---</p><p>e.g.:</p><p>bond_ethdev_configure(struct rte_eth_dev *dev)</p><p>{</p><p><span style="white-space:pre">      </span>const char *name = dev->device->name;</p><p><span style="white-space:pre">       </span>struct bond_dev_private *internals = dev->data->dev_private;</p><p>...</p><p><br/></p><p><span style="white-space:pre">    </span>/*</p><p><span style="white-space:pre">        </span> * If RSS is enabled, fill table with default values and</p><p><span style="white-space:pre">  </span> * set key to the value specified in port RSS configuration.</p><p><span style="white-space:pre">      </span> * Fall back to default RSS key if the key is not specified</p><p><span style="white-space:pre">       </span> */</p><p><span style="white-space:pre">       </span>if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {</p><p><span style="white-space:pre">           </span>struct rte_eth_rss_conf *rss_conf =</p><p><span style="white-space:pre">                       </span>&dev->data->dev_conf.rx_adv_conf.rss_conf;</p><p><br/></p><p><span style="white-space:pre">                </span>if (rss_conf->rss_key != NULL) {</p><p><span style="white-space:pre">                       </span>if (internals->rss_key_len > rss_conf->rss_key_len) {</p><p><span style="white-space:pre">                            </span>RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",</p><p><span style="white-space:pre">                                         </span>rss_conf->rss_key_len);</p><p><span style="white-space:pre">                                </span>return -EINVAL;</p><p><span style="white-space:pre">                   </span>}</p><p><br/></p><p><span style="white-space:pre">                   </span>memcpy(internals->rss_key, rss_conf->rss_key,</p><p><span style="white-space:pre">                       </span>       internals->rss_key_len);</p><p><span style="white-space:pre">            </span>} else {</p><p><span style="white-space:pre">                  </span>if (internals->rss_key_len > sizeof(default_rss_key)) {</p><p><span style="white-space:pre">                             </span>RTE_BOND_LOG(ERR,</p><p><span style="white-space:pre">                         </span>       "There is no suitable default hash key");</p><p><span style="white-space:pre">                            </span>return -EINVAL;</p><p><span style="white-space:pre">                   </span>}</p><p><br/></p><p><span style="white-space:pre">                   </span>memcpy(internals->rss_key, default_rss_key,</p><p><span style="white-space:pre">                    </span>       internals->rss_key_len);</p><p><span style="white-space: pre;">          </span>}</p><br/><p><br/></p><p>----Origin----<br/>From:"Min Hu (Connor)" <humin29@huawei.com><br/>To:"yuwenjun_yewu" <yuwenjun_yewu@cmss.chinamobile.com>,tangchengchang  <tangchengchang@huawei.com>,"ferruh.yigit" <ferruh.yigit@intel.com><br/>Cc: dev  <dev@dpdk.org>,stable  <stable@dpdk.org><br/>Date:2022-01-14 08:59:21<br/>Subject:Re: [PATCH] net/bonding: fix RSS not work for bonding in DPDK21.11<br/><br/>Hi,<br/><br/>在 2022/1/12 15:29, 俞文俊_yewu 写道:<br/>>  From 85c4ffffe32996fc262dd6f69d0ce272ae8e8350 Mon Sep 17 00:00:00 2001<br/>> <br/>> From: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile.com><br/>> <br/>> Date: Wed, 12 Jan 2022 15:01:10 +0800<br/>> <br/>> Subject: [PATCH] net/bonding: fix RSS not work for bonding<br/>> <br/>> <br/>> RSS don't work when upgrade to DPDK21.11.<br/>Cannot get your meaning, Why RSS don't work?<br/>As mq_mode is not RTE_ETH_MQ_RX_RSS in rte_eth_conf, RSS is off.<br/>Please make it clearer, thanks.<br/><br/><br/>> <br/>> <br/>> e.g.:<br/>> <br/>> examples/bond/main.c:<br/>> <br/>> conf:<br/>> <br/>> static struct rte_eth_conf port_conf = {<br/>> <br/>> .rxmode = {<br/>> <br/>> .mq_mode = RTE_ETH_MQ_RX_NONE,<br/>> <br/>> .split_hdr_size = 0,<br/>> <br/>> },<br/>> <br/>> .rx_adv_conf = {<br/>> <br/>> .rss_conf = {<br/>> <br/>> .rss_key = NULL,<br/>> <br/>> .rss_hf = RTE_ETH_RSS_IP,<br/>> <br/>> },<br/>> <br/>> },<br/>> <br/>> .txmode = {<br/>> <br/>> .mq_mode = RTE_ETH_MQ_TX_NONE,<br/>> <br/>> },<br/>> <br/>> };<br/>> <br/>> <br/>> call chain:<br/>> <br/>> rte_eth_bond_create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_start()<br/>> <br/>> <br/>> Signed-off-by: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile.com><br/>> <br/>> ---<br/>> <br/>>   drivers/net/bonding/rte_eth_bond_pmd.c | 5 +++++<br/>> <br/>>   1 file changed, 5 insertions(+)<br/>> <br/>> <br/>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c <br/>> b/drivers/net/bonding/rte_eth_bond_pmd.c<br/>> <br/>> index 84f4900ee5..31bcee15cf 100644<br/>> <br/>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c<br/>> <br/>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c<br/>> <br/>> @@ -3504,6 +3504,11 @@ bond_ethdev_configure(struct rte_eth_dev *dev)<br/>> <br/>> if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {<br/>> <br/>> struct rte_eth_rss_conf *rss_conf =<br/>> <br/>> &dev->data->dev_conf.rx_adv_conf.rss_conf;<br/>> <br/>> +<br/>> <br/>> +if (internals->rss_key_len == 0) {<br/>> <br/>> +internals->rss_key_len = sizeof(default_rss_key);<br/>> <br/>> +}<br/>> <br/>> +<br/>> <br/>> if (rss_conf->rss_key != NULL) {<br/>> <br/>> if (internals->rss_key_len > rss_conf->rss_key_len) {<br/>> <br/>> RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",<br/>> <br/>> -- <br/>> <br/>> 2.32.0.windows.1<br/>> <br/>> <br/><br/>Subject:Re: [PATCH] net/bonding: fix RSS not work for bonding in DPDK21.11<br/><br/>Hi,<br/><br/>在 2022/1/12 15:29, 俞文俊_yewu 写道:<br/>>  From 85c4ffffe32996fc262dd6f69d0ce272ae8e8350 Mon Sep 17 00:00:00 2001<br/>> <br/>> From: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile.com><br/>> <br/>> Date: Wed, 12 Jan 2022 15:01:10 +0800<br/>> <br/>> Subject: [PATCH] net/bonding: fix RSS not work for bonding<br/>> <br/>> <br/>> RSS don't work when upgrade to DPDK21.11.<br/>Cannot get your meaning, Why RSS don't work?<br/>As mq_mode is not RTE_ETH_MQ_RX_RSS in rte_eth_conf, RSS is off.<br/>Please make it clearer, thanks.<br/><br/><br/>> <br/>> <br/>> e.g.:<br/>> <br/>> examples/bond/main.c:<br/>> <br/>> conf:<br/>> <br/>> static struct rte_eth_conf port_conf = {<br/>> <br/>> .rxmode = {<br/>> <br/>> .mq_mode = RTE_ETH_MQ_RX_NONE,<br/>> <br/>> .split_hdr_size = 0,<br/>> <br/>> },<br/>> <br/>> .rx_adv_conf = {<br/>> <br/>> .rss_conf = {<br/>> <br/>> .rss_key = NULL,<br/>> <br/>> .rss_hf = RTE_ETH_RSS_IP,<br/>> <br/>> },<br/>> <br/>> },<br/>> <br/>> .txmode = {<br/>> <br/>> .mq_mode = RTE_ETH_MQ_TX_NONE,<br/>> <br/>> },<br/>> <br/>> };<br/>> <br/>> <br/>> call chain:<br/>> <br/>> rte_eth_bond_create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_start()<br/>> <br/>> <br/>> Signed-off-by: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile.com><br/>> <br/>> ---<br/>> <br/>>   drivers/net/bonding/rte_eth_bond_pmd.c | 5 +++++<br/>> <br/>>   1 file changed, 5 insertions(+)<br/>> <br/>> <br/>> diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c <br/>> b/drivers/net/bonding/rte_eth_bond_pmd.c<br/>> <br/>> index 84f4900ee5..31bcee15cf 100644<br/>> <br/>> --- a/drivers/net/bonding/rte_eth_bond_pmd.c<br/>> <br/>> +++ b/drivers/net/bonding/rte_eth_bond_pmd.c<br/>> <br/>> @@ -3504,6 +3504,11 @@ bond_ethdev_configure(struct rte_eth_dev *dev)<br/>> <br/>> if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {<br/>> <br/>> struct rte_eth_rss_conf *rss_conf =<br/>> <br/>> &dev->data->dev_conf.rx_adv_conf.rss_conf;<br/>> <br/>> +<br/>> <br/>> +if (internals->rss_key_len == 0) {<br/>> <br/>> +internals->rss_key_len = sizeof(default_rss_key);<br/>> <br/>> +}<br/>> <br/>> +<br/>> <br/>> if (rss_conf->rss_key != NULL) {<br/>> <br/>> if (internals->rss_key_len > rss_conf->rss_key_len) {<br/>> <br/>> RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",<br/>> <br/>> -- <br/>> <br/>> 2.32.0.windows.1<br/>> <br/>> <br/><br/></p>