From patchwork Tue Sep 5 03:54:52 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?UTF-8?q?Sergio=20Andr=C3=A9s=20G=C3=B3mez=20Del=20Real?= X-Patchwork-Id: 9937749 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 EDCBC601EB for ; Tue, 5 Sep 2017 04:00:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E0FA728329 for ; Tue, 5 Sep 2017 04:00:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D4B332832B; Tue, 5 Sep 2017 04:00:12 +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=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DB26528870 for ; Tue, 5 Sep 2017 04:00:10 +0000 (UTC) Received: from localhost ([::1]:56718 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dp51p-0004IV-Cq for patchwork-qemu-devel@patchwork.kernel.org; Mon, 04 Sep 2017 23:59:57 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41571) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dp4xu-0001qE-Kl for qemu-devel@nongnu.org; Mon, 04 Sep 2017 23:56:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dp4xp-00083x-IM for qemu-devel@nongnu.org; Mon, 04 Sep 2017 23:55:54 -0400 Received: from mail-vk0-x241.google.com ([2607:f8b0:400c:c05::241]:37785) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dp4xp-00083W-Dw for qemu-devel@nongnu.org; Mon, 04 Sep 2017 23:55:49 -0400 Received: by mail-vk0-x241.google.com with SMTP id 184so713166vkn.4 for ; Mon, 04 Sep 2017 20:55:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LBpWfEMArBFPyiPw0oC4Weg+m7hZafmBKKIoq+opbio=; b=vgeY5GghrfEaoGnikTRYIqUbxNDj9ghDaWgLF/UdpSwN/MLEIalUfAqWdTnjIScXZs sQw599mTDPhYJ4lVRxIjUkR+raj67sFYLRFH1wCUj7mAi32Jo/IUPa6rr9q5D8Q3QeZ9 JJ8AR6MITNdLzaP5k30ICrEYt18+PZLEgIJEJYGea+S+yj/Ptf8VGswFxo+DxhpB6RxC hOTwfhOzsMLLOMTNTTCxyKdbioPnl9GoIPEQAD79NkR8apFluZqZjscakODHEiNi6ktm utzraCGxzcILb42z8A7Knq3GBuM/moFO5jItZfmbDi+BcWL5Q2ShYPvZNYbLmZYB9bBo bjQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=LBpWfEMArBFPyiPw0oC4Weg+m7hZafmBKKIoq+opbio=; b=U7NLRLE1oO4Z+MmywkpN39xL2+kvAI7CieRDOKHRe4hPuLE8hpImRfIIi8GoKlWm3n PP+JE3+vWJrWWULLPua30ZeWTlfqfLyGvFyoRSi1Y4szLCSMP6l+5ggDIFjUaO6LD3GC 7XREMGRv9D/tNEESr7+I67d0q3ENSrKckeIRJjKmLHI3i8i/glGfL8dQybMMG2X11u5k B9K7gokEZ8DNS3mkGP+KVMqoJNi2QXZEjDXUevw8cK9l50bh6lz5pLqV/ZoVrxNN68ck lryrYL8ErvW0FzGMFz5nmircYWubILVGSIMifYR9zc3gTdCluYseaRlfJgZ151vBwnzF JDOQ== X-Gm-Message-State: AHPjjUgsKccXVPY3siH0fZxOjcvlGf6CxTU1DWyJhVJx9ePGjZUuP58t rreYoLdP3d3y4Mfi X-Google-Smtp-Source: ADKCNb69UaTabTa0pSWe9cd7hkuGx1OTuEnuHYi7L5UIBpmIXkNWvsBMxEJToIxb8q1LKxNlMXsHsg== X-Received: by 10.31.131.19 with SMTP id f19mr1237413vkd.80.1504583748584; Mon, 04 Sep 2017 20:55:48 -0700 (PDT) Received: from localhost.localdomain ([161.10.80.59]) by smtp.gmail.com with ESMTPSA id d206sm1877252vka.29.2017.09.04.20.55.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Sep 2017 20:55:46 -0700 (PDT) From: Sergio Andres Gomez Del Real X-Google-Original-From: Sergio Andres Gomez Del Real To: qemu-devel@nongnu.org Date: Mon, 4 Sep 2017 22:54:52 -0500 Message-Id: <20170905035457.3753-10-Sergio.G.DelReal@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170905035457.3753-1-Sergio.G.DelReal@gmail.com> References: <20170905035457.3753-1-Sergio.G.DelReal@gmail.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400c:c05::241 Subject: [Qemu-devel] [PATCH v3 09/14] hvf: use new helper functions for put/get xsave X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sergio Andres Gomez Del Real , pbonzini@redhat.com, stefanha@gmail.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP This commit makes use of the helper functions for handling xsave in xsave_helper.c, which are shared with kvm. Signed-off-by: Sergio Andres Gomez Del Real --- target/i386/hvf-utils/x86hvf.c | 63 ++++++------------------------------------ 1 file changed, 8 insertions(+), 55 deletions(-) diff --git a/target/i386/hvf-utils/x86hvf.c b/target/i386/hvf-utils/x86hvf.c index 1e687f4f89..dd0710d056 100644 --- a/target/i386/hvf-utils/x86hvf.c +++ b/target/i386/hvf-utils/x86hvf.c @@ -76,36 +76,13 @@ void hvf_get_segment(SegmentCache *qseg, struct vmx_segment *vmx_seg) void hvf_put_xsave(CPUState *cpu_state) { - int x; struct hvf_xsave_buf *xsave; - + xsave = X86_CPU(cpu_state)->env.kvm_xsave_buf; - memset(xsave, 0, sizeof(*xsave)); - - memcpy(&xsave->data[4], &X86_CPU(cpu_state)->env.fpdp, sizeof(X86_CPU(cpu_state)->env.fpdp)); - memcpy(&xsave->data[2], &X86_CPU(cpu_state)->env.fpip, sizeof(X86_CPU(cpu_state)->env.fpip)); - memcpy(&xsave->data[8], &X86_CPU(cpu_state)->env.fpregs, sizeof(X86_CPU(cpu_state)->env.fpregs)); - memcpy(&xsave->data[144], &X86_CPU(cpu_state)->env.ymmh_regs, sizeof(X86_CPU(cpu_state)->env.ymmh_regs)); - memcpy(&xsave->data[288], &X86_CPU(cpu_state)->env.zmmh_regs, sizeof(X86_CPU(cpu_state)->env.zmmh_regs)); - memcpy(&xsave->data[272], &X86_CPU(cpu_state)->env.opmask_regs, sizeof(X86_CPU(cpu_state)->env.opmask_regs)); - memcpy(&xsave->data[240], &X86_CPU(cpu_state)->env.bnd_regs, sizeof(X86_CPU(cpu_state)->env.bnd_regs)); - memcpy(&xsave->data[256], &X86_CPU(cpu_state)->env.bndcs_regs, sizeof(X86_CPU(cpu_state)->env.bndcs_regs)); - memcpy(&xsave->data[416], &X86_CPU(cpu_state)->env.hi16_zmm_regs, sizeof(X86_CPU(cpu_state)->env.hi16_zmm_regs)); - - xsave->data[0] = (uint16_t)X86_CPU(cpu_state)->env.fpuc; - xsave->data[0] |= (X86_CPU(cpu_state)->env.fpus << 16); - xsave->data[0] |= (X86_CPU(cpu_state)->env.fpstt & 7) << 11; - - for (x = 0; x < 8; ++x) - xsave->data[1] |= ((!X86_CPU(cpu_state)->env.fptags[x]) << x); - xsave->data[1] |= (uint32_t)(X86_CPU(cpu_state)->env.fpop << 16); - - memcpy(&xsave->data[40], &X86_CPU(cpu_state)->env.xmm_regs, sizeof(X86_CPU(cpu_state)->env.xmm_regs)); - - xsave->data[6] = X86_CPU(cpu_state)->env.mxcsr; - *(uint64_t *)&xsave->data[128] = X86_CPU(cpu_state)->env.xstate_bv; - - if (hv_vcpu_write_fpstate(cpu_state->hvf_fd, xsave->data, 4096)){ + + x86_cpu_xsave_all_areas(X86_CPU(cpu_state), xsave); + + if (hv_vcpu_write_fpstate(cpu_state->hvf_fd, xsave->data, 4096)) { abort(); } } @@ -187,39 +164,15 @@ void hvf_put_msrs(CPUState *cpu_state) void hvf_get_xsave(CPUState *cpu_state) { - int x; struct hvf_xsave_buf *xsave; - + xsave = X86_CPU(cpu_state)->env.kvm_xsave_buf; - + if (hv_vcpu_read_fpstate(cpu_state->hvf_fd, xsave->data, 4096)) { abort(); } - memcpy(&X86_CPU(cpu_state)->env.fpdp, &xsave->data[4], sizeof(X86_CPU(cpu_state)->env.fpdp)); - memcpy(&X86_CPU(cpu_state)->env.fpip, &xsave->data[2], sizeof(X86_CPU(cpu_state)->env.fpip)); - memcpy(&X86_CPU(cpu_state)->env.fpregs, &xsave->data[8], sizeof(X86_CPU(cpu_state)->env.fpregs)); - memcpy(&X86_CPU(cpu_state)->env.ymmh_regs, &xsave->data[144], sizeof(X86_CPU(cpu_state)->env.ymmh_regs)); - memcpy(&X86_CPU(cpu_state)->env.zmmh_regs, &xsave->data[288], sizeof(X86_CPU(cpu_state)->env.zmmh_regs)); - memcpy(&X86_CPU(cpu_state)->env.opmask_regs, &xsave->data[272], sizeof(X86_CPU(cpu_state)->env.opmask_regs)); - memcpy(&X86_CPU(cpu_state)->env.bnd_regs, &xsave->data[240], sizeof(X86_CPU(cpu_state)->env.bnd_regs)); - memcpy(&X86_CPU(cpu_state)->env.bndcs_regs, &xsave->data[256], sizeof(X86_CPU(cpu_state)->env.bndcs_regs)); - memcpy(&X86_CPU(cpu_state)->env.hi16_zmm_regs, &xsave->data[416], sizeof(X86_CPU(cpu_state)->env.hi16_zmm_regs)); - - - X86_CPU(cpu_state)->env.fpuc = (uint16_t)xsave->data[0]; - X86_CPU(cpu_state)->env.fpus = (uint16_t)(xsave->data[0] >> 16); - X86_CPU(cpu_state)->env.fpstt = (X86_CPU(cpu_state)->env.fpus >> 11) & 7; - X86_CPU(cpu_state)->env.fpop = (uint16_t)(xsave->data[1] >> 16); - - for (x = 0; x < 8; ++x) - X86_CPU(cpu_state)->env.fptags[x] = - ((((uint16_t)xsave->data[1] >> x) & 1) == 0); - - memcpy(&X86_CPU(cpu_state)->env.xmm_regs, &xsave->data[40], sizeof(X86_CPU(cpu_state)->env.xmm_regs)); - - X86_CPU(cpu_state)->env.mxcsr = xsave->data[6]; - X86_CPU(cpu_state)->env.xstate_bv = *(uint64_t *)&xsave->data[128]; + x86_cpu_xrstor_all_areas(X86_CPU(cpu_state), xsave); } void hvf_get_segments(CPUState *cpu_state)