Lines Matching defs:perf_ibs

83 struct perf_ibs {
180 static struct perf_ibs perf_ibs_fetch;
181 static struct perf_ibs perf_ibs_op;
183 static struct perf_ibs *get_ibs_pmu(int type)
274 struct perf_ibs *perf_ibs;
278 perf_ibs = get_ibs_pmu(event->attr.type);
279 if (!perf_ibs)
284 if (event->pmu != &perf_ibs->pmu)
287 if (config & ~perf_ibs->config_mask)
295 if (config & perf_ibs->cnt_mask)
309 max_cnt = config & perf_ibs->cnt_mask;
310 config &= ~perf_ibs->cnt_mask;
325 hwc->config_base = perf_ibs->msr;
331 static int perf_ibs_set_period(struct perf_ibs *perf_ibs,
337 overflow = perf_event_set_period(hwc, 1<<4, perf_ibs->max_period, period);
372 perf_ibs_event_update(struct perf_ibs *perf_ibs, struct perf_event *event,
375 u64 count = perf_ibs->get_count(*config);
384 count = perf_ibs->get_count(*config);
388 static inline void perf_ibs_enable_event(struct perf_ibs *perf_ibs,
393 if (perf_ibs->fetch_count_reset_broken)
394 wrmsrl(hwc->config_base, tmp & ~perf_ibs->enable_mask);
396 wrmsrl(hwc->config_base, tmp | perf_ibs->enable_mask);
406 static inline void perf_ibs_disable_event(struct perf_ibs *perf_ibs,
409 config &= ~perf_ibs->cnt_mask;
412 config &= ~perf_ibs->enable_mask;
425 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
426 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
435 perf_ibs_set_period(perf_ibs, hwc, &period);
436 if (perf_ibs == &perf_ibs_op && (ibs_caps & IBS_CAPS_OPCNTEXT)) {
448 perf_ibs_enable_event(perf_ibs, hwc, config);
456 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
457 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
479 perf_ibs_disable_event(perf_ibs, hwc, config);
501 config &= ~perf_ibs->valid_mask;
503 perf_ibs_event_update(perf_ibs, event, &config);
509 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
510 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
527 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
528 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
657 static struct perf_ibs perf_ibs_fetch = {
681 static struct perf_ibs perf_ibs_op = {
1004 static int perf_ibs_get_offset_max(struct perf_ibs *perf_ibs, u64 sample_type,
1008 (perf_ibs == &perf_ibs_op &&
1013 return perf_ibs->offset_max;
1019 static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
1021 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
1053 if (!(*buf++ & perf_ibs->valid_mask))
1057 perf_ibs_event_update(perf_ibs, event, config);
1059 if (!perf_ibs_set_period(perf_ibs, hwc, &period))
1065 check_rip = (perf_ibs == &perf_ibs_op && (ibs_caps & IBS_CAPS_RIPINVALIDCHK));
1067 offset_max = perf_ibs_get_offset_max(perf_ibs, event->attr.sample_type, check_rip);
1072 offset = find_next_bit(perf_ibs->offset_mask,
1073 perf_ibs->offset_max,
1082 if (perf_ibs == &perf_ibs_op) {
1092 if (perf_ibs == &perf_ibs_fetch && (ibs_caps & IBS_CAPS_FETCHCTLEXTD)) {
1104 if (perf_ibs->fetch_ignore_if_zero_rip && !(ibs_data.regs[1]))
1121 if (perf_ibs == &perf_ibs_op)
1137 if (perf_ibs == &perf_ibs_op) {
1147 perf_ibs_enable_event(perf_ibs, hwc, new_config);
1173 static __init int perf_ibs_pmu_init(struct perf_ibs *perf_ibs, char *name)
1182 perf_ibs->pcpu = pcpu;
1184 ret = perf_pmu_register(&perf_ibs->pmu, name, -1);
1186 perf_ibs->pcpu = NULL;
1246 ret = register_nmi_handler(NMI_LOCAL, perf_ibs_nmi_handler, 0, "perf_ibs");