Skip to content

Commit a620b99

Browse files
authored
fix: apply frequency limits after turbo updates (#930)
* fix: reapply freq limits after turbo changes * fix: validate live frequency values before skipping updates * fix: pass selected profile to set_frequencies
1 parent 5d600d7 commit a620b99

File tree

1 file changed

+22
-29
lines changed

1 file changed

+22
-29
lines changed

auto_cpufreq/core.py

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -472,22 +472,14 @@ def get_load():
472472
def display_system_load_avg(): print(" (load average: {:.2f}, {:.2f}, {:.2f})".format(*os.getloadavg()))
473473

474474
# set minimum and maximum CPU frequencies
475-
def set_frequencies():
475+
def set_frequencies(power_supply):
476476
"""
477477
Sets frequencies:
478478
- if option is used in auto-cpufreq.conf: use configured value
479479
- if option is disabled/no conf file used: set default frequencies
480-
Frequency setting is performed only once on power supply change
480+
Frequency setting is validated on each run and only applied when needed
481+
Caller passes the active profile ("battery" or "charger").
481482
"""
482-
power_supply = "charger" if charging() else "battery"
483-
484-
# don't do anything if the power supply hasn't changed
485-
if (
486-
hasattr(set_frequencies, "prev_power_supply")
487-
and power_supply == set_frequencies.prev_power_supply
488-
): return
489-
else: set_frequencies.prev_power_supply = power_supply
490-
491483
frequency = {
492484
"scaling_max_freq": {
493485
"cmdargs": "--frequency-max",
@@ -498,28 +490,27 @@ def set_frequencies():
498490
"minmax": "minimum",
499491
},
500492
}
501-
if not hasattr(set_frequencies, "max_limit"):
502-
set_frequencies.max_limit = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-max-limit"))
503-
if not hasattr(set_frequencies, "min_limit"):
504-
set_frequencies.min_limit = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-min-limit"))
493+
set_frequencies.max_limit = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-max-limit"))
494+
set_frequencies.min_limit = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-min-limit"))
505495

506496
conf = config.get_config()
507497

508498
for freq_type in frequency.keys():
509-
value = None
510-
if not conf.has_option(power_supply, freq_type):
511-
# fetch and use default frequencies
512-
if freq_type == "scaling_max_freq":
513-
curr_freq = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-max"))
514-
value = set_frequencies.max_limit
515-
else:
516-
curr_freq = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-min"))
517-
value = set_frequencies.min_limit
518-
if curr_freq == value: continue
499+
if freq_type == "scaling_max_freq":
500+
curr_freq = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-max"))
501+
value = set_frequencies.max_limit
502+
else:
503+
curr_freq = int(getoutput(f"cpufreqctl.auto-cpufreq --frequency-min"))
504+
value = set_frequencies.min_limit
519505

520-
try: frequency[freq_type]["value"] = value if value else int(conf[power_supply][freq_type].strip())
506+
try:
507+
if conf.has_option(power_supply, freq_type):
508+
raw_value = conf[power_supply][freq_type].strip()
509+
frequency[freq_type]["value"] = int(raw_value)
510+
else:
511+
frequency[freq_type]["value"] = value
521512
except ValueError:
522-
print(f"Invalid value for '{freq_type}': {frequency[freq_type]['value']}")
513+
print(f"Invalid value for '{freq_type}': {raw_value}")
523514
exit(1)
524515

525516
if not set_frequencies.min_limit <= frequency[freq_type]["value"] <= set_frequencies.max_limit:
@@ -528,6 +519,8 @@ def set_frequencies():
528519
)
529520
exit(1)
530521

522+
if curr_freq == frequency[freq_type]["value"]: continue
523+
531524
print(f'Setting {frequency[freq_type]["minmax"]} CPU frequency to {round(frequency[freq_type]["value"]/1000)} Mhz')
532525
# set the frequency
533526
run(f"cpufreqctl.auto-cpufreq {frequency[freq_type]['cmdargs']} --set={frequency[freq_type]['value']}", shell=True)
@@ -582,7 +575,6 @@ def set_powersave():
582575

583576
set_energy_perf_bias(conf, "battery")
584577
set_platform_profile(conf, "battery")
585-
set_frequencies()
586578

587579
cpuload, load1m= get_load()
588580

@@ -610,6 +602,7 @@ def set_powersave():
610602
print(f"Optimal total CPU usage: {cpuload}%, high average core temp: {SystemInfo.avg_temp()}°C")
611603
set_turbo(False)
612604

605+
set_frequencies("battery")
613606
footer()
614607

615608
def mon_powersave():
@@ -695,7 +688,6 @@ def set_performance():
695688

696689
set_energy_perf_bias(conf, "charger")
697690
set_platform_profile(conf, "charger")
698-
set_frequencies()
699691

700692
cpuload, load1m = get_load()
701693
auto = conf["charger"]["turbo"] if conf.has_option("charger", "turbo") else "auto"
@@ -735,6 +727,7 @@ def set_performance():
735727
else: # set turbo state based on average of all core temperatures
736728
print(f"Optimal total CPU usage: {cpuload}%, high average core temp: {SystemInfo.avg_temp()}°C")
737729
set_turbo(False)
730+
set_frequencies("charger")
738731
footer()
739732

740733
def mon_performance():

0 commit comments

Comments
 (0)