#include <errno.h>
#include <sys/ioctl.h>
#include <sys/time.h>
-#include <sys/resource.h>
#include <rte_log.h>
#include <rte_memory.h>
}
}
-/*
- * 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
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;
{
unsigned socket, size;
int page, nrpages = 0;
- int fd;
/* get total number of hugepages */
for (size = 0; size < num_hp_info; size++)
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 */