Lines Matching refs:rp
190 int (*check_unit)(struct rapl_package *rp, int cpu);
192 u64 (*compute_time_window)(struct rapl_package *rp, u64 val,
225 static void rapl_init_domains(struct rapl_package *rp);
251 struct rapl_package *rp; in find_package_by_id() local
253 list_for_each_entry(rp, &rapl_packages, plist) { in find_package_by_id()
254 if (rp->id == id) in find_package_by_id()
255 return rp; in find_package_by_id()
320 struct rapl_package *rp; in release_zone() local
326 rp = find_package_by_id(rd->package_id); in release_zone()
327 if (!rp) { in release_zone()
333 rp->domains = NULL; in release_zone()
427 struct rapl_package *rp; in set_power_limit() local
432 rp = find_package_by_id(rd->package_id); in set_power_limit()
433 if (!rp) { in set_power_limit()
594 static void rapl_init_domains(struct rapl_package *rp) in rapl_init_domains() argument
597 struct rapl_domain *rd = rp->domains; in rapl_init_domains()
600 unsigned int mask = rp->domain_map & (1 << i); in rapl_init_domains()
655 rd->package_id = rp->id; in rapl_init_domains()
666 struct rapl_package *rp; in rapl_unit_xlate() local
669 rp = find_package_by_id(package); in rapl_unit_xlate()
670 if (!rp) in rapl_unit_xlate()
675 units = rp->power_unit; in rapl_unit_xlate()
683 units = rp->energy_unit; in rapl_unit_xlate()
686 return rapl_defaults->compute_time_window(rp, value, to_raw); in rapl_unit_xlate()
760 struct rapl_primitive_info *rp = &rpi[prim]; in rapl_read_data_raw() local
763 if (!rp->name || rp->flag & RAPL_PRIMITIVE_DUMMY) in rapl_read_data_raw()
766 msr = rd->msrs[rp->id]; in rapl_read_data_raw()
776 rp->mask = POWER_PACKAGE_LOCK; in rapl_read_data_raw()
777 rp->shift = 63; in rapl_read_data_raw()
780 if (rp->flag & RAPL_PRIMITIVE_DERIVED) { in rapl_read_data_raw()
790 final = value & rp->mask; in rapl_read_data_raw()
791 final = final >> rp->shift; in rapl_read_data_raw()
793 *data = rapl_unit_xlate(rd, rd->package_id, rp->unit, final, 0); in rapl_read_data_raw()
807 struct rapl_primitive_info *rp = &rpi[prim]; in rapl_write_data_raw() local
813 msr = rd->msrs[rp->id]; in rapl_write_data_raw()
819 value = rapl_unit_xlate(rd, rd->package_id, rp->unit, value, 1); in rapl_write_data_raw()
820 msr_val &= ~rp->mask; in rapl_write_data_raw()
821 msr_val |= value << rp->shift; in rapl_write_data_raw()
842 static int rapl_check_unit_core(struct rapl_package *rp, int cpu) in rapl_check_unit_core() argument
854 rp->energy_unit = ENERGY_UNIT_SCALE * 1000000 / (1 << value); in rapl_check_unit_core()
857 rp->power_unit = 1000000 / (1 << value); in rapl_check_unit_core()
860 rp->time_unit = 1000000 / (1 << value); in rapl_check_unit_core()
863 rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); in rapl_check_unit_core()
868 static int rapl_check_unit_atom(struct rapl_package *rp, int cpu) in rapl_check_unit_atom() argument
879 rp->energy_unit = ENERGY_UNIT_SCALE * 1 << value; in rapl_check_unit_atom()
882 rp->power_unit = (1 << value) * 1000; in rapl_check_unit_atom()
885 rp->time_unit = 1000000 / (1 << value); in rapl_check_unit_atom()
888 rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); in rapl_check_unit_atom()
908 struct rapl_package *rp; in package_power_limit_irq_save() local
910 rp = find_package_by_id(package_id); in package_power_limit_irq_save()
911 if (!rp) in package_power_limit_irq_save()
922 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) { in package_power_limit_irq_save()
923 rp->power_limit_irq = l & PACKAGE_THERM_INT_PLN_ENABLE; in package_power_limit_irq_save()
924 rp->power_limit_irq |= PACKAGE_PLN_INT_SAVED; in package_power_limit_irq_save()
935 struct rapl_package *rp; in package_power_limit_irq_restore() local
937 rp = find_package_by_id(package_id); in package_power_limit_irq_restore()
938 if (!rp) in package_power_limit_irq_restore()
949 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) in package_power_limit_irq_restore()
953 if (rp->power_limit_irq & PACKAGE_THERM_INT_PLN_ENABLE) in package_power_limit_irq_restore()
994 static u64 rapl_compute_time_window_core(struct rapl_package *rp, u64 value, in rapl_compute_time_window_core() argument
1006 value = (1 << y) * (4 + f) * rp->time_unit / 4; in rapl_compute_time_window_core()
1008 do_div(value, rp->time_unit); in rapl_compute_time_window_core()
1016 static u64 rapl_compute_time_window_atom(struct rapl_package *rp, u64 value, in rapl_compute_time_window_atom() argument
1024 return (value) ? value *= rp->time_unit : rp->time_unit; in rapl_compute_time_window_atom()
1026 value = div64_u64(value, rp->time_unit); in rapl_compute_time_window_atom()
1081 struct rapl_package *rp; in rapl_update_domain_data() local
1083 list_for_each_entry(rp, &rapl_packages, plist) { in rapl_update_domain_data()
1084 for (dmn = 0; dmn < rp->nr_domains; dmn++) { in rapl_update_domain_data()
1085 pr_debug("update package %d domain %s data\n", rp->id, in rapl_update_domain_data()
1086 rp->domains[dmn].name); in rapl_update_domain_data()
1089 if (!rapl_read_data_raw(&rp->domains[dmn], prim, in rapl_update_domain_data()
1092 rp->domains[dmn].rdd.primitives[prim] = in rapl_update_domain_data()
1101 struct rapl_package *rp; in rapl_unregister_powercap() local
1107 list_for_each_entry(rp, &rapl_packages, plist) { in rapl_unregister_powercap()
1108 package_power_limit_irq_restore(rp->id); in rapl_unregister_powercap()
1110 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; in rapl_unregister_powercap()
1113 rp->id, rd->name); in rapl_unregister_powercap()
1134 static int rapl_package_register_powercap(struct rapl_package *rp) in rapl_package_register_powercap() argument
1143 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_package_register_powercap()
1147 rp->id, rd->name); in rapl_package_register_powercap()
1150 rd->name, rp->id); in rapl_package_register_powercap()
1159 rp->id); in rapl_package_register_powercap()
1164 rp->power_zone = power_zone; in rapl_package_register_powercap()
1175 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_package_register_powercap()
1182 rp->power_zone, in rapl_package_register_powercap()
1188 rp->id, rd->name, dev_name); in rapl_package_register_powercap()
1200 while (--rd >= rp->domains) { in rapl_package_register_powercap()
1201 pr_debug("unregister package %d domain %s\n", rp->id, rd->name); in rapl_package_register_powercap()
1211 struct rapl_package *rp; in rapl_register_powercap() local
1221 list_for_each_entry(rp, &rapl_packages, plist) in rapl_register_powercap()
1222 if (rapl_package_register_powercap(rp)) in rapl_register_powercap()
1228 list_for_each_entry_continue_reverse(rp, &rapl_packages, plist) { in rapl_register_powercap()
1229 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; in rapl_register_powercap()
1232 rp->id, rd->name); in rapl_register_powercap()
1274 static int rapl_detect_domains(struct rapl_package *rp, int cpu) in rapl_detect_domains() argument
1284 rp->domain_map |= 1 << i; in rapl_detect_domains()
1288 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); in rapl_detect_domains()
1289 if (!rp->nr_domains) { in rapl_detect_domains()
1290 pr_err("no valid rapl domains found in package %d\n", rp->id); in rapl_detect_domains()
1294 pr_debug("found %d domains on package %d\n", rp->nr_domains, rp->id); in rapl_detect_domains()
1296 rp->domains = kcalloc(rp->nr_domains + 1, sizeof(struct rapl_domain), in rapl_detect_domains()
1298 if (!rp->domains) { in rapl_detect_domains()
1302 rapl_init_domains(rp); in rapl_detect_domains()
1304 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_detect_domains()
1308 rp->id, rd->name); in rapl_detect_domains()
1320 struct rapl_package *rp; in is_package_new() local
1325 list_for_each_entry(rp, &rapl_packages, plist) in is_package_new()
1326 if (package == rp->id) in is_package_new()
1341 struct rapl_package *new_package, *rp; in rapl_detect_topology() local
1346 new_package = kzalloc(sizeof(*rp), GFP_KERNEL); in rapl_detect_topology()
1367 rp = find_package_by_id(phy_package_id); in rapl_detect_topology()
1368 if (rp) in rapl_detect_topology()
1369 ++rp->nr_cpus; in rapl_detect_topology()
1377 static void rapl_remove_package(struct rapl_package *rp) in rapl_remove_package() argument
1381 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_remove_package()
1386 pr_debug("remove package %d, %s domain\n", rp->id, rd->name); in rapl_remove_package()
1391 list_del(&rp->plist); in rapl_remove_package()
1392 kfree(rp); in rapl_remove_package()
1400 struct rapl_package *rp; in rapl_add_package() local
1403 rp = kzalloc(sizeof(struct rapl_package), GFP_KERNEL); in rapl_add_package()
1404 if (!rp) in rapl_add_package()
1408 rp->id = phy_package_id; in rapl_add_package()
1409 rp->nr_cpus = 1; in rapl_add_package()
1411 if (rapl_detect_domains(rp, cpu) || in rapl_add_package()
1412 rapl_defaults->check_unit(rp, cpu)) { in rapl_add_package()
1416 if (!rapl_package_register_powercap(rp)) { in rapl_add_package()
1417 INIT_LIST_HEAD(&rp->plist); in rapl_add_package()
1418 list_add(&rp->plist, &rapl_packages); in rapl_add_package()
1423 kfree(rp->domains); in rapl_add_package()
1424 kfree(rp); in rapl_add_package()
1441 struct rapl_package *rp; in rapl_cpu_callback() local
1449 rp = find_package_by_id(phy_package_id); in rapl_cpu_callback()
1450 if (rp) in rapl_cpu_callback()
1451 ++rp->nr_cpus; in rapl_cpu_callback()
1457 rp = find_package_by_id(phy_package_id); in rapl_cpu_callback()
1458 if (!rp) in rapl_cpu_callback()
1460 if (--rp->nr_cpus == 0) in rapl_cpu_callback()
1461 rapl_remove_package(rp); in rapl_cpu_callback()