From patchwork Fri Oct 14 09:37:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 9376317 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 327E460779 for ; Fri, 14 Oct 2016 09:39:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 22CEA2A594 for ; Fri, 14 Oct 2016 09:39:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 17A052A596; Fri, 14 Oct 2016 09:39:36 +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 7B03C2A594 for ; Fri, 14 Oct 2016 09:39:35 +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 1buyvs-0001Te-2n; Fri, 14 Oct 2016 09:37:40 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1buyvq-0001TQ-MN for xen-devel@lists.xenproject.org; Fri, 14 Oct 2016 09:37:38 +0000 Received: from [85.158.143.35] by server-8.bemta-6.messagelabs.com id 3A/29-28497-167A0085; Fri, 14 Oct 2016 09:37:37 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrMIsWRWlGSWpSXmKPExsXS6fjDSzdxOUO EwbwLkhbft0xmcmD0OPzhCksAYxRrZl5SfkUCa8aqz+EFs6Qq/j2cx9TA+Fyki5GDQ0ggT+LE IpcuRk4OXgE7iQktZ9hBbAkBQ4mn76+zgdgsAqoSz19AxNkE1CXanm1nBWkVETCQOHc0CSTML KAj8f7ffGYQW1jAXeLwqQUsICW8AoISf3cIQ5TYSXzfcpttAiPXLITMLCQZCFtL4uGvWywQtr bEsoWvmUHKmQWkJZb/44AIW0hc7p7MjKoExHaWuHj6IcsCRo5VjBrFqUVlqUW6hhZ6SUWZ6Rk luYmZObqGBmZ6uanFxYnpqTmJScV6yfm5mxiBgccABDsYb24MOMQoycGkJMpbq8cQIcSXlJ9S mZFYnBFfVJqTWnyIUYaDQ0mCN2IZUE6wKDU9tSItMwcYAzBpCQ4eJRHedpA0b3FBYm5xZjpE6 hSjopQ4rzxIQgAkkVGaB9cGi7tLjLJSwryMQIcI8RSkFuVmlqDKv2IU52BUEuaVAZnCk5lXAj f9FdBiJqDFH9rAFpckIqSkGhjNuNZoT5eI6GT9HnQ07fG5nI1mPL5KZ3K1JpSW6GXzqNmsX29 Z4fOQ1WiZ7TV1RdFvd54FsM07uSfM6mef8/UYg+w5sg1CPEt2qRUfKTn5rMho0pX96/zdhadr v5340OGzPPNai5rcE5/SPSJ//z7EO4/D/6iXS5p5p03ayyanG493puyfm6XEUpyRaKjFXFScC AAmEClWtgIAAA== X-Env-Sender: JBeulich@suse.com X-Msg-Ref: server-3.tower-21.messagelabs.com!1476437855!37500362!1 X-Originating-IP: [137.65.248.74] X-SpamReason: No, hits=0.0 required=7.0 tests= X-StarScan-Received: X-StarScan-Version: 9.0.13; banners=-,-,- X-VirusChecked: Checked Received: (qmail 63225 invoked from network); 14 Oct 2016 09:37:37 -0000 Received: from prv-mh.provo.novell.com (HELO prv-mh.provo.novell.com) (137.65.248.74) by server-3.tower-21.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 14 Oct 2016 09:37:37 -0000 Received: from INET-PRV-MTA by prv-mh.provo.novell.com with Novell_GroupWise; Fri, 14 Oct 2016 03:37:35 -0600 Message-Id: <5800C37F02000078001174F3@prv-mh.provo.novell.com> X-Mailer: Novell GroupWise Internet Agent 14.2.1 Date: Fri, 14 Oct 2016 03:37:35 -0600 From: "Jan Beulich" To: "xen-devel" Mime-Version: 1.0 Cc: Paul Durrant Subject: [Xen-devel] [PATCH] x86/Viridian: don't depend on undefined register state 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 The high halves of all GPRs are undefined in 32-bit and compat modes, and the dependency is being obfuscated by our structure field names not matching architectural register names (it was actually while putting together a patch to correct this when I noticed the issue here). For consistency also use the architecturally correct names on the output side. Signed-off-by: Jan Beulich x86/Viridian: don't depend on undefined register state The high halves of all GPRs are undefined in 32-bit and compat modes, and the dependency is being obfuscated by our structure field names not matching architectural register names (it was actually while putting together a patch to correct this when I noticed the issue here). For consistency also use the architecturally correct names on the output side. Signed-off-by: Jan Beulich --- a/xen/arch/x86/hvm/viridian.c +++ b/xen/arch/x86/hvm/viridian.c @@ -667,9 +667,9 @@ int viridian_hypercall(struct cpu_user_r output_params_gpa = regs->r8; break; case 4: - input.raw = ((uint64_t)regs->edx << 32) | regs->eax; - input_params_gpa = ((uint64_t)regs->ebx << 32) | regs->ecx; - output_params_gpa = ((uint64_t)regs->edi << 32) | regs->esi; + input.raw = (regs->rdx << 32) | regs->_eax; + input_params_gpa = (regs->rbx << 32) | regs->_ecx; + output_params_gpa = (regs->rdi << 32) | regs->_esi; break; default: goto out; @@ -770,8 +770,8 @@ out: regs->rax = output.raw; break; default: - regs->edx = output.raw >> 32; - regs->eax = output.raw; + regs->rdx = output.raw >> 32; + regs->rax = (uint32_t)output.raw; break; } Reviewed-by: Andrew Cooper Reviewed-by: Paul Durrant --- a/xen/arch/x86/hvm/viridian.c +++ b/xen/arch/x86/hvm/viridian.c @@ -667,9 +667,9 @@ int viridian_hypercall(struct cpu_user_r output_params_gpa = regs->r8; break; case 4: - input.raw = ((uint64_t)regs->edx << 32) | regs->eax; - input_params_gpa = ((uint64_t)regs->ebx << 32) | regs->ecx; - output_params_gpa = ((uint64_t)regs->edi << 32) | regs->esi; + input.raw = (regs->rdx << 32) | regs->_eax; + input_params_gpa = (regs->rbx << 32) | regs->_ecx; + output_params_gpa = (regs->rdi << 32) | regs->_esi; break; default: goto out; @@ -770,8 +770,8 @@ out: regs->rax = output.raw; break; default: - regs->edx = output.raw >> 32; - regs->eax = output.raw; + regs->rdx = output.raw >> 32; + regs->rax = (uint32_t)output.raw; break; }