Lines Matching refs:event
176 DSU_FORMAT_ATTR(event, "config:0-31"),
248 static inline u64 dsu_pmu_read_counter(struct perf_event *event) in dsu_pmu_read_counter() argument
252 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_read_counter()
253 int idx = event->hw.idx; in dsu_pmu_read_counter()
260 dev_err(event->pmu->dev, in dsu_pmu_read_counter()
275 static void dsu_pmu_write_counter(struct perf_event *event, u64 val) in dsu_pmu_write_counter() argument
278 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_write_counter()
279 int idx = event->hw.idx; in dsu_pmu_write_counter()
286 dev_err(event->pmu->dev, in dsu_pmu_write_counter()
300 struct perf_event *event) in dsu_pmu_get_event_idx() argument
303 unsigned long evtype = event->attr.config; in dsu_pmu_get_event_idx()
304 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_get_event_idx()
333 struct perf_event *event) in dsu_pmu_set_event() argument
335 int idx = event->hw.idx; in dsu_pmu_set_event()
339 dev_err(event->pmu->dev, in dsu_pmu_set_event()
345 __dsu_pmu_set_event(idx, event->hw.config_base); in dsu_pmu_set_event()
349 static void dsu_pmu_event_update(struct perf_event *event) in dsu_pmu_event_update() argument
351 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_event_update()
357 new_count = dsu_pmu_read_counter(event); in dsu_pmu_event_update()
361 local64_add(delta, &event->count); in dsu_pmu_event_update()
364 static void dsu_pmu_read(struct perf_event *event) in dsu_pmu_read() argument
366 dsu_pmu_event_update(event); in dsu_pmu_read()
381 static void dsu_pmu_set_event_period(struct perf_event *event) in dsu_pmu_set_event_period() argument
383 int idx = event->hw.idx; in dsu_pmu_set_event_period()
386 local64_set(&event->hw.prev_count, val); in dsu_pmu_set_event_period()
387 dsu_pmu_write_counter(event, val); in dsu_pmu_set_event_period()
403 struct perf_event *event = hw_events->events[i]; in dsu_pmu_handle_irq() local
405 if (!event) in dsu_pmu_handle_irq()
407 dsu_pmu_event_update(event); in dsu_pmu_handle_irq()
408 dsu_pmu_set_event_period(event); in dsu_pmu_handle_irq()
415 static void dsu_pmu_start(struct perf_event *event, int pmu_flags) in dsu_pmu_start() argument
417 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_start()
421 WARN_ON(!(event->hw.state & PERF_HES_UPTODATE)); in dsu_pmu_start()
422 dsu_pmu_set_event_period(event); in dsu_pmu_start()
423 if (event->hw.idx != DSU_PMU_IDX_CYCLE_COUNTER) in dsu_pmu_start()
424 dsu_pmu_set_event(dsu_pmu, event); in dsu_pmu_start()
425 event->hw.state = 0; in dsu_pmu_start()
426 dsu_pmu_enable_counter(dsu_pmu, event->hw.idx); in dsu_pmu_start()
429 static void dsu_pmu_stop(struct perf_event *event, int pmu_flags) in dsu_pmu_stop() argument
431 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_stop()
433 if (event->hw.state & PERF_HES_STOPPED) in dsu_pmu_stop()
435 dsu_pmu_disable_counter(dsu_pmu, event->hw.idx); in dsu_pmu_stop()
436 dsu_pmu_event_update(event); in dsu_pmu_stop()
437 event->hw.state |= PERF_HES_STOPPED | PERF_HES_UPTODATE; in dsu_pmu_stop()
440 static int dsu_pmu_add(struct perf_event *event, int flags) in dsu_pmu_add() argument
442 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_add()
444 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_add()
451 idx = dsu_pmu_get_event_idx(hw_events, event); in dsu_pmu_add()
456 hw_events->events[idx] = event; in dsu_pmu_add()
460 dsu_pmu_start(event, PERF_EF_RELOAD); in dsu_pmu_add()
462 perf_event_update_userpage(event); in dsu_pmu_add()
466 static void dsu_pmu_del(struct perf_event *event, int flags) in dsu_pmu_del() argument
468 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_del()
470 struct hw_perf_event *hwc = &event->hw; in dsu_pmu_del()
473 dsu_pmu_stop(event, PERF_EF_UPDATE); in dsu_pmu_del()
476 perf_event_update_userpage(event); in dsu_pmu_del()
511 struct perf_event *event) in dsu_pmu_validate_event() argument
513 if (is_software_event(event)) in dsu_pmu_validate_event()
516 if (event->pmu != pmu) in dsu_pmu_validate_event()
518 return dsu_pmu_get_event_idx(hw_events, event) >= 0; in dsu_pmu_validate_event()
525 static bool dsu_pmu_validate_group(struct perf_event *event) in dsu_pmu_validate_group() argument
527 struct perf_event *sibling, *leader = event->group_leader; in dsu_pmu_validate_group()
530 if (event->group_leader == event) in dsu_pmu_validate_group()
534 if (!dsu_pmu_validate_event(event->pmu, &fake_hw, leader)) in dsu_pmu_validate_group()
537 if (!dsu_pmu_validate_event(event->pmu, &fake_hw, sibling)) in dsu_pmu_validate_group()
540 return dsu_pmu_validate_event(event->pmu, &fake_hw, event); in dsu_pmu_validate_group()
543 static int dsu_pmu_event_init(struct perf_event *event) in dsu_pmu_event_init() argument
545 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu); in dsu_pmu_event_init()
547 if (event->attr.type != event->pmu->type) in dsu_pmu_event_init()
551 if (is_sampling_event(event)) { in dsu_pmu_event_init()
557 if (event->cpu < 0 || event->attach_state & PERF_ATTACH_TASK) { in dsu_pmu_event_init()
562 if (has_branch_stack(event)) { in dsu_pmu_event_init()
567 if (!cpumask_test_cpu(event->cpu, &dsu_pmu->associated_cpus)) { in dsu_pmu_event_init()
578 event->cpu = cpumask_first(&dsu_pmu->active_cpu); in dsu_pmu_event_init()
579 if (event->cpu >= nr_cpu_ids) in dsu_pmu_event_init()
581 if (!dsu_pmu_validate_group(event)) in dsu_pmu_event_init()
584 event->hw.config_base = event->attr.config; in dsu_pmu_event_init()