Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752037AbdFOTJm (ORCPT ); Thu, 15 Jun 2017 15:09:42 -0400 Received: from mail.kernel.org ([198.145.29.99]:52360 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751869AbdFOTJk (ORCPT ); Thu, 15 Jun 2017 15:09:40 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4C999214D7 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=sstabellini@kernel.org Date: Thu, 15 Jun 2017 12:09:38 -0700 (PDT) From: Stefano Stabellini X-X-Sender: sstabellini@sstabellini-ThinkPad-X260 To: xen-devel@lists.xen.org cc: linux-kernel@vger.kernel.org, sstabellini@kernel.org, jgross@suse.com, boris.ostrovsky@oracle.com Subject: [PATCH v4 00/18] introduce the Xen PV Calls backend Message-ID: User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3662 Lines: 96 Hi all, this series introduces the backend for the newly introduced PV Calls procotol. PV Calls is a paravirtualized protocol that allows the implementation of a set of POSIX functions in a different domain. The PV Calls frontend sends POSIX function calls to the backend, which implements them and returns a value to the frontend and acts on the function call. For more information about PV Calls, please read: https://xenbits.xen.org/docs/unstable/misc/pvcalls.html I tried to split the source code into small pieces to make it easier to read and understand. Please review! Changes in v4: - add reviewed-bys - fix return values of many functions - remove pointless initializers - print a warning if ring_order > MAX_RING_ORDER - remove map->ioworker.cpu - use queue_work instead of queue_work_on - add sock_release() on error paths where appropriate - add a comment in __pvcalls_back_accept about racing with pvcalls_back_accept and atomicity of reqcopy - remove unneded (void*) casts - remove unneded {} - fix backend_disconnect if !mappass - remove pointless continue in backend_disconnect - remove pointless memset of &pvcalls_back_global - pass *opaque to pvcalls_conn_back_read - improve WARN_ON in pvcalls_conn_back_read - fix error checks in pvcalls_conn_back_write - XEN_PVCALLS_BACKEND depends on XEN_BACKEND - rename priv to fedata across all patches Changes in v3: - added reviewed-bys - return err from pvcalls_back_probe - remove old comments - use a xenstore transaction in pvcalls_back_probe - ignore errors from xenbus_switch_state - rename pvcalls_back_priv to pvcalls_fedata - remove addr from backend_connect - remove priv->work, add comment about theoretical race - use IPPROTO_IP - refactor active socket allocation in a single new function Changes in v2: - allocate one ioworker per socket (rather than 1 per vcpu) - rename privs to frontends - add newlines - define "1" in the public header - better error returns in pvcalls_back_probe - do not set XenbusStateClosed twice in set_backend_state - add more comments - replace rw_semaphore with semaphore - rename pvcallss to socket_lock - move xenbus_map_ring_valloc closer to first use in backend_connect - use more traditional return codes from pvcalls_back_handle_cmd and callees - remove useless dev == NULL checks - replace lock_sock with more appropriate and fine grained socket locks Stefano Stabellini (18): xen: introduce the pvcalls interface header xen/pvcalls: introduce the pvcalls xenbus backend xen/pvcalls: initialize the module and register the xenbus backend xen/pvcalls: xenbus state handling xen/pvcalls: connect to a frontend xen/pvcalls: handle commands from the frontend xen/pvcalls: implement socket command xen/pvcalls: implement connect command xen/pvcalls: implement bind command xen/pvcalls: implement listen command xen/pvcalls: implement accept command xen/pvcalls: implement poll command xen/pvcalls: implement release command xen/pvcalls: disconnect and module_exit xen/pvcalls: implement the ioworker functions xen/pvcalls: implement read xen/pvcalls: implement write xen: introduce a Kconfig option to enable the pvcalls backend drivers/xen/Kconfig | 12 + drivers/xen/Makefile | 1 + drivers/xen/pvcalls-back.c | 1232 ++++++++++++++++++++++++++++++++++++ include/xen/interface/io/pvcalls.h | 121 ++++ include/xen/interface/io/ring.h | 2 + 5 files changed, 1368 insertions(+) create mode 100644 drivers/xen/pvcalls-back.c create mode 100644 include/xen/interface/io/pvcalls.h