From 4dc56db37e32dcfecd667ebbf88263e47b296097 Mon Sep 17 00:00:00 2001 From: Alex Ivanov Date: Mon, 26 Dec 2016 12:41:59 +0300 Subject: [PATCH] cpu-freq: Try powersave if ondemand is not available --- nixos/modules/config/power-management.nix | 4 ++-- nixos/modules/tasks/cpu-freq.nix | 17 +++++++++++------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/nixos/modules/config/power-management.nix b/nixos/modules/config/power-management.nix index fbd7867a0953..d4d8b22eae44 100644 --- a/nixos/modules/config/power-management.nix +++ b/nixos/modules/config/power-management.nix @@ -69,8 +69,8 @@ in config = mkIf cfg.enable { - # FIXME: Implement powersave governor for sandy bridge or later Intel CPUs - powerManagement.cpuFreqGovernor = mkDefault "ondemand"; + # ondemand governor is not available on sandy bridge or later Intel CPUs + powerManagement.cpuFreqGovernor = mkDefault [ "ondemand" "powersave" ]; systemd.targets.post-resume = { description = "Post-Resume Actions"; diff --git a/nixos/modules/tasks/cpu-freq.nix b/nixos/modules/tasks/cpu-freq.nix index 5f8b5df52acf..c559bb78f070 100644 --- a/nixos/modules/tasks/cpu-freq.nix +++ b/nixos/modules/tasks/cpu-freq.nix @@ -13,9 +13,9 @@ in options = { powerManagement.cpuFreqGovernor = mkOption { - type = types.nullOr types.str; - default = null; - example = "ondemand"; + type = types.listOf types.str; + default = []; + example = [ "ondemand" ]; description = '' Configure the governor used to regulate the frequence of the available CPUs. By default, the kernel configures the @@ -28,9 +28,9 @@ in ###### implementation - config = mkIf (!config.boot.isContainer && config.powerManagement.cpuFreqGovernor != null) { + config = mkIf (!config.boot.isContainer && config.powerManagement.cpuFreqGovernor != []) { - boot.kernelModules = [ "cpufreq_${cfg.cpuFreqGovernor}" ]; + boot.kernelModules = map (x: "cpufreq_" + x) cfg.cpuFreqGovernor; environment.systemPackages = [ cpupower ]; @@ -43,7 +43,12 @@ in serviceConfig = { Type = "oneshot"; RemainAfterExit = "yes"; - ExecStart = "${cpupower}/bin/cpupower frequency-set -g ${cfg.cpuFreqGovernor}"; + ExecStart = '' + ${pkgs.bash}/bin/sh -c \ + "for i in ${toString cfg.cpuFreqGovernor}; do \ + ${cpupower}/bin/cpupower frequency-set -g $i && break; \ + done" + ''; SuccessExitStatus = "0 237"; }; };