mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 00:22:00 +02:00
LoongArch: KVM: Implement arch-specific functions for guest perf
Three architecture specific functions are added for the guest perf feature, they are kvm_arch_vcpu_in_kernel(), kvm_arch_vcpu_get_ip() and kvm_arch_pmi_in_guest(). Signed-off-by: Bibo Mao <maobibo@loongson.cn> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
This commit is contained in:
parent
6a16e448e5
commit
2bf463d761
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/kvm.h>
|
||||
#include <linux/kvm_types.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/threads.h>
|
||||
#include <linux/types.h>
|
||||
|
|
@ -292,6 +293,8 @@ static inline int kvm_get_pmu_num(struct kvm_vcpu_arch *arch)
|
|||
return (arch->cpucfg[6] & CPUCFG6_PMNUM) >> CPUCFG6_PMNUM_SHIFT;
|
||||
}
|
||||
|
||||
bool kvm_arch_pmi_in_guest(struct kvm_vcpu *vcpu);
|
||||
|
||||
/* Debug: dump vcpu state */
|
||||
int kvm_arch_vcpu_dump_regs(struct kvm_vcpu *vcpu);
|
||||
|
||||
|
|
|
|||
|
|
@ -361,9 +361,32 @@ int kvm_arch_vcpu_should_kick(struct kvm_vcpu *vcpu)
|
|||
|
||||
bool kvm_arch_vcpu_in_kernel(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return false;
|
||||
unsigned long val;
|
||||
|
||||
preempt_disable();
|
||||
val = gcsr_read(LOONGARCH_CSR_CRMD);
|
||||
preempt_enable();
|
||||
|
||||
return (val & CSR_PRMD_PPLV) == PLV_KERN;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_GUEST_PERF_EVENTS
|
||||
unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return vcpu->arch.pc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if a Performance Monitoring Interrupt (PMI), a.k.a. perf event,
|
||||
* arrived in guest context. For LoongArch64, if PMU is not passthrough to VM,
|
||||
* any event that arrives while a vCPU is loaded is considered to be "in guest".
|
||||
*/
|
||||
bool kvm_arch_pmi_in_guest(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return (vcpu && !(vcpu->arch.aux_inuse & KVM_LARCH_PMU));
|
||||
}
|
||||
#endif
|
||||
|
||||
bool kvm_arch_vcpu_preempted_in_kernel(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user