summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Kitsinger (SwooshyCueb)2017-01-23 12:28:44 -0600
committerMarkus Kitsinger (SwooshyCueb)2017-01-23 12:28:44 -0600
commit280334a9574a1ebad43b8ce3a1e3c57428123fc9 (patch)
treec8e3fb306cff85c2fa6ddee6bc9300208e879096
parent189201addf39aa4f6cee9546d20786a935bd49fc (diff)
downloadaur-280334a9574a1ebad43b8ce3a1e3c57428123fc9.tar.gz
update for 4.9
-rw-r--r--.SRCINFO10
-rw-r--r--PKGBUILD8
-rw-r--r--vmci.patch78
-rw-r--r--vmmon.patch100
-rw-r--r--vmnet.patch84
5 files changed, 153 insertions, 127 deletions
diff --git a/.SRCINFO b/.SRCINFO
index acbc85389891..7e71011203ca 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,9 +1,9 @@
# Generated by mksrcinfo v8
-# Tue Sep 27 16:11:54 UTC 2016
+# Mon Jan 23 18:28:24 UTC 2017
pkgbase = vmware-modules-dkms
pkgdesc = VMware Workstation kernel modules (DKMS)
pkgver = 308.0
- pkgrel = 11
+ pkgrel = 12
url = http://www.vmware.com/
install = vmware-modules-dkms.install
arch = i686
@@ -27,9 +27,9 @@ pkgbase = vmware-modules-dkms
sha256sums = 7baecdfd979d57aed7dac0db57e0165fc1730b15ed6bf42ed25571e68ec34b52
sha256sums = c8f9399196b50fb7ffb763e006bd54c8153d2c0717d935590ea9bf673346f1d3
sha256sums = b81a2c26a6af145a934118a0d19d22ff7a73464dfa849d24ba0dd785f119ae7e
- sha256sums = 84ddf2d77039ca558466682a23280ecbb0ec4b6bf9a5b4561f161c78e32b57a1
- sha256sums = 663dbccace714d719e3d27337fc5acabded61dbe5889af7c3bd28e0fbcef115e
- sha256sums = 31c626d7686f9d8d50b3ab09ada45f6bdcaf97c47f62de3ff2494c99b19f90d0
+ sha256sums = f24586ccb45106322bcff9dff92ef2caf9f32c73f2ec1c67f178c7ee2559ac0e
+ sha256sums = 270493aac68667a78e3aab54316a4548d15e610c19c5791f7b6cc2e7483be6da
+ sha256sums = 43619d79462df490c275b41865089450e8c7682dc4d0df465a1c2fe380aa05af
sha256sums = 50bf86f3306fbdafa0a5d5947fb64c06e2a236be84e2ba3f7057f84cc49f7828
sha256sums = SKIP
diff --git a/PKGBUILD b/PKGBUILD
index 4d1be144e430..38cfc292871b 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -11,7 +11,7 @@
pkgname=vmware-modules-dkms
_pkgbase=vmware-modules
pkgver=308.0
-pkgrel=11
+pkgrel=12
pkgdesc="VMware Workstation kernel modules (DKMS)"
arch=('i686' 'x86_64')
url="http://www.vmware.com/"
@@ -38,9 +38,9 @@ sha256sums=('9041b85cea2e2c35b27629d47bee2e37b913635e5ace54a46fd9c45f90c4f1d4'
'7baecdfd979d57aed7dac0db57e0165fc1730b15ed6bf42ed25571e68ec34b52'
'c8f9399196b50fb7ffb763e006bd54c8153d2c0717d935590ea9bf673346f1d3'
'b81a2c26a6af145a934118a0d19d22ff7a73464dfa849d24ba0dd785f119ae7e'
- '84ddf2d77039ca558466682a23280ecbb0ec4b6bf9a5b4561f161c78e32b57a1'
- '663dbccace714d719e3d27337fc5acabded61dbe5889af7c3bd28e0fbcef115e'
- '31c626d7686f9d8d50b3ab09ada45f6bdcaf97c47f62de3ff2494c99b19f90d0'
+ 'f24586ccb45106322bcff9dff92ef2caf9f32c73f2ec1c67f178c7ee2559ac0e'
+ '270493aac68667a78e3aab54316a4548d15e610c19c5791f7b6cc2e7483be6da'
+ '43619d79462df490c275b41865089450e8c7682dc4d0df465a1c2fe380aa05af'
'50bf86f3306fbdafa0a5d5947fb64c06e2a236be84e2ba3f7057f84cc49f7828'
'SKIP')
diff --git a/vmci.patch b/vmci.patch
index d1520050ccac..0f9598d74bf5 100644
--- a/vmci.patch
+++ b/vmci.patch
@@ -4,14 +4,14 @@ index c630705..18357e5 100644
+++ b/vmci/Makefile
@@ -43,7 +43,11 @@ INCLUDE += -I$(SRCROOT)/shared
endif
-
-
+
+
+ifdef KVERSION
+VM_UNAME = $(KVERSION)
+else
VM_UNAME = $(shell uname -r)
+endif
-
+
# Header directory for the running kernel
ifdef LINUXINCLUDE
diff --git a/vmci/Makefile.kernel b/vmci/Makefile.kernel
@@ -19,29 +19,29 @@ index 8e6e7d0..28eb503 100644
--- a/vmci/Makefile.kernel
+++ b/vmci/Makefile.kernel
@@ -21,7 +21,7 @@ CC_OPTS += -DVMCI
-
+
INCLUDE += -I$(SRCROOT)/shared -I$(SRCROOT)/common -I$(SRCROOT)/linux
-
+
-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
+EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
-
+
obj-m += $(DRIVER).o
-
+
diff --git a/vmci/linux/driver.c b/vmci/linux/driver.c
-index f676166..06b3d8a 100644
+index f676166..9e42f3f 100644
--- a/vmci/linux/driver.c
+++ b/vmci/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>
-@@ -1467,12 +1468,13 @@ VMCIUserVALockPage(VA addr) // IN:
+@@ -1467,12 +1468,19 @@ VMCIUserVALockPage(VA addr) // IN:
int retval;
-
+
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);
@@ -51,12 +51,18 @@ index f676166..06b3d8a 100644
retval = get_user_pages(current, current->mm, addr,
- 1, 1, 0, &page, NULL);
#endif
-+ 1, 1, 0, &page, NULL);
++ 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) {
-@@ -1687,7 +1689,11 @@ vmci_guest_init(void)
+@@ -1687,7 +1695,11 @@ vmci_guest_init(void)
/* This should be last to make sure we are done initializing. */
retval = pci_register_driver(&vmci_driver);
if (retval < 0) {
@@ -68,8 +74,8 @@ index f676166..06b3d8a 100644
data_buffer = NULL;
return retval;
}
-@@ -2474,7 +2480,11 @@ vmci_exit(void)
-
+@@ -2474,7 +2486,11 @@ vmci_exit(void)
+
if (guestDeviceInit) {
pci_unregister_driver(&vmci_driver);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
@@ -79,18 +85,18 @@ index f676166..06b3d8a 100644
+#endif
guestDeviceInit = FALSE;
}
-
-@@ -2483,7 +2493,7 @@ vmci_exit(void)
-
+
+@@ -2483,7 +2499,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/linux/vmciKernelIf.c b/vmci/linux/vmciKernelIf.c
-index 3fba8b6..d41769f 100644
+index 3fba8b6..1836442 100644
--- a/vmci/linux/vmciKernelIf.c
+++ b/vmci/linux/vmciKernelIf.c
@@ -40,6 +40,7 @@
@@ -98,12 +104,12 @@ index 3fba8b6..d41769f 100644
#include <linux/vmalloc.h>
#include <linux/wait.h>
+#include <linux/skbuff.h>
-
+
#include "compat_highmem.h"
#include "compat_interrupt.h"
@@ -1198,16 +1199,29 @@ __VMCIMemcpyToQueue(VMCIQueue *queue, // OUT:
}
-
+
if (isIovec) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
struct iovec *iov = (struct iovec *)src;
@@ -111,7 +117,7 @@ index 3fba8b6..d41769f 100644
+ struct msghdr *msg = (struct msghdr *)src;
+#endif
int err;
-
+
/* The iovec will track bytesCopied internally. */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
err = memcpy_fromiovec((uint8 *)va + pageOffset, iov, toCopy);
@@ -133,7 +139,7 @@ index 3fba8b6..d41769f 100644
memcpy((uint8 *)va + pageOffset, (uint8 *)src + bytesCopied, toCopy);
@@ -1273,11 +1287,19 @@ __VMCIMemcpyFromQueue(void *dest, // OUT:
}
-
+
if (isIovec) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
struct iovec *iov = (struct iovec *)dest;
@@ -141,7 +147,7 @@ index 3fba8b6..d41769f 100644
+ struct msghdr *msg = (struct msghdr *)dest;
+#endif
int err;
-
+
/* The iovec will track bytesCopied internally. */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
err = memcpy_toiovec(iov, (uint8 *)va + pageOffset, toCopy);
@@ -163,9 +169,9 @@ index 3fba8b6..d41769f 100644
pages[i] = NULL;
}
}
-@@ -2048,21 +2074,18 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
+@@ -2048,21 +2074,22 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
int err = VMCI_SUCCESS;
-
+
down_write(&current->mm->mmap_sem);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
@@ -180,7 +186,11 @@ index 3fba8b6..d41769f 100644
(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
@@ -188,10 +198,10 @@ index 3fba8b6..d41769f 100644
if (retval < produceQ->kernelIf->numPages) {
Log("get_user_pages(produce) failed (retval=%d)\n", retval);
VMCIReleasePages(produceQ->kernelIf->u.h.headerPage, retval, FALSE);
-@@ -2070,9 +2093,13 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
+@@ -2070,11 +2097,19 @@ VMCIHost_GetUserMemory(VA64 produceUVA, // IN
goto out;
}
-
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
+ retval = get_user_pages((VA)consumeUVA,
+#else
@@ -200,8 +210,14 @@ index 3fba8b6..d41769f 100644
(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) {
diff --git a/vmci/shared/compat_module.h b/vmci/shared/compat_module.h
index 2af7372..729aedc 100644
--- a/vmci/shared/compat_module.h
@@ -209,7 +225,7 @@ index 2af7372..729aedc 100644
@@ -80,4 +80,13 @@ static const char __module_cat(tag, __LINE__)[] \
typedef int compat_mod_param_bool;
#endif
-
+
+/*
+ * Linux kernel >= 4.2.99 does not return anything from misc_deregister
+ */
diff --git a/vmmon.patch b/vmmon.patch
index fb60455d2111..f2c4fd370679 100644
--- a/vmmon.patch
+++ b/vmmon.patch
@@ -137,7 +137,7 @@ index 87cf45b..5390a93 100644
retval = -EINVAL;
}
diff --git a/vmmon/linux/hostif.c b/vmmon/linux/hostif.c
-index 7053a83..219d244 100644
+index 7053a83..583d6da 100644
--- a/vmmon/linux/hostif.c
+++ b/vmmon/linux/hostif.c
@@ -74,6 +74,7 @@
@@ -242,7 +242,7 @@ index 7053a83..219d244 100644
*
* Side effects:
* None
-@@ -1162,12 +1167,12 @@ HostIFGetUserPages(void *uvAddr, // IN
+@@ -1162,12 +1167,16 @@ HostIFGetUserPages(void *uvAddr, // IN
int retval;
down_read(&current->mm->mmap_sem);
@@ -254,11 +254,15 @@ index 7053a83..219d244 100644
retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
- numPages, 0, 0, ppages, NULL);
#endif
-+ numPages, 0, 0, ppages, NULL);
++ numPages, 0,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 9, 0)
++ 0,
++#endif
++ ppages, NULL);
up_read(&current->mm->mmap_sem);
return retval != numPages;
-@@ -1179,11 +1184,11 @@ HostIFGetUserPages(void *uvAddr, // IN
+@@ -1179,11 +1188,11 @@ HostIFGetUserPages(void *uvAddr, // IN
*
* HostIF_IsLockedByMPN --
*
@@ -272,7 +276,7 @@ index 7053a83..219d244 100644
*
* Side effects:
* None.
-@@ -1305,7 +1310,7 @@ HostIF_UnlockPage(VMDriver *vm, // IN:
+@@ -1305,7 +1314,7 @@ HostIF_UnlockPage(VMDriver *vm, // IN:
vpn = VA_2_VPN((VA)addr);
e = MemTrack_LookupVPN(vm->memtracker, vpn);
@@ -281,7 +285,7 @@ index 7053a83..219d244 100644
if (e == NULL) {
return PAGE_UNLOCK_NOT_TRACKED;
}
-@@ -1351,7 +1356,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
+@@ -1351,7 +1360,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
{
void *va = VA64ToPtr(uAddr);
MemTrackEntry *e;
@@ -290,7 +294,7 @@ index 7053a83..219d244 100644
/*
* Verify for debugging that VA and MPN make sense.
* PgtblVa2MPN() can fail under high memory pressure.
-@@ -1369,7 +1374,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
+@@ -1369,7 +1378,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
}
/*
@@ -299,7 +303,7 @@ index 7053a83..219d244 100644
* HostIF_LockPage(allowMultipleMPNsPerVA = TRUE).
* That means that this MPN should not be in the MemTracker.
*/
-@@ -1382,7 +1387,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
+@@ -1382,7 +1391,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
return PAGE_UNLOCK_MISMATCHED_TYPE;
}
}
@@ -308,7 +312,7 @@ index 7053a83..219d244 100644
HOST_UNLOCK_PFN_BYMPN(vm, mpn);
-@@ -1390,7 +1395,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
+@@ -1390,7 +1399,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver
}
@@ -317,7 +321,7 @@ index 7053a83..219d244 100644
UnlockEntry(void *clientData, // IN:
MemTrackEntry *entryPtr) // IN:
{
-@@ -1453,11 +1458,11 @@ HostIF_FreeAllResources(VMDriver *vm) // IN
+@@ -1453,11 +1462,11 @@ HostIF_FreeAllResources(VMDriver *vm) // IN
*
* HostIF_AllocKernelMem
*
@@ -332,7 +336,7 @@ index 7053a83..219d244 100644
*
* Side effects:
* memory is malloced
-@@ -1469,8 +1474,8 @@ HostIF_AllocKernelMem(size_t size, // IN:
+@@ -1469,8 +1478,8 @@ HostIF_AllocKernelMem(size_t size, // IN:
int wired) // IN:
{
void * ptr = kmalloc(size, GFP_KERNEL);
@@ -343,7 +347,7 @@ index 7053a83..219d244 100644
Warning("%s failed (size=%p)\n", __func__, (void*)size);
}
-@@ -1498,7 +1503,7 @@ void *
+@@ -1498,7 +1507,7 @@ void *
HostIF_AllocPage(void)
{
VA kvAddr;
@@ -352,7 +356,7 @@ index 7053a83..219d244 100644
kvAddr = __get_free_page(GFP_KERNEL);
if (kvAddr == 0) {
Warning("%s: __get_free_page() failed\n", __func__);
-@@ -1513,7 +1518,7 @@ HostIF_AllocPage(void)
+@@ -1513,7 +1522,7 @@ HostIF_AllocPage(void)
*
* HostIF_FreeKernelMem
*
@@ -361,7 +365,7 @@ index 7053a83..219d244 100644
*
* Results:
* None.
-@@ -1552,7 +1557,7 @@ HostIF_FreePage(void *ptr) // IN:
+@@ -1552,7 +1561,7 @@ HostIF_FreePage(void *ptr) // IN:
* from the kernel without causing the host to die or to be really upset.
*
* Results:
@@ -370,7 +374,7 @@ index 7053a83..219d244 100644
*
* Side effects:
* none
-@@ -1580,9 +1585,9 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN
+@@ -1580,9 +1589,9 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN
* Use the memory information linux exports as of late for a more
* precise estimate of locked memory. All kernel page-related structures
* (slab, pagetable) are as good as locked. Unevictable includes things
@@ -383,7 +387,7 @@ index 7053a83..219d244 100644
*/
unsigned int forHost;
-@@ -1602,7 +1607,7 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN
+@@ -1602,7 +1611,7 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN
unsigned int swapPages = BYTES_2_PAGES(linuxState.swapSize);
if (anonPages > swapPages) {
@@ -392,7 +396,7 @@ index 7053a83..219d244 100644
}
forHost = lockedPages + LOCKED_PAGE_SLACK;
if (forHost > totalPhysicalPages) {
-@@ -1647,7 +1652,7 @@ HostIF_Wait(unsigned int timeoutMs)
+@@ -1647,7 +1656,7 @@ HostIF_Wait(unsigned int timeoutMs)
*----------------------------------------------------------------------
*/
@@ -401,7 +405,7 @@ index 7053a83..219d244 100644
HostIF_WaitForFreePages(unsigned int timeoutMs) // IN:
{
static unsigned count;
-@@ -1672,20 +1677,20 @@ HostIF_WaitForFreePages(unsigned int timeoutMs) // IN:
+@@ -1672,20 +1681,20 @@ HostIF_WaitForFreePages(unsigned int timeoutMs) // IN:
* timeofday to have small drift (due to NTP rate correction, etc).
* We handle this by rebasing the jiffies based monotonic clock
* every second (see HostIFUptimeResyncMono).
@@ -425,7 +429,7 @@ index 7053a83..219d244 100644
{
struct timeval tv;
uint64 monotime, uptime, upBase, monoBase;
-@@ -1707,14 +1712,14 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies
+@@ -1707,14 +1716,14 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies
do_gettimeofday(&tv);
upBase = Atomic_Read64(&uptimeState.uptimeBase);
@@ -443,7 +447,7 @@ index 7053a83..219d244 100644
* Use the jiffies based monotonic time to sanity check gettimeofday.
* If they differ by more than one second, assume the time of day has
* been warped, and use the jiffies time to undo (most of) the warp.
-@@ -1726,7 +1731,7 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies
+@@ -1726,7 +1735,7 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies
uint64 newUpBase = monotime - (uptime - upBase);
attempts++;
@@ -452,7 +456,7 @@ index 7053a83..219d244 100644
attempts < 5) {
/* Another thread updated uptimeBase. Recalculate uptime. */
goto retry;
-@@ -1767,7 +1772,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored
+@@ -1767,7 +1776,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored
unsigned long jifs;
uintptr_t flags;
@@ -461,7 +465,7 @@ index 7053a83..219d244 100644
* Read the uptime and the corresponding jiffies value. This will
* also correct the uptime (which is based on time of day) if needed
* before we rebase monotonic time (which is based on jiffies).
-@@ -1775,7 +1780,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored
+@@ -1775,7 +1784,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored
uint64 uptime = HostIFReadUptimeWork(&jifs);
@@ -470,7 +474,7 @@ index 7053a83..219d244 100644
* Every second, recalculate monoBase and jiffiesBase to squash small
* drift between gettimeofday and jiffies. Also, this prevents
* (jiffies - jiffiesBase) wrap on 32-bits.
-@@ -1820,8 +1825,8 @@ HostIF_InitUptime(void)
+@@ -1820,8 +1829,8 @@ HostIF_InitUptime(void)
uptimeState.jiffiesBase = jiffies;
do_gettimeofday(&tv);
@@ -481,7 +485,7 @@ index 7053a83..219d244 100644
tv.tv_sec * UPTIME_FREQ));
init_timer(&uptimeState.timer);
-@@ -1949,7 +1954,7 @@ HostIF_CopyFromUser(void *dst, // OUT
+@@ -1949,7 +1958,7 @@ HostIF_CopyFromUser(void *dst, // OUT
*-----------------------------------------------------------------------------
*/
@@ -490,7 +494,7 @@ index 7053a83..219d244 100644
HostIF_CopyToUser(void *dst, // OUT
const void *src, // IN
unsigned int len) // IN
-@@ -1962,15 +1967,15 @@ HostIF_CopyToUser(void *dst, // OUT
+@@ -1962,15 +1971,15 @@ HostIF_CopyToUser(void *dst, // OUT
*-----------------------------------------------------------------------------
*
* HostIF_MapCrossPage --
@@ -512,7 +516,7 @@ index 7053a83..219d244 100644
* uses a permanent mapping, instead of a temporary one with a high LA.
*
* Results:
-@@ -2158,7 +2163,7 @@ HostIF_VMLock(VMDriver *vm, // IN
+@@ -2158,7 +2167,7 @@ HostIF_VMLock(VMDriver *vm, // IN
* None
*
* Side effects:
@@ -521,7 +525,7 @@ index 7053a83..219d244 100644
*
*-----------------------------------------------------------------------------
*/
-@@ -2181,7 +2186,7 @@ HostIF_VMUnlock(VMDriver *vm, // IN
+@@ -2181,7 +2190,7 @@ HostIF_VMUnlock(VMDriver *vm, // IN
* HostIF_VMLockIsHeld --
*
* Determine if the per-VM lock is held by the current thread.
@@ -530,7 +534,7 @@ index 7053a83..219d244 100644
* Results:
* TRUE if yes
* FALSE if no
-@@ -2237,14 +2242,14 @@ HostIF_VMLockIsHeld(VMDriver *vm) // IN
+@@ -2237,14 +2246,14 @@ HostIF_VMLockIsHeld(VMDriver *vm) // IN
*
*----------------------------------------------------------------------
*/
@@ -547,7 +551,7 @@ index 7053a83..219d244 100644
old_fs = get_fs();
set_fs(get_ds());
r = APICR_TO_ADDR(r, APICR_VERSION);
-@@ -2319,7 +2324,7 @@ ProbeAPIC(VMDriver *vm, // IN/OUT: driver state
+@@ -2319,7 +2328,7 @@ ProbeAPIC(VMDriver *vm, // IN/OUT: driver state
Bool setVMPtr) // IN: set a pointer to the APIC's virtual address
{
MA ma = APIC_GetMA();
@@ -556,7 +560,7 @@ index 7053a83..219d244 100644
if (ma == (MA)-1) {
return FALSE;
}
-@@ -2420,7 +2425,7 @@ HostIF_APICInit(VMDriver *vm, // IN:
+@@ -2420,7 +2429,7 @@ HostIF_APICInit(VMDriver *vm, // IN:
* Perform the semaphore wait (P) operation, possibly blocking.
*
* Result:
@@ -565,7 +569,7 @@ index 7053a83..219d244 100644
* negated error code otherwise.
*
* Side-effects:
-@@ -2429,7 +2434,7 @@ HostIF_APICInit(VMDriver *vm, // IN:
+@@ -2429,7 +2438,7 @@ HostIF_APICInit(VMDriver *vm, // IN:
*-----------------------------------------------------------------------------
*/
@@ -574,7 +578,7 @@ index 7053a83..219d244 100644
HostIF_SemaphoreWait(VMDriver *vm, // IN:
Vcpuid vcpuid, // IN:
uint64 *args) // IN:
-@@ -2452,7 +2457,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
+@@ -2452,7 +2461,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
{
struct poll_wqueues table;
unsigned int mask;
@@ -583,7 +587,7 @@ index 7053a83..219d244 100644
poll_initwait(&table);
current->state = TASK_INTERRUPTIBLE;
mask = file->f_op->poll(file, &table.pt);
-@@ -2527,7 +2532,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
+@@ -2527,7 +2536,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
*-----------------------------------------------------------------------------
*/
@@ -592,7 +596,7 @@ index 7053a83..219d244 100644
HostIF_SemaphoreForceWakeup(VMDriver *vm, // IN:
const VCPUSet *vcs) // IN:
{
-@@ -2817,8 +2822,8 @@ HostIF_CallOnEachCPU(void (*func)(void*), // IN: function to call
+@@ -2817,8 +2826,8 @@ HostIF_CallOnEachCPU(void (*func)(void*), // IN: function to call
*
* HostIF_ReadPage --
*
@@ -603,7 +607,7 @@ index 7053a83..219d244 100644
*
* Results:
* 0 on success
-@@ -2849,7 +2854,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page
+@@ -2849,7 +2858,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page
if (ptr == NULL) {
return -ENOMEM;
}
@@ -612,7 +616,7 @@ index 7053a83..219d244 100644
if (kernelBuffer) {
memcpy(buf, ptr, PAGE_SIZE);
} else {
-@@ -2866,7 +2871,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page
+@@ -2866,7 +2875,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page
*
* HostIF_WritePage --
*
@@ -621,7 +625,7 @@ index 7053a83..219d244 100644
* page.
*
* Results:
-@@ -2996,7 +3001,7 @@ HostIF_GetNextAnonPage(VMDriver *vm, MPN inMPN)
+@@ -2996,7 +3005,7 @@ HostIF_GetNextAnonPage(VMDriver *vm, MPN inMPN)
* Side effects:
* None.
*
@@ -630,7 +634,7 @@ index 7053a83..219d244 100644
*/
uint32
-@@ -3014,18 +3019,18 @@ HostIF_GetCurrentPCPU(void)
+@@ -3014,18 +3023,18 @@ HostIF_GetCurrentPCPU(void)
*
* Wake up the fast clock thread. Can't do this from the timer
* callback, because it holds locks that the scheduling code
@@ -652,7 +656,7 @@ index 7053a83..219d244 100644
HostIFWakeupClockThread(unsigned long data) //IN:
{
wake_up_process(linuxState.fastClockThread);
-@@ -3036,7 +3041,7 @@ HostIFWakeupClockThread(unsigned long data) //IN:
+@@ -3036,7 +3045,7 @@ HostIFWakeupClockThread(unsigned long data) //IN:
*----------------------------------------------------------------------
*
* HostIFTimerCallback --
@@ -661,7 +665,7 @@ index 7053a83..219d244 100644
* Schedule a tasklet to wake up the fast clock thread.
*
* Results:
-@@ -3047,8 +3052,8 @@ HostIFWakeupClockThread(unsigned long data) //IN:
+@@ -3047,8 +3056,8 @@ HostIFWakeupClockThread(unsigned long data) //IN:
*
*----------------------------------------------------------------------
*/
@@ -672,7 +676,7 @@ index 7053a83..219d244 100644
HostIFTimerCallback(struct hrtimer *timer) //IN:
{
tasklet_schedule(&timerTasklet);
-@@ -3061,7 +3066,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN:
+@@ -3061,7 +3070,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN:
*----------------------------------------------------------------------
*
* HostIFScheduleHRTimeout --
@@ -681,7 +685,7 @@ index 7053a83..219d244 100644
* Schedule an hrtimer to wake up the fast clock thread.
*
* Results:
-@@ -3073,7 +3078,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN:
+@@ -3073,7 +3082,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN:
*----------------------------------------------------------------------
*/
@@ -690,7 +694,7 @@ index 7053a83..219d244 100644
HostIFScheduleHRTimeout(ktime_t *expires) //IN:
{
struct hrtimer t;
-@@ -3091,7 +3096,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN:
+@@ -3091,7 +3100,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN:
if (hrtimer_active(&t)) {
schedule();
}
@@ -699,7 +703,7 @@ index 7053a83..219d244 100644
hrtimer_cancel(&t);
__set_current_state(TASK_RUNNING);
}
-@@ -3114,7 +3119,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN:
+@@ -3114,7 +3123,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN:
* Side effects:
* none.
*
@@ -708,7 +712,7 @@ index 7053a83..219d244 100644
*/
static long
-@@ -3147,7 +3152,7 @@ HostIFDoIoctl(struct file *filp,
+@@ -3147,7 +3156,7 @@ HostIFDoIoctl(struct file *filp,
*/
int
@@ -717,7 +721,7 @@ index 7053a83..219d244 100644
unsigned int rate, //IN: current clock rate
struct file *filp) //IN: /dev/rtc descriptor
{
-@@ -3157,14 +3162,14 @@ HostIFStartTimer(Bool rateChanged, //IN: Did rate change?
+@@ -3157,14 +3166,14 @@ HostIFStartTimer(Bool rateChanged, //IN: Did rate change?
int timerPeriod;
if (rateChanged) {
@@ -734,7 +738,7 @@ index 7053a83..219d244 100644
slack = timerPeriod / 100;
}
set_current_state(TASK_INTERRUPTIBLE);
-@@ -3510,7 +3515,7 @@ HostIF_MapUserMem(VA addr, // IN: User memory virtual address
+@@ -3510,7 +3519,7 @@ HostIF_MapUserMem(VA addr, // IN: User memory virtual address
printk(KERN_DEBUG "%s: p = 0x%p, offset = 0x%p, numPagesNeeded = %"FMTSZ"u,"
" handleSize = %"FMTSZ"u, mappedAddr = 0x%p\n",
@@ -743,7 +747,7 @@ index 7053a83..219d244 100644
newHandle->numPages = numPagesNeeded;
newHandle->addr = mappedAddr;
-@@ -3546,7 +3551,7 @@ HostIF_UnmapUserMem(VMMappedUserMem *handle) // IN: Handle to mapped memory
+@@ -3546,7 +3555,7 @@ HostIF_UnmapUserMem(VMMappedUserMem *handle) // IN: Handle to mapped memory
}
printk(KERN_DEBUG "%s: numPages = %"FMTSZ"u, addr = 0x%p\n",
diff --git a/vmnet.patch b/vmnet.patch
index 018f7c5e0277..9413d349ad81 100644
--- a/vmnet.patch
+++ b/vmnet.patch
@@ -88,10 +88,10 @@ index 7e7ad99..5f508f6 100644
crc = 0xffffffff; /* init CRC for each address */
for (byte = 0; byte < ETH_ALEN; byte++) { /* for each address byte */
diff --git a/vmnet/userif.c b/vmnet/userif.c
-index 2b976d7..8c3f685 100644
+index 2b976d7..5298406 100644
--- a/vmnet/userif.c
+++ b/vmnet/userif.c
-@@ -113,12 +113,12 @@ UserifLockPage(VA addr) // IN
+@@ -113,12 +113,18 @@ UserifLockPage(VA addr) // IN
int retval;
down_read(&current->mm->mmap_sem);
@@ -103,11 +103,17 @@ index 2b976d7..8c3f685 100644
retval = get_user_pages(current, current->mm, addr,
- 1, 1, 0, &page, NULL);
#endif
-+ 1, 1, 0, &page, NULL);
++ 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) {
-@@ -182,13 +182,13 @@ VNetUserIfMapUint32Ptr(VA uAddr, // IN: pointer to user memory
+@@ -182,13 +188,13 @@ VNetUserIfMapUint32Ptr(VA uAddr, // IN: pointer to user memory
*
* Sets up notification by filling in pollPtr, actPtr, and recvClusterCount
* fields.
@@ -124,7 +130,7 @@ index 2b976d7..8c3f685 100644
* recvClusterPage are filled in VNetUserIf structure.
*
*-----------------------------------------------------------------------------
-@@ -278,8 +278,8 @@ VNetUserIfSetupNotify(VNetUserIF *userIf, // IN
+@@ -278,8 +284,8 @@ VNetUserIfSetupNotify(VNetUserIF *userIf, // IN
* VNetUserIfUnsetupNotify --
*
* Destroys permanent mapping for notify structure provided by user.
@@ -135,7 +141,7 @@ index 2b976d7..8c3f685 100644
* None.
*
* Side effects:
-@@ -333,7 +333,7 @@ VNetUserIfUnsetupNotify(VNetUserIF *userIf) // IN
+@@ -333,7 +339,7 @@ VNetUserIfUnsetupNotify(VNetUserIF *userIf) // IN
*
* Free the user interface port.
*
@@ -144,7 +150,7 @@ index 2b976d7..8c3f685 100644
* None.
*
* Side effects:
-@@ -355,7 +355,7 @@ VNetUserIfFree(VNetJack *this) // IN
+@@ -355,7 +361,7 @@ VNetUserIfFree(VNetJack *this) // IN
}
dev_kfree_skb(skb);
}
@@ -153,7 +159,7 @@ index 2b976d7..8c3f685 100644
if (userIf->pollPtr) {
VNetUserIfUnsetupNotify(userIf);
}
-@@ -379,7 +379,7 @@ VNetUserIfFree(VNetJack *this) // IN
+@@ -379,7 +385,7 @@ VNetUserIfFree(VNetJack *this) // IN
*
* This jack is receiving a packet. Take appropriate action.
*
@@ -162,7 +168,7 @@ index 2b976d7..8c3f685 100644
* None.
*
* Side effects:
-@@ -395,12 +395,12 @@ VNetUserIfReceive(VNetJack *this, // IN
+@@ -395,12 +401,12 @@ VNetUserIfReceive(VNetJack *this, // IN
VNetUserIF *userIf = (VNetUserIF*)this->private;
uint8 *dest = SKB_2_DESTMAC(skb);
unsigned long flags;
@@ -177,7 +183,7 @@ index 2b976d7..8c3f685 100644
if (!VNetPacketMatch(dest,
userIf->port.paddr,
(const uint8 *)userIf->port.exactFilter,
-@@ -410,12 +410,12 @@ VNetUserIfReceive(VNetJack *this, // IN
+@@ -410,12 +416,12 @@ VNetUserIfReceive(VNetJack *this, // IN
userIf->stats.droppedMismatch++;
goto drop_packet;
}
@@ -192,7 +198,7 @@ index 2b976d7..8c3f685 100644
if (skb->len > ETHER_MAX_QUEUED_PACKET) {
userIf->stats.droppedLargePacket++;
goto drop_packet;
-@@ -439,7 +439,7 @@ VNetUserIfReceive(VNetJack *this, // IN
+@@ -439,7 +445,7 @@ VNetUserIfReceive(VNetJack *this, // IN
wake_up(&userIf->waitQueue);
return;
@@ -201,7 +207,7 @@ index 2b976d7..8c3f685 100644
drop_packet:
dev_kfree_skb(skb);
}
-@@ -452,7 +452,7 @@ VNetUserIfReceive(VNetJack *this, // IN
+@@ -452,7 +458,7 @@ VNetUserIfReceive(VNetJack *this, // IN
*
* Callback for read operation on this userif entry in vnets proc fs.
*
@@ -210,7 +216,7 @@ index 2b976d7..8c3f685 100644
* Length of read operation.
*
* Side effects:
-@@ -471,21 +471,21 @@ VNetUserIfProcRead(char *page, // IN/OUT: buffer to write into
+@@ -471,21 +477,21 @@ VNetUserIfProcRead(char *page, // IN/OUT: buffer to write into
// read
void *data) // IN: client data - not used
{
@@ -238,7 +244,7 @@ index 2b976d7..8c3f685 100644
"dropped.down %u dropped.mismatch %u "
"dropped.overflow %u dropped.largePacket %u",
userIf->stats.droppedDown,
-@@ -494,7 +494,7 @@ VNetUserIfProcRead(char *page, // IN/OUT: buffer to write into
+@@ -494,7 +500,7 @@ VNetUserIfProcRead(char *page, // IN/OUT: buffer to write into
userIf->stats.droppedLargePacket);
len += sprintf(page+len, "\n");
@@ -247,7 +253,7 @@ index 2b976d7..8c3f685 100644
*start = 0;
*eof = 1;
return len;
-@@ -508,7 +508,7 @@ VNetUserIfProcRead(char *page, // IN/OUT: buffer to write into
+@@ -508,7 +514,7 @@ VNetUserIfProcRead(char *page, // IN/OUT: buffer to write into
*
* Copy part of datagram to userspace.
*
@@ -256,7 +262,7 @@ index 2b976d7..8c3f685 100644
* zero on success,
* -EFAULT if buffer is an invalid area
*
-@@ -545,12 +545,12 @@ VNetCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
+@@ -545,12 +551,12 @@ VNetCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
*
* Copy part of datagram to userspace doing checksum at same time.
*
@@ -271,7 +277,7 @@ index 2b976d7..8c3f685 100644
* folded checksum (non-negative value) on success,
* -EINVAL if offset is too big,
* -EFAULT if buffer is an invalid area
-@@ -572,7 +572,7 @@ VNetCsumCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
+@@ -572,7 +578,7 @@ VNetCsumCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
char *curr = buf;
const skb_frag_t *frag;
@@ -280,7 +286,7 @@ index 2b976d7..8c3f685 100644
* Something bad happened. We skip only up to skb->nh.raw, and skb->nh.raw
* must be in the header, otherwise we are in the big troubles.
*/
-@@ -629,7 +629,7 @@ VNetCsumCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
+@@ -629,7 +635,7 @@ VNetCsumCopyDatagram(const struct sk_buff *skb, // IN: skb to copy
* Copy complete datagram to the user space. Fill correct checksum
* into the copied datagram if nobody did it yet.
*
@@ -289,7 +295,7 @@ index 2b976d7..8c3f685 100644
* On success byte count, on failure -EFAULT.
*
* Side effects:
-@@ -658,7 +658,7 @@ VNetCopyDatagramToUser(const struct sk_buff *skb, // IN
+@@ -658,7 +664,7 @@ VNetCopyDatagramToUser(const struct sk_buff *skb, // IN
size_t skl;
int csum;
u_int16_t csum16;
@@ -298,7 +304,7 @@ index 2b976d7..8c3f685 100644
skl = compat_skb_csum_start(skb);
if (VNetCopyDatagram(skb, buf, skl)) {
return -EFAULT;
-@@ -689,7 +689,7 @@ VNetCopyDatagramToUser(const struct sk_buff *skb, // IN
+@@ -689,7 +695,7 @@ VNetCopyDatagramToUser(const struct sk_buff *skb, // IN
* The virtual network's read file operation. Reads the next pending
* packet for this network connection.
*
@@ -307,7 +313,7 @@ index 2b976d7..8c3f685 100644
* On success the len of the packet received,
* else if no packet waiting and nonblocking 0,
* else -errno.
-@@ -700,7 +700,7 @@ VNetCopyDatagramToUser(const struct sk_buff *skb, // IN
+@@ -700,7 +706,7 @@ VNetCopyDatagramToUser(const struct sk_buff *skb, // IN
*----------------------------------------------------------------------
*/
@@ -316,7 +322,7 @@ index 2b976d7..8c3f685 100644
VNetUserIfRead(VNetPort *port, // IN
struct file *filp, // IN
char *buf, // OUT
-@@ -768,7 +768,7 @@ VNetUserIfRead(VNetPort *port, // IN
+@@ -768,7 +774,7 @@ VNetUserIfRead(VNetPort *port, // IN
* The virtual network's write file operation. Send the raw packet
* to the network.
*
@@ -325,7 +331,7 @@ index 2b976d7..8c3f685 100644
* On success the count of bytes written else errno.
*
* Side effects:
-@@ -777,7 +777,7 @@ VNetUserIfRead(VNetPort *port, // IN
+@@ -777,7 +783,7 @@ VNetUserIfRead(VNetPort *port, // IN
*----------------------------------------------------------------------
*/
@@ -334,7 +340,7 @@ index 2b976d7..8c3f685 100644
VNetUserIfWrite(VNetPort *port, // IN
struct file *filp, // IN
const char *buf, // IN
-@@ -789,8 +789,8 @@ VNetUserIfWrite(VNetPort *port, // IN
+@@ -789,8 +795,8 @@ VNetUserIfWrite(VNetPort *port, // IN
/*
* Check size
*/
@@ -345,7 +351,7 @@ index 2b976d7..8c3f685 100644
count > ETHER_MAX_QUEUED_PACKET) {
return -EINVAL;
}
-@@ -807,25 +807,25 @@ VNetUserIfWrite(VNetPort *port, // IN
+@@ -807,25 +813,25 @@ VNetUserIfWrite(VNetPort *port, // IN
/*
* Allocate an sk_buff.
*/
@@ -376,7 +382,7 @@ index 2b976d7..8c3f685 100644
VNetSend(&userIf->port.jack, skb);
return count;
-@@ -839,7 +839,7 @@ VNetUserIfWrite(VNetPort *port, // IN
+@@ -839,7 +845,7 @@ VNetUserIfWrite(VNetPort *port, // IN
*
* XXX
*
@@ -385,7 +391,7 @@ index 2b976d7..8c3f685 100644
* 0 on success
* -errno on failure
*
-@@ -862,8 +862,8 @@ VNetUserIfIoctl(VNetPort *port, // IN
+@@ -862,8 +868,8 @@ VNetUserIfIoctl(VNetPort *port, // IN
return -EINVAL;
case SIOCSETNOTIFY2:
#ifdef VMX86_SERVER
@@ -396,7 +402,7 @@ index 2b976d7..8c3f685 100644
* the console os that are from the VMKernel address space which was the
* only case we used this.
*/
-@@ -906,20 +906,20 @@ VNetUserIfIoctl(VNetPort *port, // IN
+@@ -906,20 +912,20 @@ VNetUserIfIoctl(VNetPort *port, // IN
break;
case SIOCSIFFLAGS:
@@ -422,7 +428,7 @@ index 2b976d7..8c3f685 100644
spin_lock_irqsave(&q->lock, flags);
if (userIf->pollPtr) {
if (skb_queue_empty(q)) {
-@@ -936,11 +936,11 @@ VNetUserIfIoctl(VNetPort *port, // IN
+@@ -936,11 +942,11 @@ VNetUserIfIoctl(VNetPort *port, // IN
case SIOCINJECTLINKSTATE:
{
uint8 linkUpFromUser;
@@ -436,7 +442,7 @@ index 2b976d7..8c3f685 100644
if (linkUpFromUser != 0 && linkUpFromUser != 1) {
return -EINVAL;
}
-@@ -952,7 +952,7 @@ VNetUserIfIoctl(VNetPort *port, // IN
+@@ -952,7 +958,7 @@ VNetUserIfIoctl(VNetPort *port, // IN
return -ENOIOCTLCMD;
break;
}
@@ -445,7 +451,7 @@ index 2b976d7..8c3f685 100644
return 0;
}
-@@ -964,7 +964,7 @@ VNetUserIfIoctl(VNetPort *port, // IN
+@@ -964,7 +970,7 @@ VNetUserIfIoctl(VNetPort *port, // IN
*
* The virtual network's file poll operation.
*
@@ -454,7 +460,7 @@ index 2b976d7..8c3f685 100644
* Return POLLIN if success, else sleep and return 0.
* FIXME: Should not we always return POLLOUT?
*
-@@ -980,7 +980,7 @@ VNetUserIfPoll(VNetPort *port, // IN
+@@ -980,7 +986,7 @@ VNetUserIfPoll(VNetPort *port, // IN
poll_table *wait) // IN
{
VNetUserIF *userIf = (VNetUserIF*)port->jack.private;
@@ -463,7 +469,7 @@ index 2b976d7..8c3f685 100644
poll_wait(filp, &userIf->waitQueue, wait);
if (!skb_queue_empty(&userIf->packetQueue)) {
return POLLIN;
-@@ -995,8 +995,8 @@ VNetUserIfPoll(VNetPort *port, // IN
+@@ -995,8 +1001,8 @@ VNetUserIfPoll(VNetPort *port, // IN
* VNetUserIfSetUplinkState --
*
* Sends link state change event.
@@ -474,7 +480,7 @@ index 2b976d7..8c3f685 100644
* 0 on success, errno on failure.
*
* Side effects:
-@@ -1038,7 +1038,7 @@ VNetUserIfSetUplinkState(VNetPort *port, uint8 linkUp)
+@@ -1038,7 +1044,7 @@ VNetUserIfSetUplinkState(VNetPort *port, uint8 linkUp)
event.header.eventId = 0;
event.header.classSet = VNET_EVENT_CLASS_UPLINK;
event.header.type = VNET_EVENT_TYPE_LINK_STATE;
@@ -483,7 +489,7 @@ index 2b976d7..8c3f685 100644
* XXX kind of a hack, vmx will coalesce linkup/down if they come from the
* same adapter.
*/
-@@ -1063,8 +1063,8 @@ VNetUserIfSetUplinkState(VNetPort *port, uint8 linkUp)
+@@ -1063,8 +1069,8 @@ VNetUserIfSetUplinkState(VNetPort *port, uint8 linkUp)
*
* Create a user level port to the wonderful world of virtual
* networking.
@@ -494,7 +500,7 @@ index 2b976d7..8c3f685 100644
* Errno. Also returns an allocated port to connect to,
* NULL on error.
*
-@@ -1080,7 +1080,7 @@ VNetUserIf_Create(VNetPort **ret) // OUT
+@@ -1080,7 +1086,7 @@ VNetUserIf_Create(VNetPort **ret) // OUT
VNetUserIF *userIf;
static unsigned id = 0;
int retval;
@@ -503,7 +509,7 @@ index 2b976d7..8c3f685 100644
userIf = kmalloc(sizeof *userIf, GFP_USER);
if (!userIf) {
return -ENOMEM;
-@@ -1089,7 +1089,7 @@ VNetUserIf_Create(VNetPort **ret) // OUT
+@@ -1089,7 +1095,7 @@ VNetUserIf_Create(VNetPort **ret) // OUT
/*
* Initialize fields.
*/
@@ -512,7 +518,7 @@ index 2b976d7..8c3f685 100644
userIf->port.id = id++;
userIf->port.jack.peer = NULL;
-@@ -1134,7 +1134,7 @@ VNetUserIf_Create(VNetPort **ret) // OUT
+@@ -1134,7 +1140,7 @@ VNetUserIf_Create(VNetPort **ret) // OUT
/*
* Rest of fields.
*/
@@ -521,7 +527,7 @@ index 2b976d7..8c3f685 100644
userIf->port.flags = IFF_RUNNING;
memset(userIf->port.paddr, 0, sizeof userIf->port.paddr);
-@@ -1147,12 +1147,12 @@ VNetUserIf_Create(VNetPort **ret) // OUT
+@@ -1147,12 +1153,12 @@ VNetUserIf_Create(VNetPort **ret) // OUT
userIf->port.fileOpWrite = VNetUserIfWrite;
userIf->port.fileOpIoctl = VNetUserIfIoctl;
userIf->port.fileOpPoll = VNetUserIfPoll;