From: Huisong Li Date: Wed, 28 Apr 2021 06:40:42 +0000 (+0800) Subject: app/testpmd: fix DCB re-configuration X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=5cbbcbad652848b8ecdf26d1d8bf1ea5c794edda;p=dpdk.git app/testpmd: fix DCB re-configuration 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 Acked-by: Xiaoyun Li --- diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 39c0b80a5b..bbf039de76 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -3043,7 +3043,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 + * or RTE_PORT_STOPPED. + * + * 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 modifying queue number and calling dev_configure need to stop + * ports first. + */ + 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;