KVM: x86/vPMU: introduce pmu.h header
This will be used for private function used by AMD- and Intel-specific PMU implementations. Signed-off-by: Wei Huang <wei@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c6702c9dcf
commit
474a5bb944
5 changed files with 30 additions and 18 deletions
|
@ -1195,18 +1195,6 @@ void kvm_complete_insn_gp(struct kvm_vcpu *vcpu, int err);
|
||||||
|
|
||||||
int kvm_is_in_guest(void);
|
int kvm_is_in_guest(void);
|
||||||
|
|
||||||
void kvm_pmu_init(struct kvm_vcpu *vcpu);
|
|
||||||
void kvm_pmu_destroy(struct kvm_vcpu *vcpu);
|
|
||||||
void kvm_pmu_reset(struct kvm_vcpu *vcpu);
|
|
||||||
void kvm_pmu_refresh(struct kvm_vcpu *vcpu);
|
|
||||||
bool kvm_pmu_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr);
|
|
||||||
int kvm_pmu_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data);
|
|
||||||
int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
|
|
||||||
int kvm_pmu_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned pmc);
|
|
||||||
int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned pmc, u64 *data);
|
|
||||||
void kvm_pmu_handle_event(struct kvm_vcpu *vcpu);
|
|
||||||
void kvm_pmu_deliver_pmi(struct kvm_vcpu *vcpu);
|
|
||||||
|
|
||||||
int __x86_set_memory_region(struct kvm *kvm,
|
int __x86_set_memory_region(struct kvm *kvm,
|
||||||
const struct kvm_userspace_memory_region *mem);
|
const struct kvm_userspace_memory_region *mem);
|
||||||
int x86_set_memory_region(struct kvm *kvm,
|
int x86_set_memory_region(struct kvm *kvm,
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "lapic.h"
|
#include "lapic.h"
|
||||||
#include "mmu.h"
|
#include "mmu.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
#include "pmu.h"
|
||||||
|
|
||||||
static u32 xstate_required_size(u64 xstate_bv, bool compacted)
|
static u32 xstate_required_size(u64 xstate_bv, bool compacted)
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,13 +19,9 @@
|
||||||
#include "x86.h"
|
#include "x86.h"
|
||||||
#include "cpuid.h"
|
#include "cpuid.h"
|
||||||
#include "lapic.h"
|
#include "lapic.h"
|
||||||
|
#include "pmu.h"
|
||||||
|
|
||||||
static struct kvm_arch_event_perf_mapping {
|
static struct kvm_event_hw_type_mapping arch_events[] = {
|
||||||
u8 eventsel;
|
|
||||||
u8 unit_mask;
|
|
||||||
unsigned event_type;
|
|
||||||
bool inexact;
|
|
||||||
} arch_events[] = {
|
|
||||||
/* Index must match CPUID 0x0A.EBX bit vector */
|
/* Index must match CPUID 0x0A.EBX bit vector */
|
||||||
[0] = { 0x3c, 0x00, PERF_COUNT_HW_CPU_CYCLES },
|
[0] = { 0x3c, 0x00, PERF_COUNT_HW_CPU_CYCLES },
|
||||||
[1] = { 0xc0, 0x00, PERF_COUNT_HW_INSTRUCTIONS },
|
[1] = { 0xc0, 0x00, PERF_COUNT_HW_INSTRUCTIONS },
|
||||||
|
|
26
arch/x86/kvm/pmu.h
Normal file
26
arch/x86/kvm/pmu.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
#ifndef __KVM_X86_PMU_H
|
||||||
|
#define __KVM_X86_PMU_H
|
||||||
|
|
||||||
|
#define vcpu_to_pmu(vcpu) (&(vcpu)->arch.pmu)
|
||||||
|
#define pmu_to_vcpu(pmu) (container_of((pmu), struct kvm_vcpu, arch.pmu))
|
||||||
|
#define pmc_to_pmu(pmc) (&(pmc)->vcpu->arch.pmu)
|
||||||
|
|
||||||
|
struct kvm_event_hw_type_mapping {
|
||||||
|
u8 eventsel;
|
||||||
|
u8 unit_mask;
|
||||||
|
unsigned event_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
void kvm_pmu_deliver_pmi(struct kvm_vcpu *vcpu);
|
||||||
|
void kvm_pmu_handle_event(struct kvm_vcpu *vcpu);
|
||||||
|
int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned pmc, u64 *data);
|
||||||
|
int kvm_pmu_is_valid_msr_idx(struct kvm_vcpu *vcpu, unsigned idx);
|
||||||
|
bool kvm_pmu_is_valid_msr(struct kvm_vcpu *vcpu, u32 msr);
|
||||||
|
int kvm_pmu_get_msr(struct kvm_vcpu *vcpu, u32 msr, u64 *data);
|
||||||
|
int kvm_pmu_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info);
|
||||||
|
void kvm_pmu_refresh(struct kvm_vcpu *vcpu);
|
||||||
|
void kvm_pmu_reset(struct kvm_vcpu *vcpu);
|
||||||
|
void kvm_pmu_init(struct kvm_vcpu *vcpu);
|
||||||
|
void kvm_pmu_destroy(struct kvm_vcpu *vcpu);
|
||||||
|
|
||||||
|
#endif /* __KVM_X86_PMU_H */
|
|
@ -28,6 +28,7 @@
|
||||||
#include "x86.h"
|
#include "x86.h"
|
||||||
#include "cpuid.h"
|
#include "cpuid.h"
|
||||||
#include "assigned-dev.h"
|
#include "assigned-dev.h"
|
||||||
|
#include "pmu.h"
|
||||||
|
|
||||||
#include <linux/clocksource.h>
|
#include <linux/clocksource.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
Loading…
Add table
Reference in a new issue