From 72159d32c944ddc5964341b52b6c38fc66f876e8 Mon Sep 17 00:00:00 2001 From: Yuan Liu Date: Thu, 3 Nov 2016 11:04:17 -0700 Subject: [PATCH 1/2] lkl: Fix boot mem size So that we can allocate more than 1GB memory to LKL. Signed-off-by: Yuan Liu --- arch/lkl/include/asm/page.h | 2 +- arch/lkl/mm/bootmem.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/lkl/include/asm/page.h b/arch/lkl/include/asm/page.h index 455bf627f3be2f..df5db97d20a4d0 100644 --- a/arch/lkl/include/asm/page.h +++ b/arch/lkl/include/asm/page.h @@ -5,7 +5,7 @@ #ifndef __ASSEMBLY__ void free_mem(void); -void bootmem_init(int mem_size); +void bootmem_init(unsigned long mem_size); #endif #include diff --git a/arch/lkl/mm/bootmem.c b/arch/lkl/mm/bootmem.c index 4930298b3e3782..6a7966d4671baa 100644 --- a/arch/lkl/mm/bootmem.c +++ b/arch/lkl/mm/bootmem.c @@ -7,9 +7,9 @@ static unsigned long _memory_start, mem_size; void *empty_zero_page; -void __init bootmem_init(int mem_size) +void __init bootmem_init(unsigned long mem_size) { - int bootmap_size; + unsigned long bootmap_size; _memory_start = (unsigned long)lkl_ops->mem_alloc(mem_size); memory_start = _memory_start; From 20679a95b3af17aa8544fcc7ff76bc200cadfad8 Mon Sep 17 00:00:00 2001 From: Yuan Liu Date: Thu, 3 Nov 2016 11:04:44 -0700 Subject: [PATCH 2/2] lkl: lkl_set_fd_limit So we can have more file descriptors (tcp connections). Signed-off-by: Yuan Liu --- tools/lkl/include/lkl.h | 6 ++++++ tools/lkl/lib/fs.c | 9 +++++++++ tools/lkl/lib/hijack/init.c | 7 ++++++- 3 files changed, 21 insertions(+), 1 deletion(-) 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);