All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC 00/23] Refactor eal_init to remove panic() calls
@ 2016-12-30 15:25 Aaron Conole
  2016-12-30 15:25 ` [RFC 01/23] eal: CPU init will no longer panic Aaron Conole
                   ` (23 more replies)
  0 siblings, 24 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:25 UTC (permalink / raw)
  To: dev

In many cases, it's enough to simply let the application know that the
call to initialize DPDK has failed.  A complete halt can then be
decided by the application based on error returned (and the app could
even attempt a possible re-attempt after some corrective action by the
user or application).

There is still some work left in this series.

One bit of work left is to take the calls which could reasonably be
corrected (and then init can be re-attempted), and make sure to clear
the already-initialized flag.

Another piece of work is to fix the lcore master/slave errors to
properly reflect thread state.

Finally, some real heavy testing should be done.  The series wasn't
tested much, and could use real soak time.  Especially around some of
the calls where it no longer returns an error (for instance, vdev init
and plugin init).

Aaron Conole (23):
  eal: CPU init will no longer panic
  eal: return error instead of panic for cpu init
  eal: No panic on hugepages info init
  eal: do not panic on failed hugepage query
  eal: failure to parse args returns error
  eal-common: introduce a way to query cpu support
  eal: Signal error when CPU isn't supported
  eal: do not panic on memzone initialization fails
  eal: set errno when exiting for already called
  eal: Do not panic on log failures
  eal: Do not panic on pci-probe
  eal: do not panic on vfio failure
  eal: do not panic on memory init
  eal: do not panic on tailq init
  eal: do not panic on alarm init
  eal: convert timer_init not to call panic
  eal: change the private pipe call to reflect errno
  eal: Do not panic on interrupt thread init
  eal: do not error if plugins fail to init
  eal_pci: Continue probing even on failures
  eal: do not panic on failed PCI probe
  eal_common_dev: continue initializing vdevs
  eal: do not panic (or abort) if vdev init fails

 lib/librte_eal/common/eal_common_cpuflags.c        |  13 ++-
 lib/librte_eal/common/eal_common_dev.c             |   5 +-
 lib/librte_eal/common/eal_common_lcore.c           |   7 +-
 lib/librte_eal/common/eal_common_pci.c             |  15 ++-
 lib/librte_eal/common/eal_common_tailqs.c          |   4 +-
 .../common/include/generic/rte_cpuflags.h          |   9 ++
 lib/librte_eal/linuxapp/eal/eal.c                  | 109 +++++++++++++++------
 lib/librte_eal/linuxapp/eal/eal_hugepage_info.c    |   6 +-
 lib/librte_eal/linuxapp/eal/eal_interrupts.c       |   5 +-
 9 files changed, 125 insertions(+), 48 deletions(-)

-- 
2.7.4

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

* [RFC 01/23] eal: CPU init will no longer panic
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
@ 2016-12-30 15:25 ` Aaron Conole
  2016-12-30 15:25 ` [RFC 02/23] eal: return error instead of panic for cpu init Aaron Conole
                   ` (22 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:25 UTC (permalink / raw)
  To: dev

After this change, the EAL CPU NUMA node resolution step can no longer
emit an rte_panic.  This aligns with the code in rte_eal_init, which
expects failures to return an error code.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/common/eal_common_lcore.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_lcore.c b/lib/librte_eal/common/eal_common_lcore.c
index 2cd4132..84fa0cb 100644
--- a/lib/librte_eal/common/eal_common_lcore.c
+++ b/lib/librte_eal/common/eal_common_lcore.c
@@ -83,16 +83,17 @@ rte_eal_cpu_init(void)
 		config->lcore_role[lcore_id] = ROLE_RTE;
 		lcore_config[lcore_id].core_id = eal_cpu_core_id(lcore_id);
 		lcore_config[lcore_id].socket_id = eal_cpu_socket_id(lcore_id);
-		if (lcore_config[lcore_id].socket_id >= RTE_MAX_NUMA_NODES)
+		if (lcore_config[lcore_id].socket_id >= RTE_MAX_NUMA_NODES) {
 #ifdef RTE_EAL_ALLOW_INV_SOCKET_ID
 			lcore_config[lcore_id].socket_id = 0;
 #else
-			rte_panic("Socket ID (%u) is greater than "
+			RTE_LOG(ERR, EAL, "Socket ID (%u) is greater than "
 				"RTE_MAX_NUMA_NODES (%d)\n",
 				lcore_config[lcore_id].socket_id,
 				RTE_MAX_NUMA_NODES);
+			return -1;
 #endif
-
+		}
 		RTE_LOG(DEBUG, EAL, "Detected lcore %u as "
 				"core %u on socket %u\n",
 				lcore_id, lcore_config[lcore_id].core_id,
-- 
2.7.4

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

* [RFC 02/23] eal: return error instead of panic for cpu init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
  2016-12-30 15:25 ` [RFC 01/23] eal: CPU init will no longer panic Aaron Conole
@ 2016-12-30 15:25 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 03/23] eal: No panic on hugepages info init Aaron Conole
                   ` (21 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:25 UTC (permalink / raw)
  To: dev

There may be a way to gracefully recover;  at least the application
should be notified that a failure happened, rather than completely
aborting.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 16dd5b9..330f416 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -766,8 +766,11 @@ rte_eal_init(int argc, char **argv)
 	/* set log level as early as possible */
 	rte_set_log_level(internal_config.log_level);
 
-	if (rte_eal_cpu_init() < 0)
-		rte_panic("Cannot detect lcores\n");
+	if (rte_eal_cpu_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot detect lcores\n");
+		errno = ENOTSUP;
+		return -1;
+	}
 
 	fctret = eal_parse_args(argc, argv);
 	if (fctret < 0)
-- 
2.7.4

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

* [RFC 03/23] eal: No panic on hugepages info init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
  2016-12-30 15:25 ` [RFC 01/23] eal: CPU init will no longer panic Aaron Conole
  2016-12-30 15:25 ` [RFC 02/23] eal: return error instead of panic for cpu init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 04/23] eal: do not panic on failed hugepage query Aaron Conole
                   ` (20 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

When attempting to scan hugepages, signal to the eal.c that an error has
occured, rather than performing a panic.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal_hugepage_info.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
index 18858e2..4d47eaf 100644
--- a/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
+++ b/lib/librte_eal/linuxapp/eal/eal_hugepage_info.c
@@ -283,9 +283,11 @@ eal_hugepage_info_init(void)
 	struct dirent *dirent;
 
 	dir = opendir(sys_dir_path);
-	if (dir == NULL)
-		rte_panic("Cannot open directory %s to read system hugepage "
+	if (dir == NULL) {
+		RTE_LOG(ERR, EAL, "Cannot open directory %s to read system hugepage "
 			  "info\n", sys_dir_path);
+		return -1;
+	}
 
 	for (dirent = readdir(dir); dirent != NULL; dirent = readdir(dir)) {
 		struct hugepage_info *hpi;
-- 
2.7.4

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

* [RFC 04/23] eal: do not panic on failed hugepage query
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (2 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 03/23] eal: No panic on hugepages info init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 05/23] eal: failure to parse args returns error Aaron Conole
                   ` (19 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

If we fail to acquire hugepage information, simply signal an error to
the application.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 330f416..ff70107 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -779,8 +779,11 @@ rte_eal_init(int argc, char **argv)
 	if (internal_config.no_hugetlbfs == 0 &&
 			internal_config.process_type != RTE_PROC_SECONDARY &&
 			internal_config.xen_dom0_support == 0 &&
-			eal_hugepage_info_init() < 0)
-		rte_panic("Cannot get hugepage information\n");
+			eal_hugepage_info_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot get hugepage information\n");
+		errno = EACCES;
+		return -1;
+	}
 
 	if (internal_config.memory == 0 && internal_config.force_sockets == 0) {
 		if (internal_config.no_hugetlbfs)
-- 
2.7.4

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

* [RFC 05/23] eal: failure to parse args returns error
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (3 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 04/23] eal: do not panic on failed hugepage query Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 06/23] eal-common: introduce a way to query cpu support Aaron Conole
                   ` (18 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

It's possible that the application could take a corrective action here,
and either prompt the user for different arguments, or at least perform
a better logging.  Exiting this early prevents any useful information
gathering from the application layer.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index ff70107..1c371f6 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -773,8 +773,11 @@ rte_eal_init(int argc, char **argv)
 	}
 
 	fctret = eal_parse_args(argc, argv);
-	if (fctret < 0)
-		exit(1);
+	if (fctret < 0) {
+		RTE_LOG (ERR, EAL, "Invalid 'command line' arguments\n");
+		errno = EINVAL;
+		return -1;
+	}
 
 	if (internal_config.no_hugetlbfs == 0 &&
 			internal_config.process_type != RTE_PROC_SECONDARY &&
-- 
2.7.4

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

* [RFC 06/23] eal-common: introduce a way to query cpu support
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (4 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 05/23] eal: failure to parse args returns error Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 07/23] eal: Signal error when CPU isn't supported Aaron Conole
                   ` (17 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

This adds a new API to check for the eal cpu versions.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/common/eal_common_cpuflags.c          | 13 +++++++++++--
 lib/librte_eal/common/include/generic/rte_cpuflags.h |  9 +++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_cpuflags.c b/lib/librte_eal/common/eal_common_cpuflags.c
index b5f76f7..2c2127b 100644
--- a/lib/librte_eal/common/eal_common_cpuflags.c
+++ b/lib/librte_eal/common/eal_common_cpuflags.c
@@ -43,6 +43,13 @@
 void
 rte_cpu_check_supported(void)
 {
+	if (!rte_cpu_is_supported())
+		exit(1);
+}
+
+bool
+rte_cpu_is_supported(void)
+{
 	/* This is generated at compile-time by the build system */
 	static const enum rte_cpu_flag_t compile_time_flags[] = {
 			RTE_COMPILE_TIME_CPUFLAGS
@@ -57,14 +64,16 @@ rte_cpu_check_supported(void)
 			fprintf(stderr,
 				"ERROR: CPU feature flag lookup failed with error %d\n",
 				ret);
-			exit(1);
+			return false;
 		}
 		if (!ret) {
 			fprintf(stderr,
 			        "ERROR: This system does not support \"%s\".\n"
 			        "Please check that RTE_MACHINE is set correctly.\n",
 			        rte_cpu_get_flag_name(compile_time_flags[i]));
-			exit(1);
+			return false;
 		}
 	}
+
+	return true;
 }
diff --git a/lib/librte_eal/common/include/generic/rte_cpuflags.h b/lib/librte_eal/common/include/generic/rte_cpuflags.h
index 71321f3..e4342ad 100644
--- a/lib/librte_eal/common/include/generic/rte_cpuflags.h
+++ b/lib/librte_eal/common/include/generic/rte_cpuflags.h
@@ -40,6 +40,7 @@
  */
 
 #include <errno.h>
+#include <stdbool.h>
 
 /**
  * Enumeration of all CPU features supported
@@ -82,4 +83,12 @@ rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature);
 void
 rte_cpu_check_supported(void);
 
+/**
+ * This function checks that the currently used CPU supports the CPU features
+ * that were specified at compile time. It is called automatically within the
+ * EAL, so does not need to be used by applications.  This version returns a
+ * result so that decisions may be made (for instance, graceful shutdowns).
+ */
+bool
+rte_cpu_is_supported(void);
 #endif /* _RTE_CPUFLAGS_H_ */
-- 
2.7.4

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

* [RFC 07/23] eal: Signal error when CPU isn't supported
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (5 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 06/23] eal-common: introduce a way to query cpu support Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 08/23] eal: do not panic on memzone initialization fails Aaron Conole
                   ` (16 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

It's now possible to gracefully exit the application, or for
applications which support non-dpdk datapaths working in concert with
DPDK datapaths, there no longer is the possibility of exiting for
unsupported CPUs.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 1c371f6..909f6b7 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -751,7 +751,10 @@ rte_eal_init(int argc, char **argv)
 	char thread_name[RTE_MAX_THREAD_NAME_LEN];
 
 	/* checks if the machine is adequate */
-	rte_cpu_check_supported();
+	if (!rte_cpu_is_supported()) {
+		errno = ENOTSUP;
+		return -1;
+	}
 
 	if (!rte_atomic32_test_and_set(&run_once))
 		return -1;
-- 
2.7.4

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

* [RFC 08/23] eal: do not panic on memzone initialization fails
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (6 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 07/23] eal: Signal error when CPU isn't supported Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 09/23] eal: set errno when exiting for already called Aaron Conole
                   ` (15 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

When memzone initialization fails, report the error to the calling
application rather than panic().

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 909f6b7..31d3bba 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -828,8 +828,11 @@ rte_eal_init(int argc, char **argv)
 	/* the directories are locked during eal_hugepage_info_init */
 	eal_hugedirs_unlock();
 
-	if (rte_eal_memzone_init() < 0)
-		rte_panic("Cannot init memzone\n");
+	if (rte_eal_memzone_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init memzone\n");
+		errno = ENODEV;
+		return -1;
+	}
 
 	if (rte_eal_tailqs_init() < 0)
 		rte_panic("Cannot init tail queues for objects\n");
-- 
2.7.4

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

* [RFC 09/23] eal: set errno when exiting for already called
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (7 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 08/23] eal: do not panic on memzone initialization fails Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 10/23] eal: Do not panic on log failures Aaron Conole
                   ` (14 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 31d3bba..f996047 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -756,8 +756,10 @@ rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
-	if (!rte_atomic32_test_and_set(&run_once))
+	if (!rte_atomic32_test_and_set(&run_once)) {
+		errno = EALREADY;
 		return -1;
+	}
 
 	logid = strrchr(argv[0], '/');
 	logid = strdup(logid ? logid + 1: argv[0]);
-- 
2.7.4

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

* [RFC 10/23] eal: Do not panic on log failures
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (8 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 09/23] eal: set errno when exiting for already called Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 11/23] eal: Do not panic on pci-probe Aaron Conole
                   ` (13 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

When log initialization fails, it's generally because the fopencookie
failed.  While this is rare in practice, it could happen.  Return
'Operation Not Supported' in errno, and let the caller know this error
occured.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index f996047..a23ba17 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -813,8 +813,11 @@ rte_eal_init(int argc, char **argv)
 
 	rte_config_init();
 
-	if (rte_eal_log_init(logid, internal_config.syslog_facility) < 0)
-		rte_panic("Cannot init logs\n");
+	if (rte_eal_log_init(logid, internal_config.syslog_facility) < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init logs\n");
+		errno = ENOTSUP;
+		return -1;
+	}
 
 	if (rte_eal_pci_init() < 0)
 		rte_panic("Cannot init PCI\n");
-- 
2.7.4

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

* [RFC 11/23] eal: Do not panic on pci-probe
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (9 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 10/23] eal: Do not panic on log failures Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 12/23] eal: do not panic on vfio failure Aaron Conole
                   ` (12 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index a23ba17..018d359 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -819,8 +819,11 @@ rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
-	if (rte_eal_pci_init() < 0)
-		rte_panic("Cannot init PCI\n");
+	if (rte_eal_pci_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init PCI\n");
+		errno = EPERM;
+		return -1;
+	}
 
 #ifdef VFIO_PRESENT
 	if (rte_eal_vfio_setup() < 0)
-- 
2.7.4

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

* [RFC 12/23] eal: do not panic on vfio failure
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (10 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 11/23] eal: Do not panic on pci-probe Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 13/23] eal: do not panic on memory init Aaron Conole
                   ` (11 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 018d359..878ba7a 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -826,8 +826,11 @@ rte_eal_init(int argc, char **argv)
 	}
 
 #ifdef VFIO_PRESENT
-	if (rte_eal_vfio_setup() < 0)
-		rte_panic("Cannot init VFIO\n");
+	if (rte_eal_vfio_setup() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init VFIO\n");
+		errno = ENOTSUP;
+		return -1;
+	}
 #endif
 
 	if (rte_eal_memory_init() < 0)
-- 
2.7.4

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

* [RFC 13/23] eal: do not panic on memory init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (11 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 12/23] eal: do not panic on vfio failure Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 14/23] eal: do not panic on tailq init Aaron Conole
                   ` (10 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

This can only happen when access to hugepages (either as primary or
secondary process) fails (and that is usually permissions).

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 878ba7a..050543c 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -833,8 +833,11 @@ rte_eal_init(int argc, char **argv)
 	}
 #endif
 
-	if (rte_eal_memory_init() < 0)
-		rte_panic("Cannot init memory\n");
+	if (rte_eal_memory_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init memory\n");
+		errno = EACCES;
+		return -1;
+	}
 
 	/* the directories are locked during eal_hugepage_info_init */
 	eal_hugedirs_unlock();
-- 
2.7.4

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

* [RFC 14/23] eal: do not panic on tailq init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (12 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 13/23] eal: do not panic on memory init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 15/23] eal: do not panic on alarm init Aaron Conole
                   ` (9 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

There are some theoretical racy conditions in the system that _could_
cause early tailq init to fail;  however, no need to panic the
application.  While it can't continue using DPDK, it could make better
alerts to the user.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/common/eal_common_tailqs.c | 4 ++--
 lib/librte_eal/linuxapp/eal/eal.c         | 7 +++++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_tailqs.c b/lib/librte_eal/common/eal_common_tailqs.c
index bb08ec8..b856ec9 100644
--- a/lib/librte_eal/common/eal_common_tailqs.c
+++ b/lib/librte_eal/common/eal_common_tailqs.c
@@ -188,8 +188,8 @@ rte_eal_tailqs_init(void)
 		if (t->head == NULL) {
 			RTE_LOG(ERR, EAL,
 				"Cannot initialize tailq: %s\n", t->name);
-			/* no need to TAILQ_REMOVE, we are going to panic in
-			 * rte_eal_init() */
+			/* no need to TAILQ_REMOVE, we are going to disallow re-attemtps
+			 * for rte_eal_init().  */
 			goto fail;
 		}
 	}
diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 050543c..3616515 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -848,8 +848,11 @@ rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
-	if (rte_eal_tailqs_init() < 0)
-		rte_panic("Cannot init tail queues for objects\n");
+	if (rte_eal_tailqs_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init tail queues for objects\n");
+		errno = ENOTSUP;
+		return -1;
+	}
 
 	if (rte_eal_alarm_init() < 0)
 		rte_panic("Cannot init interrupt-handling thread\n");
-- 
2.7.4

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

* [RFC 15/23] eal: do not panic on alarm init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (13 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 14/23] eal: do not panic on tailq init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 16/23] eal: convert timer_init not to call panic Aaron Conole
                   ` (8 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

rte_eal_alarm_init() call uses the linux timerfd framework to create a
poll()-able timer using standard posix file operations.  This could fail
for a few reasons given in the man-pages, but many could be
corrected by the user application.  No need to panic.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 3616515..ea3d50b 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -61,6 +61,7 @@
 #include <rte_launch.h>
 #include <rte_eal.h>
 #include <rte_eal_memconfig.h>
+#include <rte_errno.h>
 #include <rte_per_lcore.h>
 #include <rte_lcore.h>
 #include <rte_log.h>
@@ -854,8 +855,12 @@ rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
-	if (rte_eal_alarm_init() < 0)
-		rte_panic("Cannot init interrupt-handling thread\n");
+	if (rte_eal_alarm_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init interrupt-handling thread\n");
+		/* rte_eal_alarm_init sets rte_errno on failure. */
+		errno = rte_errno;
+		return -1;
+	}
 
 	if (rte_eal_timer_init() < 0)
 		rte_panic("Cannot init HPET or TSC timers\n");
-- 
2.7.4

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

* [RFC 16/23] eal: convert timer_init not to call panic
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (14 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 15/23] eal: do not panic on alarm init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 17/23] eal: change the private pipe call to reflect errno Aaron Conole
                   ` (7 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

After code inspection, there is no way for eal_timer_init() to fail.  It
simply returns 0 in all cases.  As such, this test could either go-away
or stay here as 'future-proofing'.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index ea3d50b..4206bca 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -862,8 +862,11 @@ rte_eal_init(int argc, char **argv)
 		return -1;
 	}
 
-	if (rte_eal_timer_init() < 0)
-		rte_panic("Cannot init HPET or TSC timers\n");
+	if (rte_eal_timer_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init HPET or TSC timers\n");
+		errno = ENOTSUP;
+		return -1;
+	}
 
 	eal_check_mem_on_local_socket();
 
-- 
2.7.4

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

* [RFC 17/23] eal: change the private pipe call to reflect errno
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (15 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 16/23] eal: convert timer_init not to call panic Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 18/23] eal: Do not panic on interrupt thread init Aaron Conole
                   ` (6 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

There could be some confusion as to why the call failed - this change
will always reflect the value of the error in rte_error.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal_interrupts.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_interrupts.c b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
index 47a3b20..52cb649 100644
--- a/lib/librte_eal/linuxapp/eal/eal_interrupts.c
+++ b/lib/librte_eal/linuxapp/eal/eal_interrupts.c
@@ -872,13 +872,16 @@ rte_eal_intr_init(void)
 	 * create a pipe which will be waited by epoll and notified to
 	 * rebuild the wait list of epoll.
 	 */
-	if (pipe(intr_pipe.pipefd) < 0)
+	if (pipe(intr_pipe.pipefd) < 0) {
+		rte_errno = errno;
 		return -1;
+	}
 
 	/* create the host thread to wait/handle the interrupt */
 	ret = pthread_create(&intr_thread, NULL,
 			eal_intr_thread_main, NULL);
 	if (ret != 0) {
+		rte_errno = ret;
 		RTE_LOG(ERR, EAL,
 			"Failed to create thread for interrupt handling\n");
 	} else {
-- 
2.7.4

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

* [RFC 18/23] eal: Do not panic on interrupt thread init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (16 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 17/23] eal: change the private pipe call to reflect errno Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 19/23] eal: do not error if plugins fail to init Aaron Conole
                   ` (5 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

When initializing the interrupt thread, there are a number of possible
reasons for failure - some of which are correctable by the application.
Do not panic() needlessly, and give the application a change to reflect
this information to the user.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 4206bca..244dc29 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -881,8 +881,11 @@ rte_eal_init(int argc, char **argv)
 		rte_config.master_lcore, (int)thread_id, cpuset,
 		ret == 0 ? "" : "...");
 
-	if (rte_eal_intr_init() < 0)
-		rte_panic("Cannot init interrupt-handling thread\n");
+	if (rte_eal_intr_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init interrupt-handling thread\n");
+		errno = rte_errno;
+		return -1;
+	}
 
 	RTE_LCORE_FOREACH_SLAVE(i) {
 
-- 
2.7.4

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

* [RFC 19/23] eal: do not error if plugins fail to init
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (17 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 18/23] eal: Do not panic on interrupt thread init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 20/23] eal_pci: Continue probing even on failures Aaron Conole
                   ` (4 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Plugins are useful and important.  However, it seems crazy to abort
everything just because they don't initialize properly.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 244dc29..68596e9 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -870,8 +870,9 @@ rte_eal_init(int argc, char **argv)
 
 	eal_check_mem_on_local_socket();
 
-	if (eal_plugins_init() < 0)
-		rte_panic("Cannot init plugins\n");
+	if (eal_plugins_init() < 0) {
+		RTE_LOG (ERR, EAL, "Cannot init plugins\n");
+	}
 
 	eal_thread_init_master(rte_config.master_lcore);
 
-- 
2.7.4

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

* [RFC 20/23] eal_pci: Continue probing even on failures
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (18 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 19/23] eal: do not error if plugins fail to init Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 21/23] eal: do not panic on failed PCI probe Aaron Conole
                   ` (3 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Some devices may be inaccessible for a variety of reasons, or the
PCI-bus may be unavailable causing the whole thing to fail.  Still,
better to continue attempts at probes.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/common/eal_common_pci.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c
index 33485bc..ca5c63e 100644
--- a/lib/librte_eal/common/eal_common_pci.c
+++ b/lib/librte_eal/common/eal_common_pci.c
@@ -69,6 +69,7 @@
 #include <sys/queue.h>
 #include <sys/mman.h>
 
+#include <rte_errno.h>
 #include <rte_interrupts.h>
 #include <rte_log.h>
 #include <rte_pci.h>
@@ -413,6 +414,7 @@ rte_eal_pci_probe(void)
 	struct rte_pci_device *dev = NULL;
 	struct rte_devargs *devargs;
 	int probe_all = 0;
+	int ret_1 = 0;
 	int ret = 0;
 
 	if (rte_eal_devargs_type_count(RTE_DEVTYPE_WHITELISTED_PCI) == 0)
@@ -427,17 +429,20 @@ rte_eal_pci_probe(void)
 
 		/* probe all or only whitelisted devices */
 		if (probe_all)
-			ret = pci_probe_all_drivers(dev);
+			ret_1 = pci_probe_all_drivers(dev);
 		else if (devargs != NULL &&
 			devargs->type == RTE_DEVTYPE_WHITELISTED_PCI)
-			ret = pci_probe_all_drivers(dev);
-		if (ret < 0)
-			rte_exit(EXIT_FAILURE, "Requested device " PCI_PRI_FMT
+			ret_1 = pci_probe_all_drivers(dev);
+		if (ret_1 < 0) {
+			RTE_LOG (ERR, EAL, "Requested device " PCI_PRI_FMT
 				 " cannot be used\n", dev->addr.domain, dev->addr.bus,
 				 dev->addr.devid, dev->addr.function);
+			rte_errno = errno;
+			ret = 1;
+		}
 	}
 
-	return 0;
+	return -ret;
 }
 
 /* dump one device */
-- 
2.7.4

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

* [RFC 21/23] eal: do not panic on failed PCI probe
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (19 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 20/23] eal_pci: Continue probing even on failures Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 22/23] eal_common_dev: continue initializing vdevs Aaron Conole
                   ` (2 subsequent siblings)
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

It may even be possible to simply log the error and continue on letting
the user check the logs and restart the application when things are failed.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 68596e9..503e742 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -925,8 +925,11 @@ rte_eal_init(int argc, char **argv)
 	rte_eal_mp_wait_lcore();
 
 	/* Probe & Initialize PCI devices */
-	if (rte_eal_pci_probe())
-		rte_panic("Cannot probe PCI\n");
+	if (rte_eal_pci_probe()) {
+		RTE_LOG (ERR, EAL, "Cannot probe PCI\n");
+		errno = ENOTSUP;
+		return -1;
+	}
 
 	if (rte_eal_dev_init() < 0)
 		rte_panic("Cannot init pmd devices\n");
-- 
2.7.4

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

* [RFC 22/23] eal_common_dev: continue initializing vdevs
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (20 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 21/23] eal: do not panic on failed PCI probe Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2016-12-30 15:26 ` [RFC 23/23] eal: do not panic (or abort) if vdev init fails Aaron Conole
  2017-01-02 14:22 ` [RFC 00/23] Refactor eal_init to remove panic() calls Thomas Monjalon
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Even if one vdev should fail, there's no need to prevent further
processing.  Log the error, and reflect it to the higher levels to
decide.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/common/eal_common_dev.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/lib/librte_eal/common/eal_common_dev.c b/lib/librte_eal/common/eal_common_dev.c
index 4f3b493..9889997 100644
--- a/lib/librte_eal/common/eal_common_dev.c
+++ b/lib/librte_eal/common/eal_common_dev.c
@@ -80,6 +80,7 @@ int
 rte_eal_dev_init(void)
 {
 	struct rte_devargs *devargs;
+	int ret = 0;
 
 	/*
 	 * Note that the dev_driver_list is populated here
@@ -97,11 +98,11 @@ rte_eal_dev_init(void)
 					devargs->args)) {
 			RTE_LOG(ERR, EAL, "failed to initialize %s device\n",
 					devargs->virt.drv_name);
-			return -1;
+			ret = -1;
 		}
 	}
 
-	return 0;
+	return ret;
 }
 
 int rte_eal_dev_attach(const char *name, const char *devargs)
-- 
2.7.4

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

* [RFC 23/23] eal: do not panic (or abort) if vdev init fails
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (21 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 22/23] eal_common_dev: continue initializing vdevs Aaron Conole
@ 2016-12-30 15:26 ` Aaron Conole
  2017-01-02 14:22 ` [RFC 00/23] Refactor eal_init to remove panic() calls Thomas Monjalon
  23 siblings, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2016-12-30 15:26 UTC (permalink / raw)
  To: dev

Seems like it's possible to continue.  At least, the error is reflected
properly in the logs.  A user could then go and correct or investigate
the situation.

Signed-off-by: Aaron Conole <aconole@redhat.com>
---
 lib/librte_eal/linuxapp/eal/eal.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c
index 503e742..cb87f15 100644
--- a/lib/librte_eal/linuxapp/eal/eal.c
+++ b/lib/librte_eal/linuxapp/eal/eal.c
@@ -932,7 +932,7 @@ rte_eal_init(int argc, char **argv)
 	}
 
 	if (rte_eal_dev_init() < 0)
-		rte_panic("Cannot init pmd devices\n");
+		RTE_LOG (ERR, EAL, "Cannot init pmd devices\n");
 
 	rte_eal_mcfg_complete();
 
-- 
2.7.4

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

* Re: [RFC 00/23] Refactor eal_init to remove panic() calls
  2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
                   ` (22 preceding siblings ...)
  2016-12-30 15:26 ` [RFC 23/23] eal: do not panic (or abort) if vdev init fails Aaron Conole
@ 2017-01-02 14:22 ` Thomas Monjalon
  2017-01-03 16:06   ` Aaron Conole
  2017-01-25 21:33   ` Aaron Conole
  23 siblings, 2 replies; 27+ messages in thread
From: Thomas Monjalon @ 2017-01-02 14:22 UTC (permalink / raw)
  To: Aaron Conole; +Cc: dev

Hi Aaron,

2016-12-30 10:25, Aaron Conole:
> In many cases, it's enough to simply let the application know that the
> call to initialize DPDK has failed.  A complete halt can then be
> decided by the application based on error returned (and the app could
> even attempt a possible re-attempt after some corrective action by the
> user or application).
> 
> There is still some work left in this series.

Thanks for starting the work.
I think it is candidate for 17.05 and can be promoted in the roadmap:
	http://dpdk.org/dev/roadmap

Have you checked wether these changes are modifying the API?
Some doxygen comments may need to be updated when a new error code
is used.

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

* Re: [RFC 00/23] Refactor eal_init to remove panic() calls
  2017-01-02 14:22 ` [RFC 00/23] Refactor eal_init to remove panic() calls Thomas Monjalon
@ 2017-01-03 16:06   ` Aaron Conole
  2017-01-25 21:33   ` Aaron Conole
  1 sibling, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2017-01-03 16:06 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev

Thomas Monjalon <thomas.monjalon@6wind.com> writes:

> Hi Aaron,
>
> 2016-12-30 10:25, Aaron Conole:
>> In many cases, it's enough to simply let the application know that the
>> call to initialize DPDK has failed.  A complete halt can then be
>> decided by the application based on error returned (and the app could
>> even attempt a possible re-attempt after some corrective action by the
>> user or application).
>> 
>> There is still some work left in this series.
>
> Thanks for starting the work.
> I think it is candidate for 17.05 and can be promoted in the roadmap:
> 	http://dpdk.org/dev/roadmap

Okay.

> Have you checked wether these changes are modifying the API?

That'll be my last pass through.

> Some doxygen comments may need to be updated when a new error code
> is used.

Agreed;  I also want to ensure that there's a consistent set of error
codes, and a consistent place to check for them.

I'll probably prefer to put them in rte_errno.

Thanks for your thoughts, Thomas!

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

* Re: [RFC 00/23] Refactor eal_init to remove panic() calls
  2017-01-02 14:22 ` [RFC 00/23] Refactor eal_init to remove panic() calls Thomas Monjalon
  2017-01-03 16:06   ` Aaron Conole
@ 2017-01-25 21:33   ` Aaron Conole
  1 sibling, 0 replies; 27+ messages in thread
From: Aaron Conole @ 2017-01-25 21:33 UTC (permalink / raw)
  To: Thomas Monjalon; +Cc: dev

Thomas Monjalon <thomas.monjalon@6wind.com> writes:

> Hi Aaron,
>
> 2016-12-30 10:25, Aaron Conole:
>> In many cases, it's enough to simply let the application know that the
>> call to initialize DPDK has failed.  A complete halt can then be
>> decided by the application based on error returned (and the app could
>> even attempt a possible re-attempt after some corrective action by the
>> user or application).
>> 
>> There is still some work left in this series.
>
> Thanks for starting the work.
> I think it is candidate for 17.05 and can be promoted in the roadmap:
> 	http://dpdk.org/dev/roadmap
>
> Have you checked wether these changes are modifying the API?

Looks like no API changes occur with this series.

> Some doxygen comments may need to be updated when a new error code
> is used.

I haven't seen any instances, but if you'd like I can add that to the
series as some of the error values for rte_eal_init().

-Aaron

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

end of thread, other threads:[~2017-01-25 21:33 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-12-30 15:25 [RFC 00/23] Refactor eal_init to remove panic() calls Aaron Conole
2016-12-30 15:25 ` [RFC 01/23] eal: CPU init will no longer panic Aaron Conole
2016-12-30 15:25 ` [RFC 02/23] eal: return error instead of panic for cpu init Aaron Conole
2016-12-30 15:26 ` [RFC 03/23] eal: No panic on hugepages info init Aaron Conole
2016-12-30 15:26 ` [RFC 04/23] eal: do not panic on failed hugepage query Aaron Conole
2016-12-30 15:26 ` [RFC 05/23] eal: failure to parse args returns error Aaron Conole
2016-12-30 15:26 ` [RFC 06/23] eal-common: introduce a way to query cpu support Aaron Conole
2016-12-30 15:26 ` [RFC 07/23] eal: Signal error when CPU isn't supported Aaron Conole
2016-12-30 15:26 ` [RFC 08/23] eal: do not panic on memzone initialization fails Aaron Conole
2016-12-30 15:26 ` [RFC 09/23] eal: set errno when exiting for already called Aaron Conole
2016-12-30 15:26 ` [RFC 10/23] eal: Do not panic on log failures Aaron Conole
2016-12-30 15:26 ` [RFC 11/23] eal: Do not panic on pci-probe Aaron Conole
2016-12-30 15:26 ` [RFC 12/23] eal: do not panic on vfio failure Aaron Conole
2016-12-30 15:26 ` [RFC 13/23] eal: do not panic on memory init Aaron Conole
2016-12-30 15:26 ` [RFC 14/23] eal: do not panic on tailq init Aaron Conole
2016-12-30 15:26 ` [RFC 15/23] eal: do not panic on alarm init Aaron Conole
2016-12-30 15:26 ` [RFC 16/23] eal: convert timer_init not to call panic Aaron Conole
2016-12-30 15:26 ` [RFC 17/23] eal: change the private pipe call to reflect errno Aaron Conole
2016-12-30 15:26 ` [RFC 18/23] eal: Do not panic on interrupt thread init Aaron Conole
2016-12-30 15:26 ` [RFC 19/23] eal: do not error if plugins fail to init Aaron Conole
2016-12-30 15:26 ` [RFC 20/23] eal_pci: Continue probing even on failures Aaron Conole
2016-12-30 15:26 ` [RFC 21/23] eal: do not panic on failed PCI probe Aaron Conole
2016-12-30 15:26 ` [RFC 22/23] eal_common_dev: continue initializing vdevs Aaron Conole
2016-12-30 15:26 ` [RFC 23/23] eal: do not panic (or abort) if vdev init fails Aaron Conole
2017-01-02 14:22 ` [RFC 00/23] Refactor eal_init to remove panic() calls Thomas Monjalon
2017-01-03 16:06   ` Aaron Conole
2017-01-25 21:33   ` Aaron Conole

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.