From patchwork Fri Apr 7 19:35:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Cooper X-Patchwork-Id: 9670325 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 975B1602B3 for ; Fri, 7 Apr 2017 19:38:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 830AE28647 for ; Fri, 7 Apr 2017 19:38:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 77E4E2864A; Fri, 7 Apr 2017 19:38:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 1791628647 for ; Fri, 7 Apr 2017 19:38:47 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cwZgb-0005nV-Qw; Fri, 07 Apr 2017 19:36:45 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cwZga-0005n0-IJ for xen-devel@lists.xen.org; Fri, 07 Apr 2017 19:36:44 +0000 Received: from [85.158.139.211] by server-7.bemta-5.messagelabs.com id 5C/57-02138-B4AE7E85; Fri, 07 Apr 2017 19:36:43 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeJIrShJLcpLzFFi42JxWrrBXtfj1fM Ig+8/hCyWfFzM4sDocXT3b6YAxijWzLyk/IoE1oxLxxaxFdyRqDjzvYO1gfGhUBcjJ4eEgL/E reZmFhCbTUBfYveLT0wgtoiAusTpjousXYxcHMwCcxklTh77yQ6SEBbIkGg8+A2siEVAReL3h VVsIDavgIdE56njbBBD5STOH//JDGJzCnhKHP7aBVYvBFSzc8dbNghbTeJa/yV2iF5BiZMzn4 AdwSwgIXHwxQvmCYy8s5CkZiFJLWBkWsWoUZxaVJZapGtkqZdUlJmeUZKbmJmja2hgqpebWly cmJ6ak5hUrJecn7uJERg+9QwMjDsYL2/xO8QoycGkJMqr4PMkQogvKT+lMiOxOCO+qDQntfgQ owwHh5IE790XzyOEBItS01Mr0jJzgIEMk5bg4FES4T0AkuYtLkjMLc5Mh0idYlSUEueVegmUE ABJZJTmwbXBoucSo6yUMC8jAwODEE9BalFuZgmq/CtGcQ5GJWFeR5ApPJl5JXDTXwEtZgJa7H PrKcjikkSElFQDI8cCtfPLt0sLz5EWqGaZt+z9rWfTjA2urv7FmR14W7p/8pueyycPNj143JA eOFs0e34WMxtrV/xvQ3GF/XPYts5n+a4z3+VticehuLunM4reH/ixP4hRbLfL7Slyu+4mO/38 oP969uqoByofjguUJIUt47hb/Yeb11bp4fbSVP7O3B9K/v3R7EosxRmJhlrMRcWJAGwsUcWZA gAA X-Env-Sender: prvs=2637cee0f=Andrew.Cooper3@citrix.com X-Msg-Ref: server-7.tower-206.messagelabs.com!1491593793!89617122!2 X-Originating-IP: [66.165.176.63] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.4.12; banners=-,-,- X-VirusChecked: Checked Received: (qmail 13871 invoked from network); 7 Apr 2017 19:36:40 -0000 Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63) by server-7.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 7 Apr 2017 19:36:40 -0000 X-IronPort-AV: E=Sophos;i="5.37,167,1488844800"; d="scan'208";a="426734500" From: Andrew Cooper To: Xen-devel Date: Fri, 7 Apr 2017 20:35:51 +0100 Message-ID: <1491593753-1181-2-git-send-email-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1491593753-1181-1-git-send-email-andrew.cooper3@citrix.com> References: <1491593753-1181-1-git-send-email-andrew.cooper3@citrix.com> MIME-Version: 1.0 Cc: Andrew Cooper , Julien Grall , Paul Durrant , Jan Beulich Subject: [Xen-devel] [PATCH v5 for-4.9 2/4] hvm/dmop: Implement copy_{to, from}_guest_buf() in terms of raw accessors X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP This allows the usual cases to be simplified, by omitting an unnecessary buf parameters, and because the macros can appropriately size the object. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Paul Durrant CC: Julien Grall --- xen/arch/x86/hvm/dm.c | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c index 63d15ec..3d8ae89 100644 --- a/xen/arch/x86/hvm/dm.c +++ b/xen/arch/x86/hvm/dm.c @@ -37,36 +37,48 @@ struct dmop_bufs { #undef MAX_NR_BUFS }; -static bool copy_buf_from_guest(const xen_dm_op_buf_t bufs[], - unsigned int nr_bufs, void *dst, - unsigned int idx, size_t dst_size) +static bool _raw_copy_from_guest_buf( + const struct dmop_bufs *bufs, unsigned int idx, + void *dst, size_t dst_bytes) { - size_t size; + size_t buf_bytes; - if ( idx >= nr_bufs ) + if ( idx >= bufs->nr ) return false; - memset(dst, 0, dst_size); + buf_bytes = bufs->buf[idx].size; - size = min_t(size_t, dst_size, bufs[idx].size); + if ( dst_bytes > buf_bytes ) + return false; + + memset(dst, 0, dst_bytes); - return !copy_from_guest(dst, bufs[idx].h, size); + return !copy_from_guest(dst, bufs->buf[idx].h, dst_bytes); } -static bool copy_buf_to_guest(const xen_dm_op_buf_t bufs[], - unsigned int nr_bufs, unsigned int idx, - const void *src, size_t src_size) +static bool _raw_copy_to_guest_buf( + struct dmop_bufs *bufs, unsigned int idx, + const void *src, size_t src_bytes) { - size_t size; + size_t buf_bytes; - if ( idx >= nr_bufs ) + if ( idx >= bufs->nr ) return false; - size = min_t(size_t, bufs[idx].size, src_size); + buf_bytes = bufs->buf[idx].size; + + if ( src_bytes > buf_bytes ) + return false; - return !copy_to_guest(bufs[idx].h, src, size); + return !copy_to_guest(bufs->buf[idx].h, src, src_bytes); } +#define copy_from_guest_buf(bufs, buf_idx, dst) \ + _raw_copy_from_guest_buf(bufs, buf_idx, dst, sizeof(*(dst))) + +#define copy_to_guest_buf(bufs, buf_idx, src) \ + _raw_copy_to_guest_buf(bufs, buf_idx, src, sizeof(*(src))) + static int track_dirty_vram(struct domain *d, xen_pfn_t first_pfn, unsigned int nr, struct xen_dm_op_buf *buf) { @@ -317,7 +329,7 @@ static int dm_op(domid_t domid, struct dmop_bufs *bufs) if ( rc ) goto out; - if ( !copy_buf_from_guest(&bufs->buf[0], bufs->nr, &op, 0, sizeof(op)) ) + if ( !copy_from_guest_buf(bufs, 0, &op) ) { rc = -EFAULT; goto out; @@ -573,8 +585,7 @@ static int dm_op(domid_t domid, struct dmop_bufs *bufs) } if ( (!rc || rc == -ERESTART) && - !const_op && - !copy_buf_to_guest(&bufs->buf[0], bufs->nr, 0, &op, sizeof(op)) ) + !const_op && !copy_to_guest_buf(bufs, 0, &op) ) rc = -EFAULT; out: