[PATCH v4 08/21] KVM: ARM64: Add reset and access handlers for PMXEVTYPER register
From: Shannon Zhao <hidden>
Date: 2015-11-03 02:41:45
Also in:
kvm, kvmarm
On 2015/11/3 4:54, Christopher Covington wrote:
Hi Shannon, On 10/30/2015 02:21 AM, Shannon Zhao wrote:quoted
From: Shannon Zhao <redacted> Since the reset value of PMXEVTYPER is UNKNOWN, use reset_unknown or reset_unknown_cp15 for its reset handler. Add access handler which emulates writing and reading PMXEVTYPER register. When writing to PMXEVTYPER, call kvm_pmu_set_counter_event_type to create a perf_event for the selected event type. Signed-off-by: Shannon Zhao <redacted> --- arch/arm64/kvm/sys_regs.c | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c index cb82b15..4e606ea 100644 --- a/arch/arm64/kvm/sys_regs.c +++ b/arch/arm64/kvm/sys_regs.c@@ -491,6 +491,17 @@ static bool access_pmu_regs(struct kvm_vcpu *vcpu, if (p->is_write) { switch (r->reg) { + case PMXEVTYPER_EL0: { + val = vcpu_sys_reg(vcpu, PMSELR_EL0); + kvm_pmu_set_counter_event_type(vcpu, + *vcpu_reg(vcpu, p->Rt), + val); + vcpu_sys_reg(vcpu, PMXEVTYPER_EL0) = + *vcpu_reg(vcpu, p->Rt);Why does PMXEVTYPER get set directly? It seems like it could have an accessor that redirected to PMEVTYPER<n>.
Yeah, that's what this patch does. It gets the counter index from PMSELR_EL0 register, then set the event type, create perf_event, store event type to PMEVTYPER<n>, etc.
quoted
+ vcpu_sys_reg(vcpu, PMEVTYPER0_EL0 + val) = + *vcpu_reg(vcpu, p->Rt);I tried to look around briefly but couldn't find counter number range checking in the PMSELR handler or here. Should there be some here and in PMXEVCNTR?
Ok, will fix this. Thanks. -- Shannon