Upgrade app-emulation/vmware-workstation

Added:
	app-emulation/vmware-workstation-15.0.1.10737736
	app-emulation/vmware-modules-330.0.1
Removed:
	app-emulation/vmware-workstation-14.1.2.8497320-r3
	app-emulation/vmware-modules-329.1.2.ebuild
This commit is contained in:
Sergey Morozov 2018-11-18 15:38:22 +03:00
parent f07b1acaaa
commit e0062f011b
11 changed files with 212 additions and 1166 deletions

View File

@ -1,15 +1,11 @@
AUX 329-00-vmmon-quick-workaround-for-objtool-warnings.patch 1555 BLAKE2B dd4a58e78634aed9d5fb64bcb02b999d55be6b87e496c8daf640f7027aba3942f4e415125ba8fb847fa832336560d4bdbb0f539fefea3b4d2c175f2cbb33a9d7 SHA512 892bde81c721c18264e154cdfadd6b560af37260c9a457ec321fdf6bdf78b1704df57532b0919ed7dbc5c1036230b95f0cbacb7acbfd15da2145e3445da795f7
AUX 329-01-vmmon-fix-always_inline-attribute-usage.patch 1204 BLAKE2B faa201beb42ac4a04f660aa99d9cad76c12f47048b49f3c48f6932ec367ffebb9e94c5f06fd0957fb8451c183e6bf21954ce88c04910969f80370c2c85e1024b SHA512 b3ab5a62936bc1bed997f84401df998097062ca2b7425dcc2d01191c9b49ddafcee36e859b1bcd60de0d532c1c597aba2b406d6f90062674d5fe54c1534e3235
AUX 329-02-vmmon-fix-indirect-call-with-retpoline-build.patch 1829 BLAKE2B 6b2efbd868cd3ecf9bbd5e9781d9e85fa733b5919b66040e9c6cdf9f65bf5c5aabb43e52af9cd224481fc60943df546b2812ae17a65bbb476651ec399194ac4f SHA512 6ea044d1b9096b48fa3825f474a758aa67698753646e62dd83d427bfbf8ebd2168c9d0130a35b4ee81391c3ce4d4459cee39f0354469d0485d30118b50f3463c
AUX 329-03-vmmon-compatibility-with-eventpoll-switch-to-poll_ma.patch 2400 BLAKE2B c66c6e524166c030aef95024ed560bc1c1ecbfa0f7acaeb7d3e08371c9f6d37dca58539d58e1d2a1d1b815413cd5a0adea6afb62b52181cd93abfa89dcd88c68 SHA512 0c6e346fb92fa9039d0364eefda23f95d686c4b7a1efef7b406b229877210724e177a1f7c264c7fc6e8adc4c01eb349bf8c3d313bd0536d7ffe81078dd6df031
AUX 329-03-vmmon-check-presence-of-file_operations-poll.patch 2755 BLAKE2B 9a03511a0068d76574ccc7f5dd32c016477a7ede3c319c31cc4212960258aa3ba28edde655101ee39e441322e5a13dce1d6360c22c21f1ead29666f821f0445f SHA512 7dd424858cff634987323052ed331652e6399911c0389c8077109a91407fd549a47ebb222ffc449d42f4f816a54d682778863fe3488dd47b3bfcbfef1064f876
AUX 329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch 1169 BLAKE2B 4e5a74961ff512748375bd1d90a6670fc519c2c4c0be94f89d14fdf39e4922b057ae2baa38d07d34aca9ec897b012c4b9326dfd51a44235418919708b789895e SHA512 727fb97a63399d7c19238ae864a38cf2297adccb466fc2deba2a72f0592eb655f653d3c8e45dac06bbd0e09fc71a59a8bfea491b7580b37d41d0729f6adc023d
AUX 329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch 1131 BLAKE2B 1e07b4a15ff1180349348d84efb606c223f5cfa4accdcc0e1a41c8a0de52fb186bddd3c6cd3f5f48041c52ad2c29110726197f1d9352bd87caf4e646c4c4c001 SHA512 192d6a9a14757706f1c9345ff45592a559729619627a32c9f0a1d7203e60881312a4d0fc92ff750c8ff5b5350cf1a2b55238c16973e9c7eb4c2cfe2966abe7d1
AUX 329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch 1603 BLAKE2B 4eea61a743cb443e4a4c22a02a03410adbae66339ac7ed1c1aafe54e447135c1ed976ce3c97f22db9984926de9b9a09b1820e253978f457c0c2b9d22f8e4c59b SHA512 4413cd5e791dd19c4b47ba2178e386160912882b0e1a549151eafcceae484b5e48f527ee45b14584c98e06c11e28ee5bfef34b318e46b45704fbcf93a7b52b56
AUX 329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch 1167 BLAKE2B b5c1c4d98d2aed5bb473270ea9b5737da05bab45748aa84b0a83c26abf8d826960ff3251132ae2770bf87168bfb9c01ab7c81ec99036af576ca3fa0eb08b36e2 SHA512 1cf13f9c745bcfcf24ac1e8f762d057f1afde46ec1de4e651a07e63e08d9073eca9bdbaa53c5a1ced556ec83da3bfd80d3c65c979fb91566cf3c7ddae38eaeac
AUX 329-4.14-00-vsock-gcc-plugins-randstruct.patch 3477 BLAKE2B 9d454174bd3cf888d92a5644a2f8078f9368e5db0ee1c1f0ca7f43a897efa69d9d28c3cd89af3e38a790a23c442898364bc9d189f7920cf0dea54ca20af6ece4 SHA512 a3b68de2664807715dff9648744bd345cdf007a7c1d173fc5c1f410baa65e3a8ef3063543fd369e969a60d2f2ec9cda6127b22b09c5e17aefe288de104d58871
AUX 329-4.16-00-vmmon-use-standard-definition-of-MSR_K7_HWCR_SMMLOCK.patch 1097 BLAKE2B edf94d85be2caa69ca8b7856e636dd1fc41d60b43e56e08e913b9decca7f1f3a2a39d98681366a4c2f948a60acdce513f873b1c080d7329720abd0f235ee739a SHA512 f2e359183999f0396406724a8e0a80ceb3551772958a8a1e31eec0af8a746191bf5c7b7a5282d0f59d5a7cdd14744e1b775ad5af45bc5ee030434bcbb686d50c
AUX 329-vmblock.patch 15016 BLAKE2B 887159b5c526eea4fcc7d49664a4c7233ab9c73440bef9e8f4ceb2b9694a72cd9c4dcff131f9a74dabe5a0ec3a4e0437db405f6c74f9cfd49ef590b19a658ab8 SHA512 6cb922537009fe39e2e58e19ba9c8fda6a5ea484f3d28a94793de0fbd63d8d564822f2c83447d135f1c5e7f5da6734af218f86e31c20d322cbf00b675297c712
AUX 329-vmci.patch 9474 BLAKE2B 9e833fcafc39c4279a9d86c96c0d4b012d6f653d42a76ba7d7d65355876da469c0dcb746a6eab4be795c5c29f1d11ace5cbf705e066d12fff20df758b8ade901 SHA512 b8b46a3df7ee2f906dd474add6c0ec3d76566f1c643278e3a7faeb68c829c78926351359bd78e12ad744bb946a31324ee347bb67413c4d670e7a091379160e2e
AUX 329-vsock.patch 10068 BLAKE2B d84f22a1623e2303c6aa2ea3624857fb2cf2dbb31b4747582285fc506ae208c1fb4b2a5925b02e6473b43ba178d871276584800d06cd2cdfb06273743814cc24 SHA512 73df6466b1df7be6ae40751596834d967b46d48218267afe5244abcdcacf5e263a78ed3bd3c4e6f2a5d81dd9c0c9e9042fc52fa9f1d4d000098ad20f19509001
EBUILD vmware-modules-329.1.2.ebuild 3669 BLAKE2B 08c3d416e5eb5ce415e85cf6467f3846ec6506294677782c102f72dcb5bd928e62ace4733fda8041f1d12e27dfc130ea9ff6a7f3264d20b0bfe801e1d839bec2 SHA512 9317c9124ca131581fdb71351d5e4255fcf8989daa4199b19f56936d8bc75df8752990f8748d14238e671a534758b4b193ce4e32ee83c94ebd9d89532d6e8188
EBUILD vmware-modules-329.1.3.ebuild 3765 BLAKE2B dddfe3d1f5a9bcd1245ceea3333ea13c33ceb52471efef9853fe3af8d5686949be72a282120c3c53328486739b93c8c37eb6900defbec8ce26bb12c549d150e7 SHA512 449bd7875dd96babb22fcbbb0ea69b5be2193746e73d856fd86c19796af6988c590061114795b30b3ebe4f2dd5cb311cfbcbc9b70bf4812575b4b041fe4b31c3
EBUILD vmware-modules-330.0.1.ebuild 3330 BLAKE2B f43fa5d255ab0349d874fb28074992032ded368c926f87aafafef423f84459cd550db92c588ca67ed2a0cc9db928c20c8fe8a254afbe316d07c08f59d67610bb SHA512 92d53fd22a40fb9520e52e0073e5e326aaa332797b06d8dcf19987444ba456bb06a8dc1fc4f0c70cb97fb13932db82db1cc0be5b1ad52bc727fce836df6de21a

View File

@ -1,14 +1,22 @@
From 3f2a6c720f68860e3482c81eb49737ad9a05606d Mon Sep 17 00:00:00 2001
From 70ed9dd2ec64c09fbd0de27dcb10f9948a2b212a Mon Sep 17 00:00:00 2001
From: Michal Kubecek <mkubecek@suse.cz>
Date: Sun, 17 Jun 2018 15:54:09 +0200
Subject: [PATCH 4/4] vmmon: compatibility with eventpoll switch to poll_mask()
Date: Mon, 20 Aug 2018 07:46:13 +0200
Subject: [PATCH] vmmon: check presence of file_operations::poll()
Since commit 11c5ad0ec441 ("eventpoll: switch to ->poll_mask") in
v4.18-rc1, eventpoll switched from ->poll() to ->poll_mask(). Rather than
calling the callback directly (which would result in null pointer
dereference), use vfs_poll() wrapper. As this wrapper is only available
since 4.18-rc1 cycle as well, provide a copy to use when building against
older kernels.
Commit 11c5ad0ec441 ("eventpoll: switch to ->poll_mask") in v4.18-rc1, made
eventpoll switch from ->poll() to ->poll_mask(), resulting in a null
pointer dereference as vmmon calls the callback directly without checking
its availability.
Rather than calling the callback directly (which would result in null
pointer dereference), use vfs_poll() wrapper. As this wrapper is only
available since 4.18-rc1 cycle as well, provide a copy to use when building
against older kernels.
Note: even if the commit revealing the problem was reverted in 4.18-rc3
(and is unlikely to go back in the same form) so that vmmon no longer
crashes with 4.18 kernel, calling the callback without a check is a bad
practice so let's keep the patch in place.
---
vmmon-only/include/compat_poll.h | 30 ++++++++++++++++++++++++++++++
vmmon-only/linux/hostif.c | 3 ++-
@ -52,7 +60,7 @@ index 0000000..562cdb6
+
+#endif /* __COMPAT_POLL_H__ */
diff --git a/vmmon-only/linux/hostif.c b/vmmon-only/linux/hostif.c
index b793539..61d00df 100644
index 21758c2..af4b1d9 100644
--- a/vmmon-only/linux/hostif.c
+++ b/vmmon-only/linux/hostif.c
@@ -74,6 +74,7 @@
@ -63,7 +71,7 @@ index b793539..61d00df 100644
#if !defined(CONFIG_HIGH_RES_TIMERS)
#error CONFIG_HIGH_RES_TIMERS required for acceptable performance
@@ -2373,7 +2374,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
@@ -2570,7 +2571,7 @@ HostIF_SemaphoreWait(VMDriver *vm, // IN:
poll_initwait(&table);
current->state = TASK_INTERRUPTIBLE;
@ -73,5 +81,5 @@ index b793539..61d00df 100644
vm->vmhost->vcpuSemaTask[vcpuid] = current;
schedule_timeout(timeoutms * HZ / 1000); // convert to Hz
--
2.18.0
2.19.0

View File

@ -1,84 +0,0 @@
--- a/vsock-only/linux/notify.c 2017-10-03 06:52:10.953893050 +0300
+++ b/vsock-only/linux/notify.c 2017-10-03 05:42:48.642701836 +0300
@@ -1193,20 +1193,20 @@ VSockVmciNotifyPktProcessNegotiate(struc
/* Socket control packet based operations. */
-VSockVmciNotifyOps vSockVmciNotifyPktOps = {
- VSockVmciNotifyPktSocketInit,
- VSockVmciNotifyPktSocketDestruct,
- VSockVmciNotifyPktPollIn,
- VSockVmciNotifyPktPollOut,
- VSockVmciNotifyPktHandlePkt,
- VSockVmciNotifyPktRecvInit,
- VSockVmciNotifyPktRecvPreBlock,
- VSockVmciNotifyPktRecvPreDequeue,
- VSockVmciNotifyPktRecvPostDequeue,
- VSockVmciNotifyPktSendInit,
- VSockVmciNotifyPktSendPreBlock,
- VSockVmciNotifyPktSendPreEnqueue,
- VSockVmciNotifyPktSendPostEnqueue,
- VSockVmciNotifyPktProcessRequest,
- VSockVmciNotifyPktProcessNegotiate,
+VSockVmciNotifyOps vSockVmciNotifyPktOps __refdata = {
+ .socketInit = VSockVmciNotifyPktSocketInit,
+ .socketDestruct = VSockVmciNotifyPktSocketDestruct,
+ .pollIn = VSockVmciNotifyPktPollIn,
+ .pollOut = VSockVmciNotifyPktPollOut,
+ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt,
+ .recvInit = VSockVmciNotifyPktRecvInit,
+ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock,
+ .recvPreDequeue = VSockVmciNotifyPktRecvPreDequeue,
+ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue,
+ .sendInit = VSockVmciNotifyPktSendInit,
+ .sendPreBlock = VSockVmciNotifyPktSendPreBlock,
+ .sendPreEnqueue = VSockVmciNotifyPktSendPreEnqueue,
+ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue,
+ .processRequest = VSockVmciNotifyPktProcessRequest,
+ .processNegotiate = VSockVmciNotifyPktProcessNegotiate,
};
diff -urp a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
--- a/vsock-only/linux/notifyQState.c 2017-10-03 06:52:10.952893329 +0300
+++ b/vsock-only/linux/notifyQState.c 2017-10-03 05:43:02.950697125 +0300
@@ -771,21 +770,24 @@ VSockVmciNotifyPktProcessNegotiate(struc
}
-/* Socket always on control packet based operations. */
-VSockVmciNotifyOps vSockVmciNotifyPktQStateOps = {
- VSockVmciNotifyPktSocketInit,
- VSockVmciNotifyPktSocketDestruct,
- VSockVmciNotifyPktPollIn,
- VSockVmciNotifyPktPollOut,
- VSockVmciNotifyPktHandlePkt,
- VSockVmciNotifyPktRecvInit,
- VSockVmciNotifyPktRecvPreBlock,
- NULL, /* recvPreDequeue */
- VSockVmciNotifyPktRecvPostDequeue,
- VSockVmciNotifyPktSendInit,
- NULL, /* sendPreBlock */
- NULL, /* sendPreEnqueue */
- VSockVmciNotifyPktSendPostEnqueue,
- VSockVmciNotifyPktProcessRequest,
- VSockVmciNotifyPktProcessNegotiate,
+
+
+// Socket always on control packet based operations.
+VSockVmciNotifyOps vSockVmciNotifyPktQStateOps __refdata = {
+ .socketInit = VSockVmciNotifyPktSocketInit,
+ .socketDestruct = VSockVmciNotifyPktSocketDestruct,
+ .pollIn = VSockVmciNotifyPktPollIn,
+ .pollOut = VSockVmciNotifyPktPollOut,
+ .handleNotifyPkt = VSockVmciNotifyPktHandlePkt,
+ .recvInit = VSockVmciNotifyPktRecvInit,
+ .recvPreBlock = VSockVmciNotifyPktRecvPreBlock,
+ .recvPreDequeue = NULL,
+ .recvPostDequeue = VSockVmciNotifyPktRecvPostDequeue,
+ .sendInit = VSockVmciNotifyPktSendInit,
+ .sendPreBlock = NULL,
+ .sendPreEnqueue = NULL,
+ .sendPostEnqueue = VSockVmciNotifyPktSendPostEnqueue,
+ .processRequest = VSockVmciNotifyPktProcessRequest,
+ .processNegotiate = VSockVmciNotifyPktProcessNegotiate,
+
};

View File

@ -1,461 +0,0 @@
diff --git a/vmblock-only/Makefile b/vmblock-only/Makefile
index bbfe225..8ec1a86 100644
--- a/vmblock-only/Makefile
+++ b/vmblock-only/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/vmblock-only/Makefile.kernel b/vmblock-only/Makefile.kernel
index ab7a727..e3ec9d2 100644
--- a/vmblock-only/Makefile.kernel
+++ b/vmblock-only/Makefile.kernel
@@ -19,7 +19,7 @@
INCLUDE += -I$(SRCROOT)/include
-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
+EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachecreate.c, -DVMW_KMEMCR_HAS_DTOR, )
EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/cachector.c, -DVMW_KMEMCR_CTOR_HAS_3_ARGS, )
diff --git a/vmblock-only/linux/control.c b/vmblock-only/linux/control.c
index 79716bd..5b6acb2 100644
--- a/vmblock-only/linux/control.c
+++ b/vmblock-only/linux/control.c
@@ -29,7 +29,7 @@
#include <linux/stat.h>
#include <linux/fs.h>
-#include <asm/uaccess.h>
+#include <linux/uaccess.h>
#include "vmblockInt.h"
#include "block.h"
@@ -208,9 +208,17 @@ SetupProcDevice(void)
VMBlockSetProcEntryOwner(controlProcMountpoint);
/* Create /proc/fs/vmblock/dev */
+ // create_proc_entry deprecated in 3.10
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME,
+ VMBLOCK_CONTROL_MODE,
+ controlProcDirEntry,
+ &ControlFileOps);
+#else
controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME,
VMBLOCK_CONTROL_MODE,
controlProcDirEntry);
+#endif
if (!controlProcEntry) {
Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n");
remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry);
@@ -218,7 +226,9 @@ SetupProcDevice(void)
return -EINVAL;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) //Maybe 3.14? 3.13?
controlProcEntry->proc_fops = &ControlFileOps;
+#endif
return 0;
}
@@ -272,17 +282,50 @@ CleanupProcDevice(void)
*----------------------------------------------------------------------------
*/
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
+/* copy-paste from Lustre FS by pavlinux */
+static inline char *ll_getname(const char __user *filename)
+{
+ int ret = 0, len;
+ char *tmp = __getname();
+
+ if (!tmp)
+ return ERR_PTR(-ENOMEM);
+
+ len = strncpy_from_user(tmp, filename, PATH_MAX);
+ if (len == 0)
+ ret = -ENOENT;
+ else if (len > PATH_MAX)
+ ret = -ENAMETOOLONG;
+
+ if (ret) {
+ __putname(tmp);
+ tmp = ERR_PTR(ret);
+ }
+ return tmp;
+};
+#endif
+
static int
ExecuteBlockOp(const char __user *buf, // IN: buffer with name
const os_blocker_id_t blocker, // IN: blocker ID (file)
int (*blockOp)(const char *filename, // IN: block operation
const os_blocker_id_t blocker))
{
- char *name;
+ struct filename *fn = NULL;
+ char *name = (char *)fn->name;
int i;
int retval;
- name = getname(buf);
+ // Not sure what changed in 3.13 to neccessitate this.
+ // Gentoo uses __getname(), though.
+ // https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-3.10-02-control.patch#L36
+ // ~MK
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
+ name = (char *)getname(buf);
+#else
+ name = (char *)ll_getname(buf);
+#endif
if (IS_ERR(name)) {
return PTR_ERR(name);
}
@@ -293,7 +336,13 @@ ExecuteBlockOp(const char __user *buf, // IN: buffer with name
retval = i < 0 ? -EINVAL : blockOp(name, blocker);
- putname(name);
+ // I'm not sure what this does, but you seem to know what you're doing ~MK
+ if (fn->name != fn->iname) { /* add by pavlinux */
+ __putname(fn->name);
+ kvfree(fn);
+ } else {
+ __putname(fn);
+ }
return retval;
}
diff --git a/vmblock-only/linux/dentry.c b/vmblock-only/linux/dentry.c
index 05ea95a..1245358 100644
--- a/vmblock-only/linux/dentry.c
+++ b/vmblock-only/linux/dentry.c
@@ -32,7 +32,13 @@
#include "block.h"
-static int DentryOpRevalidate(struct dentry *dentry, struct nameidata *nd);
+// From what I can tell, this should've always been an unsigned int?
+static int DentryOpRevalidate(struct dentry *dentry,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0) // Maybe 3.14 or 3.13?
+ struct nameidata *nd);
+#else
+ unsigned int flags);
+#endif
struct dentry_operations LinkDentryOps = {
.d_revalidate = DentryOpRevalidate,
@@ -60,7 +66,11 @@ struct dentry_operations LinkDentryOps = {
static int
DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
struct nameidata *nd) // IN: lookup flags & intent
+#else
+ unsigned int flags) // IN: lookup flags & intent
+#endif
{
VMBlockInodeInfo *iinfo;
struct nameidata actualNd;
@@ -101,7 +111,11 @@ DentryOpRevalidate(struct dentry *dentry, // IN: dentry revalidating
if (actualDentry &&
actualDentry->d_op &&
actualDentry->d_op->d_revalidate) {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)
+ return actualDentry->d_op->d_revalidate(actualDentry, flags);
+#else
return actualDentry->d_op->d_revalidate(actualDentry, nd);
+#endif
}
if (compat_path_lookup(iinfo->name, 0, &actualNd)) {
diff --git a/vmblock-only/linux/file.c b/vmblock-only/linux/file.c
index d7ac1f6..c5e6604 100644
--- a/vmblock-only/linux/file.c
+++ b/vmblock-only/linux/file.c
@@ -39,6 +39,7 @@ typedef ino_t inode_num_t;
#endif
/* Specifically for our filldir_t callback */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
typedef struct FilldirInfo {
filldir_t filldir;
void *dirent;
@@ -76,6 +77,7 @@ Filldir(void *buf, // IN: Dirent buffer passed from FileOpReaddir
/* Specify DT_LNK regardless */
return info->filldir(info->dirent, name, namelen, offset, ino, DT_LNK);
}
+#endif
/* File operations */
@@ -132,7 +134,12 @@ FileOpOpen(struct inode *inode, // IN
* and that would try to acquire the inode's semaphore; if the two inodes
* are the same we'll deadlock.
*/
+ // f_dentry is defined as f_path.dentry until 3.19
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,19,0)
if (actualFile->f_dentry && inode == actualFile->f_dentry->d_inode) {
+#else
+ if (actualFile->f_path.dentry && inode == actualFile->f_path.dentry->d_inode) {
+#endif
Warning("FileOpOpen: identical inode encountered, open cannot succeed.\n");
if (filp_close(actualFile, current->files) < 0) {
Warning("FileOpOpen: unable to close opened file.\n");
@@ -164,13 +171,20 @@ FileOpOpen(struct inode *inode, // IN
*----------------------------------------------------------------------------
*/
+// pavlinux's patch completely removes this bit for kernels older than 3.13
static int
FileOpReaddir(struct file *file, // IN
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
void *dirent, // IN
filldir_t filldir) // IN
+#else
+ struct dir_context* ctx) //IN
+#endif
{
int ret;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
FilldirInfo info;
+#endif
struct file *actualFile;
if (!file) {
@@ -184,12 +198,20 @@ FileOpReaddir(struct file *file, // IN
return -EINVAL;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
info.filldir = filldir;
info.dirent = dirent;
actualFile->f_pos = file->f_pos;
ret = vfs_readdir(actualFile, Filldir, &info);
file->f_pos = actualFile->f_pos;
+#else
+ /* Ricky Wong Yung Fei:
+ * Manipulation of pos is now handled internally by iterate_dir().
+ */
+ ret = iterate_dir(actualFile, ctx);
+ file->f_pos = actualFile->f_pos;
+#endif
return ret;
}
@@ -236,8 +258,15 @@ FileOpRelease(struct inode *inode, // IN
}
+// pavlinux's patch drops FileOpReaddr for < 3.13
+// pavlinux's patch sets .owner = THIS_MODULE and .llseek = no_llseek
struct file_operations RootFileOps = {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)
.readdir = FileOpReaddir,
+#else
+ .iterate = FileOpReaddir,
+#endif
+ .owner = THIS_MODULE,
.open = FileOpOpen,
.release = FileOpRelease,
};
diff --git a/vmblock-only/linux/inode.c b/vmblock-only/linux/inode.c
index 098c94c..7aed6e7 100644
--- a/vmblock-only/linux/inode.c
+++ b/vmblock-only/linux/inode.c
@@ -28,20 +28,32 @@
#include <linux/fs.h>
#include <linux/time.h>
#include <linux/namei.h>
+#include <linux/cred.h>
#include "vmblockInt.h"
#include "filesystem.h"
#include "block.h"
/* Inode operations */
+// Again, it looks like last arg should've always been unsigned int ~MK
static struct dentry *InodeOpLookup(struct inode *dir,
- struct dentry *dentry, struct nameidata *nd);
-static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
-static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
+ struct dentry *dentry,
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) // Maybe 3.12 or 3.13?
+ struct nameidata *nd);
#else
+ unsigned int flags);
+#endif
+static int InodeOpReadlink(struct dentry *dentry, char __user *buffer, int buflen);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
static int InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
+static const char *InodeOpGetLink(struct dentry *dentry, struct inode *inode,
+ struct delayed_call *done);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
+static const char *InodeOpFollowlink(struct dentry *dentry, void **cookie);
+#else
+static void *InodeOpFollowlink(struct dentry *dentry, struct nameidata *nd);
#endif
@@ -49,9 +60,13 @@ struct inode_operations RootInodeOps = {
.lookup = InodeOpLookup,
};
-static struct inode_operations LinkInodeOps = {
+struct inode_operations LinkInodeOps = {
.readlink = InodeOpReadlink,
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
+ .get_link = InodeOpGetLink,
+#else
.follow_link = InodeOpFollowlink,
+#endif
};
@@ -75,7 +90,11 @@ static struct inode_operations LinkInodeOps = {
static struct dentry *
InodeOpLookup(struct inode *dir, // IN: parent directory's inode
struct dentry *dentry, // IN: dentry to lookup
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
struct nameidata *nd) // IN: lookup intent and information
+#else
+ unsigned int flags) // IN: lookup intent and information
+#endif
{
char *filename;
struct inode *inode;
@@ -135,7 +154,16 @@ InodeOpLookup(struct inode *dir, // IN: parent directory's inode
inode->i_size = INODE_TO_IINFO(inode)->nameLen;
inode->i_version = 1;
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)
inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
+#else
+ inode->i_atime = inode->i_mtime = inode->i_ctime = current_kernel_time();
+#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
inode->i_uid = inode->i_gid = 0;
+#else
+ inode->i_gid = make_kgid(current_user_ns(), 0);
+ inode->i_uid = make_kuid(current_user_ns(), 0);
+#endif
inode->i_op = &LinkInodeOps;
d_add(dentry, inode);
@@ -176,8 +200,15 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink
if (!iinfo) {
return -EINVAL;
}
-
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(3, 14, 99)
return vfs_readlink(dentry, buffer, buflen, iinfo->name);
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 6, 99)
+ return readlink_copy(buffer, buflen, iinfo->name);
+#elif LINUX_VERSION_CODE <= KERNEL_VERSION(4, 9, 99)
+ return generic_readlink(dentry, buffer, buflen);
+#else
+ return vfs_readlink(dentry, buffer, buflen);
+#endif
}
@@ -198,30 +229,58 @@ InodeOpReadlink(struct dentry *dentry, // IN : dentry of symlink
*----------------------------------------------------------------------------
*/
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
-static void *
+static
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 13)
+int
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
+const char *
#else
-static int
+void *
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
+InodeOpGetLink(struct dentry *dentry, struct inode *inode,
+ struct delayed_call *done)
+#else
InodeOpFollowlink(struct dentry *dentry, // IN : dentry of symlink
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
+ void **cookie)
+#else
struct nameidata *nd) // OUT: stores result
+#endif
+#endif
{
int ret;
VMBlockInodeInfo *iinfo;
if (!dentry) {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
+ ret = -ECHILD;
+#else
Warning("InodeOpReadlink: invalid args from kernel\n");
ret = -EINVAL;
+#endif
goto out;
}
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
+ iinfo = INODE_TO_IINFO(inode);
+#else
iinfo = INODE_TO_IINFO(dentry->d_inode);
+#endif
if (!iinfo) {
ret = -EINVAL;
goto out;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)
ret = vfs_follow_link(nd, iinfo->name);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 99)
+ return (char *)(iinfo->name);
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
+ return *cookie = (char *)(iinfo->name);
+#else
+ nd_set_link(nd, iinfo->name);
+#endif
out:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 13)
diff --git a/vmblock-only/shared/compat_namei.h b/vmblock-only/shared/compat_namei.h
index f82dd49..426d40b 100644
--- a/vmblock-only/shared/compat_namei.h
+++ b/vmblock-only/shared/compat_namei.h
@@ -45,4 +45,20 @@
#define compat_path_lookup(name, flags, nd) path_lookup(name, flags, nd)
#endif
+/* nameidata struct for 4.2+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,2,0)
+struct nameidata {
+ struct path path;
+ struct qstr last;
+ struct path root;
+ struct inode *inode; /* path.dentry.d_inode */
+ unsigned int flags;
+ unsigned seq, m_seq;
+ int last_type;
+ unsigned depth;
+ struct file *base;
+ char *saved_names[MAX_NESTED_LINKS + 1];
+};
+#endif
+
#endif /* __COMPAT_NAMEI_H__ */

View File

@ -1,294 +0,0 @@
diff --git a/vmci-only/Makefile b/vmci-only/Makefile
index c630705..18357e5 100644
--- a/vmci-only/Makefile
+++ b/vmci-only/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-only/Makefile.kernel b/vmci-only/Makefile.kernel
index 8e6e7d0..28eb503 100644
--- a/vmci-only/Makefile.kernel
+++ b/vmci-only/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-only/linux/driver.c b/vmci-only/linux/driver.c
index f676166..9e42f3f 100644
--- a/vmci-only/linux/driver.c
+++ b/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>
@@ -1466,12 +1467,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);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 5, 99)
+ 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 +1694,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) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
vfree(data_buffer);
+#else
+ kvfree(data_buffer);
+#endif
data_buffer = NULL;
return retval;
}
@@ -1722,12 +1734,25 @@
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 +2505,11 @@ vmci_exit(void)
if (guestDeviceInit) {
pci_unregister_driver(&vmci_driver);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
vfree(data_buffer);
+#else
+ kvfree(data_buffer);
+#endif
data_buffer = NULL;
guestDeviceInit = FALSE;
}
@@ -2490,7 +2519,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 3fba8b6..1836442 100644
--- a/vmci-only/linux/vmciKernelIf.c
+++ b/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, 10, 99)
+#include <linux/sched/signal.h>
+#endif
#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;
+#else
+ 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);
+#else
+ err = memcpy_from_msg((uint8 *)va + pageOffset, msg, toCopy);
+#endif
if (err != 0) {
if (kernelIf->host) {
kunmap(kernelIf->u.h.page[pageIndex]);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
}
return VMCI_ERROR_INVALID_ARGS;
+#else
+ return VMCI_ERROR_INVALID_ARGS;
+ }
+#endif
}
} else {
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;
+#else
+ 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);
+#else
+ err = memcpy_to_msg(msg, (uint8 *)va + pageOffset, toCopy);
+#endif
if (err != 0) {
if (kernelIf->host) {
kunmap(kernelIf->u.h.page[pageIndex]);
@@ -1834,7 +1856,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;
}
}
@@ -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)
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,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
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) {
diff --git a/vmci-only/shared/compat_module.h b/vmci-only/shared/compat_module.h
index 2af7372..729aedc 100644
--- a/vmci-only/shared/compat_module.h
+++ b/vmci-only/shared/compat_module.h
@@ -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
+ */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 99)
+#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 e2cb477..3dd7097 100644
--- a/vmci-only/shared/vm_device_version.h
+++ b/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 9def671..082fe59 100644
--- a/vmci-only/shared/vmci_kernel_if.h
+++ b/vmci-only/shared/vmci_kernel_if.h
@@ -100,7 +100,7 @@
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;

View File

@ -1,266 +0,0 @@
diff --git a/vsock-only/Makefile b/vsock-only/Makefile
index 5d92e9b..7d315e8 100644
--- a/vsock-only/Makefile
+++ b/vsock-only/Makefile
@@ -42,8 +42,11 @@ AUTOCONF_DIR := $(SRCROOT)/shared/autoconf
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/vsock-only/Makefile.kernel b/vsock-only/Makefile.kernel
index 5218df2..374cc1f 100644
--- a/vsock-only/Makefile.kernel
+++ b/vsock-only/Makefile.kernel
@@ -25,7 +25,7 @@ INCLUDE += -I$(SRCROOT)/include
INCLUDE += -I$(SRCROOT)/linux
INCLUDE += -I$(SRCROOT)/common
-EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
+EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE) $(LINUXINCLUDE)
EXTRA_CFLAGS += $(call vm_check_build, $(AUTOCONF_DIR)/netcreate_num_params.c, -DVMW_NETCREATE_KERNARG, )
diff --git a/vsock-only/linux/af_vsock.c b/vsock-only/linux/af_vsock.c
index bde1497..9f8f843 100644
--- a/vsock-only/linux/af_vsock.c
+++ b/vsock-only/linux/af_vsock.c
@@ -113,6 +113,9 @@
asmlinkage __attribute__((weak)) long
sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg);
#endif
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 99)
+#include <linux/sched/signal.h>
+#endif
#include "compat_cred.h"
#include "compat_module.h"
@@ -213,7 +216,11 @@
struct sockaddr *addr, int addrLen, int flags);
static int VSockVmciStreamConnect(struct socket *sock,
struct sockaddr *addr, int addrLen, int flags);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags);
+#else
+static int VSockVmciAccept(struct socket *sock, struct socket *newsock, int flags, bool kern);
+#endif
static int VSockVmciGetname(struct socket *sock,
struct sockaddr *addr, int *addrLen, int peer);
static unsigned int VSockVmciPoll(struct file *file,
@@ -233,13 +240,29 @@ static int VSockVmciStreamSetsockopt(struct socket *sock, int level, int optname
static int VSockVmciStreamGetsockopt(struct socket *sock, int level, int optname,
char __user *optval, int __user * optlen);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
static int VSockVmciDgramSendmsg(struct kiocb *kiocb,
+#else
+static int VSockVmciDgramSendmsg(
+#endif
struct socket *sock, struct msghdr *msg, size_t len);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
static int VSockVmciDgramRecvmsg(struct kiocb *kiocb, struct socket *sock,
+#else
+static int VSockVmciDgramRecvmsg(struct socket *sock,
+#endif
struct msghdr *msg, size_t len, int flags);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
static int VSockVmciStreamSendmsg(struct kiocb *kiocb,
+#else
+static int VSockVmciStreamSendmsg(
+#endif
struct socket *sock, struct msghdr *msg, size_t len);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
static int VSockVmciStreamRecvmsg(struct kiocb *kiocb, struct socket *sock,
+#else
+static int VSockVmciStreamRecvmsg(struct socket *sock,
+#endif
struct msghdr *msg, size_t len, int flags);
static int VSockVmciCreate(
@@ -2872,11 +2895,18 @@ __VSockVmciCreate(struct net *net, // IN: Network namespace
* From 2.6.9 to until 2.6.12 sk_alloc() used a cache in
* the protocol structure, but you still had to specify the size and cache
* yourself.
- * Most recently (in 2.6.24), sk_alloc() was changed to expect the
+ * In 2.6.24, sk_alloc() was changed to expect the
* network namespace, and the option to zero the sock was dropped.
*
+ * In 4.2, another parameter was added to sk_alloc() allowing you to specify
+ * whether or not the socket is to be a kernel socket. Previously, we passed
+ * 1 to this new parameter, but following Gentoo's lead
+ * ( https://github.com/gentoo/vmware/blob/master/app-emulation/vmware-modules/files/308-4.02-01-sk_alloc.patch#L19 )
+ * we have switched to passing 0.
*/
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 99)
+ sk = sk_alloc(net, vsockVmciFamilyOps.family, priority, &vsockVmciProto, 0);
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 12)
sk = sk_alloc(vsockVmciFamilyOps.family, priority,
vsockVmciProto.slab_obj_size, vsockVmciProto.slab);
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24)
@@ -3825,7 +3855,12 @@
static int
VSockVmciAccept(struct socket *sock, // IN
struct socket *newsock, // IN/OUT
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 11, 0)
int flags) // IN
+#else
+ int flags, // IN
+ bool kern)
+#endif
{
struct sock *listener;
int err;
@@ -4260,7 +4295,11 @@ VSockVmciShutdown(struct socket *sock, // IN
*/
static int
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED
+#else
+VSockVmciDgramSendmsg(
+#endif
struct socket *sock, // IN: socket to send on
struct msghdr *msg, // IN: message to send
size_t len) // IN: length of message
@@ -4352,7 +4391,11 @@ VSockVmciDgramSendmsg(struct kiocb *kiocb, // UNUSED
goto out;
}
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
memcpy_fromiovec(VMCI_DG_PAYLOAD(dg), msg->msg_iov, len);
+#else
+ memcpy_from_msg(VMCI_DG_PAYLOAD(dg), msg, len);
+#endif
dg->dst = VMCI_MAKE_HANDLE(remoteAddr->svm_cid, remoteAddr->svm_port);
dg->src = VMCI_MAKE_HANDLE(vsk->localAddr.svm_cid, vsk->localAddr.svm_port);
@@ -4590,7 +4633,11 @@ VSockVmciStreamGetsockopt(struct socket *sock, // IN
*/
static int
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED
+#else
+VSockVmciStreamSendmsg(
+#endif
struct socket *sock, // IN: socket to send on
struct msghdr *msg, // IN: message to send
size_t len) // IN: length of message
@@ -4712,7 +4759,11 @@ VSockVmciStreamSendmsg(struct kiocb *kiocb, // UNUSED
* able to send.
*/
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
written = vmci_qpair_enquev(vsk->qpair, msg->msg_iov,
+#else
+ written = vmci_qpair_enquev(vsk->qpair, &msg->msg_iter.iov,
+#endif
len - totalWritten, 0);
if (written < 0) {
err = -ENOMEM;
@@ -4759,7 +4810,11 @@ out:
*/
static int
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED
+#else
+VSockVmciDgramRecvmsg(
+#endif
struct socket *sock, // IN: socket to receive from
struct msghdr *msg, // IN/OUT: message to receive into
size_t len, // IN: length of receive buffer
@@ -4809,7 +4864,11 @@ VSockVmciDgramRecvmsg(struct kiocb *kiocb, // UNUSED
}
/* Place the datagram payload in the user's iovec. */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
err = skb_copy_datagram_iovec(skb, sizeof *dg, msg->msg_iov, payloadLen);
+#else
+ err = skb_copy_datagram_iter(skb, sizeof *dg, &msg->msg_iter, payloadLen);
+#endif
if (err) {
goto out;
}
@@ -4850,7 +4909,11 @@ out:
*/
static int
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 99)
VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED
+#else
+VSockVmciStreamRecvmsg(
+#endif
struct socket *sock, // IN: socket to receive from
struct msghdr *msg, // IN/OUT: message to receive into
size_t len, // IN: length of receive buffer
@@ -4955,9 +5018,17 @@ VSockVmciStreamRecvmsg(struct kiocb *kiocb, // UNUSED
}
if (flags & MSG_PEEK) {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
read = vmci_qpair_peekv(vsk->qpair, msg->msg_iov, len - copied, 0);
+#else
+ read = vmci_qpair_peekv(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
+#endif
} else {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
read = vmci_qpair_dequev(vsk->qpair, msg->msg_iov, len - copied, 0);
+#else
+ read = vmci_qpair_dequev(vsk->qpair, &msg->msg_iter.iov, len - copied, 0);
+#endif
}
if (read < 0) {
diff --git a/vsock-only/linux/notify.c b/vsock-only/linux/notify.c
index 5b1e134..82d8738 100644
--- a/vsock-only/linux/notify.c
+++ b/vsock-only/linux/notify.c
@@ -516,7 +516,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN
PKT_FIELD(vsk, sentWaitingRead) = FALSE;
#endif
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
sk->sk_data_ready(sk, 0);
+#else
+ sk->sk_data_ready(sk);
+#endif
}
diff --git a/vsock-only/linux/notifyQState.c b/vsock-only/linux/notifyQState.c
index 464454b..7933be7 100644
--- a/vsock-only/linux/notifyQState.c
+++ b/vsock-only/linux/notifyQState.c
@@ -164,7 +164,11 @@ VSockVmciHandleWrote(struct sock *sk, // IN
struct sockaddr_vm *dst, // IN: unused
struct sockaddr_vm *src) // IN: unused
{
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
sk->sk_data_ready(sk, 0);
+#else
+ sk->sk_data_ready(sk);
+#endif
}
@@ -566,7 +570,11 @@ VSockVmciNotifyPktRecvPostDequeue(struct sock *sk, // IN
}
/* See the comment in VSockVmciNotifyPktSendPostEnqueue */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 15, 0)
sk->sk_data_ready(sk, 0);
+#else
+ sk->sk_data_ready(sk);
+#endif
}
return err;

View File

@ -3,10 +3,7 @@
EAPI=6
inherit eutils flag-o-matic linux-info linux-mod user versionator udev
PV_MAJOR=$(get_major_version)
PV_MINOR=$(get_version_component_range 2-3)
inherit eapi7-ver eutils flag-o-matic linux-info linux-mod user udev
DESCRIPTION="VMware kernel modules"
HOMEPAGE="http://www.vmware.com/"
@ -20,7 +17,7 @@ IUSE=""
RDEPEND=""
DEPEND="
=app-emulation/vmware-workstation-14.${PV_MINOR}*
=app-emulation/vmware-workstation-15.$(ver_cut 2-3)*
"
S=${WORKDIR}
@ -62,14 +59,15 @@ src_unpack() {
src_prepare() {
# from https://github.com/mkubecek/vmware-host-modules/tree/workstation-14.1.1
kernel_is ge 4 9 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
kernel_is ge 4 10 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
kernel_is ge 4 12 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch"
kernel_is ge 4 13 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch"
epatch "${FILESDIR}/${PV_MAJOR}-00-vmmon-quick-workaround-for-objtool-warnings.patch"
kernel_is ge 4 16 0 && epatch "${FILESDIR}/${PV_MAJOR}-4.16-00-vmmon-use-standard-definition-of-MSR_K7_HWCR_SMMLOCK.patch"
epatch "${FILESDIR}/${PV_MAJOR}-01-vmmon-fix-always_inline-attribute-usage.patch"
epatch "${FILESDIR}/${PV_MAJOR}-02-vmmon-fix-indirect-call-with-retpoline-build.patch"
kernel_is ge 4 9 0 && epatch "${FILESDIR}/329-4.09-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
kernel_is ge 4 10 0 && epatch "${FILESDIR}/329-4.10-00-vmnet-use-standard-definition-of-PCI_VENDOR_ID_VMWAR.patch"
kernel_is ge 4 12 0 && epatch "${FILESDIR}/329-4.12-00-vmmon-use-standard-definition-of-MSR_MISC_FEATURES_E.patch"
kernel_is ge 4 13 0 && epatch "${FILESDIR}/329-4.13-00-vmmon-use-standard-definition-of-CR3_PCID_MASK-if-av.patch"
epatch "${FILESDIR}/329-00-vmmon-quick-workaround-for-objtool-warnings.patch"
kernel_is ge 4 16 0 && epatch "${FILESDIR}/329-4.16-00-vmmon-use-standard-definition-of-MSR_K7_HWCR_SMMLOCK.patch"
epatch "${FILESDIR}/329-01-vmmon-fix-always_inline-attribute-usage.patch"
epatch "${FILESDIR}/329-02-vmmon-fix-indirect-call-with-retpoline-build.patch"
epatch "${FILESDIR}/329-03-vmmon-check-presence-of-file_operations-poll.patch"
# decouple the kernel include dir from the running kernel version: https://github.com/stefantalpalaru/gentoo-overlay/issues/17
sed -i -e "s%HEADER_DIR = /lib/modules/\$(VM_UNAME)/build/include%HEADER_DIR = ${KERNEL_DIR}/include%" */Makefile || die "sed failed"
@ -108,11 +106,4 @@ src_install() {
pkg_postinst() {
linux-mod_pkg_postinst
if [ "${installed_modprobe_conf}"x == "x" ] ; then
if [ -f "${ROOT}/etc/modprobe.d/vmware.conf" ] ; then
ewarn "Please check the /etc/modprobe.d/vmware.conf file and"
ewarn "possible conflicts when using vmci and/or vsock modules built"
ewarn "out of kernel"
fi
fi
}

View File

@ -1,13 +1,16 @@
AUX configure-hostd.sh 372 BLAKE2B 0ed2d479a46d69ff8498bfac180f0440fb57fb173fc1a427115872a40a47559725623399652e9663fa8a4ca0d7e020d5445bafb6c37f45449dea341fc9f6cce6 SHA512 87c84f5e51e8b4585a9a55f13771cd8b84f2e4e0bb33679e3a1b23eb84a5be5d523a57b6c770095c1d21712a98e9317bbd215ab027843b0586b35ecf9fb85b49
AUX vmware-14.1.rc 2476 BLAKE2B dff25b43c5fa57186be2a5f0ca4606d26cd1c3f3dbeb91d855fc07a9fd576f446983c852c8e0b112c5616bb95dfddc7e2c738b4d0ca341c781d7addcb45068cd SHA512 9bae224387128b2cd221d509e2933042e3925fb041670907d8a47c70a488214206912fe25ab24c0bdeb31591149e62aba374d3fa63fdd08644e09667e195967f
AUX vmware-15.0.rc 2476 BLAKE2B dff25b43c5fa57186be2a5f0ca4606d26cd1c3f3dbeb91d855fc07a9fd576f446983c852c8e0b112c5616bb95dfddc7e2c738b4d0ca341c781d7addcb45068cd SHA512 9bae224387128b2cd221d509e2933042e3925fb041670907d8a47c70a488214206912fe25ab24c0bdeb31591149e62aba374d3fa63fdd08644e09667e195967f
AUX vmware-server-14.1.rc 1506 BLAKE2B 886ed1de7a99320611a28a43b48cf17715fcab8bf533a73c28a1aa2f8d150ee2b84e1e510e864b18347f3bd7e43faec3cfc90f09d5ac9c0afe821f67654a68c4 SHA512 548ff69f87bee2b6c82bd931d22dd560370c4a00641ae47d05af05bbc72cedc8fd25054abc405a590b72227b10c5997d79f16ded67f3e0cfac142eb248b47d44
DIST VMware-Workstation-Full-14.1.2-8497320.x86_64.bundle 461102809 BLAKE2B c0f3e8783e1c144aec5ac789d74f43099688034d7d23ab7159d118a60f3d8bc056641eddecf78a12d3275321be5f888668c0a9ba77f9c65d2c3f989dc16f6ffa SHA512 02432f8cd3000a334a04d20a4f9d0ad47801d3a582cc971f292d10be9346140c2b82bff7e4f32b6477882bc22f06d13046e1fe3b9236d00362f5f93d8a9f0f4d
AUX vmware-server-15.0.rc 1506 BLAKE2B 886ed1de7a99320611a28a43b48cf17715fcab8bf533a73c28a1aa2f8d150ee2b84e1e510e864b18347f3bd7e43faec3cfc90f09d5ac9c0afe821f67654a68c4 SHA512 548ff69f87bee2b6c82bd931d22dd560370c4a00641ae47d05af05bbc72cedc8fd25054abc405a590b72227b10c5997d79f16ded67f3e0cfac142eb248b47d44
DIST VMware-Workstation-Full-14.1.3-9474260.x86_64.bundle 461108241 BLAKE2B a52e336d0820b0bb3d5ffadaea5b626db3cadeedb07dc95a82b8f721bf416f52b7d6ce58e2c6a89176efcaa71d12e04e7b1f76244c44898c370b0347492bb6a3 SHA512 54ff9b9f9c134c17323539dbdd0b6fc2527274850cc8be3c1a432f3bdcd9f0d9a1663feff879ad10f39d99be6cb04f3cec15ac06ab63de56ba4564657a52e0bf
DIST com.vmware.fusion.tools.darwin-14.1.2.8497320.zip.tar 2805760 BLAKE2B 66cedcbca1240ae20e2aabd7399ccfcf2f2fd8bfdbbe0b0020015307c0f7e166b24f3721387a3d1e11a8e8adb741f04da12c329643dc3c511eefc78957f215d9 SHA512 0c21860c3536745d9e3d838c405669c44ff5b337d64f1ab2a96973aabc2e3b8d116f333bcfc04953ff7bbdff73b1e023f01de2ef35296ac1829efb85873757ae
DIST VMware-Workstation-Full-15.0.1-10737736.x86_64.bundle 495671642 BLAKE2B 5a509938870696966acf72f49c7c72425807bb9c25283ee99235b6fd8ddbe8f5f14bdd0ff2886b69ef9a2e4a0331e8f992b7e9d49f62e9026e122dffb9a10f1b SHA512 b20f35bf01f86fb85213da43675d26a7f5ba0d0a6ca6d1c43aba7f391c659689522801e2b5e065bf6f801fb8be81c1f59877fd189186917901605cedad9e0ffe
DIST com.vmware.fusion.tools.darwin-14.1.3.9474260.zip.tar 2805760 BLAKE2B 0a052e0090ba667cef0a8c1253d77e2bdaec45cd1f31012ad66cea26c15f0cc6326879b747a4df685056628dc93b1db99eb46b22faab2b4548dfc5d62b99fd0e SHA512 83465b4b4299905f7e7828bb7db6641eb86569b0f7dc61780fc993084ceec180c31838ea16f01cc8d6aec26cfca9879dd3ff3de2af09f309dc53b8c59a90ab28
DIST com.vmware.fusion.tools.darwinPre15-14.1.2.8497320.zip.tar 2478080 BLAKE2B b3d6582eb57525bc6844f8f363b0935c58b6f516fb8d87435538de4e5f8c0ac5e93cdf7a8f34c250c3a14852a9b9eaa592d7167d8b134c569151a713a009b693 SHA512 9e09e4d74707dbc55426929ad3fb762dfef602ab276c820e563e42a01c482d76cfbe78b39f725b421fcaabbac711366a0a51dfa6afc6d0ae5807246a1c9856d3
DIST com.vmware.fusion.tools.darwin-15.0.1.10737736.zip.tar 2795520 BLAKE2B a767ba710534eb46254e52d0226bf4794cb8ae1d2b25b0f6e070abb89e84c24ccf3310fa310765c56d8e82b2d157bcd4bbd3d0388f4658a0939f17a1f2c6910d SHA512 15af65df39ea066969847e43a145edb1b2bcf288cea485ead7aca86375d9ae08915151c7e0ad865efd39bc0826846c17fc7002b6d89fbb958ae67ff0083903ba
DIST com.vmware.fusion.tools.darwinPre15-14.1.3.9474260.zip.tar 2478080 BLAKE2B 40a8406406eb342096b6d34871cf08df20c540c3913afbaee0fcc5be857961e30df16a4a89ef780dfa9ce770e166232425bfac5fd8ce8eefab3c2c98f8fc4019 SHA512 1d6895956949532158b0c4aa3f714746d8573d3d95da2a8697bdf6f02f71b71df4defd572a2f714bf787e9e26c72ea26819a75b129839c2bb060937a4a9e5d73
DIST com.vmware.fusion.tools.darwinPre15-15.0.1.10737736.zip.tar 2478080 BLAKE2B 1b702b9514a649c702ade9eec1a33dfc2a9789fc6442778a6a96cceaa9cb502bd90f7915f33fb027f84209da3a6d0f106a936fbff8d785e3d7861a2c85e0c0d8 SHA512 48946da14ea5e64ed514fdfaef233294e647860e90bca114d402d71cc49d8b5b8ab9c743393656a8b1d67a2aa69878f5b441843eb2d90d79f03599c3156fd330
DIST unlocker-2.1.1_p1.zip 16201234 BLAKE2B 486597ba7ef12d2ec5b021ff9f5b56a9d1a58251e26f7bd9df4e84d34df9602ada3eaf69967ea645082e3919187f14801e7f506fa08b457d5763bdba9ec75493 SHA512 4ccea825339ae9303e8676dc773ca54cc929ab4970d8a2ac225f05bf18bad0e0945b7df3dd2b65c5596fd164642296da0f64774b27d7c066597f4d1d4db82bee
DIST unlocker-3.0.2.tar.gz 15984801 BLAKE2B e157ed24ad6cea1ab16dd5fc11935b7cdbb3fb0a1e0a9c059eb100f0c57508b749884111b93a9f272ad2c5a9ecd4fadb177ccac47d7688665c5fa8f100fcd2b1 SHA512 83a390562761791531574c05d2a5caacd936b45b32f26a1e5ba953ce32e27af29cb3ac0984c552c2eb9cfdf033d4b95fae1c33a70f2b169563d74d1ea188dacf
DIST vmware-systemd-gentoo-02.tgz 14064 BLAKE2B 24ac2c2f295130f4aadad867ec88d652bd292cc60e6b471bb2e01069fe01d84dac3d8b0ca7690ebf218d663adfe0c1dc889d3f4f53cf3178b68291461260748b SHA512 3a382bfd5f1eb2b218d8012588ea55c1f22786dba35a1fc0fdfdb4e40b05e0e735ed09c6961684f6442e863c3ed72024ce01f19113bbd9ca47c32e3f43c55f42
EBUILD vmware-workstation-14.1.2.8497320-r3.ebuild 21159 BLAKE2B 89f1dfe69f80dd5b3331a42f13759bf9c56b6ca5bb04ecf173a0bd352f527d4843e4573a7a46519ac4a81736d245c8d20b3189b8132d7ec85eee7d6f66fd6d88 SHA512 7cb301a6e9bccc907af690855ab0cf902650eed5f0cb4dc1e13e7a49e00f9389e44e881b2bb9d9c0515e90df4f73e53193574703d4fd1599037dfbf14488371b
EBUILD vmware-workstation-14.1.3.9474260.ebuild 21159 BLAKE2B a6ee13192a6a8bf724bb89db154e5e89a19b66e278cdf957341476c5dfa2f6785837e24d07fb63b14768e5a5fff13774aa6074c298ff9149c06e0d5219b47a1e SHA512 290889884c198e8f763f479007fc5517d6df65097a6c006ca18df56c71c95a311a30f3f3f05aaf225c86c863eae6575f66cb258bfc1140385dcef95c09b32ffc
EBUILD vmware-workstation-15.0.1.10737736.ebuild 21218 BLAKE2B 8cbfb26c5ac047a5636059b79de42df233971ff6a61f8e4c377b0807b72a8abda830b2f807108847eab3592dcf8b0ed2c171028db591fe9b5a428894937382e7 SHA512 cb61e5f30b7962c0a880c47436902c1bb013cd8c239f40260ab57615f03a135af18abab9f39b85d5e3516f01ea5ac4369e151f4a8f9b2928ba9808c47eda3a68

View File

@ -0,0 +1,102 @@
#!/sbin/openrc-run
# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
depend() {
need localmount
use net
}
start() {
ebegin Starting VMware USB Arbitrator
@@BINDIR@@/vmware-usbarbitrator
eend $?
ebegin Starting VMware services
# vmci might be:
# 1) built as external kernel module
# 2) built as internal kernel module (with name vmw_vmci)
# 3) embedded in the kernel
for mod in /lib/modules/$(uname -r)/misc/vmci.ko \
/lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ;
do
if [[ -f "${mod}" ]] ; then
modprobe -v $(basename "${mod}" .ko)
eend $?
break
fi
done
# vsock might be:
# 1) built as external kernel module
# 2) built as internal kernel module (with name vmw_vsock_vmci_transport)
# 3) embedded in the kernel
for mod in /lib/modules/$(uname -r)/misc/vsock.ko \
/lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ;
do
if [[ -f "${mod}" ]] ; then
modprobe -v $(basename "${mod}" .ko)
eend $?
break
fi
done
# vmblock
if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then
modprobe -v vmblock
eend $?
fi
# vmci or vsock were already loaded by the previous modprobe,
# no need to do it here
# quiet for vmci because it may not be there
modprobe -av vmmon vmnet
eend $?
@@BINDIR@@/vmware-networks --start
eend $?
}
stop() {
ebegin Stopping VMware USB Arbitrator
killall --wait vmware-usbarbitrator
eend $?
@@BINDIR@@/vmware-networks --stop
eend $?
ebegin Stopping VMware services
modprobe -rv vmmon vmnet
eend $?
# vsock might be:
# 1) built as external kernel module
# 2) built as internal kernel module (with name vmw_vsock_vmci_transport)
# 3) embedded in the kernel
for mod in /lib/modules/$(uname -r)/misc/vsock.ko \
/lib/modules/$(uname -r)/kernel/net/vmw_vsock/vmw_vsock_vmci_transport.ko ;
do
if [[ -f "${mod}" ]] ; then
modprobe -rv $(basename "${mod}" .ko)
eend $?
break
fi
done
# vmci might be:
# 1) built as external kernel module
# 2) built as internal kernel module (with name vmw_vmci)
# 3) embedded in the kernel
for mod in /lib/modules/$(uname -r)/misc/vmci.ko \
/lib/modules/$(uname -r)/kernel/drivers/misc/vmw_vmci/vmw_vmci.ko ;
do
if [[ -f "${mod}" ]] ; then
modprobe -rv $(basename "${mod}" .ko)
eend $?
break
fi
done
# vmblock
if [[ -f /lib/modules/$(uname -r)/misc/vmblock.ko ]]; then
modprobe -rv vmblock
eend $?
fi
}

View File

@ -0,0 +1,52 @@
#!/sbin/openrc-run
# Copyright 1999-2017 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
depend() {
need localmount vmware
use net
}
checkconfig() {
checkpath -d /var/run/vmware
# Check if certificates exist. If not, we need to generate them, ala sshd.
if [ ! -e @@ETCDIR@@/ssl/rui.key -o ! -e @@ETCDIR@@/ssl/rui.crt ]; then
checkpath -d -m 0600 @@ETCDIR@@/ssl
openssl req -x509 -days 365 -newkey rsa:2048 -keyout @@ETCDIR@@/ssl/rui.key -out @@ETCDIR@@/ssl/rui.crt -config @@ETCDIR@@/ssl/hostd.ssl.config
checkpath -f -m 0600 @@ETCDIR@@/ssl/rui.key @@ETCDIR@@/ssl/rui.crt
fi
}
start() {
checkconfig
ebegin Starting VMware Authentication Daemon
start-stop-daemon --start \
--exec @@PREFIX@@/sbin/vmware-authdlauncher
eend $?
ebegin Starting VMware Workstation Server
start-stop-daemon --start \
--pidfile /var/run/vmware/vmware-hostd.PID \
--exec @@BINDIR@@/vmware-hostd \
-- -a -d @@ETCDIR@@/hostd/config.xml
eend $?
}
stop() {
ebegin "Shutdown VMs in the AutoStart Sequence"
local HOHO_ADMIN="$(@@BINDIR@@/vmware-wssc-adminTool "@@ETCDIR@@/hostd/authorization.xml" 2>/dev/null)"
if [ "x" != "x${HOHO_ADMIN}" ]; then
@@BINDIR@@/vmware-vim-cmd -U "${HOHO_ADMIN}" hostsvc/autostartmanager/autostop
fi
eend $?
ebegin Stopping VMware Workstation Server
start-stop-daemon --stop \
--pidfile /var/run/vmware/vmware-hostd.PID
eend $?
ebegin Stopping VMware Authentication Daemon
killall --wait vmware-authdlauncher
eend $?
}

View File

@ -3,14 +3,14 @@
EAPI=6
inherit eutils versionator readme.gentoo-r1 gnome2-utils pam systemd xdg-utils
inherit eapi7-ver eutils readme.gentoo-r1 gnome2-utils pam systemd xdg-utils
MY_PN="VMware-Workstation-Full"
MY_PV=$(get_version_component_range 1-3)
PV_MODULES="329.$(get_version_component_range 2-3)"
PV_BUILD=$(get_version_component_range 4)
MY_PV=$(ver_cut 1-3)
PV_MODULES="330.$(ver_cut 2-3)"
PV_BUILD=$(ver_cut 4)
MY_P="${MY_PN}-${MY_PV}-${PV_BUILD}"
VMWARE_FUSION_VER="10.1.2_8502123"
VMWARE_FUSION_VER="11.0.1/10738065" # https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/
SYSTEMD_UNITS_TAG="gentoo-02"
DESCRIPTION="Emulate a complete PC without the performance overhead of most emulators"
@ -18,9 +18,9 @@ HOMEPAGE="http://www.vmware.com/products/workstation/"
SRC_URI="
https://download3.vmware.com/software/wkst/file/${MY_P}.x86_64.bundle
macos-guests? (
https://github.com/DrDonk/unlocker/archive/b036c40ab1922d9abf4f7d68e34f1eca3b4dc2ad.zip -> unlocker-2.1.1_p1.zip
vmware-tools-darwinPre15? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwinPre15.zip.tar -> com.vmware.fusion.tools.darwinPre15-${PV}.zip.tar )
vmware-tools-darwin? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER/_//}/packages/com.vmware.fusion.tools.darwin.zip.tar -> com.vmware.fusion.tools.darwin-${PV}.zip.tar )
https://github.com/DrDonk/unlocker/archive/3.0.2.tar.gz -> unlocker-3.0.2.tar.gz
vmware-tools-darwinPre15? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER}/packages/com.vmware.fusion.tools.darwinPre15.zip.tar -> com.vmware.fusion.tools.darwinPre15-${PV}.zip.tar )
vmware-tools-darwin? ( https://softwareupdate.vmware.com/cds/vmw-desktop/fusion/${VMWARE_FUSION_VER}/packages/com.vmware.fusion.tools.darwin.zip.tar -> com.vmware.fusion.tools.darwin-${PV}.zip.tar )
)
systemd? ( https://github.com/akhuettel/systemd-vmware/archive/${SYSTEMD_UNITS_TAG}.tar.gz -> vmware-systemd-${SYSTEMD_UNITS_TAG}.tgz )
"
@ -30,7 +30,7 @@ SLOT="0"
KEYWORDS="~amd64"
IUSE="bundled-libs cups doc macos-guests +modules ovftool server systemd vix"
DARWIN_GUESTS="darwin darwinPre15"
IUSE_VMWARE_GUESTS="${DARWIN_GUESTS} freebsd linux linuxPreGlibc25 netware solaris windows winPre2k winPreVista"
IUSE_VMWARE_GUESTS="${DARWIN_GUESTS} linux linuxPreGlibc25 netware solaris windows winPre2k winPreVista"
for guest in ${IUSE_VMWARE_GUESTS}; do
IUSE+=" vmware-tools-${guest}"
done
@ -193,7 +193,6 @@ RDEPEND="
cups? ( net-print/cups )
sys-apps/tcp-wrappers
sys-apps/util-linux
x11-libs/gksu
x11-libs/libXxf86vm
x11-libs/libdrm
x11-libs/libxshmfence
@ -211,7 +210,6 @@ PDEPEND="
DEPEND="
dev-lang/python:2.7
>=dev-util/patchelf-0.9
macos-guests? ( dev-python/six )
ovftool? ( app-admin/chrpath )
sys-libs/ncurses:5
sys-libs/readline:0
@ -236,9 +234,10 @@ src_unpack() {
fi
done
local bundle=${MY_P}.x86_64.bundle
chmod 755 ${bundle}
./${bundle} --console --extract extracted || die "unable to extract bundle"
local bundle="${MY_P}.x86_64.bundle"
chmod 755 "${bundle}"
# this needs a /tmp mounted without "noexec" because it extracts and executes scripts in there
./${bundle} --console --required --eulas-agreed --extract=extracted || die "unable to extract bundle"
if ! use ovftool; then
rm -r extracted/vmware-ovftool || die "unable to remove dir"
@ -323,7 +322,7 @@ To be able to run ${PN} your user must be in the vmware group.\n
}
src_install() {
local major_minor=$(get_version_component_range 1-2 "${PV}")
local major_minor=$(ver_cut 1-2 "${PV}")
local vmware_installer_version=$(cat "${S}/vmware-installer/manifest.xml" | grep -oPm1 "(?<=<version>)[^<]+")
# revdep-rebuild entry
@ -349,12 +348,12 @@ src_install() {
# workaround for hardcoded search paths needed during shared objects loading
if ! use bundled-libs ; then
dosym /usr/$(get_libdir)/libglib-2.0.so.0 \
dosym ../../../../../../usr/$(get_libdir)/libglib-2.0.so.0 \
"${VM_INSTALL_DIR}"/lib/vmware/lib/libglib-2.0.so.0/libglib-2.0.so.0
# Bug 432918
dosym /usr/$(get_libdir)/libcrypto.so.1.0.0 \
dosym ../../../../../../usr/$(get_libdir)/libcrypto.so.1.0.0 \
"${VM_INSTALL_DIR}"/lib/vmware/lib/libcrypto.so.1.0.2/libcrypto.so.1.0.2
dosym /usr/$(get_libdir)/libssl.so.1.0.0 \
dosym ../../../../../../usr/$(get_libdir)/libssl.so.1.0.0 \
"${VM_INSTALL_DIR}"/lib/vmware/lib/libssl.so.1.0.2/libssl.so.1.0.2
fi
@ -677,7 +676,7 @@ src_install() {
local version="$(grep -oPm1 '(?<=<version>)[^<]+' ${manifest})"
sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"$version\",\"${PV_BUILD}\",1,\"$guest\",\"$guest\",1);"
else
sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"${VMWARE_FUSION_VER%_*}\",\"${VMWARE_FUSION_VER#*_}\",1,\"$guest\",\"$guest\",1);"
sqlite3 "${dbfile}" "INSERT INTO components(name,version,buildNumber,component_core_id,longName,description,type) VALUES(\"vmware-tools-$guest\",\"${VMWARE_FUSION_VER%/*}\",\"${VMWARE_FUSION_VER#*/}\",1,\"$guest\",\"$guest\",1);"
fi
insinto "${VM_INSTALL_DIR}/lib/vmware/isoimages"
doins vmware-tools-${guest}/${guest}.iso