Hi, In fact, the patch is aim to fix this issue that secondary process cannot dump packet after start testpmd. This issue is induced by commit id is 3c4426db54fc ("app/testpmd: do not poll stopped queues"). After secondary process start, the default value of Rx/Tx queue state maintained by testpmd is 'RTE_ETH_QUEUE_STATE_STOPPED', the 'fsm[sm_id]->disabled' flag will set true according to queues state, then packet cannot forward and dump.
The reason why not use 'dev->data->rx_queue_state' is whether queue state is start or stop in primary process depend on rx_conf->rx_deferred_start after start testpmd. And after having started testpmd, queue state can be controlled by command for example 'port x rxq x start'. Should we align with the same behavior of queues state for primary and secondary process after start testpmd? > -----Original Message----- > From: lihuisong (C) <lihuis...@huawei.com> > Sent: Wednesday, June 29, 2022 10:55 AM > To: Andrew Rybchenko <andrew.rybche...@oktetlabs.ru>; Zhang, Peng1X > <peng1x.zh...@intel.com>; dev@dpdk.org > Cc: Singh, Aman Deep <aman.deep.si...@intel.com>; Zhang, Yuying > <yuying.zh...@intel.com>; sta...@dpdk.org > Subject: Re: [PATCH] app/testpmd: fix secondary process cannot dump packet > > > 在 2022/6/23 20:10, Andrew Rybchenko 写道: > > On 6/23/22 21:15, peng1x.zh...@intel.com wrote: > >> From: Peng Zhang <peng1x.zh...@intel.com> > >> > >> The origin design is whether testpmd is primary or not, if state of > >> receive queue is stop, then packets will not be dumped for show. > >> While to secondary process, receive queue will not be set up, and > >> state will still be stop even if testpmd is started. So packets of > >> stated secondary process cannot be dumped for show. > >> > >> The current design is to secondary process state of queue will be set > >> to start after testpmd is started. Then packets of started secondary > >> process can be dumped for show. > >> > >> Fixes: a550baf24af9 ("app/testpmd: support multi-process") > >> Cc: sta...@dpdk.org > >> > >> Signed-off-by: Peng Zhang <peng1x.zh...@intel.com> > >> --- > >> app/test-pmd/testpmd.c | 12 ++++++++++++ > >> 1 file changed, 12 insertions(+) > >> > >> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index > >> 205d98ee3d..93ba7e7c9b 100644 > >> --- a/app/test-pmd/testpmd.c > >> +++ b/app/test-pmd/testpmd.c > >> @@ -3007,6 +3007,18 @@ start_port(portid_t pid) > >> if (setup_hairpin_queues(pi, p_pi, cnt_pi) != 0) > >> return -1; > >> } > >> + > >> + if (port->need_reconfig_queues > 0 && !is_proc_primary()) { > >> + struct rte_eth_rxconf *rx_conf; > >> + for (qi = 0; qi < nb_rxq; qi++) { > >> + rx_conf = &(port->rxq[qi].conf); > >> + ports[pi].rxq[qi].state = > >> + rx_conf->rx_deferred_start ? > >> + RTE_ETH_QUEUE_STATE_STOPPED : > >> + RTE_ETH_QUEUE_STATE_STARTED; > > > > I'm not sure why it is correct to assume that deferred queue is not > > yet started. > +1. > > We should also consider whether the queue state can be changed in secondary. > The 'rx_conf->rx_deferred_start' is the data in secondary. > Why not use 'dev->data->rx_queue_state[]'. > > In fact, the issue you memtioned was introduced the following patch: > Fixes: 3c4426db54fc ("app/testpmd: do not poll stopped queues") > > The root cause of this issue is that the default value of Rx/Tx queue state > maintained by testpmd is 'RTE_ETH_QUEUE_STATE_STOPPED'. As a result, > secondary doesn't start polling thread to receive packets when start packet > forwarding. And now, secondary cannot receive and send any packets. > > Could you fix it together? > > > >> + } > >> + } > >> + > >> configure_rxtx_dump_callbacks(verbose_level); > >> if (clear_ptypes) { > >> diag = rte_eth_dev_set_ptypes(pi, RTE_PTYPE_UNKNOWN, > > > > .