Lines Matching defs:dsu_pmu

99  * struct dsu_pmu	- DSU PMU descriptor
113 struct dsu_pmu {
128 static inline struct dsu_pmu *to_dsu_pmu(struct pmu *pmu)
130 return container_of(pmu, struct dsu_pmu, pmu);
156 struct dsu_pmu *dsu_pmu = to_dsu_pmu(pmu);
164 cpumask = &dsu_pmu->active_cpu;
167 cpumask = &dsu_pmu->associated_cpus;
202 struct dsu_pmu *dsu_pmu = to_dsu_pmu(pmu);
207 return test_bit(evt, dsu_pmu->cpmceid_bitmap) ? attr->mode : 0;
233 static int dsu_pmu_get_online_cpu_any_but(struct dsu_pmu *dsu_pmu, int cpu)
238 &dsu_pmu->associated_cpus, cpu_online_mask);
242 static inline bool dsu_pmu_counter_valid(struct dsu_pmu *dsu_pmu, u32 idx)
244 return (idx < dsu_pmu->num_counters) ||
252 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
256 &dsu_pmu->associated_cpus)))
259 if (!dsu_pmu_counter_valid(dsu_pmu, idx)) {
265 raw_spin_lock_irqsave(&dsu_pmu->pmu_lock, flags);
270 raw_spin_unlock_irqrestore(&dsu_pmu->pmu_lock, flags);
278 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
282 &dsu_pmu->associated_cpus)))
285 if (!dsu_pmu_counter_valid(dsu_pmu, idx)) {
291 raw_spin_lock_irqsave(&dsu_pmu->pmu_lock, flags);
296 raw_spin_unlock_irqrestore(&dsu_pmu->pmu_lock, flags);
304 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
313 idx = find_first_zero_bit(used_mask, dsu_pmu->num_counters);
314 if (idx >= dsu_pmu->num_counters)
320 static void dsu_pmu_enable_counter(struct dsu_pmu *dsu_pmu, int idx)
326 static void dsu_pmu_disable_counter(struct dsu_pmu *dsu_pmu, int idx)
332 static inline void dsu_pmu_set_event(struct dsu_pmu *dsu_pmu,
338 if (!dsu_pmu_counter_valid(dsu_pmu, idx)) {
344 raw_spin_lock_irqsave(&dsu_pmu->pmu_lock, flags);
346 raw_spin_unlock_irqrestore(&dsu_pmu->pmu_lock, flags);
394 struct dsu_pmu *dsu_pmu = dev;
395 struct dsu_hw_events *hw_events = &dsu_pmu->hw_events;
417 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
424 dsu_pmu_set_event(dsu_pmu, event);
426 dsu_pmu_enable_counter(dsu_pmu, event->hw.idx);
431 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
435 dsu_pmu_disable_counter(dsu_pmu, event->hw.idx);
442 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
443 struct dsu_hw_events *hw_events = &dsu_pmu->hw_events;
448 &dsu_pmu->associated_cpus)))
468 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
469 struct dsu_hw_events *hw_events = &dsu_pmu->hw_events;
483 struct dsu_pmu *dsu_pmu = to_dsu_pmu(pmu);
486 if (bitmap_empty(dsu_pmu->hw_events.used_mask, DSU_PMU_MAX_HW_CNTRS))
489 raw_spin_lock_irqsave(&dsu_pmu->pmu_lock, flags);
493 raw_spin_unlock_irqrestore(&dsu_pmu->pmu_lock, flags);
500 struct dsu_pmu *dsu_pmu = to_dsu_pmu(pmu);
502 raw_spin_lock_irqsave(&dsu_pmu->pmu_lock, flags);
506 raw_spin_unlock_irqrestore(&dsu_pmu->pmu_lock, flags);
545 struct dsu_pmu *dsu_pmu = to_dsu_pmu(event->pmu);
552 dev_dbg(dsu_pmu->pmu.dev, "Can't support sampling events\n");
558 dev_dbg(dsu_pmu->pmu.dev, "Can't support per-task counters\n");
563 dev_dbg(dsu_pmu->pmu.dev, "Can't support filtering\n");
567 if (!cpumask_test_cpu(event->cpu, &dsu_pmu->associated_cpus)) {
568 dev_dbg(dsu_pmu->pmu.dev,
578 event->cpu = cpumask_first(&dsu_pmu->active_cpu);
588 static struct dsu_pmu *dsu_pmu_alloc(struct platform_device *pdev)
590 struct dsu_pmu *dsu_pmu;
592 dsu_pmu = devm_kzalloc(&pdev->dev, sizeof(*dsu_pmu), GFP_KERNEL);
593 if (!dsu_pmu)
596 raw_spin_lock_init(&dsu_pmu->pmu_lock);
601 dsu_pmu->num_counters = -1;
602 return dsu_pmu;
668 static void dsu_pmu_probe_pmu(struct dsu_pmu *dsu_pmu)
678 dsu_pmu->num_counters = num_counters;
679 if (!dsu_pmu->num_counters)
683 bitmap_from_arr32(dsu_pmu->cpmceid_bitmap, cpmceid,
687 static void dsu_pmu_set_active_cpu(int cpu, struct dsu_pmu *dsu_pmu)
689 cpumask_set_cpu(cpu, &dsu_pmu->active_cpu);
690 if (irq_set_affinity(dsu_pmu->irq, &dsu_pmu->active_cpu))
698 static void dsu_pmu_init_pmu(struct dsu_pmu *dsu_pmu)
700 if (dsu_pmu->num_counters == -1)
701 dsu_pmu_probe_pmu(dsu_pmu);
709 struct dsu_pmu *dsu_pmu;
714 dsu_pmu = dsu_pmu_alloc(pdev);
715 if (IS_ERR(dsu_pmu))
716 return PTR_ERR(dsu_pmu);
719 rc = dsu_pmu_dt_get_cpus(&pdev->dev, &dsu_pmu->associated_cpus);
721 rc = dsu_pmu_acpi_get_cpus(&pdev->dev, &dsu_pmu->associated_cpus);
739 IRQF_NOBALANCING, name, dsu_pmu);
745 dsu_pmu->irq = irq;
746 platform_set_drvdata(pdev, dsu_pmu);
748 &dsu_pmu->cpuhp_node);
752 dsu_pmu->pmu = (struct pmu) {
768 rc = perf_pmu_register(&dsu_pmu->pmu, name, -1);
771 &dsu_pmu->cpuhp_node);
779 struct dsu_pmu *dsu_pmu = platform_get_drvdata(pdev);
781 perf_pmu_unregister(&dsu_pmu->pmu);
782 cpuhp_state_remove_instance(dsu_pmu_cpuhp_state, &dsu_pmu->cpuhp_node);
814 struct dsu_pmu *dsu_pmu = hlist_entry_safe(node, struct dsu_pmu,
817 if (!cpumask_test_cpu(cpu, &dsu_pmu->associated_cpus))
821 if (!cpumask_empty(&dsu_pmu->active_cpu))
824 dsu_pmu_init_pmu(dsu_pmu);
825 dsu_pmu_set_active_cpu(cpu, dsu_pmu);
833 struct dsu_pmu *dsu_pmu = hlist_entry_safe(node, struct dsu_pmu,
836 if (!cpumask_test_and_clear_cpu(cpu, &dsu_pmu->active_cpu))
839 dst = dsu_pmu_get_online_cpu_any_but(dsu_pmu, cpu);
844 perf_pmu_migrate_context(&dsu_pmu->pmu, cpu, dst);
845 dsu_pmu_set_active_cpu(dst, dsu_pmu);