pt_pmu
return sprintf(page, "%lu\n", pt_pmu.max_nonturbo_ratio);
if (pt_pmu.vmx)
pt_pmu.tsc_art_num,
pt_pmu.tsc_art_den);
if (event->attr.type != pt_pmu.pmu.type)
return event->pmu == &pt_pmu.pmu;
pt_pmu.pmu.capabilities = PERF_PMU_CAP_AUX_NO_SG;
pt_pmu.pmu.capabilities = PERF_PMU_CAP_AUX_PREFER_LARGE;
pt_pmu.pmu.capabilities |= PERF_PMU_CAP_EXCLUSIVE |
pt_pmu.pmu.attr_groups = pt_attr_groups;
pt_pmu.pmu.task_ctx_nr = perf_sw_context;
pt_pmu.pmu.event_init = pt_event_init;
pt_pmu.pmu.add = pt_event_add;
pt_pmu.pmu.del = pt_event_del;
pt_pmu.pmu.start = pt_event_start;
pt_pmu.pmu.stop = pt_event_stop;
pt_pmu.pmu.snapshot_aux = pt_event_snapshot_aux;
pt_pmu.pmu.read = pt_event_read;
pt_pmu.pmu.setup_aux = pt_buffer_setup_aux;
pt_pmu.pmu.free_aux = pt_buffer_free_aux;
pt_pmu.pmu.addr_filters_sync = pt_event_addr_filters_sync;
pt_pmu.pmu.addr_filters_validate = pt_event_addr_filters_validate;
pt_pmu.pmu.nr_addr_filters =
ret = perf_pmu_register(&pt_pmu.pmu, "intel_pt", -1);
pt_pmu.max_nonturbo_ratio = (reg & 0xff00) >> 8;
pt_pmu.tsc_art_num = ebx;
pt_pmu.tsc_art_den = eax;
pt_pmu.branch_en_always_on = true;
pt_pmu.vmx = true;
&pt_pmu.caps[CPUID_EAX + i*PT_CPUID_REGS_NUM],
&pt_pmu.caps[CPUID_EBX + i*PT_CPUID_REGS_NUM],
&pt_pmu.caps[CPUID_ECX + i*PT_CPUID_REGS_NUM],
&pt_pmu.caps[CPUID_EDX + i*PT_CPUID_REGS_NUM]);
static struct pt_pmu pt_pmu;
if (pt_pmu.branch_en_always_on &&
return intel_pt_validate_cap(pt_pmu.caps, cap);