about summary refs log tree commit diff
path: root/modules/system/kernel/bfq/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/system/kernel/bfq/default.nix')
-rw-r--r--modules/system/kernel/bfq/default.nix36
1 files changed, 36 insertions, 0 deletions
diff --git a/modules/system/kernel/bfq/default.nix b/modules/system/kernel/bfq/default.nix
new file mode 100644
index 00000000..a4b593ee
--- /dev/null
+++ b/modules/system/kernel/bfq/default.nix
@@ -0,0 +1,36 @@
+{ config, lib, ... }:
+
+let
+  inherit (config.boot.kernelPackages.kernel) version;
+  inherit (lib) optionalString versionAtLeast versionOlder;
+in {
+  options.vuizvui.system.kernel.bfq = {
+    enable = lib.mkEnableOption "Enable the BFQ scheduler by default";
+  };
+
+  config = lib.mkIf config.vuizvui.system.kernel.bfq.enable {
+    boot.kernelPatches = lib.singleton {
+      name = "bfq";
+      patch =
+        if      versionAtLeast version "5.4"  then ./bfq-by-default-5.4.patch
+        else if versionAtLeast version "4.18" then ./bfq-by-default-4.18.patch
+        else if versionAtLeast version "4.15" then ./bfq-by-default-4.15.patch
+        else ./bfq-by-default.patch;
+      extraConfig = ''
+        SCSI_MQ_DEFAULT? y
+        DM_MQ_DEFAULT? y
+        IOSCHED_BFQ y
+        BFQ_GROUP_IOSCHED y
+      '';
+    };
+
+    vuizvui.requiresTests = lib.singleton ["vuizvui" "system" "kernel" "bfq"];
+
+    assertions = lib.singleton {
+      assertion = versionAtLeast version "4.12";
+
+      message = "The BFQ scheduler in conjunction with blk-mq requires "
+              + "at least kernel 4.12.";
+    };
+  };
+}