Lines Matching defs:hwc

253 static int loongarch_pmu_alloc_counter(struct cpu_hw_events *cpuc, struct hw_perf_event *hwc)
300 struct hw_perf_event *hwc,
304 u64 left = local64_read(&hwc->period_left);
305 u64 period = hwc->sample_period;
310 local64_set(&hwc->period_left, left);
311 hwc->last_period = period;
316 local64_set(&hwc->period_left, left);
317 hwc->last_period = period;
323 local64_set(&hwc->period_left, left);
326 local64_set(&hwc->prev_count, loongarch_pmu.overflow - left);
336 struct hw_perf_event *hwc,
343 prev_raw_count = local64_read(&hwc->prev_count);
346 if (local64_cmpxchg(&hwc->prev_count, prev_raw_count,
353 local64_sub(delta, &hwc->period_left);
358 struct hw_perf_event *hwc = &event->hw;
361 WARN_ON_ONCE(!(hwc->state & PERF_HES_UPTODATE));
363 hwc->state = 0;
366 loongarch_pmu_event_set_period(event, hwc, hwc->idx);
369 loongarch_pmu_enable_event(hwc, hwc->idx);
374 struct hw_perf_event *hwc = &event->hw;
376 if (!(hwc->state & PERF_HES_STOPPED)) {
378 loongarch_pmu_disable_event(hwc->idx);
380 loongarch_pmu_event_update(event, hwc, hwc->idx);
381 hwc->state |= PERF_HES_STOPPED | PERF_HES_UPTODATE;
389 struct hw_perf_event *hwc = &event->hw;
394 idx = loongarch_pmu_alloc_counter(cpuc, hwc);
408 hwc->state = PERF_HES_STOPPED | PERF_HES_UPTODATE;
423 struct hw_perf_event *hwc = &event->hw;
424 int idx = hwc->idx;
437 struct hw_perf_event *hwc = &event->hw;
440 if (hwc->idx < 0)
443 loongarch_pmu_event_update(event, hwc, hwc->idx);
475 struct hw_perf_event *hwc = &event->hw;
477 loongarch_pmu_event_update(event, hwc, idx);
479 if (!loongarch_pmu_event_set_period(event, hwc, idx))
740 struct hw_perf_event *hwc = &event->hw;
770 hwc->config_base = CSR_PERFCTRL_IE;
772 hwc->event_base = loongarch_pmu_perf_event_encode(pev);
777 hwc->config_base |= CSR_PERFCTRL_PLV3;
778 hwc->config_base |= CSR_PERFCTRL_PLV2;
781 hwc->config_base |= CSR_PERFCTRL_PLV0;
784 hwc->config_base |= CSR_PERFCTRL_PLV1;
787 hwc->config_base &= M_PERFCTL_CONFIG_MASK;
792 hwc->idx = -1;
793 hwc->config = 0;
795 if (!hwc->sample_period) {
796 hwc->sample_period = loongarch_pmu.max_period;
797 hwc->last_period = hwc->sample_period;
798 local64_set(&hwc->period_left, hwc->sample_period);