diff options
author | Nadav Amit <namit@cs.technion.ac.il> | 2014-06-02 11:34:09 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-06-18 11:46:18 -0400 |
commit | 67f4d4288c353734d29c45f6725971c71af96791 (patch) | |
tree | 6cec4548ccd3e2357512aa028c4ab8f1f61b9ffc /arch/x86/include/asm/kvm_emulate.h | |
parent | 3b32004a66e96e17d2a031c08d3304245c506dfc (diff) |
KVM: x86: rdpmc emulation checks the counter incorrectly
The rdpmc emulation checks that the counter (ECX) is not higher than 2, without
taking into considerations bits 30:31 role (e.g., bit 30 marks whether the
counter is fixed). The fix uses the pmu information for checking the validity
of the pmu counter.
Signed-off-by: Nadav Amit <namit@cs.technion.ac.il>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/include/asm/kvm_emulate.h')
-rw-r--r-- | arch/x86/include/asm/kvm_emulate.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm_emulate.h b/arch/x86/include/asm/kvm_emulate.h index a04fe4eb237d..ffa2671a7f2f 100644 --- a/arch/x86/include/asm/kvm_emulate.h +++ b/arch/x86/include/asm/kvm_emulate.h | |||
@@ -194,6 +194,7 @@ struct x86_emulate_ops { | |||
194 | int (*set_dr)(struct x86_emulate_ctxt *ctxt, int dr, ulong value); | 194 | int (*set_dr)(struct x86_emulate_ctxt *ctxt, int dr, ulong value); |
195 | int (*set_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 data); | 195 | int (*set_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 data); |
196 | int (*get_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 *pdata); | 196 | int (*get_msr)(struct x86_emulate_ctxt *ctxt, u32 msr_index, u64 *pdata); |
197 | int (*check_pmc)(struct x86_emulate_ctxt *ctxt, u32 pmc); | ||
197 | int (*read_pmc)(struct x86_emulate_ctxt *ctxt, u32 pmc, u64 *pdata); | 198 | int (*read_pmc)(struct x86_emulate_ctxt *ctxt, u32 pmc, u64 *pdata); |
198 | void (*halt)(struct x86_emulate_ctxt *ctxt); | 199 | void (*halt)(struct x86_emulate_ctxt *ctxt); |
199 | void (*wbinvd)(struct x86_emulate_ctxt *ctxt); | 200 | void (*wbinvd)(struct x86_emulate_ctxt *ctxt); |