Package: cpufrequtils Version: 008-2 Severity: important Tags: patch X-Debbugs-Cc: 1700011...@pku.edu.cn
Dear Maintainer, loadcpufreq is an init.d script of cpufrequtils to load cpufreq governors' kernel modules, but it does not work anymore after kernel 6.6. The reason is that: Current loadcpufreq does not support compressed kernel modules of cpufreq governors, because such modules end with ( for example ) .ko.xz rather than .ko, and this condition is not included in the script. After kernel 6.6 , Debian official kernal use config CONFIG_MODULE_COMPRESS_XZ , which means that all kernel modules are compressed with xz. So that now loadcpufreq does not work for current Debian kernel.Cpufreq governor modules will not be loaded. To fix the problem: We need to do just very little bit of changes of script to fix that problem. The revised script is attached here. Just replace /etc/init.d/loadcpufreq with this file please. -- System Information: Debian Release: 12.4 APT prefers testing APT policy: (700, 'testing'), (500, 'stable-updates'), (500, 'stable-security'), (500, 'stable'), (100, 'bookworm-fasttrack'), (100, 'bookworm-backports-staging'), (100, 'unstable'), (1, 'experimental') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 6.6.9-amd64 (SMP w/16 CPU threads; PREEMPT) Locale: LANG=zh_CN.UTF-8, LC_CTYPE=zh_CN.UTF-8 (charmap=UTF-8), LANGUAGE not set Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled Versions of packages cpufrequtils depends on: ii debconf [debconf-2.0] 1.5.82 ii init-system-helpers 1.65.2 ii libc6 2.36-9+deb12u3 ii libcpufreq0 008-2 ii sysvinit-utils [lsb-base] 3.06-4 cpufrequtils recommends no packages. cpufrequtils suggests no packages. -- Configuration Files: /etc/init.d/loadcpufreq changed [not included] -- debconf information: cpufrequtils/enable: true
#!/bin/sh ### BEGIN INIT INFO # Provides: loadcpufreq # Required-Start: $remote_fs $syslog # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Load kernel modules needed to enable cpufreq scaling # Description: Make it possible to save power by reducing # the CPU speed when there is little to do. ### END INIT INFO # License: GNU General Public License. # # Based on scripts found in the powernowd package version # 0.97-1ubuntu6 on Ubuntu. # # This script is an interim solution until the default Debian packages # will load the proper kernel modules at boot time. Track #396117, # #342014 and #367307 to see status on this. # <URL:http://0pointer.de/blog/projects/dmi-based-module-autoloading.html> # claim the later kernels support autoloading of these modules, so I # guess In the future this script can be dropped. [pere 2007-05-12] PATH=/sbin:/bin:/usr/sbin:/usr/bin NAME=loadcpufreq # Get lsb functions . /lib/lsb/init-functions [ -f /etc/default/rcS ] && . /etc/default/rcS # Set a default value ENABLE="true" [ -f /etc/default/loadcpufreq ] && . /etc/default/loadcpufreq set -e # if not enabled then exit gracefully [ "$ENABLE" = "true" ] || exit 0 MODPROBE="modprobe -b" load_detected_cpufreq_modules() { #if /usr/sbin/laptop-detect; then LAPTOP=1; fi CPUINFO=/proc/cpuinfo IOPORTS=/proc/ioports if [ ! -f $CPUINFO ] ; then echo "$CPUINFO not detected..." >&2 return fi MODEL_NAME=$(grep '^model name' "$CPUINFO" | head -1 | sed -e 's/^.*: //;') MODEL_ID=$(grep -E '^model[[:space:]]+:' "$CPUINFO" | head -1 | sed -e 's/^.*: //;') CPU=$(grep -E '^cpud[^:]+:' "$CPUINFO" | head -1 | sed -e 's/^.*: //;') VENDOR_ID=$(grep -E '^vendor_id[^:]+:' "$CPUINFO" | head -1 | sed -e 's/^.*: //;') CPU_FAMILY=$(sed -e '/^cpu family/ {s/.*: //;p;Q};d' $CPUINFO) MODULE= MODULE_FALLBACK=acpi-cpufreq # Two modules for PIII-M depending the chipset. # modprobe speedstep-ich$EXT || modprobe speestep-smi$EXT # would be another way if [ -f $IOPORTS ] && grep -q 'Intel .*ICH' $IOPORTS ; then PIII_MODULE=speedstep-ich else PIII_MODULE=speedstep-smi fi case "$VENDOR_ID" in GenuineIntel*) # If the CPU has the est flag, it supports enhanced # speedstep and should use the acpi-cpufreq driver if [ "$(grep est $CPUINFO)" ]; then MODULE=acpi-cpufreq elif [ $CPU_FAMILY = 15 ]; then # Right. Check if it's a P4 without est. # Could be speedstep-ich, or could be p4-clockmod. MODULE=speedstep-ich; # Disabled for now - the latency tends to be bad # enough to make it fairly pointless. # echo "FREQDRIVER=p4-clockmod" >/etc/default/powernowd # to override this # if [ $LAPTOP = "1" ]; then # MODULE_FALLBACK=p4-clockmod; # fi else # So it doesn't have Enhanced Speedstep, and it's not a # P4. It could be a Speedstep PIII, or it may be # unsupported. There's no terribly good programmatic way # of telling. case "$MODEL_NAME" in Intel\(R\)\ Pentium\(R\)\ III\ Mobile\ CPU*) MODULE=$PIII_MODULE ;; # JD: says this works with cpufreq_userspace Mobile\ Intel\(R\)\ Pentium\(R\)\ III\ CPU\ -\ M*) MODULE=$PIII_MODULE ;; # https://bugzilla.ubuntu.com/show_bug.cgi?id=4262 # UNCONFIRMED Pentium\ III\ \(Coppermine\)*) MODULE=$PIII_MODULE ;; esac fi ;; AuthenticAMD*) # Hurrah. This is nice and easy. case $CPU_FAMILY in 5) # K6 MODULE=powernow-k6 ;; 6) # K7 MODULE=powernow-k7 ;; 15|16|17|18|20|21) # K8 MODULE=powernow-k8 ;; esac ;; CentaurHauls*) # VIA if [ $CPU_FAMILY = 6 ]; then case $MODEL_ID in 10) # VIA C7 VIA Esther # try acpi_cpufreq as # suggested in the kernel # configuration help MODULE=acpi_cpufreq ;; *) MODULE=longhaul ;; esac fi ;; GenuineTMx86*) # Transmeta if [ "$(grep longrun $CPUINFO)" ]; then MODULE=longrun fi ;; esac } load_modules() { #build a list of current modules so we don't load a module twice LIST=$(/sbin/lsmod|awk '!/Module/ {print $1}') #get list of available modules (governors and helpers) LOC="/lib/modules/$(uname -r)/kernel/drivers/cpufreq" if [ -d $LOC ]; then MODAVAIL=$( ( find $LOC -type f -name "cpufreq_*.o" -printf "basename %f .o\n"; \ find $LOC -type f -name "cpufreq_*.ko" -printf "basename %f .ko\n";\ find $LOC -type f -name "cpufreq_*.ko.gz" -printf "basename %f .ko.gz\n"; \ find $LOC -type f -name "cpufreq_*.ko.xz" -printf "basename %f .ko.xz\n"; \ find $LOC -type f -name "cpufreq_*.ko.zst" -printf "basename %f .ko.zst\n" ) | /bin/sh) else MODAVAIL="" fi #echo "Loading cpufreq modules:" for mod in $MODAVAIL; do # echo " $mod" echo $LIST| grep -q -w "$mod" || $MODPROBE $mod >/dev/null || /bin/true done #cpufreq is built in on powerpc; just return if [ "$(uname -m)" = "ppc" ]; then return 0 fi #new style detection system if [ ! "$FREQDRIVER" = "" ]; then # user overridden value in /etc/default/loadcpufreq $MODPROBE "$FREQDRIVER" MODULE="$FREQDRIVER" else load_detected_cpufreq_modules if [ ! -z "$MODULE" ] || [ ! -z "$MODULE_FALLBACK" ] ; then if [ ! -z "$MODULE" ] && $MODPROBE "$MODULE" 2>/dev/null ; then : elif $MODPROBE "$MODULE_FALLBACK" 2>/dev/null ; then MODULE="$MODULE_FALLBACK" else unset MODULE fi fi fi } check_kernel() { CPUFREQ=/sys/devices/system/cpu/cpu0/cpufreq if [ -z "$MODULE" ] || ([ -f "$CPUFREQ/scaling_governor" ] && \ [ -f "$CPUFREQ/scaling_available_governors" ]) then return 0 else return 1 fi } case "$1" in start) log_action_begin_msg "Loading cpufreq kernel modules" [ -f /proc/modules ] && load_modules if check_kernel ; then [ -z "$MODULE" ] && MODULE="none" log_action_end_msg 0 "$MODULE" else log_action_end_msg 1 fi ;; stop) ;; restart|force-reload) $0 stop sleep 1 $0 start #echo "$NAME." ;; *) N=/etc/init.d/$NAME log_success_msg "Usage: $N {start|stop|restart|force-reload}" >&2 exit 1 ;; esac exit 0