diff options
author | Jean-Marc Lenoir | 2019-07-27 13:06:24 +0200 |
---|---|---|
committer | Jean-Marc Lenoir | 2019-07-27 13:06:24 +0200 |
commit | a425dd009dd8d22a4c541610bea347a549358a2a (patch) | |
tree | b45ceead489cafde815d4e5fe206acf230d9c95d | |
parent | e1c74ee0aeae4e484d297362f9961f16213fc247 (diff) | |
download | aur-a425dd009dd8d22a4c541610bea347a549358a2a.tar.gz |
Compatibility with Linux 5.3-rc1
-rw-r--r-- | .SRCINFO | 6 | ||||
-rw-r--r-- | PKGBUILD | 6 | ||||
-rw-r--r-- | vmmon.patch | 373 | ||||
-rw-r--r-- | vmnet.patch | 150 |
4 files changed, 235 insertions, 300 deletions
@@ -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 @@ -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; |