cppc_set_perf_limited(9)
β¨ cppc_set_perf_limited β the kernel API manual, bestie edition β¨
Okay so we're in cppc_set_perf_limited(9) territory, which is a page from the Kernel API Manual, and honestly? It's a little niche but it's giving "quietly important" π
Let's get into it.
πΈ NAME πΈ
cppc_set_perf_limited β clears bits in the Performance Limited register. That's literally the whole job. She clears. She does not set. Respect her lane π
π¦ SYNOPSIS π¦
int cppc_set_perf_limited (int cpu , u64 bits_to_clear );
That's the whole call, bestie. A cpu and a bits_to_clear, and it hands you back an int. Clean. Minimal. Iconic.
π ARGUMENTS π
cpuβ the CPU on which to write the register. So like, you gotta tell her which CPU you're talking about, she's not a mind reader πbits_to_clearβ a bitmask of the bits you want cleared in theperf_limitedregister. That's it, that's the vibe π«Ά
π₯ DESCRIPTION π₯
So the Performance Limited register has two sticky bits that the platform sets. Not you. The platform. And they stay set until OSPM explicitly clears them β which is where this function comes in.
Here's the two of them, no cap:
- Bit 0 (
Desired_Excursion) β set when delivered performance is constrained below desired performance. β οΈ Not used when Autonomous Selection is enabled. Just so you know. - Bit 1 (
Minimum_Excursion) β set when delivered performance is constrained below minimum performance.
These bits are sticky and remain set until OSPM explicitly clears them. And this function only allows clearing bits β the platform is the one who sets them. You do not get to set them. That's not your job. Periodt π
β RETURN β
Here's the scorecard:
0for success β slay β¨-EINVALfor invalid bits β you passed something weird, bestie π-EIOon register access failure β the register didn't pick up, tragic π-EOPNOTSUPPif not supported β she's just not available rn π
π SEE ALSO π
Kernel file ./drivers/acpi/cppc_acpi.c, plus the whole friend group:
acpi_get_psd_map(9), cpc_ffh_supported(9), cpc_supported_by_cpu(9), pcc_data_alloc(9), acpi_cppc_processor_probe(9), acpi_cppc_processor_exit(9), cpc_read_ffh(9), cpc_read_ffh_fb_ctrs(9), cpc_write_ffh(9), cppc_get_desired_perf(9), cppc_get_nominal_perf(9), cppc_get_highest_perf(9), cppc_get_epp_perf(9), cppc_get_perf_caps(9), cppc_perf_ctrs_in_pcc_cpu(9), cppc_perf_ctrs_in_pcc(9), cppc_get_perf_ctrs(9), cppc_set_epp(9), cppc_get_auto_act_window(9), cppc_set_auto_act_window(9), cppc_get_auto_sel(9), cppc_set_auto_sel(9), cppc_set_enable(9), cppc_get_perf(9), cppc_set_perf(9), cppc_get_perf_limited(9), cppc_get_transition_latency(9) π§
Fr fr, if you're poking at sticky platform bits, read the register docs first. She bites. π
Okay and this whole masterpiece lives in ./drivers/acpi, dated October 2026 β yeah, from the future, main character energy only πβ Thanks for reading my little manual page TED talk, mwah ππ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms