Lines Matching refs:event

85 #define CCI_PMU_EVENT_SOURCE(event)	((event >> 5) & 0x7)  argument
86 #define CCI_PMU_EVENT_CODE(event) (event & 0x1f) argument
262 static void pmu_set_event(int idx, unsigned long event) in pmu_set_event() argument
264 pmu_write_register(event, idx, CCI_PMU_EVT_SEL); in pmu_set_event()
276 static int pmu_get_event_idx(struct cci_pmu_hw_events *hw, struct perf_event *event) in pmu_get_event_idx() argument
278 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in pmu_get_event_idx()
279 struct hw_perf_event *hw_event = &event->hw; in pmu_get_event_idx()
298 static int pmu_map_event(struct perf_event *event) in pmu_map_event() argument
301 unsigned long config = event->attr.config; in pmu_map_event()
303 if (event->attr.type < PERF_TYPE_MAX) in pmu_map_event()
361 static u32 pmu_read_counter(struct perf_event *event) in pmu_read_counter() argument
363 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in pmu_read_counter()
364 struct hw_perf_event *hw_counter = &event->hw; in pmu_read_counter()
377 static void pmu_write_counter(struct perf_event *event, u32 value) in pmu_write_counter() argument
379 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in pmu_write_counter()
380 struct hw_perf_event *hw_counter = &event->hw; in pmu_write_counter()
389 static u64 pmu_event_update(struct perf_event *event) in pmu_event_update() argument
391 struct hw_perf_event *hwc = &event->hw; in pmu_event_update()
396 new_raw_count = pmu_read_counter(event); in pmu_event_update()
402 local64_add(delta, &event->count); in pmu_event_update()
407 static void pmu_read(struct perf_event *event) in pmu_read() argument
409 pmu_event_update(event); in pmu_read()
412 void pmu_event_set_period(struct perf_event *event) in pmu_event_set_period() argument
414 struct hw_perf_event *hwc = &event->hw; in pmu_event_set_period()
423 pmu_write_counter(event, val); in pmu_event_set_period()
440 struct perf_event *event = events->events[idx]; in pmu_handle_irq() local
443 if (!event) in pmu_handle_irq()
446 hw_counter = &event->hw; in pmu_handle_irq()
455 pmu_event_update(event); in pmu_handle_irq()
456 pmu_event_set_period(event); in pmu_handle_irq()
479 static void hw_perf_event_destroy(struct perf_event *event) in hw_perf_event_destroy() argument
481 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in hw_perf_event_destroy()
526 static void cci_pmu_start(struct perf_event *event, int pmu_flags) in cci_pmu_start() argument
528 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in cci_pmu_start()
530 struct hw_perf_event *hwc = &event->hw; in cci_pmu_start()
554 pmu_event_set_period(event); in cci_pmu_start()
560 static void cci_pmu_stop(struct perf_event *event, int pmu_flags) in cci_pmu_stop() argument
562 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in cci_pmu_stop()
563 struct hw_perf_event *hwc = &event->hw; in cci_pmu_stop()
579 pmu_event_update(event); in cci_pmu_stop()
583 static int cci_pmu_add(struct perf_event *event, int flags) in cci_pmu_add() argument
585 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in cci_pmu_add()
587 struct hw_perf_event *hwc = &event->hw; in cci_pmu_add()
591 perf_pmu_disable(event->pmu); in cci_pmu_add()
594 idx = pmu_get_event_idx(hw_events, event); in cci_pmu_add()
600 event->hw.idx = idx; in cci_pmu_add()
601 hw_events->events[idx] = event; in cci_pmu_add()
605 cci_pmu_start(event, PERF_EF_RELOAD); in cci_pmu_add()
608 perf_event_update_userpage(event); in cci_pmu_add()
611 perf_pmu_enable(event->pmu); in cci_pmu_add()
615 static void cci_pmu_del(struct perf_event *event, int flags) in cci_pmu_del() argument
617 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in cci_pmu_del()
619 struct hw_perf_event *hwc = &event->hw; in cci_pmu_del()
622 cci_pmu_stop(event, PERF_EF_UPDATE); in cci_pmu_del()
626 perf_event_update_userpage(event); in cci_pmu_del()
632 struct perf_event *event) in validate_event() argument
634 if (is_software_event(event)) in validate_event()
642 if (event->pmu != cci_pmu) in validate_event()
645 if (event->state < PERF_EVENT_STATE_OFF) in validate_event()
648 if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec) in validate_event()
651 return pmu_get_event_idx(hw_events, event) >= 0; in validate_event()
655 validate_group(struct perf_event *event) in validate_group() argument
657 struct perf_event *sibling, *leader = event->group_leader; in validate_group()
666 if (!validate_event(event->pmu, &fake_pmu, leader)) in validate_group()
670 if (!validate_event(event->pmu, &fake_pmu, sibling)) in validate_group()
674 if (!validate_event(event->pmu, &fake_pmu, event)) in validate_group()
681 __hw_perf_event_init(struct perf_event *event) in __hw_perf_event_init() argument
683 struct hw_perf_event *hwc = &event->hw; in __hw_perf_event_init()
686 mapping = pmu_map_event(event); in __hw_perf_event_init()
689 pr_debug("event %x:%llx not supported\n", event->attr.type, in __hw_perf_event_init()
690 event->attr.config); in __hw_perf_event_init()
718 if (event->group_leader != event) { in __hw_perf_event_init()
719 if (validate_group(event) != 0) in __hw_perf_event_init()
726 static int cci_pmu_event_init(struct perf_event *event) in cci_pmu_event_init() argument
728 struct cci_pmu *cci_pmu = to_cci_pmu(event->pmu); in cci_pmu_event_init()
733 if (event->attr.type != event->pmu->type) in cci_pmu_event_init()
737 if (is_sampling_event(event) || event->attach_state & PERF_ATTACH_TASK) in cci_pmu_event_init()
741 if (event->attr.exclude_user || in cci_pmu_event_init()
742 event->attr.exclude_kernel || in cci_pmu_event_init()
743 event->attr.exclude_hv || in cci_pmu_event_init()
744 event->attr.exclude_idle || in cci_pmu_event_init()
745 event->attr.exclude_host || in cci_pmu_event_init()
746 event->attr.exclude_guest) in cci_pmu_event_init()
759 if (event->cpu < 0 || cpu < 0) in cci_pmu_event_init()
761 event->cpu = cpu; in cci_pmu_event_init()
763 event->destroy = hw_perf_event_destroy; in cci_pmu_event_init()
775 err = __hw_perf_event_init(event); in cci_pmu_event_init()
777 hw_perf_event_destroy(event); in cci_pmu_event_init()