Lines Matching refs:cluster
285 static void cluster_pmu_set_resr(struct cluster_pmu *cluster, in cluster_pmu_set_resr() argument
296 spin_lock_irqsave(&cluster->pmu_lock, flags); in cluster_pmu_set_resr()
304 spin_unlock_irqrestore(&cluster->pmu_lock, flags); in cluster_pmu_set_resr()
361 static void l2_cache_cluster_set_period(struct cluster_pmu *cluster, in l2_cache_cluster_set_period() argument
381 static int l2_cache_get_event_idx(struct cluster_pmu *cluster, in l2_cache_get_event_idx() argument
386 int num_ctrs = cluster->l2cache_pmu->num_counters - 1; in l2_cache_get_event_idx()
390 if (test_and_set_bit(l2_cycle_ctr_idx, cluster->used_counters)) in l2_cache_get_event_idx()
396 idx = find_first_zero_bit(cluster->used_counters, num_ctrs); in l2_cache_get_event_idx()
407 if (test_bit(group, cluster->used_groups)) in l2_cache_get_event_idx()
410 set_bit(idx, cluster->used_counters); in l2_cache_get_event_idx()
411 set_bit(group, cluster->used_groups); in l2_cache_get_event_idx()
416 static void l2_cache_clear_event_idx(struct cluster_pmu *cluster, in l2_cache_clear_event_idx() argument
422 clear_bit(idx, cluster->used_counters); in l2_cache_clear_event_idx()
424 clear_bit(L2_EVT_GROUP(hwc->config_base), cluster->used_groups); in l2_cache_clear_event_idx()
429 struct cluster_pmu *cluster = data; in l2_cache_handle_irq() local
430 int num_counters = cluster->l2cache_pmu->num_counters; in l2_cache_handle_irq()
438 for_each_set_bit(idx, cluster->used_counters, num_counters) { in l2_cache_handle_irq()
439 struct perf_event *event = cluster->events[idx]; in l2_cache_handle_irq()
451 l2_cache_cluster_set_period(cluster, hwc); in l2_cache_handle_irq()
483 struct cluster_pmu *cluster; in l2_cache_event_init() local
530 cluster = get_cluster_pmu(l2cache_pmu, event->cpu); in l2_cache_event_init()
531 if (!cluster) { in l2_cache_event_init()
540 (cluster->on_cpu != event->group_leader->cpu)) { in l2_cache_event_init()
578 event->cpu = cluster->on_cpu; in l2_cache_event_init()
585 struct cluster_pmu *cluster; in l2_cache_event_start() local
593 cluster = get_cluster_pmu(to_l2cache_pmu(event->pmu), event->cpu); in l2_cache_event_start()
595 l2_cache_cluster_set_period(cluster, hwc); in l2_cache_event_start()
606 cluster_pmu_set_resr(cluster, event_group, event_cc); in l2_cache_event_start()
635 struct cluster_pmu *cluster; in l2_cache_event_add() local
637 cluster = get_cluster_pmu(to_l2cache_pmu(event->pmu), event->cpu); in l2_cache_event_add()
639 idx = l2_cache_get_event_idx(cluster, event); in l2_cache_event_add()
645 cluster->events[idx] = event; in l2_cache_event_add()
660 struct cluster_pmu *cluster; in l2_cache_event_del() local
663 cluster = get_cluster_pmu(to_l2cache_pmu(event->pmu), event->cpu); in l2_cache_event_del()
666 cluster->events[idx] = NULL; in l2_cache_event_del()
667 l2_cache_clear_event_idx(cluster, event); in l2_cache_event_del()
784 struct cluster_pmu *cluster = NULL; in l2_cache_associate_cpu_with_cluster() local
797 list_for_each_entry(cluster, &l2cache_pmu->clusters, next) { in l2_cache_associate_cpu_with_cluster()
798 if (cluster->cluster_id != cpu_cluster_id) in l2_cache_associate_cpu_with_cluster()
803 cluster->cluster_id); in l2_cache_associate_cpu_with_cluster()
804 cpumask_set_cpu(cpu, &cluster->cluster_cpus); in l2_cache_associate_cpu_with_cluster()
805 *per_cpu_ptr(l2cache_pmu->pmu_cluster, cpu) = cluster; in l2_cache_associate_cpu_with_cluster()
809 return cluster; in l2_cache_associate_cpu_with_cluster()
814 struct cluster_pmu *cluster; in l2cache_pmu_online_cpu() local
818 cluster = get_cluster_pmu(l2cache_pmu, cpu); in l2cache_pmu_online_cpu()
819 if (!cluster) { in l2cache_pmu_online_cpu()
821 cluster = l2_cache_associate_cpu_with_cluster(l2cache_pmu, cpu); in l2cache_pmu_online_cpu()
822 if (!cluster) { in l2cache_pmu_online_cpu()
830 if (cluster->on_cpu != -1) in l2cache_pmu_online_cpu()
837 cluster->on_cpu = cpu; in l2cache_pmu_online_cpu()
841 WARN_ON(irq_set_affinity(cluster->irq, cpumask_of(cpu))); in l2cache_pmu_online_cpu()
842 enable_irq(cluster->irq); in l2cache_pmu_online_cpu()
849 struct cluster_pmu *cluster; in l2cache_pmu_offline_cpu() local
855 cluster = get_cluster_pmu(l2cache_pmu, cpu); in l2cache_pmu_offline_cpu()
856 if (!cluster) in l2cache_pmu_offline_cpu()
860 if (cluster->on_cpu != cpu) in l2cache_pmu_offline_cpu()
865 cluster->on_cpu = -1; in l2cache_pmu_offline_cpu()
868 cpumask_and(&cluster_online_cpus, &cluster->cluster_cpus, in l2cache_pmu_offline_cpu()
872 disable_irq(cluster->irq); in l2cache_pmu_offline_cpu()
877 cluster->on_cpu = target; in l2cache_pmu_offline_cpu()
879 WARN_ON(irq_set_affinity(cluster->irq, cpumask_of(target))); in l2cache_pmu_offline_cpu()
889 struct cluster_pmu *cluster; in l2_cache_pmu_probe_cluster() local
903 cluster = devm_kzalloc(&pdev->dev, sizeof(*cluster), GFP_KERNEL); in l2_cache_pmu_probe_cluster()
904 if (!cluster) in l2_cache_pmu_probe_cluster()
907 INIT_LIST_HEAD(&cluster->next); in l2_cache_pmu_probe_cluster()
908 list_add(&cluster->next, &l2cache_pmu->clusters); in l2_cache_pmu_probe_cluster()
909 cluster->cluster_id = fw_cluster_id; in l2_cache_pmu_probe_cluster()
915 cluster->irq = irq; in l2_cache_pmu_probe_cluster()
917 cluster->l2cache_pmu = l2cache_pmu; in l2_cache_pmu_probe_cluster()
918 cluster->on_cpu = -1; in l2_cache_pmu_probe_cluster()
922 "l2-cache-pmu", cluster); in l2_cache_pmu_probe_cluster()
932 spin_lock_init(&cluster->pmu_lock); in l2_cache_pmu_probe_cluster()