Lines Matching +full:cpu +full:- +full:core

1 // SPDX-License-Identifier: GPL-2.0-only
3 * (C) 2004-2009 Dominik Brodowski <linux@dominikbrodowski.de>
23 if (fd == -1) in cpupower_read_sysfs()
26 numread = read(fd, buf, buflen - 1); in cpupower_read_sysfs()
39 * Detect whether a CPU is online
42 * 1 -> if CPU is online
43 * 0 -> if CPU is offline
46 int cpupower_is_cpu_online(unsigned int cpu) in cpupower_is_cpu_online() argument
56 snprintf(path, sizeof(path), PATH_TO_CPU "cpu%u", cpu); in cpupower_is_cpu_online()
63 * -> cpuX directory exists, but not cpuX/online file in cpupower_is_cpu_online()
65 snprintf(path, sizeof(path), PATH_TO_CPU "cpu%u/online", cpu); in cpupower_is_cpu_online()
70 if (fd == -1) in cpupower_is_cpu_online()
71 return -errno; in cpupower_is_cpu_online()
73 numread = read(fd, linebuf, MAX_LINE_LEN - 1); in cpupower_is_cpu_online()
76 return -EIO; in cpupower_is_cpu_online()
83 return -EINVAL; in cpupower_is_cpu_online()
88 /* returns -1 on failure, 0 on success */
89 static int sysfs_topology_read_file(unsigned int cpu, const char *fname, int *result) in sysfs_topology_read_file() argument
95 snprintf(path, sizeof(path), PATH_TO_CPU "cpu%u/topology/%s", in sysfs_topology_read_file()
96 cpu, fname); in sysfs_topology_read_file()
98 return -1; in sysfs_topology_read_file()
101 return -1; in sysfs_topology_read_file()
109 if (top1->pkg < top2->pkg) in __compare()
110 return -1; in __compare()
111 else if (top1->pkg > top2->pkg) in __compare()
113 else if (top1->core < top2->core) in __compare()
114 return -1; in __compare()
115 else if (top1->core > top2->core) in __compare()
117 else if (top1->cpu < top2->cpu) in __compare()
118 return -1; in __compare()
119 else if (top1->cpu > top2->cpu) in __compare()
129 * Array is sorted after ->pkg, ->core, then ->cpu
133 int cpu, last_pkg, cpus = sysconf(_SC_NPROCESSORS_CONF); in get_cpu_topology() local
135 cpu_top->core_info = malloc(sizeof(struct cpuid_core_info) * cpus); in get_cpu_topology()
136 if (cpu_top->core_info == NULL) in get_cpu_topology()
137 return -ENOMEM; in get_cpu_topology()
138 cpu_top->pkgs = cpu_top->cores = 0; in get_cpu_topology()
139 for (cpu = 0; cpu < cpus; cpu++) { in get_cpu_topology()
140 cpu_top->core_info[cpu].cpu = cpu; in get_cpu_topology()
141 cpu_top->core_info[cpu].is_online = cpupower_is_cpu_online(cpu); in get_cpu_topology()
143 cpu, in get_cpu_topology()
145 &(cpu_top->core_info[cpu].pkg)) < 0) { in get_cpu_topology()
146 cpu_top->core_info[cpu].pkg = -1; in get_cpu_topology()
147 cpu_top->core_info[cpu].core = -1; in get_cpu_topology()
151 cpu, in get_cpu_topology()
153 &(cpu_top->core_info[cpu].core)) < 0) { in get_cpu_topology()
154 cpu_top->core_info[cpu].pkg = -1; in get_cpu_topology()
155 cpu_top->core_info[cpu].core = -1; in get_cpu_topology()
160 qsort(cpu_top->core_info, cpus, sizeof(struct cpuid_core_info), in get_cpu_topology()
166 last_pkg = cpu_top->core_info[0].pkg; in get_cpu_topology()
167 for(cpu = 1; cpu < cpus; cpu++) { in get_cpu_topology()
168 if (cpu_top->core_info[cpu].pkg != last_pkg && in get_cpu_topology()
169 cpu_top->core_info[cpu].pkg != -1) { in get_cpu_topology()
171 last_pkg = cpu_top->core_info[cpu].pkg; in get_cpu_topology()
172 cpu_top->pkgs++; in get_cpu_topology()
175 if (!(cpu_top->core_info[0].pkg == -1)) in get_cpu_topology()
176 cpu_top->pkgs++; in get_cpu_topology()
181 for (cpu = 0; cpu_top->core_info[cpu].pkg = 0 && cpu < cpus; cpu++) { in get_cpu_topology()
182 if (cpu_top->core_info[cpu].core == 0) in get_cpu_topology()
183 cpu_top->cores++; in get_cpu_topology()