summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Marc Lenoir2017-09-11 09:13:31 +0200
committerJean-Marc Lenoir2017-09-11 09:13:31 +0200
commit81a995e44bff866ca4a3c11a43d1d97a9781e108 (patch)
tree90ba814483f42f7e811f0e271827ca6208464e7f
parent2f3e36382a9e2292e472795a84adcdda63d795e0 (diff)
downloadaur-81a995e44bff866ca4a3c11a43d1d97a9781e108.tar.gz
Fix a memory management problem with Linux 4.13
-rw-r--r--.SRCINFO4
-rw-r--r--PKGBUILD4
-rw-r--r--vmmon.patch59
3 files changed, 63 insertions, 4 deletions
diff --git a/.SRCINFO b/.SRCINFO
index ac50f674376e..2842a38a932c 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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
diff --git a/PKGBUILD b/PKGBUILD
index c40f2b04183b..f38801eea873 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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);