• Mattia Dongili's avatar
    [CPUFREQ] return error when failing to set minfreq · 9c9a43ed
    Mattia Dongili authored
    I just stumbled on this bug/feature, this is how to reproduce it:
    
    # echo 450000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    # echo 450000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    # echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
    # cpufreq-info -p
    450000 450000 powersave
    # echo 1800000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq ; echo $?
    0
    # cpufreq-info -p
    450000 450000 powersave
    
    Here it is. The kernel refuses to set a min_freq higher than the
    max_freq but it allows a max_freq lower than min_freq (lowering min_freq
    also).
    
    This behaviour is pretty straightforward (but undocumented) and it
    doesn't return an error altough failing to accomplish the requested
    action (set min_freq).
    The problem (IMO) is basically that userspace is not allowed to set a
    full policy atomically while the kernel always does that thus it must
    enforce an ordering on operations.
    
    The attached patch returns -EINVAL if trying to increase frequencies
    starting from scaling_min_freq and documents the correct ordering of writes.
    Signed-off-by: default avatarMattia Dongili <malattia@linux.it>
    Signed-off-by: Dominik Brodowski <linux at dominikbrodowski.net>
    Signed-off-by: default avatarDave Jones <davej@redhat.com>
    
    --
    9c9a43ed
user-guide.txt 4.66 KB