Lines Matching refs:event

144 static inline u32 get_event_type(struct perf_event *event)  in get_event_type()  argument
146 return (event->attr.config) & L3_EVTYPE_MASK; in get_event_type()
149 static inline bool event_uses_long_counter(struct perf_event *event) in event_uses_long_counter() argument
151 return !!(event->attr.config & BIT_ULL(L3_EVENT_LC_BIT)); in event_uses_long_counter()
154 static inline int event_num_counters(struct perf_event *event) in event_num_counters() argument
156 return event_uses_long_counter(event) ? 2 : 1; in event_num_counters()
183 void (*start)(struct perf_event *event);
185 void (*stop)(struct perf_event *event, int flags);
187 void (*update)(struct perf_event *event);
201 static void qcom_l3_cache__64bit_counter_start(struct perf_event *event) in qcom_l3_cache__64bit_counter_start() argument
203 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__64bit_counter_start()
204 int idx = event->hw.idx; in qcom_l3_cache__64bit_counter_start()
205 u32 evsel = get_event_type(event); in qcom_l3_cache__64bit_counter_start()
214 local64_set(&event->hw.prev_count, 0); in qcom_l3_cache__64bit_counter_start()
232 static void qcom_l3_cache__64bit_counter_stop(struct perf_event *event, in qcom_l3_cache__64bit_counter_stop() argument
235 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__64bit_counter_stop()
236 int idx = event->hw.idx; in qcom_l3_cache__64bit_counter_stop()
247 static void qcom_l3_cache__64bit_counter_update(struct perf_event *event) in qcom_l3_cache__64bit_counter_update() argument
249 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__64bit_counter_update()
250 int idx = event->hw.idx; in qcom_l3_cache__64bit_counter_update()
255 prev = local64_read(&event->hw.prev_count); in qcom_l3_cache__64bit_counter_update()
261 } while (local64_cmpxchg(&event->hw.prev_count, prev, new) != prev); in qcom_l3_cache__64bit_counter_update()
263 local64_add(new - prev, &event->count); in qcom_l3_cache__64bit_counter_update()
282 static void qcom_l3_cache__32bit_counter_start(struct perf_event *event) in qcom_l3_cache__32bit_counter_start() argument
284 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__32bit_counter_start()
285 int idx = event->hw.idx; in qcom_l3_cache__32bit_counter_start()
286 u32 evsel = get_event_type(event); in qcom_l3_cache__32bit_counter_start()
293 local64_set(&event->hw.prev_count, 0); in qcom_l3_cache__32bit_counter_start()
307 static void qcom_l3_cache__32bit_counter_stop(struct perf_event *event, in qcom_l3_cache__32bit_counter_stop() argument
310 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__32bit_counter_stop()
311 int idx = event->hw.idx; in qcom_l3_cache__32bit_counter_stop()
324 static void qcom_l3_cache__32bit_counter_update(struct perf_event *event) in qcom_l3_cache__32bit_counter_update() argument
326 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__32bit_counter_update()
327 int idx = event->hw.idx; in qcom_l3_cache__32bit_counter_update()
331 prev = local64_read(&event->hw.prev_count); in qcom_l3_cache__32bit_counter_update()
333 } while (local64_cmpxchg(&event->hw.prev_count, prev, new) != prev); in qcom_l3_cache__32bit_counter_update()
335 local64_add(new - prev, &event->count); in qcom_l3_cache__32bit_counter_update()
346 const struct l3cache_event_ops *l3cache_event_get_ops(struct perf_event *event) in l3cache_event_get_ops() argument
348 if (event_uses_long_counter(event)) in l3cache_event_get_ops()
410 struct perf_event *event; in qcom_l3_cache__handle_irq() local
413 event = l3pmu->events[idx]; in qcom_l3_cache__handle_irq()
414 if (!event) in qcom_l3_cache__handle_irq()
423 ops = l3cache_event_get_ops(event); in qcom_l3_cache__handle_irq()
424 ops->update(event); in qcom_l3_cache__handle_irq()
459 static bool qcom_l3_cache__validate_event_group(struct perf_event *event) in qcom_l3_cache__validate_event_group() argument
461 struct perf_event *leader = event->group_leader; in qcom_l3_cache__validate_event_group()
465 if (leader->pmu != event->pmu && !is_software_event(leader)) in qcom_l3_cache__validate_event_group()
468 counters = event_num_counters(event); in qcom_l3_cache__validate_event_group()
474 if (sibling->pmu != event->pmu) in qcom_l3_cache__validate_event_group()
486 static int qcom_l3_cache__event_init(struct perf_event *event) in qcom_l3_cache__event_init() argument
488 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__event_init()
489 struct hw_perf_event *hwc = &event->hw; in qcom_l3_cache__event_init()
494 if (event->attr.type != event->pmu->type) in qcom_l3_cache__event_init()
500 if (event->attr.exclude_user || event->attr.exclude_kernel || in qcom_l3_cache__event_init()
501 event->attr.exclude_hv || event->attr.exclude_idle) in qcom_l3_cache__event_init()
514 if (event->cpu < 0) in qcom_l3_cache__event_init()
518 if (!qcom_l3_cache__validate_event_group(event)) in qcom_l3_cache__event_init()
534 event->cpu = cpumask_first(&l3pmu->cpumask); in qcom_l3_cache__event_init()
539 static void qcom_l3_cache__event_start(struct perf_event *event, int flags) in qcom_l3_cache__event_start() argument
541 struct hw_perf_event *hwc = &event->hw; in qcom_l3_cache__event_start()
542 const struct l3cache_event_ops *ops = l3cache_event_get_ops(event); in qcom_l3_cache__event_start()
545 ops->start(event); in qcom_l3_cache__event_start()
548 static void qcom_l3_cache__event_stop(struct perf_event *event, int flags) in qcom_l3_cache__event_stop() argument
550 struct hw_perf_event *hwc = &event->hw; in qcom_l3_cache__event_stop()
551 const struct l3cache_event_ops *ops = l3cache_event_get_ops(event); in qcom_l3_cache__event_stop()
556 ops->stop(event, flags); in qcom_l3_cache__event_stop()
558 ops->update(event); in qcom_l3_cache__event_stop()
562 static int qcom_l3_cache__event_add(struct perf_event *event, int flags) in qcom_l3_cache__event_add() argument
564 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__event_add()
565 struct hw_perf_event *hwc = &event->hw; in qcom_l3_cache__event_add()
566 int order = event_uses_long_counter(event) ? 1 : 0; in qcom_l3_cache__event_add()
579 l3pmu->events[idx] = event; in qcom_l3_cache__event_add()
582 qcom_l3_cache__event_start(event, 0); in qcom_l3_cache__event_add()
585 perf_event_update_userpage(event); in qcom_l3_cache__event_add()
590 static void qcom_l3_cache__event_del(struct perf_event *event, int flags) in qcom_l3_cache__event_del() argument
592 struct l3cache_pmu *l3pmu = to_l3cache_pmu(event->pmu); in qcom_l3_cache__event_del()
593 struct hw_perf_event *hwc = &event->hw; in qcom_l3_cache__event_del()
594 int order = event_uses_long_counter(event) ? 1 : 0; in qcom_l3_cache__event_del()
597 qcom_l3_cache__event_stop(event, flags | PERF_EF_UPDATE); in qcom_l3_cache__event_del()
602 perf_event_update_userpage(event); in qcom_l3_cache__event_del()
605 static void qcom_l3_cache__event_read(struct perf_event *event) in qcom_l3_cache__event_read() argument
607 const struct l3cache_event_ops *ops = l3cache_event_get_ops(event); in qcom_l3_cache__event_read()
609 ops->update(event); in qcom_l3_cache__event_read()
643 L3CACHE_PMU_FORMAT_ATTR(event, "config:0-7"),