diff options
author | Jean-Marc Lenoir | 2017-09-11 09:13:31 +0200 |
---|---|---|
committer | Jean-Marc Lenoir | 2017-09-11 09:13:31 +0200 |
commit | 81a995e44bff866ca4a3c11a43d1d97a9781e108 (patch) | |
tree | 90ba814483f42f7e811f0e271827ca6208464e7f | |
parent | 2f3e36382a9e2292e472795a84adcdda63d795e0 (diff) | |
download | aur-81a995e44bff866ca4a3c11a43d1d97a9781e108.tar.gz |
Fix a memory management problem with Linux 4.13
-rw-r--r-- | .SRCINFO | 4 | ||||
-rw-r--r-- | PKGBUILD | 4 | ||||
-rw-r--r-- | vmmon.patch | 59 |
3 files changed, 63 insertions, 4 deletions
@@ -1,7 +1,7 @@ pkgbase = vmware-workstation pkgdesc = The industry standard for running multiple operating systems as virtual machines on a single Linux PC. pkgver = 12.5.7_5813279 - pkgrel = 3 + pkgrel = 4 url = https://www.vmware.com/products/workstation-for-linux.html install = vmware-workstation.install arch = x86_64 @@ -84,7 +84,7 @@ pkgbase = vmware-workstation sha256sums = 3a62d45f046b22d1fba9c34db42d8b2774b084f82356b9f18f05bd2cef214ace sha256sums = 0a5aa819ca73513407acaf67779d95745314f7222afbd3fc2eadc80f24054d47 sha256sums = 7c666fa2c09c19d8af7b97227ee564ce0d5e044897167db583ecd67217a36394 - sha256sums = 4339a98bd5aba421bc1043f2ee97ea00b082733c81bce321edc7bc72e16ce09b + sha256sums = b04baffa8ee7b5be56aba3d49d9c06be5e34a31808a6f93b899408dbda9aef40 sha256sums = 4c960079fec78682000a1c2e82dcaae69a6e91858dea641b707cf60674f3799f sha256sums = d7e6b21fef94b4d3fe655a68c20a9556a718a252826a899fb46c4f2475046954 sha256sums = 01b187cb9a951190eda545e5d0235a98b0018f50942b4485844b627c3617d8d2 @@ -15,7 +15,7 @@ #PKGEXT=.pkg.tar pkgname=vmware-workstation pkgver=12.5.7_5813279 -pkgrel=3 +pkgrel=4 pkgdesc='The industry standard for running multiple operating systems as virtual machines on a single Linux PC.' arch=(x86_64) url='https://www.vmware.com/products/workstation-for-linux.html' @@ -116,7 +116,7 @@ sha256sums=( '3a62d45f046b22d1fba9c34db42d8b2774b084f82356b9f18f05bd2cef214ace' '0a5aa819ca73513407acaf67779d95745314f7222afbd3fc2eadc80f24054d47' '7c666fa2c09c19d8af7b97227ee564ce0d5e044897167db583ecd67217a36394' - '4339a98bd5aba421bc1043f2ee97ea00b082733c81bce321edc7bc72e16ce09b' + 'b04baffa8ee7b5be56aba3d49d9c06be5e34a31808a6f93b899408dbda9aef40' '4c960079fec78682000a1c2e82dcaae69a6e91858dea641b707cf60674f3799f' 'd7e6b21fef94b4d3fe655a68c20a9556a718a252826a899fb46c4f2475046954' ) diff --git a/vmmon.patch b/vmmon.patch index ce7f29d745e5..a61c1510e6a7 100644 --- a/vmmon.patch +++ b/vmmon.patch @@ -158,6 +158,44 @@ index fd32013..583d6da 100644 #include <linux/signal.h> #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) #include <linux/taskstats_kern.h> // For linux/sched/signal.h without version check +@@ -99,6 +99,37 @@ + #include "vmmonInt.h" + #include "versioned_atomic.h" + ++#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 ++} ++ + /* + * Determine if we can use high resolution timers. + */ @@ -142,6 +146,10 @@ */ #define LOCKED_PAGE_SLACK 10000 @@ -399,6 +437,27 @@ index fd32013..583d6da 100644 */ unsigned int forHost; +@@ -1594,16 +1625,11 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN + 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) { @@ -1607,7 +1617,7 @@ unsigned int swapPages = BYTES_2_PAGES(linuxState.swapSize); |