On 2015/11/3 4:54, Christopher Covington wrote: > Hi Shannon, > > On 10/30/2015 02:21 AM, Shannon Zhao wrote: >> From: Shannon Zhao <shannon.zhao@xxxxxxxxxx> >> >> 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 <shannon.zhao@xxxxxxxxxx> >> --- >> 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. >> + 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 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html