eal: do not panic on hugepage info init
authorAaron Conole <aconole@redhat.com>
Wed, 22 Mar 2017 20:19:29 +0000 (16:19 -0400)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Mon, 27 Mar 2017 13:50:37 +0000 (15:50 +0200)
When attempting to scan hugepages, signal to the eal that an error has
occurred, rather than performing a panic.

If we fail to acquire hugepage information, simply signal an error to
the application.  This clears the run_once counter, allowing the user or
application to take a corrective action and retry.

Signed-off-by: Aaron Conole <aconole@redhat.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
lib/librte_eal/bsdapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal.c
lib/librte_eal/linuxapp/eal/eal_hugepage_info.c

index 8ad6157..60de9f9 100644 (file)
@@ -533,8 +533,12 @@ rte_eal_init(int argc, char **argv)
 
        if (internal_config.no_hugetlbfs == 0 &&
                        internal_config.process_type != RTE_PROC_SECONDARY &&
-                       eal_hugepage_info_init() < 0)
-               rte_panic("Cannot get hugepage information\n");
+                       eal_hugepage_info_init() < 0) {
+               rte_eal_init_alert("Cannot get hugepage information.");
+               rte_errno = EACCES;
+               rte_atomic32_clear(&run_once);
+               return -1;
+       }
 
        if (internal_config.memory == 0 && internal_config.force_sockets == 0) {
                if (internal_config.no_hugetlbfs)
index 67e4c6f..161f726 100644 (file)
@@ -791,8 +791,12 @@ 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_eal_init_alert("Cannot get hugepage information.");
+               rte_errno = EACCES;
+               rte_atomic32_clear(&run_once);
+               return -1;
+       }
 
        if (internal_config.memory == 0 && internal_config.force_sockets == 0) {
                if (internal_config.no_hugetlbfs)
index 18858e2..7a21e8f 100644 (file)
@@ -283,9 +283,12 @@ 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 "
-                         "info\n", sys_dir_path);
+       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;