Lines Matching full:processor
26 * Parses the core cpus list for each processor. This function is called once
27 * per-processor, with the IDs of all other processors in the core list.
29 * The 'processor_[start|count]' are populated in the processor's 'core'
32 * The 'core_leader_id' of each processor is set to the smallest ID in it's
41 uint32_t processor, in core_cpus_parser() argument
48 /* If the processor already has a leader, use it. */ in core_cpus_parser()
49 if (bitmask_all(processors[processor].flags, CPUINFO_LINUX_FLAG_CORE_CLUSTER)) { in core_cpus_parser()
50 processor_start = processors[processor].core_leader_id; in core_cpus_parser()
58 * The first valid processor observed is the smallest ID in the in core_cpus_parser()
68 * If the cluster flag has not been set, assign the processor start. If in core_cpus_parser()
69 * it has been set, only apply the processor start if it's less than the in core_cpus_parser()
74 if (!bitmask_all(processors[processor].flags, CPUINFO_LINUX_FLAG_CORE_CLUSTER) || in core_cpus_parser()
75 processors[processor].core.processor_start > processor_start) { in core_cpus_parser()
76 processors[processor].core.processor_start = processor_start; in core_cpus_parser()
77 processors[processor].core_leader_id = processor_start; in core_cpus_parser()
79 processors[processor].core.processor_count += processor_count; in core_cpus_parser()
80 processors[processor].flags |= CPUINFO_LINUX_FLAG_CORE_CLUSTER; in core_cpus_parser()
86 * Parses the cluster cpu list for each processor. This function is called once
87 * per-processor, with the IDs of all other processors in the cluster.
89 * The 'cluster_leader_id' of each processor is set to the smallest ID in it's
97 uint32_t processor, in cluster_cpus_parser() argument
105 /* If the processor already has a leader, use it. */ in cluster_cpus_parser()
106 if (bitmask_all(processors[processor].flags, CPUINFO_LINUX_FLAG_CLUSTER_CLUSTER)) { in cluster_cpus_parser()
107 processor_start = processors[processor].cluster_leader_id; in cluster_cpus_parser()
115 * The first valid processor observed is the smallest ID in the in cluster_cpus_parser()
124 * A processor should only represent it's core if it is the in cluster_cpus_parser()
132 * If the cluster flag has not been set, assign the processor start. If in cluster_cpus_parser()
133 * it has been set, only apply the processor start if it's less than the in cluster_cpus_parser()
138 if (!bitmask_all(processors[processor].flags, CPUINFO_LINUX_FLAG_CLUSTER_CLUSTER) || in cluster_cpus_parser()
139 processors[processor].cluster.processor_start > processor_start) { in cluster_cpus_parser()
140 processors[processor].cluster.processor_start = processor_start; in cluster_cpus_parser()
141 processors[processor].cluster.core_start = processor_start; in cluster_cpus_parser()
142 processors[processor].cluster.cluster_id = processor_start; in cluster_cpus_parser()
143 processors[processor].cluster_leader_id = processor_start; in cluster_cpus_parser()
145 processors[processor].cluster.processor_count += processor_count; in cluster_cpus_parser()
146 processors[processor].cluster.core_count += core_count; in cluster_cpus_parser()
147 processors[processor].flags |= CPUINFO_LINUX_FLAG_CLUSTER_CLUSTER; in cluster_cpus_parser()
152 * Parses the package cpus list for each processor. This function is called once
153 * per-processor, with the IDs of all other processors in the package list.
155 * The 'processor_[start|count]' are populated in the processor's 'package'
158 * The 'package_leader_id' of each processor is set to the smallest ID in it's
166 uint32_t processor, in package_cpus_parser() argument
175 /* If the processor already has a leader, use it. */ in package_cpus_parser()
176 if (bitmask_all(processors[processor].flags, CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER)) { in package_cpus_parser()
177 processor_start = processors[processor].package_leader_id; in package_cpus_parser()
185 * The first valid processor observed is the smallest ID in the in package_cpus_parser()
194 * A processor should only represent it's core if it is the in package_cpus_parser()
205 * If the cluster flag has not been set, assign the processor start. If in package_cpus_parser()
206 * it has been set, only apply the processor start if it's less than the in package_cpus_parser()
211 if (!bitmask_all(processors[processor].flags, CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER) || in package_cpus_parser()
212 processors[processor].package.processor_start > processor_start) { in package_cpus_parser()
213 processors[processor].package.processor_start = processor_start; in package_cpus_parser()
214 processors[processor].package.cluster_start = processor_start; in package_cpus_parser()
215 processors[processor].package.core_start = processor_start; in package_cpus_parser()
216 processors[processor].package_leader_id = processor_start; in package_cpus_parser()
218 processors[processor].package.processor_count += processor_count; in package_cpus_parser()
219 processors[processor].package.cluster_count += cluster_count; in package_cpus_parser()
220 processors[processor].package.core_count += core_count; in package_cpus_parser()
221 processors[processor].flags |= CPUINFO_LINUX_FLAG_PACKAGE_CLUSTER; in package_cpus_parser()
240 * but processor information cannot be gathered on non-present in cpuinfo_riscv_linux_init()
247 * Note: This computes the maximum processor ID of the 'present' in cpuinfo_riscv_linux_init()
259 * Allocate space to store all processor information. This array is in cpuinfo_riscv_linux_init()
260 * sized to the max processor ID as opposed to the number of 'present' in cpuinfo_riscv_linux_init()
274 * each processor struct that we find. in cpuinfo_riscv_linux_init()
285 /* Populate processor information. */ in cpuinfo_riscv_linux_init()
286 for (size_t processor = 0; processor < max_processor_id; processor++) { in cpuinfo_riscv_linux_init() local
287 if (!bitmask_all(riscv_linux_processors[processor].flags, CPUINFO_LINUX_FLAG_VALID)) { in cpuinfo_riscv_linux_init()
291 riscv_linux_processors[processor].processor.linux_id = processor; in cpuinfo_riscv_linux_init()
295 for (size_t processor = 0; processor < max_processor_id; processor++) { in cpuinfo_riscv_linux_init() local
296 if (!bitmask_all(riscv_linux_processors[processor].flags, CPUINFO_LINUX_FLAG_VALID)) { in cpuinfo_riscv_linux_init()
300 /* Populate processor start and count information. */ in cpuinfo_riscv_linux_init()
303 processor, in cpuinfo_riscv_linux_init()
306 cpuinfo_log_error("failed to detect core cpus for processor %zu.", processor); in cpuinfo_riscv_linux_init()
311 …if (cpuinfo_linux_get_processor_core_id(processor, &riscv_linux_processors[processor].core.core_id… in cpuinfo_riscv_linux_init()
312 riscv_linux_processors[processor].flags |= CPUINFO_LINUX_FLAG_CORE_ID; in cpuinfo_riscv_linux_init()
317 * processor. When the final 'cores' list is constructed, only in cpuinfo_riscv_linux_init()
321 processor, in cpuinfo_riscv_linux_init()
322 &riscv_linux_processors[processor].core.vendor, in cpuinfo_riscv_linux_init()
323 &riscv_linux_processors[processor].core.uarch); in cpuinfo_riscv_linux_init()
326 uint32_t frequency = cpuinfo_linux_get_processor_cur_frequency(processor); in cpuinfo_riscv_linux_init()
328 riscv_linux_processors[processor].core.frequency = frequency; in cpuinfo_riscv_linux_init()
329 riscv_linux_processors[processor].flags |= CPUINFO_LINUX_FLAG_CUR_FREQUENCY; in cpuinfo_riscv_linux_init()
334 for (size_t processor = 0; processor < max_processor_id; processor++) { in cpuinfo_riscv_linux_init() local
335 if (!bitmask_all(riscv_linux_processors[processor].flags, CPUINFO_LINUX_FLAG_VALID)) { in cpuinfo_riscv_linux_init()
340 processor, in cpuinfo_riscv_linux_init()
343 cpuinfo_log_warning("failed to detect cluster cpus for processor %zu.", processor); in cpuinfo_riscv_linux_init()
349 * this logical processor. When the 'clusters' list is in cpuinfo_riscv_linux_init()
353 riscv_linux_processors[processor].cluster.vendor = riscv_linux_processors[processor].core.vendor; in cpuinfo_riscv_linux_init()
354 riscv_linux_processors[processor].cluster.uarch = riscv_linux_processors[processor].core.uarch; in cpuinfo_riscv_linux_init()
355 …riscv_linux_processors[processor].cluster.frequency = riscv_linux_processors[processor].core.frequ… in cpuinfo_riscv_linux_init()
359 for (size_t processor = 0; processor < max_processor_id; processor++) { in cpuinfo_riscv_linux_init() local
360 if (!bitmask_all(riscv_linux_processors[processor].flags, CPUINFO_LINUX_FLAG_VALID)) { in cpuinfo_riscv_linux_init()
365 processor, in cpuinfo_riscv_linux_init()
368 cpuinfo_log_warning("failed to detect package cpus for processor %zu.", processor); in cpuinfo_riscv_linux_init()
378 * present on the system, sort the processor list by micro-architecture in cpuinfo_riscv_linux_init()
381 * Ensure this is done at the end of composing the processor list - the in cpuinfo_riscv_linux_init()
382 * parsing functions assume that the position of the processor in the in cpuinfo_riscv_linux_init()
400 for (size_t processor = 0; processor < max_processor_id; processor++) { in cpuinfo_riscv_linux_init() local
401 if (!bitmask_all(riscv_linux_processors[processor].flags, CPUINFO_LINUX_FLAG_VALID)) { in cpuinfo_riscv_linux_init()
407 * the 'linux_id' as opposed to 'processor'. The sort function in cpuinfo_riscv_linux_init()
411 uint32_t linux_id = riscv_linux_processors[processor].processor.linux_id; in cpuinfo_riscv_linux_init()
414 if (riscv_linux_processors[processor].core_leader_id == linux_id) { in cpuinfo_riscv_linux_init()
417 if (riscv_linux_processors[processor].cluster_leader_id == linux_id) { in cpuinfo_riscv_linux_init()
420 if (riscv_linux_processors[processor].package_leader_id == linux_id) { in cpuinfo_riscv_linux_init()
427 if (last_uarch != riscv_linux_processors[processor].core.uarch || valid_uarchs_count == 0) { in cpuinfo_riscv_linux_init()
429 last_uarch = riscv_linux_processors[processor].core.uarch; in cpuinfo_riscv_linux_init()
482 "failed to allocate %zu bytes for %" PRIu32 " processor map.", in cpuinfo_riscv_linux_init()
506 /* Transfer contents of processor list to ABI structures. */ in cpuinfo_riscv_linux_init()
513 for (size_t processor = 0; processor < max_processor_id; processor++) { in cpuinfo_riscv_linux_init() local
514 if (!bitmask_all(riscv_linux_processors[processor].flags, CPUINFO_LINUX_FLAG_VALID)) { in cpuinfo_riscv_linux_init()
520 * the 'linux_id' as opposed to 'processor'. The sort function in cpuinfo_riscv_linux_init()
524 uint32_t linux_id = riscv_linux_processors[processor].processor.linux_id; in cpuinfo_riscv_linux_init()
527 if (last_uarch != riscv_linux_processors[processor].core.uarch || valid_uarchs_index == 0) { in cpuinfo_riscv_linux_init()
528 uarchs[valid_uarchs_index++].uarch = riscv_linux_processors[processor].core.uarch; in cpuinfo_riscv_linux_init()
529 last_uarch = riscv_linux_processors[processor].core.uarch; in cpuinfo_riscv_linux_init()
534 &riscv_linux_processors[processor].processor, in cpuinfo_riscv_linux_init()
537 /* Update uarch processor count. */ in cpuinfo_riscv_linux_init()
541 if (riscv_linux_processors[processor].core_leader_id == linux_id) { in cpuinfo_riscv_linux_init()
543 &riscv_linux_processors[processor].core, in cpuinfo_riscv_linux_init()
550 if (riscv_linux_processors[processor].cluster_leader_id == linux_id) { in cpuinfo_riscv_linux_init()
552 &riscv_linux_processors[processor].cluster, in cpuinfo_riscv_linux_init()
557 if (riscv_linux_processors[processor].package_leader_id == linux_id) { in cpuinfo_riscv_linux_init()
559 &riscv_linux_processors[processor].package, in cpuinfo_riscv_linux_init()