Lines Matching refs:event

10  * This code is based on the sparc64 perf event code, which is in turn based
108 static inline u64 arm_pmu_event_max_period(struct perf_event *event)
110 if (event->hw.flags & ARMPMU_EVT_64BIT)
170 armpmu_map_event(struct perf_event *event,
178 u64 config = event->attr.config;
179 int type = event->attr.type;
181 if (type == event->pmu->type)
196 int armpmu_event_set_period(struct perf_event *event)
198 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
199 struct hw_perf_event *hwc = &event->hw;
205 max_period = arm_pmu_event_max_period(event);
231 armpmu->write_counter(event, (u64)(-left) & max_period);
233 perf_event_update_userpage(event);
238 u64 armpmu_event_update(struct perf_event *event)
240 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
241 struct hw_perf_event *hwc = &event->hw;
243 u64 max_period = arm_pmu_event_max_period(event);
247 new_raw_count = armpmu->read_counter(event);
255 local64_add(delta, &event->count);
262 armpmu_read(struct perf_event *event)
264 armpmu_event_update(event);
268 armpmu_stop(struct perf_event *event, int flags)
270 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
271 struct hw_perf_event *hwc = &event->hw;
278 armpmu->disable(event);
279 armpmu_event_update(event);
284 static void armpmu_start(struct perf_event *event, int flags)
286 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
287 struct hw_perf_event *hwc = &event->hw;
304 armpmu_event_set_period(event);
305 armpmu->enable(event);
309 armpmu_del(struct perf_event *event, int flags)
311 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
313 struct hw_perf_event *hwc = &event->hw;
316 armpmu_stop(event, PERF_EF_UPDATE);
318 armpmu->clear_event_idx(hw_events, event);
319 perf_event_update_userpage(event);
325 armpmu_add(struct perf_event *event, int flags)
327 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
329 struct hw_perf_event *hwc = &event->hw;
332 /* An event following a process won't be stopped earlier */
337 idx = armpmu->get_event_idx(hw_events, event);
342 * If there is an event in the counter we are going to use then make
345 event->hw.idx = idx;
346 armpmu->disable(event);
347 hw_events->events[idx] = event;
351 armpmu_start(event, PERF_EF_RELOAD);
354 perf_event_update_userpage(event);
361 struct perf_event *event)
365 if (is_software_event(event))
371 * until after pmu->event_init(event).
373 if (event->pmu != pmu)
376 if (event->state < PERF_EVENT_STATE_OFF)
379 if (event->state == PERF_EVENT_STATE_OFF && !event->attr.enable_on_exec)
382 armpmu = to_arm_pmu(event->pmu);
383 return armpmu->get_event_idx(hw_events, event) >= 0;
387 validate_group(struct perf_event *event)
389 struct perf_event *sibling, *leader = event->group_leader;
398 if (!validate_event(event->pmu, &fake_pmu, leader))
401 if (event == leader)
405 if (!validate_event(event->pmu, &fake_pmu, sibling))
409 if (!validate_event(event->pmu, &fake_pmu, event))
440 __hw_perf_event_init(struct perf_event *event)
442 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
443 struct hw_perf_event *hwc = &event->hw;
447 mapping = armpmu->map_event(event);
450 pr_debug("event %x:%llx not supported\n", event->attr.type,
451 event->attr.config);
456 * We don't assign an index until we actually place the event onto
470 armpmu->set_event_filter(hwc, &event->attr)) {
477 * Store the event encoding into the config_base field.
481 if (!is_sampling_event(event)) {
488 hwc->sample_period = arm_pmu_event_max_period(event) >> 1;
493 return validate_group(event);
496 static int armpmu_event_init(struct perf_event *event)
498 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
503 * event->cpu == -1) can be migrated between CPUs, and thus we have to
507 if (event->cpu != -1 &&
508 !cpumask_test_cpu(event->cpu, &armpmu->supported_cpus))
512 if (has_branch_stack(event))
515 if (armpmu->map_event(event) == -ENOENT)
518 return __hw_perf_event_init(event);
551 static int armpmu_filter_match(struct perf_event *event)
553 struct arm_pmu *armpmu = to_arm_pmu(event->pmu);
559 return armpmu->filter_match(event);
773 struct perf_event *event;
777 event = hw_events->events[idx];
778 if (!event)
786 armpmu_stop(event, PERF_EF_UPDATE);
802 RCU_NONIDLE(armpmu_start(event, PERF_EF_RELOAD));