예제 #1
0
u64 perf_counter_read(struct perf_event *pevent){
        u64 enabled = 0; u64  running = 0;
        if(pevent != NULL){
                //return local64_read(&pevent->count);
                return perf_event_read_value(pevent, &enabled, &running); 
        }else{
                printk(KERN_CRIT "***** PERFCT: event in task structure is null\n");
                BUG();
                return -1; //FIXME figure out how to handle this case
        }
}
예제 #2
0
파일: pmu.c 프로젝트: AlexShiLucky/linux
/**
 * kvm_pmu_get_counter_value - get PMU counter value
 * @vcpu: The vcpu pointer
 * @select_idx: The counter index
 */
u64 kvm_pmu_get_counter_value(struct kvm_vcpu *vcpu, u64 select_idx)
{
	u64 counter, reg, enabled, running;
	struct kvm_pmu *pmu = &vcpu->arch.pmu;
	struct kvm_pmc *pmc = &pmu->pmc[select_idx];

	reg = (select_idx == ARMV8_PMU_CYCLE_IDX)
	      ? PMCCNTR_EL0 : PMEVCNTR0_EL0 + select_idx;
	counter = __vcpu_sys_reg(vcpu, reg);

	/* The real counter value is equal to the value of counter register plus
	 * the value perf event counts.
	 */
	if (pmc->perf_event)
		counter += perf_event_read_value(pmc->perf_event, &enabled,
						 &running);

	return counter & pmc->bitmask;
}