From patchwork Wed Jan 4 12:39:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Cooper X-Patchwork-Id: 9496655 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 55086606B5 for ; Wed, 4 Jan 2017 12:48:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4565327BE5 for ; Wed, 4 Jan 2017 12:48:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3A53A27F88; Wed, 4 Jan 2017 12:48:10 +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 B434327BE5 for ; Wed, 4 Jan 2017 12:48:09 +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 1cOkxV-0005Vb-8D; Wed, 04 Jan 2017 12:46:25 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cOkxT-0005Uz-UF for xen-devel@lists.xen.org; Wed, 04 Jan 2017 12:46:24 +0000 Received: from [85.158.137.68] by server-13.bemta-3.messagelabs.com id BB/F7-25657-F9EEC685; Wed, 04 Jan 2017 12:46:23 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpmkeJIrShJLcpLzFFi42JxWrohUnfeu5w Ig9NfDSyWfFzM4sDocXT3b6YAxijWzLyk/IoE1oy7N18yF3QoVkx6sJGlgfGMWBcjJ4eEgL/E w3+bWUFsNgF9id0vPjGB2CIC6hKnOy4CxTk4mAX8JA498AUJCwOZKzdsZgOxWQRUJM7+38sMY vMKeEo8+LKcBWKknMT54z/B4pxA8Wcb1zGC2EICHhJTLi5jh7DVJK71X2KH6BWUODnzCVgvs4 CExMEXL5gnMPLOQpKahSS1gJFpFaN6cWpRWWqRroleUlFmekZJbmJmjq6hgbFebmpxcWJ6ak5 iUrFecn7uJkZg4DAAwQ7Gxi9OhxglOZiURHn72nMihPiS8lMqMxKLM+KLSnNSiw8xynBwKEnw Cr0FygkWpaanVqRl5gBDGCYtwcGjJMKbDpLmLS5IzC3OTIdInWJUlBLnNQZJCIAkMkrz4Npgc XOJUVZKmJcR6BAhnoLUotzMElT5V4ziHIxKwrw2IFN4MvNK4Ka/AlrMBLR4e0A2yOKSRISUVA NjuJVzs8K3tM1CVkaXmVfuendjvlzJ5F+za1LLf/08VHD8Sm6zOENgzeOPK5n2mB4Nbrq26Gq BoGC9Qqdqx6ObU52e58aWB4vY9uRdrOlpeTZ3wknpOW/db9m1ufurTZHIWTvrhvGh70qSohdt AupuvrAMXdSYs4+3dVNppRun0PqTZS8Xv0hSYinOSDTUYi4qTgQAr0aVkpYCAAA= X-Env-Sender: prvs=1701003ad=Andrew.Cooper3@citrix.com X-Msg-Ref: server-6.tower-31.messagelabs.com!1483533980!52605894!2 X-Originating-IP: [66.165.176.89] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.1.1; banners=-,-,- X-VirusChecked: Checked Received: (qmail 45945 invoked from network); 4 Jan 2017 12:46:22 -0000 Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89) by server-6.tower-31.messagelabs.com with RC4-SHA encrypted SMTP; 4 Jan 2017 12:46:22 -0000 X-IronPort-AV: E=Sophos;i="5.33,459,1477958400"; d="scan'208";a="397866970" From: Andrew Cooper To: Xen-devel Date: Wed, 4 Jan 2017 12:39:35 +0000 Message-ID: <1483533584-8015-19-git-send-email-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1483533584-8015-1-git-send-email-andrew.cooper3@citrix.com> References: <1483533584-8015-1-git-send-email-andrew.cooper3@citrix.com> MIME-Version: 1.0 Cc: Andrew Cooper , Jan Beulich Subject: [Xen-devel] [PATCH 18/27] x86/pv: Use per-domain policy information in pv_cpuid() 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 ... rather than performing runtime adjustments. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich --- xen/arch/x86/traps.c | 44 ++++++++++++-------------------------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index f19e015..1c384cf 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1065,11 +1065,8 @@ void pv_cpuid(struct cpu_user_regs *regs) uint32_t tmp; case 0x00000001: - c &= pv_featureset[FEATURESET_1c]; - d &= pv_featureset[FEATURESET_1d]; - - if ( is_pv_32bit_domain(currd) ) - c &= ~cpufeat_mask(X86_FEATURE_CX16); + c = p->basic._1c; + d = p->basic._1d; if ( !is_pvh_domain(currd) ) { @@ -1128,7 +1125,7 @@ void pv_cpuid(struct cpu_user_regs *regs) * Emulated vs Faulted CPUID is distinguised based on whether a * #UD or #GP is currently being serviced. */ - /* OSXSAVE cleared by pv_featureset. Fast-forward CR4 back in. */ + /* OSXSAVE clear in policy. Fast-forward CR4 back in. */ if ( (curr->arch.pv_vcpu.ctrlreg[4] & X86_CR4_OSXSAVE) || (regs->entry_vector == TRAP_invalid_op && guest_kernel_mode(curr, regs) && @@ -1204,21 +1201,14 @@ void pv_cpuid(struct cpu_user_regs *regs) if ( cpu_has(¤t_cpu_data, X86_FEATURE_DSCPL) ) c |= cpufeat_mask(X86_FEATURE_DSCPL); } - - c |= cpufeat_mask(X86_FEATURE_HYPERVISOR); break; case 0x00000007: if ( subleaf == 0 ) { - /* Fold host's FDP_EXCP_ONLY and NO_FPU_SEL into guest's view. */ - b &= (pv_featureset[FEATURESET_7b0] & - ~special_features[FEATURESET_7b0]); - b |= (host_featureset[FEATURESET_7b0] & - special_features[FEATURESET_7b0]); - - c &= pv_featureset[FEATURESET_7c0]; - d &= pv_featureset[FEATURESET_7d0]; + b = currd->arch.cpuid->feat._7b0; + c = currd->arch.cpuid->feat._7c0; + d = currd->arch.cpuid->feat._7d0; if ( !is_pvh_domain(currd) ) { @@ -1227,7 +1217,7 @@ void pv_cpuid(struct cpu_user_regs *regs) * and HVM guests no longer enter a PV codepath. */ - /* OSPKE cleared by pv_featureset. Fast-forward CR4 back in. */ + /* OSPKE clear in policy. Fast-forward CR4 back in. */ if ( curr->arch.pv_vcpu.ctrlreg[4] & X86_CR4_PKE ) c |= cpufeat_mask(X86_FEATURE_OSPKE); } @@ -1292,15 +1282,15 @@ void pv_cpuid(struct cpu_user_regs *regs) } case 1: - a &= pv_featureset[FEATURESET_Da1]; + a = p->xstate.Da1; b = c = d = 0; break; } break; case 0x80000001: - c &= pv_featureset[FEATURESET_e1c]; - d &= pv_featureset[FEATURESET_e1d]; + c = p->extd.e1c; + d = p->extd.e1d; /* If not emulating AMD, clear the duplicated features in e1d. */ if ( currd->arch.x86_vendor != X86_VENDOR_AMD ) @@ -1318,25 +1308,15 @@ void pv_cpuid(struct cpu_user_regs *regs) if ( is_hardware_domain(currd) && guest_kernel_mode(curr, regs) && cpu_has_mtrr ) d |= cpufeat_mask(X86_FEATURE_MTRR); - - if ( is_pv_32bit_domain(currd) ) - { - d &= ~cpufeat_mask(X86_FEATURE_LM); - c &= ~cpufeat_mask(X86_FEATURE_LAHF_LM); - - if ( boot_cpu_data.x86_vendor != X86_VENDOR_AMD ) - d &= ~cpufeat_mask(X86_FEATURE_SYSCALL); - } break; case 0x80000007: - d &= (pv_featureset[FEATURESET_e7d] | - (host_featureset[FEATURESET_e7d] & cpufeat_mask(X86_FEATURE_ITSC))); + d = p->extd.e7d; break; case 0x80000008: a = paddr_bits | (vaddr_bits << 8); - b &= pv_featureset[FEATURESET_e8b]; + b = p->extd.e8b; break; case 0x00000005: /* MONITOR/MWAIT */