cppc_set_perf_limited(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ 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 the perf_limited register. 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:

  • 0 for success β€” slay ✨
  • -EINVAL for invalid bits β€” you passed something weird, bestie πŸ™ˆ
  • -EIO on register access failure β€” the register didn't pick up, tragic πŸ’€
  • -EOPNOTSUPP if 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