Hi Wenxuan, > -----Original Message----- > From: Wu, WenxuanX <wenxuanx...@intel.com> > Sent: Friday, March 4, 2022 10:37 AM > To: Yang, Qiming <qiming.y...@intel.com>; Zhang, Qi Z > <qi.z.zh...@intel.com>; Li, Xiaoyun <xiaoyun...@intel.com>; Singh, Aman > Deep <aman.deep.si...@intel.com>; Zhang, Yuying > <yuying.zh...@intel.com> > Cc: dev@dpdk.org > Subject: [PATCH v2] app/testpmd : fix testpmd quit error > > From: wenxuan wu <wenxuanx...@intel.com> > > When testpmd use func get_eth_dev_info() while related resource had been > released. > > Change the logic of func port_is_bonding_slave, this func > eth_dev_info_get_print_err while pf is released would result in this error. > Use ports instead to avoid this bug. > > Fixes: 0a0821bcf312 ("app/testpmd: remove most uses of internal ethdev > array") > Cc: sta...@dpdk.org > > Signed-off-by: wenxuan wu <wenxuanx...@intel.com> > --- > app/test-pmd/testpmd.c | 12 +----------- > 1 file changed, 1 insertion(+), 11 deletions(-) > > diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > e1da961311..37038c9183 100644 > --- a/app/test-pmd/testpmd.c > +++ b/app/test-pmd/testpmd.c > @@ -3824,19 +3824,9 @@ void clear_port_slave_flag(portid_t slave_pid) > uint8_t port_is_bonding_slave(portid_t slave_pid) { > struct rte_port *port; > - struct rte_eth_dev_info dev_info; > - int ret; > > port = &ports[slave_pid]; > - ret = eth_dev_info_get_print_err(slave_pid, &dev_info); > - if (ret != 0) { > - TESTPMD_LOG(ERR, > - "Failed to get device info for port id %d," > - "cannot determine if the port is a bonded slave", > - slave_pid); > - return 0; > - } > - if ((*dev_info.dev_flags & RTE_ETH_DEV_BONDED_SLAVE) || (port- > >slave_flag == 1)) > + if ((*port->dev_info.dev_flags & RTE_ETH_DEV_BONDED_SLAVE) || > +(port->slave_flag == 1))
Is port->dev_info.dev_flags updated in time when the bonding status changes? It may use eth_dev_info_get_print_err() to update dev_info of port. > return 1; > return 0; > } > -- > 2.25.1