Lines Matching refs:rp

191 	int (*check_unit)(struct rapl_package *rp, int cpu);
193 u64 (*compute_time_window)(struct rapl_package *rp, u64 val,
227 static void rapl_init_domains(struct rapl_package *rp);
253 struct rapl_package *rp; in find_package_by_id() local
255 list_for_each_entry(rp, &rapl_packages, plist) { in find_package_by_id()
256 if (rp->id == id) in find_package_by_id()
257 return rp; in find_package_by_id()
322 struct rapl_package *rp; in release_zone() local
328 rp = find_package_by_id(rd->package_id); in release_zone()
329 if (!rp) { in release_zone()
335 rp->domains = NULL; in release_zone()
430 struct rapl_package *rp; in set_power_limit() local
435 rp = find_package_by_id(rd->package_id); in set_power_limit()
436 if (!rp) { in set_power_limit()
597 static void rapl_init_domains(struct rapl_package *rp) in rapl_init_domains() argument
600 struct rapl_domain *rd = rp->domains; in rapl_init_domains()
603 unsigned int mask = rp->domain_map & (1 << i); in rapl_init_domains()
658 rd->package_id = rp->id; in rapl_init_domains()
669 struct rapl_package *rp; in rapl_unit_xlate() local
672 rp = find_package_by_id(package); in rapl_unit_xlate()
673 if (!rp) in rapl_unit_xlate()
678 units = rp->power_unit; in rapl_unit_xlate()
686 units = rp->energy_unit; in rapl_unit_xlate()
689 return rapl_defaults->compute_time_window(rp, value, to_raw); in rapl_unit_xlate()
763 struct rapl_primitive_info *rp = &rpi[prim]; in rapl_read_data_raw() local
766 if (!rp->name || rp->flag & RAPL_PRIMITIVE_DUMMY) in rapl_read_data_raw()
769 msr = rd->msrs[rp->id]; in rapl_read_data_raw()
779 rp->mask = POWER_PACKAGE_LOCK; in rapl_read_data_raw()
780 rp->shift = 63; in rapl_read_data_raw()
783 if (rp->flag & RAPL_PRIMITIVE_DERIVED) { in rapl_read_data_raw()
793 final = value & rp->mask; in rapl_read_data_raw()
794 final = final >> rp->shift; in rapl_read_data_raw()
796 *data = rapl_unit_xlate(rd, rd->package_id, rp->unit, final, 0); in rapl_read_data_raw()
810 struct rapl_primitive_info *rp = &rpi[prim]; in rapl_write_data_raw() local
816 msr = rd->msrs[rp->id]; in rapl_write_data_raw()
822 value = rapl_unit_xlate(rd, rd->package_id, rp->unit, value, 1); in rapl_write_data_raw()
823 msr_val &= ~rp->mask; in rapl_write_data_raw()
824 msr_val |= value << rp->shift; in rapl_write_data_raw()
845 static int rapl_check_unit_core(struct rapl_package *rp, int cpu) in rapl_check_unit_core() argument
857 rp->energy_unit = ENERGY_UNIT_SCALE * 1000000 / (1 << value); in rapl_check_unit_core()
860 rp->power_unit = 1000000 / (1 << value); in rapl_check_unit_core()
863 rp->time_unit = 1000000 / (1 << value); in rapl_check_unit_core()
866 rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); in rapl_check_unit_core()
871 static int rapl_check_unit_atom(struct rapl_package *rp, int cpu) in rapl_check_unit_atom() argument
882 rp->energy_unit = ENERGY_UNIT_SCALE * 1 << value; in rapl_check_unit_atom()
885 rp->power_unit = (1 << value) * 1000; in rapl_check_unit_atom()
888 rp->time_unit = 1000000 / (1 << value); in rapl_check_unit_atom()
891 rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); in rapl_check_unit_atom()
911 struct rapl_package *rp; in package_power_limit_irq_save() local
913 rp = find_package_by_id(package_id); in package_power_limit_irq_save()
914 if (!rp) in package_power_limit_irq_save()
925 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) { in package_power_limit_irq_save()
926 rp->power_limit_irq = l & PACKAGE_THERM_INT_PLN_ENABLE; in package_power_limit_irq_save()
927 rp->power_limit_irq |= PACKAGE_PLN_INT_SAVED; in package_power_limit_irq_save()
938 struct rapl_package *rp; in package_power_limit_irq_restore() local
940 rp = find_package_by_id(package_id); in package_power_limit_irq_restore()
941 if (!rp) in package_power_limit_irq_restore()
952 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) in package_power_limit_irq_restore()
956 if (rp->power_limit_irq & PACKAGE_THERM_INT_PLN_ENABLE) in package_power_limit_irq_restore()
1003 static u64 rapl_compute_time_window_core(struct rapl_package *rp, u64 value, in rapl_compute_time_window_core() argument
1015 value = (1 << y) * (4 + f) * rp->time_unit / 4; in rapl_compute_time_window_core()
1017 do_div(value, rp->time_unit); in rapl_compute_time_window_core()
1025 static u64 rapl_compute_time_window_atom(struct rapl_package *rp, u64 value, in rapl_compute_time_window_atom() argument
1033 return (value) ? value *= rp->time_unit : rp->time_unit; in rapl_compute_time_window_atom()
1035 value = div64_u64(value, rp->time_unit); in rapl_compute_time_window_atom()
1117 struct rapl_package *rp; in rapl_update_domain_data() local
1119 list_for_each_entry(rp, &rapl_packages, plist) { in rapl_update_domain_data()
1120 for (dmn = 0; dmn < rp->nr_domains; dmn++) { in rapl_update_domain_data()
1121 pr_debug("update package %d domain %s data\n", rp->id, in rapl_update_domain_data()
1122 rp->domains[dmn].name); in rapl_update_domain_data()
1125 if (!rapl_read_data_raw(&rp->domains[dmn], prim, in rapl_update_domain_data()
1128 rp->domains[dmn].rdd.primitives[prim] = in rapl_update_domain_data()
1137 struct rapl_package *rp; in rapl_unregister_powercap() local
1143 list_for_each_entry(rp, &rapl_packages, plist) { in rapl_unregister_powercap()
1144 package_power_limit_irq_restore(rp->id); in rapl_unregister_powercap()
1146 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; in rapl_unregister_powercap()
1149 rp->id, rd->name); in rapl_unregister_powercap()
1172 static int rapl_package_register_powercap(struct rapl_package *rp) in rapl_package_register_powercap() argument
1181 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_package_register_powercap()
1185 rp->id, rd->name); in rapl_package_register_powercap()
1188 rd->name, rp->id); in rapl_package_register_powercap()
1197 rp->id); in rapl_package_register_powercap()
1202 rp->power_zone = power_zone; in rapl_package_register_powercap()
1213 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_package_register_powercap()
1220 rp->power_zone, in rapl_package_register_powercap()
1226 rp->id, rd->name, dev_name); in rapl_package_register_powercap()
1238 while (--rd >= rp->domains) { in rapl_package_register_powercap()
1239 pr_debug("unregister package %d domain %s\n", rp->id, rd->name); in rapl_package_register_powercap()
1249 struct rapl_package *rp; in rapl_register_powercap() local
1259 list_for_each_entry(rp, &rapl_packages, plist) in rapl_register_powercap()
1260 if (rapl_package_register_powercap(rp)) in rapl_register_powercap()
1266 list_for_each_entry_continue_reverse(rp, &rapl_packages, plist) { in rapl_register_powercap()
1267 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; in rapl_register_powercap()
1270 rp->id, rd->name); in rapl_register_powercap()
1312 static int rapl_detect_domains(struct rapl_package *rp, int cpu) in rapl_detect_domains() argument
1322 rp->domain_map |= 1 << i; in rapl_detect_domains()
1326 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); in rapl_detect_domains()
1327 if (!rp->nr_domains) { in rapl_detect_domains()
1328 pr_err("no valid rapl domains found in package %d\n", rp->id); in rapl_detect_domains()
1332 pr_debug("found %d domains on package %d\n", rp->nr_domains, rp->id); in rapl_detect_domains()
1334 rp->domains = kcalloc(rp->nr_domains + 1, sizeof(struct rapl_domain), in rapl_detect_domains()
1336 if (!rp->domains) { in rapl_detect_domains()
1340 rapl_init_domains(rp); in rapl_detect_domains()
1342 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_detect_domains()
1349 rp->id, rd->name); in rapl_detect_domains()
1361 struct rapl_package *rp; in is_package_new() local
1366 list_for_each_entry(rp, &rapl_packages, plist) in is_package_new()
1367 if (package == rp->id) in is_package_new()
1382 struct rapl_package *new_package, *rp; in rapl_detect_topology() local
1387 new_package = kzalloc(sizeof(*rp), GFP_KERNEL); in rapl_detect_topology()
1408 rp = find_package_by_id(phy_package_id); in rapl_detect_topology()
1409 if (rp) in rapl_detect_topology()
1410 ++rp->nr_cpus; in rapl_detect_topology()
1418 static void rapl_remove_package(struct rapl_package *rp) in rapl_remove_package() argument
1422 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_remove_package()
1427 pr_debug("remove package %d, %s domain\n", rp->id, rd->name); in rapl_remove_package()
1432 list_del(&rp->plist); in rapl_remove_package()
1433 kfree(rp); in rapl_remove_package()
1441 struct rapl_package *rp; in rapl_add_package() local
1444 rp = kzalloc(sizeof(struct rapl_package), GFP_KERNEL); in rapl_add_package()
1445 if (!rp) in rapl_add_package()
1449 rp->id = phy_package_id; in rapl_add_package()
1450 rp->nr_cpus = 1; in rapl_add_package()
1452 if (rapl_detect_domains(rp, cpu) || in rapl_add_package()
1453 rapl_defaults->check_unit(rp, cpu)) { in rapl_add_package()
1457 if (!rapl_package_register_powercap(rp)) { in rapl_add_package()
1458 INIT_LIST_HEAD(&rp->plist); in rapl_add_package()
1459 list_add(&rp->plist, &rapl_packages); in rapl_add_package()
1464 kfree(rp->domains); in rapl_add_package()
1465 kfree(rp); in rapl_add_package()
1482 struct rapl_package *rp; in rapl_cpu_callback() local
1490 rp = find_package_by_id(phy_package_id); in rapl_cpu_callback()
1491 if (rp) in rapl_cpu_callback()
1492 ++rp->nr_cpus; in rapl_cpu_callback()
1498 rp = find_package_by_id(phy_package_id); in rapl_cpu_callback()
1499 if (!rp) in rapl_cpu_callback()
1501 if (--rp->nr_cpus == 0) in rapl_cpu_callback()
1502 rapl_remove_package(rp); in rapl_cpu_callback()