Lines Matching refs:event
179 DSU_FORMAT_ATTR(event, "config:0-31"),
251 static inline u64 dsu_pmu_read_counter(struct perf_event *event) in dsu_pmu_read_counter() argument
255 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_read_counter()
256 int idx = event->hw.idx; in dsu_pmu_read_counter()
263 dev_err(event->pmu->dev, in dsu_pmu_read_counter()
278 static void dsu_pmu_write_counter(struct perf_event *event, u64 val) in dsu_pmu_write_counter() argument
281 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_write_counter()
282 int idx = event->hw.idx; in dsu_pmu_write_counter()
289 dev_err(event->pmu->dev, in dsu_pmu_write_counter()
303 struct perf_event *event) in dsu_pmu_get_event_idx() argument
306 unsigned long evtype = event->attr.config; in dsu_pmu_get_event_idx()
307 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_get_event_idx()
336 struct perf_event *event) in dsu_pmu_set_event() argument
338 int idx = event->hw.idx; in dsu_pmu_set_event()
342 dev_err(event->pmu->dev, in dsu_pmu_set_event()
348 __dsu_pmu_set_event(idx, event->hw.config_base); in dsu_pmu_set_event()
352 static void dsu_pmu_event_update(struct perf_event *event) in dsu_pmu_event_update() argument
354 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_event_update()
360 new_count = dsu_pmu_read_counter(event); in dsu_pmu_event_update()
364 local64_add(delta, &event->count); in dsu_pmu_event_update()
367 static void dsu_pmu_read(struct perf_event *event) in dsu_pmu_read() argument
369 dsu_pmu_event_update(event); in dsu_pmu_read()
384 static void dsu_pmu_set_event_period(struct perf_event *event) in dsu_pmu_set_event_period() argument
386 int idx = event->hw.idx; in dsu_pmu_set_event_period()
389 local64_set(&event->hw.prev_count, val); in dsu_pmu_set_event_period()
390 dsu_pmu_write_counter(event, val); in dsu_pmu_set_event_period()
406 struct perf_event *event = hw_events->events[i]; in dsu_pmu_handle_irq() local
408 if (!event) in dsu_pmu_handle_irq()
410 dsu_pmu_event_update(event); in dsu_pmu_handle_irq()
411 dsu_pmu_set_event_period(event); in dsu_pmu_handle_irq()
418 static void dsu_pmu_start(struct perf_event *event, int pmu_flags) in dsu_pmu_start() argument
420 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_start()
424 WARN_ON(!(event->hw.state & PERF_HES_UPTODATE)); in dsu_pmu_start()
425 dsu_pmu_set_event_period(event); in dsu_pmu_start()
426 if (event->hw.idx != DSU_PMU_IDX_CYCLE_COUNTER) in dsu_pmu_start()
427 dsu_pmu_set_event(dsu_pmu, event); in dsu_pmu_start()
428 event->hw.state = 0; in dsu_pmu_start()
429 dsu_pmu_enable_counter(dsu_pmu, event->hw.idx); in dsu_pmu_start()
432 static void dsu_pmu_stop(struct perf_event *event, int pmu_flags) in dsu_pmu_stop() argument
434 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_stop()
436 if (event->hw.state & PERF_HES_STOPPED) in dsu_pmu_stop()
438 dsu_pmu_disable_counter(dsu_pmu, event->hw.idx); in dsu_pmu_stop()
439 dsu_pmu_event_update(event); in dsu_pmu_stop()
440 event->hw.state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; in dsu_pmu_stop()
443 static int dsu_pmu_add(struct perf_event *event, int flags) in dsu_pmu_add() argument
445 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_add()
447 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_add()
454 idx = dsu_pmu_get_event_idx(hw_events, event); in dsu_pmu_add()
459 hw_events->events[idx] = event; in dsu_pmu_add()
463 dsu_pmu_start(event, PERF_EF_RELOAD); in dsu_pmu_add()
465 perf_event_update_userpage(event); in dsu_pmu_add()
469 static void dsu_pmu_del(struct perf_event *event, int flags) in dsu_pmu_del() argument
471 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_del()
473 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_del()
476 dsu_pmu_stop(event, PERF_EF_UPDATE); in dsu_pmu_del()
479 perf_event_update_userpage(event); in dsu_pmu_del()
514 struct perf_event *event) in dsu_pmu_validate_event() argument
516 if (is_software_event(event)) in dsu_pmu_validate_event()
519 if (event->pmu != pmu) in dsu_pmu_validate_event()
521 return dsu_pmu_get_event_idx(hw_events, event) >= 0; in dsu_pmu_validate_event()
528 static bool dsu_pmu_validate_group(struct perf_event *event) in dsu_pmu_validate_group() argument
530 struct perf_event *sibling, *leader = event->group_leader; in dsu_pmu_validate_group()
533 if (event->group_leader == event) in dsu_pmu_validate_group()
537 if (!dsu_pmu_validate_event(event->pmu, &fake_hw, leader)) in dsu_pmu_validate_group()
540 if (!dsu_pmu_validate_event(event->pmu, &fake_hw, sibling)) in dsu_pmu_validate_group()
543 return dsu_pmu_validate_event(event->pmu, &fake_hw, event); in dsu_pmu_validate_group()
546 static int dsu_pmu_event_init(struct perf_event *event) in dsu_pmu_event_init() argument
548 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_event_init()
550 if (event->attr.type != event->pmu->type) in dsu_pmu_event_init()
554 if (is_sampling_event(event)) { in dsu_pmu_event_init()
560 if (event->cpu < 0 || event->attach_state & PERF_ATTACH_TASK) { in dsu_pmu_event_init()
565 if (has_branch_stack(event) || in dsu_pmu_event_init()
566 event->attr.exclude_user || in dsu_pmu_event_init()
567 event->attr.exclude_kernel || in dsu_pmu_event_init()
568 event->attr.exclude_hv || in dsu_pmu_event_init()
569 event->attr.exclude_idle || in dsu_pmu_event_init()
570 event->attr.exclude_host || in dsu_pmu_event_init()
571 event->attr.exclude_guest) { in dsu_pmu_event_init()
576 if (!cpumask_test_cpu(event->cpu, &dsu_pmu->associated_cpus)) { in dsu_pmu_event_init()
587 event->cpu = cpumask_first(&dsu_pmu->active_cpu); in dsu_pmu_event_init()
588 if (event->cpu >= nr_cpu_ids) in dsu_pmu_event_init()
590 if (!dsu_pmu_validate_group(event)) in dsu_pmu_event_init()
593 event->hw.config_base = event->attr.config; in dsu_pmu_event_init()