Commit 17cc3935 authored by Sheng Yang's avatar Sheng Yang Committed by Marcelo Tosatti

KVM: x86: Rename gb_page_enable() to get_lpage_level() in kvm_x86_ops

Then the callback can provide the maximum supported large page level, which
is more flexible.

Also move the gb page support into x86_64 specific.
Signed-off-by: default avatarSheng Yang <sheng@linux.intel.com>
Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
parent c9c54174
...@@ -528,7 +528,7 @@ struct kvm_x86_ops { ...@@ -528,7 +528,7 @@ struct kvm_x86_ops {
int (*set_tss_addr)(struct kvm *kvm, unsigned int addr); int (*set_tss_addr)(struct kvm *kvm, unsigned int addr);
int (*get_tdp_level)(void); int (*get_tdp_level)(void);
u64 (*get_mt_mask)(struct kvm_vcpu *vcpu, gfn_t gfn, bool is_mmio); 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); bool (*rdtscp_supported)(void);
const struct trace_print_flags *exit_reasons_str; const struct trace_print_flags *exit_reasons_str;
......
...@@ -2911,9 +2911,9 @@ static const struct trace_print_flags svm_exit_reasons_str[] = { ...@@ -2911,9 +2911,9 @@ static const struct trace_print_flags svm_exit_reasons_str[] = {
{ -1, NULL } { -1, NULL }
}; };
static bool svm_gb_page_enable(void) static int svm_get_lpage_level(void)
{ {
return true; return PT_PDPE_LEVEL;
} }
static bool svm_rdtscp_supported(void) static bool svm_rdtscp_supported(void)
...@@ -2986,7 +2986,7 @@ static struct kvm_x86_ops svm_x86_ops = { ...@@ -2986,7 +2986,7 @@ static struct kvm_x86_ops svm_x86_ops = {
.get_mt_mask = svm_get_mt_mask, .get_mt_mask = svm_get_mt_mask,
.exit_reasons_str = svm_exit_reasons_str, .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, .cpuid_update = svm_cpuid_update,
......
...@@ -4036,9 +4036,9 @@ static const struct trace_print_flags vmx_exit_reasons_str[] = { ...@@ -4036,9 +4036,9 @@ static const struct trace_print_flags vmx_exit_reasons_str[] = {
#undef _ER #undef _ER
static bool vmx_gb_page_enable(void) static int vmx_get_lpage_level(void)
{ {
return false; return PT_DIRECTORY_LEVEL;
} }
static inline u32 bit(int bitno) static inline u32 bit(int bitno)
...@@ -4131,7 +4131,7 @@ static struct kvm_x86_ops vmx_x86_ops = { ...@@ -4131,7 +4131,7 @@ static struct kvm_x86_ops vmx_x86_ops = {
.get_mt_mask = vmx_get_mt_mask, .get_mt_mask = vmx_get_mt_mask,
.exit_reasons_str = vmx_exit_reasons_str, .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, .cpuid_update = vmx_cpuid_update,
......
...@@ -1641,10 +1641,12 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, ...@@ -1641,10 +1641,12 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
u32 index, int *nent, int maxnent) u32 index, int *nent, int maxnent)
{ {
unsigned f_nx = is_efer_nx() ? F(NX) : 0; 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 #ifdef CONFIG_X86_64
unsigned f_gbpages = (kvm_x86_ops->get_lpage_level() == PT_PDPE_LEVEL)
? F(GBPAGES) : 0;
unsigned f_lm = F(LM); unsigned f_lm = F(LM);
#else #else
unsigned f_gbpages = 0;
unsigned f_lm = 0; unsigned f_lm = 0;
#endif #endif
unsigned f_rdtscp = kvm_x86_ops->rdtscp_supported() ? F(RDTSCP) : 0; unsigned f_rdtscp = kvm_x86_ops->rdtscp_supported() ? F(RDTSCP) : 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment