diff --git a/.SRCINFO b/.SRCINFO index 84621ec..19832c1 100755 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = linux-cachyos pkgdesc = Linux BORE scheduler Kernel by CachyOS with other patches and improvements pkgver = 5.18.3 - pkgrel = 1 + pkgrel = 2 url = https://github.com/CachyOS/linux-cachyos arch = x86_64 arch = x86_64_v3 @@ -56,7 +56,7 @@ pkgbase = linux-cachyos sha256sums = e2266d499cebdd5d195a044048ae4a13755f1d3edb3ece2c3f8837228b4cd521 sha256sums = c2bf57d37db1f93c5f3eeff2e2957f01618f4786613c13755f9ae6989d2b745c sha256sums = 30fd4ca078cb1eee0bc4005700da4d15515a577ccdb96ea7922040aa9086d6b7 - sha256sums = 4b18c6a82b62c50b45568526eeb16ae877c8f52c407a4bb9c6144c07a0d1233a + sha256sums = 6b6c8d1fbefe7aa165fc62aef527665777d474133e2507e1dc9d09b12282f857 sha256sums = f4ed599589fdd44270229492505f5f88e20d79e93b8044f8041a2fc90486bb4e sha256sums = 1d9c83de97d541f5a7ae4612a96c05aea8ce38de5471cc21fd2197dbd6644d00 sha256sums = 344806f8ea9f0f7da883e2c27835153944df7a4b15bb3f97ec6b7b7709682f5d @@ -65,7 +65,7 @@ pkgbase = linux-cachyos sha256sums = 8edf9b9b1a9c26cc4d6dfaf5f14c06b197a04c5bbb8459dd292c033aa2534d19 sha256sums = efe8558b63feb0e76b61d69952c5300ad54c951d9044101be7c01932a54fb4fb sha256sums = cb2494f5ad43fd260e26d771305dade3f9499fa1ffaf53cb9ef8c19b66dab7d7 - sha256sums = be21f15aeb22b2ca1e35e4975590d30736af0483ea7464e3464a60d993e37e22 + sha256sums = ce8bf7807b45a27eed05a5e1de5a0bf6293a3bbc2085bacae70cd1368f368d1f pkgname = linux-cachyos pkgdesc = The Linux BORE scheduler Kernel by CachyOS with other patches and improvements kernel and modules diff --git a/PKGBUILD b/PKGBUILD index 8805cf8..5170648 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -81,11 +81,18 @@ _spf_enable=y ## Enable Linux Random Number Generator _lrng_enable=y -## Apply Kernel automatic Optimization -_use_auto_optimization= +# CPU compiler optimizations - Defaults to prompt at kernel config if left empty +# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2" "zen3" +# Intel CPUs : "mpsc"(P4 & older Netburst based Xeon) "atom" "core2" "nehalem" "westmere" "silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylakex" "cannonlake" "icelake" "goldmont" "goldmontplus" "cascadelake" "cooperlake" "tigerlake" "sapphirerapids" "rocketlake" "alderlake" +# Other options : +# - "native_amd" (use compiler autodetection - Selecting your arch manually in the list above is recommended instead of this option) +# - "native_intel" (use compiler autodetection and will prompt for P6_NOPS - Selecting your arch manually in the list above is recommended instead of this option) +# - "generic" (kernel's default - to share the package between machines with different CPU µarch as long as they are x86-64) +# +# Or use the _use_auto_optimization with _use_auto_optimization=y +_processor_opt= -## Apply Kernel Optimization selecting -_use_optimization_select=y +_use_auto_optimization=y # disable debug to lower the size of the kernel _disable_debug=y @@ -136,7 +143,7 @@ _srcname=linux-${_stable} #_srcname=linux-${_major} arch=(x86_64 x86_64_v3) pkgdesc='Linux BORE scheduler Kernel by CachyOS with other patches and improvements' -pkgrel=1 +pkgrel=2 _kernver=$pkgver-$pkgrel arch=('x86_64' 'x86_64_v3') url="https://github.com/CachyOS/linux-cachyos" @@ -144,78 +151,78 @@ 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") +"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") + "${_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") + 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" + 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-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" + "${_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=( - CC=clang - LD=ld.lld - LLVM=1 - ) + 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 @@ -224,14 +231,14 @@ export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EP prepare() { -cd ${srcdir}/$_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 + # [[ $src = 0001-zfs-2.1.5-staging.patch ]] && continue local src for src in "${source[@]}"; do src="${src%%::*}" @@ -241,385 +248,389 @@ cd ${srcdir}/$_srcname 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..." - 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." + if [ -n "$_processor_opt" ]; then + MARCH=$(echo $_processor_opt|tr '[:lower:]' '[:upper:]'&&echo) + MARCH2=M${MARCH} + scripts/config -k --disable CONFIG_GENERIC_CPU + scripts/config -k --enable CONFIG_${MARCH2} 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 \ - --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 [ "$_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 - 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 [ "$_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 - 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 + if [ -n "$_use_auto_optimization" ]; then + "${srcdir}"/auto-cpu-optimization.sh fi - 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 + ### 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 - echo "No modprobed.db data found" - exit + 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 - fi - ### Rewrite configuration + 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 \ + --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 [ "$_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 + 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 [ "$_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 + 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 + + + ### 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 @@ -630,14 +641,14 @@ cd ${srcdir}/$_srcname echo "Prepared $pkgbase version $( "${startdir}/config-${pkgver}-${pkgrel}${pkgbase#linux}" + echo "Save configuration for later reuse..." + cat .config > "${startdir}/config-${pkgver}-${pkgrel}${pkgbase#linux}" - ### Save configuration for later reuse - # cp -Tf ./.config "${startdir}/config-${pkgver}-${pkgrel}${pkgbase#linux}" + ### Save configuration for later reuse + # cp -Tf ./.config "${startdir}/config-${pkgver}-${pkgrel}${pkgbase#linux}" } @@ -671,30 +682,30 @@ _package() { pkgdesc="The $pkgdesc kernel and modules" depends=('coreutils' 'kmod' 'initramfs') optdepends=('wireless-regdb: to set the correct wireless channels of your country' - 'linux-firmware: firmware images needed for some devices' - 'modprobed-db: Keeps track of EVERY kernel module that has ever been probed - useful for those of us who make localmodconfig' - 'uksmd: Userspace KSM helper daemon') + 'linux-firmware: firmware images needed for some devices' + 'modprobed-db: Keeps track of EVERY kernel module that has ever been probed - useful for those of us who make localmodconfig' + 'uksmd: Userspace KSM helper daemon') provides=(VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE KSMBD-MODULE UKSMD-BUILTIN) cd ${srcdir}/$_srcname - local kernver="$(