diff --git a/.SRCINFO b/.SRCINFO index ab52313..84621ec 100755 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,6 +1,6 @@ pkgbase = linux-cachyos pkgdesc = Linux BORE scheduler Kernel by CachyOS with other patches and improvements - pkgver = 5.18.2 + pkgver = 5.18.3 pkgrel = 1 url = https://github.com/CachyOS/linux-cachyos arch = x86_64 @@ -24,7 +24,7 @@ pkgbase = linux-cachyos makedepends = make makedepends = patch options = !strip - source = https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.18.2.tar.xz + source = https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.18.3.tar.xz source = config source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/sched/0001-bore-sched.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-migrate.patch @@ -39,34 +39,32 @@ pkgbase = linux-cachyos source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-fs-patches.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-futex-winesync.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-hwmon.patch - source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-hardening.patch - source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-kbuild.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-lrng.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-lru-le9-spf.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-ksm.patch source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-zram-entropy-calculation.patch + source = https://raw.githubusercontent.com/ptr1337/kernel-patches/master/5.18/0001-PCI-Allow-BAR-movement-during-boot-and-hotplug.patch source = auto-cpu-optimization.sh - sha256sums = ef9ff2dfa5416a03e7e5fd9c308aaec385fe8ff9f4a62d957b167843849659a2 - sha256sums = fbff2747a1d8916f2de80455fb40f0ce1bf9d5df5dca7157234242b5b286fc90 - sha256sums = 7a6dfa314da62e69f87c816cf407e0bff2673d3359ff29732a93c64a821f0851 + sha256sums = c70cb405076c3cfd73e4de729430b0342ea21b92a04d8284a03fac664ef1cfea + sha256sums = 83425e8b1553f4ad0d8fdadbad3980b71f7a36742b3238813ff4d00cd3bf08f8 + sha256sums = 7a36fe0a53a644ade0ce85f08f9ca2ebaddd47876966b7cc9d4cae8844649271 sha256sums = e8179f661dc9ba2ad89455f0c7e952e9dd9b4d6445476384cbac2730cdd46b65 - sha256sums = 85eeddbd0b1fdb44333c450e6d93e370dcd7e230cecccce47667aaa746bea3ae + sha256sums = 326d129f9435145add756dc967accd56ffe1d8ff1b6650f84d2578c41bd6dfd6 sha256sums = 2bfe45a67732a97cea01bf760a8f9fb297057c2488eb9e61720a0bb26c9b11e2 sha256sums = dc2898751118804bc3f36b5a6928a2927d04919ce41c0ce013009f5564d6d232 sha256sums = 3754c1ad6bc2fb4e73e9d77137e9f245b3be1a73a05685f0ca03f4c086e5d04d sha256sums = e2266d499cebdd5d195a044048ae4a13755f1d3edb3ece2c3f8837228b4cd521 sha256sums = c2bf57d37db1f93c5f3eeff2e2957f01618f4786613c13755f9ae6989d2b745c sha256sums = 30fd4ca078cb1eee0bc4005700da4d15515a577ccdb96ea7922040aa9086d6b7 - sha256sums = 4fde226af6680d151143c30143d1594d2b2994350ba1e4726f1768584df2a117 - sha256sums = 08bde51de2d012219628bf1831a475115266cf4a6969be8064e719140cc9c232 + sha256sums = 4b18c6a82b62c50b45568526eeb16ae877c8f52c407a4bb9c6144c07a0d1233a + sha256sums = f4ed599589fdd44270229492505f5f88e20d79e93b8044f8041a2fc90486bb4e sha256sums = 1d9c83de97d541f5a7ae4612a96c05aea8ce38de5471cc21fd2197dbd6644d00 - sha256sums = c1aae07261bafc711c2d66e26c2c30e444e11509cacc7aec148dc021761294cd - sha256sums = a2701625ea310c809fd7ecdf96c43a51ba28ed1dd8583fdbc06897a0a18230e2 - sha256sums = 781cd26d7b0794d11f103ada94140061117c628471a4c49f0228f22f0a6cf425 + sha256sums = 344806f8ea9f0f7da883e2c27835153944df7a4b15bb3f97ec6b7b7709682f5d sha256sums = 99b18e00ca3e038481a23f4c83bc285a1ad0e209d049a8476c8f997627aaea79 sha256sums = d2c542b3d44ef11364248c550d20ec7b52261cd98ee5191c24d59c9e0a69392e sha256sums = 8edf9b9b1a9c26cc4d6dfaf5f14c06b197a04c5bbb8459dd292c033aa2534d19 sha256sums = efe8558b63feb0e76b61d69952c5300ad54c951d9044101be7c01932a54fb4fb + sha256sums = cb2494f5ad43fd260e26d771305dade3f9499fa1ffaf53cb9ef8c19b66dab7d7 sha256sums = be21f15aeb22b2ca1e35e4975590d30736af0483ea7464e3464a60d993e37e22 pkgname = linux-cachyos @@ -86,3 +84,4 @@ pkgname = linux-cachyos pkgname = linux-cachyos-headers pkgdesc = Headers and scripts for building modules for the Linux BORE scheduler Kernel by CachyOS with other patches and improvements kernel depends = pahole + depends = linux-cachyos diff --git a/PKGBUILD b/PKGBUILD index 2362120..8805cf8 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -12,6 +12,8 @@ # 'cacule-rdb' - select 'CacULE-RDB scheduler' # 'bore' - select 'Burst-Oriented Response Enhancer' # 'cfs' - select 'Completely Fair Scheduler' +# 'tt' - select 'Task Type Scheduler by Hamad Marri' +# 'hardened' - select 'BORE Scheduler hardened' ## kernel with hardened config and hardening patches with the bore scheduler _cpusched='bore' ### BUILD OPTIONS @@ -43,7 +45,7 @@ _localmodcfg= _use_current= ### Enable KBUILD_CFLAGS -O3 -_cc_harder=y +_cc_harder= ### Set performance governor as default _per_gov=y @@ -111,13 +113,19 @@ _thin_lto_cachedir= # The packagename is called "llvm-kcfi" _use_kcfi= +# Build the zfs module builtin in to the kernel +_build_zfs= + if [ -n "$_use_llvm_lto" ]; then - pkgbase=linux-cachyos-lto + pkgsuffix=cachyos-lto + pkgbase=linux-$pkgsuffix + else - pkgbase=linux-cachyos + pkgsuffix=cachyos + pkgbase=linux-$pkgsuffix fi _major=5.18 -_minor=2 +_minor=3 #_minorc=$((_minor+1)) #_rcver=rc8 pkgver=${_major}.${_minor} @@ -129,72 +137,85 @@ _srcname=linux-${_stable} arch=(x86_64 x86_64_v3) pkgdesc='Linux BORE scheduler Kernel by CachyOS with other patches and improvements' pkgrel=1 +_kernver=$pkgver-$pkgrel arch=('x86_64' 'x86_64_v3') url="https://github.com/CachyOS/linux-cachyos" license=('GPL2') options=('!strip') makedepends=('bc' 'texlive-latexextra' 'libelf' 'pahole' 'cpio' 'perl' 'tar' 'xz' 'zstd' 'xmlto' 'git' 'gcc' 'gcc-libs' 'glibc' 'binutils' 'make' 'patch') if [ -n "$_use_llvm_lto" ]; then - makedepends+=(clang llvm lld python) - BUILD_FLAGS=( - CC=clang - LD=ld.lld - LLVM=1 - LLVM_IAS=1 - ) + makedepends+=(clang llvm lld python) + BUILD_FLAGS=( + CC=clang + LD=ld.lld + LLVM=1 + LLVM_IAS=1 + ) fi _patchsource="https://raw.githubusercontent.com/ptr1337/kernel-patches/master/${_major}" source=( "https://cdn.kernel.org/pub/linux/kernel/v${pkgver%%.*}.x/${_srcname}.tar.xz" "config") +if [ -n "$_build_zfs" ]; then + source+=("git+https://github.com/ptr1337/zfs.git#commit=8941b63a931ca6fdc6d0ab46c037540569ba04a4") +fi if [ "$_cpusched" = "bmq" ]; then - source+=("${_patchsource}/sched/0001-prjc.patch") + source+=("${_patchsource}/sched/0001-prjc.patch") fi if [ "$_cpusched" = "pds" ]; then - source+=("${_patchsource}/sched/0001-prjc.patch") + source+=("${_patchsource}/sched/0001-prjc.patch") fi if [ "$_cpusched" = "cacule" ]; then - source+=("${_patchsource}/sched/0001-cacULE-5.18.patch") + source+=("${_patchsource}/sched/0001-cacULE-5.18.patch") fi if [ "$_cpusched" = "cacule-rdb" ]; then - source+=("${_patchsource}/sched/0001-cacULE-5.18.patch") + source+=("${_patchsource}/sched/0001-cacULE-5.18.patch") fi if [ "$_cpusched" = "bore" ]; then source+=("${_patchsource}/sched/0001-bore-sched.patch" "${_patchsource}/0001-migrate.patch") fi if [ "$_cpusched" = "cfs" ]; then - source+=("${_patchsource}/0001-migrate.patch") + source+=("${_patchsource}/0001-migrate.patch") +fi +if [ "$_cpusched" = "tt" ]; then + source+=("${_patchsource}/sched/0001-tt-5.18.patch") +fi +if [ "$_cpusched" = "hardened" ]; then + source+=( + "${_patchsource}/sched/0001-bore-sched.patch" + "${_patchsource}/0001-migrate.patch" + "${_patchsource}/0001-hardening.patch" + "${_patchsource}/0001-hardened.patch") fi source+=( - "${_patchsource}/0001-amd-perf.patch" - "${_patchsource}/0001-arch.patch" - "${_patchsource}/0001-bbr2.patch" - "${_patchsource}/0001-cachy.patch" - "${_patchsource}/0001-clearlinux.patch" - "${_patchsource}/0001-cpu.patch" - "${_patchsource}/0001-Extend-DAMOS-for-Proactive-LRU-lists-Sorting.patch" - "${_patchsource}/0001-fixes.patch" - "${_patchsource}/0001-fs-patches.patch" - "${_patchsource}/0001-futex-winesync.patch" - "${_patchsource}/0001-hwmon.patch" - "${_patchsource}/0001-hardening.patch" - "${_patchsource}/0001-kbuild.patch" - "${_patchsource}/0001-lrng.patch" - "${_patchsource}/0001-lru-le9-spf.patch" - "${_patchsource}/0001-ksm.patch" - "${_patchsource}/0001-zram-entropy-calculation.patch" - "auto-cpu-optimization.sh" + "${_patchsource}/0001-amd-perf.patch" + "${_patchsource}/0001-arch.patch" + "${_patchsource}/0001-bbr2.patch" + "${_patchsource}/0001-cachy.patch" + "${_patchsource}/0001-clearlinux.patch" + "${_patchsource}/0001-cpu.patch" + "${_patchsource}/0001-Extend-DAMOS-for-Proactive-LRU-lists-Sorting.patch" + "${_patchsource}/0001-fixes.patch" + "${_patchsource}/0001-fs-patches.patch" + "${_patchsource}/0001-futex-winesync.patch" + "${_patchsource}/0001-hwmon.patch" + "${_patchsource}/0001-lrng.patch" + "${_patchsource}/0001-lru-le9-spf.patch" + "${_patchsource}/0001-ksm.patch" + "${_patchsource}/0001-zram-entropy-calculation.patch" + "${_patchsource}/0001-PCI-Allow-BAR-movement-during-boot-and-hotplug.patch" + "auto-cpu-optimization.sh" ) if [ -n "$_use_kcfi" ]; then -source+=("${_patchsource}/0001-kcfi.patch") -depends+=(clang llvm lld python) -BUILD_FLAGS=( + source+=("${_patchsource}/0001-kcfi.patch") + depends+=(clang llvm lld python) + BUILD_FLAGS=( CC=clang LD=ld.lld LLVM=1 -) + ) fi export KBUILD_BUILD_HOST=archlinux @@ -203,13 +224,14 @@ export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EP prepare() { - cd $_srcname +cd ${srcdir}/$_srcname - echo "Setting version..." - scripts/setlocalversion --save-scmversion - echo "-$pkgrel" > localversion.10-pkgrel - echo "${pkgbase#linux}" > localversion.20-pkgname + echo "Setting version..." + scripts/setlocalversion --save-scmversion + echo "-$pkgrel" > localversion.10-pkgrel + echo "${pkgbase#linux}" > localversion.20-pkgname +# [[ $src = 0001-zfs-2.1.5-staging.patch ]] && continue local src for src in "${source[@]}"; do src="${src%%::*}" @@ -219,373 +241,430 @@ prepare() { patch -Np1 < "../$src" done - echo "Setting config..." - cp ../config .config + echo "Setting config..." + cp ../config .config - if [ -n "$_use_auto_optimization" ]; then - "${srcdir}"/auto-cpu-optimization.sh - fi - - if [ -n "$_use_optimization_select" ]; then - source "${startdir}"/configure - cpu_arch - fi - - ### Selecting the CPU scheduler - if [ "$_cpusched" = "bmq" ]; then - echo "Selecting BMQ CPU scheduler..." - scripts/config --enable SCHED_ALT \ - --enable SCHED_BMQ \ - --disable SCHED_PDS - elif [ "$_cpusched" = "pds" ]; then - echo "Selecting PDS CPU scheduler..." - scripts/config --enable SCHED_ALT \ - --disable SCHED_BMQ \ - --enable SCHED_PDS - elif [ "$_cpusched" = "cacule" ]; then - echo "Selecting CacULE scheduler..." - scripts/config --enable CACULE_SCHED \ - --disable CACULE_RDB - elif [ "$_cpusched" = "cacule-rdb" ]; then - echo "Selecting CacULE-RDB scheduler..." - scripts/config --enable CACULE_SCHED \ - --enable CACULE_RDB \ - --set-val RDB_INTERVAL 19 - elif [ "$_cpusched" = "bore" ]; then - echo "Selecting BORE Scheduler..." - scripts/config --enable SCHED_BORE - elif [ "$_cpusched" = "tt" ]; then - echo "Selecting TT Scheduler..." - scripts/config --enable TT_SCHED - scripts/config --enable TT_ACCOUNTING_STATS - elif [ "$_cpusched" = "cfs" ]; then - echo "Selecting Completely Fair Scheduler..." - else - if [ -n "$_cpusched" ]; then - error "The value $_cpusched is invalid. Choose the correct one again." - else - error "The value is empty. Choose the correct one again." - fi - error "Selecting the CPU scheduler failed!" - exit - fi - - if [ -n "$_use_kcfi" ]; then - echo "Enabling kCFI" - scripts/config --enable ARCH_SUPPORTS_CFI_CLANG \ - --enable CFI_CLANG - fi - - if [ "$_use_llvm_lto" = "thin" ]; then - echo "Enabling LLVM THIN LTO..." - scripts/config --disable LTO_NONE \ - --enable LTO \ - --enable LTO_CLANG \ - --enable ARCH_SUPPORTS_LTO_CLANG \ - --enable ARCH_SUPPORTS_LTO_CLANG_THIN \ - --enable HAS_LTO_CLANG \ - --enable LTO_CLANG_THIN \ - --enable HAVE_GCC_PLUGINS - elif [ "$_use_llvm_lto" = "full" ]; then - echo "Enabling LLVM FULL LTO..." - scripts/config --disable LTO_NONE \ - --enable LTO \ - --enable LTO_CLANG \ - --enable ARCH_SUPPORTS_LTO_CLANG \ - --enable ARCH_SUPPORTS_LTO_CLANG_THIN \ - --enable HAS_LTO_CLANG \ - --enable LTO_CLANG \ - --enable LTO_CLANG_FULL \ - --enable HAVE_GCC_PLUGINS - else - scripts/config --enable LTO_NONE - fi - - if [ "$_HZ_ticks" = "1000" ]; then - echo "Setting tick rate to 1k Hz..." - scripts/config --disable HZ_300 \ - --enable HZ_1000 \ - --set-val HZ 1000 - elif [ "$_HZ_ticks" = "750" ]; then - echo "Setting tick rate to 750Hz..." - scripts/config --disable HZ_300 \ - --enable HZ_750 \ - --set-val HZ 750 - elif [ "$_HZ_ticks" = "600" ]; then - echo "Setting tick rate to 600Hz..." - scripts/config --disable HZ_300 \ - --enable HZ_600 \ - --set-val HZ 600 - elif [ "$_HZ_ticks" = "500" ]; then - echo "Setting tick rate to 500Hz..." - scripts/config --disable HZ_300 \ - --enable HZ_500 \ - --set-val HZ 500 - elif [ "$_HZ_ticks" = "300" ]; then - echo "Setting tick rate to 300Hz..." - fi - - if [ -n "$_NUMAdisable" ]; then - echo "Disabling NUMA from kernel config..." - scripts/config --disable NUMA \ - --disable AMD_NUMA \ - --disable X86_64_ACPI_NUMA \ - --disable NODES_SPAN_OTHER_NODES \ - --disable NUMA_EMU \ - --disable NEED_MULTIPLE_NODES \ - --disable USE_PERCPU_NUMA_NODE_ID \ - --disable ACPI_NUMA \ - --disable ARCH_SUPPORTS_NUMA_BALANCING \ - --disable NODES_SHIFT \ - --undefine NODES_SHIFT \ - --disable NEED_MULTIPLE_NODES - fi - - if [ -n "$_mq_deadline_disable" ]; then - echo "Disabling MQ-Deadline I/O scheduler..." - scripts/config --disable MQ_IOSCHED_DEADLINE - fi - - if [ -n "$_kyber_disable" ]; then - echo "Disabling Kyber I/O scheduler..." - scripts/config --disable MQ_IOSCHED_KYBER - fi - - if [ -n "$_per_gov" ]; then - echo "Setting performance governor..." - scripts/config --disable CPU_FREQ_DEFAULT_GOV_SCHEDUTIL \ - --enable CPU_FREQ_DEFAULT_GOV_PERFORMANCE \ - --enable PCIEASPM \ - --enable PCIEASPM_PERFORMANCE \ - --enable PCIE_BUS_PERFORMANCE + if [ -n "$_use_auto_optimization" ]; then + "${srcdir}"/auto-cpu-optimization.sh fi - if [ "$_tickrate" = "perodic" ]; then - echo "Enabling periodic ticks..." - scripts/config --disable NO_HZ_IDLE \ - --disable NO_HZ_FULL \ - --disable NO_HZ \ - --disable NO_HZ_COMMON \ - --enable HZ_PERIODIC - elif [ "$_tickrate" = "idle" ]; then - echo "Enabling tickless idle..." - scripts/config --disable HZ_PERIODIC \ - --disable NO_HZ_FULL \ - --enable NO_HZ_IDLE \ - --enable NO_HZ \ - --enable NO_HZ_COMMON - elif [ "$_tickrate" = "full" ]; then - echo "Enabling tickless idle..." - scripts/config --disable HZ_PERIODIC \ - --disable NO_HZ_IDLE \ - --disable CONTEXT_TRACKING_FORCE \ - --enable NO_HZ_FULL_NODEF \ - --enable NO_HZ_FULL \ - --enable NO_HZ \ - --enable NO_HZ_COMMON \ - --enable CONTEXT_TRACKING - fi + if [ -n "$_use_optimization_select" ]; then + source "${startdir}"/configure + cpu_arch + fi - if [ "$_preempt" = "full" ]; then - echo "Enabling low latency preempt..." - scripts/config --enable PREEMPT_BUILD \ - --disable PREEMPT_NONE \ - --disable PREEMPT_VOLUNTARY \ - --enable PREEMPT \ - --enable PREEMPT_COUNT \ - --enable PREEMPTION \ - --enable PREEMPT_DYNAMIC - elif [ "$_preempt" = "voluntary" ]; then - echo "Enabling tickless idle..." - scripts/config --enable PREEMPT_BUILD \ - --disable PREEMPT_NONE \ - --enable PREEMPT_VOLUNTARY \ - --disable PREEMPT \ - --enable PREEMPT_COUNT \ - --enable PREEMPTION \ - --enable PREEMPT_DYNAMIC - elif [ "$_tickrate" = "server" ]; then - echo "Enabling tickless idle..." - scripts/config --enable PREEMPT_NONE_BUILD \ - --enable PREEMPT_NONE \ - --disable PREEMPT_VOLUNTARY \ - --disable PREEMPT \ - --disable PREEMPT_COUNT \ - --disable PREEMPTION \ - --disable PREEMPT_DYNAMIC + ### Selecting the CPU scheduler + if [ "$_cpusched" = "bmq" ]; then + echo "Selecting BMQ CPU scheduler..." + scripts/config --enable SCHED_ALT \ + --enable SCHED_BMQ \ + --disable SCHED_PDS + elif [ "$_cpusched" = "pds" ]; then + echo "Selecting PDS CPU scheduler..." + scripts/config --enable SCHED_ALT \ + --disable SCHED_BMQ \ + --enable SCHED_PDS + elif [ "$_cpusched" = "cacule" ]; then + echo "Selecting CacULE scheduler..." + scripts/config --enable CACULE_SCHED \ + --disable CACULE_RDB + elif [ "$_cpusched" = "cacule-rdb" ]; then + echo "Selecting CacULE-RDB scheduler..." + scripts/config --enable CACULE_SCHED \ + --enable CACULE_RDB \ + --set-val RDB_INTERVAL 19 + elif [ "$_cpusched" = "bore" ]; then + echo "Selecting BORE Scheduler..." + scripts/config --enable SCHED_BORE + elif [ "$_cpusched" = "tt" ]; then + echo "Selecting TT Scheduler..." + scripts/config --enable TT_SCHED + scripts/config --enable TT_ACCOUNTING_STATS + elif [ "$_cpusched" = "cfs" ]; then + echo "Selecting Completely Fair Scheduler..." + elif [ "$_cpusched" = "hardened" ]; then + echo "Selecting hardened..." + else + if [ -n "$_cpusched" ]; then + error "The value $_cpusched is invalid. Choose the correct one again." + else + error "The value is empty. Choose the correct one again." fi + error "Selecting the CPU scheduler failed!" + exit + fi - if [ -n "$_cc_harder" ]; then - echo "Enabling KBUILD_CFLAGS -O3..." - scripts/config --disable CC_OPTIMIZE_FOR_PERFORMANCE \ - --enable CC_OPTIMIZE_FOR_PERFORMANCE_O3 - fi + if [ -n "$_use_kcfi" ]; then + echo "Enabling kCFI" + scripts/config --enable ARCH_SUPPORTS_CFI_CLANG \ + --enable CFI_CLANG + fi - if [ -n "$_tcp_bbr2" ]; then - echo "Disabling TCP_CONG_CUBIC..." - scripts/config --module TCP_CONG_CUBIC \ - --disable DEFAULT_CUBIC \ - --enable TCP_CONG_BBR2 \ - --enable DEFAULT_BBR2 \ - --set-str DEFAULT_TCP_CONG bbr2 - fi + if [ "$_use_llvm_lto" = "thin" ]; then + echo "Enabling LLVM THIN LTO..." + scripts/config \ + --enable LTO \ + --enable LTO_CLANG \ + --enable ARCH_SUPPORTS_LTO_CLANG \ + --enable ARCH_SUPPORTS_LTO_CLANG_THIN \ + --disable LTO_NONE \ + --enable HAS_LTO_CLANG \ + --disable LTO_CLANG_FULL \ + --enable LTO_CLANG_THIN \ + --enable HAVE_GCC_PLUGINS + elif [ "$_use_llvm_lto" = "full" ]; then + echo "Enabling LLVM FULL LTO..." + scripts/config \ + --enable LTO \ + --enable LTO_CLANG \ + --enable ARCH_SUPPORTS_LTO_CLANG \ + --enable ARCH_SUPPORTS_LTO_CLANG_THIN \ + --disable LTO_NONE \ + --enable HAS_LTO_CLANG \ + --enable LTO_CLANG_FULL \ + --disable LTO_CLANG_THIN \ + --enable HAVE_GCC_PLUGINS + else + scripts/config --enable LTO_NONE + fi - if [ -n "$_nf_cone" ]; then - echo "Enabling FULLCONENAT..." - scripts/config --module IP_NF_TARGET_FULLCONENAT \ - --module NETFILTER_XT_TARGET_FULLCONENAT - fi + if [ "$_HZ_ticks" = "1000" ]; then + echo "Setting tick rate to 1k Hz..." + scripts/config --disable HZ_300 \ + --enable HZ_1000 \ + --set-val HZ 1000 + elif [ "$_HZ_ticks" = "750" ]; then + echo "Setting tick rate to 750Hz..." + scripts/config --disable HZ_300 \ + --enable HZ_750 \ + --set-val HZ 750 + elif [ "$_HZ_ticks" = "600" ]; then + echo "Setting tick rate to 600Hz..." + scripts/config --disable HZ_300 \ + --enable HZ_600 \ + --set-val HZ 600 + elif [ "$_HZ_ticks" = "500" ]; then + echo "Setting tick rate to 500Hz..." + scripts/config --disable HZ_300 \ + --enable HZ_500 \ + --set-val HZ 500 + elif [ "$_HZ_ticks" = "300" ]; then + echo "Setting tick rate to 300Hz..." + fi - if [ -n "$_spf_enable" ]; then - echo "Enabling SPECULATIVE_PAGE_FAULT LRU..." - scripts/config --enable SPECULATIVE_PAGE_FAULT - fi + if [ -n "$_NUMAdisable" ]; then + echo "Disabling NUMA from kernel config..." + scripts/config --disable NUMA \ + --disable AMD_NUMA \ + --disable X86_64_ACPI_NUMA \ + --disable NODES_SPAN_OTHER_NODES \ + --disable NUMA_EMU \ + --disable NEED_MULTIPLE_NODES \ + --disable USE_PERCPU_NUMA_NODE_ID \ + --disable ACPI_NUMA \ + --disable ARCH_SUPPORTS_NUMA_BALANCING \ + --disable NODES_SHIFT \ + --undefine NODES_SHIFT \ + --disable NEED_MULTIPLE_NODES + fi - if [ -n "$_lru_enable" ]; then - echo "Enabling multigenerational LRU..." - scripts/config --enable ARCH_HAS_NONLEAF_PMD_YOUNG \ - --enable LRU_GEN \ - --enable LRU_GEN_ENABLED \ - --disable LRU_GEN_STATS - fi + if [ -n "$_mq_deadline_disable" ]; then + echo "Disabling MQ-Deadline I/O scheduler..." + scripts/config --disable MQ_IOSCHED_DEADLINE + fi - if [ -n "$_damon" ]; then - echo "Enabling DAMON..." - scripts/config --enable DAMON \ - --enable DAMON_VADDR \ - --enable DAMON_DBGFS \ - --enable DAMON_SYSFS \ - --enable DAMON_PADDR \ - --enable DAMON_RECLAIM - fi + if [ -n "$_kyber_disable" ]; then + echo "Disabling Kyber I/O scheduler..." + scripts/config --disable MQ_IOSCHED_KYBER + fi - if [ -n "$_lrng_enable" ]; then - echo "Enabling Linux Random Number Generator ..." - scripts/config --disable RANDOM_DEFAULT_IMPL \ - --enable LRNG \ - --enable LRNG_OVERSAMPLE_ENTROPY_SOURCES \ - --set-val LRNG_OVERSAMPLE_ES_BITS 64 \ - --set-val LRNG_SEED_BUFFER_INIT_ADD_BITS 128 \ - --enable LRNG_IRQ \ - --enable LRNG_CONTINUOUS_COMPRESSION_ENABLED \ - --disable LRNG_CONTINUOUS_COMPRESSION_DISABLED \ - --enable LRNG_ENABLE_CONTINUOUS_COMPRESSION \ - --enable LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION \ - --disable LRNG_COLLECTION_SIZE_512 \ - --enable LRNG_COLLECTION_SIZE_1024 \ - --disable LRNG_COLLECTION_SIZE_2048 \ - --disable LRNG_COLLECTION_SIZE_4096 \ - --disable LRNG_COLLECTION_SIZE_8192 \ - --set-val LRNG_COLLECTION_SIZE 1024 \ - --enable LRNG_HEALTH_TESTS \ - --set-val LRNG_RCT_CUTOFF 31 \ - --set-val LRNG_APT_CUTOFF 325 \ - --set-val LRNG_IRQ_ENTROPY_RATE 256 \ - --enable LRNG_JENT \ - --set-val LRNG_JENT_ENTROPY_RATE 16 \ - --enable LRNG_CPU \ - --set-val LRNG_CPU_ENTROPY_RATE 8 \ - --enable LRNG_DRNG_SWITCH \ - --enable LRNG_KCAPI_HASH \ - --module LRNG_DRBG \ - --module LRNG_KCAPI \ - --enable LRNG_TESTING_MENU \ - --disable LRNG_RAW_HIRES_ENTROPY \ - --disable LRNG_RAW_JIFFIES_ENTROPY \ - --disable LRNG_RAW_IRQ_ENTROPY \ - --disable LRNG_RAW_IRQFLAGS_ENTROPY \ - --disable LRNG_RAW_RETIP_ENTROPY \ - --disable LRNG_RAW_REGS_ENTROPY \ - --disable LRNG_RAW_ARRAY \ - --disable LRNG_IRQ_PERF \ - --disable LRNG_ACVT_HASH \ - --enable LRNG_RUNTIME_ES_CONFIG \ - --disable LRNG_RUNTIME_MAX_WO_RESEED_CONFIG \ - --disable LRNG_TEST_CPU_ES_COMPRESSION \ - --enable LRNG_SELFTEST \ - --disable LRNG_SELFTEST_PANIC - fi + if [ -n "$_per_gov" ]; then + echo "Setting performance governor..." + scripts/config --disable CPU_FREQ_DEFAULT_GOV_SCHEDUTIL \ + --enable CPU_FREQ_DEFAULT_GOV_PERFORMANCE \ + --enable PCIEASPM \ + --enable PCIEASPM_PERFORMANCE \ + --enable PCIE_BUS_PERFORMANCE + fi - if [ -n "$_zstd_swap_compression" ]; then - echo "Enabling zram ZSTD compression..." - scripts/config --disable ZRAM_DEF_COMP_LZORLE \ - --enable ZRAM_DEF_COMP_ZSTD \ - --set-str ZRAM_DEF_COMP zstd \ - --disable ZSWAP_COMPRESSOR_DEFAULT_LZ4 \ - --enable ZSWAP_COMPRESSOR_DEFAULT_ZSTD \ - --set-str ZSWAP_COMPRESSOR_DEFAULT zstd \ - --enable ZRAM_ENTROPY \ - --set-val ZRAM_ENTROPY_THRESHOLD 100000 - fi + if [ "$_tickrate" = "perodic" ]; then + echo "Enabling periodic ticks..." + scripts/config --disable NO_HZ_IDLE \ + --disable NO_HZ_FULL \ + --disable NO_HZ \ + --disable NO_HZ_COMMON \ + --enable HZ_PERIODIC + elif [ "$_tickrate" = "idle" ]; then + echo "Enabling tickless idle..." + scripts/config --disable HZ_PERIODIC \ + --disable NO_HZ_FULL \ + --enable NO_HZ_IDLE \ + --enable NO_HZ \ + --enable NO_HZ_COMMON + elif [ "$_tickrate" = "full" ]; then + echo "Enabling tickless idle..." + scripts/config --disable HZ_PERIODIC \ + --disable NO_HZ_IDLE \ + --disable CONTEXT_TRACKING_FORCE \ + --enable NO_HZ_FULL_NODEF \ + --enable NO_HZ_FULL \ + --enable NO_HZ \ + --enable NO_HZ_COMMON \ + --enable CONTEXT_TRACKING + fi - if [ -n "$_disable_debug" ]; then + if [ "$_preempt" = "full" ]; then + echo "Enabling low latency preempt..." + scripts/config --enable PREEMPT_BUILD \ + --disable PREEMPT_NONE \ + --disable PREEMPT_VOLUNTARY \ + --enable PREEMPT \ + --enable PREEMPT_COUNT \ + --enable PREEMPTION \ + --enable PREEMPT_DYNAMIC + elif [ "$_preempt" = "voluntary" ]; then + echo "Enabling tickless idle..." + scripts/config --enable PREEMPT_BUILD \ + --disable PREEMPT_NONE \ + --enable PREEMPT_VOLUNTARY \ + --disable PREEMPT \ + --enable PREEMPT_COUNT \ + --enable PREEMPTION \ + --disable PREEMPT_DYNAMIC + elif [ "$_tickrate" = "server" ]; then + echo "Enabling tickless idle..." + scripts/config --enable PREEMPT_NONE_BUILD \ + --enable PREEMPT_NONE \ + --disable PREEMPT_VOLUNTARY \ + --disable PREEMPT \ + --disable PREEMPT_COUNT \ + --disable PREEMPTION \ + --disable PREEMPT_DYNAMIC + fi + + if [ -n "$_cc_harder" ]; then + echo "Enabling KBUILD_CFLAGS -O3..." + scripts/config --disable CC_OPTIMIZE_FOR_PERFORMANCE \ + --enable CC_OPTIMIZE_FOR_PERFORMANCE_O3 + fi + + if [ -n "$_tcp_bbr2" ]; then + echo "Disabling TCP_CONG_CUBIC..." + scripts/config --module TCP_CONG_CUBIC \ + --disable DEFAULT_CUBIC \ + --enable TCP_CONG_BBR2 \ + --enable DEFAULT_BBR2 \ + --set-str DEFAULT_TCP_CONG bbr2 + fi + + if [ -n "$_nf_cone" ]; then + echo "Enabling FULLCONENAT..." + scripts/config --module IP_NF_TARGET_FULLCONENAT \ + --module NETFILTER_XT_TARGET_FULLCONENAT + fi + + if [ -n "$_spf_enable" ]; then + echo "Enabling SPECULATIVE_PAGE_FAULT LRU..." + scripts/config --enable SPECULATIVE_PAGE_FAULT + fi + + if [ -n "$_lru_enable" ]; then + echo "Enabling multigenerational LRU..." + scripts/config --enable ARCH_HAS_NONLEAF_PMD_YOUNG \ + --enable LRU_GEN \ + --enable LRU_GEN_ENABLED \ + --disable LRU_GEN_STATS + fi + + if [ -n "$_damon" ]; then + echo "Enabling DAMON..." + scripts/config --enable DAMON \ + --enable DAMON_VADDR \ + --enable DAMON_DBGFS \ + --enable DAMON_SYSFS \ + --enable DAMON_PADDR \ + --enable DAMON_RECLAIM + fi + + if [ -n "$_lrng_enable" ]; then + echo "Enabling Linux Random Number Generator ..." + scripts/config --disable CONFIG_RANDOM_DEFAULT_IMPL + scripts/config --enable CONFIG_LRNG + scripts/config --enable CONFIG_LRNG_SHA256 + scripts/config --enable CONFIG_LRNG_COMMON_DEV_IF + scripts/config --enable CONFIG_LRNG_DRNG_ATOMIC + scripts/config --enable CONFIG_LRNG_SYSCTL + scripts/config --enable CONFIG_LRNG_RANDOM_IF + scripts/config --module CONFIG_LRNG_KCAPI_IF + scripts/config --module CONFIG_LRNG_HWRAND_IF + scripts/config --enable CONFIG_LRNG_DEV_IF + scripts/config --enable CONFIG_LRNG_RUNTIME_ES_CONFIG + scripts/config --enable CONFIG_LRNG_IRQ_DFLT_TIMER_ES + scripts/config --disable CONFIG_LRNG_SCHED_DFLT_TIMER_ES + scripts/config --enable CONFIG_LRNG_TIMER_COMMON + scripts/config --disable CONFIG_LRNG_COLLECTION_SIZE_256 + scripts/config --disable CONFIG_LRNG_COLLECTION_SIZE_512 + scripts/config --enable CONFIG_LRNG_COLLECTION_SIZE_1024 + scripts/config --disable CONFIG_LRNG_COLLECTION_SIZE_2048 + scripts/config --disable CONFIG_LRNG_COLLECTION_SIZE_4096 + scripts/config --disable CONFIG_LRNG_COLLECTION_SIZE_8192 + scripts/config --set-val CONFIG_LRNG_COLLECTION_SIZE 1024 + scripts/config --enable CONFIG_LRNG_HEALTH_TESTS + scripts/config --set-val CONFIG_LRNG_RCT_CUTOFF 31 + scripts/config --set-val CONFIG_LRNG_APT_CUTOFF 325 + scripts/config --enable CONFIG_LRNG_IRQ + scripts/config --enable CONFIG_LRNG_CONTINUOUS_COMPRESSION_ENABLED + scripts/config --disable CONFIG_LRNG_CONTINUOUS_COMPRESSION_DISABLED + scripts/config --enable CONFIG_LRNG_ENABLE_CONTINUOUS_COMPRESSION + scripts/config --enable CONFIG_LRNG_SWITCHABLE_CONTINUOUS_COMPRESSION + scripts/config --set-val CONFIG_LRNG_IRQ_ENTROPY_RATE 256 + scripts/config --enable CONFIG_LRNG_JENT + scripts/config --set-val CONFIG_LRNG_JENT_ENTROPY_RATE 16 + scripts/config --enable CONFIG_LRNG_CPU + scripts/config --set-val CONFIG_LRNG_CPU_FULL_ENT_MULTIPLIER 1 + scripts/config --set-val CONFIG_LRNG_CPU_ENTROPY_RATE 8 + scripts/config --enable CONFIG_LRNG_SCHED + scripts/config --set-val CONFIG_LRNG_SCHED_ENTROPY_RATE 4294967295 + scripts/config --enable CONFIG_LRNG_DRNG_CHACHA20 + scripts/config --module CONFIG_LRNG_DRBG + scripts/config --module CONFIG_LRNG_DRNG_KCAPI + scripts/config --enable CONFIG_LRNG_SWITCH + scripts/config --enable CONFIG_LRNG_SWITCH_HASH + scripts/config --module CONFIG_LRNG_HASH_KCAPI + scripts/config --enable CONFIG_LRNG_SWITCH_DRNG + scripts/config --module CONFIG_LRNG_SWITCH_DRBG + scripts/config --module CONFIG_LRNG_SWITCH_DRNG_KCAPI + scripts/config --enable CONFIG_LRNG_DFLT_DRNG_CHACHA20 + scripts/config --disable CONFIG_LRNG_DFLT_DRNG_DRBG + scripts/config --disable CONFIG_LRNG_DFLT_DRNG_KCAPI + scripts/config --enable CONFIG_LRNG_TESTING_MENU + scripts/config --disable CONFIG_LRNG_RAW_HIRES_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_JIFFIES_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_IRQ_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_RETIP_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_REGS_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_ARRAY + scripts/config --disable CONFIG_LRNG_IRQ_PERF + scripts/config --disable CONFIG_LRNG_RAW_SCHED_HIRES_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_SCHED_PID_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_SCHED_START_TIME_ENTROPY + scripts/config --disable CONFIG_LRNG_RAW_SCHED_NVCSW_ENTROPY + scripts/config --disable CONFIG_LRNG_SCHED_PERF + scripts/config --disable CONFIG_LRNG_ACVT_HASH + scripts/config --disable CONFIG_LRNG_RUNTIME_MAX_WO_RESEED_CONFIG + scripts/config --disable CONFIG_LRNG_TEST_CPU_ES_COMPRESSION + scripts/config --enable CONFIG_LRNG_SELFTEST + scripts/config --disable CONFIG_LRNG_SELFTEST_PANIC + fi + + if [ -n "$_zstd_swap_compression" ]; then + echo "Enabling zram ZSTD compression..." + scripts/config --disable ZRAM_DEF_COMP_LZORLE \ + --enable ZRAM_DEF_COMP_ZSTD \ + --set-str ZRAM_DEF_COMP zstd \ + --disable ZSWAP_COMPRESSOR_DEFAULT_LZ4 \ + --enable ZSWAP_COMPRESSOR_DEFAULT_ZSTD \ + --set-str ZSWAP_COMPRESSOR_DEFAULT zstd \ + --enable ZRAM_ENTROPY \ + --set-val ZRAM_ENTROPY_THRESHOLD 100000 + fi + + if [ -n "$_disable_debug" ]; then scripts/config --disable DEBUG_INFO \ - --disable DEBUG_INFO_BTF \ - --disable DEBUG_INFO_DWARF4 \ - --disable DEBUG_INFO_DWARF5 \ - --disable PAHOLE_HAS_SPLIT_BTF \ - --disable DEBUG_INFO_BTF_MODULES \ - --disable SLUB_DEBUG \ - --disable PM_DEBUG \ - --disable PM_ADVANCED_DEBUG \ - --disable PM_SLEEP_DEBUG \ - --disable ACPI_DEBUG \ - --disable SCHED_DEBUG \ - --disable LATENCYTOP \ - --disable DEBUG_PREEMPT + --disable DEBUG_INFO_BTF \ + --disable DEBUG_INFO_DWARF4 \ + --disable DEBUG_INFO_DWARF5 \ + --disable PAHOLE_HAS_SPLIT_BTF \ + --disable DEBUG_INFO_BTF_MODULES \ + --disable SLUB_DEBUG \ + --disable PM_DEBUG \ + --disable PM_ADVANCED_DEBUG \ + --disable PM_SLEEP_DEBUG \ + --disable ACPI_DEBUG \ + --disable SCHED_DEBUG \ + --disable LATENCYTOP \ + --disable DEBUG_PREEMPT + fi + + echo "Enable USER_NS_UNPRIVILEGED" + scripts/config --enable USER_NS + echo "Enable WINE FASTSYNC" + scripts/config --enable WINESYNC + + ### Optionally use running kernel's config + # code originally by nous; http://aur.archlinux.org/packages.php?ID=40191 + if [ -n "$_use_current" ]; then + if [[ -s /proc/config.gz ]]; then + echo "Extracting config from /proc/config.gz..." + # modprobe configs + zcat /proc/config.gz > ./.config + else + warning "Your kernel was not compiled with IKPROC!" + warning "You cannot read the current config!" + warning "Aborting!" + exit fi + fi - echo "Enable USER_NS_UNPRIVILEGED" - scripts/config --enable USER_NS - echo "Enable WINE FASTSYNC" - scripts/config --enable WINESYNC - ### Optionally use running kernel's config - # code originally by nous; http://aur.archlinux.org/packages.php?ID=40191 - if [ -n "$_use_current" ]; then - if [[ -s /proc/config.gz ]]; then - echo "Extracting config from /proc/config.gz..." - # modprobe configs - zcat /proc/config.gz > ./.config - else - warning "Your kernel was not compiled with IKPROC!" - warning "You cannot read the current config!" - warning "Aborting!" - exit - fi + ### Optionally load needed modules for the make localmodconfig + # See https://aur.archlinux.org/packages/modprobed-db + if [ -n "$_localmodcfg" ]; then + if [ -e $HOME/.config/modprobed.db ]; then + echo "Running Steven Rostedt's make localmodconfig now" + make ${BUILD_FLAGS[*]} LSMOD=$HOME/.config/modprobed.db localmodconfig + else + echo "No modprobed.db data found" + exit fi + fi + ### Rewrite configuration + echo "Rewrite configuration..." + make ${BUILD_FLAGS[*]} prepare + yes "" | make ${BUILD_FLAGS[*]} config >/dev/null + diff -u ../config .config || : - ### Optionally load needed modules for the make localmodconfig - # See https://aur.archlinux.org/packages/modprobed-db - if [ -n "$_localmodcfg" ]; then - if [ -e $HOME/.config/modprobed.db ]; then - echo "Running Steven Rostedt's make localmodconfig now" - make ${BUILD_FLAGS[*]} LSMOD=$HOME/.config/modprobed.db localmodconfig - else - echo "No modprobed.db data found" - exit - fi - fi - - - - echo "Applying default config..." - make ${BUILD_FLAGS[*]} olddefconfig + ### Prepared version make ${BUILD_FLAGS[*]} -s kernelrelease > version echo "Prepared $pkgbase version $( "${startdir}/config-${pkgver}-${pkgrel}${pkgbase#linux}" + + ### Save configuration for later reuse + # cp -Tf ./.config "${startdir}/config-${pkgver}-${pkgrel}${pkgbase#linux}" } build() { - cd ${_srcname} + cd ${srcdir}/${_srcname} make ${BUILD_FLAGS[*]} -j$(nproc) all + + if [ -n "$_build_zfs" ]; then + cd ${srcdir}/"zfs" + + if [ -n "$_use_llvm_lto" ]; then + ./autogen.sh + sed -i "s|\$(uname -r)|${pkgver}-${pkgsuffix}|g" configure + ./configure KERNEL_LLVM=1 --prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin --libdir=/usr/lib \ + --datadir=/usr/share --includedir=/usr/include --with-udevdir=/lib/udev \ + --libexecdir=/usr/lib/zfs --with-config=kernel \ + --with-linux=${srcdir}/$_srcname + else + ./autogen.sh + sed -i "s|\$(uname -r)|${pkgver}-${pkgsuffix}|g" configure + ./configure --prefix=/usr --sysconfdir=/etc --sbindir=/usr/bin --libdir=/usr/lib \ + --datadir=/usr/share --includedir=/usr/include --with-udevdir=/lib/udev \ + --libexecdir=/usr/lib/zfs --with-config=kernel \ + --with-linux=${srcdir}/$_srcname + fi + make ${BUILD_FLAGS[*]} + fi } _package() { @@ -597,112 +676,126 @@ _package() { 'uksmd: Userspace KSM helper daemon') provides=(VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE KSMBD-MODULE UKSMD-BUILTIN) - cd $_srcname + cd ${srcdir}/$_srcname - local kernver="$(