diff options
Diffstat (limited to 'vmmon.patch')
-rw-r--r-- | vmmon.patch | 240 |
1 files changed, 69 insertions, 171 deletions
diff --git a/vmmon.patch b/vmmon.patch index df5d5a69913f..49856121ae62 100644 --- a/vmmon.patch +++ b/vmmon.patch @@ -12,6 +12,29 @@ # Header directory for the running kernel ifdef LINUXINCLUDE +@@ -100,6 +104,13 @@ auto-build: $(DRIVER_KO) + $(DRIVER): $(DRIVER_KO) + if [ $< -nt $@ ] || [ ! -e $@ ] ; then cp -f $< $@; fi + ++# Use SUBDIRS on 2.x, 3.x, 4.x. Use M on newer kernels. ++ifeq ($(filter-out 2 3 4,$(firstword $(subst ., ,$(VM_UNAME)))),) ++DIRVAR := SUBDIRS ++else ++DIRVAR := M ++endif ++ + # Pass gcc version down the chain, so we can detect if kernel attempts to use unapproved compiler + VM_CCVER := $(VMCCVER) + export VM_CCVER +@@ -117,7 +128,7 @@ prebuild:: ; + postbuild:: ; + + $(DRIVER_KO): prebuild +- $(MAKE) -C $(BUILD_DIR) SUBDIRS=$$PWD SRCROOT=$$PWD/$(SRCROOT) \ ++ $(MAKE) -C $(BUILD_DIR) $(DIRVAR)=$$PWD SRCROOT=$$PWD/$(SRCROOT) \ + MODULEBUILDDIR=$(MODULEBUILDDIR) modules + $(MAKE) -C $$PWD SRCROOT=$$PWD/$(SRCROOT) \ + MODULEBUILDDIR=$(MODULEBUILDDIR) postbuild --- a/vmmon/common/hostif.h +++ b/vmmon/common/hostif.h @@ -122,14 +122,10 @@ EXTERN MPN64 HostIF_GetNextAnonPage(VMDriver *vm, MPN64 mpn); @@ -849,12 +872,14 @@ /* *---------------------------------------------------------------------- -@@ -108,7 +108,9 @@ +@@ -108,7 +108,11 @@ static int LinuxDriver_Close(struct inode *inode, struct file *filp); static unsigned int LinuxDriverPoll(struct file *file, poll_table *wait); -#if defined(VMW_NOPAGE_2624) -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) ++static vm_fault_t LinuxDriverFault(struct vm_fault *fault); ++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +static int LinuxDriverFault(struct vm_fault *fault); +#elif defined(VMW_NOPAGE_2624) static int LinuxDriverFault(struct vm_area_struct *vma, struct vm_fault *fault); @@ -917,13 +942,18 @@ { LinuxDriverWakeUp(FALSE); } -@@ -928,7 +934,10 @@ +@@ -928,7 +934,15 @@ *----------------------------------------------------------------------------- */ -#if defined(VMW_NOPAGE_2624) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) -+static int ++static ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) ++vm_fault_t ++#else ++int ++#endif +LinuxDriverFault(struct vm_fault *fault) //IN/OUT +#elif defined(VMW_NOPAGE_2624) static int LinuxDriverFault(struct vm_area_struct *vma, //IN @@ -1221,6 +1251,33 @@ ret = vPgAddr | (((VA)p) & (PAGE_SIZE - 1)); +@@ -2278,7 +2345,7 @@ isVAReadable(VA r) // IN: + int ret; + + old_fs = get_fs(); +- set_fs(get_ds()); ++ set_fs(KERNEL_DS); + r = APICR_TO_ADDR(r, APICR_VERSION); + ret = HostIF_CopyFromUser(&dummy, (void*)r, sizeof(dummy)); + set_fs(old_fs); +@@ -2479,7 +2546,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: + } + + old_fs = get_fs(); +- set_fs(get_ds()); ++ set_fs(KERNEL_DS); + + { + struct poll_wqueues table; +@@ -2608,7 +2675,7 @@ HostIF_SemaphoreSignal(uint64 *args) // IN: + } + + old_fs = get_fs(); +- set_fs(get_ds()); ++ set_fs(KERNEL_DS); + + /* + * Always write sizeof(uint64) bytes. This works fine for eventfd and @@ -2850,13 +2874,75 @@ HostIF_CallOnEachCPU(void (*func)(void*), // IN: function to call } @@ -1389,6 +1446,14 @@ /* *---------------------------------------------------------------------- +@@ -3464,7 +3477,6 @@ HostIF_SetFastClockRate(unsigned int rate) // IN: Frequency in Hz. + } + } else { + if (linuxState.fastClockThread) { +- force_sig(SIGKILL, linuxState.fastClockThread); + kthread_stop(linuxState.fastClockThread); + close_rtc(linuxState.fastClockFile, current->files); + @@ -3512,7 +3684,12 @@ ASSERT(handle); @@ -1419,170 +1484,3 @@ break; } -From 8ba37a5023f939ba8d2e0d91b916ff442b1c18dd Mon Sep 17 00:00:00 2001 -From: Michal Kubecek <mkubecek@suse.cz> -Date: Mon, 31 Dec 2018 00:05:42 +0100 -Subject: [PATCH] modules: replace SUBDIRS with M - -Since commit 0126be38d988 ("kbuild: announce removal of SUBDIRS if used") -in v5.0-rc1, using SUBDIRS when building out of tree modules produces -a deprecation warning. As M used to work since pretty much ever, use it -unconditionally. ---- - vmmon-only/Makefile | 2 +- - vmnet-only/Makefile | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/vmmon-only/Makefile b/vmmon-only/Makefile -index ccdd295..b4b71fb 100644 ---- a/vmmon-only/Makefile -+++ b/vmmon-only/Makefile -@@ -121,7 +121,7 @@ prebuild:: ; - postbuild:: ; - - $(DRIVER_KO): prebuild -- $(MAKE) -C $(BUILD_DIR) SUBDIRS=$$PWD SRCROOT=$$PWD/$(SRCROOT) \ -+ $(MAKE) -C $(BUILD_DIR) M=$$PWD SRCROOT=$$PWD/$(SRCROOT) \ - MODULEBUILDDIR=$(MODULEBUILDDIR) modules - $(MAKE) -C $$PWD SRCROOT=$$PWD/$(SRCROOT) \ - MODULEBUILDDIR=$(MODULEBUILDDIR) postbuild -From 41413a9b6e660a93600a438944d85b6f51eb680c Mon Sep 17 00:00:00 2001 -From: Michal Kubecek <mkubecek@suse.cz> -Date: Tue, 5 Mar 2019 13:21:35 +0100 -Subject: [PATCH] vmmon: use KERNEL_DS rather than get_ds() - -Commit 736706bee329 ("get rid of legacy 'get_ds()' function") in v5.1-rc1 -removed get_ds() helper. As this helper always returned KERNEL_DS on x86_64 -since the architecture was introduced (and even on i386, it did so since -v2.1.0), simply use KERNEL_DS regardless of kernel version. ---- - vmmon-only/linux/hostif.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -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 -@@ -2345,7 +2345,7 @@ isVAReadable(VA r) // IN: - int ret; - - old_fs = get_fs(); -- set_fs(get_ds()); -+ set_fs(KERNEL_DS); - r = APICR_TO_ADDR(r, APICR_VERSION); - ret = HostIF_CopyFromUser(&dummy, (void*)r, sizeof(dummy)); - set_fs(old_fs); -@@ -2546,7 +2546,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: - } - - old_fs = get_fs(); -- set_fs(get_ds()); -+ set_fs(KERNEL_DS); - - { - struct poll_wqueues table; -@@ -2675,7 +2675,7 @@ HostIF_SemaphoreSignal(uint64 *args) // IN: - } - - old_fs = get_fs(); -- set_fs(get_ds()); -+ set_fs(KERNEL_DS); - - /* - * Always write sizeof(uint64) bytes. This works fine for eventfd and -From 48812705d760a0dc760420ce495e34ce4d019b92 Mon Sep 17 00:00:00 2001 -From: Michal Kubecek <mkubecek@suse.cz> -Date: Sat, 9 Mar 2019 11:11:29 +0100 -Subject: [PATCH] vmmon: fix return type of vm_operations_struct::fault handler - -Commit 3d3539018d2c ("mm: create the new vm_fault_t type") in mainline -5.1-rc1 changed the definition of vm_fault_t type to unsigned to catch -vm_operations_struct::fault handlers which still have int as return value. -LinuxDriverFault() in vmmon module is one of those. - -As handler return type was changed by commit 1c8f422059ae ("mm: change -return type to vm_fault_t") in 4.17-rc1, make LinuxDriverFault() always -return vm_fault_t and define vm_fault_t as int when building against -a pre-4.17 kernel. (Except for the branch for really old kernels where -the handler was vm_operations_struct::nopage and returned a pointer to -struct page.) ---- - vmmon-only/linux/driver.c | 13 ++++++++----- - 1 file changed, 8 insertions(+), 5 deletions(-) - -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 -@@ -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 - - /* - *---------------------------------------------------------------------- -@@ -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) --static int LinuxDriverFault(struct vm_fault *fault); -+static vm_fault_t LinuxDriverFault(struct vm_fault *fault); - #elif defined(VMW_NOPAGE_2624) --static int LinuxDriverFault(struct vm_area_struct *vma, struct vm_fault *fault); -+static vm_fault_t LinuxDriverFault(struct vm_area_struct *vma, struct vm_fault *fault); - #else - static struct page *LinuxDriverNoPage(struct vm_area_struct *vma, - unsigned long address, -@@ -949,11 +952,11 @@ LinuxDriverPollTimeout(compat_timer_arg_t unused) // IN: - */ - - #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) --static int -+static vm_fault_t - LinuxDriverFault(struct vm_fault *fault) //IN/OUT - #elif defined(VMW_NOPAGE_2624) --static int LinuxDriverFault(struct vm_area_struct *vma, //IN -- struct vm_fault *fault) //IN/OUT -+static vm_fault_t LinuxDriverFault(struct vm_area_struct *vma, //IN -+ struct vm_fault *fault) //IN/OUT - #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); - |