From patchwork Tue Jan 5 10:12:39 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sheng Yang X-Patchwork-Id: 70958 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.2) with ESMTP id o05AEdXF029546 for ; Tue, 5 Jan 2010 10:14:55 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753663Ab0AEKOf (ORCPT ); Tue, 5 Jan 2010 05:14:35 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753636Ab0AEKOe (ORCPT ); Tue, 5 Jan 2010 05:14:34 -0500 Received: from mga02.intel.com ([134.134.136.20]:57682 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753593Ab0AEKOc (ORCPT ); Tue, 5 Jan 2010 05:14:32 -0500 Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP; 05 Jan 2010 02:14:07 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.47,504,1257148800"; d="scan'208";a="584395117" Received: from syang10-desktop.sh.intel.com (HELO syang10-desktop) ([10.239.36.76]) by orsmga001.jf.intel.com with ESMTP; 05 Jan 2010 02:14:04 -0800 Received: from yasker by syang10-desktop with local (Exim 4.69) (envelope-from ) id 1NS6P8-000327-Ta; Tue, 05 Jan 2010 18:12:46 +0800 From: Sheng Yang To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org, Sheng Yang Subject: [PATCH 1/3] KVM: x86: Rename gb_page_enable() to get_lpage_level() in kvm_x86_ops Date: Tue, 5 Jan 2010 18:12:39 +0800 Message-Id: <1262686361-11630-2-git-send-email-sheng@linux.intel.com> X-Mailer: git-send-email 1.6.3.3 In-Reply-To: <1262686361-11630-1-git-send-email-sheng@linux.intel.com> References: <1262686361-11630-1-git-send-email-sheng@linux.intel.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index fe4df46..31b986f 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -520,7 +520,7 @@ struct kvm_x86_ops { int (*set_tss_addr)(struct kvm *kvm, unsigned int addr); int (*get_tdp_level)(void); u64 (*get_mt_mask)(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio); - bool (*gb_page_enable)(void); + int (*get_lpage_level)(void); bool (*rdtscp_supported)(void); const struct trace_print_flags *exit_reasons_str; diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index b373ae6..c0153de 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -2911,9 +2911,9 @@ static const struct trace_print_flags svm_exit_reasons_str[] = { { -1, NULL } }; -static bool svm_gb_page_enable(void) +static int svm_get_lpage_level(void) { - return true; + return 3; /* PT_PDPE_LEVEL */ } static bool svm_rdtscp_supported(void) @@ -2986,7 +2986,7 @@ static struct kvm_x86_ops svm_x86_ops = { .get_mt_mask = svm_get_mt_mask, .exit_reasons_str = svm_exit_reasons_str, - .gb_page_enable = svm_gb_page_enable, + .get_lpage_level = svm_get_lpage_level, .cpuid_update = svm_cpuid_update, diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 2cc9b7e..c5b5ff6 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -4011,9 +4011,9 @@ static const struct trace_print_flags vmx_exit_reasons_str[] = { { -1, NULL } }; -static bool vmx_gb_page_enable(void) +static int vmx_get_lpage_level(void) { - return false; + return 2; /* PT_DIRECTORY_LEVEL */ } static inline u32 bit(int bitno) @@ -4106,7 +4106,7 @@ static struct kvm_x86_ops vmx_x86_ops = { .get_mt_mask = vmx_get_mt_mask, .exit_reasons_str = vmx_exit_reasons_str, - .gb_page_enable = vmx_gb_page_enable, + .get_lpage_level = vmx_get_lpage_level, .cpuid_update = vmx_cpuid_update, diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index fd6e1a5..2968dd0 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1641,10 +1641,13 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, u32 index, int *nent, int maxnent) { unsigned f_nx = is_efer_nx() ? F(NX) : 0; - unsigned f_gbpages = kvm_x86_ops->gb_page_enable() ? F(GBPAGES) : 0; #ifdef CONFIG_X86_64 + /* PT_PDPE_LEVEL (mapping 1GB page) is 3 */ + unsigned f_gbpages = (kvm_x86_ops->get_lpage_level() == 3) ? + F(GBPAGES) : 0; unsigned f_lm = F(LM); #else + unsigned f_gbpages = 0; unsigned f_lm = 0; #endif unsigned f_rdtscp = kvm_x86_ops->rdtscp_supported() ? F(RDTSCP) : 0;