Lines Matching refs:event
27 struct perf_event *event[MAX_HWEVENTS]; member
179 static void fsl_emb_pmu_read(struct perf_event *event) in fsl_emb_pmu_read() argument
183 if (event->hw.state & PERF_HES_STOPPED) in fsl_emb_pmu_read()
192 prev = local64_read(&event->hw.prev_count); in fsl_emb_pmu_read()
194 val = read_pmc(event->hw.idx); in fsl_emb_pmu_read()
195 } while (local64_cmpxchg(&event->hw.prev_count, prev, val) != prev); in fsl_emb_pmu_read()
199 local64_add(delta, &event->count); in fsl_emb_pmu_read()
200 local64_sub(delta, &event->hw.period_left); in fsl_emb_pmu_read()
272 struct perf_event *event; in collect_events() local
280 list_for_each_entry(event, &group->sibling_list, group_entry) { in collect_events()
281 if (!is_software_event(event) && in collect_events()
282 event->state != PERF_EVENT_STATE_OFF) { in collect_events()
285 ctrs[n] = event; in collect_events()
293 static int fsl_emb_pmu_add(struct perf_event *event, int flags) in fsl_emb_pmu_add() argument
301 perf_pmu_disable(event->pmu); in fsl_emb_pmu_add()
304 if (event->hw.config & FSL_EMB_EVENT_RESTRICTED) in fsl_emb_pmu_add()
312 if (cpuhw->event[i]) in fsl_emb_pmu_add()
321 event->hw.idx = i; in fsl_emb_pmu_add()
322 cpuhw->event[i] = event; in fsl_emb_pmu_add()
326 if (event->hw.sample_period) { in fsl_emb_pmu_add()
327 s64 left = local64_read(&event->hw.period_left); in fsl_emb_pmu_add()
331 local64_set(&event->hw.prev_count, val); in fsl_emb_pmu_add()
334 event->hw.state = PERF_HES_STOPPED | PERF_HES_UPTODATE; in fsl_emb_pmu_add()
337 event->hw.state &= ~(PERF_HES_STOPPED | PERF_HES_UPTODATE); in fsl_emb_pmu_add()
341 perf_event_update_userpage(event); in fsl_emb_pmu_add()
343 write_pmlcb(i, event->hw.config >> 32); in fsl_emb_pmu_add()
344 write_pmlca(i, event->hw.config_base); in fsl_emb_pmu_add()
349 perf_pmu_enable(event->pmu); in fsl_emb_pmu_add()
354 static void fsl_emb_pmu_del(struct perf_event *event, int flags) in fsl_emb_pmu_del() argument
357 int i = event->hw.idx; in fsl_emb_pmu_del()
359 perf_pmu_disable(event->pmu); in fsl_emb_pmu_del()
363 fsl_emb_pmu_read(event); in fsl_emb_pmu_del()
367 WARN_ON(event != cpuhw->event[event->hw.idx]); in fsl_emb_pmu_del()
373 cpuhw->event[i] = NULL; in fsl_emb_pmu_del()
374 event->hw.idx = -1; in fsl_emb_pmu_del()
387 perf_pmu_enable(event->pmu); in fsl_emb_pmu_del()
391 static void fsl_emb_pmu_start(struct perf_event *event, int ef_flags) in fsl_emb_pmu_start() argument
397 if (event->hw.idx < 0 || !event->hw.sample_period) in fsl_emb_pmu_start()
400 if (!(event->hw.state & PERF_HES_STOPPED)) in fsl_emb_pmu_start()
404 WARN_ON_ONCE(!(event->hw.state & PERF_HES_UPTODATE)); in fsl_emb_pmu_start()
407 perf_pmu_disable(event->pmu); in fsl_emb_pmu_start()
409 event->hw.state = 0; in fsl_emb_pmu_start()
410 left = local64_read(&event->hw.period_left); in fsl_emb_pmu_start()
414 write_pmc(event->hw.idx, val); in fsl_emb_pmu_start()
416 perf_event_update_userpage(event); in fsl_emb_pmu_start()
417 perf_pmu_enable(event->pmu); in fsl_emb_pmu_start()
421 static void fsl_emb_pmu_stop(struct perf_event *event, int ef_flags) in fsl_emb_pmu_stop() argument
425 if (event->hw.idx < 0 || !event->hw.sample_period) in fsl_emb_pmu_stop()
428 if (event->hw.state & PERF_HES_STOPPED) in fsl_emb_pmu_stop()
432 perf_pmu_disable(event->pmu); in fsl_emb_pmu_stop()
434 fsl_emb_pmu_read(event); in fsl_emb_pmu_stop()
435 event->hw.state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; in fsl_emb_pmu_stop()
436 write_pmc(event->hw.idx, 0); in fsl_emb_pmu_stop()
438 perf_event_update_userpage(event); in fsl_emb_pmu_stop()
439 perf_pmu_enable(event->pmu); in fsl_emb_pmu_stop()
446 static void hw_perf_event_destroy(struct perf_event *event) in hw_perf_event_destroy() argument
486 static int fsl_emb_pmu_event_init(struct perf_event *event) in fsl_emb_pmu_event_init() argument
501 switch (event->attr.type) { in fsl_emb_pmu_event_init()
503 ev = event->attr.config; in fsl_emb_pmu_event_init()
510 err = hw_perf_cache_event(event->attr.config, &ev); in fsl_emb_pmu_event_init()
516 ev = event->attr.config; in fsl_emb_pmu_event_init()
523 event->hw.config = ppmu->xlate_event(ev); in fsl_emb_pmu_event_init()
524 if (!(event->hw.config & FSL_EMB_EVENT_VALID)) in fsl_emb_pmu_event_init()
533 if (event->group_leader != event) { in fsl_emb_pmu_event_init()
534 n = collect_events(event->group_leader, in fsl_emb_pmu_event_init()
540 if (event->hw.config & FSL_EMB_EVENT_RESTRICTED) { in fsl_emb_pmu_event_init()
551 event->hw.idx = -1; in fsl_emb_pmu_event_init()
553 event->hw.config_base = PMLCA_CE | PMLCA_FCM1 | in fsl_emb_pmu_event_init()
556 if (event->attr.exclude_user) in fsl_emb_pmu_event_init()
557 event->hw.config_base |= PMLCA_FCU; in fsl_emb_pmu_event_init()
558 if (event->attr.exclude_kernel) in fsl_emb_pmu_event_init()
559 event->hw.config_base |= PMLCA_FCS; in fsl_emb_pmu_event_init()
560 if (event->attr.exclude_idle) in fsl_emb_pmu_event_init()
563 event->hw.last_period = event->hw.sample_period; in fsl_emb_pmu_event_init()
564 local64_set(&event->hw.period_left, event->hw.last_period); in fsl_emb_pmu_event_init()
585 event->destroy = hw_perf_event_destroy; in fsl_emb_pmu_event_init()
606 static void record_and_restart(struct perf_event *event, unsigned long val, in record_and_restart() argument
609 u64 period = event->hw.sample_period; in record_and_restart()
613 if (event->hw.state & PERF_HES_STOPPED) { in record_and_restart()
614 write_pmc(event->hw.idx, 0); in record_and_restart()
619 prev = local64_read(&event->hw.prev_count); in record_and_restart()
621 local64_add(delta, &event->count); in record_and_restart()
628 left = local64_read(&event->hw.period_left) - delta; in record_and_restart()
635 event->hw.last_period = event->hw.sample_period; in record_and_restart()
641 write_pmc(event->hw.idx, val); in record_and_restart()
642 local64_set(&event->hw.prev_count, val); in record_and_restart()
643 local64_set(&event->hw.period_left, left); in record_and_restart()
644 perf_event_update_userpage(event); in record_and_restart()
652 perf_sample_data_init(&data, 0, event->hw.last_period); in record_and_restart()
654 if (perf_event_overflow(event, &data, regs)) in record_and_restart()
655 fsl_emb_pmu_stop(event, 0); in record_and_restart()
663 struct perf_event *event; in perf_event_interrupt() local
675 event = cpuhw->event[i]; in perf_event_interrupt()
679 if (event) { in perf_event_interrupt()
682 record_and_restart(event, val, regs); in perf_event_interrupt()