Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

powercap/intel_rapl: Update RAPL domain name and debug messages

The RAPL domain "name" attribute contains "Package-N", which is ambiguous
on multi-die per-package systems.

Update the name to "package-X-die-Y" on those systems.

No change on systems without multi-die/package.

Update driver debug messages.

Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: linux-pm@vger.kernel.org
Link: https://lkml.kernel.org/r/6510b784e16374447965925588ec6e46d5d007d8.1557769318.git.len.brown@intel.com

authored by

Zhang Rui and committed by
Thomas Gleixner
9ea7612c 724adec3

+32 -25
+32 -25
drivers/powercap/intel_rapl.c
··· 178 178 #define power_zone_to_rapl_domain(_zone) \ 179 179 container_of(_zone, struct rapl_domain, power_zone) 180 180 181 + /* maximum rapl package domain name: package-%d-die-%d */ 182 + #define PACKAGE_DOMAIN_NAME_LENGTH 30 181 183 182 - /* Each physical package contains multiple domains, these are the common 184 + 185 + /* Each rapl package contains multiple domains, these are the common 183 186 * data across RAPL domains within a package. 184 187 */ 185 188 struct rapl_package { 186 - unsigned int id; /* physical package/socket id */ 189 + unsigned int id; /* logical die id, equals physical 1-die systems */ 187 190 unsigned int nr_domains; 188 191 unsigned long domain_map; /* bit map of active domains */ 189 192 unsigned int power_unit; ··· 201 198 int lead_cpu; /* one active cpu per package for access */ 202 199 /* Track active cpus */ 203 200 struct cpumask cpumask; 201 + char name[PACKAGE_DOMAIN_NAME_LENGTH]; 204 202 }; 205 203 206 204 struct rapl_defaults { ··· 930 926 value = (msr_val & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; 931 927 rp->time_unit = 1000000 / (1 << value); 932 928 933 - pr_debug("Core CPU package %d energy=%dpJ, time=%dus, power=%duW\n", 934 - rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); 929 + pr_debug("Core CPU %s energy=%dpJ, time=%dus, power=%duW\n", 930 + rp->name, rp->energy_unit, rp->time_unit, rp->power_unit); 935 931 936 932 return 0; 937 933 } ··· 955 951 value = (msr_val & TIME_UNIT_MASK) >> TIME_UNIT_OFFSET; 956 952 rp->time_unit = 1000000 / (1 << value); 957 953 958 - pr_debug("Atom package %d energy=%dpJ, time=%dus, power=%duW\n", 959 - rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); 954 + pr_debug("Atom %s energy=%dpJ, time=%dus, power=%duW\n", 955 + rp->name, rp->energy_unit, rp->time_unit, rp->power_unit); 960 956 961 957 return 0; 962 958 } ··· 1185 1181 u64 val; 1186 1182 1187 1183 for (dmn = 0; dmn < rp->nr_domains; dmn++) { 1188 - pr_debug("update package %d domain %s data\n", rp->id, 1184 + pr_debug("update %s domain %s data\n", rp->name, 1189 1185 rp->domains[dmn].name); 1190 1186 /* exclude non-raw primitives */ 1191 1187 for (prim = 0; prim < NR_RAW_PRIMITIVES; prim++) { ··· 1210 1206 static int rapl_package_register_powercap(struct rapl_package *rp) 1211 1207 { 1212 1208 struct rapl_domain *rd; 1213 - char dev_name[17]; /* max domain name = 7 + 1 + 8 for int + 1 for null*/ 1214 1209 struct powercap_zone *power_zone = NULL; 1215 1210 int nr_pl, ret; 1216 1211 ··· 1220 1217 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { 1221 1218 if (rd->id == RAPL_DOMAIN_PACKAGE) { 1222 1219 nr_pl = find_nr_power_limit(rd); 1223 - pr_debug("register socket %d package domain %s\n", 1224 - rp->id, rd->name); 1225 - memset(dev_name, 0, sizeof(dev_name)); 1226 - snprintf(dev_name, sizeof(dev_name), "%s-%d", 1227 - rd->name, rp->id); 1220 + pr_debug("register package domain %s\n", rp->name); 1228 1221 power_zone = powercap_register_zone(&rd->power_zone, 1229 1222 control_type, 1230 - dev_name, NULL, 1223 + rp->name, NULL, 1231 1224 &zone_ops[rd->id], 1232 1225 nr_pl, 1233 1226 &constraint_ops); 1234 1227 if (IS_ERR(power_zone)) { 1235 - pr_debug("failed to register package, %d\n", 1236 - rp->id); 1228 + pr_debug("failed to register power zone %s\n", 1229 + rp->name); 1237 1230 return PTR_ERR(power_zone); 1238 1231 } 1239 1232 /* track parent zone in per package/socket data */ ··· 1255 1256 &constraint_ops); 1256 1257 1257 1258 if (IS_ERR(power_zone)) { 1258 - pr_debug("failed to register power_zone, %d:%s:%s\n", 1259 - rp->id, rd->name, dev_name); 1259 + pr_debug("failed to register power_zone, %s:%s\n", 1260 + rp->name, rd->name); 1260 1261 ret = PTR_ERR(power_zone); 1261 1262 goto err_cleanup; 1262 1263 } ··· 1269 1270 * failed after the first domain setup. 1270 1271 */ 1271 1272 while (--rd >= rp->domains) { 1272 - pr_debug("unregister package %d domain %s\n", rp->id, rd->name); 1273 + pr_debug("unregister %s domain %s\n", rp->name, rd->name); 1273 1274 powercap_unregister_zone(control_type, &rd->power_zone); 1274 1275 } 1275 1276 ··· 1379 1380 /* check if the domain is locked by BIOS, ignore if MSR doesn't exist */ 1380 1381 if (!rapl_read_data_raw(rd, FW_LOCK, false, &val64)) { 1381 1382 if (val64) { 1382 - pr_info("RAPL package %d domain %s locked by BIOS\n", 1383 - rd->rp->id, rd->name); 1383 + pr_info("RAPL %s domain %s locked by BIOS\n", 1384 + rd->rp->name, rd->name); 1384 1385 rd->state |= DOMAIN_STATE_BIOS_LOCKED; 1385 1386 } 1386 1387 } ··· 1409 1410 } 1410 1411 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); 1411 1412 if (!rp->nr_domains) { 1412 - pr_debug("no valid rapl domains found in package %d\n", rp->id); 1413 + pr_debug("no valid rapl domains found in %s\n", rp->name); 1413 1414 return -ENODEV; 1414 1415 } 1415 - pr_debug("found %d domains on package %d\n", rp->nr_domains, rp->id); 1416 + pr_debug("found %d domains on %s\n", rp->nr_domains, rp->name); 1416 1417 1417 1418 rp->domains = kcalloc(rp->nr_domains + 1, sizeof(struct rapl_domain), 1418 1419 GFP_KERNEL); ··· 1445 1446 rd_package = rd; 1446 1447 continue; 1447 1448 } 1448 - pr_debug("remove package, undo power limit on %d: %s\n", 1449 - rp->id, rd->name); 1449 + pr_debug("remove package, undo power limit on %s: %s\n", 1450 + rp->name, rd->name); 1450 1451 powercap_unregister_zone(control_type, &rd->power_zone); 1451 1452 } 1452 1453 /* do parent zone last */ ··· 1460 1461 { 1461 1462 int id = topology_logical_die_id(cpu); 1462 1463 struct rapl_package *rp; 1464 + struct cpuinfo_x86 *c = &cpu_data(cpu); 1463 1465 int ret; 1464 1466 1465 1467 rp = kzalloc(sizeof(struct rapl_package), GFP_KERNEL); ··· 1470 1470 /* add the new package to the list */ 1471 1471 rp->id = id; 1472 1472 rp->lead_cpu = cpu; 1473 + 1474 + if (topology_max_die_per_package() > 1) 1475 + snprintf(rp->name, PACKAGE_DOMAIN_NAME_LENGTH, 1476 + "package-%d-die-%d", c->phys_proc_id, c->cpu_die_id); 1477 + else 1478 + snprintf(rp->name, PACKAGE_DOMAIN_NAME_LENGTH, "package-%d", 1479 + c->phys_proc_id); 1473 1480 1474 1481 /* check if the package contains valid domains */ 1475 1482 if (rapl_detect_domains(rp, cpu) ||