* [dpdk-stable] [PATCH] app/testpmd: avoid exit without resource release @ 2020-12-24 3:57 dapengx.yu 2020-12-25 3:03 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger 2021-01-25 3:29 ` [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore dapengx.yu 0 siblings, 2 replies; 14+ messages in thread From: dapengx.yu @ 2020-12-24 3:57 UTC (permalink / raw) To: wenzhuo.lu, beilei.xing, bernard.iremonger; +Cc: dev, YU DAPENG, stable From: YU DAPENG <dapengx.yu@intel.com> In interactive mode, if testpmd exit by calling rte_exit without cmdline resource release, terminal will not echo keyboard input. So add code to just show error message, but not exit testpmd when unexpected happens on starting packet forwarding in interactive mode. User can type "quit" to exit testpmd later. Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional configuration") Cc: stable@dpdk.org Signed-off-by: YU DAPENG <dapengx.yu@intel.com> --- app/test-pmd/testpmd.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 33fc0fddf..0071c7235 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -2194,10 +2194,18 @@ start_packet_forwarding(int with_tx_first) if ((strcmp(cur_fwd_eng->fwd_mode_name, "rxonly") != 0 && strcmp(cur_fwd_eng->fwd_mode_name, "txonly") != 0) && - (!nb_rxq || !nb_txq)) + (!nb_rxq || !nb_txq)) { +#ifdef RTE_LIB_CMDLINE + if (interactive == 1) { + printf("Either rxq or txq are 0, cannot use %s fwd mode\n", + cur_fwd_eng->fwd_mode_name); + return; + } +#endif rte_exit(EXIT_FAILURE, "Either rxq or txq are 0, cannot use %s fwd mode\n", cur_fwd_eng->fwd_mode_name); + } if (all_ports_started() == 0) { printf("Not all ports were started\n"); -- 2.27.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2020-12-24 3:57 [dpdk-stable] [PATCH] app/testpmd: avoid exit without resource release dapengx.yu @ 2020-12-25 3:03 ` Stephen Hemminger 2020-12-25 5:09 ` Yu, DapengX 2021-01-25 3:29 ` [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore dapengx.yu 1 sibling, 1 reply; 14+ messages in thread From: Stephen Hemminger @ 2020-12-25 3:03 UTC (permalink / raw) To: dapengx.yu; +Cc: wenzhuo.lu, beilei.xing, bernard.iremonger, dev, stable On Thu, 24 Dec 2020 11:57:48 +0800 dapengx.yu@intel.com wrote: > From: YU DAPENG <dapengx.yu@intel.com> > > In interactive mode, if testpmd exit by calling rte_exit without cmdline > resource release, terminal will not echo keyboard input. So add code to > just show error message, but not exit testpmd when unexpected happens > on starting packet forwarding in interactive mode. User can type "quit" > to exit testpmd later. > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional configuration") > Cc: stable@dpdk.org > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> Sounds like a more generic problem with rte_exit and librte_cmdline. Would it better to fix it in librte_cmdline by adding an atexit() handler. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2020-12-25 3:03 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger @ 2020-12-25 5:09 ` Yu, DapengX 2021-01-15 3:28 ` Yu, DapengX 0 siblings, 1 reply; 14+ messages in thread From: Yu, DapengX @ 2020-12-25 5:09 UTC (permalink / raw) To: Stephen Hemminger Cc: Lu, Wenzhuo, Xing, Beilei, Iremonger, Bernard, dev, stable Hi Stephen, Do you mean this solution? 1. support atexit() in librte_eal, other component can use it to register a function to be called when rte_exit() is called. 2. in librte_cmdline, use atexit() to register a function to release resource I am looking forward to more comments from other maintainers, since this solution will modify librte_eal and librte_cmdline, but not just testpmd app. -----Original Message----- From: Stephen Hemminger [mailto:stephen@networkplumber.org] Sent: Friday, December 25, 2020 11:03 AM To: Yu, DapengX <dapengx.yu@intel.com> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release On Thu, 24 Dec 2020 11:57:48 +0800 dapengx.yu@intel.com wrote: > From: YU DAPENG <dapengx.yu@intel.com> > > In interactive mode, if testpmd exit by calling rte_exit without > cmdline resource release, terminal will not echo keyboard input. So > add code to just show error message, but not exit testpmd when > unexpected happens on starting packet forwarding in interactive mode. User can type "quit" > to exit testpmd later. > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > configuration") > Cc: stable@dpdk.org > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> Sounds like a more generic problem with rte_exit and librte_cmdline. Would it better to fix it in librte_cmdline by adding an atexit() handler. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2020-12-25 5:09 ` Yu, DapengX @ 2021-01-15 3:28 ` Yu, DapengX 2021-01-15 5:50 ` Xing, Beilei 0 siblings, 1 reply; 14+ messages in thread From: Yu, DapengX @ 2021-01-15 3:28 UTC (permalink / raw) To: Lu, Wenzhuo, Xing, Beilei, Iremonger, Bernard Cc: Yu, DapengX, Stephen Hemminger, dev, stable Hi Wenzhuo, Beilei, Bernard I need testpmd app maintainers' comment : Do you prefer the simple solution in this patch or Stephen's comprehensive and generic solution(which will modify librte_cmdline, testpmd (and maybe rte_exit()))? So I can continue resolving the defect. Thanks! -----Original Message----- From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yu, DapengX Sent: Friday, December 25, 2020 1:09 PM To: Stephen Hemminger <stephen@networkplumber.org> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release Hi Stephen, Do you mean this solution? 1. support atexit() in librte_eal, other component can use it to register a function to be called when rte_exit() is called. 2. in librte_cmdline, use atexit() to register a function to release resource I am looking forward to more comments from other maintainers, since this solution will modify librte_eal and librte_cmdline, but not just testpmd app. -----Original Message----- From: Stephen Hemminger [mailto:stephen@networkplumber.org] Sent: Friday, December 25, 2020 11:03 AM To: Yu, DapengX <dapengx.yu@intel.com> Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release On Thu, 24 Dec 2020 11:57:48 +0800 dapengx.yu@intel.com wrote: > From: YU DAPENG <dapengx.yu@intel.com> > > In interactive mode, if testpmd exit by calling rte_exit without > cmdline resource release, terminal will not echo keyboard input. So > add code to just show error message, but not exit testpmd when > unexpected happens on starting packet forwarding in interactive mode. User can type "quit" > to exit testpmd later. > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > configuration") > Cc: stable@dpdk.org > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> Sounds like a more generic problem with rte_exit and librte_cmdline. Would it better to fix it in librte_cmdline by adding an atexit() handler. ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2021-01-15 3:28 ` Yu, DapengX @ 2021-01-15 5:50 ` Xing, Beilei 2021-01-15 6:05 ` Yu, DapengX 2021-01-15 9:21 ` Li, Xiaoyun 0 siblings, 2 replies; 14+ messages in thread From: Xing, Beilei @ 2021-01-15 5:50 UTC (permalink / raw) To: Yu, DapengX, Lu, Wenzhuo, Iremonger, Bernard Cc: Stephen Hemminger, dev, stable > -----Original Message----- > From: Yu, DapengX <dapengx.yu@intel.com> > Sent: Friday, January 15, 2021 11:29 AM > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > <beilei.xing@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com> > Cc: Yu, DapengX <dapengx.yu@intel.com>; Stephen Hemminger > <stephen@networkplumber.org>; dev@dpdk.org; stable@dpdk.org > Subject: RE: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource > release > > Hi Wenzhuo, Beilei, Bernard > > I need testpmd app maintainers' comment : > Do you prefer the simple solution in this patch or Stephen's comprehensive > and generic solution(which will modify librte_cmdline, testpmd (and maybe > rte_exit()))? The patch just workarounds a specific case, the issue exits in many cases, such as Rxonly mode and Rxq is 0. So It's better to investigate how to solve the generic problem according to Stephen's comments. > So I can continue resolving the defect. > > Thanks! > > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yu, DapengX > Sent: Friday, December 25, 2020 1:09 PM > To: Stephen Hemminger <stephen@networkplumber.org> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > <beilei.xing@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; > dev@dpdk.org; stable@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource > release > > Hi Stephen, > > Do you mean this solution? > 1. support atexit() in librte_eal, other component can use it to register a > function to be called when rte_exit() is called. > 2. in librte_cmdline, use atexit() to register a function to release resource > > I am looking forward to more comments from other maintainers, since this > solution will modify librte_eal and librte_cmdline, but not just testpmd app. > > > -----Original Message----- > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > Sent: Friday, December 25, 2020 11:03 AM > To: Yu, DapengX <dapengx.yu@intel.com> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > <beilei.xing@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; > dev@dpdk.org; stable@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource > release > > On Thu, 24 Dec 2020 11:57:48 +0800 > dapengx.yu@intel.com wrote: > > > From: YU DAPENG <dapengx.yu@intel.com> > > > > In interactive mode, if testpmd exit by calling rte_exit without > > cmdline resource release, terminal will not echo keyboard input. So > > add code to just show error message, but not exit testpmd when > > unexpected happens on starting packet forwarding in interactive mode. User > can type "quit" > > to exit testpmd later. > > > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > > configuration") > > Cc: stable@dpdk.org > > > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> > > Sounds like a more generic problem with rte_exit and librte_cmdline. > Would it better to fix it in librte_cmdline by adding an atexit() handler. > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2021-01-15 5:50 ` Xing, Beilei @ 2021-01-15 6:05 ` Yu, DapengX 2021-01-15 9:21 ` Li, Xiaoyun 1 sibling, 0 replies; 14+ messages in thread From: Yu, DapengX @ 2021-01-15 6:05 UTC (permalink / raw) To: Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard Cc: Stephen Hemminger, dev, stable Hi Beilei, Thanks for your comments, I will prepare patch v2. -----Original Message----- From: Xing, Beilei Sent: Friday, January 15, 2021 1:50 PM To: Yu, DapengX <dapengx.yu@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com> Cc: Stephen Hemminger <stephen@networkplumber.org>; dev@dpdk.org; stable@dpdk.org Subject: RE: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release > -----Original Message----- > From: Yu, DapengX <dapengx.yu@intel.com> > Sent: Friday, January 15, 2021 11:29 AM > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > <beilei.xing@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com> > Cc: Yu, DapengX <dapengx.yu@intel.com>; Stephen Hemminger > <stephen@networkplumber.org>; dev@dpdk.org; stable@dpdk.org > Subject: RE: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > resource release > > Hi Wenzhuo, Beilei, Bernard > > I need testpmd app maintainers' comment : > Do you prefer the simple solution in this patch or Stephen's > comprehensive and generic solution(which will modify librte_cmdline, > testpmd (and maybe rte_exit()))? The patch just workarounds a specific case, the issue exits in many cases, such as Rxonly mode and Rxq is 0. So It's better to investigate how to solve the generic problem according to Stephen's comments. > So I can continue resolving the defect. > > Thanks! > > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yu, DapengX > Sent: Friday, December 25, 2020 1:09 PM > To: Stephen Hemminger <stephen@networkplumber.org> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > <beilei.xing@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > resource release > > Hi Stephen, > > Do you mean this solution? > 1. support atexit() in librte_eal, other component can use it to > register a function to be called when rte_exit() is called. > 2. in librte_cmdline, use atexit() to register a function to release > resource > > I am looking forward to more comments from other maintainers, since > this solution will modify librte_eal and librte_cmdline, but not just testpmd app. > > > -----Original Message----- > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > Sent: Friday, December 25, 2020 11:03 AM > To: Yu, DapengX <dapengx.yu@intel.com> > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > <beilei.xing@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > resource release > > On Thu, 24 Dec 2020 11:57:48 +0800 > dapengx.yu@intel.com wrote: > > > From: YU DAPENG <dapengx.yu@intel.com> > > > > In interactive mode, if testpmd exit by calling rte_exit without > > cmdline resource release, terminal will not echo keyboard input. So > > add code to just show error message, but not exit testpmd when > > unexpected happens on starting packet forwarding in interactive > > mode. User > can type "quit" > > to exit testpmd later. > > > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > > configuration") > > Cc: stable@dpdk.org > > > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> > > Sounds like a more generic problem with rte_exit and librte_cmdline. > Would it better to fix it in librte_cmdline by adding an atexit() handler. > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2021-01-15 5:50 ` Xing, Beilei 2021-01-15 6:05 ` Yu, DapengX @ 2021-01-15 9:21 ` Li, Xiaoyun 2021-01-18 11:47 ` Yu, DapengX 1 sibling, 1 reply; 14+ messages in thread From: Li, Xiaoyun @ 2021-01-15 9:21 UTC (permalink / raw) To: Xing, Beilei, Yu, DapengX, Lu, Wenzhuo, Iremonger, Bernard, Stephen Hemminger Cc: dev, stable Hi Actually, you can just type "stty echo" to solve the problem you met. But anyway, if you want to fix it in DPDK I think you misunderstood stephan's solution. You don't need to implement atexit() yourself in eal. It's a common function like exit() in rte_exit(). Then when exit() is called. Each function registered by atexit() will be called in stack order. The simplest way to solve this problem is to register a function with atexit() in prompt() in each app which uses cmdline. Then when exit() in rte_exit() is called, the registered clean function will be called directly. Registering in prompt() is because that prompt() is the function which starts cmdline in each app. @Stephen Hemminger What do you think of this about atexit() in prompt() in each app? I understand it's cmdline and rte_exit problem. But atexit needs a function without parameters. And the cleanup for cmdline is cmdline_stdin_exit(struct cmdline *cl) which needs cmdline as the parameter to restore original terminal setting. Setting a global value will be too ugly to me. BRs Xiaoyun > -----Original Message----- > From: stable <stable-bounces@dpdk.org> On Behalf Of Xing, Beilei > Sent: Friday, January 15, 2021 13:50 > To: Yu, DapengX <dapengx.yu@intel.com>; Lu, Wenzhuo > <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com> > Cc: Stephen Hemminger <stephen@networkplumber.org>; dev@dpdk.org; > stable@dpdk.org > Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without > resource release > > > -----Original Message----- > > From: Yu, DapengX <dapengx.yu@intel.com> > > Sent: Friday, January 15, 2021 11:29 AM > > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; Iremonger, Bernard > > <bernard.iremonger@intel.com> > > Cc: Yu, DapengX <dapengx.yu@intel.com>; Stephen Hemminger > > <stephen@networkplumber.org>; dev@dpdk.org; stable@dpdk.org > > Subject: RE: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > > resource release > > > > Hi Wenzhuo, Beilei, Bernard > > > > I need testpmd app maintainers' comment : > > Do you prefer the simple solution in this patch or Stephen's > > comprehensive and generic solution(which will modify librte_cmdline, > > testpmd (and maybe rte_exit()))? > > The patch just workarounds a specific case, the issue exits in many cases, such > as Rxonly mode and Rxq is 0. > So It's better to investigate how to solve the generic problem according to > Stephen's comments. > > > So I can continue resolving the defect. > > > > Thanks! > > > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yu, DapengX > > Sent: Friday, December 25, 2020 1:09 PM > > To: Stephen Hemminger <stephen@networkplumber.org> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; Iremonger, Bernard > > <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > > resource release > > > > Hi Stephen, > > > > Do you mean this solution? > > 1. support atexit() in librte_eal, other component can use it to > > register a function to be called when rte_exit() is called. > > 2. in librte_cmdline, use atexit() to register a function to release > > resource > > > > I am looking forward to more comments from other maintainers, since > > this solution will modify librte_eal and librte_cmdline, but not just testpmd app. > > > > > > -----Original Message----- > > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > > Sent: Friday, December 25, 2020 11:03 AM > > To: Yu, DapengX <dapengx.yu@intel.com> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; Iremonger, Bernard > > <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > > resource release > > > > On Thu, 24 Dec 2020 11:57:48 +0800 > > dapengx.yu@intel.com wrote: > > > > > From: YU DAPENG <dapengx.yu@intel.com> > > > > > > In interactive mode, if testpmd exit by calling rte_exit without > > > cmdline resource release, terminal will not echo keyboard input. So > > > add code to just show error message, but not exit testpmd when > > > unexpected happens on starting packet forwarding in interactive > > > mode. User > > can type "quit" > > > to exit testpmd later. > > > > > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > > > configuration") > > > Cc: stable@dpdk.org > > > > > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> > > > > Sounds like a more generic problem with rte_exit and librte_cmdline. > > Would it better to fix it in librte_cmdline by adding an atexit() handler. > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release 2021-01-15 9:21 ` Li, Xiaoyun @ 2021-01-18 11:47 ` Yu, DapengX 0 siblings, 0 replies; 14+ messages in thread From: Yu, DapengX @ 2021-01-18 11:47 UTC (permalink / raw) To: Li, Xiaoyun, Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard, Stephen Hemminger Cc: dev, stable @Stephen Hemminger Xiaoyun proposed a solution which may match your idea, but there are some concerns: 1. a global variable for original terminal setting has to be defined. 2. in each app which uses cmdline, a function has to be registered with atexit() in prompt() to restore original terminal setting. @Stephen Hemminger, can you give some feedback on these concerns? Thanks! -----Original Message----- From: Li, Xiaoyun Sent: Friday, January 15, 2021 5:22 PM To: Xing, Beilei <beilei.xing@intel.com>; Yu, DapengX <dapengx.yu@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; Stephen Hemminger <stephen@networkplumber.org> Cc: dev@dpdk.org; stable@dpdk.org Subject: RE: [dpdk-dev] [PATCH] app/testpmd: avoid exit without resource release Hi Actually, you can just type "stty echo" to solve the problem you met. But anyway, if you want to fix it in DPDK I think you misunderstood stephan's solution. You don't need to implement atexit() yourself in eal. It's a common function like exit() in rte_exit(). Then when exit() is called. Each function registered by atexit() will be called in stack order. The simplest way to solve this problem is to register a function with atexit() in prompt() in each app which uses cmdline. Then when exit() in rte_exit() is called, the registered clean function will be called directly. Registering in prompt() is because that prompt() is the function which starts cmdline in each app. @Stephen Hemminger What do you think of this about atexit() in prompt() in each app? I understand it's cmdline and rte_exit problem. But atexit needs a function without parameters. And the cleanup for cmdline is cmdline_stdin_exit(struct cmdline *cl) which needs cmdline as the parameter to restore original terminal setting. Setting a global value will be too ugly to me. BRs Xiaoyun > -----Original Message----- > From: stable <stable-bounces@dpdk.org> On Behalf Of Xing, Beilei > Sent: Friday, January 15, 2021 13:50 > To: Yu, DapengX <dapengx.yu@intel.com>; Lu, Wenzhuo > <wenzhuo.lu@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com> > Cc: Stephen Hemminger <stephen@networkplumber.org>; dev@dpdk.org; > stable@dpdk.org > Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] app/testpmd: avoid exit > without resource release > > > -----Original Message----- > > From: Yu, DapengX <dapengx.yu@intel.com> > > Sent: Friday, January 15, 2021 11:29 AM > > To: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; Iremonger, Bernard > > <bernard.iremonger@intel.com> > > Cc: Yu, DapengX <dapengx.yu@intel.com>; Stephen Hemminger > > <stephen@networkplumber.org>; dev@dpdk.org; stable@dpdk.org > > Subject: RE: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > > resource release > > > > Hi Wenzhuo, Beilei, Bernard > > > > I need testpmd app maintainers' comment : > > Do you prefer the simple solution in this patch or Stephen's > > comprehensive and generic solution(which will modify librte_cmdline, > > testpmd (and maybe rte_exit()))? > > The patch just workarounds a specific case, the issue exits in many > cases, such as Rxonly mode and Rxq is 0. > So It's better to investigate how to solve the generic problem > according to Stephen's comments. > > > So I can continue resolving the defect. > > > > Thanks! > > > > -----Original Message----- > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Yu, DapengX > > Sent: Friday, December 25, 2020 1:09 PM > > To: Stephen Hemminger <stephen@networkplumber.org> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; Iremonger, Bernard > > <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > > resource release > > > > Hi Stephen, > > > > Do you mean this solution? > > 1. support atexit() in librte_eal, other component can use it to > > register a function to be called when rte_exit() is called. > > 2. in librte_cmdline, use atexit() to register a function to release > > resource > > > > I am looking forward to more comments from other maintainers, since > > this solution will modify librte_eal and librte_cmdline, but not just testpmd app. > > > > > > -----Original Message----- > > From: Stephen Hemminger [mailto:stephen@networkplumber.org] > > Sent: Friday, December 25, 2020 11:03 AM > > To: Yu, DapengX <dapengx.yu@intel.com> > > Cc: Lu, Wenzhuo <wenzhuo.lu@intel.com>; Xing, Beilei > > <beilei.xing@intel.com>; Iremonger, Bernard > > <bernard.iremonger@intel.com>; dev@dpdk.org; stable@dpdk.org > > Subject: Re: [dpdk-dev] [PATCH] app/testpmd: avoid exit without > > resource release > > > > On Thu, 24 Dec 2020 11:57:48 +0800 > > dapengx.yu@intel.com wrote: > > > > > From: YU DAPENG <dapengx.yu@intel.com> > > > > > > In interactive mode, if testpmd exit by calling rte_exit without > > > cmdline resource release, terminal will not echo keyboard input. > > > So add code to just show error message, but not exit testpmd when > > > unexpected happens on starting packet forwarding in interactive > > > mode. User > > can type "quit" > > > to exit testpmd later. > > > > > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > > > configuration") > > > Cc: stable@dpdk.org > > > > > > Signed-off-by: YU DAPENG <dapengx.yu@intel.com> > > > > Sounds like a more generic problem with rte_exit and librte_cmdline. > > Would it better to fix it in librte_cmdline by adding an atexit() handler. > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore 2020-12-24 3:57 [dpdk-stable] [PATCH] app/testpmd: avoid exit without resource release dapengx.yu 2020-12-25 3:03 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger @ 2021-01-25 3:29 ` dapengx.yu 2021-01-26 6:33 ` Li, Xiaoyun 1 sibling, 1 reply; 14+ messages in thread From: dapengx.yu @ 2021-01-25 3:29 UTC (permalink / raw) To: beilei.xing, xiaoyun.li, wenzhuo.lu, bernard.iremonger, stephen Cc: dev, Dapeng Yu, stable From: Dapeng Yu <dapengx.yu@intel.com> In interactive mode, if testpmd exit by calling rte_exit without restore terminal attributes, terminal will not echo keyboard input. register a function with atexit() in prompt(), when exit() in rte_exit() is called, the registered function restores terminal attributes. Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional configuration") Cc: stable@dpdk.org Signed-off-by: Dapeng Yu <dapengx.yu@intel.com> --- app/test-pmd/cmdline.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index 89034c8b7..f7e18ba3d 100644 --- a/app/test-pmd/cmdline.c +++ b/app/test-pmd/cmdline.c @@ -17116,6 +17116,7 @@ cmdline_read_from_file(const char *filename) void prompt(void) { + int ret; /* initialize non-constant commands */ cmd_set_fwd_mode_init(); cmd_set_fwd_retry_mode_init(); @@ -17123,15 +17124,23 @@ prompt(void) testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> "); if (testpmd_cl == NULL) return; + + ret = atexit(prompt_exit); + if (ret != 0) + printf("Cannot set exit function for cmdline\n"); + cmdline_interact(testpmd_cl); - cmdline_stdin_exit(testpmd_cl); + if (ret != 0) + cmdline_stdin_exit(testpmd_cl); } void prompt_exit(void) { - if (testpmd_cl != NULL) + if (testpmd_cl != NULL) { cmdline_quit(testpmd_cl); + cmdline_stdin_exit(testpmd_cl); + } } static void -- 2.27.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore 2021-01-25 3:29 ` [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore dapengx.yu @ 2021-01-26 6:33 ` Li, Xiaoyun 2021-01-26 7:13 ` Yu, DapengX 2021-01-26 7:44 ` Yu, DapengX 0 siblings, 2 replies; 14+ messages in thread From: Li, Xiaoyun @ 2021-01-26 6:33 UTC (permalink / raw) To: Yu, DapengX, Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard, stephen Cc: dev, Yu, DapengX, stable Hi > -----Original Message----- > From: dapengx.yu@intel.com <dapengx.yu@intel.com> > Sent: Monday, January 25, 2021 11:30 > To: Xing, Beilei <beilei.xing@intel.com>; Li, Xiaoyun <xiaoyun.li@intel.com>; Lu, > Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com>; stephen@networkplumber.org > Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org > Subject: [PATCH v2] app/testpmd: avoid exit without terminal restore > > From: Dapeng Yu <dapengx.yu@intel.com> > > In interactive mode, if testpmd exit by calling rte_exit without restore terminal > attributes, terminal will not echo keyboard input. > > register a function with atexit() in prompt(), when exit() in > rte_exit() is called, the registered function restores terminal attributes. > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional configuration") > Cc: stable@dpdk.org > > Signed-off-by: Dapeng Yu <dapengx.yu@intel.com> > --- > app/test-pmd/cmdline.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > 89034c8b7..f7e18ba3d 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -17116,6 +17116,7 @@ cmdline_read_from_file(const char *filename) > void > prompt(void) > { > + int ret; > /* initialize non-constant commands */ > cmd_set_fwd_mode_init(); > cmd_set_fwd_retry_mode_init(); > @@ -17123,15 +17124,23 @@ prompt(void) > testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> "); > if (testpmd_cl == NULL) > return; > + > + ret = atexit(prompt_exit); > + if (ret != 0) > + printf("Cannot set exit function for cmdline\n"); > + > cmdline_interact(testpmd_cl); > - cmdline_stdin_exit(testpmd_cl); > + if (ret != 0) Why do you need to check ret here? Even if registers prompt_exit failed, when users type "quit" and then break from cmdline_interact(), cmdline_stdin_exit() should be called to restore terminal settings. > + cmdline_stdin_exit(testpmd_cl); > } > > void > prompt_exit(void) > { > - if (testpmd_cl != NULL) > + if (testpmd_cl != NULL) { > cmdline_quit(testpmd_cl); > + cmdline_stdin_exit(testpmd_cl); > + } > } > > static void > -- > 2.27.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore 2021-01-26 6:33 ` Li, Xiaoyun @ 2021-01-26 7:13 ` Yu, DapengX 2021-01-26 7:44 ` Yu, DapengX 1 sibling, 0 replies; 14+ messages in thread From: Yu, DapengX @ 2021-01-26 7:13 UTC (permalink / raw) To: Li, Xiaoyun, Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard, stephen Cc: dev, stable Hi Xiaoyun, For this situation: registering prompt_exit succeed, and user type "quit" command to exit testpmd. If the second call to cmdline_stdin_exit is not excluded from the code conditionally, the cmdline_stdin_exit will be called twice; 1. the first time: in prompt() #0 cmdline_stdin_exit (cl=0x3638470) at ../lib/librte_cmdline/cmdline_socket.c:56 #1 0x000000000051fb62 in prompt () at ../app/test-pmd/cmdline.c:17134 #2 0x00000000005a4d0f in main (argc=2, argv=0x7fffffffda70) at ../app/test-pmd/testpmd.c:3849 2. the second time: in exit() . #0 cmdline_stdin_exit (cl=0x3638470) at ../lib/librte_cmdline/cmdline_socket.c:56 #1 0x000000000051fb95 in prompt_exit () at ../app/test-pmd/cmdline.c:17142 #2 0x00007ffff630fe9c in __run_exit_handlers () from /lib64/libc.so.6 #3 0x00007ffff630ffd0 in exit () from /lib64/libc.so.6 #4 0x00007ffff62f96aa in __libc_start_main () from /lib64/libc.so.6 #5 0x00000000004ead2e in _start () -----Original Message----- From: Li, Xiaoyun Sent: Tuesday, January 26, 2021 2:33 PM To: Yu, DapengX <dapengx.yu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore Hi > -----Original Message----- > From: dapengx.yu@intel.com <dapengx.yu@intel.com> > Sent: Monday, January 25, 2021 11:30 > To: Xing, Beilei <beilei.xing@intel.com>; Li, Xiaoyun > <xiaoyun.li@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, > Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org > Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org > Subject: [PATCH v2] app/testpmd: avoid exit without terminal restore > > From: Dapeng Yu <dapengx.yu@intel.com> > > In interactive mode, if testpmd exit by calling rte_exit without > restore terminal attributes, terminal will not echo keyboard input. > > register a function with atexit() in prompt(), when exit() in > rte_exit() is called, the registered function restores terminal attributes. > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > configuration") > Cc: stable@dpdk.org > > Signed-off-by: Dapeng Yu <dapengx.yu@intel.com> > --- > app/test-pmd/cmdline.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > 89034c8b7..f7e18ba3d 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -17116,6 +17116,7 @@ cmdline_read_from_file(const char *filename) > void > prompt(void) > { > +int ret; > /* initialize non-constant commands */ cmd_set_fwd_mode_init(); > cmd_set_fwd_retry_mode_init(); @@ -17123,15 +17124,23 @@ prompt(void) > testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> "); if (testpmd_cl > == NULL) return; > + > +ret = atexit(prompt_exit); > +if (ret != 0) > +printf("Cannot set exit function for cmdline\n"); > + > cmdline_interact(testpmd_cl); > -cmdline_stdin_exit(testpmd_cl); > +if (ret != 0) Why do you need to check ret here? Even if registers prompt_exit failed, when users type "quit" and then break from cmdline_interact(), cmdline_stdin_exit() should be called to restore terminal settings. > +cmdline_stdin_exit(testpmd_cl); > } > > void > prompt_exit(void) > { > -if (testpmd_cl != NULL) > +if (testpmd_cl != NULL) { > cmdline_quit(testpmd_cl); > +cmdline_stdin_exit(testpmd_cl); > +} > } > > static void > -- > 2.27.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore 2021-01-26 6:33 ` Li, Xiaoyun 2021-01-26 7:13 ` Yu, DapengX @ 2021-01-26 7:44 ` Yu, DapengX 2021-01-26 8:24 ` Li, Xiaoyun 1 sibling, 1 reply; 14+ messages in thread From: Yu, DapengX @ 2021-01-26 7:44 UTC (permalink / raw) To: Li, Xiaoyun, Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard, stephen Cc: dev, stable @Xiaoyun, Add one more explanation. even if registers prompt_exit failed, when users type "quit" and then break from cmdline_interact(), the ret check will not prevent cmdline_stdin_exit() to be called to restore terminal settings in this patch. @Beilei Can you give comment on this patch v2, so I can move on to resolve this issue related with this patch. -----Original Message----- From: Yu, DapengX Sent: Tuesday, January 26, 2021 3:13 PM To: Li, Xiaoyun <xiaoyun.li@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org Cc: dev@dpdk.org; stable@dpdk.org Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore Hi Xiaoyun, For this situation: registering prompt_exit succeed, and user type "quit" command to exit testpmd. If the second call to cmdline_stdin_exit is not excluded from the code conditionally, the cmdline_stdin_exit will be called twice; 1. the first time: in prompt() #0 cmdline_stdin_exit (cl=0x3638470) at ../lib/librte_cmdline/cmdline_socket.c:56 #1 0x000000000051fb62 in prompt () at ../app/test-pmd/cmdline.c:17134 #2 0x00000000005a4d0f in main (argc=2, argv=0x7fffffffda70) at ../app/test-pmd/testpmd.c:3849 2. the second time: in exit() . #0 cmdline_stdin_exit (cl=0x3638470) at ../lib/librte_cmdline/cmdline_socket.c:56 #1 0x000000000051fb95 in prompt_exit () at ../app/test-pmd/cmdline.c:17142 #2 0x00007ffff630fe9c in __run_exit_handlers () from /lib64/libc.so.6 #3 0x00007ffff630ffd0 in exit () from /lib64/libc.so.6 #4 0x00007ffff62f96aa in __libc_start_main () from /lib64/libc.so.6 #5 0x00000000004ead2e in _start () -----Original Message----- From: Li, Xiaoyun Sent: Tuesday, January 26, 2021 2:33 PM To: Yu, DapengX <dapengx.yu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore Hi > -----Original Message----- > From: dapengx.yu@intel.com <dapengx.yu@intel.com> > Sent: Monday, January 25, 2021 11:30 > To: Xing, Beilei <beilei.xing@intel.com>; Li, Xiaoyun > <xiaoyun.li@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, > Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org > Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org > Subject: [PATCH v2] app/testpmd: avoid exit without terminal restore > > From: Dapeng Yu <dapengx.yu@intel.com> > > In interactive mode, if testpmd exit by calling rte_exit without > restore terminal attributes, terminal will not echo keyboard input. > > register a function with atexit() in prompt(), when exit() in > rte_exit() is called, the registered function restores terminal attributes. > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > configuration") > Cc: stable@dpdk.org > > Signed-off-by: Dapeng Yu <dapengx.yu@intel.com> > --- > app/test-pmd/cmdline.c | 13 +++++++++++-- > 1 file changed, 11 insertions(+), 2 deletions(-) > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > 89034c8b7..f7e18ba3d 100644 > --- a/app/test-pmd/cmdline.c > +++ b/app/test-pmd/cmdline.c > @@ -17116,6 +17116,7 @@ cmdline_read_from_file(const char *filename) > void > prompt(void) > { > +int ret; > /* initialize non-constant commands */ cmd_set_fwd_mode_init(); > cmd_set_fwd_retry_mode_init(); @@ -17123,15 +17124,23 @@ prompt(void) > testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> "); if (testpmd_cl > == NULL) return; > + > +ret = atexit(prompt_exit); > +if (ret != 0) > +printf("Cannot set exit function for cmdline\n"); > + > cmdline_interact(testpmd_cl); > -cmdline_stdin_exit(testpmd_cl); > +if (ret != 0) Why do you need to check ret here? Even if registers prompt_exit failed, when users type "quit" and then break from cmdline_interact(), cmdline_stdin_exit() should be called to restore terminal settings. > +cmdline_stdin_exit(testpmd_cl); > } > > void > prompt_exit(void) > { > -if (testpmd_cl != NULL) > +if (testpmd_cl != NULL) { > cmdline_quit(testpmd_cl); > +cmdline_stdin_exit(testpmd_cl); > +} > } > > static void > -- > 2.27.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore 2021-01-26 7:44 ` Yu, DapengX @ 2021-01-26 8:24 ` Li, Xiaoyun 2021-01-29 10:46 ` Ferruh Yigit 0 siblings, 1 reply; 14+ messages in thread From: Li, Xiaoyun @ 2021-01-26 8:24 UTC (permalink / raw) To: Yu, DapengX, Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard, stephen Cc: dev, stable Acked-by: Xiaoyun Li <xiaoyun.li@intel.com> > -----Original Message----- > From: Yu, DapengX <dapengx.yu@intel.com> > Sent: Tuesday, January 26, 2021 15:44 > To: Li, Xiaoyun <xiaoyun.li@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Lu, > Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com>; stephen@networkplumber.org > Cc: dev@dpdk.org; stable@dpdk.org > Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore > > @Xiaoyun, > Add one more explanation. > even if registers prompt_exit failed, when users type "quit" and then break from > cmdline_interact(), the ret check will not prevent cmdline_stdin_exit() to be > called to restore terminal settings in this patch. > > @Beilei > Can you give comment on this patch v2, so I can move on to resolve this issue > related with this patch. > > -----Original Message----- > From: Yu, DapengX > Sent: Tuesday, January 26, 2021 3:13 PM > To: Li, Xiaoyun <xiaoyun.li@intel.com>; Xing, Beilei <beilei.xing@intel.com>; Lu, > Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com>; stephen@networkplumber.org > Cc: dev@dpdk.org; stable@dpdk.org > Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore > > Hi Xiaoyun, > > For this situation: registering prompt_exit succeed, and user type "quit" > command to exit testpmd. > > If the second call to cmdline_stdin_exit is not excluded from the code > conditionally, the cmdline_stdin_exit will be called twice; > > 1. the first time: in prompt() > #0 cmdline_stdin_exit (cl=0x3638470) > at ../lib/librte_cmdline/cmdline_socket.c:56 > #1 0x000000000051fb62 in prompt () at ../app/test-pmd/cmdline.c:17134 > #2 0x00000000005a4d0f in main (argc=2, argv=0x7fffffffda70) at ../app/test- > pmd/testpmd.c:3849 2. the second time: in exit() . > #0 cmdline_stdin_exit (cl=0x3638470) > at ../lib/librte_cmdline/cmdline_socket.c:56 > #1 0x000000000051fb95 in prompt_exit () at ../app/test- > pmd/cmdline.c:17142 > #2 0x00007ffff630fe9c in __run_exit_handlers () from /lib64/libc.so.6 > #3 0x00007ffff630ffd0 in exit () from /lib64/libc.so.6 > #4 0x00007ffff62f96aa in __libc_start_main () from /lib64/libc.so.6 > #5 0x00000000004ead2e in _start () > > -----Original Message----- > From: Li, Xiaoyun > Sent: Tuesday, January 26, 2021 2:33 PM > To: Yu, DapengX <dapengx.yu@intel.com>; Xing, Beilei <beilei.xing@intel.com>; > Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, Bernard > <bernard.iremonger@intel.com>; stephen@networkplumber.org > Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org > Subject: RE: [PATCH v2] app/testpmd: avoid exit without terminal restore > > Hi > > > -----Original Message----- > > From: dapengx.yu@intel.com <dapengx.yu@intel.com> > > Sent: Monday, January 25, 2021 11:30 > > To: Xing, Beilei <beilei.xing@intel.com>; Li, Xiaoyun > > <xiaoyun.li@intel.com>; Lu, Wenzhuo <wenzhuo.lu@intel.com>; Iremonger, > > Bernard <bernard.iremonger@intel.com>; stephen@networkplumber.org > > Cc: dev@dpdk.org; Yu, DapengX <dapengx.yu@intel.com>; stable@dpdk.org > > Subject: [PATCH v2] app/testpmd: avoid exit without terminal restore > > > > From: Dapeng Yu <dapengx.yu@intel.com> > > > > In interactive mode, if testpmd exit by calling rte_exit without > > restore terminal attributes, terminal will not echo keyboard input. > > > > register a function with atexit() in prompt(), when exit() in > > rte_exit() is called, the registered function restores terminal attributes. > > > > Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional > > configuration") > > Cc: stable@dpdk.org > > > > Signed-off-by: Dapeng Yu <dapengx.yu@intel.com> > > --- > > app/test-pmd/cmdline.c | 13 +++++++++++-- > > 1 file changed, 11 insertions(+), 2 deletions(-) > > > > diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c index > > 89034c8b7..f7e18ba3d 100644 > > --- a/app/test-pmd/cmdline.c > > +++ b/app/test-pmd/cmdline.c > > @@ -17116,6 +17116,7 @@ cmdline_read_from_file(const char *filename) > > void > > prompt(void) > > { > > +int ret; > > /* initialize non-constant commands */ cmd_set_fwd_mode_init(); > > cmd_set_fwd_retry_mode_init(); @@ -17123,15 +17124,23 @@ prompt(void) > > testpmd_cl = cmdline_stdin_new(main_ctx, "testpmd> "); if (testpmd_cl > > == NULL) return; > > + > > +ret = atexit(prompt_exit); > > +if (ret != 0) > > +printf("Cannot set exit function for cmdline\n"); > > + > > cmdline_interact(testpmd_cl); > > -cmdline_stdin_exit(testpmd_cl); > > +if (ret != 0) > > Why do you need to check ret here? > Even if registers prompt_exit failed, when users type "quit" and then break from > cmdline_interact(), cmdline_stdin_exit() should be called to restore terminal > settings. > > > +cmdline_stdin_exit(testpmd_cl); > > } > > > > void > > prompt_exit(void) > > { > > -if (testpmd_cl != NULL) > > +if (testpmd_cl != NULL) { > > cmdline_quit(testpmd_cl); > > +cmdline_stdin_exit(testpmd_cl); > > +} > > } > > > > static void > > -- > > 2.27.0 > > ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore 2021-01-26 8:24 ` Li, Xiaoyun @ 2021-01-29 10:46 ` Ferruh Yigit 0 siblings, 0 replies; 14+ messages in thread From: Ferruh Yigit @ 2021-01-29 10:46 UTC (permalink / raw) To: Li, Xiaoyun, Yu, DapengX, Xing, Beilei, Lu, Wenzhuo, Iremonger, Bernard, stephen Cc: dev, stable On 1/26/2021 8:24 AM, Li, Xiaoyun wrote: <...> >>> >>> From: Dapeng Yu <dapengx.yu@intel.com> >>> >>> In interactive mode, if testpmd exit by calling rte_exit without >>> restore terminal attributes, terminal will not echo keyboard input. >>> >>> register a function with atexit() in prompt(), when exit() in >>> rte_exit() is called, the registered function restores terminal attributes. >>> >>> Fixes: 5a8fb55c48ab ("app/testpmd: support unidirectional >>> configuration") >>> Cc: stable@dpdk.org >>> >>> Signed-off-by: Dapeng Yu <dapengx.yu@intel.com> > > Acked-by: Xiaoyun Li <xiaoyun.li@intel.com> > Applied to dpdk-next-net/main, thanks. ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-01-29 10:47 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-12-24 3:57 [dpdk-stable] [PATCH] app/testpmd: avoid exit without resource release dapengx.yu 2020-12-25 3:03 ` [dpdk-stable] [dpdk-dev] " Stephen Hemminger 2020-12-25 5:09 ` Yu, DapengX 2021-01-15 3:28 ` Yu, DapengX 2021-01-15 5:50 ` Xing, Beilei 2021-01-15 6:05 ` Yu, DapengX 2021-01-15 9:21 ` Li, Xiaoyun 2021-01-18 11:47 ` Yu, DapengX 2021-01-25 3:29 ` [dpdk-stable] [PATCH v2] app/testpmd: avoid exit without terminal restore dapengx.yu 2021-01-26 6:33 ` Li, Xiaoyun 2021-01-26 7:13 ` Yu, DapengX 2021-01-26 7:44 ` Yu, DapengX 2021-01-26 8:24 ` Li, Xiaoyun 2021-01-29 10:46 ` Ferruh Yigit
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).