Lines Matching refs:event
177 DSU_FORMAT_ATTR(event, "config:0-31"),
249 static inline u64 dsu_pmu_read_counter(struct perf_event *event) in dsu_pmu_read_counter() argument
253 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_read_counter()
254 int idx = event->hw.idx; in dsu_pmu_read_counter()
261 dev_err(event->pmu->dev, in dsu_pmu_read_counter()
276 static void dsu_pmu_write_counter(struct perf_event *event, u64 val) in dsu_pmu_write_counter() argument
279 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_write_counter()
280 int idx = event->hw.idx; in dsu_pmu_write_counter()
287 dev_err(event->pmu->dev, in dsu_pmu_write_counter()
301 struct perf_event *event) in dsu_pmu_get_event_idx() argument
304 unsigned long evtype = event->attr.config; in dsu_pmu_get_event_idx()
305 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_get_event_idx()
334 struct perf_event *event) in dsu_pmu_set_event() argument
336 int idx = event->hw.idx; in dsu_pmu_set_event()
340 dev_err(event->pmu->dev, in dsu_pmu_set_event()
346 __dsu_pmu_set_event(idx, event->hw.config_base); in dsu_pmu_set_event()
350 static void dsu_pmu_event_update(struct perf_event *event) in dsu_pmu_event_update() argument
352 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_event_update()
358 new_count = dsu_pmu_read_counter(event); in dsu_pmu_event_update()
362 local64_add(delta, &event->count); in dsu_pmu_event_update()
365 static void dsu_pmu_read(struct perf_event *event) in dsu_pmu_read() argument
367 dsu_pmu_event_update(event); in dsu_pmu_read()
382 static void dsu_pmu_set_event_period(struct perf_event *event) in dsu_pmu_set_event_period() argument
384 int idx = event->hw.idx; in dsu_pmu_set_event_period()
387 local64_set(&event->hw.prev_count, val); in dsu_pmu_set_event_period()
388 dsu_pmu_write_counter(event, val); in dsu_pmu_set_event_period()
404 struct perf_event *event = hw_events->events[i]; in dsu_pmu_handle_irq() local
406 if (!event) in dsu_pmu_handle_irq()
408 dsu_pmu_event_update(event); in dsu_pmu_handle_irq()
409 dsu_pmu_set_event_period(event); in dsu_pmu_handle_irq()
416 static void dsu_pmu_start(struct perf_event *event, int pmu_flags) in dsu_pmu_start() argument
418 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_start()
422 WARN_ON(!(event->hw.state & PERF_HES_UPTODATE)); in dsu_pmu_start()
423 dsu_pmu_set_event_period(event); in dsu_pmu_start()
424 if (event->hw.idx != DSU_PMU_IDX_CYCLE_COUNTER) in dsu_pmu_start()
425 dsu_pmu_set_event(dsu_pmu, event); in dsu_pmu_start()
426 event->hw.state = 0; in dsu_pmu_start()
427 dsu_pmu_enable_counter(dsu_pmu, event->hw.idx); in dsu_pmu_start()
430 static void dsu_pmu_stop(struct perf_event *event, int pmu_flags) in dsu_pmu_stop() argument
432 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_stop()
434 if (event->hw.state & PERF_HES_STOPPED) in dsu_pmu_stop()
436 dsu_pmu_disable_counter(dsu_pmu, event->hw.idx); in dsu_pmu_stop()
437 dsu_pmu_event_update(event); in dsu_pmu_stop()
438 event->hw.state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; in dsu_pmu_stop()
441 static int dsu_pmu_add(struct perf_event *event, int flags) in dsu_pmu_add() argument
443 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_add()
445 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_add()
452 idx = dsu_pmu_get_event_idx(hw_events, event); in dsu_pmu_add()
457 hw_events->events[idx] = event; in dsu_pmu_add()
461 dsu_pmu_start(event, PERF_EF_RELOAD); in dsu_pmu_add()
463 perf_event_update_userpage(event); in dsu_pmu_add()
467 static void dsu_pmu_del(struct perf_event *event, int flags) in dsu_pmu_del() argument
469 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_del()
471 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_del()
474 dsu_pmu_stop(event, PERF_EF_UPDATE); in dsu_pmu_del()
477 perf_event_update_userpage(event); in dsu_pmu_del()
512 struct perf_event *event) in dsu_pmu_validate_event() argument
514 if (is_software_event(event)) in dsu_pmu_validate_event()
517 if (event->pmu != pmu) in dsu_pmu_validate_event()
519 return dsu_pmu_get_event_idx(hw_events, event) >= 0; in dsu_pmu_validate_event()
526 static bool dsu_pmu_validate_group(struct perf_event *event) in dsu_pmu_validate_group() argument
528 struct perf_event *sibling, *leader = event->group_leader; in dsu_pmu_validate_group()
531 if (event->group_leader == event) in dsu_pmu_validate_group()
535 if (!dsu_pmu_validate_event(event->pmu, &fake_hw, leader)) in dsu_pmu_validate_group()
538 if (!dsu_pmu_validate_event(event->pmu, &fake_hw, sibling)) in dsu_pmu_validate_group()
541 return dsu_pmu_validate_event(event->pmu, &fake_hw, event); in dsu_pmu_validate_group()
544 static int dsu_pmu_event_init(struct perf_event *event) in dsu_pmu_event_init() argument
546 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_event_init()
548 if (event->attr.type != event->pmu->type) in dsu_pmu_event_init()
552 if (is_sampling_event(event)) { in dsu_pmu_event_init()
558 if (event->cpu < 0 || event->attach_state & PERF_ATTACH_TASK) { in dsu_pmu_event_init()
563 if (has_branch_stack(event)) { in dsu_pmu_event_init()
568 if (!cpumask_test_cpu(event->cpu, &dsu_pmu->associated_cpus)) { in dsu_pmu_event_init()
579 event->cpu = cpumask_first(&dsu_pmu->active_cpu); in dsu_pmu_event_init()
580 if (event->cpu >= nr_cpu_ids) in dsu_pmu_event_init()
582 if (!dsu_pmu_validate_group(event)) in dsu_pmu_event_init()
585 event->hw.config_base = event->attr.config; in dsu_pmu_event_init()