mirror of
https://github.com/torvalds/linux.git
synced 2024-11-02 10:11:36 +00:00
KVM: report 1GB page support to userspace
If userspace knows that the kernel part supports 1GB pages it can enable the corresponding cpuid bit so that guests actually use GB pages. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Avi Kivity <avi@redhat.com>
This commit is contained in:
parent
04326caacf
commit
344f414fa0
@ -528,6 +528,8 @@ 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);
|
||||
|
||||
const struct trace_print_flags *exit_reasons_str;
|
||||
};
|
||||
|
||||
|
@ -2754,6 +2754,11 @@ static const struct trace_print_flags svm_exit_reasons_str[] = {
|
||||
{ -1, NULL }
|
||||
};
|
||||
|
||||
static bool svm_gb_page_enable(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static struct kvm_x86_ops svm_x86_ops = {
|
||||
.cpu_has_kvm_support = has_svm,
|
||||
.disabled_by_bios = is_disabled,
|
||||
@ -2817,6 +2822,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,
|
||||
};
|
||||
|
||||
static int __init svm_init(void)
|
||||
|
@ -3908,6 +3908,11 @@ static const struct trace_print_flags vmx_exit_reasons_str[] = {
|
||||
{ -1, NULL }
|
||||
};
|
||||
|
||||
static bool vmx_gb_page_enable(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static struct kvm_x86_ops vmx_x86_ops = {
|
||||
.cpu_has_kvm_support = cpu_has_kvm_support,
|
||||
.disabled_by_bios = vmx_disabled_by_bios,
|
||||
@ -3969,6 +3974,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,
|
||||
};
|
||||
|
||||
static int __init vmx_init(void)
|
||||
|
@ -1444,6 +1444,7 @@ 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
|
||||
unsigned f_lm = F(LM);
|
||||
#else
|
||||
@ -1468,7 +1469,7 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
|
||||
F(MTRR) | F(PGE) | F(MCA) | F(CMOV) |
|
||||
F(PAT) | F(PSE36) | 0 /* Reserved */ |
|
||||
f_nx | 0 /* Reserved */ | F(MMXEXT) | F(MMX) |
|
||||
F(FXSR) | F(FXSR_OPT) | 0 /* GBPAGES */ | 0 /* RDTSCP */ |
|
||||
F(FXSR) | F(FXSR_OPT) | f_gbpages | 0 /* RDTSCP */ |
|
||||
0 /* Reserved */ | f_lm | F(3DNOWEXT) | F(3DNOW);
|
||||
/* cpuid 1.ecx */
|
||||
const u32 kvm_supported_word4_x86_features =
|
||||
|
Loading…
Reference in New Issue
Block a user