From 82705a2887e6c0da915f52f2f0f4d232f2e4763a Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 08:48:08 +0700 Subject: [PATCH 01/11] Add linux-tkg --- .github/workflows/cachix.yml | 23 +++ flake.nix | 34 +++- hosts/winter/kernel.nix | 14 +- packages/linux-tkg/default.nix | 359 +++++++++++++++++++++++++++++++++ 4 files changed, 427 insertions(+), 3 deletions(-) create mode 100644 packages/linux-tkg/default.nix diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index 602af55..f5e3871 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -19,6 +19,29 @@ jobs: name: lava authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - run: nix build -L .#linux-lava + + linux_tkg: + name: Build Linux-tkg + runs-on: ubuntu-latest + strategy: + matrix: + kernelVersion: [5.4, 5.10, 5.11] + sched: [bmq, cfs, cacule, muqss, pds] + include: + kernelVersion: 5.10 + sched: upds + steps: + - uses: actions/checkout@v2.3.4 + - uses: cachix/install-nix-action@v13 + with: + install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-3.0pre20201007_5257a25/install + extra_nix_config: experimental-features = nix-command flakes + - uses: cachix/cachix-action@v10 + with: + name: lava + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' + - run: nix build -L .#linux_tkg-${{ matrix.sched }}-${{ matrix.kernelVersion }} + wine: name: Build Wine runs-on: ubuntu-latest diff --git a/flake.nix b/flake.nix index f1585df..125a58c 100644 --- a/flake.nix +++ b/flake.nix @@ -16,9 +16,39 @@ customPackages = pkgs: let callPackage = pkgs.callPackage; - in { - linux-lava = callPackage ./packages/linux-lava {}; + in rec { + linux_lava = callPackage ./packages/linux-lava {}; + linux_tkg = callPackage ./packages/linux-tkg { + kernelPatches = with pkgs.kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + }; + linuxPackages_tkg = args: pkgs.recurseIntoAttrs (pkgs.linuxPackagesFor (linux_tkg.override args)); wine-osu = callPackage ./packages/wine-osu { inherit getPaths; }; + } + # For github workflow tests + // builtins.listToAttrs (builtins.map (e: { + name = "linux_tkg-${e.scheduler}-${e.version}"; + value = callPackage ./packages/linux-tkg { + inherit (e) scheduler version; + kernelPatches = with pkgs.kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + }; + }) (pkgs.lib.cartesianProductOfSets { + scheduler = ["bmq" "cfs" "cacule" "muqss" "pds"]; + version = ["5.4" "5.10" "5.11"]; + })) // { + "linux_tkg-upds-5.10" = callPackage ./packages/linux-tkg { + version = "5.10"; + scheduler = "upds"; + kernelPatches = with pkgs.kernelPatches; [ + bridge_stp_helper + request_key_helper + ]; + }; }; overlays = (builtins.map diff --git a/hosts/winter/kernel.nix b/hosts/winter/kernel.nix index 68f2cf6..4017db6 100644 --- a/hosts/winter/kernel.nix +++ b/hosts/winter/kernel.nix @@ -26,7 +26,19 @@ "intel_pstate=passive" "msr.allow_writes=on" ]; - kernelPackages = pkgs.lib.mkForce (pkgs.linuxPackagesFor pkgs.linux-lava); + kernelPackages = pkgs.linuxPackages_tkg { + debug = false; + scheduler = "cacule"; + timerFreq = 2000; + numa = false; + tickless = 1; + localVersion = "Lava"; + }; + kernelPatches = [{ + name = "si-clocking"; + patch = ../../packages/linux-lava/si-manual-clocking.patch; + }]; + #kernelPackages = pkgs.lib.mkForce (pkgs.linuxPackagesFor pkgs.linux-lava); }; zramSwap.enable = true; } diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix new file mode 100644 index 0000000..94c0c76 --- /dev/null +++ b/packages/linux-tkg/default.nix @@ -0,0 +1,359 @@ +# FIXME: This entire derivation is extremely ugly. +{ + buildLinux +, fetchFromGitHub +, lib +, extraConfig ? {} +, kernelPatches ? [] + +, version ? "5.12" +, debug ? true +, tcpAlgorithm ? "cubic" +, scheduler ? "cfs" +, runqueueSharing ? "smt" +, timerFreq ? 500 +, defaultGovernor ? "ondemand" +, ftrace ? true +, numa ? true +, tickless ? 2 + +, enableAnbox ? false +, bcachefs ? false +, futex2 ? true +, winesync ? true +, irqThreading ? false +, randomTrustCPU ? false +, smtNice ? true +, zenify ? true + +# TODO: yieldType +, yieldType ? 1 +# TODO: rrInterval +, rrInterval ? 0 + +, acsOverride ? false +, aggressiveOndemand ? true +, fsync ? true +, miscAdditions ? true +, zfsFix ? (lib.versionOlder version "5.11") + +, localVersion ? "" + +, ... +} @ args: +let + tkg = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; + + majorVersion = + if lib.versions.major version == "5" + then "5" + else throw "Unsupported major version"; + minorVersion = lib.versions.minor version; + patchVersion = + if minorVersion == "4" then "128" + else if minorVersion == "10" then "46" + else if minorVersion == "12" then "13" + else throw "Unsupported minor version"; + + mmp = "${majorVersion}.${minorVersion}.${patchVersion}"; + mm = "${majorVersion}.${minorVersion}"; + + kernelUrl = name: sha256: builtins.fetchurl { + inherit sha256; + url = "https://cdn.kernel.org/pub/linux/kernel/v${majorVersion}.x/${name}.xz"; + }; + + tkgSource = fetchFromGitHub { + owner = "Frogging-Family"; + repo = "linux-tkg"; + rev = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; + sha256 = "06a5fpafids8nc550pcsyvar2igphi6bpghqzl6cp48hg6p2g07w"; + }; + + boolToKernel = bool: with lib.kernel; if bool then yes else no; + boolToKernelMod = bool: with lib.kernel; if bool then module else no; + mapBoolToKernel = bool: list: builtins.listToAttrs ( + builtins.map (e: { + name = e; + value = boolToKernel bool; + }) list + ); + mapNo = list: mapBoolToKernel false list; + mapYes = list: mapBoolToKernel true list; + mapNY = list: + (mapNo (builtins.elemAt list 0) + // mapYes (builtins.elemAt list 1)); + + supportedSchedulers = { + "5.4" = [ "bmq" "cfs" "cacule" "muqss" "pds" ]; + "5.10" = [ "bmq" "cfs" "cacule" "muqss" "pds" "upds" ]; + "5.12" = [ "bmq" "cfs" "cacule" "muqss" "pds" ]; + }; + + # do not put rec please kthx + tkgConfig = with lib.kernel; { + defaults = let + base = { + # openrgb + I2C_NCT6775 = module; + ZSWAP_COMPRESSOR_DEFAULT = freeform "lz4"; + } // mapNY [ + [ "DYNAMIC_FAULT" "DEFAULT_FQ_CODEL" "NTP_PPS" "CPU_FREQ_DEFAULT_GOV_PERFORMANCE_NODEF" "ZSWAP_COMPRESSOR_DEFAULT_LZO" "CMDLINE_OVERRIDE" "X86_P6_NOP" "CPU_FREQ_DEFAULT_GOV_ONDEMAND" "CPU_FREQ_DEFAULT_GOV_CONSERVATIVE" "DEBUG_INFO" "PREEMPT_VOLUNTARY" ] + [ "DEFAULT_CAKE" "CRYPTO_LZ4" "CRYPTO_LZ4HC" "LZ4_COMPRESS" "LZ4HC_COMPRESS" "ZSWAP_COMPRESSOR_DEFAULT_LZ4" "CMDLINE_BOOL" "TCP_CONG_ADVANCED" "PREEMPT" "PREEMPT_COUNT" "PREEMPTION" "PREEMPT_DYNAMIC" ] + ]; + extras = { + "5.4" = { + TP_SMAPI = module; + RAID6_USE_PREFER_GEN = yes; + RCU_BOOST_DELAY = freeform 0; + }; + }; + in base // (if builtins.hasAttr mm extras then extras.${mm} else {}); + + debug = + if debug + then mapNo [ "SLUB_DEBUG" "PM_DEBUG" "PM_ADVANCED_DEBUG" "PM_SLEEP_DEBUG" "ACPI_DEBUG" "SCHED_DEBUG" "LATENCYTOP" "DEBUG_PREEMPT" ] + else {}; + + tcpAlgorithm = let + algorithms = [ "yeah" "bbr" "cubic" "vegas" "westwood" "reno" ]; + base = mapBoolToKernel false (builtins.map(e: "DEFAULT_${lib.toUpper e}") algorithms) + // mapBoolToKernel true (builtins.map(e: "TCP_CONG_${lib.toUpper e}") algorithms); + in + if builtins.elem tcpAlgorithm algorithms + then base // { + "DEFAULT_${lib.toUpper tcpAlgorithm}" = yes; + DEFAULT_TCP_CONG = freeform tcpAlgorithm; + } + else throw "Unsupported TCP algorithm"; + + scheduler = let + schedConfigs = { + cfs = {}; + cacule = mapNY [ + [ "BSD_PROCESS_ACCT" "TASK_XACCT" "CGROUP_CPUACCT" "CGROUP_DEBUG" ] + [ "CACULE_SCHED" "SCHED_AUTOGROUP" ] + ]; + muqss = mapNY [ + [ "CFS_BANDWIDTH" "FAIR_GROUP_SCHED" ] + [ "SCHED_MUQSS" ] + ]; + pds = mapNY [ + [ "CFS_BANDWIDTH" "FAIR_GROUP_SCHED" "SCHED_BMQ" ] + [ "SCHED_ALT" "SCHED_PDS" ] + ]; + bmq = mapNY [ + [ "CFS_BANDWIDTH" "FAIR_GROUP_SCHED" "SCHED_PDS" ] + [ "SCHED_ALT" "SCHED_BMQ" ] + ]; + upds = mapNY [ + [ "CFS_BANDWIDTH" "FAIR_GROUP_SCHED" ] + [ "SCHED_PDS" ] + ]; + }; + in + if builtins.hasAttr scheduler schedConfigs + then + if builtins.elem scheduler supportedSchedulers.${mm} + then schedConfigs.${scheduler} + else throw "Unsupported scheduler for kernel version" + else throw "Unknown scheduler"; + + runqueueSharing = let + types = [ "none" "smt" "mc" "mc_llc" "smp" "all" ]; + base = mapBoolToKernel false (builtins.map (e: "RQ_${lib.toUpper e}") types); + in + if (scheduler == "muqss") then + if (builtins.elem type types) + then base // { "RQ_${lib.toUpper type}" = yes; } + else throw "Unknown runqueueSharing type" + else {}; + + timerFreq = let + availableFreqs = [100 250 300 500 750 1000] + ++ lib.optional (scheduler == "cacule") 2000; + + base = mapBoolToKernel false ( + builtins.map (e: "HZ_${builtins.toString e}") availableFreqs + ++ builtins.map (e: "HZ_${builtins.toString e}_NODEF") availableFreqs + ); + in + if builtins.elem timerFreq availableFreqs + then base // { + "HZ_${builtins.toString timerFreq}" = yes; + "HZ_${builtins.toString timerFreq}_NODEF" = yes; + } + else throw "Unsupported timer frequency"; + + defaultGovernor = let + governors = { + schedutil = {}; + performance = mapNY [ + [ "CPU_FREQ_DEFAULT_GOV_SCHEDUTIL" ] + [ "CPU_FREQ_DEFAULT_GOV_PERFORMANCE" "CPU_FREQ_DEFAULT_GOV_PERFORMANCE_NODEF" ] + ]; + ondemand = mapNY [ + [ "CPU_FREQ_DEFAULT_GOV_SCHEDUTIL" ] + [ "CPU_FREQ_DEFAULT_GOV_ONDEMAND" "CPU_FREQ_GOV_ONDEMAND" ] + ]; + }; + in + if builtins.hasAttr defaultGovernor governors + then governors.${defaultGovernor} + else throw "Unsupported default governor"; + + ftrace = mapBoolToKernel ftrace [ "FUNCTION_TRACER" "FUNCTION_GRAPH_TRACER" ]; + numa = if numa then {} else mapNo [ "NUMA" "AMD_NUMA" "ACPI_NUMA" "X86_64_ACPI_NUMA" "NODES_SPAN_OTHER_NODES" "NUMA_EMU" "NODES_SHIFT" "NEED_MULTIPLE_NODES" "USE_PERCPU_NUMA_NODE_ID" ]; + tickless = let + modes = [ + # Periodic ticks + (mapNY [ + [ "NO_HZ_FULL_NODEF" "NO_HZ_IDLE" "NO_HZ_FULL" "NO_HZ" "NO_HZ_COMMON" ] + [ "HZ_PERIODIC" ] + ]) + # Tickless + (mapNY [ + [ "HZ_PERIODIC" "NO_HZ_IDLE" "CONTEXT_TRACKING_FORCE" ] + [ "NO_HZ_FULL_NODEF" "NO_HZ_FULL" "NO_HZ" "NO_HZ_COMMON" "CONTEXT_TRACKING" ] + ]) + # Tickless idle + (mapNY [ + [ "HZ_PERIODIC" "NO_HZ_FULL_NODEF" "NO_HZ_FULL" ] + [ "NO_HZ_IDLE" "NO_HZ" "NO_HZ_COMMON" ] + ]) + ]; + in + if builtins.length modes >= tickless + then builtins.elemAt modes tickless + else throw "Unsupported tickless value"; + + anbox = + if enableAnbox + then + { ANDROID_BINDER_DEVICES = freeform "binder,hwbinder,vndbinder"; } + // mapNY [ + [ "ION_SYSTEM_HEAP" "ANDROID_BINDER_IPC_SELFTEST" ] + [ "ASHMEM" "ION" "ION_CMA_HEAP" "ANDROID" "ANDROID_BINDER_IPC" "ANDROID_BINDERFS" ] + ] + else {}; + bcachefs = + if bcachefs + then + { BCACHEFS_FS = module; } + // mapNY [ + [ "BCACHEFS_DEBUG" "BCACHEFS_TESTS" "DEBUG_CLOSURES" ] + [ "BCACHEFS_QUOTA" "BCACHEFS_POSIX_ACL" ] + ] + else {}; + + futex2 = { FUTEX2 = boolToKernel futex2; }; + winesync = { WINESYNC = boolToKernelMod winesync; }; + irqThreading = { FORCE_IRQ_THREADING = boolToKernel irqThreading; }; + randomTrustCPU = { RANDOM_TRUST_CPU = boolToKernel randomTrustCPU; }; + smtNice = { SMT_NICE = boolToKernel smtNice; }; + zenify = { ZENIFY = boolToKernel zenify; }; + }; + flattenedConfig = with lib; mapAttrs (_: head) (zipAttrs (attrValues tkgConfig)); + + patchNames = [ + "0002-clear-patches" + "0003-glitched-base" + ] + ++ lib.optional miscAdditions "0012-misc-additions" + ++ lib.optionals (mm == "5.12") [ + "0001-mm-Support-soft-dirty-flag-reset-for-VA-range" + "0002-mm-Support-soft-dirty-flag-read-with-reset" + ] + ++ ( + let + prjcRevisions = { + "5.10" = "2"; + "5.12" = "1"; + }; + map = { + muqss = [ + "0004-${mm}-ck1" + "0004-glitched-muqss" + ]; + upds = [ + "0005-v${mm}_undead-pds099o" + "0005-undead-glitched-pds" + ]; + pds = if mm == "5.4" + then [ + "0005-v${mm}_undead-pds099o" + "0005-glitched-pds" + ] + else [ + "0009-prjc_v${mm}-r${prjcRevisions.${mm}}" + "0005-glitched-pds" + ]; + bmq = if mm == "5.4" + then [ + "0009-bmq_v5.4-r2" + "0009-glitched-bmq" + ] + else [ + "0009-prjc_v${mm}-r${prjcRevisions.${mm}}" + "0009-glitched-bmq" + ]; + cacule = [ + "0003-cacule-${mm}" + "0003-glitched-cfs" + ]; + cfs = ["0003-glitched-cfs"]; + }; + in + if (builtins.hasAttr scheduler map) && (map.${scheduler} != {}) + then map.${scheduler} + else [] + ) + ++ lib.optional acsOverride "0006-add-acs-overrides_iommu" + ++ lib.optionals aggressiveOndemand ( + let map = rec { + muqss = "0004-glitched-ondemand-muqss"; + upds = "0005-undead-glitched-ondemand-pds"; + pds = if mm == "5.4" + then "0005-glitched-ondemand-pds" + else "0009-glitched-ondemand-bmq"; + bmq = if mm != "5.4" + then "0009-glitched-ondemand-bmq" + else {}; + }; in + if (builtins.hasAttr scheduler map) && (map.${scheduler} != {}) + then [map.${scheduler}] + else [] + ) + ++ lib.optional bcachefs "0008-${mm}-bcachefs" + ++ lib.optional fsync "0007-v${mm}-fsync" + ++ lib.optional futex2 "0007-v${mm}-futex2_interface" + ++ lib.optional winesync "0007-v${mm}-winesync" + ++ lib.optional zfsFix "0011-ZFS-fix"; + + toPatch = name: { + inherit name; + patch = "${tkgSource}/linux-tkg-patches/${mm}/${name}.patch"; + }; + tkgPatches = builtins.map (e: toPatch e) (lib.naturalSort patchNames); + + suffix = if builtins.stringLength localVersion != 0 then "-tkg-${localVersion}" else "-tkg"; +in buildLinux(args // rec { + version = "${mmp}-tkg"; + modDirVersion = version + suffix; + + isZen = zenify; + + ignoreConfigErrors = true; + structuredExtraConfig = with lib.kernel; builtins.mapAttrs (_: value: lib.mkForce value) ({ + LOCALVERSION = freeform suffix; + } // flattenedConfig + // extraConfig); + + kernelPatches = #args.kernelPatches + [{ + name = "patch-${mmp}"; + patch = kernelUrl "patch-${mmp}" "17d38hns5qfbw1pajpa5y38v86r49nqnw7a3pwsay5fapj69z8w4"; + }] + ++ tkgPatches; + src = kernelUrl "linux-${mm}.tar" "0rn3z942vjc7bixjw066rm6kcr0x0wzgxqfq1f6xd113pzrgc3bx"; +} // (args.argsOverride or {})) From b0cb801b4665ee5fc9699fa37200b4e9ebc297bd Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 08:52:16 +0700 Subject: [PATCH 02/11] oops - fix workflow --- .github/workflows/cachix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index f5e3871..6bfa385 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -28,7 +28,7 @@ jobs: kernelVersion: [5.4, 5.10, 5.11] sched: [bmq, cfs, cacule, muqss, pds] include: - kernelVersion: 5.10 + - kernelVersion: 5.10 sched: upds steps: - uses: actions/checkout@v2.3.4 From 287352e41a66eadaa4cb8f4d007579d143bcbf3a Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 08:53:25 +0700 Subject: [PATCH 03/11] yaml is dumb --- .github/workflows/cachix.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index 6bfa385..d2c31e6 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -25,10 +25,10 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - kernelVersion: [5.4, 5.10, 5.11] + kernelVersion: ["5.4", "5.10", "5.11"] sched: [bmq, cfs, cacule, muqss, pds] include: - - kernelVersion: 5.10 + - kernelVersion: "5.10" sched: upds steps: - uses: actions/checkout@v2.3.4 From c37ff41ca3b55d586d29ec4691499626584915e4 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 08:57:18 +0700 Subject: [PATCH 04/11] a --- .github/workflows/cachix.yml | 4 ++-- flake.nix | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index d2c31e6..c71c1b4 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -25,10 +25,10 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - kernelVersion: ["5.4", "5.10", "5.11"] + kernelVersion: ["54", "510", "511"] sched: [bmq, cfs, cacule, muqss, pds] include: - - kernelVersion: "5.10" + - kernelVersion: "510" sched: upds steps: - uses: actions/checkout@v2.3.4 diff --git a/flake.nix b/flake.nix index 125a58c..d93dc2f 100644 --- a/flake.nix +++ b/flake.nix @@ -29,7 +29,7 @@ } # For github workflow tests // builtins.listToAttrs (builtins.map (e: { - name = "linux_tkg-${e.scheduler}-${e.version}"; + name = "linux_tkg-${e.scheduler}-${pkgs.lib.stringAsChars (x: if x == "." then "" else x) e.version}"; value = callPackage ./packages/linux-tkg { inherit (e) scheduler version; kernelPatches = with pkgs.kernelPatches; [ @@ -41,7 +41,7 @@ scheduler = ["bmq" "cfs" "cacule" "muqss" "pds"]; version = ["5.4" "5.10" "5.11"]; })) // { - "linux_tkg-upds-5.10" = callPackage ./packages/linux-tkg { + "linux_tkg-upds-510" = callPackage ./packages/linux-tkg { version = "5.10"; scheduler = "upds"; kernelPatches = with pkgs.kernelPatches; [ From dfc2cdbd899321c92ffcc788d9f15750d22f00b4 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 09:32:32 +0700 Subject: [PATCH 05/11] move sources into its own file also a bunch of misc changes --- .github/workflows/cachix.yml | 2 +- flake.nix | 2 +- packages/linux-tkg/default.nix | 72 ++++++++++++---------------------- packages/linux-tkg/sources.nix | 44 +++++++++++++++++++++ 4 files changed, 70 insertions(+), 50 deletions(-) create mode 100644 packages/linux-tkg/sources.nix diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index c71c1b4..a4f90ff 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - kernelVersion: ["54", "510", "511"] + kernelVersion: ["54", "510", "512"] sched: [bmq, cfs, cacule, muqss, pds] include: - kernelVersion: "510" diff --git a/flake.nix b/flake.nix index d93dc2f..4babfd8 100644 --- a/flake.nix +++ b/flake.nix @@ -39,7 +39,7 @@ }; }) (pkgs.lib.cartesianProductOfSets { scheduler = ["bmq" "cfs" "cacule" "muqss" "pds"]; - version = ["5.4" "5.10" "5.11"]; + version = ["5.4" "5.10" "5.12"]; })) // { "linux_tkg-upds-510" = callPackage ./packages/linux-tkg { version = "5.10"; diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index 94c0c76..094791e 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -44,31 +44,7 @@ let tkg = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; - majorVersion = - if lib.versions.major version == "5" - then "5" - else throw "Unsupported major version"; - minorVersion = lib.versions.minor version; - patchVersion = - if minorVersion == "4" then "128" - else if minorVersion == "10" then "46" - else if minorVersion == "12" then "13" - else throw "Unsupported minor version"; - - mmp = "${majorVersion}.${minorVersion}.${patchVersion}"; - mm = "${majorVersion}.${minorVersion}"; - - kernelUrl = name: sha256: builtins.fetchurl { - inherit sha256; - url = "https://cdn.kernel.org/pub/linux/kernel/v${majorVersion}.x/${name}.xz"; - }; - - tkgSource = fetchFromGitHub { - owner = "Frogging-Family"; - repo = "linux-tkg"; - rev = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; - sha256 = "06a5fpafids8nc550pcsyvar2igphi6bpghqzl6cp48hg6p2g07w"; - }; + sources = import ./sources.nix { inherit fetchFromGitHub lib version; }; boolToKernel = bool: with lib.kernel; if bool then yes else no; boolToKernelMod = bool: with lib.kernel; if bool then module else no; @@ -105,10 +81,10 @@ let "5.4" = { TP_SMAPI = module; RAID6_USE_PREFER_GEN = yes; - RCU_BOOST_DELAY = freeform 0; + RCU_BOOST_DELAY = freeform "0"; }; }; - in base // (if builtins.hasAttr mm extras then extras.${mm} else {}); + in base // (if builtins.hasAttr version extras then extras.${version} else {}); debug = if debug @@ -154,7 +130,7 @@ let in if builtins.hasAttr scheduler schedConfigs then - if builtins.elem scheduler supportedSchedulers.${mm} + if builtins.elem scheduler supportedSchedulers.${version} then schedConfigs.${scheduler} else throw "Unsupported scheduler for kernel version" else throw "Unknown scheduler"; @@ -260,7 +236,7 @@ let "0003-glitched-base" ] ++ lib.optional miscAdditions "0012-misc-additions" - ++ lib.optionals (mm == "5.12") [ + ++ lib.optionals (version == "5.12") [ "0001-mm-Support-soft-dirty-flag-reset-for-VA-range" "0002-mm-Support-soft-dirty-flag-read-with-reset" ] @@ -272,33 +248,33 @@ let }; map = { muqss = [ - "0004-${mm}-ck1" + "0004-${version}-ck1" "0004-glitched-muqss" ]; upds = [ - "0005-v${mm}_undead-pds099o" + "0005-v${version}_undead-pds099o" "0005-undead-glitched-pds" ]; - pds = if mm == "5.4" + pds = if version == "5.4" then [ - "0005-v${mm}_undead-pds099o" + "0005-v${version}_undead-pds099o" "0005-glitched-pds" ] else [ - "0009-prjc_v${mm}-r${prjcRevisions.${mm}}" + "0009-prjc_v${version}-r${prjcRevisions.${version}}" "0005-glitched-pds" ]; - bmq = if mm == "5.4" + bmq = if version == "5.4" then [ "0009-bmq_v5.4-r2" "0009-glitched-bmq" ] else [ - "0009-prjc_v${mm}-r${prjcRevisions.${mm}}" + "0009-prjc_v${version}-r${prjcRevisions.${version}}" "0009-glitched-bmq" ]; cacule = [ - "0003-cacule-${mm}" + "0003-cacule-${version}" "0003-glitched-cfs" ]; cfs = ["0003-glitched-cfs"]; @@ -313,10 +289,10 @@ let let map = rec { muqss = "0004-glitched-ondemand-muqss"; upds = "0005-undead-glitched-ondemand-pds"; - pds = if mm == "5.4" + pds = if version == "5.4" then "0005-glitched-ondemand-pds" else "0009-glitched-ondemand-bmq"; - bmq = if mm != "5.4" + bmq = if version != "5.4" then "0009-glitched-ondemand-bmq" else {}; }; in @@ -324,21 +300,21 @@ let then [map.${scheduler}] else [] ) - ++ lib.optional bcachefs "0008-${mm}-bcachefs" - ++ lib.optional fsync "0007-v${mm}-fsync" - ++ lib.optional futex2 "0007-v${mm}-futex2_interface" - ++ lib.optional winesync "0007-v${mm}-winesync" + ++ lib.optional bcachefs "0008-${version}-bcachefs" + ++ lib.optional fsync "0007-v${version}-fsync" + ++ lib.optional futex2 "0007-v${version}-futex2_interface" + ++ lib.optional winesync "0007-v${version}-winesync" ++ lib.optional zfsFix "0011-ZFS-fix"; toPatch = name: { inherit name; - patch = "${tkgSource}/linux-tkg-patches/${mm}/${name}.patch"; + patch = "${sources.tkg}/linux-tkg-patches/${version}/${name}.patch"; }; tkgPatches = builtins.map (e: toPatch e) (lib.naturalSort patchNames); suffix = if builtins.stringLength localVersion != 0 then "-tkg-${localVersion}" else "-tkg"; in buildLinux(args // rec { - version = "${mmp}-tkg"; + version = "${sources.fullVersion}-tkg"; modDirVersion = version + suffix; isZen = zenify; @@ -351,9 +327,9 @@ in buildLinux(args // rec { kernelPatches = #args.kernelPatches [{ - name = "patch-${mmp}"; - patch = kernelUrl "patch-${mmp}" "17d38hns5qfbw1pajpa5y38v86r49nqnw7a3pwsay5fapj69z8w4"; + name = "patch-${version}"; + patch = sources.patchSrc; }] ++ tkgPatches; - src = kernelUrl "linux-${mm}.tar" "0rn3z942vjc7bixjw066rm6kcr0x0wzgxqfq1f6xd113pzrgc3bx"; + src = sources.kernelSrc; } // (args.argsOverride or {})) diff --git a/packages/linux-tkg/sources.nix b/packages/linux-tkg/sources.nix new file mode 100644 index 0000000..1619844 --- /dev/null +++ b/packages/linux-tkg/sources.nix @@ -0,0 +1,44 @@ +{ fetchFromGitHub, lib, version }: +let + vMap = { + "5.4" = { + version = "5.4.128"; + baseHash = "14glqppn90z79b36k4c76mv90q933i2bg54rgwlcl2v7n608jcxz"; + patchHash = "04ylr4f4amzviqljhc6i79dqhjmjx45shf0rply1v5zqlfndb459"; + }; + "5.10" = { + version = "5.10.46"; + baseHash = "0hyav21vzz5v1kgb455pcz9ncg5qqzxmp60na290scwq7vj9kpyw"; + patchHash = "0jl31aayxyns3pkvm9mycvwakg2i45win9nfbirhcz7z5gfsa7fg"; + }; + "5.12" = { + version = "5.12.13"; + baseHash = "0rn3z942vjc7bixjw066rm6kcr0x0wzgxqfq1f6xd113pzrgc3bx"; + patchHash = "17d38hns5qfbw1pajpa5y38v86r49nqnw7a3pwsay5fapj69z8w4"; + }; + }; + + tkg = fetchFromGitHub { + owner = "Frogging-Family"; + repo = "linux-tkg"; + rev = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; + sha256 = "06a5fpafids8nc550pcsyvar2igphi6bpghqzl6cp48hg6p2g07w"; + }; + + ver = + if builtins.hasAttr version vMap + then vMap.${version} + else throw "Unsupported version"; +in rec { + inherit tkg; + + fullVersion = ver.version; + kernelSrc = builtins.fetchurl { + url = "https://cdn.kernel.org/pub/linux/kernel/v${lib.versions.major version}.x/linux-${version}.tar.xz"; + sha256 = ver.baseHash; + }; + patchSrc = builtins.fetchurl { + url = "https://cdn.kernel.org/pub/linux/kernel/v${lib.versions.major version}.x/patch-${fullVersion}.xz"; + sha256 = ver.patchHash; + }; +} From df5bfd14d6a73b5977c2fc3b2931fea3317b654c Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 09:36:05 +0700 Subject: [PATCH 06/11] fix --- packages/linux-tkg/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index 094791e..374b677 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -140,8 +140,8 @@ let base = mapBoolToKernel false (builtins.map (e: "RQ_${lib.toUpper e}") types); in if (scheduler == "muqss") then - if (builtins.elem type types) - then base // { "RQ_${lib.toUpper type}" = yes; } + if (builtins.elem runqueueSharing types) + then base // { "RQ_${lib.toUpper runqueueSharing}" = yes; } else throw "Unknown runqueueSharing type" else {}; From 264b62ca6a8ca12f51c14a2b5e45b496a237fe7a Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 10:53:51 +0700 Subject: [PATCH 07/11] use pre-patched kernel source instead of patching ourselves nix strips FHS before patching, causing the patch for some versions to fail --- packages/linux-tkg/default.nix | 9 +-------- packages/linux-tkg/sources.nix | 21 +++++++-------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index 374b677..f3c04ea 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -42,8 +42,6 @@ , ... } @ args: let - tkg = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; - sources = import ./sources.nix { inherit fetchFromGitHub lib version; }; boolToKernel = bool: with lib.kernel; if bool then yes else no; @@ -325,11 +323,6 @@ in buildLinux(args // rec { } // flattenedConfig // extraConfig); - kernelPatches = #args.kernelPatches - [{ - name = "patch-${version}"; - patch = sources.patchSrc; - }] - ++ tkgPatches; + kernelPatches = tkgPatches; src = sources.kernelSrc; } // (args.argsOverride or {})) diff --git a/packages/linux-tkg/sources.nix b/packages/linux-tkg/sources.nix index 1619844..8a30019 100644 --- a/packages/linux-tkg/sources.nix +++ b/packages/linux-tkg/sources.nix @@ -3,26 +3,23 @@ let vMap = { "5.4" = { version = "5.4.128"; - baseHash = "14glqppn90z79b36k4c76mv90q933i2bg54rgwlcl2v7n608jcxz"; - patchHash = "04ylr4f4amzviqljhc6i79dqhjmjx45shf0rply1v5zqlfndb459"; + hash = "1arrpskxkkl6vb06d4y4xvfy1355mjk5ac5sp66657kbh6xswm1v"; }; "5.10" = { version = "5.10.46"; - baseHash = "0hyav21vzz5v1kgb455pcz9ncg5qqzxmp60na290scwq7vj9kpyw"; - patchHash = "0jl31aayxyns3pkvm9mycvwakg2i45win9nfbirhcz7z5gfsa7fg"; + hash = "058lvk0hc6qk3l485kda7cxkdrjk1kd0f75cp7pmnckbkjij54an"; }; "5.12" = { version = "5.12.13"; - baseHash = "0rn3z942vjc7bixjw066rm6kcr0x0wzgxqfq1f6xd113pzrgc3bx"; - patchHash = "17d38hns5qfbw1pajpa5y38v86r49nqnw7a3pwsay5fapj69z8w4"; + hash = "0mfjkncsa7vq13689dzzwms6wzsaj347qm1vf7k82nb3wp6myj5g"; }; }; tkg = fetchFromGitHub { owner = "Frogging-Family"; repo = "linux-tkg"; - rev = "2da317c20ed6f70085b195639b9aad2cacf31ab5"; - sha256 = "06a5fpafids8nc550pcsyvar2igphi6bpghqzl6cp48hg6p2g07w"; + rev = "c93cfdd20da1cf3b0860895c278b5a4676ccb057"; + sha256 = "0xpkdjq2ickhb8pqzqv5avjmrg3qyzryy8qv1wr9dxpkx197swdx"; }; ver = @@ -34,11 +31,7 @@ in rec { fullVersion = ver.version; kernelSrc = builtins.fetchurl { - url = "https://cdn.kernel.org/pub/linux/kernel/v${lib.versions.major version}.x/linux-${version}.tar.xz"; - sha256 = ver.baseHash; - }; - patchSrc = builtins.fetchurl { - url = "https://cdn.kernel.org/pub/linux/kernel/v${lib.versions.major version}.x/patch-${fullVersion}.xz"; - sha256 = ver.patchHash; + url = "https://cdn.kernel.org/pub/linux/kernel/v${lib.versions.major version}.x/linux-${fullVersion}.tar.xz"; + sha256 = ver.hash; }; } From bd0c58c121c0bd51427c6d4b8779ceec379413dd Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 11:05:28 +0700 Subject: [PATCH 08/11] more fix --- .github/workflows/cachix.yml | 2 +- packages/linux-tkg/default.nix | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/cachix.yml b/.github/workflows/cachix.yml index a4f90ff..04a17c5 100644 --- a/.github/workflows/cachix.yml +++ b/.github/workflows/cachix.yml @@ -18,7 +18,7 @@ jobs: with: name: lava authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - - run: nix build -L .#linux-lava + - run: nix build -L .#linux_lava linux_tkg: name: Build Linux-tkg diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index f3c04ea..0760d95 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -18,9 +18,9 @@ , tickless ? 2 , enableAnbox ? false -, bcachefs ? false -, futex2 ? true -, winesync ? true +, bcachefs ? (version == "5.10" || version == "5.12") +, futex2 ? (lib.versionAtLeast version "5.10") +, winesync ? (lib.versionAtLeast version "5.12") , irqThreading ? false , randomTrustCPU ? false , smtNice ? true From 06ec8c63c018cc3471ed7b3dca183124c342ead8 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 13:31:18 +0700 Subject: [PATCH 09/11] disable zfsFix --- packages/linux-tkg/default.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index 0760d95..ececaff 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -35,7 +35,8 @@ , aggressiveOndemand ? true , fsync ? true , miscAdditions ? true -, zfsFix ? (lib.versionOlder version "5.11") +# XXX: This patch is pretty broken +, zfsFix ? false # (lib.versionOlder version "5.11") , localVersion ? "" From fdae40c7efa024db600999c53f28f7ac794addc6 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 13:45:07 +0700 Subject: [PATCH 10/11] aa --- packages/linux-tkg/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index ececaff..96e23cf 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -234,7 +234,7 @@ let "0002-clear-patches" "0003-glitched-base" ] - ++ lib.optional miscAdditions "0012-misc-additions" + ++ lib.optional ((lib.versionAtLeast version "5.10") && miscAdditions) "0012-misc-additions" ++ lib.optionals (version == "5.12") [ "0001-mm-Support-soft-dirty-flag-reset-for-VA-range" "0002-mm-Support-soft-dirty-flag-read-with-reset" From 49eec3c14930ad4445b18225b2491f16ce8e4b92 Mon Sep 17 00:00:00 2001 From: LavaDesu Date: Mon, 28 Jun 2021 14:11:15 +0700 Subject: [PATCH 11/11] more more fixes --- packages/linux-tkg/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/linux-tkg/default.nix b/packages/linux-tkg/default.nix index 96e23cf..28a1753 100644 --- a/packages/linux-tkg/default.nix +++ b/packages/linux-tkg/default.nix @@ -309,12 +309,12 @@ let inherit name; patch = "${sources.tkg}/linux-tkg-patches/${version}/${name}.patch"; }; - tkgPatches = builtins.map (e: toPatch e) (lib.naturalSort patchNames); + tkgPatches = builtins.map (e: toPatch e) patchNames; suffix = if builtins.stringLength localVersion != 0 then "-tkg-${localVersion}" else "-tkg"; in buildLinux(args // rec { - version = "${sources.fullVersion}-tkg"; - modDirVersion = version + suffix; + version = sources.fullVersion + suffix; + modDirVersion = version; isZen = zenify;