DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed
@ 2020-04-08 15:56 Anatoly Burakov
  2020-04-08 15:56 ` [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Anatoly Burakov @ 2020-04-08 15:56 UTC (permalink / raw)
  To: dev; +Cc: David Hunt, reshma.pattan

Currently, if power library initialization fails, only a log message is
displayed. This is suboptimal for a number of reasons, but the main one
is that telemetry mode does not depend on the power library and can
therefore run in environments where l3fwd-power would normally not run
correctly (such as inside a VM). This will lead to attempts to
deinitialize the power library on exit, with a subsequent forced unclean
shutdown of DPDK.

Fix this by only initializing the power library in modes that actually
need it, and change a log message to a failure to initialize.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 examples/l3fwd-power/main.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index c7fe0ec034..0e5fe42a64 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -2065,15 +2065,17 @@ static int check_ptype(uint16_t portid)
 static int
 init_power_library(void)
 {
-	int ret = 0, lcore_id;
-	for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
-		if (rte_lcore_is_enabled(lcore_id)) {
-			/* init power management library */
-			ret = rte_power_init(lcore_id);
-			if (ret)
-				RTE_LOG(ERR, POWER,
+	unsigned int lcore_id;
+	int ret = 0;
+
+	RTE_LCORE_FOREACH(lcore_id) {
+		/* init power management library */
+		ret = rte_power_init(lcore_id);
+		if (ret) {
+			RTE_LOG(ERR, POWER,
 				"Library initialization failed on core %u\n",
 				lcore_id);
+			return ret;
 		}
 	}
 	return ret;
@@ -2224,8 +2226,8 @@ main(int argc, char **argv)
 	if (ret < 0)
 		rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
 
-	if (init_power_library())
-		RTE_LOG(ERR, L3FWD_POWER, "init_power_library failed\n");
+	if (app_mode != APP_MODE_TELEMETRY && init_power_library())
+		rte_exit(EXIT_FAILURE, "init_power_library failed\n");
 
 	if (update_lcore_params() < 0)
 		rte_exit(EXIT_FAILURE, "update_lcore_params failed\n");
-- 
2.17.1

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

* [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling
  2020-04-08 15:56 [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Anatoly Burakov
@ 2020-04-08 15:56 ` Anatoly Burakov
  2020-04-09  8:44   ` Hunt, David
  2020-04-09  9:22   ` Pattan, Reshma
  2020-04-09  8:42 ` [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Hunt, David
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 11+ messages in thread
From: Anatoly Burakov @ 2020-04-08 15:56 UTC (permalink / raw)
  To: dev; +Cc: David Hunt, reshma.pattan

Currently, shutdown for l3fwd-power application is all over the place
and may or may not happen either in the signal handler or in the main()
function. Fix this so that the signal handler will only set the exit
variable, thereby allowing all of the loops to end properly and proceed
to deinitialize everything.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
---
 examples/l3fwd-power/main.c | 74 ++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 34 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index 0e5fe42a64..0fd80e9c1e 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -422,41 +422,10 @@ static int is_done(void)
 static void
 signal_exit_now(int sigtype)
 {
-	unsigned lcore_id;
-	unsigned int portid;
-	int ret;
 
-	if (sigtype == SIGINT) {
-		if (app_mode == APP_MODE_EMPTY_POLL ||
-				app_mode == APP_MODE_TELEMETRY)
-			quit_signal = true;
+	if (sigtype == SIGINT)
+		quit_signal = true;
 
-
-		for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
-			if (rte_lcore_is_enabled(lcore_id) == 0)
-				continue;
-
-			/* init power management library */
-			ret = rte_power_exit(lcore_id);
-			if (ret)
-				rte_exit(EXIT_FAILURE, "Power management "
-					"library de-initialization failed on "
-							"core%u\n", lcore_id);
-		}
-
-		if (app_mode != APP_MODE_EMPTY_POLL) {
-			RTE_ETH_FOREACH_DEV(portid) {
-				if ((enabled_port_mask & (1 << portid)) == 0)
-					continue;
-
-				rte_eth_dev_stop(portid);
-				rte_eth_dev_close(portid);
-			}
-		}
-	}
-
-	if (app_mode != APP_MODE_EMPTY_POLL)
-		rte_exit(EXIT_SUCCESS, "User forced exit\n");
 }
 
 /*  Freqency scale down timer callback */
@@ -1196,7 +1165,7 @@ main_loop(__attribute__((unused)) void *dummy)
 	else
 		RTE_LOG(INFO, L3FWD_POWER, "RX interrupt won't enable.\n");
 
-	while (1) {
+	while (!is_done()) {
 		stats[lcore_id].nb_iteration_looped++;
 
 		cur_tsc = rte_rdtsc();
@@ -1343,6 +1312,8 @@ main_loop(__attribute__((unused)) void *dummy)
 			stats[lcore_id].sleep_time += lcore_idle_hint;
 		}
 	}
+
+	return 0;
 }
 
 static int
@@ -2080,6 +2051,26 @@ init_power_library(void)
 	}
 	return ret;
 }
+
+static int
+deinit_power_library(void)
+{
+	unsigned int lcore_id;
+	int ret = 0;
+
+	RTE_LCORE_FOREACH(lcore_id) {
+		/* deinit power management library */
+		ret = rte_power_exit(lcore_id);
+		if (ret) {
+			RTE_LOG(ERR, POWER,
+				"Library deinitialization failed on core %u\n",
+				lcore_id);
+			return ret;
+		}
+	}
+	return ret;
+}
+
 static void
 update_telemetry(__attribute__((unused)) struct rte_timer *tim,
 		__attribute__((unused)) void *arg)
@@ -2530,8 +2521,23 @@ main(int argc, char **argv)
 			return -1;
 	}
 
+	RTE_ETH_FOREACH_DEV(portid)
+	{
+		if ((enabled_port_mask & (1 << portid)) == 0)
+			continue;
+
+		rte_eth_dev_stop(portid);
+		rte_eth_dev_close(portid);
+	}
+
 	if (app_mode == APP_MODE_EMPTY_POLL)
 		rte_power_empty_poll_stat_free();
 
+	if (app_mode != APP_MODE_TELEMETRY && deinit_power_library())
+		rte_exit(EXIT_FAILURE, "deinit_power_library failed\n");
+
+	if (rte_eal_cleanup() < 0)
+		RTE_LOG(ERR, L3FWD_POWER, "EAL cleanup failed\n");
+
 	return 0;
 }
-- 
2.17.1

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

* Re: [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed
  2020-04-08 15:56 [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Anatoly Burakov
  2020-04-08 15:56 ` [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
@ 2020-04-09  8:42 ` Hunt, David
  2020-04-09  9:23 ` Pattan, Reshma
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 11+ messages in thread
From: Hunt, David @ 2020-04-09  8:42 UTC (permalink / raw)
  To: Anatoly Burakov, dev; +Cc: reshma.pattan

Hi Anatoly,

On 8/4/2020 4:56 PM, Anatoly Burakov wrote:
> Currently, if power library initialization fails, only a log message is
> displayed. This is suboptimal for a number of reasons, but the main one
> is that telemetry mode does not depend on the power library and can
> therefore run in environments where l3fwd-power would normally not run
> correctly (such as inside a VM). This will lead to attempts to
> deinitialize the power library on exit, with a subsequent forced unclean
> shutdown of DPDK.
>
> Fix this by only initializing the power library in modes that actually
> need it, and change a log message to a failure to initialize.
>
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>   examples/l3fwd-power/main.c | 20 +++++++++++---------
>   1 file changed, 11 insertions(+), 9 deletions(-)
>

Acked-by: David Hunt <david.hunt@intel.com>



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

* Re: [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling
  2020-04-08 15:56 ` [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
@ 2020-04-09  8:44   ` Hunt, David
  2020-04-09  9:22   ` Pattan, Reshma
  1 sibling, 0 replies; 11+ messages in thread
From: Hunt, David @ 2020-04-09  8:44 UTC (permalink / raw)
  To: Anatoly Burakov, dev; +Cc: reshma.pattan

Hi Anatoly,


On 8/4/2020 4:56 PM, Anatoly Burakov wrote:
> Currently, shutdown for l3fwd-power application is all over the place
> and may or may not happen either in the signal handler or in the main()
> function. Fix this so that the signal handler will only set the exit
> variable, thereby allowing all of the loops to end properly and proceed
> to deinitialize everything.
>
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---
>   examples/l3fwd-power/main.c | 74 ++++++++++++++++++++-----------------
>   1 file changed, 40 insertions(+), 34 deletions(-)
>

Acked-by: David Hunt <david.hunt@intel.com>



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

* Re: [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling
  2020-04-08 15:56 ` [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
  2020-04-09  8:44   ` Hunt, David
@ 2020-04-09  9:22   ` Pattan, Reshma
  1 sibling, 0 replies; 11+ messages in thread
From: Pattan, Reshma @ 2020-04-09  9:22 UTC (permalink / raw)
  To: Burakov, Anatoly, dev; +Cc: Hunt, David



> -----Original Message-----
> From: Burakov, Anatoly <anatoly.burakov@intel.com>
> Subject: [PATCH 2/2] l3fwd-power: implement proper shutdown handling
> 
> Currently, shutdown for l3fwd-power application is all over the place and may or
> may not happen either in the signal handler or in the main() function. Fix this so
> that the signal handler will only set the exit variable, thereby allowing all of the
> loops to end properly and proceed to deinitialize everything.
> 

Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>

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

* Re: [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed
  2020-04-08 15:56 [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Anatoly Burakov
  2020-04-08 15:56 ` [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
  2020-04-09  8:42 ` [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Hunt, David
@ 2020-04-09  9:23 ` Pattan, Reshma
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 " Anatoly Burakov
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
  4 siblings, 0 replies; 11+ messages in thread
From: Pattan, Reshma @ 2020-04-09  9:23 UTC (permalink / raw)
  To: Burakov, Anatoly, dev; +Cc: Hunt, David



> -----Original Message-----
> From: Burakov, Anatoly <anatoly.burakov@intel.com>
> Subject: [PATCH 1/2] l3fwd-power: exit if initializing power library failed
> 
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> ---


Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>

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

* [dpdk-dev] [PATCH v2 1/2] l3fwd-power: exit if initializing power library failed
  2020-04-08 15:56 [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Anatoly Burakov
                   ` (2 preceding siblings ...)
  2020-04-09  9:23 ` Pattan, Reshma
@ 2020-04-20 17:56 ` Anatoly Burakov
  2020-04-28 11:19   ` Xie, WeiX
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
  4 siblings, 1 reply; 11+ messages in thread
From: Anatoly Burakov @ 2020-04-20 17:56 UTC (permalink / raw)
  To: dev; +Cc: David Hunt, reshma.pattan

Currently, if power library initialization fails, only a log message is
displayed. This is suboptimal for a number of reasons, but the main one
is that telemetry mode does not depend on the power library and can
therefore run in environments where l3fwd-power would normally not run
correctly (such as inside a VM). This will lead to attempts to
deinitialize the power library on exit, with a subsequent forced unclean
shutdown of DPDK.

Fix this by only initializing the power library in modes that actually
need it, and change a log message to a failure to initialize.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
---
 examples/l3fwd-power/main.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index b46aa7bac..be50ec049 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -2065,15 +2065,17 @@ static int check_ptype(uint16_t portid)
 static int
 init_power_library(void)
 {
-	int ret = 0, lcore_id;
-	for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
-		if (rte_lcore_is_enabled(lcore_id)) {
-			/* init power management library */
-			ret = rte_power_init(lcore_id);
-			if (ret)
-				RTE_LOG(ERR, POWER,
+	unsigned int lcore_id;
+	int ret = 0;
+
+	RTE_LCORE_FOREACH(lcore_id) {
+		/* init power management library */
+		ret = rte_power_init(lcore_id);
+		if (ret) {
+			RTE_LOG(ERR, POWER,
 				"Library initialization failed on core %u\n",
 				lcore_id);
+			return ret;
 		}
 	}
 	return ret;
@@ -2224,8 +2226,8 @@ main(int argc, char **argv)
 	if (ret < 0)
 		rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
 
-	if (init_power_library())
-		RTE_LOG(ERR, L3FWD_POWER, "init_power_library failed\n");
+	if (app_mode != APP_MODE_TELEMETRY && init_power_library())
+		rte_exit(EXIT_FAILURE, "init_power_library failed\n");
 
 	if (update_lcore_params() < 0)
 		rte_exit(EXIT_FAILURE, "update_lcore_params failed\n");
-- 
2.17.1

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

* [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling
  2020-04-08 15:56 [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Anatoly Burakov
                   ` (3 preceding siblings ...)
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 " Anatoly Burakov
@ 2020-04-20 17:56 ` Anatoly Burakov
  2020-04-26 21:52   ` Thomas Monjalon
  2020-04-28 11:19   ` Xie, WeiX
  4 siblings, 2 replies; 11+ messages in thread
From: Anatoly Burakov @ 2020-04-20 17:56 UTC (permalink / raw)
  To: dev; +Cc: David Hunt, reshma.pattan

Currently, shutdown for l3fwd-power application is all over the place
and may or may not happen either in the signal handler or in the main()
function. Fix this so that the signal handler will only set the exit
variable, thereby allowing all of the loops to end properly and proceed
to deinitialize everything.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
---

Notes:
    v2:
    - rebase on top of latest master

 examples/l3fwd-power/main.c | 74 ++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 34 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index be50ec049..293b3da4a 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -422,41 +422,10 @@ static int is_done(void)
 static void
 signal_exit_now(int sigtype)
 {
-	unsigned lcore_id;
-	unsigned int portid;
-	int ret;
-
-	if (sigtype == SIGINT) {
-		if (app_mode == APP_MODE_EMPTY_POLL ||
-				app_mode == APP_MODE_TELEMETRY)
-			quit_signal = true;
 
+	if (sigtype == SIGINT)
+		quit_signal = true;
 
-		for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
-			if (rte_lcore_is_enabled(lcore_id) == 0)
-				continue;
-
-			/* init power management library */
-			ret = rte_power_exit(lcore_id);
-			if (ret)
-				rte_exit(EXIT_FAILURE, "Power management "
-					"library de-initialization failed on "
-							"core%u\n", lcore_id);
-		}
-
-		if (app_mode != APP_MODE_EMPTY_POLL) {
-			RTE_ETH_FOREACH_DEV(portid) {
-				if ((enabled_port_mask & (1 << portid)) == 0)
-					continue;
-
-				rte_eth_dev_stop(portid);
-				rte_eth_dev_close(portid);
-			}
-		}
-	}
-
-	if (app_mode != APP_MODE_EMPTY_POLL)
-		rte_exit(EXIT_SUCCESS, "User forced exit\n");
 }
 
 /*  Freqency scale down timer callback */
@@ -1196,7 +1165,7 @@ main_loop(__rte_unused void *dummy)
 	else
 		RTE_LOG(INFO, L3FWD_POWER, "RX interrupt won't enable.\n");
 
-	while (1) {
+	while (!is_done()) {
 		stats[lcore_id].nb_iteration_looped++;
 
 		cur_tsc = rte_rdtsc();
@@ -1343,6 +1312,8 @@ main_loop(__rte_unused void *dummy)
 			stats[lcore_id].sleep_time += lcore_idle_hint;
 		}
 	}
+
+	return 0;
 }
 
 static int
@@ -2080,6 +2051,26 @@ init_power_library(void)
 	}
 	return ret;
 }
+
+static int
+deinit_power_library(void)
+{
+	unsigned int lcore_id;
+	int ret = 0;
+
+	RTE_LCORE_FOREACH(lcore_id) {
+		/* deinit power management library */
+		ret = rte_power_exit(lcore_id);
+		if (ret) {
+			RTE_LOG(ERR, POWER,
+				"Library deinitialization failed on core %u\n",
+				lcore_id);
+			return ret;
+		}
+	}
+	return ret;
+}
+
 static void
 update_telemetry(__rte_unused struct rte_timer *tim,
 		__rte_unused void *arg)
@@ -2530,8 +2521,23 @@ main(int argc, char **argv)
 			return -1;
 	}
 
+	RTE_ETH_FOREACH_DEV(portid)
+	{
+		if ((enabled_port_mask & (1 << portid)) == 0)
+			continue;
+
+		rte_eth_dev_stop(portid);
+		rte_eth_dev_close(portid);
+	}
+
 	if (app_mode == APP_MODE_EMPTY_POLL)
 		rte_power_empty_poll_stat_free();
 
+	if (app_mode != APP_MODE_TELEMETRY && deinit_power_library())
+		rte_exit(EXIT_FAILURE, "deinit_power_library failed\n");
+
+	if (rte_eal_cleanup() < 0)
+		RTE_LOG(ERR, L3FWD_POWER, "EAL cleanup failed\n");
+
 	return 0;
 }
-- 
2.17.1

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

* Re: [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
@ 2020-04-26 21:52   ` Thomas Monjalon
  2020-04-28 11:19   ` Xie, WeiX
  1 sibling, 0 replies; 11+ messages in thread
From: Thomas Monjalon @ 2020-04-26 21:52 UTC (permalink / raw)
  To: Anatoly Burakov; +Cc: dev, David Hunt, reshma.pattan

20/04/2020 19:56, Anatoly Burakov:
> Currently, shutdown for l3fwd-power application is all over the place
> and may or may not happen either in the signal handler or in the main()
> function. Fix this so that the signal handler will only set the exit
> variable, thereby allowing all of the loops to end properly and proceed
> to deinitialize everything.
> 
> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
> Acked-by: David Hunt <david.hunt@intel.com>
> Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>

Applied, thanks




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

* Re: [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
  2020-04-26 21:52   ` Thomas Monjalon
@ 2020-04-28 11:19   ` Xie, WeiX
  1 sibling, 0 replies; 11+ messages in thread
From: Xie, WeiX @ 2020-04-28 11:19 UTC (permalink / raw)
  To: Burakov, Anatoly, dev; +Cc: Hunt, David, Pattan, Reshma

Tested-by:  Xie,WeiX < weix.xie@intel.com>

Regards,
Xie Wei


-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Anatoly Burakov
Sent: Tuesday, April 21, 2020 1:57 AM
To: dev@dpdk.org
Cc: Hunt, David <david.hunt@intel.com>; Pattan, Reshma <reshma.pattan@intel.com>
Subject: [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling

Currently, shutdown for l3fwd-power application is all over the place and may or may not happen either in the signal handler or in the main() function. Fix this so that the signal handler will only set the exit variable, thereby allowing all of the loops to end properly and proceed to deinitialize everything.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
---

Notes:
    v2:
    - rebase on top of latest master

 examples/l3fwd-power/main.c | 74 ++++++++++++++++++++-----------------
 1 file changed, 40 insertions(+), 34 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c index be50ec049..293b3da4a 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -422,41 +422,10 @@ static int is_done(void)  static void  signal_exit_now(int sigtype)  {
-	unsigned lcore_id;
-	unsigned int portid;
-	int ret;
-
-	if (sigtype == SIGINT) {
-		if (app_mode == APP_MODE_EMPTY_POLL ||
-				app_mode == APP_MODE_TELEMETRY)
-			quit_signal = true;
 
+	if (sigtype == SIGINT)
+		quit_signal = true;
 
-		for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
-			if (rte_lcore_is_enabled(lcore_id) == 0)
-				continue;
-
-			/* init power management library */
-			ret = rte_power_exit(lcore_id);
-			if (ret)
-				rte_exit(EXIT_FAILURE, "Power management "
-					"library de-initialization failed on "
-							"core%u\n", lcore_id);
-		}
-
-		if (app_mode != APP_MODE_EMPTY_POLL) {
-			RTE_ETH_FOREACH_DEV(portid) {
-				if ((enabled_port_mask & (1 << portid)) == 0)
-					continue;
-
-				rte_eth_dev_stop(portid);
-				rte_eth_dev_close(portid);
-			}
-		}
-	}
-
-	if (app_mode != APP_MODE_EMPTY_POLL)
-		rte_exit(EXIT_SUCCESS, "User forced exit\n");
 }
 
 /*  Freqency scale down timer callback */ @@ -1196,7 +1165,7 @@ main_loop(__rte_unused void *dummy)
 	else
 		RTE_LOG(INFO, L3FWD_POWER, "RX interrupt won't enable.\n");
 
-	while (1) {
+	while (!is_done()) {
 		stats[lcore_id].nb_iteration_looped++;
 
 		cur_tsc = rte_rdtsc();
@@ -1343,6 +1312,8 @@ main_loop(__rte_unused void *dummy)
 			stats[lcore_id].sleep_time += lcore_idle_hint;
 		}
 	}
+
+	return 0;
 }
 
 static int
@@ -2080,6 +2051,26 @@ init_power_library(void)
 	}
 	return ret;
 }
+
+static int
+deinit_power_library(void)
+{
+	unsigned int lcore_id;
+	int ret = 0;
+
+	RTE_LCORE_FOREACH(lcore_id) {
+		/* deinit power management library */
+		ret = rte_power_exit(lcore_id);
+		if (ret) {
+			RTE_LOG(ERR, POWER,
+				"Library deinitialization failed on core %u\n",
+				lcore_id);
+			return ret;
+		}
+	}
+	return ret;
+}
+
 static void
 update_telemetry(__rte_unused struct rte_timer *tim,
 		__rte_unused void *arg)
@@ -2530,8 +2521,23 @@ main(int argc, char **argv)
 			return -1;
 	}
 
+	RTE_ETH_FOREACH_DEV(portid)
+	{
+		if ((enabled_port_mask & (1 << portid)) == 0)
+			continue;
+
+		rte_eth_dev_stop(portid);
+		rte_eth_dev_close(portid);
+	}
+
 	if (app_mode == APP_MODE_EMPTY_POLL)
 		rte_power_empty_poll_stat_free();
 
+	if (app_mode != APP_MODE_TELEMETRY && deinit_power_library())
+		rte_exit(EXIT_FAILURE, "deinit_power_library failed\n");
+
+	if (rte_eal_cleanup() < 0)
+		RTE_LOG(ERR, L3FWD_POWER, "EAL cleanup failed\n");
+
 	return 0;
 }
--
2.17.1

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

* Re: [dpdk-dev] [PATCH v2 1/2] l3fwd-power: exit if initializing power library failed
  2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 " Anatoly Burakov
@ 2020-04-28 11:19   ` Xie, WeiX
  0 siblings, 0 replies; 11+ messages in thread
From: Xie, WeiX @ 2020-04-28 11:19 UTC (permalink / raw)
  To: Burakov, Anatoly, dev; +Cc: Hunt, David, Pattan, Reshma

Tested-by:  Xie,WeiX < weix.xie@intel.com>

Regards,
Xie Wei


-----Original Message-----
From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Anatoly Burakov
Sent: Tuesday, April 21, 2020 1:57 AM
To: dev@dpdk.org
Cc: Hunt, David <david.hunt@intel.com>; Pattan, Reshma <reshma.pattan@intel.com>
Subject: [dpdk-dev] [PATCH v2 1/2] l3fwd-power: exit if initializing power library failed

Currently, if power library initialization fails, only a log message is displayed. This is suboptimal for a number of reasons, but the main one is that telemetry mode does not depend on the power library and can therefore run in environments where l3fwd-power would normally not run correctly (such as inside a VM). This will lead to attempts to deinitialize the power library on exit, with a subsequent forced unclean shutdown of DPDK.

Fix this by only initializing the power library in modes that actually need it, and change a log message to a failure to initialize.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
Reviewed-by: Reshma Pattan <reshma.pattan@intel.com>
---
 examples/l3fwd-power/main.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c index b46aa7bac..be50ec049 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -2065,15 +2065,17 @@ static int check_ptype(uint16_t portid)  static int
 init_power_library(void)
 {
-	int ret = 0, lcore_id;
-	for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
-		if (rte_lcore_is_enabled(lcore_id)) {
-			/* init power management library */
-			ret = rte_power_init(lcore_id);
-			if (ret)
-				RTE_LOG(ERR, POWER,
+	unsigned int lcore_id;
+	int ret = 0;
+
+	RTE_LCORE_FOREACH(lcore_id) {
+		/* init power management library */
+		ret = rte_power_init(lcore_id);
+		if (ret) {
+			RTE_LOG(ERR, POWER,
 				"Library initialization failed on core %u\n",
 				lcore_id);
+			return ret;
 		}
 	}
 	return ret;
@@ -2224,8 +2226,8 @@ main(int argc, char **argv)
 	if (ret < 0)
 		rte_exit(EXIT_FAILURE, "Invalid L3FWD parameters\n");
 
-	if (init_power_library())
-		RTE_LOG(ERR, L3FWD_POWER, "init_power_library failed\n");
+	if (app_mode != APP_MODE_TELEMETRY && init_power_library())
+		rte_exit(EXIT_FAILURE, "init_power_library failed\n");
 
 	if (update_lcore_params() < 0)
 		rte_exit(EXIT_FAILURE, "update_lcore_params failed\n");
--
2.17.1

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

end of thread, other threads:[~2020-04-28 11:20 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-08 15:56 [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Anatoly Burakov
2020-04-08 15:56 ` [dpdk-dev] [PATCH 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
2020-04-09  8:44   ` Hunt, David
2020-04-09  9:22   ` Pattan, Reshma
2020-04-09  8:42 ` [dpdk-dev] [PATCH 1/2] l3fwd-power: exit if initializing power library failed Hunt, David
2020-04-09  9:23 ` Pattan, Reshma
2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 " Anatoly Burakov
2020-04-28 11:19   ` Xie, WeiX
2020-04-20 17:56 ` [dpdk-dev] [PATCH v2 2/2] l3fwd-power: implement proper shutdown handling Anatoly Burakov
2020-04-26 21:52   ` Thomas Monjalon
2020-04-28 11:19   ` Xie, WeiX

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