Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 474a5bb9 authored by Wei Huang's avatar Wei Huang Committed by Paolo Bonzini
Browse files

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: default avatarWei Huang <wei@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent c6702c9d
Loading
Loading
Loading
Loading
+0 −12
Original line number Original line Diff line number Diff line
@@ -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,
+1 −0
Original line number Original line Diff line number Diff line
@@ -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)
{
{
+2 −6
Original line number Original line Diff line number Diff line
@@ -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 },

arch/x86/kvm/pmu.h

0 → 100644
+26 −0
Original line number Original line Diff line number Diff line
#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 */
+1 −0
Original line number Original line Diff line number Diff line
@@ -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>