DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 0/3] Handle SIGINT and SIGTERM in DPDK examples
@ 2015-12-23 20:03 Zhihong Wang
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd Zhihong Wang
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Zhihong Wang @ 2015-12-23 20:03 UTC (permalink / raw)
  To: dev

This patch handles SIGINT and SIGTERM in testpmd, l2fwd, and l3fwd, make sure all ports are properly stopped and closed.
For virtual ports, the stop and close function may deal with resource cleanup, such as socket files unlinking.

Zhihong Wang (3):
  app/test-pmd: Handle SIGINT and SIGTERM in testpmd
  examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd
  examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd

 app/test-pmd/testpmd.c | 23 +++++++++++++++++++++++
 examples/l2fwd/main.c  | 25 +++++++++++++++++++++++++
 examples/l3fwd/main.c  | 25 +++++++++++++++++++++++++
 3 files changed, 73 insertions(+)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd
  2015-12-23 20:03 [dpdk-dev] [PATCH 0/3] Handle SIGINT and SIGTERM in DPDK examples Zhihong Wang
@ 2015-12-23 20:03 ` Zhihong Wang
  2015-12-24  8:09   ` Qiu, Michael
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 2/3] examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd Zhihong Wang
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd Zhihong Wang
  2 siblings, 1 reply; 10+ messages in thread
From: Zhihong Wang @ 2015-12-23 20:03 UTC (permalink / raw)
  To: dev

Handle SIGINT and SIGTERM in testpmd.

Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
---
 app/test-pmd/testpmd.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 98ae46d..c259ba3 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1573,6 +1573,7 @@ pmd_test_exit(void)
 	FOREACH_PORT(pt_id, ports) {
 		printf("Stopping port %d...", pt_id);
 		fflush(stdout);
+		rte_eth_dev_stop(pt_id);
 		rte_eth_dev_close(pt_id);
 		printf("done\n");
 	}
@@ -1984,12 +1985,34 @@ init_port(void)
 		ports[pid].enabled = 1;
 }
 
+/* When we receive a INT signal, close all ports */
+static void
+sigint_handler(__rte_unused int signum)
+{
+	unsigned portid;
+
+	printf("Preparing to exit...\n");
+	FOREACH_PORT(portid, ports) {
+		if (port_id_is_invalid(portid, ENABLED_WARN))
+			continue;
+		printf("Stopping port %d...", portid);
+		rte_eth_dev_stop(portid);
+		rte_eth_dev_close(portid);
+		printf(" Done\n");
+	}
+	printf("Bye...\n");
+	exit(0);
+}
+
 int
 main(int argc, char** argv)
 {
 	int  diag;
 	uint8_t port_id;
 
+	signal(SIGINT, sigint_handler);
+	signal(SIGTERM, sigint_handler);
+
 	diag = rte_eal_init(argc, argv);
 	if (diag < 0)
 		rte_panic("Cannot init EAL\n");
-- 
2.5.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 2/3] examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd
  2015-12-23 20:03 [dpdk-dev] [PATCH 0/3] Handle SIGINT and SIGTERM in DPDK examples Zhihong Wang
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd Zhihong Wang
@ 2015-12-23 20:03 ` Zhihong Wang
  2015-12-24  8:12   ` Qiu, Michael
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd Zhihong Wang
  2 siblings, 1 reply; 10+ messages in thread
From: Zhihong Wang @ 2015-12-23 20:03 UTC (permalink / raw)
  To: dev

Handle SIGINT and SIGTERM in l2fwd.

Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
---
 examples/l2fwd/main.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/examples/l2fwd/main.c b/examples/l2fwd/main.c
index 720fd5a..0594037 100644
--- a/examples/l2fwd/main.c
+++ b/examples/l2fwd/main.c
@@ -44,6 +44,7 @@
 #include <ctype.h>
 #include <errno.h>
 #include <getopt.h>
+#include <signal.h>
 
 #include <rte_common.h>
 #include <rte_log.h>
@@ -534,6 +535,27 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
 	}
 }
 
+/* When we receive a INT signal, close all ports */
+static void
+sigint_handler(__rte_unused int signum)
+{
+	unsigned portid, nb_ports;
+
+	printf("Preparing to exit...\n");
+	nb_ports = rte_eth_dev_count();
+	for (portid = 0; portid < nb_ports; portid++) {
+		if ((l2fwd_enabled_port_mask & (1 << portid)) == 0) {
+			continue;
+		}
+		printf("Stopping port %d...", portid);
+		rte_eth_dev_stop(portid);
+		rte_eth_dev_close(portid);
+		printf(" Done\n");
+	}
+	printf("Bye...\n");
+	exit(0);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -546,6 +568,9 @@ main(int argc, char **argv)
 	unsigned lcore_id, rx_lcore_id;
 	unsigned nb_ports_in_mask = 0;
 
+	signal(SIGINT, sigint_handler);
+	signal(SIGTERM, sigint_handler);
+
 	/* init EAL */
 	ret = rte_eal_init(argc, argv);
 	if (ret < 0)
-- 
2.5.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd
  2015-12-23 20:03 [dpdk-dev] [PATCH 0/3] Handle SIGINT and SIGTERM in DPDK examples Zhihong Wang
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd Zhihong Wang
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 2/3] examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd Zhihong Wang
@ 2015-12-23 20:03 ` Zhihong Wang
  2015-12-24 11:13   ` Ananyev, Konstantin
       [not found]   ` <20151224095134.6eea3d4b@xeon-e3>
  2 siblings, 2 replies; 10+ messages in thread
From: Zhihong Wang @ 2015-12-23 20:03 UTC (permalink / raw)
  To: dev

Handle SIGINT and SIGTERM in l3fwd.

Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
---
 examples/l3fwd/main.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 5b0c2dd..aae16d2 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -41,6 +41,7 @@
 #include <stdarg.h>
 #include <errno.h>
 #include <getopt.h>
+#include <signal.h>
 
 #include <rte_common.h>
 #include <rte_vect.h>
@@ -2559,6 +2560,27 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
 	}
 }
 
+/* When we receive a INT signal, close all ports */
+static void
+sigint_handler(__rte_unused int signum)
+{
+	unsigned portid, nb_ports;
+
+	printf("Preparing to exit...\n");
+	nb_ports = rte_eth_dev_count();
+	for (portid = 0; portid < nb_ports; portid++) {
+		if ((enabled_port_mask & (1 << portid)) == 0) {
+			continue;
+		}
+		printf("Stopping port %d...", portid);
+		rte_eth_dev_stop(portid);
+		rte_eth_dev_close(portid);
+		printf(" Done\n");
+	}
+	printf("Bye...\n");
+	exit(0);
+}
+
 int
 main(int argc, char **argv)
 {
@@ -2572,6 +2594,9 @@ main(int argc, char **argv)
 	uint32_t n_tx_queue, nb_lcores;
 	uint8_t portid, nb_rx_queue, queue, socketid;
 
+	signal(SIGINT, sigint_handler);
+	signal(SIGTERM, sigint_handler);
+
 	/* init EAL */
 	ret = rte_eal_init(argc, argv);
 	if (ret < 0)
-- 
2.5.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd Zhihong Wang
@ 2015-12-24  8:09   ` Qiu, Michael
  2015-12-24 10:18     ` Wang, Zhihong
  0 siblings, 1 reply; 10+ messages in thread
From: Qiu, Michael @ 2015-12-24  8:09 UTC (permalink / raw)
  To: Wang, Zhihong, dev

On 12/24/2015 11:07 AM, Zhihong Wang wrote:
> Handle SIGINT and SIGTERM in testpmd.
>
> Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
> ---
>  app/test-pmd/testpmd.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)
>
> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
> index 98ae46d..c259ba3 100644
> --- a/app/test-pmd/testpmd.c
> +++ b/app/test-pmd/testpmd.c
> @@ -1573,6 +1573,7 @@ pmd_test_exit(void)
>  	FOREACH_PORT(pt_id, ports) {
>  		printf("Stopping port %d...", pt_id);
>  		fflush(stdout);
> +		rte_eth_dev_stop(pt_id);
>  		rte_eth_dev_close(pt_id);
>  		printf("done\n");
>  	}
> @@ -1984,12 +1985,34 @@ init_port(void)
>  		ports[pid].enabled = 1;
>  }
>  
> +/* When we receive a INT signal, close all ports */
> +static void
> +sigint_handler(__rte_unused int signum)
> +{
> +	unsigned portid;
> +
> +	printf("Preparing to exit...\n");

Better to notice user "Signal xxx received, reparing to exit... "

> +	FOREACH_PORT(portid, ports) {
> +		if (port_id_is_invalid(portid, ENABLED_WARN))
> +			continue;
> +		printf("Stopping port %d...", portid);
> +		rte_eth_dev_stop(portid);
> +		rte_eth_dev_close(portid);
> +		printf(" Done\n");
> +	}
> +	printf("Bye...\n");

Here why don't call pmd_test_exit()? Any issue with that func?

Thanks,
Michael
> +	exit(0);
> +}
> +
>  int
>  main(int argc, char** argv)
>  {
>  	int  diag;
>  	uint8_t port_id;
>  
> +	signal(SIGINT, sigint_handler);
> +	signal(SIGTERM, sigint_handler);
> +
>  	diag = rte_eal_init(argc, argv);
>  	if (diag < 0)
>  		rte_panic("Cannot init EAL\n");


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 2/3] examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 2/3] examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd Zhihong Wang
@ 2015-12-24  8:12   ` Qiu, Michael
  0 siblings, 0 replies; 10+ messages in thread
From: Qiu, Michael @ 2015-12-24  8:12 UTC (permalink / raw)
  To: Wang, Zhihong, dev

On 12/24/2015 11:07 AM, Zhihong Wang wrote:
> Handle SIGINT and SIGTERM in l2fwd.
>
> Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
> ---
>  examples/l2fwd/main.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/examples/l2fwd/main.c b/examples/l2fwd/main.c
> index 720fd5a..0594037 100644
> --- a/examples/l2fwd/main.c
> +++ b/examples/l2fwd/main.c
> @@ -44,6 +44,7 @@
>  #include <ctype.h>
>  #include <errno.h>
>  #include <getopt.h>
> +#include <signal.h>
>  
>  #include <rte_common.h>
>  #include <rte_log.h>
> @@ -534,6 +535,27 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
>  	}
>  }
>  
> +/* When we receive a INT signal, close all ports */
> +static void
> +sigint_handler(__rte_unused int signum)
> +{
> +	unsigned portid, nb_ports;
> +
> +	printf("Preparing to exit...\n");

Same here and l3fwd, better to show the reason of this exit.

Thanks,
Michael
> +	nb_ports = rte_eth_dev_count();
> +	for (portid = 0; portid < nb_ports; portid++) {
> +		if ((l2fwd_enabled_port_mask & (1 << portid)) == 0) {
> +			continue;
> +		}
> +		printf("Stopping port %d...", portid);
> +		rte_eth_dev_stop(portid);
> +		rte_eth_dev_close(portid);
> +		printf(" Done\n");
> +	}
> +	printf("Bye...\n");
> +	exit(0);
> +}
> +
>  int
>  main(int argc, char **argv)
>  {
> @@ -546,6 +568,9 @@ main(int argc, char **argv)
>  	unsigned lcore_id, rx_lcore_id;
>  	unsigned nb_ports_in_mask = 0;
>  
> +	signal(SIGINT, sigint_handler);
> +	signal(SIGTERM, sigint_handler);
> +
>  	/* init EAL */
>  	ret = rte_eal_init(argc, argv);
>  	if (ret < 0)


^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd
  2015-12-24  8:09   ` Qiu, Michael
@ 2015-12-24 10:18     ` Wang, Zhihong
  0 siblings, 0 replies; 10+ messages in thread
From: Wang, Zhihong @ 2015-12-24 10:18 UTC (permalink / raw)
  To: Qiu, Michael, dev

> > +/* When we receive a INT signal, close all ports */ static void
> > +sigint_handler(__rte_unused int signum) {
> > +	unsigned portid;
> > +
> > +	printf("Preparing to exit...\n");
> 
> Better to notice user "Signal xxx received, reparing to exit... "

Can do that.

> 
> > +	FOREACH_PORT(portid, ports) {
> > +		if (port_id_is_invalid(portid, ENABLED_WARN))
> > +			continue;
> > +		printf("Stopping port %d...", portid);
> > +		rte_eth_dev_stop(portid);
> > +		rte_eth_dev_close(portid);
> > +		printf(" Done\n");
> > +	}
> > +	printf("Bye...\n");
> 
> Here why don't call pmd_test_exit()? Any issue with that func?

Yes should just call this one :)

> 
> Thanks,
> Michael
> > +	exit(0);
> > +}
> > +
> >  int
> >  main(int argc, char** argv)
> >  {
> >  	int  diag;
> >  	uint8_t port_id;
> >
> > +	signal(SIGINT, sigint_handler);
> > +	signal(SIGTERM, sigint_handler);
> > +
> >  	diag = rte_eal_init(argc, argv);
> >  	if (diag < 0)
> >  		rte_panic("Cannot init EAL\n");

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd
  2015-12-23 20:03 ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd Zhihong Wang
@ 2015-12-24 11:13   ` Ananyev, Konstantin
  2015-12-25  9:17     ` Wang, Zhihong
       [not found]   ` <20151224095134.6eea3d4b@xeon-e3>
  1 sibling, 1 reply; 10+ messages in thread
From: Ananyev, Konstantin @ 2015-12-24 11:13 UTC (permalink / raw)
  To: Wang, Zhihong, dev


Hi,

> -----Original Message-----
> From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Zhihong Wang
> Sent: Wednesday, December 23, 2015 8:03 PM
> To: dev@dpdk.org
> Subject: [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd
> 
> Handle SIGINT and SIGTERM in l3fwd.
> 
> Signed-off-by: Zhihong Wang <zhihong.wang@intel.com>
> ---
>  examples/l3fwd/main.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
> index 5b0c2dd..aae16d2 100644
> --- a/examples/l3fwd/main.c
> +++ b/examples/l3fwd/main.c
> @@ -41,6 +41,7 @@
>  #include <stdarg.h>
>  #include <errno.h>
>  #include <getopt.h>
> +#include <signal.h>
> 
>  #include <rte_common.h>
>  #include <rte_vect.h>
> @@ -2559,6 +2560,27 @@ check_all_ports_link_status(uint8_t port_num, uint32_t port_mask)
>  	}
>  }
> 
> +/* When we receive a INT signal, close all ports */
> +static void
> +sigint_handler(__rte_unused int signum)
> +{
> +	unsigned portid, nb_ports;
> +
> +	printf("Preparing to exit...\n");
> +	nb_ports = rte_eth_dev_count();
> +	for (portid = 0; portid < nb_ports; portid++) {
> +		if ((enabled_port_mask & (1 << portid)) == 0) {
> +			continue;
> +		}
> +		printf("Stopping port %d...", portid);
> +		rte_eth_dev_stop(portid);
> +		rte_eth_dev_close(portid);

Hmm, so your interrupt thread invokes dev_stop,
while IO lcores keep calling rx_burst/tx_burst? 
For graceful shutdown on SIGINT, I suppose you first have to
stop your IO lcores first.
Let say have a global var: 'stop' that every lcore has to check from
time to time (or something similar).
Konstantin

> +		printf(" Done\n");
> +	}
> +	printf("Bye...\n");
> +	exit(0);
> +}
> +
>  int
>  main(int argc, char **argv)
>  {
> @@ -2572,6 +2594,9 @@ main(int argc, char **argv)
>  	uint32_t n_tx_queue, nb_lcores;
>  	uint8_t portid, nb_rx_queue, queue, socketid;
> 
> +	signal(SIGINT, sigint_handler);
> +	signal(SIGTERM, sigint_handler);
> +
>  	/* init EAL */
>  	ret = rte_eal_init(argc, argv);
>  	if (ret < 0)
> --
> 2.5.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd
  2015-12-24 11:13   ` Ananyev, Konstantin
@ 2015-12-25  9:17     ` Wang, Zhihong
  0 siblings, 0 replies; 10+ messages in thread
From: Wang, Zhihong @ 2015-12-25  9:17 UTC (permalink / raw)
  To: Ananyev, Konstantin, dev

> > +/* When we receive a INT signal, close all ports */ static void
> > +sigint_handler(__rte_unused int signum) {
> > +	unsigned portid, nb_ports;
> > +
> > +	printf("Preparing to exit...\n");
> > +	nb_ports = rte_eth_dev_count();
> > +	for (portid = 0; portid < nb_ports; portid++) {
> > +		if ((enabled_port_mask & (1 << portid)) == 0) {
> > +			continue;
> > +		}
> > +		printf("Stopping port %d...", portid);
> > +		rte_eth_dev_stop(portid);
> > +		rte_eth_dev_close(portid);
> 
> Hmm, so your interrupt thread invokes dev_stop, while IO lcores keep calling
> rx_burst/tx_burst?
> For graceful shutdown on SIGINT, I suppose you first have to stop your IO lcores
> first.
> Let say have a global var: 'stop' that every lcore has to check from time to time (or
> something similar).

Thanks for the advice! This works once the program enters the forwarding phase.
Have to go the other way if it's still in initialization phase which can take quite some time.

/Zhihong

> Konstantin
> 
> > +		printf(" Done\n");
> > +	}
> > +	printf("Bye...\n");
> > +	exit(0);
> > +}
> > +
> >  int
> >  main(int argc, char **argv)
> >  {
> > @@ -2572,6 +2594,9 @@ main(int argc, char **argv)
> >  	uint32_t n_tx_queue, nb_lcores;
> >  	uint8_t portid, nb_rx_queue, queue, socketid;
> >
> > +	signal(SIGINT, sigint_handler);
> > +	signal(SIGTERM, sigint_handler);
> > +
> >  	/* init EAL */
> >  	ret = rte_eal_init(argc, argv);
> >  	if (ret < 0)
> > --
> > 2.5.0

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd
       [not found]   ` <20151224095134.6eea3d4b@xeon-e3>
@ 2015-12-25  9:23     ` Wang, Zhihong
  0 siblings, 0 replies; 10+ messages in thread
From: Wang, Zhihong @ 2015-12-25  9:23 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev

> On Wed, 23 Dec 2015 15:03:15 -0500
> Zhihong Wang <zhihong.wang@intel.com> wrote:
> 
> > +/* When we receive a INT signal, close all ports */ static void
> > +sigint_handler(__rte_unused int signum) {
> > +	unsigned portid, nb_ports;
> > +
> > +	printf("Preparing to exit...\n");
> > +	nb_ports = rte_eth_dev_count();
> > +	for (portid = 0; portid < nb_ports; portid++) {
> > +		if ((enabled_port_mask & (1 << portid)) == 0) {
> > +			continue;
> > +		}
> > +		printf("Stopping port %d...", portid);
> > +		rte_eth_dev_stop(portid);
> > +		rte_eth_dev_close(portid);
> > +		printf(" Done\n");
> > +	}
> > +	printf("Bye...\n");
> > +	exit(0);
> > +}
> 
> Signal handlers should only set a flag, which is then checked by thread loops.
> Calling functions in DPDK from signal handlers is not safe.

I'll make changes in v2 to address this issue. Thanks for pointing out :)
In some cases signal handler have to do the exit though, like when the program is still doing memory initialization and will take some time.

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-12-25  9:23 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-23 20:03 [dpdk-dev] [PATCH 0/3] Handle SIGINT and SIGTERM in DPDK examples Zhihong Wang
2015-12-23 20:03 ` [dpdk-dev] [PATCH 1/3] app/test-pmd: Handle SIGINT and SIGTERM in testpmd Zhihong Wang
2015-12-24  8:09   ` Qiu, Michael
2015-12-24 10:18     ` Wang, Zhihong
2015-12-23 20:03 ` [dpdk-dev] [PATCH 2/3] examples/l2fwd: Handle SIGINT and SIGTERM in l2fwd Zhihong Wang
2015-12-24  8:12   ` Qiu, Michael
2015-12-23 20:03 ` [dpdk-dev] [PATCH 3/3] examples/l3fwd: Handle SIGINT and SIGTERM in l3fwd Zhihong Wang
2015-12-24 11:13   ` Ananyev, Konstantin
2015-12-25  9:17     ` Wang, Zhihong
     [not found]   ` <20151224095134.6eea3d4b@xeon-e3>
2015-12-25  9:23     ` Wang, Zhihong

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).