Lines Matching full:cpu

3  * Arch specific cpu topology information
12 #include <linux/cpu.h>
74 int cpu; in topology_set_scale_freq_source() local
85 for_each_cpu(cpu, cpus) { in topology_set_scale_freq_source()
86 sfd = rcu_dereference(*per_cpu_ptr(&sft_data, cpu)); in topology_set_scale_freq_source()
90 rcu_assign_pointer(per_cpu(sft_data, cpu), data); in topology_set_scale_freq_source()
91 cpumask_set_cpu(cpu, &scale_freq_counters_mask); in topology_set_scale_freq_source()
105 int cpu; in topology_clear_scale_freq_source() local
109 for_each_cpu(cpu, cpus) { in topology_clear_scale_freq_source()
110 sfd = rcu_dereference(*per_cpu_ptr(&sft_data, cpu)); in topology_clear_scale_freq_source()
113 rcu_assign_pointer(per_cpu(sft_data, cpu), NULL); in topology_clear_scale_freq_source()
114 cpumask_clear_cpu(cpu, &scale_freq_counters_mask); in topology_clear_scale_freq_source()
185 int cpu; in topology_update_hw_pressure() local
187 cpu = cpumask_first(cpus); in topology_update_hw_pressure()
188 max_capacity = arch_scale_cpu_capacity(cpu); in topology_update_hw_pressure()
189 max_freq = arch_scale_freq_ref(cpu); in topology_update_hw_pressure()
202 trace_hw_pressure_update(cpu, pressure); in topology_update_hw_pressure()
204 for_each_cpu(cpu, cpus) in topology_update_hw_pressure()
205 WRITE_ONCE(per_cpu(hw_pressure, cpu), pressure); in topology_update_hw_pressure()
245 int cpu; in topology_normalize_cpu_scale() local
251 for_each_possible_cpu(cpu) { in topology_normalize_cpu_scale()
252 capacity = raw_capacity[cpu] * in topology_normalize_cpu_scale()
253 (per_cpu(capacity_freq_ref, cpu) ?: 1); in topology_normalize_cpu_scale()
258 for_each_possible_cpu(cpu) { in topology_normalize_cpu_scale()
259 capacity = raw_capacity[cpu] * in topology_normalize_cpu_scale()
260 (per_cpu(capacity_freq_ref, cpu) ?: 1); in topology_normalize_cpu_scale()
263 topology_set_cpu_scale(cpu, capacity); in topology_normalize_cpu_scale()
264 pr_debug("cpu_capacity: CPU%d cpu_capacity=%lu\n", in topology_normalize_cpu_scale()
265 cpu, topology_get_cpu_scale(cpu)); in topology_normalize_cpu_scale()
269 bool __init topology_parse_cpu_capacity(struct device_node *cpu_node, int cpu) in topology_parse_cpu_capacity() argument
291 raw_capacity[cpu] = cpu_capacity; in topology_parse_cpu_capacity()
293 cpu_node, raw_capacity[cpu]); in topology_parse_cpu_capacity()
296 * Update capacity_freq_ref for calculating early boot CPU capacities. in topology_parse_cpu_capacity()
297 * For non-clk CPU DVFS mechanism, there's no way to get the in topology_parse_cpu_capacity()
303 per_cpu(capacity_freq_ref, cpu) = in topology_parse_cpu_capacity()
320 void __weak freq_inv_set_max_ratio(int cpu, u64 max_rate) in freq_inv_set_max_ratio() argument
331 int cpu; in topology_init_cpu_capacity_cppc() local
341 for_each_possible_cpu(cpu) { in topology_init_cpu_capacity_cppc()
342 if (!cppc_get_perf_caps(cpu, &perf_caps) && in topology_init_cpu_capacity_cppc()
345 raw_capacity[cpu] = perf_caps.highest_perf; in topology_init_cpu_capacity_cppc()
346 capacity_scale = max_t(u64, capacity_scale, raw_capacity[cpu]); in topology_init_cpu_capacity_cppc()
348 per_cpu(capacity_freq_ref, cpu) = cppc_perf_to_khz(&perf_caps, raw_capacity[cpu]); in topology_init_cpu_capacity_cppc()
350 pr_debug("cpu_capacity: CPU%d cpu_capacity=%u (raw).\n", in topology_init_cpu_capacity_cppc()
351 cpu, raw_capacity[cpu]); in topology_init_cpu_capacity_cppc()
355 pr_err("cpu_capacity: CPU%d missing/invalid highest performance.\n", cpu); in topology_init_cpu_capacity_cppc()
360 for_each_possible_cpu(cpu) { in topology_init_cpu_capacity_cppc()
361 freq_inv_set_max_ratio(cpu, in topology_init_cpu_capacity_cppc()
362 per_cpu(capacity_freq_ref, cpu) * HZ_PER_KHZ); in topology_init_cpu_capacity_cppc()
364 capacity = raw_capacity[cpu]; in topology_init_cpu_capacity_cppc()
367 topology_set_cpu_scale(cpu, capacity); in topology_init_cpu_capacity_cppc()
368 pr_debug("cpu_capacity: CPU%d cpu_capacity=%lu\n", in topology_init_cpu_capacity_cppc()
369 cpu, topology_get_cpu_scale(cpu)); in topology_init_cpu_capacity_cppc()
395 int cpu; in init_cpu_capacity_callback() local
400 pr_debug("cpu_capacity: init cpu capacity for CPUs [%*pbl] (to_visit=%*pbl)\n", in init_cpu_capacity_callback()
406 for_each_cpu(cpu, policy->related_cpus) { in init_cpu_capacity_callback()
407 per_cpu(capacity_freq_ref, cpu) = policy->cpuinfo.max_freq; in init_cpu_capacity_callback()
408 freq_inv_set_max_ratio(cpu, in init_cpu_capacity_callback()
409 per_cpu(capacity_freq_ref, cpu) * HZ_PER_KHZ); in init_cpu_capacity_callback()
435 * information is not needed for cpu capacity initialization. in register_cpufreq_notifier()
472 * This function returns the logic cpu number of the node.
474 * (1) logic cpu number which is > 0.
476 * there is no possible logical CPU in the kernel to match. This happens
478 * CPU nodes in DT. We need to just ignore this case.
483 int cpu; in get_cpu_for_node() local
485 of_parse_phandle(node, "cpu", 0); in get_cpu_for_node()
490 cpu = of_cpu_node_to_id(cpu_node); in get_cpu_for_node()
491 if (cpu >= 0) in get_cpu_for_node()
492 topology_parse_cpu_capacity(cpu_node, cpu); in get_cpu_for_node()
494 pr_info("CPU node for %pOF exist but the possible cpu range is :%*pbl\n", in get_cpu_for_node()
497 return cpu; in get_cpu_for_node()
506 int cpu; in parse_core() local
517 cpu = get_cpu_for_node(t); in parse_core()
518 if (cpu >= 0) { in parse_core()
519 cpu_topology[cpu].package_id = package_id; in parse_core()
520 cpu_topology[cpu].cluster_id = cluster_id; in parse_core()
521 cpu_topology[cpu].core_id = core_id; in parse_core()
522 cpu_topology[cpu].thread_id = i; in parse_core()
523 } else if (cpu != -ENODEV) { in parse_core()
524 pr_err("%pOF: Can't get CPU for thread\n", t); in parse_core()
532 cpu = get_cpu_for_node(core); in parse_core()
533 if (cpu >= 0) { in parse_core()
535 pr_err("%pOF: Core has both threads and CPU\n", in parse_core()
540 cpu_topology[cpu].package_id = package_id; in parse_core()
541 cpu_topology[cpu].cluster_id = cluster_id; in parse_core()
542 cpu_topology[cpu].core_id = core_id; in parse_core()
543 } else if (leaf && cpu != -ENODEV) { in parse_core()
544 pr_err("%pOF: Can't get CPU for leaf core\n", core); in parse_core()
596 pr_err("%pOF: cpu-map children should be clusters\n", c); in parse_cluster()
661 int cpu; in parse_dt_topology() local
666 pr_err("No CPU information found in DT\n"); in parse_dt_topology()
671 * When topology is provided cpu-map is essentially a root in parse_dt_topology()
675 of_get_child_by_name(cn, "cpu-map"); in parse_dt_topology()
690 for_each_possible_cpu(cpu) in parse_dt_topology()
691 if (cpu_topology[cpu].package_id < 0) { in parse_dt_topology()
700 * cpu topology table
705 const struct cpumask *cpu_coregroup_mask(int cpu) in cpu_coregroup_mask() argument
707 const cpumask_t *core_mask = cpumask_of_node(cpu_to_node(cpu)); in cpu_coregroup_mask()
710 if (cpumask_subset(&cpu_topology[cpu].core_sibling, core_mask)) { in cpu_coregroup_mask()
712 core_mask = &cpu_topology[cpu].core_sibling; in cpu_coregroup_mask()
715 if (last_level_cache_is_valid(cpu)) { in cpu_coregroup_mask()
716 if (cpumask_subset(&cpu_topology[cpu].llc_sibling, core_mask)) in cpu_coregroup_mask()
717 core_mask = &cpu_topology[cpu].llc_sibling; in cpu_coregroup_mask()
721 * For systems with no shared cpu-side LLC but with clusters defined, in cpu_coregroup_mask()
726 cpumask_subset(core_mask, &cpu_topology[cpu].cluster_sibling)) in cpu_coregroup_mask()
727 core_mask = &cpu_topology[cpu].cluster_sibling; in cpu_coregroup_mask()
732 const struct cpumask *cpu_clustergroup_mask(int cpu) in cpu_clustergroup_mask() argument
738 if (cpumask_subset(cpu_coregroup_mask(cpu), in cpu_clustergroup_mask()
739 &cpu_topology[cpu].cluster_sibling)) in cpu_clustergroup_mask()
740 return topology_sibling_cpumask(cpu); in cpu_clustergroup_mask()
742 return &cpu_topology[cpu].cluster_sibling; in cpu_clustergroup_mask()
748 int cpu, ret; in update_siblings_masks() local
755 for_each_online_cpu(cpu) { in update_siblings_masks()
756 cpu_topo = &cpu_topology[cpu]; in update_siblings_masks()
758 if (last_level_cache_is_shared(cpu, cpuid)) { in update_siblings_masks()
759 cpumask_set_cpu(cpu, &cpuid_topo->llc_sibling); in update_siblings_masks()
767 cpumask_set_cpu(cpu, &cpuid_topo->core_sibling); in update_siblings_masks()
773 cpumask_set_cpu(cpu, &cpuid_topo->cluster_sibling); in update_siblings_masks()
781 cpumask_set_cpu(cpu, &cpuid_topo->thread_sibling); in update_siblings_masks()
785 static void clear_cpu_topology(int cpu) in clear_cpu_topology() argument
787 struct cpu_topology *cpu_topo = &cpu_topology[cpu]; in clear_cpu_topology()
790 cpumask_set_cpu(cpu, &cpu_topo->llc_sibling); in clear_cpu_topology()
793 cpumask_set_cpu(cpu, &cpu_topo->cluster_sibling); in clear_cpu_topology()
796 cpumask_set_cpu(cpu, &cpu_topo->core_sibling); in clear_cpu_topology()
798 cpumask_set_cpu(cpu, &cpu_topo->thread_sibling); in clear_cpu_topology()
803 unsigned int cpu; in reset_cpu_topology() local
805 for_each_possible_cpu(cpu) { in reset_cpu_topology()
806 struct cpu_topology *cpu_topo = &cpu_topology[cpu]; in reset_cpu_topology()
813 clear_cpu_topology(cpu); in reset_cpu_topology()
817 void remove_cpu_topology(unsigned int cpu) in remove_cpu_topology() argument
821 for_each_cpu(sibling, topology_core_cpumask(cpu)) in remove_cpu_topology()
822 cpumask_clear_cpu(cpu, topology_core_cpumask(sibling)); in remove_cpu_topology()
823 for_each_cpu(sibling, topology_sibling_cpumask(cpu)) in remove_cpu_topology()
824 cpumask_clear_cpu(cpu, topology_sibling_cpumask(sibling)); in remove_cpu_topology()
825 for_each_cpu(sibling, topology_cluster_cpumask(cpu)) in remove_cpu_topology()
826 cpumask_clear_cpu(cpu, topology_cluster_cpumask(sibling)); in remove_cpu_topology()
827 for_each_cpu(sibling, topology_llc_cpumask(cpu)) in remove_cpu_topology()
828 cpumask_clear_cpu(cpu, topology_llc_cpumask(sibling)); in remove_cpu_topology()
830 clear_cpu_topology(cpu); in remove_cpu_topology()
839 static bool __init acpi_cpu_is_threaded(int cpu) in acpi_cpu_is_threaded() argument
841 int is_threaded = acpi_pptt_cpu_is_thread(cpu); in acpi_cpu_is_threaded()
863 int cpu, topology_id; in parse_acpi_topology() local
870 for_each_possible_cpu(cpu) { in parse_acpi_topology()
871 topology_id = find_acpi_cpu_topology(cpu, 0); in parse_acpi_topology()
875 if (acpi_cpu_is_threaded(cpu)) { in parse_acpi_topology()
876 cpu_topology[cpu].thread_id = topology_id; in parse_acpi_topology()
877 topology_id = find_acpi_cpu_topology(cpu, 1); in parse_acpi_topology()
878 cpu_topology[cpu].core_id = topology_id; in parse_acpi_topology()
883 * Count the number of threads for only one CPU (i.e. in parse_acpi_topology()
892 hetero_id = find_acpi_cpu_topology_hetero_id(cpu); in parse_acpi_topology()
908 cpu_topology[cpu].thread_id = -1; in parse_acpi_topology()
909 cpu_topology[cpu].core_id = topology_id; in parse_acpi_topology()
911 topology_id = find_acpi_cpu_topology_cluster(cpu); in parse_acpi_topology()
912 cpu_topology[cpu].cluster_id = topology_id; in parse_acpi_topology()
913 topology_id = find_acpi_cpu_topology_package(cpu); in parse_acpi_topology()
914 cpu_topology[cpu].package_id = topology_id; in parse_acpi_topology()
919 * number of heterogeneous CPU clusters. On a homogeneous system in parse_acpi_topology()
935 int cpu, ret; in init_cpu_topology() local
951 for_each_possible_cpu(cpu) { in init_cpu_topology()
952 ret = fetch_cache_info(cpu); in init_cpu_topology()
972 pr_debug("CPU%u: package %d core %d thread %d\n", in store_cpu_topology()