diff --git a/NEWS.md b/NEWS.md index 96befbda..d4d6f73e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -535,3 +535,6 @@ Restrictions on McKernel 25. The behaviors of madvise and mbind are changed to do nothing and report success as a workaround for Fugaku. + +26. mmap() allows unlimited overcommit. Note that it corresponds to + setting sysctl ``vm.overcommit_memory`` to 1. diff --git a/kernel/include/mman.h b/kernel/include/mman.h index 09f771ec..a618040f 100644 --- a/kernel/include/mman.h +++ b/kernel/include/mman.h @@ -72,4 +72,11 @@ #define MS_INVALIDATE 0x02 #define MS_SYNC 0x04 +/* include/uapi/linux/mman.h */ +#define OVERCOMMIT_GUESS 0 +#define OVERCOMMIT_ALWAYS 1 +#define OVERCOMMIT_NEVER 2 + +extern int sysctl_overcommit_memory; + #endif /* HEADER_MMAN_H */ diff --git a/kernel/include/rusage_private.h b/kernel/include/rusage_private.h index 70235eda..844e36cd 100644 --- a/kernel/include/rusage_private.h +++ b/kernel/include/rusage_private.h @@ -11,6 +11,7 @@ #include #include #include +#include #ifdef ENABLE_RUSAGE @@ -311,6 +312,9 @@ rusage_check_overmap(size_t len, int pgshift) { int npages = 0, remain_pages = 0; + if (sysctl_overcommit_memory == OVERCOMMIT_ALWAYS) + return 0; + npages = (len + (1UL << pgshift) - 1) >> pgshift; remain_pages = (rusage.total_memory - rusage.total_memory_usage) >> pgshift; diff --git a/kernel/mem.c b/kernel/mem.c index 97f9adc2..e8facbf4 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -62,6 +62,7 @@ extern int interrupt_from_user(void *); struct tlb_flush_entry tlb_flush_vector[IHK_TLB_FLUSH_IRQ_VECTOR_SIZE]; int anon_on_demand = 0; +int sysctl_overcommit_memory = OVERCOMMIT_ALWAYS; static struct ihk_mc_pa_ops *pa_ops;