Symbol: iommu_pmu
arch/x86/events/amd/iommu.c
408
static const struct pmu iommu_pmu __initconst = {
arch/x86/events/amd/iommu.c
431
perf_iommu->pmu = iommu_pmu;
drivers/iommu/intel/iommu.h
741
struct iommu_pmu *pmu;
drivers/iommu/intel/perfmon.c
101
if ((iommu_pmu->filter & _filter) && iommu_pmu_en_##_name(_econfig)) { \
drivers/iommu/intel/perfmon.c
102
dmar_writel(iommu_pmu->cfg_reg + _idx * IOMMU_PMU_CFG_OFFSET + \
drivers/iommu/intel/perfmon.c
111
if (iommu_pmu->filter & _filter) { \
drivers/iommu/intel/perfmon.c
112
dmar_writel(iommu_pmu->cfg_reg + _idx * IOMMU_PMU_CFG_OFFSET + \
drivers/iommu/intel/perfmon.c
138
struct iommu_pmu *iommu_pmu = dev_to_iommu_pmu(dev); \
drivers/iommu/intel/perfmon.c
140
if (!iommu_pmu) \
drivers/iommu/intel/perfmon.c
142
return (iommu_pmu->evcap[_g_idx] & _event) ? attr->mode : 0; \
drivers/iommu/intel/perfmon.c
215
iommu_event_base(struct iommu_pmu *iommu_pmu, int idx)
drivers/iommu/intel/perfmon.c
217
return iommu_pmu->cntr_reg + idx * iommu_pmu->cntr_stride;
drivers/iommu/intel/perfmon.c
221
iommu_config_base(struct iommu_pmu *iommu_pmu, int idx)
drivers/iommu/intel/perfmon.c
223
return iommu_pmu->cfg_reg + idx * IOMMU_PMU_CFG_OFFSET;
drivers/iommu/intel/perfmon.c
226
static inline struct iommu_pmu *iommu_event_to_pmu(struct perf_event *event)
drivers/iommu/intel/perfmon.c
228
return container_of(event->pmu, struct iommu_pmu, pmu);
drivers/iommu/intel/perfmon.c
240
static inline bool is_iommu_pmu_event(struct iommu_pmu *iommu_pmu,
drivers/iommu/intel/perfmon.c
243
return event->pmu == &iommu_pmu->pmu;
drivers/iommu/intel/perfmon.c
248
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
251
if (event_group >= iommu_pmu->num_eg)
drivers/iommu/intel/perfmon.c
259
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
268
if (!is_iommu_pmu_event(iommu_pmu, sibling) ||
drivers/iommu/intel/perfmon.c
272
if (++nr > iommu_pmu->num_cntr)
drivers/iommu/intel/perfmon.c
303
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
306
int shift = 64 - iommu_pmu->cntr_width;
drivers/iommu/intel/perfmon.c
310
new_count = dmar_readq(iommu_event_base(iommu_pmu, hwc->idx));
drivers/iommu/intel/perfmon.c
326
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
327
struct intel_iommu *iommu = iommu_pmu->iommu;
drivers/iommu/intel/perfmon.c
343
count = dmar_readq(iommu_event_base(iommu_pmu, hwc->idx));
drivers/iommu/intel/perfmon.c
363
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
364
struct intel_iommu *iommu = iommu_pmu->iommu;
drivers/iommu/intel/perfmon.c
377
iommu_pmu_validate_per_cntr_event(struct iommu_pmu *iommu_pmu,
drivers/iommu/intel/perfmon.c
383
if (!(iommu_pmu->cntr_evcap[idx][event_group] & select))
drivers/iommu/intel/perfmon.c
389
static int iommu_pmu_assign_event(struct iommu_pmu *iommu_pmu,
drivers/iommu/intel/perfmon.c
399
for (idx = iommu_pmu->num_cntr - 1; idx >= 0; idx--) {
drivers/iommu/intel/perfmon.c
400
if (test_and_set_bit(idx, iommu_pmu->used_mask))
drivers/iommu/intel/perfmon.c
403
if (!iommu_pmu_validate_per_cntr_event(iommu_pmu, idx, event))
drivers/iommu/intel/perfmon.c
405
clear_bit(idx, iommu_pmu->used_mask);
drivers/iommu/intel/perfmon.c
410
iommu_pmu->event_list[idx] = event;
drivers/iommu/intel/perfmon.c
414
dmar_writeq(iommu_config_base(iommu_pmu, idx), hwc->config);
drivers/iommu/intel/perfmon.c
43
static inline struct iommu_pmu *dev_to_iommu_pmu(struct device *dev)
drivers/iommu/intel/perfmon.c
437
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
441
ret = iommu_pmu_assign_event(iommu_pmu, event);
drivers/iommu/intel/perfmon.c
455
struct iommu_pmu *iommu_pmu = iommu_event_to_pmu(event);
drivers/iommu/intel/perfmon.c
466
iommu_pmu->event_list[idx] = NULL;
drivers/iommu/intel/perfmon.c
468
clear_bit(idx, iommu_pmu->used_mask);
drivers/iommu/intel/perfmon.c
475
struct iommu_pmu *iommu_pmu = container_of(pmu, struct iommu_pmu, pmu);
drivers/iommu/intel/perfmon.c
476
struct intel_iommu *iommu = iommu_pmu->iommu;
drivers/iommu/intel/perfmon.c
483
struct iommu_pmu *iommu_pmu = container_of(pmu, struct iommu_pmu, pmu);
drivers/iommu/intel/perfmon.c
484
struct intel_iommu *iommu = iommu_pmu->iommu;
drivers/iommu/intel/perfmon.c
489
static void iommu_pmu_counter_overflow(struct iommu_pmu *iommu_pmu)
drivers/iommu/intel/perfmon.c
49
return container_of(dev_get_drvdata(dev), struct iommu_pmu, pmu);
drivers/iommu/intel/perfmon.c
499
while ((status = dmar_readq(iommu_pmu->overflow))) {
drivers/iommu/intel/perfmon.c
500
for_each_set_bit(i, (unsigned long *)&status, iommu_pmu->num_cntr) {
drivers/iommu/intel/perfmon.c
505
event = iommu_pmu->event_list[i];
drivers/iommu/intel/perfmon.c
513
dmar_writeq(iommu_pmu->overflow, status);
drivers/iommu/intel/perfmon.c
534
struct iommu_pmu *iommu_pmu = iommu->pmu;
drivers/iommu/intel/perfmon.c
536
iommu_pmu->pmu.name = iommu->name;
drivers/iommu/intel/perfmon.c
537
iommu_pmu->pmu.task_ctx_nr = perf_invalid_context;
drivers/iommu/intel/perfmon.c
538
iommu_pmu->pmu.event_init = iommu_pmu_event_init;
drivers/iommu/intel/perfmon.c
539
iommu_pmu->pmu.pmu_enable = iommu_pmu_enable;
drivers/iommu/intel/perfmon.c
540
iommu_pmu->pmu.pmu_disable = iommu_pmu_disable;
drivers/iommu/intel/perfmon.c
541
iommu_pmu->pmu.add = iommu_pmu_add;
drivers/iommu/intel/perfmon.c
542
iommu_pmu->pmu.del = iommu_pmu_del;
drivers/iommu/intel/perfmon.c
543
iommu_pmu->pmu.start = iommu_pmu_start;
drivers/iommu/intel/perfmon.c
544
iommu_pmu->pmu.stop = iommu_pmu_stop;
drivers/iommu/intel/perfmon.c
545
iommu_pmu->pmu.read = iommu_pmu_event_update;
drivers/iommu/intel/perfmon.c
546
iommu_pmu->pmu.attr_groups = iommu_pmu_attr_groups;
drivers/iommu/intel/perfmon.c
547
iommu_pmu->pmu.attr_update = iommu_pmu_attr_update;
drivers/iommu/intel/perfmon.c
548
iommu_pmu->pmu.capabilities = PERF_PMU_CAP_NO_EXCLUDE;
drivers/iommu/intel/perfmon.c
549
iommu_pmu->pmu.scope = PERF_PMU_SCOPE_SYS_WIDE;
drivers/iommu/intel/perfmon.c
550
iommu_pmu->pmu.module = THIS_MODULE;
drivers/iommu/intel/perfmon.c
552
return perf_pmu_register(&iommu_pmu->pmu, iommu_pmu->pmu.name, -1);
drivers/iommu/intel/perfmon.c
565
struct iommu_pmu *iommu_pmu;
drivers/iommu/intel/perfmon.c
594
iommu_pmu = kzalloc_obj(*iommu_pmu);
drivers/iommu/intel/perfmon.c
595
if (!iommu_pmu)
drivers/iommu/intel/perfmon.c
598
iommu_pmu->num_cntr = pcap_num_cntr(perfcap);
drivers/iommu/intel/perfmon.c
599
if (iommu_pmu->num_cntr > IOMMU_PMU_IDX_MAX) {
drivers/iommu/intel/perfmon.c
601
iommu_pmu->num_cntr, IOMMU_PMU_IDX_MAX);
drivers/iommu/intel/perfmon.c
602
iommu_pmu->num_cntr = IOMMU_PMU_IDX_MAX;
drivers/iommu/intel/perfmon.c
605
iommu_pmu->cntr_width = pcap_cntr_width(perfcap);
drivers/iommu/intel/perfmon.c
606
iommu_pmu->filter = pcap_filters_mask(perfcap);
drivers/iommu/intel/perfmon.c
607
iommu_pmu->cntr_stride = pcap_cntr_stride(perfcap);
drivers/iommu/intel/perfmon.c
608
iommu_pmu->num_eg = pcap_num_event_group(perfcap);
drivers/iommu/intel/perfmon.c
610
iommu_pmu->evcap = kcalloc(iommu_pmu->num_eg, sizeof(u64), GFP_KERNEL);
drivers/iommu/intel/perfmon.c
611
if (!iommu_pmu->evcap) {
drivers/iommu/intel/perfmon.c
617
for (i = 0; i < iommu_pmu->num_eg; i++) {
drivers/iommu/intel/perfmon.c
622
iommu_pmu->evcap[i] = pecap_es(pcap);
drivers/iommu/intel/perfmon.c
625
iommu_pmu->cntr_evcap = kcalloc(iommu_pmu->num_cntr, sizeof(u32 *), GFP_KERNEL);
drivers/iommu/intel/perfmon.c
626
if (!iommu_pmu->cntr_evcap) {
drivers/iommu/intel/perfmon.c
630
for (i = 0; i < iommu_pmu->num_cntr; i++) {
drivers/iommu/intel/perfmon.c
631
iommu_pmu->cntr_evcap[i] = kcalloc(iommu_pmu->num_eg, sizeof(u32), GFP_KERNEL);
drivers/iommu/intel/perfmon.c
632
if (!iommu_pmu->cntr_evcap[i]) {
drivers/iommu/intel/perfmon.c
64
struct iommu_pmu *iommu_pmu = dev_to_iommu_pmu(dev); \
drivers/iommu/intel/perfmon.c
640
for (j = 0; j < iommu_pmu->num_eg; j++)
drivers/iommu/intel/perfmon.c
641
iommu_pmu->cntr_evcap[i][j] = (u32)iommu_pmu->evcap[j];
drivers/iommu/intel/perfmon.c
644
iommu_pmu->cfg_reg = get_perf_reg_address(iommu, DMAR_PERFCFGOFF_REG);
drivers/iommu/intel/perfmon.c
645
iommu_pmu->cntr_reg = get_perf_reg_address(iommu, DMAR_PERFCNTROFF_REG);
drivers/iommu/intel/perfmon.c
646
iommu_pmu->overflow = get_perf_reg_address(iommu, DMAR_PERFOVFOFF_REG);
drivers/iommu/intel/perfmon.c
653
for (i = 0; i < iommu_pmu->num_cntr; i++) {
drivers/iommu/intel/perfmon.c
654
cap = dmar_readl(iommu_pmu->cfg_reg +
drivers/iommu/intel/perfmon.c
66
if (!iommu_pmu) \
drivers/iommu/intel/perfmon.c
665
if ((iommu_cntrcap_cw(cap) != iommu_pmu->cntr_width) ||
drivers/iommu/intel/perfmon.c
667
iommu_pmu->num_cntr = i;
drivers/iommu/intel/perfmon.c
669
iommu_pmu->num_cntr);
drivers/iommu/intel/perfmon.c
673
for (j = 0; j < iommu_pmu->num_eg; j++)
drivers/iommu/intel/perfmon.c
674
iommu_pmu->cntr_evcap[i][j] = 0;
drivers/iommu/intel/perfmon.c
678
cap = dmar_readl(iommu_pmu->cfg_reg + i * IOMMU_PMU_CFG_OFFSET +
drivers/iommu/intel/perfmon.c
68
return (iommu_pmu->filter & _filter) ? attr->mode : 0; \
drivers/iommu/intel/perfmon.c
681
iommu_pmu->cntr_evcap[i][iommu_event_group(cap)] = iommu_event_select(cap);
drivers/iommu/intel/perfmon.c
686
iommu_pmu->evcap[iommu_event_group(cap)] |= iommu_event_select(cap);
drivers/iommu/intel/perfmon.c
690
iommu_pmu->iommu = iommu;
drivers/iommu/intel/perfmon.c
691
iommu->pmu = iommu_pmu;
drivers/iommu/intel/perfmon.c
696
for (i = 0; i < iommu_pmu->num_cntr; i++)
drivers/iommu/intel/perfmon.c
697
kfree(iommu_pmu->cntr_evcap[i]);
drivers/iommu/intel/perfmon.c
698
kfree(iommu_pmu->cntr_evcap);
drivers/iommu/intel/perfmon.c
700
kfree(iommu_pmu->evcap);
drivers/iommu/intel/perfmon.c
702
kfree(iommu_pmu);
drivers/iommu/intel/perfmon.c
709
struct iommu_pmu *iommu_pmu = iommu->pmu;
drivers/iommu/intel/perfmon.c
711
if (!iommu_pmu)
drivers/iommu/intel/perfmon.c
714
if (iommu_pmu->evcap) {
drivers/iommu/intel/perfmon.c
717
for (i = 0; i < iommu_pmu->num_cntr; i++)
drivers/iommu/intel/perfmon.c
718
kfree(iommu_pmu->cntr_evcap[i]);
drivers/iommu/intel/perfmon.c
719
kfree(iommu_pmu->cntr_evcap);
drivers/iommu/intel/perfmon.c
721
kfree(iommu_pmu->evcap);
drivers/iommu/intel/perfmon.c
722
kfree(iommu_pmu);
drivers/iommu/intel/perfmon.c
728
struct iommu_pmu *iommu_pmu = iommu->pmu;
drivers/iommu/intel/perfmon.c
735
snprintf(iommu_pmu->irq_name, sizeof(iommu_pmu->irq_name), "dmar%d-perf", iommu->seq_id);
drivers/iommu/intel/perfmon.c
739
IRQF_ONESHOT, iommu_pmu->irq_name, iommu);
drivers/iommu/intel/perfmon.c
760
struct iommu_pmu *iommu_pmu = iommu->pmu;
drivers/iommu/intel/perfmon.c
762
if (!iommu_pmu)
drivers/iommu/intel/perfmon.c
775
perf_pmu_unregister(&iommu_pmu->pmu);
drivers/iommu/intel/perfmon.c
783
struct iommu_pmu *iommu_pmu = iommu->pmu;
drivers/iommu/intel/perfmon.c
785
if (!iommu_pmu)
drivers/iommu/intel/perfmon.c
789
perf_pmu_unregister(&iommu_pmu->pmu);