Hi > -----Original Message----- > From: Wang, Jie1X <jie1x.w...@intel.com> > Sent: Thursday, August 26, 2021 15:09 > To: dev@dpdk.org > Cc: Li, Xiaoyun <xiaoyun...@intel.com>; andrew.rybche...@oktetlabs.ru; > tho...@monjalon.net; Yigit, Ferruh <ferruh.yi...@intel.com>; Wang, Jie1X > <jie1x.w...@intel.com> > Subject: [PATCH v7 2/2] app/testpmd: fix testpmd doesn't show RSS hash > offload > > The driver may change offloads info into dev->data->dev_conf in dev_configure > which may cause port->dev_conf and port->rx_conf contain outdated values. > > This patch updates the offloads info if it changes to fix this issue. > > Fixes: ce8d561418d4 ("app/testpmd: add port configuration settings") > > Signed-off-by: Jie Wang <jie1x.w...@intel.com> > --- > app/test-pmd/testpmd.c | 33 +++++++++++++++++++++++++++++++++ > app/test-pmd/testpmd.h | 2 ++ > app/test-pmd/util.c | 15 +++++++++++++++ > 3 files changed, 50 insertions(+) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > 6cbe9ba3c8..c0bdb740fe 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -2461,6 +2461,9 @@ start_port(portid_t pid) > } > > if (port->need_reconfig > 0) { > + struct rte_eth_conf dev_conf_info; > + int k; > + > port->need_reconfig = 0; > > if (flow_isolate_all) { > @@ -2498,6 +2501,36 @@ start_port(portid_t pid) > port->need_reconfig = 1; > return -1; > } > + /* get offloads */ > + if (0 != > + eth_dev_conf_info_get_print_err(pi, > + &dev_conf_info)) { > + rte_exit(EXIT_FAILURE, > + "rte_eth_dev_conf_info_get() failed\n");
rte_exit will directly exit the program. "return -1" after this won't work. Please just print errlog and return -1 like other failures. > + return -1; > + } > + /* Apply Rx offloads configuration */ > + if (dev_conf_info.rxmode.offloads != > + port->dev_conf.rxmode.offloads) { > + port->dev_conf.rxmode.offloads = > + dev_conf_info.rxmode.offloads; > + for (k = 0; > + k < port->dev_info.max_rx_queues; > + k++) > + port->rx_conf[k].offloads = > + > dev_conf_info.rxmode.offloads; > + } > + /* Apply Tx offloads configuration */ > + if (dev_conf_info.txmode.offloads != > + port->dev_conf.txmode.offloads) { > + port->dev_conf.txmode.offloads = > + dev_conf_info.txmode.offloads; > + for (k = 0; > + k < port->dev_info.max_tx_queues; > + k++) > + port->tx_conf[k].offloads = > + > dev_conf_info.txmode.offloads; > + } > } > if (port->need_reconfig_queues > 0) { > port->need_reconfig_queues = 0; > diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index > 16a3598e48..6970a20ee4 100644 > --- a/app/test-pmd/testpmd.h > +++ b/app/test-pmd/testpmd.h > @@ -950,6 +950,8 @@ void show_gro(portid_t port_id); void setup_gso(const > char *mode, portid_t port_id); int eth_dev_info_get_print_err(uint16_t > port_id, > struct rte_eth_dev_info *dev_info); > +int eth_dev_conf_info_get_print_err(uint16_t port_id, > + struct rte_eth_conf *dev_conf_info); > void eth_set_promisc_mode(uint16_t port_id, int enable); void > eth_set_allmulticast_mode(uint16_t port, int enable); int > eth_link_get_nowait_print_err(uint16_t port_id, struct rte_eth_link *link); > diff -- > git a/app/test-pmd/util.c b/app/test-pmd/util.c index 5dd7157947..170d8f5c61 > 100644 > --- a/app/test-pmd/util.c > +++ b/app/test-pmd/util.c > @@ -440,6 +440,21 @@ eth_dev_info_get_print_err(uint16_t port_id, > return ret; > } > > +int > +eth_dev_conf_info_get_print_err(uint16_t port_id, > + struct rte_eth_conf *dev_conf_info) { > + int ret; > + > + ret = rte_eth_dev_conf_info_get(port_id, dev_conf_info); > + if (ret != 0) > + fprintf(stderr, > + "Error during getting device configuration (port %u) > info: %s\n", > + port_id, strerror(-ret)); > + > + return ret; > +} > + > void > eth_set_promisc_mode(uint16_t port, int enable) { > -- > 2.25.1