summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO14
-rw-r--r--PKGBUILD13
-rw-r--r--vmci-14.0.0-4.13.3.patch266
-rw-r--r--vmmon-14.0.0-4.13.3.patch62
-rw-r--r--vmnet-14.0.0-4.13.3.patch11
-rw-r--r--vmware-patch.sh2
6 files changed, 360 insertions, 8 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 8b5ee1701b26..e5d03a67e50b 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,9 +1,9 @@
# Generated by mksrcinfo v8
-# 三 10月 4 09:53:58 UTC 2017
+# 三 10月 4 15:38:14 UTC 2017
pkgbase = vmware-patch
pkgdesc = A post-install configuration solution for VMware Workstation (Pro) and Player (Plus and Pro)
- pkgver = 12.5.7
- pkgrel = 3
+ pkgver = 14.0.0
+ pkgrel = 1
url = https://wiki.archlinux.org/index.php/VMware#Configuration
install = vmware-patch.install
arch = i686
@@ -20,6 +20,9 @@ pkgbase = vmware-patch
source = vmware.service
source = vmware-usbarbitrator.service
source = vmware-workstation.service
+ source = vmmon-14.0.0-4.13.3.patch
+ source = vmnet-14.0.0-4.13.3.patch
+ source = vmci-14.0.0-4.13.3.patch
source = vmmon-12.5.7-4.13.3.patch
source = vmnet-12.5.7-4.13.3.patch
source = vmnet-12.5.7-4.13.patch
@@ -43,7 +46,7 @@ pkgbase = vmware-patch
source = vmnet-10.0.4-3.14.patch
source = vsock-10.0.4-3.14.patch
source = vmnet-10.0.1-3.13.patch
- md5sums = 9ddd739d1327a56f7adbf121fa0076d1
+ md5sums = bdfa2b348fb501dc46f3c6d65c9cff1d
md5sums = ba054b375308442d43a408dbae5e9401
md5sums = ca1382966804d694894539c7bcac6bbb
md5sums = c12e765985b324585a548718a6ac9b43
@@ -51,6 +54,9 @@ pkgbase = vmware-patch
md5sums = 56f7f642683e54250372bb57faaf4e95
md5sums = 3c165edb6847fc9bfa04657f346ac4cc
md5sums = eca2542e4c484ea2ca06b7e9c065b8af
+ md5sums = ced58cf32a21adfe21d612366c52116a
+ md5sums = 3c165edb6847fc9bfa04657f346ac4cc
+ md5sums = eca2542e4c484ea2ca06b7e9c065b8af
md5sums = a2c3e2bbbe6dcbf66737a5e33df5b892
md5sums = 7acdc91c88c64d55bd775d2fcdc1b242
md5sums = 5eb0567825f0dea3d7c9f21038463de9
diff --git a/PKGBUILD b/PKGBUILD
index 7dc255e04eea..55ccedc27a56 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -2,8 +2,8 @@
# Contributors: Igor Duarte Cardoso, haagch, Olivier Médoc
pkgname=vmware-patch
-pkgver=12.5.7
-pkgrel=3
+pkgver=14.0.0
+pkgrel=1
pkgdesc="A post-install configuration solution for VMware Workstation (Pro) and Player (Plus and Pro)"
arch=('i686' 'x86_64')
url="https://wiki.archlinux.org/index.php/VMware#Configuration"
@@ -12,6 +12,10 @@ depends=('fuse' 'gtkmm' 'linux-headers' 'ncurses5-compat-libs')
options=('!emptydirs')
install=$pkgname.install
source=('vmware-patch.sh' 'vmware-unpatch.sh' 'common-functions.sh' 'vmware.service' 'vmware-usbarbitrator.service' 'vmware-workstation.service'
+ # Workstation Pro/Player 14.0.0
+ 'vmmon-14.0.0-4.13.3.patch'
+ 'vmnet-14.0.0-4.13.3.patch'
+ 'vmci-14.0.0-4.13.3.patch'
# Workstation Pro/Player 12.5.7
'vmmon-12.5.7-4.13.3.patch'
'vmnet-12.5.7-4.13.3.patch'
@@ -64,7 +68,7 @@ package() {
}
# Generated using 'updpkgsums'
-md5sums=('9ddd739d1327a56f7adbf121fa0076d1'
+md5sums=('bdfa2b348fb501dc46f3c6d65c9cff1d'
'ba054b375308442d43a408dbae5e9401'
'ca1382966804d694894539c7bcac6bbb'
'c12e765985b324585a548718a6ac9b43'
@@ -72,6 +76,9 @@ md5sums=('9ddd739d1327a56f7adbf121fa0076d1'
'56f7f642683e54250372bb57faaf4e95'
'3c165edb6847fc9bfa04657f346ac4cc'
'eca2542e4c484ea2ca06b7e9c065b8af'
+ 'ced58cf32a21adfe21d612366c52116a'
+ '3c165edb6847fc9bfa04657f346ac4cc'
+ 'eca2542e4c484ea2ca06b7e9c065b8af'
'a2c3e2bbbe6dcbf66737a5e33df5b892'
'7acdc91c88c64d55bd775d2fcdc1b242'
'5eb0567825f0dea3d7c9f21038463de9'
diff --git a/vmci-14.0.0-4.13.3.patch b/vmci-14.0.0-4.13.3.patch
new file mode 100644
index 000000000000..cd627fbb7c35
--- /dev/null
+++ b/vmci-14.0.0-4.13.3.patch
@@ -0,0 +1,266 @@
+diff --git a/vmci-only/linux/driver.c b/vmci-only/linux/driver.c
+index 8ab2064..1144bf5 100644
+--- vmci-only/linux/driver.c
++++ vmci-only/linux/driver.c
+@@ -26,6 +26,7 @@
+
+ #include <linux/file.h>
+ #include <linux/fs.h>
++#include <linux/vmalloc.h>
+ #include <linux/init.h>
+ #if defined(__x86_64__) && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
+ # include <linux/ioctl32.h>
+@@ -33,6 +34,7 @@
+ asmlinkage __attribute__((weak)) long
+ sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
+ #endif
++
+ #include <linux/miscdevice.h>
+ #include <linux/moduleparam.h>
+ #include <linux/poll.h>
+@@ -1467,11 +1473,19 @@ VMCIUserVALockPage(VA addr) // IN:
+
+ down_read(&current->mm->mmap_sem);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+- retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
++ retval = get_user_pages(addr,
+ #else
+ retval = get_user_pages(current, current->mm, addr,
+ 1, 1, 0, &page, NULL);
+ #endif
++ 1,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
++ 1, 0,
++#else
++ FOLL_WRITE,
++#endif
++ &page, NULL);
++
+ up_read(&current->mm->mmap_sem);
+
+ if (retval != 1) {
+@@ -1686,7 +1700,7 @@ vmci_guest_init(void)
+ /* This should be last to make sure we are done initializing. */
+ retval = pci_register_driver(&vmci_driver);
+ if (retval < 0) {
+- vfree(data_buffer);
++ kvfree(data_buffer);
+ data_buffer = NULL;
+ return retval;
+ }
+@@ -1721,13 +1735,26 @@ vmci_enable_msix(struct pci_dev *pdev) // IN
+ vmci_dev.msix_entries[i].entry = i;
+ vmci_dev.msix_entries[i].vector = i;
+ }
+-
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
+ result = pci_enable_msix(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS);
+ if (!result) {
+ vmci_dev.exclusive_vectors = TRUE;
+ } else if (result > 0) {
+ result = pci_enable_msix(pdev, vmci_dev.msix_entries, 1);
+ }
++#else
++ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, VMCI_MAX_INTRS,
++ VMCI_MAX_INTRS);
++ if (result > 0) {
++ vmci_dev.exclusive_vectors = TRUE;
++ } else if (result == -ENOSPC) {
++ result = pci_enable_msix_range(pdev, vmci_dev.msix_entries, 1, 1);
++ }
++
++ if (result > 0)
++ result = 0;
++#endif
++
+ return result;
+ }
+
+@@ -2480,7 +2507,7 @@ vmci_exit(void)
+
+ if (guestDeviceInit) {
+ pci_unregister_driver(&vmci_driver);
+- vfree(data_buffer);
++ kvfree(data_buffer);
+ data_buffer = NULL;
+ guestDeviceInit = FALSE;
+ }
+@@ -2490,7 +2517,7 @@ vmci_exit(void)
+
+ VMCI_HostCleanup();
+
+- retval = misc_deregister(&linuxState.misc);
++ retval = compat_misc_deregister(&linuxState.misc);
+ if (retval) {
+ Warning(LGPFX "Module %s: error unregistering\n", VMCI_MODULE_NAME);
+ } else {
+diff --git a/vmci-only/linux/vmciKernelIf.c b/vmci-only/linux/vmciKernelIf.c
+index 2b274a0..5e8a9e9 100644
+--- vmci-only/linux/vmciKernelIf.c
++++ vmci-only/linux/vmciKernelIf.c
+@@ -40,6 +40,10 @@
+ #include <linux/socket.h> /* For memcpy_{to,from}iovec(). */
+ #include <linux/vmalloc.h>
+ #include <linux/wait.h>
++#include <linux/skbuff.h>
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0)
++#include <linux/sched/signal.h>
++#endif
+
+ #include "compat_highmem.h"
+ #include "compat_interrupt.h"
+@@ -1196,21 +1200,21 @@ __VMCIMemcpyToQueue(VMCIQueue *queue, // OUT:
+ } else {
+ toCopy = size - bytesCopied;
+ }
+-
++ /* Code cloned from kernels drivers/misc/vmw_vmci/vmci_queue_pair.c */
+ if (isIovec) {
+- struct iovec *iov = (struct iovec *)src;
+- int err;
+-
+- /* The iovec will track bytesCopied internally. */
+- err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy);
+- if (err != 0) {
+- if (kernelIf->host) {
+- kunmap(kernelIf->u.h.page[pageIndex]);
++ struct msghdr *msg = (struct msghdr *)src;
++ int err;
++
++ /* The iovec will track bytes_copied internally. */
++ err = memcpy_from_msg((u8 *)va + pageOffset, msg, toCopy);
++ if (err != 0) {
++ if (kernelIf->host)
++ kunmap(kernelIf->u.h.page[pageIndex]);
++ return VMCI_ERROR_INVALID_ARGS;
+ }
+- return VMCI_ERROR_INVALID_ARGS;
+- }
+- } else {
+- memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy);
++ } else {
++ memcpy((u8 *)va + pageOffset,
++ (u8 *)src + bytesCopied, toCopy);
+ }
+
+ bytesCopied += toCopy;
+@@ -1273,11 +1277,11 @@ __VMCIMemcpyFromQueue(void *dest, // OUT:
+ }
+
+ if (isIovec) {
+- struct iovec *iov = (struct iovec *)dest;
++ struct msghdr *msg = (struct msghdr *)dest;
+ int err;
+
+ /* The iovec will track bytesCopied internally. */
+- err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy);
++ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy);
+ if (err != 0) {
+ if (kernelIf->host) {
+ kunmap(kernelIf->u.h.page[pageIndex]);
+@@ -1834,7 +1838,11 @@ VMCIReleasePages(struct page **pages, // IN
+ if (dirty) {
+ set_page_dirty(pages[i]);
+ }
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
++ put_page(pages[i]);
++#else
+ page_cache_release(pages[i]);
++#endif
+ pages[i] = NULL;
+ }
+ }
+@@ -2050,19 +2058,20 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
+ down_write(&current->mm->mmap_sem);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+ retval = get_user_pages((VA)produceUVA,
+- produceQ->kernelIf->numPages,
+- 1, 0,
+- produceQ->kernelIf->u.h.headerPage,
+- NULL);
+ #else
+ retval = get_user_pages(current,
+ current->mm,
+ (VA)produceUVA,
++#endif
+ produceQ->kernelIf->numPages,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
+ 1, 0,
++#else
++ FOLL_WRITE,
++#endif
+ produceQ->kernelIf->u.h.headerPage,
+ NULL);
+-#endif
++
+ if (retval < produceQ->kernelIf->numPages) {
+ Log("get_user_pages(produce) failed (retval=%d)\n", retval);
+ VMCIReleasePages(produceQ->kernelIf->u.h.headerPage, retval, FALSE);
+@@ -2070,13 +2079,22 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
+ goto out;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
++ retval = get_user_pages((VA)consumeUVA,
++#else
+ retval = get_user_pages(current,
+ current->mm,
+ (VA)consumeUVA,
++#endif
+ consumeQ->kernelIf->numPages,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
+ 1, 0,
++#else
++ FOLL_WRITE,
++#endif
+ consumeQ->kernelIf->u.h.headerPage,
+ NULL);
++
+ if (retval < consumeQ->kernelIf->numPages) {
+ Log("get_user_pages(consume) failed (retval=%d)\n", retval);
+ VMCIReleasePages(consumeQ->kernelIf->u.h.headerPage, retval, FALSE);
+diff --git a/vmci-only/shared/compat_module.h b/vmci-only/shared/compat_module.h
+index 2af7372..de1713d 100644
+--- vmci-only/shared/compat_module.h
++++ vmci-only/shared/compat_module.h
+@@ -79,5 +79,12 @@ static const char __module_cat(tag, __LINE__)[] \
+ #else
+ typedef int compat_mod_param_bool;
+ #endif
+-
++/*
++ * Linux kernel >= 4.2.99 does not return anything from misc_deregister
++ */
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0)
++#define compat_misc_deregister(misc) misc_deregister(misc)
++#else
++#define compat_misc_deregister(misc) ({misc_deregister(misc);0;})
++#endif
+ #endif /* __COMPAT_MODULE_H__ */
+diff --git a/vmci-only/shared/vm_device_version.h b/vmci-only/shared/vm_device_version.h
+index ab396bc..ff2f563 100644
+--- vmci-only/shared/vm_device_version.h
++++ vmci-only/shared/vm_device_version.h
+@@ -53,7 +53,9 @@
+ * VMware HD Audio codec
+ * VMware HD Audio controller
+ */
++#ifndef PCI_VENDOR_ID_VMWARE
+ #define PCI_VENDOR_ID_VMWARE 0x15AD
++#endif
+ #define PCI_DEVICE_ID_VMWARE_SVGA2 0x0405
+ #define PCI_DEVICE_ID_VMWARE_SVGA 0x0710
+ #define PCI_DEVICE_ID_VMWARE_VGA 0x0711
+diff --git a/vmci-only/shared/vmci_kernel_if.h b/vmci-only/shared/vmci_kernel_if.h
+index ef9eb82..dbd3f5e 100644
+--- vmci-only/shared/vmci_kernel_if.h
++++ vmci-only/shared/vmci_kernel_if.h
+@@ -100,7 +100,7 @@ extern "C" {
+ typedef Semaphore VMCIEvent;
+ typedef Semaphore VMCIMutex;
+ typedef World_ID VMCIHostVmID;
+- typedef uint32 VMCIHostUser;
++ typedef uint32_t VMCIHostUser;
+ typedef PPN *VMCIQPGuestMem;
+ #elif defined(__linux__)
+ typedef spinlock_t VMCILock;
diff --git a/vmmon-14.0.0-4.13.3.patch b/vmmon-14.0.0-4.13.3.patch
new file mode 100644
index 000000000000..756fa66fa3cc
--- /dev/null
+++ b/vmmon-14.0.0-4.13.3.patch
@@ -0,0 +1,62 @@
+diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
+--- vmmon-only/linux/hostif.c
++++ vmmon-only/linux/hostif.c
+@@ -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.
+ */
+@@ -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) {
diff --git a/vmnet-14.0.0-4.13.3.patch b/vmnet-14.0.0-4.13.3.patch
new file mode 100644
index 000000000000..35035b7ae004
--- /dev/null
+++ b/vmnet-14.0.0-4.13.3.patch
@@ -0,0 +1,11 @@
+diff --git a/vmnet-only/userif.c b/vmnet-only/userif.c
+--- vmnet-only/userif.c
++++ vmnet-only/userif.c
+@@ -33,6 +33,7 @@
+ #include <linux/proc_fs.h>
+ #include <linux/sockios.h>
+ #include <linux/sched.h>
++#include <linux/sched/signal.h>
+ #include <linux/slab.h>
+ #include <linux/version.h>
+ #include <linux/wait.h>
diff --git a/vmware-patch.sh b/vmware-patch.sh
index 3ebf9cf94944..53f69c57b49e 100644
--- a/vmware-patch.sh
+++ b/vmware-patch.sh
@@ -62,7 +62,7 @@ vmware_check
set_product_name
# Use VMware's bundled libcurl.so.4 to prevent crashes at startup/checking for updates
-if [[ $ver != 13.* ]]; then
+if [[ $ver != 14.* ]]; then
for script in vmware vmplayer vmware-netcfg vmware-tray; do
if [[ -f /usr/bin/$script ]]; then
if ! grep -q "VMWARE_USE_SHIPPED_LIBS" /usr/bin/$script; then