Lines Matching defs:perf_ibs

82 struct perf_ibs {
192 static struct perf_ibs perf_ibs_fetch;
193 static struct perf_ibs perf_ibs_op;
195 static struct perf_ibs *get_ibs_pmu(int type)
265 struct perf_ibs *perf_ibs;
268 perf_ibs = get_ibs_pmu(event->attr.type);
269 if (!perf_ibs)
274 if (event->pmu != &perf_ibs->pmu)
277 if (config & ~perf_ibs->config_mask)
281 if (config & perf_ibs->cnt_mask)
295 max_cnt = config & perf_ibs->cnt_mask;
296 config &= ~perf_ibs->cnt_mask;
311 hwc->config_base = perf_ibs->msr;
327 static int perf_ibs_set_period(struct perf_ibs *perf_ibs,
333 overflow = perf_event_set_period(hwc, 1<<4, perf_ibs->max_period, period);
365 perf_ibs_event_update(struct perf_ibs *perf_ibs, struct perf_event *event,
368 u64 count = perf_ibs->get_count(*config);
377 count = perf_ibs->get_count(*config);
381 static inline void perf_ibs_enable_event(struct perf_ibs *perf_ibs,
386 if (perf_ibs->fetch_count_reset_broken)
387 wrmsrl(hwc->config_base, tmp & ~perf_ibs->enable_mask);
389 wrmsrl(hwc->config_base, tmp | perf_ibs->enable_mask);
399 static inline void perf_ibs_disable_event(struct perf_ibs *perf_ibs,
402 config &= ~perf_ibs->cnt_mask;
405 config &= ~perf_ibs->enable_mask;
418 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
419 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
428 perf_ibs_set_period(perf_ibs, hwc, &period);
429 if (perf_ibs == &perf_ibs_op && (ibs_caps & IBS_CAPS_OPCNTEXT)) {
441 perf_ibs_enable_event(perf_ibs, hwc, config);
449 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
450 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
472 perf_ibs_disable_event(perf_ibs, hwc, config);
494 config &= ~perf_ibs->valid_mask;
496 perf_ibs_event_update(perf_ibs, event, &config);
502 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
503 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
520 struct perf_ibs *perf_ibs = container_of(event->pmu, struct perf_ibs, pmu);
521 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
548 static struct perf_ibs perf_ibs_fetch = {
573 static struct perf_ibs perf_ibs_op = {
599 static int perf_ibs_handle_irq(struct perf_ibs *perf_ibs, struct pt_regs *iregs)
601 struct cpu_perf_ibs *pcpu = this_cpu_ptr(perf_ibs->pcpu);
633 if (!(*buf++ & perf_ibs->valid_mask))
637 perf_ibs_event_update(perf_ibs, event, config);
639 if (!perf_ibs_set_period(perf_ibs, hwc, &period))
645 check_rip = (perf_ibs == &perf_ibs_op && (ibs_caps & IBS_CAPS_RIPINVALIDCHK));
647 offset_max = perf_ibs->offset_max;
655 offset = find_next_bit(perf_ibs->offset_mask,
656 perf_ibs->offset_max,
665 if (perf_ibs == &perf_ibs_op) {
675 if (perf_ibs == &perf_ibs_fetch && (ibs_caps & IBS_CAPS_FETCHCTLEXTD)) {
687 if (perf_ibs->fetch_ignore_if_zero_rip && !(ibs_data.regs[1]))
717 if (perf_ibs == &perf_ibs_op) {
727 perf_ibs_enable_event(perf_ibs, hwc, new_config);
753 static __init int perf_ibs_pmu_init(struct perf_ibs *perf_ibs, char *name)
762 perf_ibs->pcpu = pcpu;
765 if (perf_ibs->format_attrs[0]) {
766 memset(&perf_ibs->format_group, 0, sizeof(perf_ibs->format_group));
767 perf_ibs->format_group.name = "format";
768 perf_ibs->format_group.attrs = perf_ibs->format_attrs;
770 memset(&perf_ibs->attr_groups, 0, sizeof(perf_ibs->attr_groups));
771 perf_ibs->attr_groups[0] = &perf_ibs->format_group;
772 perf_ibs->pmu.attr_groups = perf_ibs->attr_groups;
775 ret = perf_pmu_register(&perf_ibs->pmu, name, -1);
777 perf_ibs->pcpu = NULL;
818 ret = register_nmi_handler(NMI_LOCAL, perf_ibs_nmi_handler, 0, "perf_ibs");