commit:     c825cf260f3730b510e135657a6d355800801f0e
Author:     Fabio Rossi <rossi.f <AT> inwind <DOT> it>
AuthorDate: Sat May 20 21:18:13 2017 +0000
Commit:     Fabio Rossi <rossi.f <AT> inwind <DOT> net>
CommitDate: Sat May 20 21:18:13 2017 +0000
URL:        https://gitweb.gentoo.org/proj/vmware.git/commit/?id=c825cf26

app-emulation/vmware-{player,workstation}: fix init.d when vsock/vmci are built 
into kernel

The old init scripts fail when the vsock/vmci are built into kernel
not as modules. This should close the bug #510156. The systemd services
fail but don't block the initialization so I haven't touched them.

 app-emulation/vmware-player/files/vmware-11.2.rc   | 66 ++++++++++++++++++---
 app-emulation/vmware-player/files/vmware-12.1.rc   | 68 ++++++++++++++++++----
 app-emulation/vmware-player/files/vmware-12.5.rc   | 68 ++++++++++++++++++----
 .../vmware-workstation/files/vmware-11.0.rc        | 66 ++++++++++++++++++---
 .../vmware-workstation/files/vmware-11.1.rc        | 66 ++++++++++++++++++---
 .../vmware-workstation/files/vmware-11.2.rc        | 66 ++++++++++++++++++---
 .../vmware-workstation/files/vmware-12.1.rc        | 66 ++++++++++++++++++---
 .../vmware-workstation/files/vmware-12.5.rc        | 66 ++++++++++++++++++---
 .../vmware-workstation/files/vmware-9.0.rc         | 67 +++++++++++++++++++--
 9 files changed, 519 insertions(+), 80 deletions(-)

diff --git a/app-emulation/vmware-player/files/vmware-11.2.rc 
b/app-emulation/vmware-player/files/vmware-11.2.rc
index 3437207..38524b2 100644
--- a/app-emulation/vmware-player/files/vmware-11.2.rc
+++ b/app-emulation/vmware-player/files/vmware-11.2.rc
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-player/files/vmware-12.1.rc 
b/app-emulation/vmware-player/files/vmware-12.1.rc
index 14ff124..38524b2 100644
--- a/app-emulation/vmware-player/files/vmware-12.1.rc
+++ b/app-emulation/vmware-player/files/vmware-12.1.rc
@@ -1,7 +1,7 @@
 #!/sbin/openrc-run
 # Copyright 1999-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: $
+# $Id$
 
 depend() {
        need localmount
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-player/files/vmware-12.5.rc 
b/app-emulation/vmware-player/files/vmware-12.5.rc
index 14ff124..38524b2 100644
--- a/app-emulation/vmware-player/files/vmware-12.5.rc
+++ b/app-emulation/vmware-player/files/vmware-12.5.rc
@@ -1,7 +1,7 @@
 #!/sbin/openrc-run
 # Copyright 1999-2014 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: $
+# $Id$
 
 depend() {
        need localmount
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-workstation/files/vmware-11.0.rc 
b/app-emulation/vmware-workstation/files/vmware-11.0.rc
index 3437207..38524b2 100644
--- a/app-emulation/vmware-workstation/files/vmware-11.0.rc
+++ b/app-emulation/vmware-workstation/files/vmware-11.0.rc
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-workstation/files/vmware-11.1.rc 
b/app-emulation/vmware-workstation/files/vmware-11.1.rc
index 3437207..38524b2 100644
--- a/app-emulation/vmware-workstation/files/vmware-11.1.rc
+++ b/app-emulation/vmware-workstation/files/vmware-11.1.rc
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-workstation/files/vmware-11.2.rc 
b/app-emulation/vmware-workstation/files/vmware-11.2.rc
index 3437207..38524b2 100644
--- a/app-emulation/vmware-workstation/files/vmware-11.2.rc
+++ b/app-emulation/vmware-workstation/files/vmware-11.2.rc
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-workstation/files/vmware-12.1.rc 
b/app-emulation/vmware-workstation/files/vmware-12.1.rc
index 3437207..38524b2 100644
--- a/app-emulation/vmware-workstation/files/vmware-12.1.rc
+++ b/app-emulation/vmware-workstation/files/vmware-12.1.rc
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-workstation/files/vmware-12.5.rc 
b/app-emulation/vmware-workstation/files/vmware-12.5.rc
index 3437207..38524b2 100644
--- a/app-emulation/vmware-workstation/files/vmware-12.5.rc
+++ b/app-emulation/vmware-workstation/files/vmware-12.5.rc
@@ -15,13 +15,37 @@ start() {
        eend $?
        ebegin Starting VMware services
        
-       # quiet for vmci because it may not be there
-       modprobe -vq vmci || modprobe -v vmw_vmci
-       eend $?
+       # 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
        
-       # vmci or vmw_vmci was loaded by the previous modprobe 
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
        # no need to do it here
-       modprobe -av vmmon vsock vmblock vmnet 
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -35,10 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
+       modprobe -rv vmmon vmblock vmnet
        eend $?
        
-       # quiet for vmci because it may not be there
-       modprobe -rvq vmci || modprobe -rv vmw_vmci
-       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
 }

diff --git a/app-emulation/vmware-workstation/files/vmware-9.0.rc 
b/app-emulation/vmware-workstation/files/vmware-9.0.rc
index b568831..38524b2 100644
--- a/app-emulation/vmware-workstation/files/vmware-9.0.rc
+++ b/app-emulation/vmware-workstation/files/vmware-9.0.rc
@@ -14,9 +14,38 @@ start() {
        @@BINDIR@@/vmware-usbarbitrator 
        eend $?
        ebegin Starting VMware services
-       modprobe -v vmci || modprobe -v vmw_vmci
-       eend $?
-       modprobe -av vmmon vmci vsock vmblock vmnet 
+       
+       # 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
+
+       # vmci or vsock were already loaded by the previous modprobe,
+       # no need to do it here
+       modprobe -av vmmon vmblock vmnet 
        eend $?
        @@BINDIR@@/vmware-networks --start
        eend $?
@@ -30,8 +59,34 @@ stop() {
        @@BINDIR@@/vmware-networks --stop 
        eend $?
        ebegin Stopping VMware services
-       modprobe -rv vsock vmmon vmblock vmnet
-       eend $?
-       modprobe -rv vmci || modprobe -rv vmw_vmci
+       modprobe -rv vmmon vmblock 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
 }

Reply via email to