Hi Regards, Ferruh > -----Original Message----- > From: Iremonger, Bernard > Sent: Monday, September 23, 2019 10:18 PM > To: Yigit, Ferruh <ferruh.yi...@intel.com>; Wang, ShougangX > <shougangx.w...@intel.com>; dev@dpdk.org > Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Yang, Qiming > <qiming.y...@intel.com>; sta...@dpdk.org > Subject: RE: [dpdk-dev] [dpdk-stable] [PATCH] app/testpmd: fix Segment fault > when start fwd > > Hi ShougangX, Ferruh, > > > -----Original Message----- > > From: dev [mailto:dev-boun...@dpdk.org] On Behalf Of Ferruh Yigit > > Sent: Monday, September 23, 2019 12:04 PM > > To: Wang, ShougangX <shougangx.w...@intel.com>; dev@dpdk.org > > Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Yang, Qiming > > <qiming.y...@intel.com>; sta...@dpdk.org > > Subject: Re: [dpdk-dev] [dpdk-stable] [PATCH] app/testpmd: fix Segment > > fault when start fwd > > > > On 9/17/2019 10:22 AM, Wang, ShougangX wrote: > > >> Let's assume port already stopped before calling the reset, reset > > >> will cause port to be started. > > > > > > Indeed, automatically start looks strange in this case. User > > > explicitly do the "port start" command should be better. > > > > > >> I am for user explicitly do the stop, reset and start commands, > > >> instead of reset automatically stop and start later. > > > > > > There are two reasons that it is necessary to stop automatically in > > > "port > > reset" command: > > > 1) Even without this patch, user does not need to manually execute > > > "port stop" command before "port reset" too, because port will be > > stopped in rte_eth_dev_reset() function. > > > But this function does not update the port status flag of testpmd. > > > It makes the port state recorded by testpmd inconsistent with the > > > actual port state. So I add stop processing in > > > reset_port() function to stop port as same as running "port stop" > > command. > > > > I see 'rte_eth_dev_reset()' API calls the 'rte_eth_dev_stop()' but it > > isn't enough as you said and a testpmd stop is required, instead of > > doing in the function it is easy to detect port is not stopped and > > return an error in the 'reset', it is up to user to stop and do the reset. > > > > > > > > 2) If let user to stop port manually when he wants to reset port, it > > > is not > > easy to use than before. > > > > I still prefer 'Explicit is better than implicit.' [1], yes it is two > > commands now to reset the port if it is already started but I don't see > > this is a > problem. > > > > Anyway this is not a big deal, if testpmd maintainers are OK for it we > > can continue with this... > > I am inclined to agree with Ferruh, that it would be better to return an > error if > the port is not stopped when "port reset" is called rather that silently > stopping > the port. >
I will adopt your suggestion. > > > [1] see: The Zen of Python :) > > > > > > > > Thanks. > > > Shougang > > > > > > > > >> -----Original Message----- > > >> From: Yigit, Ferruh > > >> Sent: Monday, September 16, 2019 11:28 PM > > >> To: Wang, ShougangX <shougangx.w...@intel.com>; dev@dpdk.org > > >> Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Yang, Qiming > > >> <qiming.y...@intel.com>; sta...@dpdk.org > > >> Subject: Re: [dpdk-stable] [PATCH] app/testpmd: fix Segment fault > > >> when start fwd > > >> > > >> On 9/16/2019 7:37 AM, Wang, ShougangX wrote: > > >>> Hi Ferruh > > >>> > > >>> Thanks for your reply. > > >>> > > >>>> Not sure if 'reset' command should do more than it says, if there > > >>>> is a requirement that port should be stopped, why not add this > > >>>> condition with an error message so that user can stop the port in > > advance if she wants. > > >>> > > >>> Firstly, port must be stopped before reset. Usually, port is > > >>> stopped by rte_eth_dev_reset(), so testpmd does not prompt user to stop > port. > > >>> Although it can stop port, but testpmd does not change its own > > >>> port status > > >> flag to "RTE_PORT_STOPPED" and it will cause "port start" to fail. > > >>> So I add this patch to stop port as same as running "port stop" command. > > >> > > >> Let's assume port already stopped before calling the reset, reset > > >> will cause port to be started. > > >> I am for user explicitly do the stop, reset and start commands, > > >> instead of reset automatically stop and start later. > > >> > > >>> > > >>>> - 'reset_port()' function has a loop inside, 'RTE_ETH_FOREACH_DEV()' > > >>>> but it works on single port, the loop looked unnecessary to me, > > >>>> can you please check and remove the loop if required? > > >>> > > >>> "port reset" supports reset all ports (testpmd > port reset all), > > >>> so this loop is > > >> necessary. > > >> > > >> Got it. > > >> > > >>> > > >>>> - I am not able to see 'reset' has been documented in > > >>>> 'doc/guides/testpmd_app_ug/testpmd_funcs.rst', it may be missing, > > >>>> can you please check and add it if required? > > >>> > > >>> OK. I will add it in the next patch. > > >>> > > >>> Thanks. > > >>> Shougang > > >>> > > >>> > > >>>> -----Original Message----- > > >>>> From: Yigit, Ferruh > > >>>> Sent: Saturday, September 14, 2019 1:35 AM > > >>>> To: Wang, ShougangX <shougangx.w...@intel.com>; dev@dpdk.org > > >>>> Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Yang, Qiming > > >>>> <qiming.y...@intel.com>; sta...@dpdk.org > > >>>> Subject: Re: [dpdk-stable] [PATCH] app/testpmd: fix Segment fault > > >>>> when start fwd > > >>>> > > >>>> On 9/6/2019 2:28 AM, Wang ShougangX wrote: > > >>>>> This patch fixed the reset function to avoid crash when user > > >>>>> don't call port reset , port stop and port start functions as > > >>>>> sequence. > > >>>>> > > >>>>> Fixes: 97f1e19679 ("app/testpmd: add port reset command") > > >>>>> Cc: sta...@dpdk.org > > >>>>> > > >>>>> Signed-off-by: Wang ShougangX <shougangx.w...@intel.com> > > >>>>> --- > > >>>>> app/test-pmd/testpmd.c | 6 ++++++ > > >>>>> 1 file changed, 6 insertions(+) > > >>>>> > > >>>>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > > >>>>> index > > >>>>> e8e2a39b6..273a7aa02 100644 > > >>>>> --- a/app/test-pmd/testpmd.c > > >>>>> +++ b/app/test-pmd/testpmd.c > > >>>>> @@ -2344,6 +2344,9 @@ reset_port(portid_t pid) > > >>>>> if (port_id_is_invalid(pid, ENABLED_WARN)) > > >>>>> return; > > >>>>> > > >>>>> + printf("Stopping ports...\n"); > > >>>>> + stop_port(pid); > > >>>>> + > > >>>>> printf("Resetting ports...\n"); > > >>>>> > > >>>>> RTE_ETH_FOREACH_DEV(pi) { > > >>>>> @@ -2372,6 +2375,9 @@ reset_port(portid_t pid) > > >>>>> } > > >>>>> } > > >>>>> > > >>>>> + printf("Starting ports...\n"); > > >>>>> + start_port(pid); > > >>>>> + > > >>>>> printf("Done\n"); > > >>>>> } > > >>>> > > >>>> Hi Shougang, > > >>>> > > >>>> Not sure if 'reset' command should do more than it says, if there > > >>>> is a requirement that port should be stopped, why not add this > > >>>> condition with an error message so that user can stop the port in > > advance if she wants. > > >>>> > > >>>> > > >>>> Btw, a few things related, > > >>>> - 'reset_port()' function has a loop inside, 'RTE_ETH_FOREACH_DEV()' > > >>>> but it works on single port, the loop looked unnecessary to me, > > >>>> can you please check and remove the loop if required? > > >>>> > > >>>> - I am not able to see 'reset' has been documented in > > >>>> 'doc/guides/testpmd_app_ug/testpmd_funcs.rst', it may be missing, > > >>>> can you please check and add it if required? > > >>>> > > >>>> Thanks, > > >>>> ferruh > > Regards, > > Bernard. > Thanks. Shougang