diff --git a/tools/lkl/include/lkl.h b/tools/lkl/include/lkl.h index eaac8f2eb4aa1c..3738c561da11a7 100644 --- a/tools/lkl/include/lkl.h +++ b/tools/lkl/include/lkl.h @@ -437,6 +437,12 @@ int lkl_if_del_ip(int ifindex, int af, void *addr, unsigned int netprefix_len); */ int lkl_if_wait_ipv6_dad(int ifindex, void *addr); +/** + * lkl_set_fd_limit - set the maximum number of file descriptors allowed + * @fd_limit - fd max limit + */ +int lkl_set_fd_limit(unsigned int fd_limit); + #ifdef __cplusplus } #endif diff --git a/tools/lkl/lib/fs.c b/tools/lkl/lib/fs.c index cfdea62d543a7e..f3481f8b194017 100644 --- a/tools/lkl/lib/fs.c +++ b/tools/lkl/lib/fs.c @@ -363,3 +363,12 @@ int lkl_dirfd(struct lkl_dir *dir) { return dir->fd; } + +int lkl_set_fd_limit(unsigned int fd_limit) +{ + struct lkl_rlimit rlim = { + .rlim_cur = fd_limit, + .rlim_max = fd_limit, + }; + return lkl_sys_setrlimit(LKL_RLIMIT_NOFILE, &rlim); +} diff --git a/tools/lkl/lib/hijack/init.c b/tools/lkl/lib/hijack/init.c index 8d22d840c045c3..46f3b49b64b984 100644 --- a/tools/lkl/lib/hijack/init.c +++ b/tools/lkl/lib/hijack/init.c @@ -323,7 +323,7 @@ hijack_init(void) if (single_cpu_mode == 1) PinToFirstCpu(&ori_cpu); - ret = lkl_start_kernel(&lkl_host_ops, 64 * 1024 * 1024, ""); + ret = lkl_start_kernel(&lkl_host_ops, 64 * 1024 * 1024UL, ""); if (ret) { fprintf(stderr, "can't start kernel: %s\n", lkl_strerror(ret)); return; @@ -335,6 +335,11 @@ hijack_init(void) if (single_cpu_mode) PinToCpus(&ori_cpu); + ret = lkl_set_fd_limit(65535); + if (ret) + fprintf(stderr, "lkl_set_fd_limit failed: %s\n", + lkl_strerror(ret)); + /* fillup FDs up to LKL_FD_OFFSET */ ret = lkl_sys_mknod("/dev_null", LKL_S_IFCHR | 0600, LKL_MKDEV(1, 3)); dev_null = lkl_sys_open("/dev_null", LKL_O_RDONLY, 0);