linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: George Zhang <georgezhang@vmware.com>
To: linux-kernel@vger.kernel.org, georgezhang@vmware.com,
	virtualization@lists.linux-foundation.org
Cc: pv-drivers@vmware.com, gregkh@linuxfoundation.org
Subject: [PATCH 00/12] VMCI for Linux upstreaming
Date: Wed, 21 Nov 2012 12:31:04 -0800	[thread overview]
Message-ID: <20121121202625.13252.86346.stgit@promb-2n-dhcp175.eng.vmware.com> (raw)


* * *
This series of VMCI linux upstreaming patches include latest udpate from
VMware.

Summary of changes:

	- Sparse clean.
	- Checkpatch clean with one exception, a "complex macro" in
	  which we can't add parentheses.
	- Remove all runtime assertions.
	- Fix device name, so that existing user clients work.
	- Fix VMCI handle lookup.


* * *

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 (vmw_vmci) and VMCI Sockets
(vmw_vsock) kernel modules for inclusion in the Linux kernel. The
purpose of this post is to acquire feedback on the vmw_vmci kernel
module. The vmw_vsock 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 vmw_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/.



---

George Zhang (12):
      VMCI: context implementation.
      VMCI: datagram implementation.
      VMCI: doorbell implementation.
      VMCI: device driver implementaton.
      VMCI: event handling implementation.
      VMCI: handle array implementation.
      VMCI: queue pairs implementation.
      VMCI: resource object implementation.
      VMCI: routing implementation.
      VMCI: guest side driver implementation.
      VMCI: host side driver implementation.
      VMCI: Some header and config files.


 drivers/misc/Kconfig                      |    1 
 drivers/misc/Makefile                     |    2 
 drivers/misc/vmw_vmci/Kconfig             |   16 
 drivers/misc/vmw_vmci/Makefile            |    4 
 drivers/misc/vmw_vmci/vmci_common_int.h   |   32 
 drivers/misc/vmw_vmci/vmci_context.c      | 1223 ++++++++++
 drivers/misc/vmw_vmci/vmci_context.h      |  183 ++
 drivers/misc/vmw_vmci/vmci_datagram.c     |  501 ++++
 drivers/misc/vmw_vmci/vmci_datagram.h     |   52 
 drivers/misc/vmw_vmci/vmci_doorbell.c     |  605 +++++
 drivers/misc/vmw_vmci/vmci_doorbell.h     |   51 
 drivers/misc/vmw_vmci/vmci_driver.c       |  117 +
 drivers/misc/vmw_vmci/vmci_driver.h       |   50 
 drivers/misc/vmw_vmci/vmci_event.c        |  224 ++
 drivers/misc/vmw_vmci/vmci_event.h        |   25 
 drivers/misc/vmw_vmci/vmci_guest.c        |  757 ++++++
 drivers/misc/vmw_vmci/vmci_handle_array.c |  142 +
 drivers/misc/vmw_vmci/vmci_handle_array.h |   52 
 drivers/misc/vmw_vmci/vmci_host.c         | 1036 +++++++++
 drivers/misc/vmw_vmci/vmci_queue_pair.c   | 3439 +++++++++++++++++++++++++++++
 drivers/misc/vmw_vmci/vmci_queue_pair.h   |  191 ++
 drivers/misc/vmw_vmci/vmci_resource.c     |  232 ++
 drivers/misc/vmw_vmci/vmci_resource.h     |   59 
 drivers/misc/vmw_vmci/vmci_route.c        |  227 ++
 drivers/misc/vmw_vmci/vmci_route.h        |   30 
 include/linux/vmw_vmci_api.h              |   82 +
 include/linux/vmw_vmci_defs.h             |  973 ++++++++
 27 files changed, 10306 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/vmci_common_int.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_context.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_context.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_datagram.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_datagram.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_doorbell.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_doorbell.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_driver.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_driver.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_event.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_event.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_guest.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_handle_array.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_handle_array.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_host.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_queue_pair.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_queue_pair.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_resource.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_resource.h
 create mode 100644 drivers/misc/vmw_vmci/vmci_route.c
 create mode 100644 drivers/misc/vmw_vmci/vmci_route.h
 create mode 100644 include/linux/vmw_vmci_api.h
 create mode 100644 include/linux/vmw_vmci_defs.h

-- 
Signature

             reply	other threads:[~2012-11-21 20:31 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-21 20:31 George Zhang [this message]
2012-11-21 20:31 ` [PATCH 01/12] VMCI: context implementation George Zhang
2012-11-21 21:04   ` Joe Perches
2012-11-21 21:10     ` [Pv-drivers] " Andy King
2012-11-21 21:29     ` Dmitry Torokhov
2012-11-21 21:35       ` Joe Perches
2012-11-21 20:32 ` [PATCH 02/12] VMCI: datagram implementation George Zhang
2012-11-21 20:32 ` [PATCH 03/12] VMCI: doorbell implementation George Zhang
2012-11-21 20:33 ` [PATCH 04/12] VMCI: device driver implementaton George Zhang
2012-11-21 20:33 ` [PATCH 05/12] VMCI: event handling implementation George Zhang
2012-11-21 20:34 ` [PATCH 06/12] VMCI: handle array implementation George Zhang
2012-11-21 20:34 ` [PATCH 07/12] VMCI: queue pairs implementation George Zhang
2012-11-21 20:34 ` [PATCH 08/12] VMCI: resource object implementation George Zhang
2012-11-21 20:35 ` [PATCH 09/12] VMCI: routing implementation George Zhang
2012-11-21 20:35 ` [PATCH 10/12] VMCI: guest side driver implementation George Zhang
2012-11-21 20:35 ` [PATCH 11/12] VMCI: host " George Zhang
2012-11-21 20:36 ` [PATCH 12/12] VMCI: Some header and config files George Zhang
2012-11-26 22:37 ` [PATCH 00/12] VMCI for Linux upstreaming Greg KH
2012-11-26 23:01   ` [Pv-drivers] " Dmitry Torokhov
2012-11-26 23:23     ` Greg KH
2012-11-26 23:36       ` Dmitry Torokhov
2012-11-26 23:44         ` Greg KH
2012-11-26 23:52           ` Dmitry Torokhov
2012-11-26 23:56             ` George Zhang
2012-11-27  0:03             ` Greg KH
2012-11-27  0:27               ` Woody Suwalski
2012-11-27  0:47                 ` Dmitry Torokhov
  -- strict thread matches above, loose matches on Subject: below --
2013-01-08 23:52 George Zhang
2013-01-09  0:20 ` Greg KH
2012-11-07 18:40 George Zhang
2012-11-01 17:28 George Zhang
2012-10-30  1:03 George Zhang
2012-10-30  2:19 ` Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121121202625.13252.86346.stgit@promb-2n-dhcp175.eng.vmware.com \
    --to=georgezhang@vmware.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pv-drivers@vmware.com \
    --cc=virtualization@lists.linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).