From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757107Ab3AHXwg (ORCPT ); Tue, 8 Jan 2013 18:52:36 -0500 Received: from smtp-outbound-2.vmware.com ([208.91.2.13]:47681 "EHLO smtp-outbound-2.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756744Ab3AHXwd (ORCPT ); Tue, 8 Jan 2013 18:52:33 -0500 Subject: [PATCH 00/12] VMCI for Linux upstreaming To: linux-kernel@vger.kernel.org, georgezhang@vmware.com, virtualization@lists.linux-foundation.org From: George Zhang Cc: pv-drivers@vmware.com, gregkh@linuxfoundation.org Date: Tue, 08 Jan 2013 15:52:33 -0800 Message-ID: <20130108234751.2698.66606.stgit@promb-2n-dhcp175.eng.vmware.com> User-Agent: StGit/0.15 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * * * This series of VMCI linux upstreaming patches include latest udpate from VMware to address Greg's and all other's code review comments. Summary of changes: - Rebase our linux kernel tree from v3.5 to v3.7. - Fix all checkpatch warnings and errors. Fix some checkpatch with -strict errors. This addresses Greg's comment: On 15 Nov 2012 15:47:14 -0800 Re: [PATCH 07/12] VMCI: queue pairs implementation. chckpatch sanity checking. - Fix vmci_get_contextid naming error. - Fix host side queue pair creation bug. - Fix resource hash table lookup issue. - Remove __devinit and __devexit device driver annotations. - Remove ASSERT/BUG_ON for vmci and vsock source codes. This addresses Greg's comment on On 15 Nov 2012 15:47:14 -0800 Re: [PATCH 02/12] VMCI: datagram implementation. Remove all BUG_ON(), asserts. - use standard Linux kernel ioctl interface. This addresses Greg's comment on On Thu, 15 Nov 2012 16:01:18 -0800 Re: [PATCH 12/12] VMCI: Some header and config files. use linux in-kernel IO macros for VMCI. - Add vmci ioctl code entry in ioctl-number.txt. - Remove printk from header file. Align properly for macro PCI_VENDOR_ID_VMWARE. Remove #define for VMCI_DRIVER_VERSION_STRING. Remove #define for MODULE_NAME. Remove #define for pr_fmt and #define ASSERT(x). Remove inline function VMCI_MAKE_HANDLE and vmci_make_handle which return a structure on stack. use macro instead and use C99 initialization. Remove #define for VMCI_HANDLE_TO_CONTEXT_ID and VMCI_HANDLE_TO_RESOURCE_ID Change macro to inline function for VMCI_HANDLE_EQUAL. Remove u32 typedefs for vmci_id, vmci_event, vmci_privilege_flags. Use C99 style initialization for struct VMCI_INVALID_HANDLE. Use inline function instead of macro for VMCI_HANDLE_INVALID. No change for vmw_vmci_api.h location (under include/linux/ directory). No change for macros VMCI_CONTEXT_IS_VM, VMCI_HOST_CONTEXT_ID, VMCI_RESERVED_CID_LIMIT, VMCI_HYPERVISOR_CONTEXT_ID and VMCI_WELL_KNOWN_CONTEXT_ID. Still in header file include/linux/vmw_vmci_defs.h This addresses Greg's several comments on Thu, 15 Nov 2012 16:01:18 -0800 Re: [PATCH 12/12] VMCI: Some header and config files. * * * 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 doorbell code allows for notifcations between 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_context.c | 1214 ++++++++++ drivers/misc/vmw_vmci/vmci_context.h | 182 ++ drivers/misc/vmw_vmci/vmci_datagram.c | 500 ++++ drivers/misc/vmw_vmci/vmci_datagram.h | 52 drivers/misc/vmw_vmci/vmci_doorbell.c | 604 +++++ 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 | 759 ++++++ 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 | 1042 +++++++++ drivers/misc/vmw_vmci/vmci_queue_pair.c | 3420 +++++++++++++++++++++++++++++ drivers/misc/vmw_vmci/vmci_queue_pair.h | 191 ++ drivers/misc/vmw_vmci/vmci_resource.c | 229 ++ drivers/misc/vmw_vmci/vmci_resource.h | 59 + drivers/misc/vmw_vmci/vmci_route.c | 226 ++ drivers/misc/vmw_vmci/vmci_route.h | 30 include/linux/vmw_vmci_api.h | 82 + include/linux/vmw_vmci_defs.h | 880 +++++++ 26 files changed, 10154 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_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