Lines Matching refs:event
322 GEN_PMU_FORMAT_ATTR(event);
331 static bool armv8pmu_event_is_64bit(struct perf_event *event) in armv8pmu_event_is_64bit() argument
333 return ATTR_CFG_GET_FLD(&event->attr, long); in armv8pmu_event_is_64bit()
336 static bool armv8pmu_event_want_user_access(struct perf_event *event) in armv8pmu_event_want_user_access() argument
338 return ATTR_CFG_GET_FLD(&event->attr, rdpmc); in armv8pmu_event_want_user_access()
494 static bool armv8pmu_event_has_user_read(struct perf_event *event) in armv8pmu_event_has_user_read() argument
496 return event->hw.flags & PERF_EVENT_FLAG_USER_READ_CNT; in armv8pmu_event_has_user_read()
504 static bool armv8pmu_event_is_chained(struct perf_event *event) in armv8pmu_event_is_chained() argument
506 int idx = event->hw.idx; in armv8pmu_event_is_chained()
507 struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); in armv8pmu_event_is_chained()
509 return !armv8pmu_event_has_user_read(event) && in armv8pmu_event_is_chained()
510 armv8pmu_event_is_64bit(event) && in armv8pmu_event_is_chained()
545 static u64 armv8pmu_read_hw_counter(struct perf_event *event) in armv8pmu_read_hw_counter() argument
547 int idx = event->hw.idx; in armv8pmu_read_hw_counter()
550 if (armv8pmu_event_is_chained(event)) in armv8pmu_read_hw_counter()
561 static bool armv8pmu_event_needs_bias(struct perf_event *event) in armv8pmu_event_needs_bias() argument
563 struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); in armv8pmu_event_needs_bias()
564 struct hw_perf_event *hwc = &event->hw; in armv8pmu_event_needs_bias()
567 if (armv8pmu_event_is_64bit(event)) in armv8pmu_event_needs_bias()
577 static u64 armv8pmu_bias_long_counter(struct perf_event *event, u64 value) in armv8pmu_bias_long_counter() argument
579 if (armv8pmu_event_needs_bias(event)) in armv8pmu_bias_long_counter()
585 static u64 armv8pmu_unbias_long_counter(struct perf_event *event, u64 value) in armv8pmu_unbias_long_counter() argument
587 if (armv8pmu_event_needs_bias(event)) in armv8pmu_unbias_long_counter()
593 static u64 armv8pmu_read_counter(struct perf_event *event) in armv8pmu_read_counter() argument
595 struct hw_perf_event *hwc = &event->hw; in armv8pmu_read_counter()
604 value = armv8pmu_read_hw_counter(event); in armv8pmu_read_counter()
606 return armv8pmu_unbias_long_counter(event, value); in armv8pmu_read_counter()
614 static void armv8pmu_write_hw_counter(struct perf_event *event, in armv8pmu_write_hw_counter() argument
617 int idx = event->hw.idx; in armv8pmu_write_hw_counter()
619 if (armv8pmu_event_is_chained(event)) { in armv8pmu_write_hw_counter()
627 static void armv8pmu_write_counter(struct perf_event *event, u64 value) in armv8pmu_write_counter() argument
629 struct hw_perf_event *hwc = &event->hw; in armv8pmu_write_counter()
632 value = armv8pmu_bias_long_counter(event, value); in armv8pmu_write_counter()
639 armv8pmu_write_hw_counter(event, value); in armv8pmu_write_counter()
656 static void armv8pmu_write_event_type(struct perf_event *event) in armv8pmu_write_event_type() argument
658 struct hw_perf_event *hwc = &event->hw; in armv8pmu_write_event_type()
666 if (armv8pmu_event_is_chained(event)) { in armv8pmu_write_event_type()
682 static u64 armv8pmu_event_cnten_mask(struct perf_event *event) in armv8pmu_event_cnten_mask() argument
684 int counter = event->hw.idx; in armv8pmu_event_cnten_mask()
687 if (armv8pmu_event_is_chained(event)) in armv8pmu_event_cnten_mask()
702 static void armv8pmu_enable_event_counter(struct perf_event *event) in armv8pmu_enable_event_counter() argument
704 struct perf_event_attr *attr = &event->attr; in armv8pmu_enable_event_counter()
705 u64 mask = armv8pmu_event_cnten_mask(event); in armv8pmu_enable_event_counter()
724 static void armv8pmu_disable_event_counter(struct perf_event *event) in armv8pmu_disable_event_counter() argument
726 struct perf_event_attr *attr = &event->attr; in armv8pmu_disable_event_counter()
727 u64 mask = armv8pmu_event_cnten_mask(event); in armv8pmu_disable_event_counter()
741 static void armv8pmu_enable_event_irq(struct perf_event *event) in armv8pmu_enable_event_irq() argument
743 armv8pmu_enable_intens(BIT(event->hw.idx)); in armv8pmu_enable_event_irq()
755 static void armv8pmu_disable_event_irq(struct perf_event *event) in armv8pmu_disable_event_irq() argument
757 armv8pmu_disable_intens(BIT(event->hw.idx)); in armv8pmu_disable_event_irq()
823 static void armv8pmu_enable_event(struct perf_event *event) in armv8pmu_enable_event() argument
825 armv8pmu_write_event_type(event); in armv8pmu_enable_event()
826 armv8pmu_enable_event_irq(event); in armv8pmu_enable_event()
827 armv8pmu_enable_event_counter(event); in armv8pmu_enable_event()
830 static void armv8pmu_disable_event(struct perf_event *event) in armv8pmu_disable_event() argument
832 armv8pmu_disable_event_counter(event); in armv8pmu_disable_event()
833 armv8pmu_disable_event_irq(event); in armv8pmu_disable_event()
872 struct perf_event *event, in read_branch_records() argument
877 brbe_read_filtered_entries(branch_stack, event); in read_branch_records()
878 perf_sample_save_brstack(data, event, branch_stack, NULL); in read_branch_records()
911 struct perf_event *event = cpuc->events[idx]; in armv8pmu_handle_irq() local
915 if (!event) in armv8pmu_handle_irq()
925 hwc = &event->hw; in armv8pmu_handle_irq()
926 armpmu_event_update(event); in armv8pmu_handle_irq()
928 if (!armpmu_event_set_period(event)) in armv8pmu_handle_irq()
931 if (has_branch_stack(event)) in armv8pmu_handle_irq()
932 read_branch_records(cpuc, event, &data); in armv8pmu_handle_irq()
939 perf_event_overflow(event, &data, regs); in armv8pmu_handle_irq()
982 struct perf_event *event) in armv8pmu_get_event_idx() argument
984 struct arm_pmu *cpu_pmu = to_arm_pmu(event->pmu); in armv8pmu_get_event_idx()
985 struct hw_perf_event *hwc = &event->hw; in armv8pmu_get_event_idx()
990 !armv8pmu_event_get_threshold(&event->attr) && !has_branch_stack(event)) { in armv8pmu_get_event_idx()
993 else if (armv8pmu_event_is_64bit(event) && in armv8pmu_get_event_idx()
994 armv8pmu_event_want_user_access(event) && in armv8pmu_get_event_idx()
1005 !armv8pmu_event_get_threshold(&event->attr) && in armv8pmu_get_event_idx()
1007 !armv8pmu_event_want_user_access(event)) { in armv8pmu_get_event_idx()
1015 if (armv8pmu_event_is_chained(event)) in armv8pmu_get_event_idx()
1022 struct perf_event *event) in armv8pmu_clear_event_idx() argument
1024 int idx = event->hw.idx; in armv8pmu_clear_event_idx()
1027 if (armv8pmu_event_is_chained(event)) in armv8pmu_clear_event_idx()
1031 static int armv8pmu_user_event_idx(struct perf_event *event) in armv8pmu_user_event_idx() argument
1033 if (!sysctl_perf_user_access || !armv8pmu_event_has_user_read(event)) in armv8pmu_user_event_idx()
1036 return event->hw.idx + 1; in armv8pmu_user_event_idx()
1055 static int armv8pmu_set_event_filter(struct hw_perf_event *event, in armv8pmu_set_event_filter() argument
1123 event->config_base = config_base; in armv8pmu_set_event_filter()
1161 struct perf_event *event) in __armv8_pmuv3_map_event_id() argument
1163 if (event->attr.type == PERF_TYPE_HARDWARE && in __armv8_pmuv3_map_event_id()
1164 event->attr.config == PERF_COUNT_HW_BRANCH_INSTRUCTIONS) { in __armv8_pmuv3_map_event_id()
1177 return armpmu_map_event(event, &armv8_pmuv3_perf_map, in __armv8_pmuv3_map_event_id()
1182 static int __armv8_pmuv3_map_event(struct perf_event *event, in __armv8_pmuv3_map_event() argument
1191 struct arm_pmu *armpmu = to_arm_pmu(event->pmu); in __armv8_pmuv3_map_event()
1193 hw_event_id = __armv8_pmuv3_map_event_id(armpmu, event); in __armv8_pmuv3_map_event()
1203 if (armv8pmu_event_is_64bit(event)) in __armv8_pmuv3_map_event()
1204 event->hw.flags |= ARMPMU_EVT_64BIT; in __armv8_pmuv3_map_event()
1214 if (armv8pmu_event_want_user_access(event)) { in __armv8_pmuv3_map_event()
1215 if (!(event->attach_state & PERF_ATTACH_TASK)) in __armv8_pmuv3_map_event()
1217 if (armv8pmu_event_is_64bit(event) && in __armv8_pmuv3_map_event()
1222 event->hw.flags |= PERF_EVENT_FLAG_USER_READ_CNT; in __armv8_pmuv3_map_event()
1231 return armpmu_map_event(event, extra_event_map, extra_cache_map, in __armv8_pmuv3_map_event()
1235 static int armv8_pmuv3_map_event(struct perf_event *event) in armv8_pmuv3_map_event() argument
1237 return __armv8_pmuv3_map_event(event, NULL, NULL); in armv8_pmuv3_map_event()
1240 static int armv8_a53_map_event(struct perf_event *event) in armv8_a53_map_event() argument
1242 return __armv8_pmuv3_map_event(event, NULL, &armv8_a53_perf_cache_map); in armv8_a53_map_event()
1245 static int armv8_a57_map_event(struct perf_event *event) in armv8_a57_map_event() argument
1247 return __armv8_pmuv3_map_event(event, NULL, &armv8_a57_perf_cache_map); in armv8_a57_map_event()
1250 static int armv8_a73_map_event(struct perf_event *event) in armv8_a73_map_event() argument
1252 return __armv8_pmuv3_map_event(event, NULL, &armv8_a73_perf_cache_map); in armv8_a73_map_event()
1255 static int armv8_thunder_map_event(struct perf_event *event) in armv8_thunder_map_event() argument
1257 return __armv8_pmuv3_map_event(event, NULL, in armv8_thunder_map_event()
1261 static int armv8_vulcan_map_event(struct perf_event *event) in armv8_vulcan_map_event() argument
1263 return __armv8_pmuv3_map_event(event, NULL, in armv8_vulcan_map_event()
1398 int (*map_event)(struct perf_event *event)) in armv8_pmu_init() argument
1556 void arch_perf_update_userpage(struct perf_event *event, in device_initcall()
1566 userpg->cap_user_rdpmc = armv8pmu_event_has_user_read(event); in device_initcall()
1569 if (event->hw.flags & ARMPMU_EVT_64BIT) in device_initcall()