From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 3DDD5A00C5; Fri, 14 Jan 2022 19:51:55 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 10F5C40C35; Fri, 14 Jan 2022 19:51:55 +0100 (CET) Received: from cmccmta2.chinamobile.com (cmccmta2.chinamobile.com [221.176.66.80]) by mails.dpdk.org (Postfix) with ESMTP id 044C240C35; Fri, 14 Jan 2022 12:14:51 +0100 (CET) Received: from spf.mail.chinamobile.com (unknown[172.16.121.7]) by rmmx-syy-dmz-app08-12008 (RichMail) with SMTP id 2ee861e15b26dc4-cc7fe; Fri, 14 Jan 2022 19:14:48 +0800 (CST) X-RM-TRANSID: 2ee861e15b26dc4-cc7fe X-RM-SPAM-FLAG: 00000000 Received: from yuwenjun_yewu@cmss.chinamobile.com ( [10.42.68.12] ) by ajax-webmail-syy-appsvr04-11004 (Richmail) with HTTP; Fri, 14 Jan 2022 19:14:48 +0800 (CST) Date: Fri, 14 Jan 2022 19:14:48 +0800 (CST) From: =?utf-8?Q?=E4=BF=9E=E6=96=87=E4=BF=8A=5Fyewu?= To: "Min Hu (Connor)" , tangchengchang , "ferruh.yigit" Cc: dev , stable Message-ID: <2afc61e15071ff5-0000a.Richmail.00004081101678086847@cmss.chinamobile.com> References: <2afa61de7b9e301-0000a.Richmail.00009021307638582857@cmss.chinamobile.com> <2b7a133a-3111-e814-d92c-d2252f9bd5e3@huawei.com> <2afc61e1200b486-00003.Richmail.00008071009648883857@cmss.chinamobile.com>, <75052e5e-c6c4-0f6f-330d-48edb645131a@huawei.com> Subject: Re:Re: [PATCH] net/bonding: fix RSS not work for bonding in DPDK21.11 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----=_Part_32848_1501788912.1642158888255" X-Priority: 3 X-RM-TRANSID: 2afc61e15071ff5-0000a X-RM-OA-ENC-TYPE: 0 X-RM-FontColor: 0 X-CLIENT-INFO: X-TIMING=0&X-MASSSENT=0&X-SENSITIVE=0 X-Mailer: Richmail_Webapp(V2.3.25) X-Mailman-Approved-At: Fri, 14 Jan 2022 19:51:53 +0100 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org ------=_Part_32848_1501788912.1642158888255 Content-Type: text/plain;charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, I tested Mellanox CX5 and Intel E810. The key is the call chain:=20 1.rte_eth_bond_create()=20 2.rte_eth_dev_configure(): bond_ethdev_configure() //internals->rss_key_len= =3D 0, internals->rss_key can not be set properly 3.rte_eth_bond_slave_add(): __eth_bond_slave_add_lock_free()->eth_bond_slav= e_inherit_dev_info_rx_first() // internals->rss_key_len will be set, but in= ternals->rss_key is bad 4.rte_eth_dev_start() examples/bond/main.c(bond_port_init()) use this call chain,too many apps re= fer to this example. thanks ----=E9=82=AE=E4=BB=B6=E5=8E=9F=E6=96=87----From=EF=BC=9A"Min Hu (Connor)" = To=EF=BC=9A"=E4=BF=9E=E6=96=87=E4=BF=8A_yewu" ,tangchengchang ,"fe= rruh.yigit" Cc: dev ,stable Date=EF=BC=9A2022-01-14 16:50:54Subject=EF=BC=9ARe: [PATCH] net/b= onding: fix RSS not work for bonding in DPDK21.11Hi,=E5=9C=A8 2022/1/14 15:= 11, =E4=BF=9E=E6=96=87=E4=BF=8A_yewu =E5=86=99=E9=81=93:> Sorry=EF=BC=8Cmq_= mode is RTE_ETH_MQ_RX_RSS in rte_eth_conf.> > > call chain:> > rte_eth_bond= _create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_s= tart()> > > Consider this call chain, internals->rss_key_len is 0 in > bond= _ethdev_configure() when we call rte_eth_dev_configure().> > If internals->= rss_key_len is 0, internals->rss_key can not be set properly.Have you done = any test? Is it true that it doesn39t work for RSS? which NIC you choose ?A= s I know, internals->rss_key_len will inherit dev info from slave, justsee = "eth_bond_slave_inherit_dev_info_rx_first". If slave port reporthash_key_si= ze, internals->rss_key_len could not be zero.> > Because memcpy in bond_eth= dev_configure() use internals->rss_key_len(it > is 0) as copy size, and int= ernals->rss_key will not be set in other > functions.> > > ---> > e.g.:> > = bond_ethdev_configure(struct rte_eth_dev *dev)> > {> > const char *name =3D= dev->device->name> > struct bond_dev_private *internals =3D dev->data->dev= _private> > ...> > > /*> > * If RSS is enabled, fill table with default val= ues and> > * set key to the value specified in port RSS configuration.> > *= Fall back to default RSS key if the key is not specified> > */> > if (dev-= >data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {> > struct rte_eth_rss= _conf *rss_conf =3D> > &dev->data->dev_conf.rx_adv_conf.rss_conf> > > if (r= ss_conf->rss_key !=3D NULL) {> > if (internals->rss_key_len > rss_conf->rss= _key_len) {> > RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",> > rss_conf-= >rss_key_len)> > return -EINVAL> > }> > > memcpy(internals->rss_key, rss_co= nf->rss_key,> > internals->rss_key_len)> > } else {> > if (internal= s->rss_key_len > sizeof(default_rss_key)) {> > RTE_BOND_LOG(ERR,> > = "There is no suitable default hash key")> > return -EINVAL> > }> > > memcp= y(internals->rss_key, default_rss_key,> > internals->rss_key_len)> = > }> > > > ----Origin----> From=EF=BC=9A"Min Hu (Connor)" > To=EF=BC=9A"yuwenjun_yewu" ,tangch= engchang ,"ferruh.yigit" > Cc: dev ,stable > Date=EF=BC=9A2022-01= -14 08:59:21> Subject=EF=BC=9ARe: [PATCH] net/bonding: fix RSS not work for= bonding in DPDK21.11> > Hi,> > =E5=9C=A8 2022/1/12 15:29, =E4=BF=9E=E6=96= =87=E4=BF=8A_yewu =E5=86=99=E9=81=93:> > From 85c4ffffe32996fc262dd6f69d0= ce272ae8e8350 Mon Sep 17 00:00:00 2001> >> > From: Yu Wenjun > >> > Date: Wed, 12 Jan 2022 15:01:10 +0800> >>= > Subject: [PATCH] net/bonding: fix RSS not work for bonding> >> >> > = RSS don39t work when upgrade to DPDK21.11.> Cannot get your meaning, Why RS= S don39t work?> As mq_mode is not RTE_ETH_MQ_RX_RSS in rte_eth_conf, RSS is= off.> Please make it clearer, thanks.> > > >> >> > e.g.:> >> > exampl= es/bond/main.c:> >> > conf:> >> > static struct rte_eth_conf port_conf = =3D {> >> > .rxmode =3D {> >> > .mq_mode =3D RTE_ETH_MQ_RX_NONE,> >> = > .split_hdr_size =3D 0,> >> > },> >> > .rx_adv_conf =3D {> >> > .rss= _conf =3D {> >> > .rss_key =3D NULL,> >> > .rss_hf =3D RTE_ETH_RSS_IP,>= >> > },> >> > },> >> > .txmode =3D {> >> > .mq_mode =3D RTE_ETH_MQ= _TX_NONE,> >> > },> >> > }> >> >> > call chain:> >> > rte_eth_bond= _create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_s= tart()> >> >> > Signed-off-by: Yu Wenjun > >> > ---> >> > drivers/net/bonding/rte_eth_bond_pmd.c | 5 ++++= +> >> > 1 file changed, 5 insertions(+)> >> >> > diff --git a/driver= s/net/bonding/rte_eth_bond_pmd.c> > b/drivers/net/bonding/rte_eth_bond_pmd= .c> >> > index 84f4900ee5..31bcee15cf 100644> >> > --- a/drivers/net/bo= nding/rte_eth_bond_pmd.c> >> > +++ b/drivers/net/bonding/rte_eth_bond_pmd= .c> >> > @@ -3504,6 +3504,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 =3D> >> > &dev->data->dev_conf= .rx_adv_conf.rss_conf> >> > +> >> > +if (internals->rss_key_len =3D=3D = 0) {> >> > +internals->rss_key_len =3D sizeof(default_rss_key)> >> > +}= > >> > +> >> > if (rss_conf->rss_key !=3D NULL) {> >> > if (internals= ->rss_key_len > rss_conf->rss_key_len) {> >> > RTE_BOND_LOG(ERR, "Invalid= rss key length(%u)",> >> > --> >> > 2.32.0.windows.1> >> >> > Subjec= t=EF=BC=9ARe: [PATCH] net/bonding: fix RSS not work for bonding in DPDK21.1= 1> > Hi,> > =E5=9C=A8 2022/1/12 15:29, =E4=BF=9E=E6=96=87=E4=BF=8A_yewu =E5= =86=99=E9=81=93:> > From 85c4ffffe32996fc262dd6f69d0ce272ae8e8350 Mon Sep= 17 00:00:00 2001> >> > From: Yu Wenjun > >> > Date: Wed, 12 Jan 2022 15:01:10 +0800> >> > Subject: [PATCH] = net/bonding: fix RSS not work for bonding> >> >> > RSS don39t work when = upgrade to DPDK21.11.> Cannot get your meaning, Why RSS don39t work?> As mq= _mode is not RTE_ETH_MQ_RX_RSS in rte_eth_conf, RSS is off.> Please make it= clearer, thanks.> > > >> >> > e.g.:> >> > examples/bond/main.c:> >> = > conf:> >> > static struct rte_eth_conf port_conf =3D {> >> > .rxmode= =3D {> >> > .mq_mode =3D RTE_ETH_MQ_RX_NONE,> >> > .split_hdr_size =3D= 0,> >> > },> >> > .rx_adv_conf =3D {> >> > .rss_conf =3D {> >> > .= rss_key =3D NULL,> >> > .rss_hf =3D RTE_ETH_RSS_IP,> >> > },> >> > },= > >> > .txmode =3D {> >> > .mq_mode =3D RTE_ETH_MQ_TX_NONE,> >> > },>= >> > }> >> >> > call chain:> >> > rte_eth_bond_create()->rte_eth_de= v_configure()->rte_eth_bond_slave_add()->rte_eth_dev_start()> >> >> > Si= gned-off-by: Yu Wenjun > >> > ---> >= > > drivers/net/bonding/rte_eth_bond_pmd.c | 5 +++++> >> > 1 file ch= anged, 5 insertions(+)> >> >> > diff --git a/drivers/net/bonding/rte_eth= _bond_pmd.c> > b/drivers/net/bonding/rte_eth_bond_pmd.c> >> > index 84f4= 900ee5..31bcee15cf 100644> >> > --- a/drivers/net/bonding/rte_eth_bond_pm= d.c> >> > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c> >> > @@ -3504,6= +3504,11 @@ bond_ethdev_configure(struct rte_eth_dev *dev)> >> > if (dev= ->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {> >> > struct rte_e= th_rss_conf *rss_conf =3D> >> > &dev->data->dev_conf.rx_adv_conf.rss_conf= > >> > +> >> > +if (internals->rss_key_len =3D=3D 0) {> >> > +interna= ls->rss_key_len =3D sizeof(default_rss_key)> >> > +}> >> > +> >> > if= (rss_conf->rss_key !=3D NULL) {> >> > if (internals->rss_key_len > rss_c= onf->rss_key_len) {> >> > RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",= > >> > --> >> > 2.32.0.windows.1> >> >> Subject=EF=BC=9ARe: [PATCH] n= et/bonding: fix RSS not work for bonding in DPDK21.11Hi,=E5=9C=A8 2022/1/14= 15:11, =E4=BF=9E=E6=96=87=E4=BF=8A_yewu =E5=86=99=E9=81=93:> Sorry=EF=BC= =8Cmq_mode is RTE_ETH_MQ_RX_RSS in rte_eth_conf.> > > call chain:> > rte_et= h_bond_create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth= _dev_start()> > > Consider this call chain, internals->rss_key_len is 0 in = > bond_ethdev_configure() when we call rte_eth_dev_configure().> > If inter= nals->rss_key_len is 0, internals->rss_key can not be set properly.Have you= done any test? Is it true that it doesn39t work for RSS? which NIC you cho= ose ?As I know, internals->rss_key_len will inherit dev info from slave, ju= stsee "eth_bond_slave_inherit_dev_info_rx_first". If slave port reporthash_= key_size, internals->rss_key_len could not be zero.> > Because memcpy in bo= nd_ethdev_configure() use internals->rss_key_len(it > is 0) as copy size, a= nd internals->rss_key will not be set in other > functions.> > > ---> > e.g= .:> > bond_ethdev_configure(struct rte_eth_dev *dev)> > {> > const char *na= me =3D dev->device->name> > struct bond_dev_private *internals =3D dev->dat= a->dev_private> > ...> > > /*> > * If RSS is enabled, fill table with defau= lt values and> > * set key to the value specified in port RSS configuration= .> > * Fall back to default RSS key if the key is not specified> > */> > if= (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {> > struct rte_e= th_rss_conf *rss_conf =3D> > &dev->data->dev_conf.rx_adv_conf.rss_conf> > >= if (rss_conf->rss_key !=3D NULL) {> > if (internals->rss_key_len > rss_con= f->rss_key_len) {> > RTE_BOND_LOG(ERR, "Invalid rss key length(%u)",> > rss= _conf->rss_key_len)> > return -EINVAL> > }> > > memcpy(internals->rss_key, = rss_conf->rss_key,> > internals->rss_key_len)> > } else {> > if (in= ternals->rss_key_len > sizeof(default_rss_key)) {> > RTE_BOND_LOG(ERR,> > = "There is no suitable default hash key")> > return -EINVAL> > }> > >= memcpy(internals->rss_key, default_rss_key,> > internals->rss_key_= len)> > }> > > > ----Origin----> From=EF=BC=9A"Min Hu (Connor)" > To=EF=BC=9A"yuwenjun_yewu" ,= tangchengchang ,"ferruh.yigit" > Cc: dev ,stable > Date=EF=BC=9A2= 022-01-14 08:59:21> Subject=EF=BC=9ARe: [PATCH] net/bonding: fix RSS not wo= rk for bonding in DPDK21.11> > Hi,> > =E5=9C=A8 2022/1/12 15:29, =E4=BF=9E= =E6=96=87=E4=BF=8A_yewu =E5=86=99=E9=81=93:> > From 85c4ffffe32996fc262dd= 6f69d0ce272ae8e8350 Mon Sep 17 00:00:00 2001> >> > From: Yu Wenjun > >> > Date: Wed, 12 Jan 2022 15:01:10 +080= 0> >> > Subject: [PATCH] net/bonding: fix RSS not work for bonding> >> = >> > RSS don39t work when upgrade to DPDK21.11.> Cannot get your meaning, = Why RSS don39t work?> As mq_mode is not RTE_ETH_MQ_RX_RSS in rte_eth_conf, = RSS is off.> Please make it clearer, thanks.> > > >> >> > e.g.:> >> > = examples/bond/main.c:> >> > conf:> >> > static struct rte_eth_conf port= _conf =3D {> >> > .rxmode =3D {> >> > .mq_mode =3D RTE_ETH_MQ_RX_NONE,>= >> > .split_hdr_size =3D 0,> >> > },> >> > .rx_adv_conf =3D {> >> = > .rss_conf =3D {> >> > .rss_key =3D NULL,> >> > .rss_hf =3D RTE_ETH_RS= S_IP,> >> > },> >> > },> >> > .txmode =3D {> >> > .mq_mode =3D RTE_= ETH_MQ_TX_NONE,> >> > },> >> > }> >> >> > call chain:> >> > rte_et= h_bond_create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth= _dev_start()> >> >> > Signed-off-by: Yu Wenjun > >> > ---> >> > drivers/net/bonding/rte_eth_bond_pmd.c | = 5 +++++> >> > 1 file changed, 5 insertions(+)> >> >> > diff --git a/= drivers/net/bonding/rte_eth_bond_pmd.c> > b/drivers/net/bonding/rte_eth_bo= nd_pmd.c> >> > index 84f4900ee5..31bcee15cf 100644> >> > --- a/drivers/= net/bonding/rte_eth_bond_pmd.c> >> > +++ b/drivers/net/bonding/rte_eth_bo= nd_pmd.c> >> > @@ -3504,6 +3504,11 @@ bond_ethdev_configure(struct rte_et= h_dev *dev)> >> > if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_= RSS) {> >> > struct rte_eth_rss_conf *rss_conf =3D> >> > &dev->data->de= v_conf.rx_adv_conf.rss_conf> >> > +> >> > +if (internals->rss_key_len = =3D=3D 0) {> >> > +internals->rss_key_len =3D sizeof(default_rss_key)> >= > > +}> >> > +> >> > if (rss_conf->rss_key !=3D NULL) {> >> > if (in= ternals->rss_key_len > rss_conf->rss_key_len) {> >> > RTE_BOND_LOG(ERR, "= Invalid rss key length(%u)",> >> > --> >> > 2.32.0.windows.1> >> >> >= Subject=EF=BC=9ARe: [PATCH] net/bonding: fix RSS not work for bonding in D= PDK21.11> > Hi,> > =E5=9C=A8 2022/1/12 15:29, =E4=BF=9E=E6=96=87=E4=BF=8A_y= ewu =E5=86=99=E9=81=93:> > From 85c4ffffe32996fc262dd6f69d0ce272ae8e8350 = Mon Sep 17 00:00:00 2001> >> > From: Yu Wenjun > >> > Date: Wed, 12 Jan 2022 15:01:10 +0800> >> > Subject: [= PATCH] net/bonding: fix RSS not work for bonding> >> >> > RSS don39t wor= k when upgrade to DPDK21.11.> Cannot get your meaning, Why RSS don39t work?= > As mq_mode is not RTE_ETH_MQ_RX_RSS in rte_eth_conf, RSS is off.> Please = make it clearer, thanks.> > > >> >> > e.g.:> >> > examples/bond/main.c= :> >> > conf:> >> > static struct rte_eth_conf port_conf =3D {> >> > = .rxmode =3D {> >> > .mq_mode =3D RTE_ETH_MQ_RX_NONE,> >> > .split_hdr_s= ize =3D 0,> >> > },> >> > .rx_adv_conf =3D {> >> > .rss_conf =3D {> = >> > .rss_key =3D NULL,> >> > .rss_hf =3D RTE_ETH_RSS_IP,> >> > },> >= > > },> >> > .txmode =3D {> >> > .mq_mode =3D RTE_ETH_MQ_TX_NONE,> >>= > },> >> > }> >> >> > call chain:> >> > rte_eth_bond_create()->rte= _eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_start()> >> >= > > Signed-off-by: Yu Wenjun > >> > = ---> >> > drivers/net/bonding/rte_eth_bond_pmd.c | 5 +++++> >> > 1 = file changed, 5 insertions(+)> >> >> > diff --git a/drivers/net/bonding/= rte_eth_bond_pmd.c> > b/drivers/net/bonding/rte_eth_bond_pmd.c> >> > ind= ex 84f4900ee5..31bcee15cf 100644> >> > --- a/drivers/net/bonding/rte_eth_= bond_pmd.c> >> > +++ b/drivers/net/bonding/rte_eth_bond_pmd.c> >> > @@ = -3504,6 +3504,11 @@ bond_ethdev_configure(struct rte_eth_dev *dev)> >> > = if (dev->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {> >> > struc= t rte_eth_rss_conf *rss_conf =3D> >> > &dev->data->dev_conf.rx_adv_conf.r= ss_conf> >> > +> >> > +if (internals->rss_key_len =3D=3D 0) {> >> > += internals->rss_key_len =3D sizeof(default_rss_key)> >> > +}> >> > +> >= > > if (rss_conf->rss_key !=3D NULL) {> >> > if (internals->rss_key_len = > rss_conf->rss_key_len) {> >> > RTE_BOND_LOG(ERR, "Invalid rss key lengt= h(%u)",> >> > --> >> > 2.32.0.windows.1> >> >>=20 ------=_Part_32848_1501788912.1642158888255 Content-Type: text/html;charset=UTF-8 Content-Transfer-Encoding: quoted-printable


Hi, I tested Mellanox CX5 and Intel E810.


The key= is the call chain: 

1.rte_eth_bond_create() 

2.rte_e= th_dev_configure(): bond_ethdev_configure() //internals->rs= s_key_len =3D 0, internals->rss_key can not be set properly

3.rte_eth_bond_slave_add(): __eth_bond_slave_add_lock_free()->et= h_bond_slave_inherit_dev_info_rx_first() // internals->rss_key_l= en will be set, but internals->rss_key is bad

4.rte_eth_d= ev_start()


examples/bond/main.c(bond_port_init()) use thi= s call chain,too many apps refer to this example.


thanks<= /p>

----=E9=82=AE=E4=BB=B6=E5=8E=9F=E6=96=87----
From=EF=BC=9A"M= in Hu (Connor)" <humin29@huawei.com>
To=EF=BC= =9A"=E4=BF=9E=E6=96=87=E4=BF=8A_yewu" <yuwenjun_yewu@cmss= .chinamobile.com>,tangchengchang  <tangchengchang@huawei.co= m>,"ferruh.yigit" <ferruh.yigit@intel.com>
Cc:&= nbsp;dev  <dev@dpdk.org>,stable  <stable@dpdk.= org>
Date=EF=BC=9A2022-01-14 16:50:54
Subject=EF=BC=9ARe:&n= bsp;[PATCH] net/bonding: fix RSS not work for=  bonding in DPDK21.11

Hi,

=E5=9C=A8 2= 022/1/14 15:11, =E4=BF=9E=E6=96=87=E4=BF=8A_yewu =E5=86=99= =E9=81=93:
> Sorry=EF=BC=8Cmq_mode is RTE_ETH_MQ_RX_R= SS in rte_eth_conf.


> c= all chain:

> rte_eth_bond_create()->rte_= eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_start()

> Consider this call = ;chain, internals->rss_key_len is 0 in 
>= ; bond_ethdev_configure() when we call rte_eth_dev= _configure().

> If internals->rss_key_le= n is 0, internals->rss_key can not be = ;set properly.
Have you done any test? Is=  it true that it doesn't work for&nb= sp;RSS? which 
NIC you choose ?

As&nb= sp;I know, internals->rss_key_len will inherit = dev info from slave, just
see "eth_bond_s= lave_inherit_dev_info_rx_first". If slave port rep= ort
hash_key_size, internals->rss_key_len could not&n= bsp;be zero.


> Because memcpy&nbs= p;in bond_ethdev_configure() use internals->rss_key_len(i= t 
> is 0) as copy size, and = ;internals->rss_key will not be set in oth= er 
> functions.


>&nb= sp;---

> e.g.:

> bond= _ethdev_configure(struct rte_eth_dev *dev)

>= ; {

> const char *name =3D&n= bsp;dev->device->name;

> struct bond_= dev_private *internals =3D dev->data->dev_private;

> ...


> /= *

> * If RSS is enabled,&nbs= p;fill table with default values and
> = ;
> * set key to the value specif= ied in port RSS configuration.

>&= nbsp;* Fall back to default RSS key if&n= bsp;the key is not specified

>&nb= sp;*/

> if (dev->data->dev_conf.rxmod= e.mq_mode & RTE_ETH_MQ_RX_RSS) {

>=  struct rte_eth_rss_conf *rss_conf =3D
> &dev->data->dev_conf.rx_adv_conf.rss_conf;
>&= nbsp;

> if (rss_conf->rss_key !=3D&= nbsp;NULL) {

> if (internals->rss_k= ey_len > rss_conf->rss_key_len) {

&= gt; RTE_BOND_LOG(ERR, "Invalid rss key length= (%u)",

> rss_conf->rss_key_len);
>= ; 
> return -EINVAL;

> }

> memcpy(internals->rss_key,&nb= sp;rss_conf->rss_key,

>    &nb= sp;    internals->rss_key_len);

&= gt; } else {

> if (internals= ->rss_key_len > sizeof(default_rss_key)) {
>&nb= sp;
> RTE_BOND_LOG(ERR,

>  &nbs= p;      "There is no suit= able default hash key");

> r= eturn -EINVAL;

> }

>&= nbsp;
> memcpy(internals->rss_key, default_rss_key,

>         i= nternals->rss_key_len);

> }


> ----Origin----
> From= =EF=BC=9A"Min Hu (Connor)" <humin29@huawei.com&= gt;
> To=EF=BC=9A"yuwenjun_yewu" <yuwenjun_ye= wu@cmss.chinamobile.com>,tangchengchang  <tangchengchang@hu= awei.com>,"ferruh.yigit" <ferruh.yigit@intel.com>> Cc: dev  <dev@dpdk.org>,stable  = ;<stable@dpdk.org>
> Date=EF=BC=9A2022-01-14 08:59:2= 1
> Subject=EF=BC=9ARe: [PATCH] net/bonding: fix=  RSS not work for bonding in DPDK21.11
> Hi,

> =E5=9C=A8 = ;2022/1/12 15:29, =E4=BF=9E=E6=96=87=E4=BF=8A_yewu =E5=86=99= =E9=81=93:
>  >  From 85c4ffffe32996fc26= 2dd6f69d0ce272ae8e8350 Mon Sep 17 00:00:00 2001>  >
>  > From: Yu Wen= jun <yuwenjun_yewu@cmss.chinamobile.com>
>  >= ;
>  > Date: Wed, 12 Jan 2022&= nbsp;15:01:10 +0800
>  >
>  >&= nbsp;Subject: [PATCH] net/bonding: fix RSS not&nbs= p;work for bonding
>  >
>  &= gt;
>  > RSS don't work when&nb= sp;upgrade to DPDK21.11.
> Cannot get your&= nbsp;meaning, Why RSS don't work?
> As&= nbsp;mq_mode is not RTE_ETH_MQ_RX_RSS in rte_eth_c= onf, RSS is off.
> Please make it = ;clearer, thanks.


>  &g= t;
>  >
>  > e.g.:
>&nb= sp; >
>  > examples/bond/main.c:
>&= nbsp; >
>  > conf:
>  >= ;
>  > static struct rte_eth_conf p= ort_conf =3D {
>  >
>  >&= nbsp;.rxmode =3D {
>  >
>  &= gt; .mq_mode =3D RTE_ETH_MQ_RX_NONE,
>  >= ;
>  > .split_hdr_size =3D 0,
>&n= bsp; >
>  > },
>  >>  > .rx_adv_conf =3D {
> &nbs= p;>
>  > .rss_conf =3D {
>&nbs= p; >
>  > .rss_key =3D NULL,
>  >
>  > .rss_hf =3D R= TE_ETH_RSS_IP,
>  >
>  > },>  >
>  > },
>  = ;>
>  > .txmode =3D {
> &= nbsp;>
>  > .mq_mode =3D RTE_ETH_MQ_T= X_NONE,
>  >
>  > },
>&= nbsp; >
>  > };
>  >>  >
>  > call chain:
= >  >
>  > rte_eth_bond_create()-&g= t;rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_eth_dev_star= t()
>  >
>  >
>  &= gt; Signed-off-by: Yu Wenjun <yuwenjun_yewu@cmss.chi= namobile.com>
>  >
>  > ---=
>  >
>  >   drivers= /net/bonding/rte_eth_bond_pmd.c | 5 +++++
> &nbs= p;>
>  >   1 file changed,&= nbsp;5 insertions(+)
>  >
>  >=
>  > diff --git a/drivers/net/bonding/r= te_eth_bond_pmd.c
>  > b/drivers/net/bonding/rte_e= th_bond_pmd.c
>  >
>  > index&= nbsp;84f4900ee5..31bcee15cf 100644
>  >
>&n= bsp; > --- a/drivers/net/bonding/rte_eth_bond_pmd.c
&= gt;  >
>  > +++ b/drivers/net/bo= nding/rte_eth_bond_pmd.c
>  >
>  >&= nbsp;@@ -3504,6 +3504,11 @@ bond_ethdev_configure(struc= t rte_eth_dev *dev)
>  >
>  = > if (dev->data->dev_conf.rxmode.mq_mode & = ;RTE_ETH_MQ_RX_RSS) {
>  >
>  >= ; struct rte_eth_rss_conf *rss_conf =3D
> &= nbsp;>
>  > &dev->data->dev_conf.rx_a= dv_conf.rss_conf;
>  >
>  > +<= br/>>  >
>  > +if (internals-= >rss_key_len =3D=3D 0) {
>  >
>= ;  > +internals->rss_key_len =3D sizeof(defa= ult_rss_key);
>  >
>  > +}
>  >
>  > +
>  &= gt;
>  > if (rss_conf->rss_key !=3D&n= bsp;NULL) {
>  >
>  > if&= nbsp;(internals->rss_key_len > rss_conf->rss_key_len)&nb= sp;{
>  >
>  > RTE_BOND_LOG(ER= R, "Invalid rss key length(%u)",
>&nbs= p; >
>  > --
>  >
= >  > 2.32.0.windows.1
>  >
>= ;  >

> Subject=EF=BC=9ARe: [PA= TCH] net/bonding: fix RSS not work for b= onding in DPDK21.11

> Hi,
>&nbs= p;
> =E5=9C=A8 2022/1/12 15:29, =E4=BF=9E=E6=96= =87=E4=BF=8A_yewu =E5=86=99=E9=81=93:
>  > &n= bsp;From 85c4ffffe32996fc262dd6f69d0ce272ae8e8350 Mon Sep&nb= sp;17 00:00:00 2001
>  >
>  = > From: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile= .com>
>  >
>  > Date: = Wed, 12 Jan 2022 15:01:10 +0800
> &nbs= p;>
>  > Subject: [PATCH] net/bonding= : fix RSS not work for bonding
> =  >
>  >
>  > RSS = don't work when upgrade to DPDK21.11.
>=  Cannot get your meaning, Why RSS don= 9;t work?
> As mq_mode is not RTE_ETH_= MQ_RX_RSS in rte_eth_conf, RSS is off.
>&nb= sp;Please make it clearer, thanks.

&= gt; 
>  >
>  >
> &= nbsp;> e.g.:
>  >
>  > = ;examples/bond/main.c:
>  >
>  >&nb= sp;conf:
>  >
>  > static = ;struct rte_eth_conf port_conf =3D {
> &nbs= p;>
>  > .rxmode =3D {
> =  >
>  > .mq_mode =3D RTE_ETH_MQ_= RX_NONE,
>  >
>  > .split_hdr_= size =3D 0,
>  >
>  >&nbs= p;},
>  >
>  > .rx_adv_conf&nb= sp;=3D {
>  >
>  > .rss_c= onf =3D {
>  >
>  > = .rss_key =3D NULL,
>  >
>  &= gt; .rss_hf =3D RTE_ETH_RSS_IP,
>  >
>  > },
>  >
>  = > },
>  >
>  > .txmode=  =3D {
>  >
>  > .mq= _mode =3D RTE_ETH_MQ_TX_NONE,
>  >
>&n= bsp; > },
>  >
>  >&nb= sp;};
>  >
>  >
>  = ;> call chain:
>  >
>  &g= t; rte_eth_bond_create()->rte_eth_dev_configure()->rte_eth_bond_= slave_add()->rte_eth_dev_start()
>  >
> =  >
>  > Signed-off-by: Yu Wenjun=  <yuwenjun_yewu@cmss.chinamobile.com>
>  >>  > ---
>  >
> &nb= sp;>   drivers/net/bonding/rte_eth_bond_pmd.c | = ;5 +++++
>  >
>  >  =  1 file changed, 5 insertions(+)
> &nb= sp;>
>  >
>  > diff --= git a/drivers/net/bonding/rte_eth_bond_pmd.c
>  >&= nbsp;b/drivers/net/bonding/rte_eth_bond_pmd.c
>  >
= >  > index 84f4900ee5..31bcee15cf 100644
>  >
>  > --- a/drivers/net/= bonding/rte_eth_bond_pmd.c
>  >
>  >= ; +++ b/drivers/net/bonding/rte_eth_bond_pmd.c
> &nbs= p;>
>  > @@ -3504,6 +3504,11 @@&= nbsp;bond_ethdev_configure(struct rte_eth_dev *dev)
> = ; >
>  > if (dev->data->dev_con= f.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {
> &n= bsp;>
>  > struct rte_eth_rss_conf *r= ss_conf =3D
>  >
>  > &am= p;dev->data->dev_conf.rx_adv_conf.rss_conf;
>  ><= br/>>  > +
>  >
> &nbs= p;> +if (internals->rss_key_len =3D=3D 0) {<= br/>>  >
>  > +internals->rss_k= ey_len =3D sizeof(default_rss_key);
>  >
= >  > +}
>  >
>  &= gt; +
>  >
>  > if (= rss_conf->rss_key !=3D NULL) {
>  >>  > if (internals->rss_key_len >&n= bsp;rss_conf->rss_key_len) {
>  >
> = ; > RTE_BOND_LOG(ERR, "Invalid rss key&nbs= p;length(%u)",
>  >
>  > = --
>  >
>  > 2.32.0.windows.1<= br/>>  >
>  >


S= ubject=EF=BC=9ARe: [PATCH] net/bonding: fix RSS no= t work for bonding in DPDK21.11

Hi,
<= br/>=E5=9C=A8 2022/1/14 15:11, =E4=BF=9E=E6=96=87=E4=BF=8A_y= ewu =E5=86=99=E9=81=93:
> Sorry=EF=BC=8Cmq_mode is&nb= sp;RTE_ETH_MQ_RX_RSS in rte_eth_conf.

>&nbs= p;
> call chain:

> rte_eth_bond= _create()->rte_eth_dev_configure()->rte_eth_bond_slave_add()->rte_= eth_dev_start()


> Consider t= his call chain, internals->rss_key_len is 0&nbs= p;in 
> bond_ethdev_configure() when we cal= l rte_eth_dev_configure().

> If intern= als->rss_key_len is 0, internals->rss_key can&nbs= p;not be set properly.
Have you done any&= nbsp;test? Is it true that it doesn't&nbs= p;work for RSS? which 
NIC you choose&nbs= p;?

As I know, internals->rss_key_len will&= nbsp;inherit dev info from slave, just
see&nbs= p;"eth_bond_slave_inherit_dev_info_rx_first". If slave&= nbsp;port report
hash_key_size, internals->rss_key_len&nbs= p;could not be zero.


> Becau= se memcpy in bond_ethdev_configure() use internals= ->rss_key_len(it 
> is 0) as copy s= ize, and internals->rss_key will not be se= t in other 
> functions.

>=  
> ---

> e.g.:
> <= br/>> bond_ethdev_configure(struct rte_eth_dev *dev)
= > 
> {

> const char&nbs= p;*name =3D dev->device->name;

> = ;struct bond_dev_private *internals =3D dev->data-&g= t;dev_private;

> ...

>&nbs= p;
> /*

> * If RSS is=  enabled, fill table with default values = ;and

> * set key to the = ;value specified in port RSS configuration.
&g= t; 
> * Fall back to default RSS&= nbsp;key if the key is not specified
>=  
> */

> if (dev->data-= >dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS) {
&= gt; 
> struct rte_eth_rss_conf *rss_conf = =3D

> &dev->data->dev_conf.rx_adv_conf= .rss_conf;


> if (rss_conf-&g= t;rss_key !=3D NULL) {

> if = (internals->rss_key_len > rss_conf->rss_key_len) {<= br/>> 
> RTE_BOND_LOG(ERR, "Invalid rss&= nbsp;key length(%u)",

> rss_conf->r= ss_key_len);

> return -EINVAL;
>&nbs= p;
> }


> memcpy(inter= nals->rss_key, rss_conf->rss_key,

> &= nbsp;       internals->rss_key_len);<= br/>> 
> } else {

>&nbs= p;if (internals->rss_key_len > sizeof(default_rss_key)= ) {

> RTE_BOND_LOG(ERR,

= >         "There = is no suitable default hash key");
>&n= bsp;
> return -EINVAL;

> }
= > 

> memcpy(internals->rss_key, = default_rss_key,

>      = ;   internals->rss_key_len);

> = ;}



> ----Origin---= -
> From=EF=BC=9A"Min Hu (Connor)" <= ;humin29@huawei.com>
> To=EF=BC=9A"yuwenjun_yewu"&= nbsp;<yuwenjun_yewu@cmss.chinamobile.com>,tangchengchang  &= lt;tangchengchang@huawei.com>,"ferruh.yigit" <ferruh.y= igit@intel.com>
> Cc: dev  <dev@dpdk.org&g= t;,stable  <stable@dpdk.org>
> Date=EF=BC=9A202= 2-01-14 08:59:21
> Subject=EF=BC=9ARe: [PATCH] n= et/bonding: fix RSS not work for bonding = ;in DPDK21.11

> Hi,

>=  =E5=9C=A8 2022/1/12 15:29, =E4=BF=9E=E6=96=87=E4=BF=8A= _yewu =E5=86=99=E9=81=93:
>  >  From&nbs= p;85c4ffffe32996fc262dd6f69d0ce272ae8e8350 Mon Sep 17 0= 0:00:00 2001
>  >
>  > Fr= om: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile.com>
>  >
>  > Date: Wed, 12=  Jan 2022 15:01:10 +0800
>  >
&= gt;  > Subject: [PATCH] net/bonding: fix&n= bsp;RSS not work for bonding
>  >>  >
>  > RSS don't&nb= sp;work when upgrade to DPDK21.11.
> Cannot=  get your meaning, Why RSS don't wor= k?
> As mq_mode is not RTE_ETH_MQ_RX_RSS&nb= sp;in rte_eth_conf, RSS is off.
> Please&nb= sp;make it clearer, thanks.

>  >
>  >
>  >&nb= sp;e.g.:
>  >
>  > examples/bo= nd/main.c:
>  >
>  > conf:
>  >
>  > static struct = ;rte_eth_conf port_conf =3D {
>  >
&= gt;  > .rxmode =3D {
>  >>  > .mq_mode =3D RTE_ETH_MQ_RX_NONE,
>  >
>  > .split_hdr_size = =3D 0,
>  >
>  > },
&= gt;  >
>  > .rx_adv_conf =3D&nbs= p;{
>  >
>  > .rss_conf = =3D {
>  >
>  > .rss_key&= nbsp;=3D NULL,
>  >
>  > = .rss_hf =3D RTE_ETH_RSS_IP,
>  >
>&nbs= p; > },
>  >
>  > = ;},
>  >
>  > .txmode =3D=  {
>  >
>  > .mq_mode&nbs= p;=3D RTE_ETH_MQ_TX_NONE,
>  >
>  = ;> },
>  >
>  > };
>  >
>  >
>  >&nbs= p;call chain:
>  >
>  > r= te_eth_bond_create()->rte_eth_dev_configure()->rte_eth_bond_slave_add= ()->rte_eth_dev_start()
>  >
>  >= ;
>  > Signed-off-by: Yu Wenjun <= ;yuwenjun_yewu@cmss.chinamobile.com>
>  >
>&n= bsp; > ---
>  >
>  >&n= bsp;  drivers/net/bonding/rte_eth_bond_pmd.c | 5 += ++++
>  >
>  >   1&n= bsp;file changed, 5 insertions(+)
>  >>  >
>  > diff --git = a/drivers/net/bonding/rte_eth_bond_pmd.c
>  > b/dr= ivers/net/bonding/rte_eth_bond_pmd.c
>  >
> = ; > index 84f4900ee5..31bcee15cf 100644
>&nbs= p; >
>  > --- a/drivers/net/bonding/r= te_eth_bond_pmd.c
>  >
>  > ++= + b/drivers/net/bonding/rte_eth_bond_pmd.c
>  >>  > @@ -3504,6 +3504,11 @@ bond= _ethdev_configure(struct rte_eth_dev *dev)
>  &g= t;
>  > if (dev->data->dev_conf.rxmode.= mq_mode & RTE_ETH_MQ_RX_RSS) {
>  ><= br/>>  > struct rte_eth_rss_conf *rss_conf&n= bsp;=3D
>  >
>  > &dev->= ;data->dev_conf.rx_adv_conf.rss_conf;
>  >
>&= nbsp; > +
>  >
>  >&nb= sp;+if (internals->rss_key_len =3D=3D 0) {
>&= nbsp; >
>  > +internals->rss_key_len&nb= sp;=3D sizeof(default_rss_key);
>  >
> = ; > +}
>  >
>  > = +
>  >
>  > if (rss_conf-= >rss_key !=3D NULL) {
>  >
>&n= bsp; > if (internals->rss_key_len > rss_c= onf->rss_key_len) {
>  >
>  &g= t; RTE_BOND_LOG(ERR, "Invalid rss key length(= %u)",
>  >
>  > --
&g= t;  >
>  > 2.32.0.windows.1
>&= nbsp; >
>  >

> Subje= ct=EF=BC=9ARe: [PATCH] net/bonding: fix RSS not&nb= sp;work for bonding in DPDK21.11

>= ; Hi,

> =E5=9C=A8 2022/1/12 15:29= , =E4=BF=9E=E6=96=87=E4=BF=8A_yewu =E5=86=99=E9=81=93:
>&n= bsp; >  From 85c4ffffe32996fc262dd6f69d0ce272ae8e835= 0 Mon Sep 17 00:00:00 2001
>  >= ;
>  > From: Yu Wenjun <yuwenjun= _yewu@cmss.chinamobile.com>
>  >
>  = ;> Date: Wed, 12 Jan 2022 15:01:10 +0= 800
>  >
>  > Subject: [P= ATCH] net/bonding: fix RSS not work for = bonding
>  >
>  >
> &nb= sp;> RSS don't work when upgrade to&nb= sp;DPDK21.11.
> Cannot get your meaning, Wh= y RSS don't work?
> As mq_mode is&= nbsp;not RTE_ETH_MQ_RX_RSS in rte_eth_conf, RSS is=  off.
> Please make it clearer, thanks= .


>  >
> &nbs= p;>
>  > e.g.:
>  >
>= ;  > examples/bond/main.c:
>  >
&= gt;  > conf:
>  >
>  = ;> static struct rte_eth_conf port_conf =3D&nbs= p;{
>  >
>  > .rxmode =3D=  {
>  >
>  > .mq_mode&nbs= p;=3D RTE_ETH_MQ_RX_NONE,
>  >
>  = ;> .split_hdr_size =3D 0,
>  >
&g= t;  > },
>  >
>  >= ; .rx_adv_conf =3D {
>  >
> =  > .rss_conf =3D {
>  >
>=   > .rss_key =3D NULL,
>  >=
>  > .rss_hf =3D RTE_ETH_RSS_IP,
&g= t;  >
>  > },
>  >= ;
>  > },
>  >
> &= nbsp;> .txmode =3D {
>  >
>&nb= sp; > .mq_mode =3D RTE_ETH_MQ_TX_NONE,
> = ; >
>  > },
>  >
&= gt;  > };
>  >
>  &g= t;
>  > call chain:
>  ><= br/>>  > rte_eth_bond_create()->rte_eth_dev_configu= re()->rte_eth_bond_slave_add()->rte_eth_dev_start()
> &nb= sp;>
>  >
>  > Signed-off-b= y: Yu Wenjun <yuwenjun_yewu@cmss.chinamobile.com>
= >  >
>  > ---
>  = >
>  >   drivers/net/bonding/rte_eth_= bond_pmd.c | 5 +++++
>  >
> =  >   1 file changed, 5 insertion= s(+)
>  >
>  >
>  = > diff --git a/drivers/net/bonding/rte_eth_bond_pmd.c
>  > b/drivers/net/bonding/rte_eth_bond_pmd.c
>= ;  >
>  > index 84f4900ee5..31bc= ee15cf 100644
>  >
>  > -= -- a/drivers/net/bonding/rte_eth_bond_pmd.c
>  >>  > +++ b/drivers/net/bonding/rte_eth_bond_pm= d.c
>  >
>  > @@ -3504,6&= nbsp;+3504,11 @@ bond_ethdev_configure(struct rte_eth_dev&nb= sp;*dev)
>  >
>  > if (de= v->data->dev_conf.rxmode.mq_mode & RTE_ETH_MQ_RX_RSS)&n= bsp;{
>  >
>  > struct rt= e_eth_rss_conf *rss_conf =3D
>  >
>&nb= sp; > &dev->data->dev_conf.rx_adv_conf.rss_conf;
>  >
>  > +
>  &= gt;
>  > +if (internals->rss_key_len = =3D=3D 0) {
>  >
>  >&nbs= p;+internals->rss_key_len =3D sizeof(default_rss_key);
>= ;  >
>  > +}
>  >=
>  > +
>  >
> &nb= sp;> if (rss_conf->rss_key !=3D NULL) {
= >  >
>  > if (internals->r= ss_key_len > rss_conf->rss_key_len) {
> &n= bsp;>
>  > RTE_BOND_LOG(ERR, "Invalid=  rss key length(%u)",
>  >
>=   > --
>  >
>  >&= nbsp;2.32.0.windows.1
>  >
>  >


------=_Part_32848_1501788912.1642158888255--