diff options
author | Jean-Marc Lenoir | 2017-05-10 07:15:00 +0200 |
---|---|---|
committer | Jean-Marc Lenoir | 2017-05-10 07:15:00 +0200 |
commit | 95c14af7ef4827ff1355ebf77f5ed87c022fdca8 (patch) | |
tree | da006b75480f507f2b25d7d5e4549b6f108dda83 /vmmon.patch | |
parent | 6e43524fc94471a97e2aa9846c45b3c4d15427ba (diff) | |
download | aur-95c14af7ef4827ff1355ebf77f5ed87c022fdca8.tar.gz |
Update to 12.5.5
Add an option to enable macOS guests
Add VMware Player
Compatibility with Linux 4.10 and 4.11
Add a workaround for incompatible libraries
Add recognition of installed guest tools
Add missing ISO images
Fix a bug with DKMS when using several kernels
Fix search for updates
Add binary vmware-mount
Add missing icons
Add MIME types
Modify the dependencies
Add a configuration file in the backup list
Diffstat (limited to 'vmmon.patch')
-rw-r--r-- | vmmon.patch | 145 |
1 files changed, 97 insertions, 48 deletions
diff --git a/vmmon.patch b/vmmon.patch index f2c4fd370679..eea253c0a3ac 100644 --- a/vmmon.patch +++ b/vmmon.patch @@ -49,6 +49,19 @@ diff --git a/vmmon/linux/driver.c b/vmmon/linux/driver.c index 87cf45b..5390a93 100644 --- a/vmmon/linux/driver.c +++ b/vmmon/linux/driver.c +@@ -105,8 +105,12 @@ + 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) + static int LinuxDriverFault(struct vm_area_struct *vma, struct vm_fault *fault); + #else ++static int LinuxDriverFault(struct vm_fault *fault); ++#endif ++#else + static struct page *LinuxDriverNoPage(struct vm_area_struct *vma, + unsigned long address, + int *type); @@ -124,7 +124,16 @@ static struct vm_operations_struct vmuser_mops = { #endif }; @@ -118,6 +131,30 @@ index 87cf45b..5390a93 100644 #endif Log("Module %s: unloaded\n", linuxState.deviceName); +@@ -882,15 +886,23 @@ + */ + + #if defined(VMW_NOPAGE_2624) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + static int LinuxDriverFault(struct vm_area_struct *vma, //IN + struct vm_fault *fault) //IN/OUT + #else ++static int LinuxDriverFault(struct vm_fault *fault) //IN/OUT ++#endif ++#else + static struct page *LinuxDriverNoPage(struct vm_area_struct *vma, //IN + unsigned long address, //IN + int *type) //OUT: Fault type + #endif + { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0) + VMLinux *vmLinux = (VMLinux *) vma->vm_file->private_data; ++#else ++ VMLinux *vmLinux = (VMLinux *) fault->vma->vm_file->private_data; ++#endif + unsigned long pg; + struct page* page; + @@ -1279,7 +1275,7 @@ LinuxDriverReadTSC(void *data, // OUT: TSC values *----------------------------------------------------------------------------- */ @@ -137,9 +174,19 @@ index 87cf45b..5390a93 100644 retval = -EINVAL; } diff --git a/vmmon/linux/hostif.c b/vmmon/linux/hostif.c -index 7053a83..583d6da 100644 +index fd32013..583d6da 100644 --- a/vmmon/linux/hostif.c +++ b/vmmon/linux/hostif.c +@@ -37,6 +37,9 @@ + + #include <linux/vmalloc.h> + #include <linux/slab.h> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99) ++#include <linux/sched/signal.h> ++#endif + + #include <linux/preempt.h> + #include <linux/poll.h> @@ -74,6 +74,7 @@ #include <linux/kthread.h> #include <linux/wait.h> @@ -242,11 +289,13 @@ index 7053a83..583d6da 100644 * * Side effects: * None -@@ -1162,12 +1167,16 @@ HostIFGetUserPages(void *uvAddr, // IN +@@ -1162,14 +1167,16 @@ HostIFGetUserPages(void *uvAddr, // IN int retval; down_read(¤t->mm->mmap_sem); --#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) +-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) +- retval = get_user_pages((unsigned long)uvAddr, numPages, 0, ppages, NULL); +-#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) - retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99) + retval = get_user_pages((unsigned long)uvAddr, @@ -262,7 +311,7 @@ index 7053a83..583d6da 100644 up_read(¤t->mm->mmap_sem); return retval != numPages; -@@ -1179,11 +1188,11 @@ HostIFGetUserPages(void *uvAddr, // IN +@@ -1181,11 +1188,11 @@ HostIFGetUserPages(void *uvAddr, // IN * * HostIF_IsLockedByMPN -- * @@ -276,7 +325,7 @@ index 7053a83..583d6da 100644 * * Side effects: * None. -@@ -1305,7 +1314,7 @@ HostIF_UnlockPage(VMDriver *vm, // IN: +@@ -1307,7 +1314,7 @@ HostIF_UnlockPage(VMDriver *vm, // IN: vpn = VA_2_VPN((VA)addr); e = MemTrack_LookupVPN(vm->memtracker, vpn); @@ -285,7 +334,7 @@ index 7053a83..583d6da 100644 if (e == NULL) { return PAGE_UNLOCK_NOT_TRACKED; } -@@ -1351,7 +1360,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver +@@ -1353,7 +1360,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver { void *va = VA64ToPtr(uAddr); MemTrackEntry *e; @@ -294,7 +343,7 @@ index 7053a83..583d6da 100644 /* * Verify for debugging that VA and MPN make sense. * PgtblVa2MPN() can fail under high memory pressure. -@@ -1369,7 +1378,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver +@@ -1371,7 +1378,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver } /* @@ -303,7 +352,7 @@ index 7053a83..583d6da 100644 * HostIF_LockPage(allowMultipleMPNsPerVA = TRUE). * That means that this MPN should not be in the MemTracker. */ -@@ -1382,7 +1391,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver +@@ -1384,7 +1391,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver return PAGE_UNLOCK_MISMATCHED_TYPE; } } @@ -312,7 +361,7 @@ index 7053a83..583d6da 100644 HOST_UNLOCK_PFN_BYMPN(vm, mpn); -@@ -1390,7 +1399,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver +@@ -1392,7 +1399,7 @@ HostIF_UnlockPageByMPN(VMDriver *vm, // IN: VMDriver } @@ -321,7 +370,7 @@ index 7053a83..583d6da 100644 UnlockEntry(void *clientData, // IN: MemTrackEntry *entryPtr) // IN: { -@@ -1453,11 +1462,11 @@ HostIF_FreeAllResources(VMDriver *vm) // IN +@@ -1455,11 +1462,11 @@ HostIF_FreeAllResources(VMDriver *vm) // IN * * HostIF_AllocKernelMem * @@ -336,7 +385,7 @@ index 7053a83..583d6da 100644 * * Side effects: * memory is malloced -@@ -1469,8 +1478,8 @@ HostIF_AllocKernelMem(size_t size, // IN: +@@ -1471,8 +1478,8 @@ HostIF_AllocKernelMem(size_t size, // IN: int wired) // IN: { void * ptr = kmalloc(size, GFP_KERNEL); @@ -347,7 +396,7 @@ index 7053a83..583d6da 100644 Warning("%s failed (size=%p)\n", __func__, (void*)size); } -@@ -1498,7 +1507,7 @@ void * +@@ -1500,7 +1507,7 @@ void * HostIF_AllocPage(void) { VA kvAddr; @@ -356,7 +405,7 @@ index 7053a83..583d6da 100644 kvAddr = __get_free_page(GFP_KERNEL); if (kvAddr == 0) { Warning("%s: __get_free_page() failed\n", __func__); -@@ -1513,7 +1522,7 @@ HostIF_AllocPage(void) +@@ -1515,7 +1522,7 @@ HostIF_AllocPage(void) * * HostIF_FreeKernelMem * @@ -365,7 +414,7 @@ index 7053a83..583d6da 100644 * * Results: * None. -@@ -1552,7 +1561,7 @@ HostIF_FreePage(void *ptr) // IN: +@@ -1554,7 +1561,7 @@ HostIF_FreePage(void *ptr) // IN: * from the kernel without causing the host to die or to be really upset. * * Results: @@ -374,7 +423,7 @@ index 7053a83..583d6da 100644 * * Side effects: * none -@@ -1580,9 +1589,9 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN +@@ -1582,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 @@ -387,7 +436,7 @@ index 7053a83..583d6da 100644 */ unsigned int forHost; -@@ -1602,7 +1611,7 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN +@@ -1604,7 +1611,7 @@ HostIF_EstimateLockedPageLimit(const VMDriver* vm, // IN unsigned int swapPages = BYTES_2_PAGES(linuxState.swapSize); if (anonPages > swapPages) { @@ -396,7 +445,7 @@ index 7053a83..583d6da 100644 } forHost = lockedPages + LOCKED_PAGE_SLACK; if (forHost > totalPhysicalPages) { -@@ -1647,7 +1656,7 @@ HostIF_Wait(unsigned int timeoutMs) +@@ -1649,7 +1656,7 @@ HostIF_Wait(unsigned int timeoutMs) *---------------------------------------------------------------------- */ @@ -405,7 +454,7 @@ index 7053a83..583d6da 100644 HostIF_WaitForFreePages(unsigned int timeoutMs) // IN: { static unsigned count; -@@ -1672,20 +1681,20 @@ HostIF_WaitForFreePages(unsigned int timeoutMs) // IN: +@@ -1674,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). @@ -429,7 +478,7 @@ index 7053a83..583d6da 100644 { struct timeval tv; uint64 monotime, uptime, upBase, monoBase; -@@ -1707,14 +1716,14 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies +@@ -1709,14 +1716,14 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies do_gettimeofday(&tv); upBase = Atomic_Read64(&uptimeState.uptimeBase); @@ -447,7 +496,7 @@ index 7053a83..583d6da 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 +1735,7 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies +@@ -1728,7 +1735,7 @@ HostIFReadUptimeWork(unsigned long *j) // OUT: current jiffies uint64 newUpBase = monotime - (uptime - upBase); attempts++; @@ -456,7 +505,7 @@ index 7053a83..583d6da 100644 attempts < 5) { /* Another thread updated uptimeBase. Recalculate uptime. */ goto retry; -@@ -1767,7 +1776,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored +@@ -1769,7 +1776,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored unsigned long jifs; uintptr_t flags; @@ -465,7 +514,7 @@ index 7053a83..583d6da 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 +1784,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored +@@ -1777,7 +1784,7 @@ HostIFUptimeResyncMono(unsigned long data) // IN: ignored uint64 uptime = HostIFReadUptimeWork(&jifs); @@ -474,7 +523,7 @@ index 7053a83..583d6da 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 +1829,8 @@ HostIF_InitUptime(void) +@@ -1822,8 +1829,8 @@ HostIF_InitUptime(void) uptimeState.jiffiesBase = jiffies; do_gettimeofday(&tv); @@ -485,7 +534,7 @@ index 7053a83..583d6da 100644 tv.tv_sec * UPTIME_FREQ)); init_timer(&uptimeState.timer); -@@ -1949,7 +1958,7 @@ HostIF_CopyFromUser(void *dst, // OUT +@@ -1951,7 +1958,7 @@ HostIF_CopyFromUser(void *dst, // OUT *----------------------------------------------------------------------------- */ @@ -494,7 +543,7 @@ index 7053a83..583d6da 100644 HostIF_CopyToUser(void *dst, // OUT const void *src, // IN unsigned int len) // IN -@@ -1962,15 +1971,15 @@ HostIF_CopyToUser(void *dst, // OUT +@@ -1964,15 +1971,15 @@ HostIF_CopyToUser(void *dst, // OUT *----------------------------------------------------------------------------- * * HostIF_MapCrossPage -- @@ -516,7 +565,7 @@ index 7053a83..583d6da 100644 * uses a permanent mapping, instead of a temporary one with a high LA. * * Results: -@@ -2158,7 +2167,7 @@ HostIF_VMLock(VMDriver *vm, // IN +@@ -2160,7 +2167,7 @@ HostIF_VMLock(VMDriver *vm, // IN * None * * Side effects: @@ -525,7 +574,7 @@ index 7053a83..583d6da 100644 * *----------------------------------------------------------------------------- */ -@@ -2181,7 +2190,7 @@ HostIF_VMUnlock(VMDriver *vm, // IN +@@ -2183,7 +2190,7 @@ HostIF_VMUnlock(VMDriver *vm, // IN * HostIF_VMLockIsHeld -- * * Determine if the per-VM lock is held by the current thread. @@ -534,7 +583,7 @@ index 7053a83..583d6da 100644 * Results: * TRUE if yes * FALSE if no -@@ -2237,14 +2246,14 @@ HostIF_VMLockIsHeld(VMDriver *vm) // IN +@@ -2239,14 +2246,14 @@ HostIF_VMLockIsHeld(VMDriver *vm) // IN * *---------------------------------------------------------------------- */ @@ -551,7 +600,7 @@ index 7053a83..583d6da 100644 old_fs = get_fs(); set_fs(get_ds()); r = APICR_TO_ADDR(r, APICR_VERSION); -@@ -2319,7 +2328,7 @@ ProbeAPIC(VMDriver *vm, // IN/OUT: driver state +@@ -2321,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(); @@ -560,7 +609,7 @@ index 7053a83..583d6da 100644 if (ma == (MA)-1) { return FALSE; } -@@ -2420,7 +2429,7 @@ HostIF_APICInit(VMDriver *vm, // IN: +@@ -2422,7 +2429,7 @@ HostIF_APICInit(VMDriver *vm, // IN: * Perform the semaphore wait (P) operation, possibly blocking. * * Result: @@ -569,7 +618,7 @@ index 7053a83..583d6da 100644 * negated error code otherwise. * * Side-effects: -@@ -2429,7 +2438,7 @@ HostIF_APICInit(VMDriver *vm, // IN: +@@ -2431,7 +2438,7 @@ HostIF_APICInit(VMDriver *vm, // IN: *----------------------------------------------------------------------------- */ @@ -578,7 +627,7 @@ index 7053a83..583d6da 100644 HostIF_SemaphoreWait(VMDriver *vm, // IN: Vcpuid vcpuid, // IN: uint64 *args) // IN: -@@ -2452,7 +2461,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: +@@ -2454,7 +2461,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: { struct poll_wqueues table; unsigned int mask; @@ -587,7 +636,7 @@ index 7053a83..583d6da 100644 poll_initwait(&table); current->state = TASK_INTERRUPTIBLE; mask = file->f_op->poll(file, &table.pt); -@@ -2527,7 +2536,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: +@@ -2529,7 +2536,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN: *----------------------------------------------------------------------------- */ @@ -596,7 +645,7 @@ index 7053a83..583d6da 100644 HostIF_SemaphoreForceWakeup(VMDriver *vm, // IN: const VCPUSet *vcs) // IN: { -@@ -2817,8 +2826,8 @@ HostIF_CallOnEachCPU(void (*func)(void*), // IN: function to call +@@ -2819,8 +2826,8 @@ HostIF_CallOnEachCPU(void (*func)(void*), // IN: function to call * * HostIF_ReadPage -- * @@ -607,7 +656,7 @@ index 7053a83..583d6da 100644 * * Results: * 0 on success -@@ -2849,7 +2858,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page +@@ -2851,7 +2858,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page if (ptr == NULL) { return -ENOMEM; } @@ -616,7 +665,7 @@ index 7053a83..583d6da 100644 if (kernelBuffer) { memcpy(buf, ptr, PAGE_SIZE); } else { -@@ -2866,7 +2875,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page +@@ -2868,7 +2875,7 @@ HostIF_ReadPage(MPN mpn, // MPN of the page * * HostIF_WritePage -- * @@ -625,7 +674,7 @@ index 7053a83..583d6da 100644 * page. * * Results: -@@ -2996,7 +3005,7 @@ HostIF_GetNextAnonPage(VMDriver *vm, MPN inMPN) +@@ -2998,7 +3005,7 @@ HostIF_GetNextAnonPage(VMDriver *vm, MPN inMPN) * Side effects: * None. * @@ -634,7 +683,7 @@ index 7053a83..583d6da 100644 */ uint32 -@@ -3014,18 +3023,18 @@ HostIF_GetCurrentPCPU(void) +@@ -3016,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 @@ -656,7 +705,7 @@ index 7053a83..583d6da 100644 HostIFWakeupClockThread(unsigned long data) //IN: { wake_up_process(linuxState.fastClockThread); -@@ -3036,7 +3045,7 @@ HostIFWakeupClockThread(unsigned long data) //IN: +@@ -3038,7 +3045,7 @@ HostIFWakeupClockThread(unsigned long data) //IN: *---------------------------------------------------------------------- * * HostIFTimerCallback -- @@ -665,7 +714,7 @@ index 7053a83..583d6da 100644 * Schedule a tasklet to wake up the fast clock thread. * * Results: -@@ -3047,8 +3056,8 @@ HostIFWakeupClockThread(unsigned long data) //IN: +@@ -3049,8 +3056,8 @@ HostIFWakeupClockThread(unsigned long data) //IN: * *---------------------------------------------------------------------- */ @@ -676,7 +725,7 @@ index 7053a83..583d6da 100644 HostIFTimerCallback(struct hrtimer *timer) //IN: { tasklet_schedule(&timerTasklet); -@@ -3061,7 +3070,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN: +@@ -3063,7 +3070,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN: *---------------------------------------------------------------------- * * HostIFScheduleHRTimeout -- @@ -685,7 +734,7 @@ index 7053a83..583d6da 100644 * Schedule an hrtimer to wake up the fast clock thread. * * Results: -@@ -3073,7 +3082,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN: +@@ -3075,7 +3082,7 @@ HostIFTimerCallback(struct hrtimer *timer) //IN: *---------------------------------------------------------------------- */ @@ -694,7 +743,7 @@ index 7053a83..583d6da 100644 HostIFScheduleHRTimeout(ktime_t *expires) //IN: { struct hrtimer t; -@@ -3091,7 +3100,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN: +@@ -3093,7 +3100,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN: if (hrtimer_active(&t)) { schedule(); } @@ -703,7 +752,7 @@ index 7053a83..583d6da 100644 hrtimer_cancel(&t); __set_current_state(TASK_RUNNING); } -@@ -3114,7 +3123,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN: +@@ -3116,7 +3123,7 @@ HostIFScheduleHRTimeout(ktime_t *expires) //IN: * Side effects: * none. * @@ -712,7 +761,7 @@ index 7053a83..583d6da 100644 */ static long -@@ -3147,7 +3156,7 @@ HostIFDoIoctl(struct file *filp, +@@ -3149,7 +3156,7 @@ HostIFDoIoctl(struct file *filp, */ int @@ -721,7 +770,7 @@ index 7053a83..583d6da 100644 unsigned int rate, //IN: current clock rate struct file *filp) //IN: /dev/rtc descriptor { -@@ -3157,14 +3166,14 @@ HostIFStartTimer(Bool rateChanged, //IN: Did rate change? +@@ -3159,14 +3166,14 @@ HostIFStartTimer(Bool rateChanged, //IN: Did rate change? int timerPeriod; if (rateChanged) { @@ -738,7 +787,7 @@ index 7053a83..583d6da 100644 slack = timerPeriod / 100; } set_current_state(TASK_INTERRUPTIBLE); -@@ -3510,7 +3519,7 @@ HostIF_MapUserMem(VA addr, // IN: User memory virtual address +@@ -3512,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", @@ -747,7 +796,7 @@ index 7053a83..583d6da 100644 newHandle->numPages = numPagesNeeded; newHandle->addr = mappedAddr; -@@ -3546,7 +3555,7 @@ HostIF_UnmapUserMem(VMMappedUserMem *handle) // IN: Handle to mapped memory +@@ -3548,7 +3555,7 @@ HostIF_UnmapUserMem(VMMappedUserMem *handle) // IN: Handle to mapped memory } printk(KERN_DEBUG "%s: numPages = %"FMTSZ"u, addr = 0x%p\n", |