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 4E02FA0C3F; Wed, 28 Apr 2021 04:26:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B6E0140147; Wed, 28 Apr 2021 04:26:13 +0200 (CEST) Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) by mails.dpdk.org (Postfix) with ESMTP id B993340041 for ; Wed, 28 Apr 2021 04:26:12 +0200 (CEST) Received: from DGGEMS413-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4FVMrm353TzklXc for ; Wed, 28 Apr 2021 10:24:08 +0800 (CST) Received: from [10.66.74.184] (10.66.74.184) by DGGEMS413-HUB.china.huawei.com (10.3.19.213) with Microsoft SMTP Server id 14.3.498.0; Wed, 28 Apr 2021 10:26:06 +0800 To: "Li, Xiaoyun" , "dev@dpdk.org" CC: "Yigit, Ferruh" References: <1614939741-63927-1-git-send-email-oulijun@huawei.com> <1618909266-17584-1-git-send-email-lihuisong@huawei.com> <1618909266-17584-4-git-send-email-lihuisong@huawei.com> <3efb36c1-3af7-7400-afcc-61970f9e0cac@huawei.com> From: Huisong Li Message-ID: <57c9f3c3-9c7f-f75c-ed94-1047e5ddf1e5@huawei.com> Date: Wed, 28 Apr 2021 10:26:07 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.66.74.184] X-CFilter-Loop: Reflected Subject: Re: [dpdk-dev] [PATCH V3 3/7] app/testpmd: fix a segment fault when DCB test 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 Sender: "dev" 在 2021/4/28 10:02, Li, Xiaoyun 写道: > >> -----Original Message----- >> From: Huisong Li >> Sent: Tuesday, April 27, 2021 22:11 >> To: Li, Xiaoyun ; dev@dpdk.org >> Cc: Yigit, Ferruh >> Subject: Re: [PATCH V3 3/7] app/testpmd: fix a segment fault when DCB test >> >> >> 在 2021/4/27 19:19, Li, Xiaoyun 写道: >>>> -----Original Message----- >>>> From: Huisong Li >>>> Sent: Tuesday, April 20, 2021 17:01 >>>> To: dev@dpdk.org >>>> Cc: Yigit, Ferruh ; Li, Xiaoyun >>>> ; linuxarm@openeuler.org; lihuisong@huawei.com >>>> Subject: [PATCH V3 3/7] app/testpmd: fix a segment fault when DCB >>>> test >>>> >>>> After DCB mode is configured, if we decrease the number of RX and TX >>>> queues, >>>> fwd_config_setup() will be called to setup the DCB forwarding configuration. >>>> And forwarding streams are updated based on new queue numbers in >>>> fwd_config_setup(), but the mapping between the TC and queues >>>> obtained by >>>> rte_eth_dev_get_dcb_info() is still old queue numbers (old queue >>>> numbers are greater than new queue numbers). >>>> In this case, the segment fault happens. So rte_eth_dev_configure() >>>> should be called again to update the mapping between the TC and >>>> queues before rte_eth_dev_get_dcb_info(). >>>> >>>> Like: >>>> set nbcore 4 >>>> port stop all >>>> port config 0 dcb vt off 4 pfc on >>>> port start all >>>> port stop all >>>> port config all rxq 8 >>>> port config all txq 8 >>>> >>>> Fixes: 900550de04a7 ("app/testpmd: add dcb support") >>>> Cc: stable@dpdk.org >>>> >>>> Signed-off-by: Huisong Li >>>> Signed-off-by: Lijun Ou >>>> --- >>>> app/test-pmd/config.c | 26 ++++++++++++++++++++++++++ >>>> 1 file changed, 26 insertions(+) >>>> >>>> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index >>>> 03ee40c..18b197b 100644 >>>> --- a/app/test-pmd/config.c >>>> +++ b/app/test-pmd/config.c >>>> @@ -2996,7 +2996,33 @@ dcb_fwd_config_setup(void) >>>> uint16_t nb_rx_queue, nb_tx_queue; >>>> uint16_t i, j, k, sm_id = 0; >>>> uint16_t total_tc_num; >>>> + struct rte_port *port; >>>> uint8_t tc = 0; >>>> + portid_t pid; >>>> + int ret; >>>> + >>>> + /* >>>> + * The fwd_config_setup() is called when the port is >>>> RTE_PORT_STARTED >>> When the port is RTE_PORT_STARTED or RTE_PORT_STARTED? Missing an 'or' >> here. >> ok >>> Maybe something like the following will be better? (just a reference, >>> you can put it in a better way) >>> /* >>> * Re-configure ports to get updated mapping between tc and queue in case >> the queue number of the port is changed. >>> * Skip for started ports since configuring queue number needs to stop ports >> first. >>> */ >> Thank you😁 I'm going to fix it as follows: >> >>     /* >>      * The fwd_config_setup() is called when the port is RTE_PORT_STARTED >>      * or RTE_PORT_STOPPED. >>      * >>      * Re-configure ports to get updated mapping between tc and queue when >>      * the queue number of the port is changed. Skip for started ports since >>      * modifying queue number and calling dev_configure need to stop ports >>      * first. >>      */ >> > Overall, looks good to me. > Just one suggestion, what about change "when the queue number" to "in case the queue number" because you actually don't know if the queue number is changed or not. Yes, there is a difference in meaning. I will fix it in next version. > >>>> + * RTE_PORT_STOPPED. When a port is RTE_PORT_STARTED, >>>> dev_configure >>>> + * cannot be called. >>>> + * >>>> + * re-configure the device after changing queue numbers of stopped >>>> + * ports, so that the updated mapping between tc and queue can be >>>> + * obtained. >>>> + */ >>>> + for (pid = 0; pid < nb_fwd_ports; pid++) { >>>> + if (port_is_started(pid) == 1) >>>> + continue; >>>> + >>>> + port = &ports[pid]; >>>> + ret = rte_eth_dev_configure(pid, nb_rxq, nb_txq, >>>> + &port->dev_conf); >>>> + if (ret < 0) { >>>> + printf("Failed to re-configure port %d, ret = %d.\n", >>>> + pid, ret); >>>> + return; >>>> + } >>>> + } >>>> >>>> cur_fwd_config.nb_fwd_lcores = (lcoreid_t) nb_fwd_lcores; >>>> cur_fwd_config.nb_fwd_ports = nb_fwd_ports; >>>> -- >>>> 2.7.4 >>> .