|
|
|
@ -224,11 +224,13 @@ static struct topo_obj* add_cache_domain_to_package(struct topo_obj *cache,
|
|
|
|
|
package->obj_type = OBJ_TYPE_PACKAGE;
|
|
|
|
|
package->obj_type_list = &packages;
|
|
|
|
|
package->number = packageid;
|
|
|
|
|
package->max_load = 0;
|
|
|
|
|
packages = g_list_append(packages, package);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
entry = g_list_find(package->children, cache);
|
|
|
|
|
if (!entry) {
|
|
|
|
|
package->max_load += cache->max_load;
|
|
|
|
|
package->children = g_list_append(package->children, cache);
|
|
|
|
|
cache->parent = package;
|
|
|
|
|
}
|
|
|
|
@ -264,12 +266,14 @@ static struct topo_obj* add_cpu_to_cache_domain(struct topo_obj *cpu,
|
|
|
|
|
cache->mask = cache_mask;
|
|
|
|
|
cache->number = cache_domain_count;
|
|
|
|
|
cache->obj_type_list = &cache_domains;
|
|
|
|
|
cache->max_load = 0;
|
|
|
|
|
cache_domains = g_list_append(cache_domains, cache);
|
|
|
|
|
cache_domain_count++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
entry = g_list_find(cache->children, cpu);
|
|
|
|
|
if (!entry) {
|
|
|
|
|
cache->max_load += cpu->max_load;
|
|
|
|
|
cache->children = g_list_append(cache->children, cpu);
|
|
|
|
|
cpu->parent = (struct topo_obj *)cache;
|
|
|
|
|
}
|
|
|
|
@ -317,6 +321,8 @@ static void do_one_cpu(char *path)
|
|
|
|
|
|
|
|
|
|
cpu->number = strtoul(&path[27], NULL, 10);
|
|
|
|
|
|
|
|
|
|
cpu->max_load = SLEEP_INTERVAL * 1000 * 1000; // SLEEP_INTERVAL in nanoseconds, should be a good enough approximation
|
|
|
|
|
|
|
|
|
|
cpu_set(cpu->number, cpu_online_map);
|
|
|
|
|
|
|
|
|
|
cpu_set(cpu->number, cpu->mask);
|
|
|
|
@ -398,6 +404,8 @@ static void do_one_cpu(char *path)
|
|
|
|
|
* we override package_mask with node mask.
|
|
|
|
|
*/
|
|
|
|
|
node = get_numa_node(nodeid);
|
|
|
|
|
if (node)
|
|
|
|
|
node->max_load += cpu->max_load;
|
|
|
|
|
if (node && (cpus_weight(package_mask) > cpus_weight(node->mask)))
|
|
|
|
|
cpus_and(package_mask, package_mask, node->mask);
|
|
|
|
|
}
|
|
|
|
|