public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/14] RFC: VMCI for Linux
@ 2012-02-15  1:05 Andrew Stiegmann (stieg)
  2012-02-15  1:05 ` [PATCH 01/14] Add vmciContext.* Andrew Stiegmann (stieg)
                   ` (14 more replies)
  0 siblings, 15 replies; 17+ messages in thread
From: Andrew Stiegmann (stieg) @ 2012-02-15  1:05 UTC (permalink / raw)
  To: linux-kernel; +Cc: vm-crosstalk, dtor, cschamp, Andrew Stiegmann (stieg)

In an effort to improve the out-of-the-box experience with Linux
kernels for VMware users, VMware is working on readying the Virtual
Machine Communication Interface (VMCI) and VMCI Sockets (vsock) kernel
modules for inclusion in the Linux kernel. The purpose of this initial
post is to both show how much we love Linux on Valentine's day and 
request early feedback on the VMCI kernel module with the
intent of addressing any major issues early in the process. The VMCI
Socket kernel module will be presented in a later post.

VMCI allows virtual machines to communicate with host kernel modules
and the VMware hypervisors. User level applications both in a virtual
machine and on the host can use VMCI through VMCI Sockets, a socket
address family designed to be compatible with UDP and TCP at the
interface level. Today, VMCI and VMCI Sockets are used by the VMware
shared folders (HGFS) and various VMware Tools components inside the
guest for zero-config, network-less access to VMware host services. In
addition to this, VMware's users are using VMCI Sockets for various
applications, where network access of the virtual machine is
restricted or non-existent. Examples of this are VMs communicating
with device proxies for proprietary hardware running as host
applications and automated testing of applications running within
virtual machines.

In a virtual machine, VMCI is exposed as a regular PCI device. The
primary communication mechanisms supported are a point-to-point
bidirectional transport based on a pair of memory-mapped queues, and
asynchronous notifications in the form of datagrams and
doorbells. These features are available to kernel level components
such as HGFS and VMCI Sockets through the VMCI kernel API. In addition
to this, the VMCI kernel API provides support for receiving events
related to the state of the VMCI communication channels, and the
virtual machine itself.

Outside the virtual machine, the host side support of the VMCI kernel
module makes the same VMCI kernel API available to VMCI endpoints on
the host. In addition to this, the host side manages each VMCI device
in a virtual machine through a context object. This context object
serves to identify the virtual machine for communication, and to track
the resource consumption of the given VMCI device. Both operations
related to communication between the virtual machine and the host
kernel, and those related to the management of the VMCI device state
in the host kernel, are invoked by the user level component of the
hypervisor through a set of ioctls on the VMCI device node.  To
provide seamless support for nested virtualization, where a virtual
machine may use both a VMCI PCI device to talk to its hypervisor, and
the VMCI host side support to run nested virtual machines, the VMCI
host and virtual machine support are combined in a single kernel
module.

For additional information about the use of VMCI and in particular
VMCI Sockets, please refer to the VMCI Socket Programming Guide
available at https://www.vmware.com/support/developer/vmci-sdk/.

Andrew Stiegmann (stieg) (14):
  Add vmciContext.*
  Add vmciDatagram.*
  Add vmciDoorbell.*
  Add vmciDriver.*
  Add vmciEvent.*
  Add vmciHashtable.*
  Add vmciQueuePair.*
  Add vmciResource.*
  Add vmciRoute.*
  Add accessor methods for Queue Pairs in VMCI
  Add VMCI kernel API defs and the internal header file
  Add misc header files used by VMCI
  Add main driver and kernel interface file
  Add Kconfig and Makefiles for VMCI

 drivers/misc/Kconfig                        |    1 +
 drivers/misc/Makefile                       |    1 +
 drivers/misc/vmw_vmci/Kconfig               |   16 +
 drivers/misc/vmw_vmci/Makefile              |   36 +
 drivers/misc/vmw_vmci/driver.c              | 2352 +++++++++++++++++++++++
 drivers/misc/vmw_vmci/vmciCommonInt.h       |  105 ++
 drivers/misc/vmw_vmci/vmciContext.c         | 1763 +++++++++++++++++
 drivers/misc/vmw_vmci/vmciContext.h         |   77 +
 drivers/misc/vmw_vmci/vmciDatagram.c        |  842 +++++++++
 drivers/misc/vmw_vmci/vmciDatagram.h        |   42 +
 drivers/misc/vmw_vmci/vmciDoorbell.c        | 1072 +++++++++++
 drivers/misc/vmw_vmci/vmciDoorbell.h        |   37 +
 drivers/misc/vmw_vmci/vmciDriver.c          |  663 +++++++
 drivers/misc/vmw_vmci/vmciDriver.h          |   57 +
 drivers/misc/vmw_vmci/vmciEvent.c           |  648 +++++++
 drivers/misc/vmw_vmci/vmciEvent.h           |   32 +
 drivers/misc/vmw_vmci/vmciHashtable.c       |  519 +++++
 drivers/misc/vmw_vmci/vmciHashtable.h       |   58 +
 drivers/misc/vmw_vmci/vmciKernelAPI.h       |   28 +
 drivers/misc/vmw_vmci/vmciKernelAPI1.h      |  148 ++
 drivers/misc/vmw_vmci/vmciKernelAPI2.h      |   48 +
 drivers/misc/vmw_vmci/vmciKernelIf.c        | 1351 ++++++++++++++
 drivers/misc/vmw_vmci/vmciQPair.c           | 1164 ++++++++++++
 drivers/misc/vmw_vmci/vmciQueue.h           |  108 ++
 drivers/misc/vmw_vmci/vmciQueuePair.c       | 2696 +++++++++++++++++++++++++++
 drivers/misc/vmw_vmci/vmciQueuePair.h       |   95 +
 drivers/misc/vmw_vmci/vmciResource.c        |  383 ++++
 drivers/misc/vmw_vmci/vmciResource.h        |   68 +
 drivers/misc/vmw_vmci/vmciRoute.c           |  249 +++
 drivers/misc/vmw_vmci/vmciRoute.h           |   36 +
 drivers/misc/vmw_vmci/vmci_call_defs.h      |  264 +++
 drivers/misc/vmw_vmci/vmci_defs.h           |  772 ++++++++
 drivers/misc/vmw_vmci/vmci_handle_array.h   |  339 ++++
 drivers/misc/vmw_vmci/vmci_infrastructure.h |  119 ++
 drivers/misc/vmw_vmci/vmci_iocontrols.h     |  411 ++++
 drivers/misc/vmw_vmci/vmci_kernel_if.h      |  111 ++
 36 files changed, 16711 insertions(+), 0 deletions(-)
 create mode 100644 drivers/misc/vmw_vmci/Kconfig
 create mode 100644 drivers/misc/vmw_vmci/Makefile
 create mode 100644 drivers/misc/vmw_vmci/driver.c
 create mode 100644 drivers/misc/vmw_vmci/vmciCommonInt.h
 create mode 100644 drivers/misc/vmw_vmci/vmciContext.c
 create mode 100644 drivers/misc/vmw_vmci/vmciContext.h
 create mode 100644 drivers/misc/vmw_vmci/vmciDatagram.c
 create mode 100644 drivers/misc/vmw_vmci/vmciDatagram.h
 create mode 100644 drivers/misc/vmw_vmci/vmciDoorbell.c
 create mode 100644 drivers/misc/vmw_vmci/vmciDoorbell.h
 create mode 100644 drivers/misc/vmw_vmci/vmciDriver.c
 create mode 100644 drivers/misc/vmw_vmci/vmciDriver.h
 create mode 100644 drivers/misc/vmw_vmci/vmciEvent.c
 create mode 100644 drivers/misc/vmw_vmci/vmciEvent.h
 create mode 100644 drivers/misc/vmw_vmci/vmciHashtable.c
 create mode 100644 drivers/misc/vmw_vmci/vmciHashtable.h
 create mode 100644 drivers/misc/vmw_vmci/vmciKernelAPI.h
 create mode 100644 drivers/misc/vmw_vmci/vmciKernelAPI1.h
 create mode 100644 drivers/misc/vmw_vmci/vmciKernelAPI2.h
 create mode 100644 drivers/misc/vmw_vmci/vmciKernelIf.c
 create mode 100644 drivers/misc/vmw_vmci/vmciQPair.c
 create mode 100644 drivers/misc/vmw_vmci/vmciQueue.h
 create mode 100644 drivers/misc/vmw_vmci/vmciQueuePair.c
 create mode 100644 drivers/misc/vmw_vmci/vmciQueuePair.h
 create mode 100644 drivers/misc/vmw_vmci/vmciResource.c
 create mode 100644 drivers/misc/vmw_vmci/vmciResource.h
 create mode 100644 drivers/misc/vmw_vmci/vmciRoute.c
 create mode 100644 drivers/misc/vmw_vmci/vmciRoute.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_call_defs.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_defs.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_handle_array.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_infrastructure.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_iocontrols.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_kernel_if.h

^ permalink raw reply	[flat|nested] 17+ messages in thread
* Re: [PATCH 00/14] RFC: VMCI for Linux
@ 2012-02-24  5:24 Jidong Xiao
  0 siblings, 0 replies; 17+ messages in thread
From: Jidong Xiao @ 2012-02-24  5:24 UTC (permalink / raw)
  To: Andrew Stiegmann (stieg)
  Cc: Kernel development list, vm-crosstalk, dtor, cschamp

On Tue, 14 Feb 2012 17:05:41, "Andrew Stiegmann (stieg)"
<astiegmann@vmware.com> wrote:
> In an effort to improve the out-of-the-box experience with Linux
> kernels for VMware users, VMware is working on readying the Virtual
> Machine Communication Interface (VMCI) and VMCI Sockets (vsock) kernel
> modules for inclusion in the Linux kernel. The purpose of this initial
> post is to both show how much we love Linux on Valentine's day and
> request early feedback on the VMCI kernel module with the
> intent of addressing any major issues early in the process. The VMCI
> Socket kernel module will be presented in a later post.
> VMCI allows virtual machines to communicate with host kernel modules
> and the VMware hypervisors. User level applications both in a virtual
> machine and on the host can use VMCI through VMCI Sockets, a socket
> address family designed to be compatible with UDP and TCP at the
> interface level. Today, VMCI and VMCI Sockets are used by the VMware
> shared folders (HGFS) and various VMware Tools components inside the
> guest for zero-config, network-less access to VMware host services. In
> addition to this, VMware's users are using VMCI Sockets for various
> applications, where network access of the virtual machine is
> restricted or non-existent. Examples of this are VMs communicating
> with device proxies for proprietary hardware running as host
> applications and automated testing of applications running within
> virtual machines.
> In a virtual machine, VMCI is exposed as a regular PCI device. The
> primary communication mechanisms supported are a point-to-point
> bidirectional transport based on a pair of memory-mapped queues, and
> asynchronous notifications in the form of datagrams and
> doorbells. These features are available to kernel level components
> such as HGFS and VMCI Sockets through the VMCI kernel API. In addition
> to this, the VMCI kernel API provides support for receiving events
> related to the state of the VMCI communication channels, and the
> virtual machine itself.
> Outside the virtual machine, the host side support of the VMCI kernel
> module makes the same VMCI kernel API available to VMCI endpoints on
> the host. In addition to this, the host side manages each VMCI device
> in a virtual machine through a context object. This context object
> serves to identify the virtual machine for communication, and to track
> the resource consumption of the given VMCI device. Both operations
> related to communication between the virtual machine and the host
> kernel, and those related to the management of the VMCI device state
> in the host kernel, are invoked by the user level component of the
> hypervisor through a set of ioctls on the VMCI device node.  To
> provide seamless support for nested virtualization, where a virtual
> machine may use both a VMCI PCI device to talk to its hypervisor, and
> the VMCI host side support to run nested virtual machines, the VMCI
> host and virtual machine support are combined in a single kernel
> module.
> For additional information about the use of VMCI and in particular
> VMCI Sockets, please refer to the VMCI Socket Programming Guide
> available at https://www.vmware.com/support/developer/vmci-sdk/.

Hi, Andrew,

Are your patches used for communication between a Linux guest OS and
VMware host? What if I want a Guest OS running on top of Linux/KVM to
communicate with the Linux/KVM hypervisor? Or two guest OSes running
on top of Linux/KVM.

Regards
Jidong

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-02-24  5:24 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-15  1:05 [PATCH 00/14] RFC: VMCI for Linux Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 01/14] Add vmciContext.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 02/14] Add vmciDatagram.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 03/14] Add vmciDoorbell.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 04/14] Add vmciDriver.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 05/14] Add vmciEvent.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 06/14] Add vmciHashtable.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 07/14] Add vmciQueuePair.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 08/14] Add vmciResource.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 09/14] Add vmciRoute.* Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 10/14] Add accessor methods for Queue Pairs in VMCI Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 11/14] Add VMCI kernel API defs and the internal header file Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 12/14] Add misc header files used by VMCI Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 13/14] Add main driver and kernel interface file Andrew Stiegmann (stieg)
2012-02-15  1:05 ` [PATCH 14/14] Add Kconfig and Makefiles for VMCI Andrew Stiegmann (stieg)
2012-02-17 19:28 ` [PATCH 00/14] RFC: VMCI for Linux Pavel Machek
  -- strict thread matches above, loose matches on Subject: below --
2012-02-24  5:24 Jidong Xiao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox