summary refs log tree commit diff
path: root/nixos/modules/tasks
diff options
context:
space:
mode:
authorTad Fisher <tadfisher@gmail.com>2018-05-04 10:33:42 -0700
committerTad Fisher <tadfisher@gmail.com>2018-05-04 10:33:42 -0700
commit19445fa145d17929ff09447b7670401d071c3da6 (patch)
tree47d66f68497d27305cc0f5fc71678340debcbdbe /nixos/modules/tasks
parent7873fe26693e86e38195e07ee0fd31d1a7f44e6c (diff)
downloadnixlib-19445fa145d17929ff09447b7670401d071c3da6.tar
nixlib-19445fa145d17929ff09447b7670401d071c3da6.tar.gz
nixlib-19445fa145d17929ff09447b7670401d071c3da6.tar.bz2
nixlib-19445fa145d17929ff09447b7670401d071c3da6.tar.lz
nixlib-19445fa145d17929ff09447b7670401d071c3da6.tar.xz
nixlib-19445fa145d17929ff09447b7670401d071c3da6.tar.zst
nixlib-19445fa145d17929ff09447b7670401d071c3da6.zip
nixos/powerManagement: add "med_power_with_dipm" scsiLinkPolicy
Diffstat (limited to 'nixos/modules/tasks')
-rw-r--r--nixos/modules/tasks/scsi-link-power-management.nix26
1 files changed, 24 insertions, 2 deletions
diff --git a/nixos/modules/tasks/scsi-link-power-management.nix b/nixos/modules/tasks/scsi-link-power-management.nix
index 484c0a0186d7..69599bda6d32 100644
--- a/nixos/modules/tasks/scsi-link-power-management.nix
+++ b/nixos/modules/tasks/scsi-link-power-management.nix
@@ -2,7 +2,20 @@
 
 with lib;
 
-let cfg = config.powerManagement.scsiLinkPolicy; in
+let
+
+  cfg = config.powerManagement.scsiLinkPolicy;
+
+  kernel = config.boot.kernelPackages.kernel;
+
+  allowedValues = [
+    "min_power"
+    "max_performance"
+    "medium_power"
+    "med_power_with_dipm"
+  ];
+
+in
 
 {
   ###### interface
@@ -11,10 +24,13 @@ let cfg = config.powerManagement.scsiLinkPolicy; in
 
     powerManagement.scsiLinkPolicy = mkOption {
       default = null;
-      type = types.nullOr (types.enum [ "min_power" "max_performance" "medium_power" ]);
+      type = types.nullOr (types.enum allowedValues);
       description = ''
         SCSI link power management policy. The kernel default is
         "max_performance".
+        </para><para>
+        "med_power_with_dipm" is supported by kernel versions
+        4.15 and newer.
       '';
     };
 
@@ -24,6 +40,12 @@ let cfg = config.powerManagement.scsiLinkPolicy; in
   ###### implementation
 
   config = mkIf (cfg != null) {
+
+    assertions = singleton {
+      assertion = (cfg == "med_power_with_dipm") -> versionAtLeast kernel.version "4.15";
+      message = "med_power_with_dipm is not supported for kernels older than 4.15";
+    };
+
     services.udev.extraRules = ''
       SUBSYSTEM=="scsi_host", ACTION=="add", KERNEL=="host*", ATTR{link_power_management_policy}="${cfg}"
     '';