/* Handles CPU hotplug on multi-socket systems. * If a CPU goes online as the first CPU of the physical package * we add the RAPL package to the system. Similarly, when the last * CPU of the package is removed, we remove the RAPL package and its * associated domains. Cooling devices are handled accordingly at * per-domain level.
*/ staticint rapl_cpu_online(unsignedint cpu)
{ struct rapl_package *rp;
rp = rapl_find_package_domain_cpuslocked(cpu, rapl_msr_priv, true); if (!rp) {
rp = rapl_add_package_cpuslocked(cpu, rapl_msr_priv, true); if (IS_ERR(rp)) return PTR_ERR(rp);
}
cpumask_set_cpu(cpu, &rp->cpumask); return 0;
}
staticint rapl_cpu_down_prep(unsignedint cpu)
{ struct rapl_package *rp; int lead_cpu;
rp = rapl_find_package_domain_cpuslocked(cpu, rapl_msr_priv, true); if (!rp) return 0;
switch (boot_cpu_data.x86_vendor) { case X86_VENDOR_INTEL:
rapl_msr_priv = &rapl_msr_priv_intel; break; case X86_VENDOR_HYGON: case X86_VENDOR_AMD:
rapl_msr_priv = &rapl_msr_priv_amd; break; default:
pr_err("intel-rapl does not support CPU vendor %d\n", boot_cpu_data.x86_vendor); return -ENODEV;
}
rapl_msr_priv->read_raw = rapl_msr_read_raw;
rapl_msr_priv->write_raw = rapl_msr_write_raw;
if (id) {
rapl_msr_priv->limits[RAPL_DOMAIN_PACKAGE] |= BIT(POWER_LIMIT4);
rapl_msr_priv->regs[RAPL_DOMAIN_PACKAGE][RAPL_DOMAIN_REG_PL4].msr =
MSR_VR_CURRENT_CONFIG;
pr_info("PL4 support detected.\n");
}
rapl_msr_priv->control_type = powercap_register_control_type(NULL, "intel-rapl", NULL); if (IS_ERR(rapl_msr_priv->control_type)) {
pr_debug("failed to register powercap control_type.\n"); return PTR_ERR(rapl_msr_priv->control_type);
}
ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "powercap/rapl:online",
rapl_cpu_online, rapl_cpu_down_prep); if (ret < 0) goto out;
rapl_msr_priv->pcap_rapl_online = ret;
return 0;
out: if (ret)
powercap_unregister_control_type(rapl_msr_priv->control_type); return ret;
}
MODULE_DESCRIPTION("Driver for Intel RAPL (Running Average Power Limit) control via MSR interface");
MODULE_AUTHOR("Zhang Rui ");
MODULE_LICENSE("GPL v2");
Messung V0.5
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.