mem: remove RLIMIT_NOFILE update
authorIntel <intel.com>
Mon, 3 Jun 2013 00:00:00 +0000 (00:00 +0000)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 17 Sep 2013 12:09:22 +0000 (14:09 +0200)
Memory init won't try to increase its RLIMIT_NOFILE limit, this must be done
prior to starting it.

Signed-off-by: Intel
lib/librte_eal/linuxapp/eal/eal_memory.c
lib/librte_eal/linuxapp/eal/include/eal_hugepages.h

index e68a3f8..f04436c 100644 (file)
@@ -80,7 +80,6 @@
 #include <errno.h>
 #include <sys/ioctl.h>
 #include <sys/time.h>
-#include <sys/resource.h>
 
 #include <rte_log.h>
 #include <rte_memory.h>
@@ -144,44 +143,6 @@ aslr_enabled(void)
        }
 }
 
-/*
- * Increase limit for open files for current process
- */
-static int
-increase_open_file_limit(void)
-{
-       struct rlimit limit;
-
-       /* read current limits */
-       if (getrlimit(RLIMIT_NOFILE, &limit) != 0) {
-               RTE_LOG(ERR, EAL, "Error reading resource limit: %s\n",
-                               strerror(errno));
-               return -1;
-       }
-
-       /* check if current soft limit matches the hard limit */
-       if (limit.rlim_cur < limit.rlim_max) {
-               /* set soft limit to match hard limit */
-               limit.rlim_cur = limit.rlim_max;
-       }
-       else {
-               /* we can't increase the soft limit so now we try to increase
-                * soft and hard limit. this might fail when run as non-root.
-                */
-               limit.rlim_cur *= 2;
-               limit.rlim_max *= 2;
-       }
-
-       /* set current resource limit */
-       if (setrlimit(RLIMIT_NOFILE, &limit) != 0) {
-               RTE_LOG(ERR, EAL, "Error increasing open files limit: %s\n",
-                               strerror(errno));
-               return -1;
-       }
-
-       return 0;
-}
-
 /*
  * Try to mmap *size bytes in /dev/zero. If it is succesful, return the
  * pointer to the mmap'd area and keep *size unmodified. Else, retry
@@ -315,7 +276,14 @@ map_all_hugepages(struct hugepage *hugepg_tbl,
                        hugepg_tbl[i].final_va = virtaddr;
                }
 
-               /* close the file descriptor, files will be locked later */
+               /* set shared flock on the file. */
+               if (flock(fd, LOCK_SH | LOCK_NB) == -1) {
+                       RTE_LOG(ERR, EAL, "%s(): Locking file failed:%s \n",
+                               __func__, strerror(errno));
+                       close(fd);
+                       return -1;
+               }
+
                close(fd);
 
                vma_addr = (char *)vma_addr + hugepage_sz;
@@ -569,7 +537,6 @@ unmap_unneeded_hugepages(struct hugepage *hugepg_tbl,
 {
        unsigned socket, size;
        int page, nrpages = 0;
-       int fd;
 
        /* get total number of hugepages */
        for (size = 0; size < num_hp_info; size++)
@@ -593,31 +560,9 @@ unmap_unneeded_hugepages(struct hugepage *hugepg_tbl,
                                                hp->final_va = NULL;
                                        }
                                        /* lock the page and skip */
-                                       else {
-                                               /* try and open the hugepage file */
-                                               while ((fd = open(hp->filepath, O_CREAT | O_RDWR, 0755)) < 0) {
-                                                       /* if we can't open due to resource limits */
-                                                       if (errno == EMFILE) {
-                                                               RTE_LOG(INFO, EAL, "Increasing open file limit\n");
-
-                                                               /* if we manage to increase resource limit, try again */
-                                                               if (increase_open_file_limit() == 0)
-                                                                       continue;
-                                                       }
-                                                       else
-                                                               RTE_LOG(ERR, EAL, "%s(): open failed: %s\n", __func__,
-                                                                               strerror(errno));
-                                                       return -1;
-                                               }
-                                               /* try and lock the hugepage */
-                                               if (flock(fd, LOCK_SH | LOCK_NB) == -1) {
-                                                       RTE_LOG(ERR, EAL, "Locking hugepage file failed!\n");
-                                                       close(fd);
-                                                       return -1;
-                                               }
-                                               hp->page_lock = fd;
+                                       else
                                                pages_found++;
-                                       }
+
                                } /* match page */
                        } /* foreach page */
                } /* foreach socket */
index 0a0ca15..a9e9eee 100644 (file)
@@ -52,7 +52,6 @@ struct hugepage {
        int file_id;        /**< the '%d' in HUGEFILE_FMT */
        int memseg_id;      /**< the memory segment to which page belongs */
        char filepath[MAX_HUGEPAGE_PATH]; /**< path to backing file on filesystem */
-       int page_lock;      /**< descriptor for hugepage file */
 };
 
 /**