1 #ifndef ARCH_X86_KVM_CPUID_H
2 #define ARCH_X86_KVM_CPUID_H
6 void kvm_update_cpuid(struct kvm_vcpu
*vcpu
);
7 struct kvm_cpuid_entry2
*kvm_find_cpuid_entry(struct kvm_vcpu
*vcpu
,
8 u32 function
, u32 index
);
9 int kvm_dev_ioctl_get_supported_cpuid(struct kvm_cpuid2
*cpuid
,
10 struct kvm_cpuid_entry2 __user
*entries
);
11 int kvm_vcpu_ioctl_set_cpuid(struct kvm_vcpu
*vcpu
,
12 struct kvm_cpuid
*cpuid
,
13 struct kvm_cpuid_entry __user
*entries
);
14 int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu
*vcpu
,
15 struct kvm_cpuid2
*cpuid
,
16 struct kvm_cpuid_entry2 __user
*entries
);
17 int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu
*vcpu
,
18 struct kvm_cpuid2
*cpuid
,
19 struct kvm_cpuid_entry2 __user
*entries
);
20 void kvm_cpuid(struct kvm_vcpu
*vcpu
, u32
*eax
, u32
*ebx
, u32
*ecx
, u32
*edx
);
23 static inline bool guest_cpuid_has_xsave(struct kvm_vcpu
*vcpu
)
25 struct kvm_cpuid_entry2
*best
;
27 best
= kvm_find_cpuid_entry(vcpu
, 1, 0);
28 return best
&& (best
->ecx
& bit(X86_FEATURE_XSAVE
));
31 static inline bool guest_cpuid_has_smep(struct kvm_vcpu
*vcpu
)
33 struct kvm_cpuid_entry2
*best
;
35 best
= kvm_find_cpuid_entry(vcpu
, 7, 0);
36 return best
&& (best
->ebx
& bit(X86_FEATURE_SMEP
));
39 static inline bool guest_cpuid_has_fsgsbase(struct kvm_vcpu
*vcpu
)
41 struct kvm_cpuid_entry2
*best
;
43 best
= kvm_find_cpuid_entry(vcpu
, 7, 0);
44 return best
&& (best
->ebx
& bit(X86_FEATURE_FSGSBASE
));
47 static inline bool guest_cpuid_has_osvw(struct kvm_vcpu
*vcpu
)
49 struct kvm_cpuid_entry2
*best
;
51 best
= kvm_find_cpuid_entry(vcpu
, 0x80000001, 0);
52 return best
&& (best
->ecx
& bit(X86_FEATURE_OSVW
));
55 static inline bool guest_cpuid_has_pcid(struct kvm_vcpu
*vcpu
)
57 struct kvm_cpuid_entry2
*best
;
59 best
= kvm_find_cpuid_entry(vcpu
, 1, 0);
60 return best
&& (best
->ecx
& bit(X86_FEATURE_PCID
));