diff options
author | Markus Kitsinger (SwooshyCueb) | 2017-01-23 12:28:44 -0600 |
---|---|---|
committer | Markus Kitsinger (SwooshyCueb) | 2017-01-23 12:28:44 -0600 |
commit | 280334a9574a1ebad43b8ce3a1e3c57428123fc9 (patch) | |
tree | c8e3fb306cff85c2fa6ddee6bc9300208e879096 | |
parent | 189201addf39aa4f6cee9546d20786a935bd49fc (diff) | |
download | aur-280334a9574a1ebad43b8ce3a1e3c57428123fc9.tar.gz |
update for 4.9
-rw-r--r-- | .SRCINFO | 10 | ||||
-rw-r--r-- | PKGBUILD | 8 | ||||
-rw-r--r-- | vmci.patch | 78 | ||||
-rw-r--r-- | vmmon.patch | 100 | ||||
-rw-r--r-- | vmnet.patch | 84 |
5 files changed, 153 insertions, 127 deletions
@@ -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 @@ -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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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; |