summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Marc Lenoir2019-07-27 13:06:24 +0200
committerJean-Marc Lenoir2019-07-27 13:06:24 +0200
commita425dd009dd8d22a4c541610bea347a549358a2a (patch)
treeb45ceead489cafde815d4e5fe206acf230d9c95d
parente1c74ee0aeae4e484d297362f9961f16213fc247 (diff)
downloadaur-a425dd009dd8d22a4c541610bea347a549358a2a.tar.gz
Compatibility with Linux 5.3-rc1
-rw-r--r--.SRCINFO6
-rw-r--r--PKGBUILD6
-rw-r--r--vmmon.patch373
-rw-r--r--vmnet.patch150
4 files changed, 235 insertions, 300 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 226f849ace2b..9a6f61f1243a 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,7 +1,7 @@
pkgbase = vmware-workstation11
pkgdesc = The industry standard for running multiple operating systems as virtual machines on a single Linux PC.
pkgver = 11.1.4
- pkgrel = 6
+ pkgrel = 7
url = https://www.vmware.com/products/workstation-for-linux.html
install = vmware-workstation.install
arch = x86_64
@@ -83,8 +83,8 @@ pkgbase = vmware-workstation11
sha256sums = d7a9fbf39a0345ae2f14f7f389f30b1110f605d187e0c241e99bbb18993c250d
sha256sums = 05e26d8b21d190ebabb7f693998114d9d5991d9dfb71acb4d990293a65b6b487
sha256sums = 6ce902b1dab8fc69be253abd8e79017011985eca850ff7acc7282f9ab668e35d
- sha256sums = 4a0060b80e5b37035f519c4aa0861cff22cf9e692588a7e9fda1833c49e53e3d
- sha256sums = c255ba20653814158242cb9398a353def0cdb7a4b433b968c1c4e8f573855ad8
+ sha256sums = 9ebcab451208860237ff2f4c9b3c3d98e0dcae61f9175bb3d69f8190f97af59c
+ sha256sums = 02d9934b4fbfd219a30f4d8365b8cc394719b4907946aad2e619359a778f6c09
sha256sums = 09711e59f708576d2fb09c464ebbb52806cb7f850cb3d5bbeea634fa58fb6c86
sha256sums = 29e0b0db9c0296ab81eee543803c4bd430e2c69c76e33492910e17280da1c05c
diff --git a/PKGBUILD b/PKGBUILD
index de50fd1e9cd8..5fe2422a2b7e 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -16,7 +16,7 @@ pkgname=vmware-workstation11
pkgver=11.1.4
_buildver=3848939
_pkgver=${pkgver}_${_buildver}
-pkgrel=6
+pkgrel=7
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'
@@ -118,8 +118,8 @@ sha256sums=(
'05e26d8b21d190ebabb7f693998114d9d5991d9dfb71acb4d990293a65b6b487'
'6ce902b1dab8fc69be253abd8e79017011985eca850ff7acc7282f9ab668e35d'
- '4a0060b80e5b37035f519c4aa0861cff22cf9e692588a7e9fda1833c49e53e3d'
- 'c255ba20653814158242cb9398a353def0cdb7a4b433b968c1c4e8f573855ad8'
+ '9ebcab451208860237ff2f4c9b3c3d98e0dcae61f9175bb3d69f8190f97af59c'
+ '02d9934b4fbfd219a30f4d8365b8cc394719b4907946aad2e619359a778f6c09'
)
options=(!strip emptydirs)
diff --git a/vmmon.patch b/vmmon.patch
index a801be3b146f..df5d5a69913f 100644
--- a/vmmon.patch
+++ b/vmmon.patch
@@ -1,5 +1,3 @@
-diff --git a/vmmon/Makefile b/vmmon/Makefile
-index de8162e..6124a71 100644
--- a/vmmon/Makefile
+++ b/vmmon/Makefile
@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
@@ -14,8 +12,6 @@ index de8162e..6124a71 100644
# Header directory for the running kernel
ifdef LINUXINCLUDE
-diff --git a/vmmon/common/hostif.h b/vmmon/common/hostif.h
-index 865abc0..2b94ce1 100644
--- a/vmmon/common/hostif.h
+++ b/vmmon/common/hostif.h
@@ -122,14 +122,10 @@ EXTERN MPN64 HostIF_GetNextAnonPage(VMDriver *vm, MPN64 mpn);
@@ -45,8 +41,6 @@ index 865abc0..2b94ce1 100644
+#endif
+
#endif // ifdef _HOSTIF_H_
-diff --git a/vmmon/common/memtrack.c b/vmmon/common/memtrack.c
-index e53daeb..eec9844 100644
--- a/vmmon/common/memtrack.c
+++ b/vmmon/common/memtrack.c
@@ -88,6 +88,7 @@
@@ -170,8 +164,6 @@ index e53daeb..eec9844 100644
/*
-diff --git a/vmmon/common/memtrack.h b/vmmon/common/memtrack.h
-index 977c5af..6d104ad 100644
--- a/vmmon/common/memtrack.h
+++ b/vmmon/common/memtrack.h
@@ -31,30 +31,22 @@
@@ -206,8 +198,6 @@ index 977c5af..6d104ad 100644
-#endif
#endif // _MEMTRACK_H_
-diff --git a/vmmon/common/task.c b/vmmon/common/task.c
-index de2429e..228996e 100644
--- a/vmmon/common/task.c
+++ b/vmmon/common/task.c
@@ -39,6 +39,9 @@
@@ -273,8 +263,6 @@ index de2429e..228996e 100644
/*
* We can't allocate memory with interrupts disabled on all hosts
-diff --git a/vmmon/common/vmx86.c b/vmmon/common/vmx86.c
-index dbe794c..156e94a 100644
--- a/vmmon/common/vmx86.c
+++ b/vmmon/common/vmx86.c
@@ -720,6 +720,35 @@ cleanup:
@@ -313,8 +301,6 @@ index dbe794c..156e94a 100644
/*
*----------------------------------------------------------------------
*
-diff --git a/vmmon/common/vmx86.h b/vmmon/common/vmx86.h
-index 71ea01b..9e227ca 100644
--- a/vmmon/common/vmx86.h
+++ b/vmmon/common/vmx86.h
@@ -106,6 +106,7 @@ extern PseudoTSC pseudoTSC;
@@ -325,7 +311,6 @@ index 71ea01b..9e227ca 100644
extern int Vmx86_ReleaseVM(VMDriver *vm);
extern int Vmx86_InitVM(VMDriver *vm, InitBlock *initParams);
extern int Vmx86_LateInitVM(VMDriver *vm);
-diff --git a/vmmon/include/compat_cred.h b/vmmon/include/compat_cred.h
--- a/vmmon/include/compat_cred.h
+++ b/vmmon/include/compat_cred.h
@@ -24,7 +24,11 @@
@@ -340,8 +325,6 @@ diff --git a/vmmon/include/compat_cred.h b/vmmon/include/compat_cred.h
#if !defined(current_fsuid) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
#define current_uid() (current->uid)
-diff --git a/vmmon/include/compat_pgtable.h b/vmmon/include/compat_pgtable.h
-index dedc25a..4722d4e 100644
--- a/vmmon/include/compat_pgtable.h
+++ b/vmmon/include/compat_pgtable.h
@@ -30,80 +30,32 @@
@@ -459,8 +442,6 @@ index dedc25a..4722d4e 100644
#endif /* __COMPAT_PGTABLE_H__ */
-diff --git a/vmmon/include/pgtbl.h b/vmmon/include/pgtbl.h
-index 39ef4e1..0935e09 100644
--- a/vmmon/include/pgtbl.h
+++ b/vmmon/include/pgtbl.h
@@ -26,154 +26,14 @@
@@ -849,10 +830,25 @@ index 39ef4e1..0935e09 100644
-
-
#endif /* __PGTBL_H__ */
-diff --git a/vmmon/linux/driver.c b/vmmon/linux/driver.c
-index 87cf45b..5390a93 100644
--- a/vmmon/linux/driver.c
+++ b/vmmon/linux/driver.c
+@@ -80,6 +80,16 @@
+
+ struct VMXLinuxState linuxState;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
++static inline void do_gettimeofday(struct timeval *tv)
++{
++ struct timespec64 now;
++
++ ktime_get_real_ts64(&now);
++ tv->tv_sec = now.tv_sec;
++ tv->tv_usec = now.tv_nsec / 1000;
++}
++#endif
+
+ /*
+ *----------------------------------------------------------------------
@@ -108,7 +108,9 @@
static int LinuxDriver_Close(struct inode *inode, struct file *filp);
@@ -987,8 +983,6 @@ index 87cf45b..5390a93 100644
break;
}
-diff --git a/vmmon/linux/hostif.c b/vmmon/linux/hostif.c
-index fd32013..583d6da 100644
--- a/vmmon/linux/hostif.c
+++ b/vmmon/linux/hostif.c
@@ -77,19 +77,22 @@
@@ -1037,6 +1031,20 @@ index fd32013..583d6da 100644
return retval != numPages;
}
+@@ -1606,9 +1606,13 @@
+ * since at least 2.6.0.
+ */
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
+ extern unsigned long totalram_pages;
+
+ unsigned int totalPhysicalPages = totalram_pages;
++#else
++ unsigned int totalPhysicalPages = totalram_pages();
++#endif
+
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
+ return MemDefaults_CalcMaxLockedPages(totalPhysicalPages);
@@ -1626,12 +1631,34 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN
unsigned int reservedPages = MEMDEFAULTS_MIN_HOST_PAGES;
unsigned int hugePages = (vm == NULL) ? 0 :
@@ -1077,7 +1085,64 @@ index fd32013..583d6da 100644
if (anonPages > swapPages) {
lockedPages += anonPages - swapPages;
-@@ -1726,9 +1753,6 @@
+@@ -1691,6 +1717,49 @@
+ /*
+ *----------------------------------------------------------------------
+ *
++ * HostIFGetTime --
++ *
++ * Reads the current time in UPTIME_FREQ units.
++ *
++ * Results:
++ * The uptime, in units of UPTIME_FREQ.
++ *
++ * Side effects:
++ * None.
++ *
++ *----------------------------------------------------------------------
++ */
++
++static uint64
++HostIFGetTime(void)
++{
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
++ struct timeval tv;
++
++ do_gettimeofday(&tv);
++ return tv.tv_usec * (UPTIME_FREQ / 1000000) + tv.tv_sec * UPTIME_FREQ;
++#else
++ struct timespec64 now;
++
++ /*
++ * Use raw time used by Posix timers. This time is not affected by
++ * NTP adjustments, so it may drift from real time and monotonic time,
++ * but it will stay in sync with other timers.
++ */
++ ktime_get_raw_ts64(&now);
++ /*
++ * UPTIME_FREQ resolution is lower than tv_nsec,
++ * so we have to do division...
++ */
++ ASSERT_ON_COMPILE(1000000000 % UPTIME_FREQ == 0);
++ return now.tv_nsec / (1000000000 / UPTIME_FREQ) + now.tv_sec * UPTIME_FREQ;
++#endif
++}
++
++
++/*
++ *----------------------------------------------------------------------
++ *
+ * HostIFReadUptimeWork --
+ *
+ * Reads the current uptime. The uptime is based on getimeofday,
+@@ -1719,16 +1788,12 @@
+ static uint64
+ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies
+ {
+- struct timeval tv;
+ uint64 monotime, uptime, upBase, monoBase;
+ int64 diff;
+ uint32 version;
unsigned long jifs, jifBase;
unsigned int attempts = 0;
@@ -1087,6 +1152,21 @@ index fd32013..583d6da 100644
retry:
do {
version = VersionedAtomic_BeginTryRead(&uptimeState.version);
+@@ -1737,13 +1802,12 @@
+ monoBase = uptimeState.monotimeBase;
+ } while (!VersionedAtomic_EndTryRead(&uptimeState.version, version));
+
+- do_gettimeofday(&tv);
++ uptime = HostIFGetTime();
+ upBase = Atomic_Read64(&uptimeState.uptimeBase);
+
+ monotime = (uint64)(jifs - jifBase) * (UPTIME_FREQ / HZ);
+ monotime += monoBase;
+
+- uptime = tv.tv_usec * (UPTIME_FREQ / 1000000) + tv.tv_sec * UPTIME_FREQ;
+ uptime += upBase;
+
+ /*
@@ -1794,7 +1818,7 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies
*/
@@ -1096,9 +1176,20 @@ index fd32013..583d6da 100644
{
unsigned long jifs;
uintptr_t flags;
-@@ -1856,8 +1880,13 @@ HostIF_InitUptime(void)
- -(tv.tv_usec * (UPTIME_FREQ / 1000000) +
- tv.tv_sec * UPTIME_FREQ));
+@@ -1848,16 +1912,19 @@
+ void
+ HostIF_InitUptime(void)
+ {
+- struct timeval tv;
++ uint64 tm;
+
+ uptimeState.jiffiesBase = jiffies;
+- do_gettimeofday(&tv);
+- Atomic_Write64(&uptimeState.uptimeBase,
+- -(tv.tv_usec * (UPTIME_FREQ / 1000000) +
+- tv.tv_sec * UPTIME_FREQ));
++ tm = HostIFGetTime();
++ Atomic_Write64(&uptimeState.uptimeBase, -tm);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0) && !defined(timer_setup)
init_timer(&uptimeState.timer);
@@ -1298,8 +1389,20 @@ index fd32013..583d6da 100644
/*
*----------------------------------------------------------------------
-diff --git a/vmmon/vmcore/moduleloop.c b/vmmon/vmcore/moduleloop.c
-index 94aab9e..a6b2c1a 100644
+@@ -3512,7 +3684,12 @@
+
+ ASSERT(handle);
+
+- if (!access_ok(VERIFY_WRITE, p, size)) {
++#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
++ if (!access_ok(VERIFY_WRITE, p, size))
++#else
++ if (!access_ok(p, size))
++#endif
++ {
+ printk(KERN_ERR "%s: Couldn't verify write to uva 0x%p with size %"
+ FMTSZ"u\n", __func__, p, size);
+
--- a/vmmon/vmcore/moduleloop.c
+++ b/vmmon/vmcore/moduleloop.c
@@ -205,11 +205,13 @@ skipTaskSwitch:;
@@ -1343,165 +1446,6 @@ index ccdd295..b4b71fb 100644
MODULEBUILDDIR=$(MODULEBUILDDIR) modules
$(MAKE) -C $$PWD SRCROOT=$$PWD/$(SRCROOT) \
MODULEBUILDDIR=$(MODULEBUILDDIR) postbuild
-From ca44ce7215b91f82ff500843784b4e86a720fffe Mon Sep 17 00:00:00 2001
-From: Michal Kubecek <mkubecek@suse.cz>
-Date: Mon, 31 Dec 2018 00:11:35 +0100
-Subject: [PATCH] vmmon: totalram_pages is a function since 5.0
-
-Since commit ca79b0c211af ("mm: convert totalram_pages and totalhigh_pages
-variables to atomic") in v5.0-rc1, totalram_pages() is an accessor function
-and the actual variable is an atomic.
----
- vmmon-only/linux/hostif.c | 18 ++++++++++--------
- 1 file changed, 10 insertions(+), 8 deletions(-)
-
-diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
-index af4b1d9..d32653c 100644
---- a/vmmon-only/linux/hostif.c
-+++ b/vmmon-only/linux/hostif.c
-@@ -211,6 +211,15 @@ static void UnlockEntry(void *clientData, MemTrackEntry *entryPtr);
- uint8 monitorIPIVector;
- uint8 hvIPIVector;
-
-+static unsigned long compat_totalram_pages(void)
-+{
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0)
-+ return totalram_pages;
-+#else
-+ return totalram_pages();
-+#endif
-+}
-+
- /*
- *-----------------------------------------------------------------------------
- *
-@@ -1601,14 +1610,7 @@ unsigned int
- HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN
- unsigned int currentlyLockedPages) // IN
- {
-- /*
-- * This variable is available and exported to modules,
-- * since at least 2.6.0.
-- */
--
-- extern unsigned long totalram_pages;
--
-- unsigned int totalPhysicalPages = totalram_pages;
-+ unsigned int totalPhysicalPages = compat_totalram_pages();
-
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28)
- return MemDefaults_CalcMaxLockedPages(totalPhysicalPages);
-From c3fb5cda191137afddfdbd2f31bb4b15f9aeb3f2 Mon Sep 17 00:00:00 2001
-From: Michal Kubecek <mkubecek@suse.cz>
-Date: Mon, 31 Dec 2018 00:15:11 +0100
-Subject: [PATCH] vmmon: bring back the do_gettimeofday() helper
-
-The do_gettimeofday() helper was removed by commit e4b92b108c6c
-("timekeeping: remove obsolete time accessors") in v5.0-rc1. Bring it back
-for users in vmmon-only/linux/hostif.c.
-
-This feels like a quick and clumsy band aid to allow build with post-4.20
-kernels. On a closer look, the whole gymnastics around uptimeState and
-HostIFReadUptimeWork() with jiffies and wall time checking and correcting
-each other seems to be a workaround for an absence of high resolution
-monotonic time. Considering ktime_get_ts64() is available since 3.17 and
-before that, ktime_get_ts() since 2.6.17, perhaps the time has come to
-clean all this machinery up. But something like this would be beyond the
-scope of this repository.
----
- vmmon-only/include/compat_timekeeping32.h | 15 +++++++++++++++
- vmmon-only/linux/driver.c | 1 +
- vmmon-only/linux/hostif.c | 1 +
- vmnet-only/bridge.c | 11 +++++++++++
- 4 files changed, 28 insertions(+)
- create mode 100644 vmmon-only/include/compat_timekeeping32.h
-
-diff --git a/vmmon-only/include/compat_timekeeping32.h b/vmmon-only/include/compat_timekeeping32.h
-new file mode 100644
-index 0000000..5730dcd
---- /dev/null
-+++ b/vmmon-only/include/compat_timekeeping32.h
-@@ -0,0 +1,15 @@
-+#ifndef __COMPAT_TIMEKEEPING32_H__
-+#define __COMPAT_TIMEKEEPING32_H__
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
-+static inline void do_gettimeofday(struct timeval *tv)
-+{
-+ struct timespec64 now;
-+
-+ ktime_get_real_ts64(&now);
-+ tv->tv_sec = now.tv_sec;
-+ tv->tv_usec = now.tv_nsec / 1000;
-+}
-+#endif
-+
-+#endif /* __COMPAT_TIMEKEEPING32_H__ */
-diff --git a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c
-index ca4b538..cdc7fc1 100644
---- a/vmmon-only/linux/driver.c
-+++ b/vmmon-only/linux/driver.c
-@@ -34,6 +34,7 @@
- #include "compat_version.h"
- #include "compat_module.h"
- #include "compat_page.h"
-+#include "compat_timekeeping32.h"
-
- #include "usercalldefs.h"
-
-diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
-index c985aa0..75f4c8a 100644
---- a/vmmon-only/linux/hostif.c
-+++ b/vmmon-only/linux/hostif.c
-@@ -102,6 +102,7 @@
- #include "pgtbl.h"
- #include "vmmonInt.h"
- #include "versioned_atomic.h"
-+#include "compat_timekeeping32.h"
-
- /*
- * Determine if we can use high resolution timers.
-From 5db3c8a86f435e21f37a2acf386e2e52a1b42aa6 Mon Sep 17 00:00:00 2001
-From: Michal Kubecek <mkubecek@suse.cz>
-Date: Sat, 5 Jan 2019 01:54:57 +0100
-Subject: [PATCH] modules: handle access_ok() with two arguments
-
-Since commit 96d4f267e40f ("Remove 'type' argument from access_ok()
-function") in v5.0-rc1, the type argument of access_ok() was dropped.
-The same commit also dropped macros VERIFY_READ and VERIFY_WRITE so check
-for their existence on pre-5.0 kernels to allow build against kernels with
-this change backported.
----
- vmmon-only/linux/hostif.c | 8 +++++++-
- vmnet-only/userif.c | 8 +++++++-
- 2 files changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
-index 75f4c8a..987932b 100644
---- a/vmmon-only/linux/hostif.c
-+++ b/vmmon-only/linux/hostif.c
-@@ -221,6 +221,12 @@ static unsigned long compat_totalram_pages(void)
- #endif
- }
-
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0) && defined(VERIFY_WRITE)
-+ #define write_access_ok(addr, size) access_ok(VERIFY_WRITE, addr, size)
-+#else
-+ #define write_access_ok(addr, size) access_ok(addr, size)
-+#endif
-+
- /*
- *-----------------------------------------------------------------------------
- *
-@@ -3644,7 +3650,7 @@ HostIF_MapUserMem(VA addr, // IN: User memory virtual address
-
- ASSERT(handle);
-
-- if (!access_ok(VERIFY_WRITE, p, size)) {
-+ if (!write_access_ok(p, size)) {
- printk(KERN_ERR "%s: Couldn't verify write to uva 0x%p with size %"
- FMTSZ"u\n", __func__, p, size);
-
From 41413a9b6e660a93600a438944d85b6f51eb680c Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Tue, 5 Mar 2019 13:21:35 +0100
@@ -1519,7 +1463,7 @@ diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
index ef88a22..8ca17de 100644
--- a/vmmon-only/linux/hostif.c
+++ b/vmmon-only/linux/hostif.c
-@@ -2311,7 +2311,7 @@ isVAReadable(VA r) // IN:
+@@ -2345,7 +2345,7 @@ isVAReadable(VA r) // IN:
int ret;
old_fs = get_fs();
@@ -1528,7 +1472,7 @@ index ef88a22..8ca17de 100644
r = APICR_TO_ADDR(r, APICR_VERSION);
ret = HostIF_CopyFromUser(&dummy, (void*)r, sizeof(dummy));
set_fs(old_fs);
-@@ -2512,7 +2512,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
+@@ -2546,7 +2546,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
}
old_fs = get_fs();
@@ -1537,7 +1481,7 @@ index ef88a22..8ca17de 100644
{
struct poll_wqueues table;
-@@ -2641,7 +2641,7 @@ HostIF_SemaphoreSignal(uint64 *args) // IN:
+@@ -2675,7 +2675,7 @@ HostIF_SemaphoreSignal(uint64 *args) // IN:
}
old_fs = get_fs();
@@ -1570,17 +1514,17 @@ diff --git a/vmmon-only/linux/driver.c b/vmmon-only/linux/driver.c
index cdc7fc1..fd9fdac 100644
--- a/vmmon-only/linux/driver.c
+++ b/vmmon-only/linux/driver.c
-@@ -81,6 +81,9 @@ static Bool LinuxDriverCheckPadding(void);
-
- struct VMXLinuxState linuxState;
-
+@@ -90,6 +90,9 @@ static Bool LinuxDriverCheckPadding(void);
+ tv->tv_usec = now.tv_nsec / 1000;
+ }
+ #endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 17, 0)
+typedef int vm_fault_t;
+#endif
/*
*----------------------------------------------------------------------
-@@ -110,9 +113,9 @@ long LinuxDriver_Ioctl(struct file *filp, u_int iocmd,
+@@ -119,9 +122,9 @@ long LinuxDriver_Ioctl(struct file *filp, u_int iocmd,
static int LinuxDriver_Close(struct inode *inode, struct file *filp);
static unsigned int LinuxDriverPoll(struct file *file, poll_table *wait);
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
@@ -1592,7 +1536,7 @@ index cdc7fc1..fd9fdac 100644
#else
static struct page *LinuxDriverNoPage(struct vm_area_struct *vma,
unsigned long address,
-@@ -940,11 +943,11 @@ LinuxDriverPollTimeout(compat_timer_arg_t unused) // IN:
+@@ -949,11 +952,11 @@ LinuxDriverPollTimeout(compat_timer_arg_t unused) // IN:
*/
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
@@ -1607,3 +1551,38 @@ index cdc7fc1..fd9fdac 100644
#else
static struct page *LinuxDriverNoPage(struct vm_area_struct *vma, //IN
unsigned long address, //IN
+From d20641f619bd3766cf5b50b2c750700eab189bd9 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Tue, 9 Jul 2019 21:07:04 +0200
+Subject: [PATCH] vmmon: fix HostIF_SetFastClockRate() not to use force_sig()
+
+Commit 3cf5d076fb4d ("signal: Remove task parameter from force_sig") in
+v5.3-rc1 drops second argument of force_sig(); before that, all callers
+which passed something else than current task as second argument were
+fixed, mostly to use send_sig() instead.
+
+The situation in HostIF_SetFastClockRate() is the same as e.g. in bpfilter
+call fixed by commit 1dfd1711de29 ("signal/bpfilter: Fix bpfilter_kernl to
+use send_sig not force_sig"): locking in force_sig_info() cannot handle
+task exiting and using force_sig() for SIGKILL is pointless anyway as this
+signal cannot be blocked.
+
+As send_sig() is present with unchanged signature since the pre-git era, we
+can use send_sig() unconditionally, regardless of kernel version.
+---
+ vmmon-only/linux/hostif.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
+index 210f281..4da863b 100644
+--- a/vmmon-only/linux/hostif.c
++++ b/vmmon-only/linux/hostif.c
+@@ -3636,7 +3636,7 @@ HostIF_SetFastClockRate(unsigned int rate) // IN: Frequency in Hz.
+ }
+ } else {
+ if (linuxState.fastClockThread) {
+- force_sig(SIGKILL, linuxState.fastClockThread);
++ send_sig(SIGKILL, linuxState.fastClockThread, 1);
+ kthread_stop(linuxState.fastClockThread);
+ close_rtc(linuxState.fastClockFile, current->files);
+
diff --git a/vmnet.patch b/vmnet.patch
index 8e99551a5ef2..a6e65d7cfc45 100644
--- a/vmnet.patch
+++ b/vmnet.patch
@@ -1,5 +1,3 @@
-diff --git a/vmnet/Makefile b/vmnet/Makefile
-index 459846e..cd29652 100644
--- a/vmnet/Makefile
+++ b/vmnet/Makefile
@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
@@ -14,7 +12,6 @@ index 459846e..cd29652 100644
# Header directory for the running kernel
ifdef LINUXINCLUDE
-diff --git a/vmnet/bridge.c b/vmnet/bridge.c
--- a/vmnet/bridge.c
+++ b/vmnet/bridge.c
@@ -636,7 +636,7 @@
@@ -45,7 +42,6 @@ diff --git a/vmnet/bridge.c b/vmnet/bridge.c
switch (msg) {
case NETDEV_UNREGISTER:
LOG(2, (KERN_DEBUG "bridge-%s: interface %s is unregistering\n",
-diff --git a/vmnet/compat_netdevice.h b/vmnet/compat_netdevice.h
--- a/vmnet/compat_netdevice.h
+++ b/vmnet/compat_netdevice.h
@@ -337,4 +337,11 @@
@@ -60,7 +56,6 @@ diff --git a/vmnet/compat_netdevice.h b/vmnet/compat_netdevice.h
+#endif
+
#endif /* __COMPAT_NETDEVICE_H__ */
-diff --git a/vmnet/netif.c b/vmnet/netif.c
--- a/vmnet/netif.c
+++ b/vmnet/netif.c
@@ -149,7 +149,7 @@
@@ -81,8 +76,6 @@ diff --git a/vmnet/netif.c b/vmnet/netif.c
return 0;
}
-diff --git a/vmnet/userif.c b/vmnet/userif.c
-index 94146f6..5298406 100644
--- a/vmnet/userif.c
+++ b/vmnet/userif.c
@@ -36,6 +36,9 @@
@@ -107,8 +100,59 @@ index 94146f6..5298406 100644
if (retval != 1) {
return NULL;
-diff --git a/vmnet/vmnetInt.h b/vmnet/vmnetInt.h
-index 0ee52ec..4e3b923 100644
+@@ -143,16 +143,21 @@
+ */
+
+ static INLINE int
+-VNetUserIfMapPtr(VA uAddr, // IN: pointer to user memory
++VNetUserIfMapPtr(VA64 uAddr, // IN: pointer to user memory
+ size_t size, // IN: size of data
+ struct page **p, // OUT: locked page
+ void **ptr) // OUT: kernel mapped pointer
+ {
+- if (!access_ok(VERIFY_WRITE, (void *)uAddr, size) ||
+- (((uAddr + size - 1) & ~(PAGE_SIZE - 1)) !=
+- (uAddr & ~(PAGE_SIZE - 1)))) {
++ uint8 v;
++
++ /* Check area does not straddle two pages. */
++ if ((uAddr & (PAGE_SIZE - 1)) + size > PAGE_SIZE) {
+ return -EINVAL;
+ }
++ /* Check if it is user's area. UserifLockPage() checks writability. */
++ if (copy_from_user(&v, (void *)(unsigned long)uAddr, sizeof v) != 0) {
++ return -EFAULT;
++ }
+
+ *p = UserifLockPage(uAddr);
+ if (*p == NULL) {
+@@ -164,7 +169,7 @@
+ }
+
+ static INLINE int
+-VNetUserIfMapUint32Ptr(VA uAddr, // IN: pointer to user memory
++VNetUserIfMapUint32Ptr(VA64 uAddr, // IN: pointer to user memory
+ struct page **p, // OUT: locked page
+ uint32 **ptr) // OUT: kernel mapped pointer
+ {
+@@ -209,7 +214,7 @@
+ return -EBUSY;
+ }
+
+- if ((retval = VNetUserIfMapUint32Ptr((VA)vn->pollPtr, &pollPage,
++ if ((retval = VNetUserIfMapUint32Ptr(vn->pollPtr, &pollPage,
+ &pollPtr)) < 0) {
+ return retval;
+ }
+@@ -227,7 +232,7 @@
+ goto error_free;
+ }
+
+- if ((retval = VNetUserIfMapUint32Ptr((VA)vn->recvClusterPtr,
++ if ((retval = VNetUserIfMapUint32Ptr(vn->recvClusterPtr,
+ &recvClusterPage,
+ &recvClusterCount)) < 0) {
+ goto error_free;
--- a/vmnet/vmnetInt.h
+++ b/vmnet/vmnetInt.h
@@ -77,7 +77,7 @@
@@ -147,91 +191,3 @@ index caab6b9..c2fc51f 100644
MODULEBUILDDIR=$(MODULEBUILDDIR) modules
$(MAKE) -C $$PWD SRCROOT=$$PWD/$(SRCROOT) \
MODULEBUILDDIR=$(MODULEBUILDDIR) postbuild
-From c3fb5cda191137afddfdbd2f31bb4b15f9aeb3f2 Mon Sep 17 00:00:00 2001
-From: Michal Kubecek <mkubecek@suse.cz>
-Date: Mon, 31 Dec 2018 00:15:11 +0100
-Subject: [PATCH] vmmon: bring back the do_gettimeofday() helper
-
-The do_gettimeofday() helper was removed by commit e4b92b108c6c
-("timekeeping: remove obsolete time accessors") in v5.0-rc1. Bring it back
-for users in vmmon-only/linux/hostif.c.
-
-This feels like a quick and clumsy band aid to allow build with post-4.20
-kernels. On a closer look, the whole gymnastics around uptimeState and
-HostIFReadUptimeWork() with jiffies and wall time checking and correcting
-each other seems to be a workaround for an absence of high resolution
-monotonic time. Considering ktime_get_ts64() is available since 3.17 and
-before that, ktime_get_ts() since 2.6.17, perhaps the time has come to
-clean all this machinery up. But something like this would be beyond the
-scope of this repository.
----
- vmmon-only/include/compat_timekeeping32.h | 15 +++++++++++++++
- vmmon-only/linux/driver.c | 1 +
- vmmon-only/linux/hostif.c | 1 +
- vmnet-only/bridge.c | 11 +++++++++++
- 4 files changed, 28 insertions(+)
- create mode 100644 vmmon-only/include/compat_timekeeping32.h
-
-diff --git a/vmnet-only/bridge.c b/vmnet-only/bridge.c
-index c569054..6e3249a 100644
---- a/vmnet-only/bridge.c
-+++ b/vmnet-only/bridge.c
-@@ -52,6 +52,17 @@
- #include "vnetInt.h"
- #include "smac.h"
-
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
-+static inline void do_gettimeofday(struct timeval *tv)
-+{
-+ struct timespec64 now;
-+
-+ ktime_get_real_ts64(&now);
-+ tv->tv_sec = now.tv_sec;
-+ tv->tv_usec = now.tv_nsec / 1000;
-+}
-+#endif
-+
- #define VNET_BRIDGE_HISTORY 48
-
- /*
-From 5db3c8a86f435e21f37a2acf386e2e52a1b42aa6 Mon Sep 17 00:00:00 2001
-From: Michal Kubecek <mkubecek@suse.cz>
-Date: Sat, 5 Jan 2019 01:54:57 +0100
-Subject: [PATCH] modules: handle access_ok() with two arguments
-
-Since commit 96d4f267e40f ("Remove 'type' argument from access_ok()
-function") in v5.0-rc1, the type argument of access_ok() was dropped.
-The same commit also dropped macros VERIFY_READ and VERIFY_WRITE so check
-for their existence on pre-5.0 kernels to allow build against kernels with
-this change backported.
----
- vmmon-only/linux/hostif.c | 8 +++++++-
- vmnet-only/userif.c | 8 +++++++-
- 2 files changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/vmnet-only/userif.c b/vmnet-only/userif.c
-index a7aee04..eecd4f8 100644
---- a/vmnet-only/userif.c
-+++ b/vmnet-only/userif.c
-@@ -91,6 +91,12 @@ extern unsigned int vnet_max_qlen;
- # define compat_kunmap(page) kunmap((page).p)
- #endif
-
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 0, 0) && defined(VERIFY_WRITE)
-+ #define write_access_ok(addr, size) access_ok(VERIFY_WRITE, addr, size)
-+#else
-+ #define write_access_ok(addr, size) access_ok(addr, size)
-+#endif
-+
- /*
- *-----------------------------------------------------------------------------
- *
-@@ -148,7 +154,7 @@ VNetUserIfMapPtr(VA uAddr, // IN: pointer to user memory
- struct page **p, // OUT: locked page
- void **ptr) // OUT: kernel mapped pointer
- {
-- if (!access_ok(VERIFY_WRITE, (void *)uAddr, size) ||
-+ if (!write_access_ok((void *)uAddr, size) ||
- (((uAddr + size - 1) & ~(PAGE_SIZE - 1)) !=
- (uAddr & ~(PAGE_SIZE - 1)))) {
- return -EINVAL;