@@ -34,6 +34,8 @@ extern uint64_t guest_tsc_khz;
3434
3535#define NMI_VECTOR 0x02
3636
37+ const char * ex_str (int vector );
38+
3739#define X86_EFLAGS_FIXED (1u << 1)
3840
3941#define X86_CR4_VME (1ul << 0)
@@ -265,7 +267,7 @@ struct kvm_x86_cpu_property {
265267#define X86_PROPERTY_PMU_NR_GP_COUNTERS KVM_X86_CPU_PROPERTY(0xa, 0, EAX, 8, 15)
266268#define X86_PROPERTY_PMU_GP_COUNTERS_BIT_WIDTH KVM_X86_CPU_PROPERTY(0xa, 0, EAX, 16, 23)
267269#define X86_PROPERTY_PMU_EBX_BIT_VECTOR_LENGTH KVM_X86_CPU_PROPERTY(0xa, 0, EAX, 24, 31)
268- #define X86_PROPERTY_PMU_EVENTS_MASK KVM_X86_CPU_PROPERTY(0xa, 0, EBX, 0, 7 )
270+ #define X86_PROPERTY_PMU_EVENTS_MASK KVM_X86_CPU_PROPERTY(0xa, 0, EBX, 0, 12 )
269271#define X86_PROPERTY_PMU_FIXED_COUNTERS_BITMASK KVM_X86_CPU_PROPERTY(0xa, 0, ECX, 0, 31)
270272#define X86_PROPERTY_PMU_NR_FIXED_COUNTERS KVM_X86_CPU_PROPERTY(0xa, 0, EDX, 0, 4)
271273#define X86_PROPERTY_PMU_FIXED_COUNTERS_BIT_WIDTH KVM_X86_CPU_PROPERTY(0xa, 0, EDX, 5, 12)
@@ -332,6 +334,11 @@ struct kvm_x86_pmu_feature {
332334#define X86_PMU_FEATURE_BRANCH_INSNS_RETIRED KVM_X86_PMU_FEATURE(EBX, 5)
333335#define X86_PMU_FEATURE_BRANCHES_MISPREDICTED KVM_X86_PMU_FEATURE(EBX, 6)
334336#define X86_PMU_FEATURE_TOPDOWN_SLOTS KVM_X86_PMU_FEATURE(EBX, 7)
337+ #define X86_PMU_FEATURE_TOPDOWN_BE_BOUND KVM_X86_PMU_FEATURE(EBX, 8)
338+ #define X86_PMU_FEATURE_TOPDOWN_BAD_SPEC KVM_X86_PMU_FEATURE(EBX, 9)
339+ #define X86_PMU_FEATURE_TOPDOWN_FE_BOUND KVM_X86_PMU_FEATURE(EBX, 10)
340+ #define X86_PMU_FEATURE_TOPDOWN_RETIRING KVM_X86_PMU_FEATURE(EBX, 11)
341+ #define X86_PMU_FEATURE_LBR_INSERTS KVM_X86_PMU_FEATURE(EBX, 12)
335342
336343#define X86_PMU_FEATURE_INSNS_RETIRED_FIXED KVM_X86_PMU_FEATURE(ECX, 0)
337344#define X86_PMU_FEATURE_CPU_CYCLES_FIXED KVM_X86_PMU_FEATURE(ECX, 1)
@@ -1179,6 +1186,12 @@ struct idt_entry {
11791186void vm_install_exception_handler (struct kvm_vm * vm , int vector ,
11801187 void (* handler )(struct ex_regs * ));
11811188
1189+ /*
1190+ * Exception fixup morphs #DE to an arbitrary magic vector so that '0' can be
1191+ * used to signal "no expcetion".
1192+ */
1193+ #define KVM_MAGIC_DE_VECTOR 0xff
1194+
11821195/* If a toddler were to say "abracadabra". */
11831196#define KVM_EXCEPTION_MAGIC 0xabacadabaULL
11841197
@@ -1314,6 +1327,26 @@ static inline uint8_t xsetbv_safe(uint32_t index, uint64_t value)
13141327
13151328bool kvm_is_tdp_enabled (void );
13161329
1330+ static inline bool get_kvm_intel_param_bool (const char * param )
1331+ {
1332+ return kvm_get_module_param_bool ("kvm_intel" , param );
1333+ }
1334+
1335+ static inline bool get_kvm_amd_param_bool (const char * param )
1336+ {
1337+ return kvm_get_module_param_bool ("kvm_amd" , param );
1338+ }
1339+
1340+ static inline int get_kvm_intel_param_integer (const char * param )
1341+ {
1342+ return kvm_get_module_param_integer ("kvm_intel" , param );
1343+ }
1344+
1345+ static inline int get_kvm_amd_param_integer (const char * param )
1346+ {
1347+ return kvm_get_module_param_integer ("kvm_amd" , param );
1348+ }
1349+
13171350static inline bool kvm_is_pmu_enabled (void )
13181351{
13191352 return get_kvm_param_bool ("enable_pmu" );
0 commit comments