From patchwork Fri Jan 12 11:30:56 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 859817 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="L3X38Edi"; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3zJ1Z22cw8z9s81 for ; Fri, 12 Jan 2018 23:01:46 +1100 (AEDT) Received: from localhost ([::1]:35726 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZy1o-0008WT-C8 for incoming@patchwork.ozlabs.org; Fri, 12 Jan 2018 07:01:44 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41851) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eZxZ1-0007gM-HP for qemu-devel@nongnu.org; Fri, 12 Jan 2018 06:32:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eZxZ0-0005i5-4n for qemu-devel@nongnu.org; Fri, 12 Jan 2018 06:31:59 -0500 Received: from mail-wr0-x241.google.com ([2a00:1450:400c:c0c::241]:38109) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eZxYz-0005gz-UJ for qemu-devel@nongnu.org; Fri, 12 Jan 2018 06:31:58 -0500 Received: by mail-wr0-x241.google.com with SMTP id x1so858141wrb.5 for ; Fri, 12 Jan 2018 03:31:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=KuQ/1c7HfPLUFPX79rOY37ztyIuqIfjWjePSU8W73O0=; b=L3X38EdiYLzWxp9AscYp5dbOYYMkXi0WtWNa4IE+3wT5Zd+Lufv5rnvySwyPzElCZ3 GmVjsZ9wNrSGJvFDhvWfhgA9ATUTVbfD+sn2VscByUuakAjHnDGxaAC4w9N352oeu0o4 SBeObGtDpvWT+kuEcPRtwdrHeUT5BVGiaDKQSgXIrXKCOSrPdMhyK38JYHY1UDrkama7 0hfupMiFY24cIaxxo+FV5tKJWZRvwIDnAeU2cmiSgXg21mvdUkV6sS6QoPrwgadCp8IT q26EfLwBdLuGkyWsZPPR/5GdOlhJNlheIqsy1AyBqfw14nloTo64lSIi2KYs1qMFwyF0 /MWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=KuQ/1c7HfPLUFPX79rOY37ztyIuqIfjWjePSU8W73O0=; b=PTOh5NtVL2YQpQUZNTIvnuoUO8dIEK2alATVxdbhaQya84o5p6Zk9eFPbzMyZSYXyM osk6rLn2fGQDDoeKaNMYpG+453eAY6P1a17GSY6raj/hyt7Y0eOlHDh1ob2Yar3GX1TN JlgxuKuJtfftkLdRgHqjvuELVOPchiJi2Kl4I6RJwupThOPxoRufaUwnFG07p/fJxCLu Q863wotPONKGuveWa6FGKx/9U1xwssvTibKlQiVQk638B8pJh9VnGSN0opsDfe+cSJZD O7xk1BCPpcCWwJV/Ry3J+NcyVw1bfpTbPxSbnW0je2SWKt4xrb9QUJl58ee0Yt3u51nN Ublw== X-Gm-Message-State: AKwxytebMLRj7L4jxTm44nsE3hLHAWWGSrpThuUP3TGAWsJ7dWFEuAn9 CRJNgaEhCxLk/tGwMKBf/Mt8LqTe X-Google-Smtp-Source: ACJfBot4ceYM+ZIqQ3U/I77nSUptMo+mov1AIIBv7ByLKLGq3gNapx4gs5MIqSjBUCz+eGGMdl3VZA== X-Received: by 10.223.151.195 with SMTP id t3mr3704272wrb.274.1515756716422; Fri, 12 Jan 2018 03:31:56 -0800 (PST) Received: from 640k.lan (dynamic-adsl-78-12-229-84.clienti.tiscali.it. [78.12.229.84]) by smtp.gmail.com with ESMTPSA id l8sm2732271wmg.46.2018.01.12.03.31.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Jan 2018 03:31:55 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 12 Jan 2018 12:30:56 +0100 Message-Id: <1515756676-3860-33-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1515756676-3860-1-git-send-email-pbonzini@redhat.com> References: <1515756676-3860-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:400c:c0c::241 Subject: [Qemu-devel] [PULL 32/52] target/i386: hax: change to use x86_update_hflags 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: Tao Wu Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" From: Tao Wu Change to use x86_update_hflags instead of keeping another copy at hax side. This also fix bug like HF_CPL_MASK should be SS.DPL, not CS.DPL. Signed-off-by: Tao Wu Message-Id: <20180110195056.85403-2-lepton@google.com> Signed-off-by: Paolo Bonzini --- target/i386/hax-all.c | 52 +-------------------------------------------------- 1 file changed, 1 insertion(+), 51 deletions(-) diff --git a/target/i386/hax-all.c b/target/i386/hax-all.c index 3ce6950..07df73e 100644 --- a/target/i386/hax-all.c +++ b/target/i386/hax-all.c @@ -782,56 +782,6 @@ static int hax_set_segments(CPUArchState *env, struct vcpu_state_t *sregs) return 0; } -/* - * After get the state from the kernel module, some - * qemu emulator state need be updated also - */ -static int hax_setup_qemu_emulator(CPUArchState *env) -{ - -#define HFLAG_COPY_MASK (~( \ - HF_CPL_MASK | HF_PE_MASK | HF_MP_MASK | HF_EM_MASK | \ - HF_TS_MASK | HF_TF_MASK | HF_VM_MASK | HF_IOPL_MASK | \ - HF_OSFXSR_MASK | HF_LMA_MASK | HF_CS32_MASK | \ - HF_SS32_MASK | HF_CS64_MASK | HF_ADDSEG_MASK)) - - uint32_t hflags; - - hflags = (env->segs[R_CS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; - hflags |= (env->cr[0] & CR0_PE_MASK) << (HF_PE_SHIFT - CR0_PE_SHIFT); - hflags |= (env->cr[0] << (HF_MP_SHIFT - CR0_MP_SHIFT)) & - (HF_MP_MASK | HF_EM_MASK | HF_TS_MASK); - hflags |= (env->eflags & (HF_TF_MASK | HF_VM_MASK | HF_IOPL_MASK)); - hflags |= (env->cr[4] & CR4_OSFXSR_MASK) << - (HF_OSFXSR_SHIFT - CR4_OSFXSR_SHIFT); - - if (env->efer & MSR_EFER_LMA) { - hflags |= HF_LMA_MASK; - } - - if ((hflags & HF_LMA_MASK) && (env->segs[R_CS].flags & DESC_L_MASK)) { - hflags |= HF_CS32_MASK | HF_SS32_MASK | HF_CS64_MASK; - } else { - hflags |= (env->segs[R_CS].flags & DESC_B_MASK) >> - (DESC_B_SHIFT - HF_CS32_SHIFT); - hflags |= (env->segs[R_SS].flags & DESC_B_MASK) >> - (DESC_B_SHIFT - HF_SS32_SHIFT); - if (!(env->cr[0] & CR0_PE_MASK) || - (env->eflags & VM_MASK) || !(hflags & HF_CS32_MASK)) { - hflags |= HF_ADDSEG_MASK; - } else { - hflags |= ((env->segs[R_DS].base | - env->segs[R_ES].base | - env->segs[R_SS].base) != 0) << HF_ADDSEG_SHIFT; - } - } - - hflags &= ~HF_SMM_MASK; - - env->hflags = (env->hflags & HFLAG_COPY_MASK) | hflags; - return 0; -} - static int hax_sync_vcpu_register(CPUArchState *env, int set) { struct vcpu_state_t regs; @@ -888,7 +838,7 @@ static int hax_sync_vcpu_register(CPUArchState *env, int set) } } if (!set) { - hax_setup_qemu_emulator(env); + x86_update_hflags(env); } return 0; }