--- a/linux/hostif.c 2017-09-18 15:22:18.000000000 +0200 +++ b/linux/hostif.c 2017-11-17 13:35:49.600578115 +0100 @@ -79,6 +79,37 @@ #error CONFIG_HIGH_RES_TIMERS required for acceptable performance #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 14, 0) +# define global_zone_page_state global_page_state +#endif + +static unsigned long get_nr_slab_unreclaimable(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 13, 0) + return global_node_page_state(NR_SLAB_UNRECLAIMABLE); +#else + return global_page_state(NR_SLAB_UNRECLAIMABLE); +#endif +} + +static unsigned long get_nr_unevictable(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + return global_node_page_state(NR_UNEVICTABLE); +#else + return global_page_state(NR_UNEVICTABLE); +#endif +} + +static unsigned long get_nr_anon_mapped(void) +{ + #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) + return global_node_page_state(NR_ANON_MAPPED); + #else + return global_page_state(NR_ANON_PAGES); + #endif +} + /* * Although this is not really related to kernel-compatibility, I put this * helper macro here for now for a lack of better place --hpreg @@ -1516,16 +1547,11 @@ unsigned int reservedPages = MEMDEFAULTS_MIN_HOST_PAGES; unsigned int hugePages = (vm == NULL) ? 0 : BYTES_2_PAGES(vm->memInfo.hugePageBytes); - unsigned int lockedPages = global_page_state(NR_PAGETABLE) + - global_page_state(NR_SLAB_UNRECLAIMABLE) + - global_page_state(NR_UNEVICTABLE) + + unsigned int lockedPages = global_zone_page_state(NR_PAGETABLE) + + get_nr_slab_unreclaimable() + + get_nr_unevictable() + hugePages + reservedPages; - unsigned int anonPages = -#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) - global_page_state(NR_ANON_MAPPED); -#else - global_page_state(NR_ANON_PAGES); -#endif + unsigned int anonPages = get_nr_anon_mapped(); unsigned int swapPages = BYTES_2_PAGES(linuxState.swapSize); if (anonPages > swapPages) {