linux55-tkg: 5.5.13 - previous index was here: https://github.com/Tk-Glitch/PKGBUILDS
This commit is contained in:
commit
9042fcad49
1063
linux54-tkg/PKGBUILD
Normal file
1063
linux54-tkg/PKGBUILD
Normal file
File diff suppressed because it is too large
Load Diff
38
linux54-tkg/README.md
Normal file
38
linux54-tkg/README.md
Normal file
@ -0,0 +1,38 @@
|
||||
**intel_pstate seems to perform poorly lately. If you are affected, you can add `intel_pstate=passive` to your kernel command line (in GRUB for example) to make use of acpi_cpufreq governors while keeping full support for turbo frequencies.**
|
||||
|
||||
A custom Linux kernel 5.4.y with specific PDS, MuQSS and BMQ CPU schedulers related patchsets selector (stock CFS is also an option) and added tweaks for a nice interactivity/performance balance, aiming for the best gaming experience.
|
||||
|
||||
Various personalization options available and userpatches support (put your own patches in the same dir as the PKGBUILD, with the ".mypatch" extension.
|
||||
|
||||
MuQSS : http://ck-hack.blogspot.com/
|
||||
|
||||
BMQ : http://cchalpha.blogspot.com/
|
||||
|
||||
PDS-mq was originally created by Alfred Chen : http://cchalpha.blogspot.com/
|
||||
While he dropped it with kernel 5.1 in favor of its BMQ evolution/rework, my pretty bad gaming experiences with BMQ up to this point convinced me to keep PDS afloat for as long as it'll make sense/I'll be able to.
|
||||
|
||||
You can find prebuilts on chaotic-aur, but if you need the extra-spice of per-arch optimized prebuilts, you can find PDS and MuQSS variants daily builds here : https://repo.kitsuna.net/ - Thanks to LordKitsuna.
|
||||
|
||||
Comes with a slightly modified Arch config asking for a few core personalization settings at compilation time.
|
||||
If you want to streamline your kernel config for lower footprint and faster compilations : https://wiki.archlinux.org/index.php/Modprobed-db
|
||||
You can enable support for it at the beginning of the PKGBUILD file. Make sure to read everything you need to know about it.
|
||||
|
||||
## Other stuff included:
|
||||
- Per-CPU-arch native optimizations
|
||||
- built-in -O3 optimization and -O3 specific fixes
|
||||
- memory management and swapping tweaks
|
||||
- scheduling tweaks
|
||||
- using prefered raid6 gen function directly
|
||||
- using lz4 algo for zswap by default
|
||||
- built-in Thinkpad hardware functions driver / embedded controller LPC3 functions / SMAPI support
|
||||
- absolute mode for adb trackpads
|
||||
- optional "Zenify" patchset using core blk, mm and scheduler tweaks from Zen
|
||||
- CFS tweaks
|
||||
- using yeah TCP congestion algo by default
|
||||
- using cake network queue management system
|
||||
- using vm.max_map_count=262144 by default
|
||||
- intel E1000 fixes
|
||||
- cherry-picked clear linux patches
|
||||
- **optional** overrides for missing ACS capabilities
|
||||
- **optional** ZFS fpu symbols
|
||||
- **optional** Fsync support (proton)
|
169
linux54-tkg/customization.cfg
Normal file
169
linux54-tkg/customization.cfg
Normal file
@ -0,0 +1,169 @@
|
||||
# linux54-TkG config file
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux52-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux54-tkg.cfg
|
||||
|
||||
# Set to anything else than "true" to limit cleanup operations and keep source and files generated during compilation.
|
||||
# Default is "true".
|
||||
_NUKR="true"
|
||||
|
||||
# Custom compiler root dirs - Leave empty to use system compilers
|
||||
# Example: CUSTOM_GCC_PATH="/home/frog/PKGBUILDS/mostlyportable-gcc/gcc-mostlyportable-9.2.0"
|
||||
CUSTOM_GCC_PATH=""
|
||||
|
||||
# Set to the number corresponding to a predefined profile to use it. Current list of available profiles :
|
||||
# 1 - Custom (meaning nothing will be enforced and you get to configure everything)
|
||||
# 2 - Ryzen desktop (performance)
|
||||
# 3 - Generic Desktop (Performance)
|
||||
_OPTIPROFILE=""
|
||||
|
||||
# Set to true to bypass makepkg.conf and use all available threads for compilation. False will respect your makepkg.conf options.
|
||||
_force_all_threads="false"
|
||||
|
||||
# Set to true to use modprobed db to clean config from unneeded modules. Speeds up compilation considerably. Requires root - https://wiki.archlinux.org/index.php/Modprobed-db
|
||||
# !!!! Make sure to have a well populated db !!!! - Leave empty to be asked about it at build time
|
||||
_modprobeddb="false"
|
||||
|
||||
# Set to "1" to call make menuconfig or "2" to call make nconfig before building the kernel. Set to false to disable and skip the prompt.
|
||||
_menunconfig=""
|
||||
|
||||
# Set to true to generate a kernel config fragment from your changes in menuconfig/nconfig. Set to false to disable and skip the prompt.
|
||||
_diffconfig=""
|
||||
|
||||
# Set to the file name where the generated config fragment should be written to. Only used if _diffconfig is active.
|
||||
_diffconfig_name=""
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64" and Arch hardened is "config_hardened.x86_64".
|
||||
# To get a complete hardened setup, you have to use "cfs" as _cpusched
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# CPU scheduler - Options are "pds", muqss, "bmq", "cfs" or "cfsturbo" (experimental, for power CPUs https://lkml.org/lkml/2019/7/25/296)
|
||||
# "pds" is the recommended option for gaming
|
||||
_cpusched=""
|
||||
|
||||
# CPU sched_yield_type - Choose what sort of yield sched_yield will perform
|
||||
# For PDS and MuQSS: 0: No yield. (Recommended option for gaming on PDS and MuQSS)
|
||||
# 1: Yield only to better priority/deadline tasks. (Default - can be unstable with PDS on some platforms)
|
||||
# 2: Expire timeslice and recalculate deadline. (Usually the slowest option for PDS and MuQSS, not recommended)
|
||||
# For BMQ: 0: No yield.
|
||||
# 1: Deboost and requeue task. (Default)
|
||||
# 2: Set rq skip task.
|
||||
_sched_yield_type=""
|
||||
|
||||
# Round Robin interval is the longest duration two tasks with the same nice level will be delayed for. When CPU time is requested by a task, it receives a time slice equal
|
||||
# to the rr_interval in addition to a virtual deadline. When using yield_type 2, a low value can help offset the disadvantages of rescheduling a process that has yielded.
|
||||
# MuQSS default: 6ms"
|
||||
# PDS default: 4ms"
|
||||
# BMQ default: 2ms"
|
||||
# Set to "1" for 2ms, "2" for 4ms, "3" for 6ms, "4" for 8ms, or "default" to keep the chosen scheduler defaults.
|
||||
_rr_interval=""
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "1" to use CattaRappa mode (enabling full tickless), "2" for tickless idle only, or "0" for periodic ticks.
|
||||
# Full tickless can give higher performances in various cases but, depending on hardware, lower consistency. Just tickless idle can perform better on some platforms (mostly AMD based).
|
||||
_tickless=""
|
||||
|
||||
# Setting this to to "true" can improve latency on PDS (at the cost of throughput) and improve throughput on other schedulers (at the cost of latency) - Can improve VMs performance - Kernel default is "false"
|
||||
_voluntary_preempt=""
|
||||
|
||||
# Set to "true" to enable Device Tree and Open Firmware support. If you don't know about it, you don't need it - Default is "false"
|
||||
_OFenable="false"
|
||||
|
||||
# Set to "true" to use ACS override patch - https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_.28ACS_override_patch.29 - Kernel default is "false"
|
||||
_acs_override=""
|
||||
|
||||
# Set to "true" to add back missing symbol for AES-NI/AVX support on ZFS - https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions.patch - Kernel default is "false"
|
||||
_zfsfix=""
|
||||
|
||||
# Set to "true" to enable support for fsync, an experimental replacement for esync found in Valve Proton 4.11+ - https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305
|
||||
_fsync=""
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="2"
|
||||
|
||||
# CPU compiler optimizations - Defaults to generic optimizations if left empty
|
||||
# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2"
|
||||
# Intel CPUs : "mpsc"(P4 & older Netburst based Xeon) "atom" "core2" "nehalem" "westmere" "silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylakex" "cannonlake" "icelake"
|
||||
# Other options :
|
||||
# - "generic" (to share the package between machines with different CPUs)
|
||||
# - "native" (use compiler autodetection and will prompt for P6_NOPS - Selecting your arch manually in the list above is recommended instead of this option)
|
||||
_processor_opt=""
|
||||
|
||||
# Make IRQ threading compulsory (FORCE_IRQ_THREADING) - MuQSS only - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# SMT (Hyperthreading) aware nice priority and policy support (SMT_NICE) - Kernel default is "true" - You can disable this on non-SMT/HT CPUs for lower overhead
|
||||
_smt_nice=""
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "mc"
|
||||
_runqueue_sharing=""
|
||||
|
||||
# Timer frequency - "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "500"
|
||||
_timer_freq=""
|
||||
|
||||
# Default CPU governor - "performance", "ondemand", "schedutil" or leave empty for default (schedutil on AMD and legacy Intel, intel_pstate on modern Intel)
|
||||
_default_cpu_gov=""
|
||||
|
||||
# Use an aggressive ondemand governor instead of default ondemand to improve performance on low loads/high core count CPUs while keeping some power efficiency from frequency scaling.
|
||||
# It still requires you to either set ondemand as default governor or to select it some way.
|
||||
_aggressive_ondemand="true"
|
||||
|
||||
# On some platforms, an acpi_cpufreq bug affects performance negatively. Set to "true" to disable it as a workaround, but it will use more power.
|
||||
# https://github.com/Tk-Glitch/PKGBUILDS/issues/263
|
||||
_disable_acpi_cpufreq=""
|
||||
|
||||
|
||||
#### SPESHUL OPTION ####
|
||||
|
||||
# If you want to bypass the stock naming scheme and enforce something else (example : "linux") - Useful for some bootloaders requiring manual entry editing on each release.
|
||||
# !!! It will also change pkgname - If you don't explicitely need this, don't use it !!!
|
||||
_custom_pkgbase=""
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# community patches - add patches (separated by a space) of your choice by name from the community-patches dir
|
||||
# example: _community_patches="clear_nack_in_tend_isr.myrevert ffb_regression_fix.mypatch 0008-drm-amd-powerplay-force-the-trim-of-the-mclk-dpm-levels-if-OD-is-enabled.mypatch"
|
||||
_community_patches=""
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
||||
|
||||
|
||||
#### CONFIG FRAGMENTS ####
|
||||
|
||||
# You can use your own kernel config fragments by putting them in the same folder as the PKGBUILD and giving them the .myfrag extension.
|
||||
|
||||
# Also, the config fragments variable below must be set to true for the above to work.
|
||||
_config_fragments="true"
|
||||
|
||||
# Apply all config fragments without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_config_fragments_no_confirm="false"
|
10609
linux54-tkg/linux54-tkg-config/config.x86_64
Normal file
10609
linux54-tkg/linux54-tkg-config/config.x86_64
Normal file
File diff suppressed because it is too large
Load Diff
10527
linux54-tkg/linux54-tkg-config/config_hardened.x86_64
Normal file
10527
linux54-tkg/linux54-tkg-config/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load Diff
55
linux54-tkg/linux54-tkg-config/generic-desktop-profile.cfg
Normal file
55
linux54-tkg/linux54-tkg-config/generic-desktop-profile.cfg
Normal file
@ -0,0 +1,55 @@
|
||||
# linux54-TkG config file
|
||||
# Generic Desktop
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux50-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux54-tkg.cfg
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64".
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "true" to use explicit preemption points to lower latency at the cost of a small throughput loss - Can give a nice perf boost in VMs - Kernel default is "false"
|
||||
_voluntary_preempt="false"
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="2"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "mc"
|
||||
_runqueue_sharing="mc"
|
||||
|
||||
# Timer frequency - "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "750"
|
||||
_timer_freq="500"
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
58
linux54-tkg/linux54-tkg-config/ryzen-desktop-profile.cfg
Normal file
58
linux54-tkg/linux54-tkg-config/ryzen-desktop-profile.cfg
Normal file
@ -0,0 +1,58 @@
|
||||
# linux54-TkG config file
|
||||
# Ryzen Desktop
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux52-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux54-tkg.cfg
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64".
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "true" to use explicit preemption points to lower latency at the cost of a small throughput loss - Can give a nice perf boost in VMs - Kernel default is "false"
|
||||
_voluntary_preempt="false"
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="2"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "mc"
|
||||
_runqueue_sharing="mc-llc"
|
||||
|
||||
# Timer frequency - "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "500"
|
||||
_timer_freq="500"
|
||||
|
||||
# Default CPU governor - "performance", "ondemand" (tweaked), "schedutil" or leave empty for default (schedutil on AMD and legacy Intel, intel_pstate on modern Intel) - Enforcing an option will disable intel_pstate altogether!
|
||||
_default_cpu_gov="performance"
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
@ -0,0 +1,156 @@
|
||||
From 5ec2dd3a095442ec1a21d86042a4994f2ba24e63 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5ec2dd3a095442ec1a21d86042a4994f2ba24e63.1512651251.git.jan.steffens@gmail.com>
|
||||
From: Serge Hallyn <serge.hallyn@canonical.com>
|
||||
Date: Fri, 31 May 2013 19:12:12 +0100
|
||||
Subject: [PATCH] add sysctl to disallow unprivileged CLONE_NEWUSER by default
|
||||
|
||||
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
[bwh: Remove unneeded binary sysctl bits]
|
||||
Signed-off-by: Daniel Micay <danielmicay@gmail.com>
|
||||
---
|
||||
kernel/fork.c | 15 +++++++++++++++
|
||||
kernel/sysctl.c | 12 ++++++++++++
|
||||
kernel/user_namespace.c | 3 +++
|
||||
3 files changed, 30 insertions(+)
|
||||
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index 07cc743698d3668e..4011d68a8ff9305c 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -102,6 +102,11 @@
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/task.h>
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#else
|
||||
+#define unprivileged_userns_clone 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Minimum number of threads to boot the kernel
|
||||
@@ -1555,6 +1560,10 @@ static __latent_entropy struct task_struct *copy_process(
|
||||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
+ if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone)
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ return ERR_PTR(-EPERM);
|
||||
+
|
||||
/*
|
||||
* Thread groups must share signals as well, and detached threads
|
||||
* can only be started up within the thread group.
|
||||
@@ -2348,6 +2357,12 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
|
||||
if (unshare_flags & CLONE_NEWNS)
|
||||
unshare_flags |= CLONE_FS;
|
||||
|
||||
+ if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) {
|
||||
+ err = -EPERM;
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ goto bad_unshare_out;
|
||||
+ }
|
||||
+
|
||||
err = check_unshare_flags(unshare_flags);
|
||||
if (err)
|
||||
goto bad_unshare_out;
|
||||
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
|
||||
index b86520ed3fb60fbf..f7dab3760839f1a1 100644
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -105,6 +105,9 @@ extern int core_uses_pid;
|
||||
extern char core_pattern[];
|
||||
extern unsigned int core_pipe_limit;
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
extern int pid_max;
|
||||
extern int pid_max_min, pid_max_max;
|
||||
extern int percpu_pagelist_fraction;
|
||||
@@ -513,6 +516,15 @@ static struct ctl_table kern_table[] = {
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+ {
|
||||
+ .procname = "unprivileged_userns_clone",
|
||||
+ .data = &unprivileged_userns_clone,
|
||||
+ .maxlen = sizeof(int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = proc_dointvec,
|
||||
+ },
|
||||
+#endif
|
||||
#ifdef CONFIG_PROC_SYSCTL
|
||||
{
|
||||
.procname = "tainted",
|
||||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
|
||||
index c490f1e4313b998a..dd03bd39d7bf194d 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -24,6 +24,9 @@
|
||||
#include <linux/projid.h>
|
||||
#include <linux/fs_struct.h>
|
||||
|
||||
+/* sysctl */
|
||||
+int unprivileged_userns_clone;
|
||||
+
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
From b5202296055dd333db4425120d3f93ef4e6a0573 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Thu, 7 Dec 2017 13:50:48 +0100
|
||||
Subject: ZEN: Add CONFIG for unprivileged_userns_clone
|
||||
|
||||
This way our default behavior continues to match the vanilla kernel.
|
||||
---
|
||||
init/Kconfig | 16 ++++++++++++++++
|
||||
kernel/user_namespace.c | 4 ++++
|
||||
2 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 4592bf7997c0..f3df02990aff 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1004,6 +1004,22 @@ config USER_NS
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
+config USER_NS_UNPRIVILEGED
|
||||
+ bool "Allow unprivileged users to create namespaces"
|
||||
+ default y
|
||||
+ depends on USER_NS
|
||||
+ help
|
||||
+ When disabled, unprivileged users will not be able to create
|
||||
+ new namespaces. Allowing users to create their own namespaces
|
||||
+ has been part of several recent local privilege escalation
|
||||
+ exploits, so if you need user namespaces but are
|
||||
+ paranoid^Wsecurity-conscious you want to disable this.
|
||||
+
|
||||
+ This setting can be overridden at runtime via the
|
||||
+ kernel.unprivileged_userns_clone sysctl.
|
||||
+
|
||||
+ If unsure, say Y.
|
||||
+
|
||||
config PID_NS
|
||||
bool "PID Namespaces"
|
||||
default y
|
||||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
|
||||
index 6b9dbc257e34..107b17f0d528 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -27,7 +27,11 @@
|
||||
#include <linux/sort.h>
|
||||
|
||||
/* sysctl */
|
||||
+#ifdef CONFIG_USER_NS_UNPRIVILEGED
|
||||
+int unprivileged_userns_clone = 1;
|
||||
+#else
|
||||
int unprivileged_userns_clone;
|
||||
+#endif
|
||||
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
354
linux54-tkg/linux54-tkg-patches/0002-clear-patches.patch
Normal file
354
linux54-tkg/linux54-tkg-patches/0002-clear-patches.patch
Normal file
@ -0,0 +1,354 @@
|
||||
From 2ac70785613ef4c6b16414986bb18bd7b60d2a13 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Mon, 14 Mar 2016 11:10:58 -0600
|
||||
Subject: [PATCH] pci pme wakeups
|
||||
|
||||
Reduce wakeups for PME checks, which are a workaround for miswired
|
||||
boards (sadly, too many of them) in laptops.
|
||||
---
|
||||
drivers/pci/pci.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
|
||||
index c25acace7d91..0ddebdad9f5b 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -61,7 +61,7 @@ struct pci_pme_device {
|
||||
struct pci_dev *dev;
|
||||
};
|
||||
|
||||
-#define PME_TIMEOUT 1000 /* How long between PME checks */
|
||||
+#define PME_TIMEOUT 4000 /* How long between PME checks */
|
||||
|
||||
static void pci_dev_d3_sleep(struct pci_dev *dev)
|
||||
{
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From 7e7e36c67aa71d6a1ec5676d99d37c1fea389ceb Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sat, 19 Mar 2016 21:32:19 -0400
|
||||
Subject: [PATCH] intel_idle: tweak cpuidle cstates
|
||||
|
||||
Increase target_residency in cpuidle cstate
|
||||
|
||||
Tune intel_idle to be a bit less agressive;
|
||||
Clear linux is cleaner in hygiene (wakupes) than the average linux,
|
||||
so we can afford changing these in a way that increases
|
||||
performance while keeping power efficiency
|
||||
---
|
||||
drivers/idle/intel_idle.c | 44 +++++++++++++++++++--------------------
|
||||
1 file changed, 22 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
|
||||
index 8b5d85c91e9d..5e2d813a048d 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -466,7 +466,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -474,7 +474,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 33,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 900,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -482,7 +482,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 133,
|
||||
- .target_residency = 400,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -490,7 +490,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x32",
|
||||
.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 166,
|
||||
- .target_residency = 500,
|
||||
+ .target_residency = 1500,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -498,7 +498,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 300,
|
||||
- .target_residency = 900,
|
||||
+ .target_residency = 2000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -506,7 +506,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 600,
|
||||
- .target_residency = 1800,
|
||||
+ .target_residency = 5000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -514,7 +514,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 2600,
|
||||
- .target_residency = 7700,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -534,7 +534,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -542,7 +542,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 40,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -550,7 +550,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 133,
|
||||
- .target_residency = 400,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -558,7 +558,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x32",
|
||||
.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 166,
|
||||
- .target_residency = 500,
|
||||
+ .target_residency = 2000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -566,7 +566,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 300,
|
||||
- .target_residency = 900,
|
||||
+ .target_residency = 4000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -574,7 +574,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 600,
|
||||
- .target_residency = 1800,
|
||||
+ .target_residency = 7000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -582,7 +582,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 2600,
|
||||
- .target_residency = 7700,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -603,7 +603,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -611,7 +611,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 70,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -619,7 +619,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 85,
|
||||
- .target_residency = 200,
|
||||
+ .target_residency = 600,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -627,7 +627,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x33",
|
||||
.flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 124,
|
||||
- .target_residency = 800,
|
||||
+ .target_residency = 3000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -635,7 +635,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 200,
|
||||
- .target_residency = 800,
|
||||
+ .target_residency = 3200,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -643,7 +643,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 480,
|
||||
- .target_residency = 5000,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -651,7 +651,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 890,
|
||||
- .target_residency = 5000,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -672,7 +672,7 @@ static struct cpuidle_state skx_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 300,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From b8211d4f79dd88dfc2d4bd52be46103ea0b70e3e Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Fri, 6 Jan 2017 15:34:09 +0000
|
||||
Subject: [PATCH] ipv4/tcp: allow the memory tuning for tcp to go a little
|
||||
bigger than default
|
||||
|
||||
---
|
||||
net/ipv4/tcp.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
|
||||
index cf3c5095c10e..b30d51837b2d 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -3897,8 +3897,8 @@ void __init tcp_init(void)
|
||||
tcp_init_mem();
|
||||
/* Set per-socket limits to no more than 1/128 the pressure threshold */
|
||||
limit = nr_free_buffer_pages() << (PAGE_SHIFT - 7);
|
||||
- max_wshare = min(4UL*1024*1024, limit);
|
||||
- max_rshare = min(6UL*1024*1024, limit);
|
||||
+ max_wshare = min(16UL*1024*1024, limit);
|
||||
+ max_rshare = min(16UL*1024*1024, limit);
|
||||
|
||||
init_net.ipv4.sysctl_tcp_wmem[0] = SK_MEM_QUANTUM;
|
||||
init_net.ipv4.sysctl_tcp_wmem[1] = 16*1024;
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From 050223869257b87e22636158a80da38d877248ed Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sun, 18 Feb 2018 23:35:41 +0000
|
||||
Subject: [PATCH] locking: rwsem: spin faster
|
||||
|
||||
tweak rwsem owner spinning a bit
|
||||
---
|
||||
kernel/locking/rwsem.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
|
||||
index eef04551eae7..1ec5ab4c8ff7 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -720,6 +720,7 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
struct task_struct *new, *owner;
|
||||
unsigned long flags, new_flags;
|
||||
enum owner_state state;
|
||||
+ int i = 0;
|
||||
|
||||
owner = rwsem_owner_flags(sem, &flags);
|
||||
state = rwsem_owner_state(owner, flags, nonspinnable);
|
||||
@@ -753,7 +754,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
From b836ea320114643d4354b43acb6ec8bb06ada487 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Thu, 2 Jun 2016 23:36:32 -0500
|
||||
Subject: [PATCH] drivers: Initialize ata before graphics
|
||||
|
||||
ATA init is the long pole in the boot process, and its asynchronous.
|
||||
move the graphics init after it so that ata and graphics initialize
|
||||
in parallel
|
||||
---
|
||||
drivers/Makefile | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/Makefile b/drivers/Makefile
|
||||
index aaef17cc6512..d08f3a394929 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -58,15 +58,8 @@ obj-y += char/
|
||||
# iommu/ comes before gpu as gpu are using iommu controllers
|
||||
obj-y += iommu/
|
||||
|
||||
-# gpu/ comes after char for AGP vs DRM startup and after iommu
|
||||
-obj-y += gpu/
|
||||
-
|
||||
obj-$(CONFIG_CONNECTOR) += connector/
|
||||
|
||||
-# i810fb and intelfb depend on char/agp/
|
||||
-obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
-obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
|
||||
-
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-$(CONFIG_NVM) += lightnvm/
|
||||
obj-y += base/ block/ misc/ mfd/ nfc/
|
||||
@@ -79,6 +72,14 @@ obj-$(CONFIG_IDE) += ide/
|
||||
obj-y += scsi/
|
||||
obj-y += nvme/
|
||||
obj-$(CONFIG_ATA) += ata/
|
||||
+
|
||||
+# gpu/ comes after char for AGP vs DRM startup and after iommu
|
||||
+obj-y += gpu/
|
||||
+
|
||||
+# i810fb and intelfb depend on char/agp/
|
||||
+obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
+obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
|
||||
+
|
||||
obj-$(CONFIG_TARGET_CORE) += target/
|
||||
obj-$(CONFIG_MTD) += mtd/
|
||||
obj-$(CONFIG_SPI) += spi/
|
5199
linux54-tkg/linux54-tkg-patches/0003-glitched-base.patch
Normal file
5199
linux54-tkg/linux54-tkg-patches/0003-glitched-base.patch
Normal file
File diff suppressed because it is too large
Load Diff
72
linux54-tkg/linux54-tkg-patches/0003-glitched-cfs.patch
Normal file
72
linux54-tkg/linux54-tkg-patches/0003-glitched-cfs.patch
Normal file
@ -0,0 +1,72 @@
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
17679
linux54-tkg/linux54-tkg-patches/0004-5.4-ck1.patch
Normal file
17679
linux54-tkg/linux54-tkg-patches/0004-5.4-ck1.patch
Normal file
File diff suppressed because it is too large
Load Diff
78
linux54-tkg/linux54-tkg-patches/0004-glitched-muqss.patch
Normal file
78
linux54-tkg/linux54-tkg-patches/0004-glitched-muqss.patch
Normal file
@ -0,0 +1,78 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - MuQSS
|
||||
|
||||
diff --git a/kernel/sched/MuQSS.c b/kernel/sched/MuQSS.c
|
||||
index 84a1d08d68551..57c3036a68952 100644
|
||||
--- a/kernel/sched/MuQSS.c
|
||||
+++ b/kernel/sched/MuQSS.c
|
||||
@@ -163,7 +167,11 @@ int sched_interactive __read_mostly = 1;
|
||||
* are allowed to run five seconds as real time tasks. This is the total over
|
||||
* all online cpus.
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int sched_iso_cpu __read_mostly = 25;
|
||||
+#else
|
||||
int sched_iso_cpu __read_mostly = 70;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* sched_yield_type - Choose what sort of yield sched_yield will perform.
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -5,7 +5,7 @@
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
default HZ_100 if SCHED_MUQSS
|
||||
- default HZ_250_NODEF if !SCHED_MUQSS
|
||||
+ default HZ_500_NODEF if !SCHED_MUQSS
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -50,6 +50,20 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500_NODEF
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
+ config HZ_750_NODEF
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000_NODEF
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -63,6 +70,8 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250_NODEF
|
||||
default 300 if HZ_300_NODEF
|
||||
+ default 500 if HZ_500_NODEF
|
||||
+ default 750 if HZ_750_NODEF
|
||||
default 1000 if HZ_1000_NODEF
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index d4d36c61940b..4a9dfe471f1f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -15,7 +15,6 @@ NAME = Kleptomaniac Octopus
|
||||
|
||||
CKVERSION = -ck1
|
||||
CKNAME = MuQSS Powered
|
||||
-EXTRAVERSION := $(EXTRAVERSION)$(CKVERSION)
|
||||
|
||||
# We are using a recursive build, so we need to do a little thinking
|
||||
# to get the ordering right.
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (80)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (45)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (45)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (55)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (63)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
213
linux54-tkg/linux54-tkg-patches/0005-glitched-pds.patch
Normal file
213
linux54-tkg/linux54-tkg-patches/0005-glitched-pds.patch
Normal file
@ -0,0 +1,213 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - PDS
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 9270a4370d54..30d01e647417 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -159,7 +159,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 100. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
/*
|
||||
* The total number of pages which are beyond the high watermark within all
|
||||
* zones.
|
||||
|
||||
diff --git a/kernel/sched/pds.c b/kernel/sched/pds.c
|
||||
index c2d831b242b6d18a47e0d87a9f5433a7748b52ff..5bc8d7a8f920c21feab69b2706a3328dc8d39f9a 100644
|
||||
--- a/kernel/sched/pds.c
|
||||
+++ b/kernel/sched/pds.c
|
||||
@@ -409,12 +409,11 @@ struct rq *task_rq_lock(struct task_struct *p, struct rq_flags *rf)
|
||||
* [L] ->on_rq
|
||||
* RELEASE (rq->lock)
|
||||
*
|
||||
- * If we observe the old CPU in task_rq_lock(), the acquire of
|
||||
+ * If we observe the old CPU in task_rq_lock, the acquire of
|
||||
* the old rq->lock will fully serialize against the stores.
|
||||
*
|
||||
- * If we observe the new CPU in task_rq_lock(), the address
|
||||
- * dependency headed by '[L] rq = task_rq()' and the acquire
|
||||
- * will pair with the WMB to ensure we then also see migrating.
|
||||
+ * If we observe the new CPU in task_rq_lock, the acquire will
|
||||
+ * pair with the WMB to ensure we must then also see migrating.
|
||||
*/
|
||||
if (likely(rq == task_rq(p) && !task_on_rq_migrating(p))) {
|
||||
return rq;
|
||||
@@ -952,9 +953,9 @@ static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu)
|
||||
smp_wmb();
|
||||
|
||||
#ifdef CONFIG_THREAD_INFO_IN_TASK
|
||||
- WRITE_ONCE(p->cpu, cpu);
|
||||
+ p->cpu = cpu;
|
||||
#else
|
||||
- WRITE_ONCE(task_thread_info(p)->cpu, cpu);
|
||||
+ task_thread_info(p)->cpu = cpu;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
@@ -1035,7 +1036,7 @@ static void detach_task(struct rq *rq, struct task_struct *p, int target_cpu)
|
||||
{
|
||||
lockdep_assert_held(&rq->lock);
|
||||
|
||||
- WRITE_ONCE(p->on_rq ,TASK_ON_RQ_MIGRATING);
|
||||
+ p->on_rq = TASK_ON_RQ_MIGRATING;
|
||||
if (task_contributes_to_load(p))
|
||||
rq->nr_uninterruptible++;
|
||||
dequeue_task(p, rq, 0);
|
||||
diff --git a/kernel/sched/pds_sched.h b/kernel/sched/pds_sched.h
|
||||
index 20dcf19ea057627d91be07b4ec20f0827c30084c..24fa90ca63d144cc4f45d82d88407ea70d2d2edf 100644
|
||||
--- a/kernel/sched/pds_sched.h
|
||||
+++ b/kernel/sched/pds_sched.h
|
||||
@@ -56,7 +56,7 @@ static inline int task_on_rq_queued(struct task_struct *p)
|
||||
|
||||
static inline int task_on_rq_migrating(struct task_struct *p)
|
||||
{
|
||||
- return READ_ONCE(p->on_rq) == TASK_ON_RQ_MIGRATING;
|
||||
+ return p->on_rq == TASK_ON_RQ_MIGRATING;
|
||||
}
|
||||
|
||||
enum {
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 11fd9b502d06..e9bc34d3019b 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -948,7 +948,6 @@ config CGROUP_DEVICE
|
||||
|
||||
config CGROUP_CPUACCT
|
||||
bool "Simple CPU accounting controller"
|
||||
- depends on !SCHED_PDS
|
||||
help
|
||||
Provides a simple controller for monitoring the
|
||||
total CPU consumed by the tasks in a cgroup.
|
||||
diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile
|
||||
index b23231bae996..cab4e5c5b38e 100644
|
||||
--- a/kernel/sched/Makefile
|
||||
+++ b/kernel/sched/Makefile
|
||||
@@ -24,13 +24,13 @@ obj-y += fair.o rt.o deadline.o
|
||||
obj-$(CONFIG_SMP) += cpudeadline.o topology.o stop_task.o
|
||||
obj-$(CONFIG_SCHED_AUTOGROUP) += autogroup.o
|
||||
obj-$(CONFIG_SCHED_DEBUG) += debug.o
|
||||
-obj-$(CONFIG_CGROUP_CPUACCT) += cpuacct.o
|
||||
endif
|
||||
obj-y += loadavg.o clock.o cputime.o
|
||||
obj-y += idle.o
|
||||
obj-y += wait.o wait_bit.o swait.o completion.o
|
||||
obj-$(CONFIG_SMP) += cpupri.o pelt.o
|
||||
obj-$(CONFIG_SCHEDSTATS) += stats.o
|
||||
+obj-$(CONFIG_CGROUP_CPUACCT) += cpuacct.o
|
||||
obj-$(CONFIG_CPU_FREQ) += cpufreq.o
|
||||
obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o
|
||||
obj-$(CONFIG_MEMBARRIER) += membarrier.o
|
||||
|
||||
diff --git a/kernel/sched/pds.c b/kernel/sched/pds.c
|
||||
index 9281ad164..f09a609cf 100644
|
||||
--- a/kernel/sched/pds.c
|
||||
+++ b/kernel/sched/pds.c
|
||||
@@ -81,6 +81,18 @@ enum {
|
||||
NR_CPU_AFFINITY_CHK_LEVEL
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * This allows printing both to /proc/sched_debug and
|
||||
+ * to the console
|
||||
+ */
|
||||
+#define SEQ_printf(m, x...) \
|
||||
+ do { \
|
||||
+ if (m) \
|
||||
+ seq_printf(m, x); \
|
||||
+ else \
|
||||
+ pr_cont(x); \
|
||||
+ } while (0)
|
||||
+
|
||||
static inline void print_scheduler_version(void)
|
||||
{
|
||||
printk(KERN_INFO "pds: PDS-mq CPU Scheduler 0.99o by Alfred Chen.\n");
|
||||
@@ -6353,7 +6365,10 @@ void ia64_set_curr_task(int cpu, struct task_struct *p)
|
||||
#ifdef CONFIG_SCHED_DEBUG
|
||||
void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
|
||||
struct seq_file *m)
|
||||
-{}
|
||||
+{
|
||||
+ SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns),
|
||||
+ get_nr_threads(p));
|
||||
+}
|
||||
|
||||
void proc_sched_set_task(struct task_struct *p)
|
||||
{}
|
8387
linux54-tkg/linux54-tkg-patches/0005-v5.4_undead-pds099o.patch
Normal file
8387
linux54-tkg/linux54-tkg-patches/0005-v5.4_undead-pds099o.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,192 @@
|
||||
From cdeab384f48dd9c88e2dff2e9ad8d57dca1a1b1c Mon Sep 17 00:00:00 2001
|
||||
From: Mark Weiman <mark.weiman@markzz.com>
|
||||
Date: Sun, 12 Aug 2018 11:36:21 -0400
|
||||
Subject: [PATCH] pci: Enable overrides for missing ACS capabilities
|
||||
|
||||
This an updated version of Alex Williamson's patch from:
|
||||
https://lkml.org/lkml/2013/5/30/513
|
||||
|
||||
Original commit message follows:
|
||||
|
||||
PCIe ACS (Access Control Services) is the PCIe 2.0+ feature that
|
||||
allows us to control whether transactions are allowed to be redirected
|
||||
in various subnodes of a PCIe topology. For instance, if two
|
||||
endpoints are below a root port or downsteam switch port, the
|
||||
downstream port may optionally redirect transactions between the
|
||||
devices, bypassing upstream devices. The same can happen internally
|
||||
on multifunction devices. The transaction may never be visible to the
|
||||
upstream devices.
|
||||
|
||||
One upstream device that we particularly care about is the IOMMU. If
|
||||
a redirection occurs in the topology below the IOMMU, then the IOMMU
|
||||
cannot provide isolation between devices. This is why the PCIe spec
|
||||
encourages topologies to include ACS support. Without it, we have to
|
||||
assume peer-to-peer DMA within a hierarchy can bypass IOMMU isolation.
|
||||
|
||||
Unfortunately, far too many topologies do not support ACS to make this
|
||||
a steadfast requirement. Even the latest chipsets from Intel are only
|
||||
sporadically supporting ACS. We have trouble getting interconnect
|
||||
vendors to include the PCIe spec required PCIe capability, let alone
|
||||
suggested features.
|
||||
|
||||
Therefore, we need to add some flexibility. The pcie_acs_override=
|
||||
boot option lets users opt-in specific devices or sets of devices to
|
||||
assume ACS support. The "downstream" option assumes full ACS support
|
||||
on root ports and downstream switch ports. The "multifunction"
|
||||
option assumes the subset of ACS features available on multifunction
|
||||
endpoints and upstream switch ports are supported. The "id:nnnn:nnnn"
|
||||
option enables ACS support on devices matching the provided vendor
|
||||
and device IDs, allowing more strategic ACS overrides. These options
|
||||
may be combined in any order. A maximum of 16 id specific overrides
|
||||
are available. It's suggested to use the most limited set of options
|
||||
necessary to avoid completely disabling ACS across the topology.
|
||||
Note to hardware vendors, we have facilities to permanently quirk
|
||||
specific devices which enforce isolation but not provide an ACS
|
||||
capability. Please contact me to have your devices added and save
|
||||
your customers the hassle of this boot option.
|
||||
|
||||
Signed-off-by: Mark Weiman <mark.weiman@markzz.com>
|
||||
---
|
||||
.../admin-guide/kernel-parameters.txt | 9 ++
|
||||
drivers/pci/quirks.c | 101 ++++++++++++++++++
|
||||
2 files changed, 110 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index aefd358a5ca3..173b3596fd9e 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3190,6 +3190,15 @@
|
||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||
enabled, this kernel boot option can be used to
|
||||
disable the use of MSI interrupts system-wide.
|
||||
+ pcie_acs_override =
|
||||
+ [PCIE] Override missing PCIe ACS support for:
|
||||
+ downstream
|
||||
+ All downstream ports - full ACS capabilities
|
||||
+ multifunction
|
||||
+ All multifunction devices - multifunction ACS subset
|
||||
+ id:nnnn:nnnn
|
||||
+ Specific device - full ACS capabilities
|
||||
+ Specified as vid:did (vendor/device ID) in hex
|
||||
noioapicquirk [APIC] Disable all boot interrupt quirks.
|
||||
Safety option to keep boot IRQs enabled. This
|
||||
should never be necessary.
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 4700d24e5d55..8f7a3d7fd9c1 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -3372,6 +3372,106 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
|
||||
dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
|
||||
}
|
||||
|
||||
+static bool acs_on_downstream;
|
||||
+static bool acs_on_multifunction;
|
||||
+
|
||||
+#define NUM_ACS_IDS 16
|
||||
+struct acs_on_id {
|
||||
+ unsigned short vendor;
|
||||
+ unsigned short device;
|
||||
+};
|
||||
+static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
|
||||
+static u8 max_acs_id;
|
||||
+
|
||||
+static __init int pcie_acs_override_setup(char *p)
|
||||
+{
|
||||
+ if (!p)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ while (*p) {
|
||||
+ if (!strncmp(p, "downstream", 10))
|
||||
+ acs_on_downstream = true;
|
||||
+ if (!strncmp(p, "multifunction", 13))
|
||||
+ acs_on_multifunction = true;
|
||||
+ if (!strncmp(p, "id:", 3)) {
|
||||
+ char opt[5];
|
||||
+ int ret;
|
||||
+ long val;
|
||||
+
|
||||
+ if (max_acs_id >= NUM_ACS_IDS - 1) {
|
||||
+ pr_warn("Out of PCIe ACS override slots (%d)\n",
|
||||
+ NUM_ACS_IDS);
|
||||
+ goto next;
|
||||
+ }
|
||||
+
|
||||
+ p += 3;
|
||||
+ snprintf(opt, 5, "%s", p);
|
||||
+ ret = kstrtol(opt, 16, &val);
|
||||
+ if (ret) {
|
||||
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
|
||||
+ goto next;
|
||||
+ }
|
||||
+ acs_on_ids[max_acs_id].vendor = val;
|
||||
+
|
||||
+ p += strcspn(p, ":");
|
||||
+ if (*p != ':') {
|
||||
+ pr_warn("PCIe ACS invalid ID\n");
|
||||
+ goto next;
|
||||
+ }
|
||||
+
|
||||
+ p++;
|
||||
+ snprintf(opt, 5, "%s", p);
|
||||
+ ret = kstrtol(opt, 16, &val);
|
||||
+ if (ret) {
|
||||
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
|
||||
+ goto next;
|
||||
+ }
|
||||
+ acs_on_ids[max_acs_id].device = val;
|
||||
+ max_acs_id++;
|
||||
+ }
|
||||
+next:
|
||||
+ p += strcspn(p, ",");
|
||||
+ if (*p == ',')
|
||||
+ p++;
|
||||
+ }
|
||||
+
|
||||
+ if (acs_on_downstream || acs_on_multifunction || max_acs_id)
|
||||
+ pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+early_param("pcie_acs_override", pcie_acs_override_setup);
|
||||
+
|
||||
+static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ /* Never override ACS for legacy devices or devices with ACS caps */
|
||||
+ if (!pci_is_pcie(dev) ||
|
||||
+ pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
|
||||
+ return -ENOTTY;
|
||||
+
|
||||
+ for (i = 0; i < max_acs_id; i++)
|
||||
+ if (acs_on_ids[i].vendor == dev->vendor &&
|
||||
+ acs_on_ids[i].device == dev->device)
|
||||
+ return 1;
|
||||
+
|
||||
+ switch (pci_pcie_type(dev)) {
|
||||
+ case PCI_EXP_TYPE_DOWNSTREAM:
|
||||
+ case PCI_EXP_TYPE_ROOT_PORT:
|
||||
+ if (acs_on_downstream)
|
||||
+ return 1;
|
||||
+ break;
|
||||
+ case PCI_EXP_TYPE_ENDPOINT:
|
||||
+ case PCI_EXP_TYPE_UPSTREAM:
|
||||
+ case PCI_EXP_TYPE_LEG_END:
|
||||
+ case PCI_EXP_TYPE_RC_END:
|
||||
+ if (acs_on_multifunction && dev->multifunction)
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return -ENOTTY;
|
||||
+}
|
||||
/*
|
||||
* Some Atheros AR9xxx and QCA988x chips do not behave after a bus reset.
|
||||
* The device will throw a Link Down error on AER-capable systems and
|
||||
@@ -4513,6 +4613,7 @@ static const struct pci_dev_acs_enabled {
|
||||
{ PCI_VENDOR_ID_BROADCOM, 0xD714, pci_quirk_brcm_acs },
|
||||
/* Amazon Annapurna Labs */
|
||||
{ PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS, 0x0031, pci_quirk_al_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
419
linux54-tkg/linux54-tkg-patches/0007-v5.4-fsync.patch
Normal file
419
linux54-tkg/linux54-tkg-patches/0007-v5.4-fsync.patch
Normal file
@ -0,0 +1,419 @@
|
||||
split the futex key setup from the queue locking and key reading. This
|
||||
is useful to support the setup of multiple keys at the same time, like
|
||||
what is done in futex_requeue() and what will be done for the
|
||||
FUTEX_WAIT_MULTIPLE command.
|
||||
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
---
|
||||
kernel/futex.c | 71 +++++++++++++++++++++++++++++---------------------
|
||||
1 file changed, 42 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 6d50728ef2e7..91f3db335c57 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -2631,6 +2631,39 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
__set_current_state(TASK_RUNNING);
|
||||
}
|
||||
|
||||
+static int __futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
+ struct futex_q *q, struct futex_hash_bucket **hb)
|
||||
+{
|
||||
+
|
||||
+ u32 uval;
|
||||
+ int ret;
|
||||
+
|
||||
+retry_private:
|
||||
+ *hb = queue_lock(q);
|
||||
+
|
||||
+ ret = get_futex_value_locked(&uval, uaddr);
|
||||
+
|
||||
+ if (ret) {
|
||||
+ queue_unlock(*hb);
|
||||
+
|
||||
+ ret = get_user(uval, uaddr);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (!(flags & FLAGS_SHARED))
|
||||
+ goto retry_private;
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (uval != val) {
|
||||
+ queue_unlock(*hb);
|
||||
+ ret = -EWOULDBLOCK;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* futex_wait_setup() - Prepare to wait on a futex
|
||||
* @uaddr: the futex userspace address
|
||||
@@ -2651,7 +2684,6 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
struct futex_q *q, struct futex_hash_bucket **hb)
|
||||
{
|
||||
- u32 uval;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@@ -2672,38 +2704,19 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
* absorb a wakeup if *uaddr does not match the desired values
|
||||
* while the syscall executes.
|
||||
*/
|
||||
-retry:
|
||||
- ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, FUTEX_READ);
|
||||
- if (unlikely(ret != 0))
|
||||
- return ret;
|
||||
-
|
||||
-retry_private:
|
||||
- *hb = queue_lock(q);
|
||||
+ do {
|
||||
+ ret = get_futex_key(uaddr, flags & FLAGS_SHARED,
|
||||
+ &q->key, FUTEX_READ);
|
||||
+ if (unlikely(ret != 0))
|
||||
+ return ret;
|
||||
|
||||
- ret = get_futex_value_locked(&uval, uaddr);
|
||||
+ ret = __futex_wait_setup(uaddr, val, flags, q, hb);
|
||||
|
||||
- if (ret) {
|
||||
- queue_unlock(*hb);
|
||||
-
|
||||
- ret = get_user(uval, uaddr);
|
||||
+ /* Drop key reference if retry or error. */
|
||||
if (ret)
|
||||
- goto out;
|
||||
+ put_futex_key(&q->key);
|
||||
+ } while (ret > 0);
|
||||
|
||||
- if (!(flags & FLAGS_SHARED))
|
||||
- goto retry_private;
|
||||
-
|
||||
- put_futex_key(&q->key);
|
||||
- goto retry;
|
||||
- }
|
||||
-
|
||||
- if (uval != val) {
|
||||
- queue_unlock(*hb);
|
||||
- ret = -EWOULDBLOCK;
|
||||
- }
|
||||
-
|
||||
-out:
|
||||
- if (ret)
|
||||
- put_futex_key(&q->key);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
||||
This is a new futex operation, called FUTEX_WAIT_MULTIPLE, which allows
|
||||
a thread to wait on several futexes at the same time, and be awoken by
|
||||
any of them. In a sense, it implements one of the features that was
|
||||
supported by pooling on the old FUTEX_FD interface.
|
||||
|
||||
My use case for this operation lies in Wine, where we want to implement
|
||||
a similar interface available in Windows, used mainly for event
|
||||
handling. The wine folks have an implementation that uses eventfd, but
|
||||
it suffers from FD exhaustion (I was told they have application that go
|
||||
to the order of multi-milion FDs), and higher CPU utilization.
|
||||
|
||||
In time, we are also proposing modifications to glibc and libpthread to
|
||||
make this feature available for Linux native multithreaded applications
|
||||
using libpthread, which can benefit from the behavior of waiting on any
|
||||
of a group of futexes.
|
||||
|
||||
In particular, using futexes in our Wine use case reduced the CPU
|
||||
utilization by 4% for the game Beat Saber and by 1.5% for the game
|
||||
Shadow of Tomb Raider, both running over Proton (a wine based solution
|
||||
for Windows emulation), when compared to the eventfd interface. This
|
||||
implementation also doesn't rely of file descriptors, so it doesn't risk
|
||||
overflowing the resource.
|
||||
|
||||
Technically, the existing FUTEX_WAIT implementation can be easily
|
||||
reworked by using do_futex_wait_multiple with a count of one, and I
|
||||
have a patch showing how it works. I'm not proposing it, since
|
||||
futex is such a tricky code, that I'd be more confortable to have
|
||||
FUTEX_WAIT_MULTIPLE running upstream for a couple development cycles,
|
||||
before considering modifying FUTEX_WAIT.
|
||||
|
||||
From an implementation perspective, the futex list is passed as an array
|
||||
of (pointer,value,bitset) to the kernel, which will enqueue all of them
|
||||
and sleep if none was already triggered. It returns a hint of which
|
||||
futex caused the wake up event to userspace, but the hint doesn't
|
||||
guarantee that is the only futex triggered. Before calling the syscall
|
||||
again, userspace should traverse the list, trying to re-acquire any of
|
||||
the other futexes, to prevent an immediate -EWOULDBLOCK return code from
|
||||
the kernel.
|
||||
|
||||
This was tested using three mechanisms:
|
||||
|
||||
1) By reimplementing FUTEX_WAIT in terms of FUTEX_WAIT_MULTIPLE and
|
||||
running the unmodified tools/testing/selftests/futex and a full linux
|
||||
distro on top of this kernel.
|
||||
|
||||
2) By an example code that exercises the FUTEX_WAIT_MULTIPLE path on a
|
||||
multi-threaded, event-handling setup.
|
||||
|
||||
3) By running the Wine fsync implementation and executing multi-threaded
|
||||
applications, in particular the modern games mentioned above, on top of
|
||||
this implementation.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Signed-off-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Signed-off-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
---
|
||||
include/uapi/linux/futex.h | 7 ++
|
||||
kernel/futex.c | 161 ++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 164 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index a89eb0accd5e..2401c4cf5095 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -21,6 +21,7 @@
|
||||
#define FUTEX_WAKE_BITSET 10
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -150,4 +151,10 @@ struct robust_list_head {
|
||||
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
|
||||
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
|
||||
|
||||
+struct futex_wait_block {
|
||||
+ __u32 __user *uaddr;
|
||||
+ __u32 val;
|
||||
+ __u32 bitset;
|
||||
+};
|
||||
+
|
||||
#endif /* _UAPI_LINUX_FUTEX_H */
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 91f3db335c57..2623e8f152cd 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -183,6 +183,7 @@ static int __read_mostly futex_cmpxchg_enabled;
|
||||
#endif
|
||||
#define FLAGS_CLOCKRT 0x02
|
||||
#define FLAGS_HAS_TIMEOUT 0x04
|
||||
+#define FLAGS_WAKE_MULTIPLE 0x08
|
||||
|
||||
/*
|
||||
* Priority Inheritance state:
|
||||
@@ -2720,6 +2721,150 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int do_futex_wait_multiple(struct futex_wait_block *wb,
|
||||
+ u32 count, unsigned int flags,
|
||||
+ ktime_t *abs_time)
|
||||
+{
|
||||
+
|
||||
+ struct hrtimer_sleeper timeout, *to;
|
||||
+ struct futex_hash_bucket *hb;
|
||||
+ struct futex_q *qs = NULL;
|
||||
+ int ret;
|
||||
+ int i;
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(struct futex_q), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, flags,
|
||||
+ current->timer_slack_ns);
|
||||
+ retry:
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ qs[i].key = FUTEX_KEY_INIT;
|
||||
+ qs[i].bitset = wb[i].bitset;
|
||||
+
|
||||
+ ret = get_futex_key(wb[i].uaddr, flags & FLAGS_SHARED,
|
||||
+ &qs[i].key, FUTEX_READ);
|
||||
+ if (unlikely(ret != 0)) {
|
||||
+ for (--i; i >= 0; i--)
|
||||
+ put_futex_key(&qs[i].key);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ set_current_state(TASK_INTERRUPTIBLE);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ ret = __futex_wait_setup(wb[i].uaddr, wb[i].val,
|
||||
+ flags, &qs[i], &hb);
|
||||
+ if (ret) {
|
||||
+ /* Drop the failed key directly. keys 0..(i-1)
|
||||
+ * will be put by unqueue_me.
|
||||
+ */
|
||||
+ put_futex_key(&qs[i].key);
|
||||
+
|
||||
+ /* Undo the partial work we did. */
|
||||
+ for (--i; i >= 0; i--)
|
||||
+ unqueue_me(&qs[i]);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+ if (ret > 0)
|
||||
+ goto retry;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* We can't hold to the bucket lock when dealing with
|
||||
+ * the next futex. Queue ourselves now so we can unlock
|
||||
+ * it before moving on.
|
||||
+ */
|
||||
+ queue_me(&qs[i], hb);
|
||||
+ }
|
||||
+
|
||||
+ if (to)
|
||||
+ hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
|
||||
+
|
||||
+ /* There is no easy to way to check if we are wake already on
|
||||
+ * multiple futexes without waking through each one of them. So
|
||||
+ * just sleep and let the scheduler handle it.
|
||||
+ */
|
||||
+ if (!to || to->task)
|
||||
+ freezable_schedule();
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ /* If we were woken (and unqueued), we succeeded. */
|
||||
+ for (i = 0; i < count; i++)
|
||||
+ if (!unqueue_me(&qs[i]))
|
||||
+ ret = i;
|
||||
+
|
||||
+ /* Succeed wakeup */
|
||||
+ if (ret >= 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ /* Woken by triggered timeout */
|
||||
+ if (to && !to->task)
|
||||
+ goto out;
|
||||
+
|
||||
+ /*
|
||||
+ * We expect signal_pending(current), but we might be the
|
||||
+ * victim of a spurious wakeup as well.
|
||||
+ */
|
||||
+ if (!signal_pending(current))
|
||||
+ goto retry;
|
||||
+
|
||||
+ ret = -ERESTARTSYS;
|
||||
+ if (!abs_time)
|
||||
+ goto out;
|
||||
+
|
||||
+ ret = -ERESTART_RESTARTBLOCK;
|
||||
+ out:
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ kfree(qs);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int futex_wait_multiple(u32 __user *uaddr, unsigned int flags,
|
||||
+ u32 count, ktime_t *abs_time)
|
||||
+{
|
||||
+ struct futex_wait_block *wb;
|
||||
+ struct restart_block *restart;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!count)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ wb = kcalloc(count, sizeof(struct futex_wait_block), GFP_KERNEL);
|
||||
+ if (!wb)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ if (copy_from_user(wb, uaddr,
|
||||
+ count * sizeof(struct futex_wait_block))) {
|
||||
+ ret = -EFAULT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ret = do_futex_wait_multiple(wb, count, flags, abs_time);
|
||||
+
|
||||
+ if (ret == -ERESTART_RESTARTBLOCK) {
|
||||
+ restart = ¤t->restart_block;
|
||||
+ restart->fn = futex_wait_restart;
|
||||
+ restart->futex.uaddr = uaddr;
|
||||
+ restart->futex.val = count;
|
||||
+ restart->futex.time = *abs_time;
|
||||
+ restart->futex.flags = (flags | FLAGS_HAS_TIMEOUT |
|
||||
+ FLAGS_WAKE_MULTIPLE);
|
||||
+ }
|
||||
+
|
||||
+out:
|
||||
+ kfree(wb);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val,
|
||||
ktime_t *abs_time, u32 bitset)
|
||||
{
|
||||
@@ -2797,6 +2942,10 @@ static long futex_wait_restart(struct restart_block *restart)
|
||||
}
|
||||
restart->fn = do_no_restart_syscall;
|
||||
|
||||
+ if (restart->futex.flags & FLAGS_WAKE_MULTIPLE)
|
||||
+ return (long)futex_wait_multiple(uaddr, restart->futex.flags,
|
||||
+ restart->futex.val, tp);
|
||||
+
|
||||
return (long)futex_wait(uaddr, restart->futex.flags,
|
||||
restart->futex.val, tp, restart->futex.bitset);
|
||||
}
|
||||
@@ -3680,6 +3829,8 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
|
||||
uaddr2);
|
||||
case FUTEX_CMP_REQUEUE_PI:
|
||||
return futex_requeue(uaddr, flags, uaddr2, val, val2, &val3, 1);
|
||||
+ case FUTEX_WAIT_MULTIPLE:
|
||||
+ return futex_wait_multiple(uaddr, flags, val, timeout);
|
||||
}
|
||||
return -ENOSYS;
|
||||
}
|
||||
@@ -3696,7 +3847,8 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
|
||||
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
|
||||
cmd == FUTEX_WAIT_BITSET ||
|
||||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
|
||||
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
|
||||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
|
||||
if (unlikely(should_fail_futex(!(op & FUTEX_PRIVATE_FLAG))))
|
||||
return -EFAULT;
|
||||
if (get_timespec64(&ts, utime))
|
||||
@@ -3705,7 +3857,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
return -EINVAL;
|
||||
|
||||
t = timespec64_to_ktime(ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
t = ktime_add_safe(ktime_get(), t);
|
||||
tp = &t;
|
||||
}
|
||||
@@ -3889,14 +4041,15 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
|
||||
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
|
||||
cmd == FUTEX_WAIT_BITSET ||
|
||||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
|
||||
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
|
||||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
|
||||
if (get_old_timespec32(&ts, utime))
|
||||
return -EFAULT;
|
||||
if (!timespec64_valid(&ts))
|
||||
return -EINVAL;
|
||||
|
||||
t = timespec64_to_ktime(ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
t = ktime_add_safe(ktime_get(), t);
|
||||
tp = &t;
|
||||
}
|
||||
--
|
||||
2.20.1
|
7601
linux54-tkg/linux54-tkg-patches/0009-bmq_v5.4-r2.patch
Normal file
7601
linux54-tkg/linux54-tkg-patches/0009-bmq_v5.4-r2.patch
Normal file
File diff suppressed because it is too large
Load Diff
108
linux54-tkg/linux54-tkg-patches/0009-glitched-bmq.patch
Normal file
108
linux54-tkg/linux54-tkg-patches/0009-glitched-bmq.patch
Normal file
@ -0,0 +1,108 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - BMQ
|
||||
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (55)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (63)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 9270a4370d54..30d01e647417 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -159,7 +159,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 100. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
/*
|
||||
* The total number of pages which are beyond the high watermark within all
|
||||
* zones.
|
43
linux54-tkg/linux54-tkg-patches/0011-ZFS-fix.patch
Normal file
43
linux54-tkg/linux54-tkg-patches/0011-ZFS-fix.patch
Normal file
@ -0,0 +1,43 @@
|
||||
From 1e010beda2896bdf3082fb37a3e49f8ce20e04d8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
|
||||
Date: Thu, 2 May 2019 05:28:08 +0100
|
||||
Subject: [PATCH] x86/fpu: Export kernel_fpu_{begin,end}() with
|
||||
EXPORT_SYMBOL_GPL
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We need these symbols in zfs as the fpu implementation breaks userspace:
|
||||
|
||||
https://github.com/zfsonlinux/zfs/issues/9346
|
||||
Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
|
||||
---
|
||||
arch/x86/kernel/fpu/core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
|
||||
index 12c70840980e..352538b3bb5d 100644
|
||||
--- a/arch/x86/kernel/fpu/core.c
|
||||
+++ b/arch/x86/kernel/fpu/core.c
|
||||
@@ -102,7 +102,7 @@ void kernel_fpu_begin(void)
|
||||
}
|
||||
__cpu_invalidate_fpregs_state();
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(kernel_fpu_begin);
|
||||
+EXPORT_SYMBOL(kernel_fpu_begin);
|
||||
|
||||
void kernel_fpu_end(void)
|
||||
{
|
||||
@@ -111,7 +111,7 @@ void kernel_fpu_end(void)
|
||||
this_cpu_write(in_kernel_fpu, false);
|
||||
preempt_enable();
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(kernel_fpu_end);
|
||||
+EXPORT_SYMBOL(kernel_fpu_end);
|
||||
|
||||
/*
|
||||
* Save the FPU state (mark it for reload if necessary):
|
||||
--
|
||||
2.23.0
|
||||
|
||||
|
2806
linux54-tkg/linux54-tkg-patches/0012-linux-hardened.patch
Normal file
2806
linux54-tkg/linux54-tkg-patches/0012-linux-hardened.patch
Normal file
File diff suppressed because it is too large
Load Diff
1115
linux55-tkg/PKGBUILD
Normal file
1115
linux55-tkg/PKGBUILD
Normal file
File diff suppressed because it is too large
Load Diff
38
linux55-tkg/README.md
Normal file
38
linux55-tkg/README.md
Normal file
@ -0,0 +1,38 @@
|
||||
**Due to intel_pstate poor performances as of late, I have decided to disable it by default. It is still builtin though, and you can add `intel_pstate=enable` or `intel_pstate=passive` to your kernel command line (in GRUB for example) to either use plain intel_pstate governors or make use of acpi_cpufreq governors while keeping full support for turbo frequencies, respectively.**
|
||||
|
||||
A custom Linux kernel 5.5.y with specific PDS, MuQSS and BMQ CPU schedulers related patchsets selector (stock CFS is also an option) and added tweaks for a nice interactivity/performance balance, aiming for the best gaming experience.
|
||||
|
||||
Various personalization options available and userpatches support (put your own patches in the same dir as the PKGBUILD, with the ".mypatch" extension.
|
||||
|
||||
MuQSS : http://ck-hack.blogspot.com/
|
||||
|
||||
BMQ : http://cchalpha.blogspot.com/
|
||||
|
||||
*As of BMQ 5.5r1, timeslice can be adjusted through kernel boot parameter `bmq.timeslice=` (value should be >=1000, default is 4000)*
|
||||
|
||||
PDS-mq was originally created by Alfred Chen : http://cchalpha.blogspot.com/
|
||||
While he dropped it with kernel 5.1 in favor of its BMQ evolution/rework, my pretty bad gaming experiences with BMQ up to this point convinced me to keep PDS afloat for as long as it'll make sense/I'll be able to.
|
||||
|
||||
You can find prebuilts on chaotic-aur, but if you need the extra-spice of per-arch optimized prebuilts, you can find PDS and MuQSS variants daily builds here : https://repo.kitsuna.net/ - Thanks to LordKitsuna.
|
||||
|
||||
Comes with a slightly modified Arch config asking for a few core personalization settings at compilation time.
|
||||
If you want to streamline your kernel config for lower footprint and faster compilations : https://wiki.archlinux.org/index.php/Modprobed-db
|
||||
You can enable support for it at the beginning of the PKGBUILD file. Make sure to read everything you need to know about it.
|
||||
|
||||
## Other stuff included:
|
||||
- Per-CPU-arch native optimizations
|
||||
- memory management and swapping tweaks
|
||||
- scheduling tweaks
|
||||
- using prefered raid6 gen function directly
|
||||
- using lz4 algo for zswap by default
|
||||
- built-in Thinkpad hardware functions driver / embedded controller LPC3 functions / SMAPI support
|
||||
- optional "Zenify" patchset using core blk, mm and scheduler tweaks from Zen
|
||||
- CFS tweaks
|
||||
- using yeah TCP congestion algo by default
|
||||
- using cake network queue management system
|
||||
- using vm.max_map_count=262144 by default
|
||||
- intel E1000 fixes
|
||||
- cherry-picked clear linux patches
|
||||
- **optional** overrides for missing ACS capabilities
|
||||
- **optional** ZFS fpu symbols
|
||||
- **optional** Fsync support (proton)
|
175
linux55-tkg/customization.cfg
Normal file
175
linux55-tkg/customization.cfg
Normal file
@ -0,0 +1,175 @@
|
||||
# linux55-TkG config file
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux52-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux55-tkg.cfg
|
||||
|
||||
# Set to anything else than "true" to limit cleanup operations and keep source and files generated during compilation.
|
||||
# Default is "true".
|
||||
_NUKR="true"
|
||||
|
||||
# Custom compiler root dirs - Leave empty to use system compilers
|
||||
# Example: CUSTOM_GCC_PATH="/home/frog/PKGBUILDS/mostlyportable-gcc/gcc-mostlyportable-9.2.0"
|
||||
CUSTOM_GCC_PATH=""
|
||||
|
||||
# Set to the number corresponding to a predefined profile to use it. Current list of available profiles :
|
||||
# 1 - Custom (meaning nothing will be enforced and you get to configure everything)
|
||||
# 2 - Ryzen desktop (performance)
|
||||
# 3 - Generic Desktop (Performance)
|
||||
_OPTIPROFILE=""
|
||||
|
||||
# Set to true to bypass makepkg.conf and use all available threads for compilation. False will respect your makepkg.conf options.
|
||||
_force_all_threads="true"
|
||||
|
||||
# Set to true to use modprobed db to clean config from unneeded modules. Speeds up compilation considerably. Requires root - https://wiki.archlinux.org/index.php/Modprobed-db
|
||||
# !!!! Make sure to have a well populated db !!!! - Leave empty to be asked about it at build time
|
||||
_modprobeddb="false"
|
||||
|
||||
# Set to "1" to call make menuconfig or "2" to call make nconfig before building the kernel. Set to false to disable and skip the prompt.
|
||||
_menunconfig=""
|
||||
|
||||
# Set to true to generate a kernel config fragment from your changes in menuconfig/nconfig. Set to false to disable and skip the prompt.
|
||||
_diffconfig=""
|
||||
|
||||
# Set to the file name where the generated config fragment should be written to. Only used if _diffconfig is active.
|
||||
_diffconfig_name=""
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64" and Arch hardened is "config_hardened.x86_64".
|
||||
# To get a complete hardened setup, you have to use "cfs" as _cpusched
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# CPU scheduler - Options are "pds", muqss, "bmq", "cfs" or "cfsturbo" (experimental, for power CPUs https://lkml.org/lkml/2019/7/25/296)
|
||||
# "pds" is the recommended option for gaming
|
||||
_cpusched=""
|
||||
|
||||
# CPU sched_yield_type - Choose what sort of yield sched_yield will perform
|
||||
# For PDS and MuQSS: 0: No yield. (Recommended option for gaming on PDS and MuQSS)
|
||||
# 1: Yield only to better priority/deadline tasks. (Default - can be unstable with PDS on some platforms)
|
||||
# 2: Expire timeslice and recalculate deadline. (Usually the slowest option for PDS and MuQSS, not recommended)
|
||||
# For BMQ: 0: No yield.
|
||||
# 1: Deboost and requeue task. (Default)
|
||||
# 2: Set rq skip task.
|
||||
_sched_yield_type=""
|
||||
|
||||
# Round Robin interval is the longest duration two tasks with the same nice level will be delayed for. When CPU time is requested by a task, it receives a time slice equal
|
||||
# to the rr_interval in addition to a virtual deadline. When using yield_type 2, a low value can help offset the disadvantages of rescheduling a process that has yielded.
|
||||
# MuQSS default: 6ms"
|
||||
# PDS default: 4ms"
|
||||
# BMQ default: 4ms"
|
||||
# Set to "1" for 2ms, "2" for 4ms, "3" for 6ms, "4" for 8ms, or "default" to keep the chosen scheduler defaults.
|
||||
_rr_interval=""
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "1" to use CattaRappa mode (enabling full tickless), "2" for tickless idle only, or "0" for periodic ticks.
|
||||
# Full tickless can give higher performances in various cases but, depending on hardware, lower consistency. Just tickless idle can perform better on some platforms (mostly AMD based).
|
||||
_tickless=""
|
||||
|
||||
# Setting this to to "true" can improve latency on PDS (at the cost of throughput) and improve throughput on other schedulers (at the cost of latency) - Can improve VMs performance - Kernel default is "false"
|
||||
_voluntary_preempt=""
|
||||
|
||||
# Set to "true" to enable Device Tree and Open Firmware support. If you don't know about it, you don't need it - Default is "false"
|
||||
_OFenable="false"
|
||||
|
||||
# Set to "true" to use ACS override patch - https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_.28ACS_override_patch.29 - Kernel default is "false"
|
||||
_acs_override=""
|
||||
|
||||
# Set to "true" to add back missing symbol for AES-NI/AVX support on ZFS - https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions.patch - Kernel default is "false"
|
||||
_zfsfix=""
|
||||
|
||||
# Set to "true" to enable support for fsync, an experimental replacement for esync found in Valve Proton 4.11+ - https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305
|
||||
_fsync=""
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "1"
|
||||
_compileroptlevel="1"
|
||||
|
||||
# CPU compiler optimizations - Defaults to generic optimizations if left empty
|
||||
# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2"
|
||||
# Intel CPUs : "mpsc"(P4 & older Netburst based Xeon) "atom" "core2" "nehalem" "westmere" "silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylakex" "cannonlake" "icelake" "goldmont" "goldmontplus" "cascadelake"
|
||||
# Other options :
|
||||
# - "generic" (to share the package between machines with different CPUs)
|
||||
# - "native" (use compiler autodetection and will prompt for P6_NOPS - Selecting your arch manually in the list above is recommended instead of this option)
|
||||
_processor_opt=""
|
||||
|
||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# MuQSS and PDS only - SMT (Hyperthreading) aware nice priority and policy support (SMT_NICE) - Kernel default is "true" - You can disable this on non-SMT/HT CPUs for lower overhead
|
||||
_smt_nice=""
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# MuQSS only - CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "smt"
|
||||
_runqueue_sharing=""
|
||||
|
||||
# Timer frequency - "100" "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "500" - For MuQSS, 100Hz is recommended
|
||||
_timer_freq=""
|
||||
|
||||
# Default CPU governor - "performance", "ondemand", "schedutil" or leave empty for default (schedutil)
|
||||
_default_cpu_gov="ondemand"
|
||||
|
||||
# Use an aggressive ondemand governor instead of default ondemand to improve performance on low loads/high core count CPUs while keeping some power efficiency from frequency scaling.
|
||||
# It still requires you to either set ondemand as default governor or to select it some way.
|
||||
_aggressive_ondemand="true"
|
||||
|
||||
# On some platforms, an acpi_cpufreq bug affects performance negatively. Set to "true" to disable it as a workaround, but it will use more power.
|
||||
# https://github.com/Tk-Glitch/PKGBUILDS/issues/263
|
||||
_disable_acpi_cpufreq=""
|
||||
|
||||
# You can pass a default set of kernel command line options here - example: "intel_pstate=passive nowatchdog amdgpu.ppfeaturemask=0xfffd7fff mitigations=off"
|
||||
_custom_commandline="intel_pstate=passive"
|
||||
|
||||
# Set to false to use Arch's default TTY font (TER16x32), which is a bit too huge on many displays
|
||||
_font_autoselect="true"
|
||||
|
||||
|
||||
#### SPESHUL OPTION ####
|
||||
|
||||
# If you want to bypass the stock naming scheme and enforce something else (example : "linux") - Useful for some bootloaders requiring manual entry editing on each release.
|
||||
# !!! It will also change pkgname - If you don't explicitely need this, don't use it !!!
|
||||
_custom_pkgbase=""
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# community patches - add patches (separated by a space) of your choice by name from the community-patches dir
|
||||
# example: _community_patches="clear_nack_in_tend_isr.myrevert ffb_regression_fix.mypatch 0008-drm-amd-powerplay-force-the-trim-of-the-mclk-dpm-levels-if-OD-is-enabled.mypatch"
|
||||
_community_patches=""
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
||||
|
||||
|
||||
#### CONFIG FRAGMENTS ####
|
||||
|
||||
# You can use your own kernel config fragments by putting them in the same folder as the PKGBUILD and giving them the .myfrag extension.
|
||||
|
||||
# Also, the config fragments variable below must be set to true for the above to work.
|
||||
_config_fragments="true"
|
||||
|
||||
# Apply all config fragments without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_config_fragments_no_confirm="false"
|
10680
linux55-tkg/linux55-tkg-config/config.x86_64
Normal file
10680
linux55-tkg/linux55-tkg-config/config.x86_64
Normal file
File diff suppressed because it is too large
Load Diff
48
linux55-tkg/linux55-tkg-config/generic-desktop-profile.cfg
Normal file
48
linux55-tkg/linux55-tkg-config/generic-desktop-profile.cfg
Normal file
@ -0,0 +1,48 @@
|
||||
# linux55-TkG config file
|
||||
# Generic Desktop
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux50-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux55-tkg.cfg
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64".
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "true" to use explicit preemption points to lower latency at the cost of a small throughput loss - Can give a nice perf boost in VMs - Kernel default is "false"
|
||||
_voluntary_preempt="false"
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="1"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
51
linux55-tkg/linux55-tkg-config/ryzen-desktop-profile.cfg
Normal file
51
linux55-tkg/linux55-tkg-config/ryzen-desktop-profile.cfg
Normal file
@ -0,0 +1,51 @@
|
||||
# linux55-TkG config file
|
||||
# Ryzen Desktop
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux52-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux55-tkg.cfg
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64".
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "true" to use explicit preemption points to lower latency at the cost of a small throughput loss - Can give a nice perf boost in VMs - Kernel default is "false"
|
||||
_voluntary_preempt="false"
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="1"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# Default CPU governor - "performance", "ondemand" (tweaked), "schedutil" or leave empty for default (schedutil on AMD and legacy Intel, intel_pstate on modern Intel) - Enforcing an option will disable intel_pstate altogether!
|
||||
_default_cpu_gov="performance"
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
@ -0,0 +1,156 @@
|
||||
From 5ec2dd3a095442ec1a21d86042a4994f2ba24e63 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5ec2dd3a095442ec1a21d86042a4994f2ba24e63.1512651251.git.jan.steffens@gmail.com>
|
||||
From: Serge Hallyn <serge.hallyn@canonical.com>
|
||||
Date: Fri, 31 May 2013 19:12:12 +0100
|
||||
Subject: [PATCH] add sysctl to disallow unprivileged CLONE_NEWUSER by default
|
||||
|
||||
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
[bwh: Remove unneeded binary sysctl bits]
|
||||
Signed-off-by: Daniel Micay <danielmicay@gmail.com>
|
||||
---
|
||||
kernel/fork.c | 15 +++++++++++++++
|
||||
kernel/sysctl.c | 12 ++++++++++++
|
||||
kernel/user_namespace.c | 3 +++
|
||||
3 files changed, 30 insertions(+)
|
||||
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index 07cc743698d3668e..4011d68a8ff9305c 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -102,6 +102,11 @@
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/task.h>
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#else
|
||||
+#define unprivileged_userns_clone 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Minimum number of threads to boot the kernel
|
||||
@@ -1555,6 +1560,10 @@ static __latent_entropy struct task_struct *copy_process(
|
||||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
+ if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone)
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ return ERR_PTR(-EPERM);
|
||||
+
|
||||
/*
|
||||
* Thread groups must share signals as well, and detached threads
|
||||
* can only be started up within the thread group.
|
||||
@@ -2348,6 +2357,12 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
|
||||
if (unshare_flags & CLONE_NEWNS)
|
||||
unshare_flags |= CLONE_FS;
|
||||
|
||||
+ if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) {
|
||||
+ err = -EPERM;
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ goto bad_unshare_out;
|
||||
+ }
|
||||
+
|
||||
err = check_unshare_flags(unshare_flags);
|
||||
if (err)
|
||||
goto bad_unshare_out;
|
||||
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
|
||||
index b86520ed3fb60fbf..f7dab3760839f1a1 100644
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -105,6 +105,9 @@ extern int core_uses_pid;
|
||||
extern char core_pattern[];
|
||||
extern unsigned int core_pipe_limit;
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
extern int pid_max;
|
||||
extern int pid_max_min, pid_max_max;
|
||||
extern int percpu_pagelist_fraction;
|
||||
@@ -513,6 +516,15 @@ static struct ctl_table kern_table[] = {
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+ {
|
||||
+ .procname = "unprivileged_userns_clone",
|
||||
+ .data = &unprivileged_userns_clone,
|
||||
+ .maxlen = sizeof(int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = proc_dointvec,
|
||||
+ },
|
||||
+#endif
|
||||
#ifdef CONFIG_PROC_SYSCTL
|
||||
{
|
||||
.procname = "tainted",
|
||||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
|
||||
index c490f1e4313b998a..dd03bd39d7bf194d 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -24,6 +24,9 @@
|
||||
#include <linux/projid.h>
|
||||
#include <linux/fs_struct.h>
|
||||
|
||||
+/* sysctl */
|
||||
+int unprivileged_userns_clone;
|
||||
+
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
From b5202296055dd333db4425120d3f93ef4e6a0573 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Thu, 7 Dec 2017 13:50:48 +0100
|
||||
Subject: ZEN: Add CONFIG for unprivileged_userns_clone
|
||||
|
||||
This way our default behavior continues to match the vanilla kernel.
|
||||
---
|
||||
init/Kconfig | 16 ++++++++++++++++
|
||||
kernel/user_namespace.c | 4 ++++
|
||||
2 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 4592bf7997c0..f3df02990aff 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1004,6 +1004,22 @@ config USER_NS
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
+config USER_NS_UNPRIVILEGED
|
||||
+ bool "Allow unprivileged users to create namespaces"
|
||||
+ default y
|
||||
+ depends on USER_NS
|
||||
+ help
|
||||
+ When disabled, unprivileged users will not be able to create
|
||||
+ new namespaces. Allowing users to create their own namespaces
|
||||
+ has been part of several recent local privilege escalation
|
||||
+ exploits, so if you need user namespaces but are
|
||||
+ paranoid^Wsecurity-conscious you want to disable this.
|
||||
+
|
||||
+ This setting can be overridden at runtime via the
|
||||
+ kernel.unprivileged_userns_clone sysctl.
|
||||
+
|
||||
+ If unsure, say Y.
|
||||
+
|
||||
config PID_NS
|
||||
bool "PID Namespaces"
|
||||
default y
|
||||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
|
||||
index 6b9dbc257e34..107b17f0d528 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -27,7 +27,11 @@
|
||||
#include <linux/sort.h>
|
||||
|
||||
/* sysctl */
|
||||
+#ifdef CONFIG_USER_NS_UNPRIVILEGED
|
||||
+int unprivileged_userns_clone = 1;
|
||||
+#else
|
||||
int unprivileged_userns_clone;
|
||||
+#endif
|
||||
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
354
linux55-tkg/linux55-tkg-patches/0002-clear-patches.patch
Normal file
354
linux55-tkg/linux55-tkg-patches/0002-clear-patches.patch
Normal file
@ -0,0 +1,354 @@
|
||||
From 2ac70785613ef4c6b16414986bb18bd7b60d2a13 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Mon, 14 Mar 2016 11:10:58 -0600
|
||||
Subject: [PATCH] pci pme wakeups
|
||||
|
||||
Reduce wakeups for PME checks, which are a workaround for miswired
|
||||
boards (sadly, too many of them) in laptops.
|
||||
---
|
||||
drivers/pci/pci.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
|
||||
index c25acace7d91..0ddebdad9f5b 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -61,7 +61,7 @@ struct pci_pme_device {
|
||||
struct pci_dev *dev;
|
||||
};
|
||||
|
||||
-#define PME_TIMEOUT 1000 /* How long between PME checks */
|
||||
+#define PME_TIMEOUT 4000 /* How long between PME checks */
|
||||
|
||||
static void pci_dev_d3_sleep(struct pci_dev *dev)
|
||||
{
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From 7e7e36c67aa71d6a1ec5676d99d37c1fea389ceb Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sat, 19 Mar 2016 21:32:19 -0400
|
||||
Subject: [PATCH] intel_idle: tweak cpuidle cstates
|
||||
|
||||
Increase target_residency in cpuidle cstate
|
||||
|
||||
Tune intel_idle to be a bit less agressive;
|
||||
Clear linux is cleaner in hygiene (wakupes) than the average linux,
|
||||
so we can afford changing these in a way that increases
|
||||
performance while keeping power efficiency
|
||||
---
|
||||
drivers/idle/intel_idle.c | 44 +++++++++++++++++++--------------------
|
||||
1 file changed, 22 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
|
||||
index 8b5d85c91e9d..5e2d813a048d 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -466,7 +466,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -474,7 +474,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 33,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 900,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -482,7 +482,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 133,
|
||||
- .target_residency = 400,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -490,7 +490,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x32",
|
||||
.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 166,
|
||||
- .target_residency = 500,
|
||||
+ .target_residency = 1500,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -498,7 +498,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 300,
|
||||
- .target_residency = 900,
|
||||
+ .target_residency = 2000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -506,7 +506,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 600,
|
||||
- .target_residency = 1800,
|
||||
+ .target_residency = 5000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -514,7 +514,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 2600,
|
||||
- .target_residency = 7700,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -534,7 +534,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -542,7 +542,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 40,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -550,7 +550,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 133,
|
||||
- .target_residency = 400,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -558,7 +558,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x32",
|
||||
.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 166,
|
||||
- .target_residency = 500,
|
||||
+ .target_residency = 2000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -566,7 +566,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 300,
|
||||
- .target_residency = 900,
|
||||
+ .target_residency = 4000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -574,7 +574,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 600,
|
||||
- .target_residency = 1800,
|
||||
+ .target_residency = 7000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -582,7 +582,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 2600,
|
||||
- .target_residency = 7700,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -603,7 +603,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -611,7 +611,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 70,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -619,7 +619,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 85,
|
||||
- .target_residency = 200,
|
||||
+ .target_residency = 600,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -627,7 +627,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x33",
|
||||
.flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 124,
|
||||
- .target_residency = 800,
|
||||
+ .target_residency = 3000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -635,7 +635,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 200,
|
||||
- .target_residency = 800,
|
||||
+ .target_residency = 3200,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -643,7 +643,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 480,
|
||||
- .target_residency = 5000,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -651,7 +651,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 890,
|
||||
- .target_residency = 5000,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -672,7 +672,7 @@ static struct cpuidle_state skx_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 300,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From b8211d4f79dd88dfc2d4bd52be46103ea0b70e3e Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Fri, 6 Jan 2017 15:34:09 +0000
|
||||
Subject: [PATCH] ipv4/tcp: allow the memory tuning for tcp to go a little
|
||||
bigger than default
|
||||
|
||||
---
|
||||
net/ipv4/tcp.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
|
||||
index cf3c5095c10e..b30d51837b2d 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -3897,8 +3897,8 @@ void __init tcp_init(void)
|
||||
tcp_init_mem();
|
||||
/* Set per-socket limits to no more than 1/128 the pressure threshold */
|
||||
limit = nr_free_buffer_pages() << (PAGE_SHIFT - 7);
|
||||
- max_wshare = min(4UL*1024*1024, limit);
|
||||
- max_rshare = min(6UL*1024*1024, limit);
|
||||
+ max_wshare = min(16UL*1024*1024, limit);
|
||||
+ max_rshare = min(16UL*1024*1024, limit);
|
||||
|
||||
init_net.ipv4.sysctl_tcp_wmem[0] = SK_MEM_QUANTUM;
|
||||
init_net.ipv4.sysctl_tcp_wmem[1] = 16*1024;
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From 050223869257b87e22636158a80da38d877248ed Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sun, 18 Feb 2018 23:35:41 +0000
|
||||
Subject: [PATCH] locking: rwsem: spin faster
|
||||
|
||||
tweak rwsem owner spinning a bit
|
||||
---
|
||||
kernel/locking/rwsem.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
|
||||
index eef04551eae7..1ec5ab4c8ff7 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -720,6 +720,7 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
struct task_struct *new, *owner;
|
||||
unsigned long flags, new_flags;
|
||||
enum owner_state state;
|
||||
+ int i = 0;
|
||||
|
||||
owner = rwsem_owner_flags(sem, &flags);
|
||||
state = rwsem_owner_state(owner, flags, nonspinnable);
|
||||
@@ -753,7 +754,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
From b836ea320114643d4354b43acb6ec8bb06ada487 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Thu, 2 Jun 2016 23:36:32 -0500
|
||||
Subject: [PATCH] drivers: Initialize ata before graphics
|
||||
|
||||
ATA init is the long pole in the boot process, and its asynchronous.
|
||||
move the graphics init after it so that ata and graphics initialize
|
||||
in parallel
|
||||
---
|
||||
drivers/Makefile | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/Makefile b/drivers/Makefile
|
||||
index aaef17cc6512..d08f3a394929 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -58,15 +58,8 @@ obj-y += char/
|
||||
# iommu/ comes before gpu as gpu are using iommu controllers
|
||||
obj-y += iommu/
|
||||
|
||||
-# gpu/ comes after char for AGP vs DRM startup and after iommu
|
||||
-obj-y += gpu/
|
||||
-
|
||||
obj-$(CONFIG_CONNECTOR) += connector/
|
||||
|
||||
-# i810fb and intelfb depend on char/agp/
|
||||
-obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
-obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
|
||||
-
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-$(CONFIG_NVM) += lightnvm/
|
||||
obj-y += base/ block/ misc/ mfd/ nfc/
|
||||
@@ -79,6 +72,14 @@ obj-$(CONFIG_IDE) += ide/
|
||||
obj-y += scsi/
|
||||
obj-y += nvme/
|
||||
obj-$(CONFIG_ATA) += ata/
|
||||
+
|
||||
+# gpu/ comes after char for AGP vs DRM startup and after iommu
|
||||
+obj-y += gpu/
|
||||
+
|
||||
+# i810fb and intelfb depend on char/agp/
|
||||
+obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
+obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
|
||||
+
|
||||
obj-$(CONFIG_TARGET_CORE) += target/
|
||||
obj-$(CONFIG_MTD) += mtd/
|
||||
obj-$(CONFIG_SPI) += spi/
|
3965
linux55-tkg/linux55-tkg-patches/0003-glitched-base.patch
Normal file
3965
linux55-tkg/linux55-tkg-patches/0003-glitched-base.patch
Normal file
File diff suppressed because it is too large
Load Diff
72
linux55-tkg/linux55-tkg-patches/0003-glitched-cfs.patch
Normal file
72
linux55-tkg/linux55-tkg-patches/0003-glitched-cfs.patch
Normal file
@ -0,0 +1,72 @@
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
12598
linux55-tkg/linux55-tkg-patches/0004-5.5-ck1.patch
Normal file
12598
linux55-tkg/linux55-tkg-patches/0004-5.5-ck1.patch
Normal file
File diff suppressed because it is too large
Load Diff
78
linux55-tkg/linux55-tkg-patches/0004-glitched-muqss.patch
Normal file
78
linux55-tkg/linux55-tkg-patches/0004-glitched-muqss.patch
Normal file
@ -0,0 +1,78 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - MuQSS
|
||||
|
||||
diff --git a/kernel/sched/MuQSS.c b/kernel/sched/MuQSS.c
|
||||
index 84a1d08d68551..57c3036a68952 100644
|
||||
--- a/kernel/sched/MuQSS.c
|
||||
+++ b/kernel/sched/MuQSS.c
|
||||
@@ -163,7 +167,11 @@ int sched_interactive __read_mostly = 1;
|
||||
* are allowed to run five seconds as real time tasks. This is the total over
|
||||
* all online cpus.
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int sched_iso_cpu __read_mostly = 25;
|
||||
+#else
|
||||
int sched_iso_cpu __read_mostly = 70;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* sched_yield_type - Choose what sort of yield sched_yield will perform.
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -5,7 +5,7 @@
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
default HZ_100 if SCHED_MUQSS
|
||||
- default HZ_250_NODEF if !SCHED_MUQSS
|
||||
+ default HZ_500_NODEF if !SCHED_MUQSS
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -50,6 +50,20 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500_NODEF
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
+ config HZ_750_NODEF
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000_NODEF
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -63,6 +70,8 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250_NODEF
|
||||
default 300 if HZ_300_NODEF
|
||||
+ default 500 if HZ_500_NODEF
|
||||
+ default 750 if HZ_750_NODEF
|
||||
default 1000 if HZ_1000_NODEF
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index d4d36c61940b..4a9dfe471f1f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -15,7 +15,6 @@ NAME = Kleptomaniac Octopus
|
||||
|
||||
CKVERSION = -ck1
|
||||
CKNAME = MuQSS Powered
|
||||
-EXTRAVERSION := $(EXTRAVERSION)$(CKVERSION)
|
||||
|
||||
# We are using a recursive build, so we need to do a little thinking
|
||||
# to get the ordering right.
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (80)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (45)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (45)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (55)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (63)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
166
linux55-tkg/linux55-tkg-patches/0005-glitched-pds.patch
Normal file
166
linux55-tkg/linux55-tkg-patches/0005-glitched-pds.patch
Normal file
@ -0,0 +1,166 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - PDS
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 9270a4370d54..30d01e647417 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -159,7 +159,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 100. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
/*
|
||||
* The total number of pages which are beyond the high watermark within all
|
||||
* zones.
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 11fd9b502d06..e9bc34d3019b 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -715,6 +715,7 @@ menu "Scheduler features"
|
||||
config UCLAMP_TASK
|
||||
bool "Enable utilization clamping for RT/FAIR tasks"
|
||||
depends on CPU_FREQ_GOV_SCHEDUTIL
|
||||
+ depends on !SCHED_PDS
|
||||
help
|
||||
This feature enables the scheduler to track the clamped utilization
|
||||
of each CPU based on RUNNABLE tasks scheduled on that CPU.
|
||||
@@ -948,7 +948,6 @@ config CGROUP_DEVICE
|
||||
|
||||
config CGROUP_CPUACCT
|
||||
bool "Simple CPU accounting controller"
|
||||
- depends on !SCHED_PDS
|
||||
help
|
||||
Provides a simple controller for monitoring the
|
||||
total CPU consumed by the tasks in a cgroup.
|
||||
diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile
|
||||
index b23231bae996..cab4e5c5b38e 100644
|
||||
--- a/kernel/sched/Makefile
|
||||
+++ b/kernel/sched/Makefile
|
||||
@@ -24,13 +24,13 @@ obj-y += fair.o rt.o deadline.o
|
||||
obj-$(CONFIG_SMP) += cpudeadline.o topology.o stop_task.o
|
||||
obj-$(CONFIG_SCHED_AUTOGROUP) += autogroup.o
|
||||
obj-$(CONFIG_SCHED_DEBUG) += debug.o
|
||||
-obj-$(CONFIG_CGROUP_CPUACCT) += cpuacct.o
|
||||
endif
|
||||
obj-y += loadavg.o clock.o cputime.o
|
||||
obj-y += idle.o
|
||||
obj-y += wait.o wait_bit.o swait.o completion.o
|
||||
obj-$(CONFIG_SMP) += cpupri.o pelt.o
|
||||
obj-$(CONFIG_SCHEDSTATS) += stats.o
|
||||
+obj-$(CONFIG_CGROUP_CPUACCT) += cpuacct.o
|
||||
obj-$(CONFIG_CPU_FREQ) += cpufreq.o
|
||||
obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o
|
||||
obj-$(CONFIG_MEMBARRIER) += membarrier.o
|
||||
|
||||
diff --git a/kernel/sched/pds.c b/kernel/sched/pds.c
|
||||
index 9281ad164..f09a609cf 100644
|
||||
--- a/kernel/sched/pds.c
|
||||
+++ b/kernel/sched/pds.c
|
||||
@@ -81,6 +81,18 @@ enum {
|
||||
NR_CPU_AFFINITY_CHK_LEVEL
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * This allows printing both to /proc/sched_debug and
|
||||
+ * to the console
|
||||
+ */
|
||||
+#define SEQ_printf(m, x...) \
|
||||
+ do { \
|
||||
+ if (m) \
|
||||
+ seq_printf(m, x); \
|
||||
+ else \
|
||||
+ pr_cont(x); \
|
||||
+ } while (0)
|
||||
+
|
||||
static inline void print_scheduler_version(void)
|
||||
{
|
||||
printk(KERN_INFO "pds: PDS-mq CPU Scheduler 0.99o by Alfred Chen.\n");
|
||||
@@ -6353,7 +6365,10 @@ void ia64_set_curr_task(int cpu, struct task_struct *p)
|
||||
#ifdef CONFIG_SCHED_DEBUG
|
||||
void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
|
||||
struct seq_file *m)
|
||||
-{}
|
||||
+{
|
||||
+ SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns),
|
||||
+ get_nr_threads(p));
|
||||
+}
|
||||
|
||||
void proc_sched_set_task(struct task_struct *p)
|
||||
{}
|
8369
linux55-tkg/linux55-tkg-patches/0005-v5.5_undead-pds099o.patch
Normal file
8369
linux55-tkg/linux55-tkg-patches/0005-v5.5_undead-pds099o.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,192 @@
|
||||
From cdeab384f48dd9c88e2dff2e9ad8d57dca1a1b1c Mon Sep 17 00:00:00 2001
|
||||
From: Mark Weiman <mark.weiman@markzz.com>
|
||||
Date: Sun, 12 Aug 2018 11:36:21 -0400
|
||||
Subject: [PATCH] pci: Enable overrides for missing ACS capabilities
|
||||
|
||||
This an updated version of Alex Williamson's patch from:
|
||||
https://lkml.org/lkml/2013/5/30/513
|
||||
|
||||
Original commit message follows:
|
||||
|
||||
PCIe ACS (Access Control Services) is the PCIe 2.0+ feature that
|
||||
allows us to control whether transactions are allowed to be redirected
|
||||
in various subnodes of a PCIe topology. For instance, if two
|
||||
endpoints are below a root port or downsteam switch port, the
|
||||
downstream port may optionally redirect transactions between the
|
||||
devices, bypassing upstream devices. The same can happen internally
|
||||
on multifunction devices. The transaction may never be visible to the
|
||||
upstream devices.
|
||||
|
||||
One upstream device that we particularly care about is the IOMMU. If
|
||||
a redirection occurs in the topology below the IOMMU, then the IOMMU
|
||||
cannot provide isolation between devices. This is why the PCIe spec
|
||||
encourages topologies to include ACS support. Without it, we have to
|
||||
assume peer-to-peer DMA within a hierarchy can bypass IOMMU isolation.
|
||||
|
||||
Unfortunately, far too many topologies do not support ACS to make this
|
||||
a steadfast requirement. Even the latest chipsets from Intel are only
|
||||
sporadically supporting ACS. We have trouble getting interconnect
|
||||
vendors to include the PCIe spec required PCIe capability, let alone
|
||||
suggested features.
|
||||
|
||||
Therefore, we need to add some flexibility. The pcie_acs_override=
|
||||
boot option lets users opt-in specific devices or sets of devices to
|
||||
assume ACS support. The "downstream" option assumes full ACS support
|
||||
on root ports and downstream switch ports. The "multifunction"
|
||||
option assumes the subset of ACS features available on multifunction
|
||||
endpoints and upstream switch ports are supported. The "id:nnnn:nnnn"
|
||||
option enables ACS support on devices matching the provided vendor
|
||||
and device IDs, allowing more strategic ACS overrides. These options
|
||||
may be combined in any order. A maximum of 16 id specific overrides
|
||||
are available. It's suggested to use the most limited set of options
|
||||
necessary to avoid completely disabling ACS across the topology.
|
||||
Note to hardware vendors, we have facilities to permanently quirk
|
||||
specific devices which enforce isolation but not provide an ACS
|
||||
capability. Please contact me to have your devices added and save
|
||||
your customers the hassle of this boot option.
|
||||
|
||||
Signed-off-by: Mark Weiman <mark.weiman@markzz.com>
|
||||
---
|
||||
.../admin-guide/kernel-parameters.txt | 9 ++
|
||||
drivers/pci/quirks.c | 101 ++++++++++++++++++
|
||||
2 files changed, 110 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index aefd358a5ca3..173b3596fd9e 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3190,6 +3190,15 @@
|
||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||
enabled, this kernel boot option can be used to
|
||||
disable the use of MSI interrupts system-wide.
|
||||
+ pcie_acs_override =
|
||||
+ [PCIE] Override missing PCIe ACS support for:
|
||||
+ downstream
|
||||
+ All downstream ports - full ACS capabilities
|
||||
+ multifunction
|
||||
+ All multifunction devices - multifunction ACS subset
|
||||
+ id:nnnn:nnnn
|
||||
+ Specific device - full ACS capabilities
|
||||
+ Specified as vid:did (vendor/device ID) in hex
|
||||
noioapicquirk [APIC] Disable all boot interrupt quirks.
|
||||
Safety option to keep boot IRQs enabled. This
|
||||
should never be necessary.
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 4700d24e5d55..8f7a3d7fd9c1 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -3372,6 +3372,106 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
|
||||
dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
|
||||
}
|
||||
|
||||
+static bool acs_on_downstream;
|
||||
+static bool acs_on_multifunction;
|
||||
+
|
||||
+#define NUM_ACS_IDS 16
|
||||
+struct acs_on_id {
|
||||
+ unsigned short vendor;
|
||||
+ unsigned short device;
|
||||
+};
|
||||
+static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
|
||||
+static u8 max_acs_id;
|
||||
+
|
||||
+static __init int pcie_acs_override_setup(char *p)
|
||||
+{
|
||||
+ if (!p)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ while (*p) {
|
||||
+ if (!strncmp(p, "downstream", 10))
|
||||
+ acs_on_downstream = true;
|
||||
+ if (!strncmp(p, "multifunction", 13))
|
||||
+ acs_on_multifunction = true;
|
||||
+ if (!strncmp(p, "id:", 3)) {
|
||||
+ char opt[5];
|
||||
+ int ret;
|
||||
+ long val;
|
||||
+
|
||||
+ if (max_acs_id >= NUM_ACS_IDS - 1) {
|
||||
+ pr_warn("Out of PCIe ACS override slots (%d)\n",
|
||||
+ NUM_ACS_IDS);
|
||||
+ goto next;
|
||||
+ }
|
||||
+
|
||||
+ p += 3;
|
||||
+ snprintf(opt, 5, "%s", p);
|
||||
+ ret = kstrtol(opt, 16, &val);
|
||||
+ if (ret) {
|
||||
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
|
||||
+ goto next;
|
||||
+ }
|
||||
+ acs_on_ids[max_acs_id].vendor = val;
|
||||
+
|
||||
+ p += strcspn(p, ":");
|
||||
+ if (*p != ':') {
|
||||
+ pr_warn("PCIe ACS invalid ID\n");
|
||||
+ goto next;
|
||||
+ }
|
||||
+
|
||||
+ p++;
|
||||
+ snprintf(opt, 5, "%s", p);
|
||||
+ ret = kstrtol(opt, 16, &val);
|
||||
+ if (ret) {
|
||||
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
|
||||
+ goto next;
|
||||
+ }
|
||||
+ acs_on_ids[max_acs_id].device = val;
|
||||
+ max_acs_id++;
|
||||
+ }
|
||||
+next:
|
||||
+ p += strcspn(p, ",");
|
||||
+ if (*p == ',')
|
||||
+ p++;
|
||||
+ }
|
||||
+
|
||||
+ if (acs_on_downstream || acs_on_multifunction || max_acs_id)
|
||||
+ pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+early_param("pcie_acs_override", pcie_acs_override_setup);
|
||||
+
|
||||
+static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ /* Never override ACS for legacy devices or devices with ACS caps */
|
||||
+ if (!pci_is_pcie(dev) ||
|
||||
+ pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
|
||||
+ return -ENOTTY;
|
||||
+
|
||||
+ for (i = 0; i < max_acs_id; i++)
|
||||
+ if (acs_on_ids[i].vendor == dev->vendor &&
|
||||
+ acs_on_ids[i].device == dev->device)
|
||||
+ return 1;
|
||||
+
|
||||
+ switch (pci_pcie_type(dev)) {
|
||||
+ case PCI_EXP_TYPE_DOWNSTREAM:
|
||||
+ case PCI_EXP_TYPE_ROOT_PORT:
|
||||
+ if (acs_on_downstream)
|
||||
+ return 1;
|
||||
+ break;
|
||||
+ case PCI_EXP_TYPE_ENDPOINT:
|
||||
+ case PCI_EXP_TYPE_UPSTREAM:
|
||||
+ case PCI_EXP_TYPE_LEG_END:
|
||||
+ case PCI_EXP_TYPE_RC_END:
|
||||
+ if (acs_on_multifunction && dev->multifunction)
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return -ENOTTY;
|
||||
+}
|
||||
/*
|
||||
* Some Atheros AR9xxx and QCA988x chips do not behave after a bus reset.
|
||||
* The device will throw a Link Down error on AER-capable systems and
|
||||
@@ -4513,6 +4613,7 @@ static const struct pci_dev_acs_enabled {
|
||||
{ PCI_VENDOR_ID_BROADCOM, 0xD714, pci_quirk_brcm_acs },
|
||||
/* Amazon Annapurna Labs */
|
||||
{ PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS, 0x0031, pci_quirk_al_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
419
linux55-tkg/linux55-tkg-patches/0007-v5.5-fsync.patch
Normal file
419
linux55-tkg/linux55-tkg-patches/0007-v5.5-fsync.patch
Normal file
@ -0,0 +1,419 @@
|
||||
split the futex key setup from the queue locking and key reading. This
|
||||
is useful to support the setup of multiple keys at the same time, like
|
||||
what is done in futex_requeue() and what will be done for the
|
||||
FUTEX_WAIT_MULTIPLE command.
|
||||
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
---
|
||||
kernel/futex.c | 71 +++++++++++++++++++++++++++++---------------------
|
||||
1 file changed, 42 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 6d50728ef2e7..91f3db335c57 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -2631,6 +2631,39 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
__set_current_state(TASK_RUNNING);
|
||||
}
|
||||
|
||||
+static int __futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
+ struct futex_q *q, struct futex_hash_bucket **hb)
|
||||
+{
|
||||
+
|
||||
+ u32 uval;
|
||||
+ int ret;
|
||||
+
|
||||
+retry_private:
|
||||
+ *hb = queue_lock(q);
|
||||
+
|
||||
+ ret = get_futex_value_locked(&uval, uaddr);
|
||||
+
|
||||
+ if (ret) {
|
||||
+ queue_unlock(*hb);
|
||||
+
|
||||
+ ret = get_user(uval, uaddr);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (!(flags & FLAGS_SHARED))
|
||||
+ goto retry_private;
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (uval != val) {
|
||||
+ queue_unlock(*hb);
|
||||
+ ret = -EWOULDBLOCK;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* futex_wait_setup() - Prepare to wait on a futex
|
||||
* @uaddr: the futex userspace address
|
||||
@@ -2651,7 +2684,6 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
struct futex_q *q, struct futex_hash_bucket **hb)
|
||||
{
|
||||
- u32 uval;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@@ -2672,38 +2704,19 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
* absorb a wakeup if *uaddr does not match the desired values
|
||||
* while the syscall executes.
|
||||
*/
|
||||
-retry:
|
||||
- ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, FUTEX_READ);
|
||||
- if (unlikely(ret != 0))
|
||||
- return ret;
|
||||
-
|
||||
-retry_private:
|
||||
- *hb = queue_lock(q);
|
||||
+ do {
|
||||
+ ret = get_futex_key(uaddr, flags & FLAGS_SHARED,
|
||||
+ &q->key, FUTEX_READ);
|
||||
+ if (unlikely(ret != 0))
|
||||
+ return ret;
|
||||
|
||||
- ret = get_futex_value_locked(&uval, uaddr);
|
||||
+ ret = __futex_wait_setup(uaddr, val, flags, q, hb);
|
||||
|
||||
- if (ret) {
|
||||
- queue_unlock(*hb);
|
||||
-
|
||||
- ret = get_user(uval, uaddr);
|
||||
+ /* Drop key reference if retry or error. */
|
||||
if (ret)
|
||||
- goto out;
|
||||
+ put_futex_key(&q->key);
|
||||
+ } while (ret > 0);
|
||||
|
||||
- if (!(flags & FLAGS_SHARED))
|
||||
- goto retry_private;
|
||||
-
|
||||
- put_futex_key(&q->key);
|
||||
- goto retry;
|
||||
- }
|
||||
-
|
||||
- if (uval != val) {
|
||||
- queue_unlock(*hb);
|
||||
- ret = -EWOULDBLOCK;
|
||||
- }
|
||||
-
|
||||
-out:
|
||||
- if (ret)
|
||||
- put_futex_key(&q->key);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
||||
This is a new futex operation, called FUTEX_WAIT_MULTIPLE, which allows
|
||||
a thread to wait on several futexes at the same time, and be awoken by
|
||||
any of them. In a sense, it implements one of the features that was
|
||||
supported by pooling on the old FUTEX_FD interface.
|
||||
|
||||
My use case for this operation lies in Wine, where we want to implement
|
||||
a similar interface available in Windows, used mainly for event
|
||||
handling. The wine folks have an implementation that uses eventfd, but
|
||||
it suffers from FD exhaustion (I was told they have application that go
|
||||
to the order of multi-milion FDs), and higher CPU utilization.
|
||||
|
||||
In time, we are also proposing modifications to glibc and libpthread to
|
||||
make this feature available for Linux native multithreaded applications
|
||||
using libpthread, which can benefit from the behavior of waiting on any
|
||||
of a group of futexes.
|
||||
|
||||
In particular, using futexes in our Wine use case reduced the CPU
|
||||
utilization by 4% for the game Beat Saber and by 1.5% for the game
|
||||
Shadow of Tomb Raider, both running over Proton (a wine based solution
|
||||
for Windows emulation), when compared to the eventfd interface. This
|
||||
implementation also doesn't rely of file descriptors, so it doesn't risk
|
||||
overflowing the resource.
|
||||
|
||||
Technically, the existing FUTEX_WAIT implementation can be easily
|
||||
reworked by using do_futex_wait_multiple with a count of one, and I
|
||||
have a patch showing how it works. I'm not proposing it, since
|
||||
futex is such a tricky code, that I'd be more confortable to have
|
||||
FUTEX_WAIT_MULTIPLE running upstream for a couple development cycles,
|
||||
before considering modifying FUTEX_WAIT.
|
||||
|
||||
From an implementation perspective, the futex list is passed as an array
|
||||
of (pointer,value,bitset) to the kernel, which will enqueue all of them
|
||||
and sleep if none was already triggered. It returns a hint of which
|
||||
futex caused the wake up event to userspace, but the hint doesn't
|
||||
guarantee that is the only futex triggered. Before calling the syscall
|
||||
again, userspace should traverse the list, trying to re-acquire any of
|
||||
the other futexes, to prevent an immediate -EWOULDBLOCK return code from
|
||||
the kernel.
|
||||
|
||||
This was tested using three mechanisms:
|
||||
|
||||
1) By reimplementing FUTEX_WAIT in terms of FUTEX_WAIT_MULTIPLE and
|
||||
running the unmodified tools/testing/selftests/futex and a full linux
|
||||
distro on top of this kernel.
|
||||
|
||||
2) By an example code that exercises the FUTEX_WAIT_MULTIPLE path on a
|
||||
multi-threaded, event-handling setup.
|
||||
|
||||
3) By running the Wine fsync implementation and executing multi-threaded
|
||||
applications, in particular the modern games mentioned above, on top of
|
||||
this implementation.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Signed-off-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Signed-off-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
---
|
||||
include/uapi/linux/futex.h | 7 ++
|
||||
kernel/futex.c | 161 ++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 164 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index a89eb0accd5e..2401c4cf5095 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -21,6 +21,7 @@
|
||||
#define FUTEX_WAKE_BITSET 10
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -150,4 +151,10 @@ struct robust_list_head {
|
||||
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
|
||||
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
|
||||
|
||||
+struct futex_wait_block {
|
||||
+ __u32 __user *uaddr;
|
||||
+ __u32 val;
|
||||
+ __u32 bitset;
|
||||
+};
|
||||
+
|
||||
#endif /* _UAPI_LINUX_FUTEX_H */
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 91f3db335c57..2623e8f152cd 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -183,6 +183,7 @@ static int __read_mostly futex_cmpxchg_enabled;
|
||||
#endif
|
||||
#define FLAGS_CLOCKRT 0x02
|
||||
#define FLAGS_HAS_TIMEOUT 0x04
|
||||
+#define FLAGS_WAKE_MULTIPLE 0x08
|
||||
|
||||
/*
|
||||
* Priority Inheritance state:
|
||||
@@ -2720,6 +2721,150 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int do_futex_wait_multiple(struct futex_wait_block *wb,
|
||||
+ u32 count, unsigned int flags,
|
||||
+ ktime_t *abs_time)
|
||||
+{
|
||||
+
|
||||
+ struct hrtimer_sleeper timeout, *to;
|
||||
+ struct futex_hash_bucket *hb;
|
||||
+ struct futex_q *qs = NULL;
|
||||
+ int ret;
|
||||
+ int i;
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(struct futex_q), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, flags,
|
||||
+ current->timer_slack_ns);
|
||||
+ retry:
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ qs[i].key = FUTEX_KEY_INIT;
|
||||
+ qs[i].bitset = wb[i].bitset;
|
||||
+
|
||||
+ ret = get_futex_key(wb[i].uaddr, flags & FLAGS_SHARED,
|
||||
+ &qs[i].key, FUTEX_READ);
|
||||
+ if (unlikely(ret != 0)) {
|
||||
+ for (--i; i >= 0; i--)
|
||||
+ put_futex_key(&qs[i].key);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ set_current_state(TASK_INTERRUPTIBLE);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ ret = __futex_wait_setup(wb[i].uaddr, wb[i].val,
|
||||
+ flags, &qs[i], &hb);
|
||||
+ if (ret) {
|
||||
+ /* Drop the failed key directly. keys 0..(i-1)
|
||||
+ * will be put by unqueue_me.
|
||||
+ */
|
||||
+ put_futex_key(&qs[i].key);
|
||||
+
|
||||
+ /* Undo the partial work we did. */
|
||||
+ for (--i; i >= 0; i--)
|
||||
+ unqueue_me(&qs[i]);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+ if (ret > 0)
|
||||
+ goto retry;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* We can't hold to the bucket lock when dealing with
|
||||
+ * the next futex. Queue ourselves now so we can unlock
|
||||
+ * it before moving on.
|
||||
+ */
|
||||
+ queue_me(&qs[i], hb);
|
||||
+ }
|
||||
+
|
||||
+ if (to)
|
||||
+ hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
|
||||
+
|
||||
+ /* There is no easy to way to check if we are wake already on
|
||||
+ * multiple futexes without waking through each one of them. So
|
||||
+ * just sleep and let the scheduler handle it.
|
||||
+ */
|
||||
+ if (!to || to->task)
|
||||
+ freezable_schedule();
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ /* If we were woken (and unqueued), we succeeded. */
|
||||
+ for (i = 0; i < count; i++)
|
||||
+ if (!unqueue_me(&qs[i]))
|
||||
+ ret = i;
|
||||
+
|
||||
+ /* Succeed wakeup */
|
||||
+ if (ret >= 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ /* Woken by triggered timeout */
|
||||
+ if (to && !to->task)
|
||||
+ goto out;
|
||||
+
|
||||
+ /*
|
||||
+ * We expect signal_pending(current), but we might be the
|
||||
+ * victim of a spurious wakeup as well.
|
||||
+ */
|
||||
+ if (!signal_pending(current))
|
||||
+ goto retry;
|
||||
+
|
||||
+ ret = -ERESTARTSYS;
|
||||
+ if (!abs_time)
|
||||
+ goto out;
|
||||
+
|
||||
+ ret = -ERESTART_RESTARTBLOCK;
|
||||
+ out:
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ kfree(qs);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int futex_wait_multiple(u32 __user *uaddr, unsigned int flags,
|
||||
+ u32 count, ktime_t *abs_time)
|
||||
+{
|
||||
+ struct futex_wait_block *wb;
|
||||
+ struct restart_block *restart;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!count)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ wb = kcalloc(count, sizeof(struct futex_wait_block), GFP_KERNEL);
|
||||
+ if (!wb)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ if (copy_from_user(wb, uaddr,
|
||||
+ count * sizeof(struct futex_wait_block))) {
|
||||
+ ret = -EFAULT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ret = do_futex_wait_multiple(wb, count, flags, abs_time);
|
||||
+
|
||||
+ if (ret == -ERESTART_RESTARTBLOCK) {
|
||||
+ restart = ¤t->restart_block;
|
||||
+ restart->fn = futex_wait_restart;
|
||||
+ restart->futex.uaddr = uaddr;
|
||||
+ restart->futex.val = count;
|
||||
+ restart->futex.time = *abs_time;
|
||||
+ restart->futex.flags = (flags | FLAGS_HAS_TIMEOUT |
|
||||
+ FLAGS_WAKE_MULTIPLE);
|
||||
+ }
|
||||
+
|
||||
+out:
|
||||
+ kfree(wb);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val,
|
||||
ktime_t *abs_time, u32 bitset)
|
||||
{
|
||||
@@ -2797,6 +2942,10 @@ static long futex_wait_restart(struct restart_block *restart)
|
||||
}
|
||||
restart->fn = do_no_restart_syscall;
|
||||
|
||||
+ if (restart->futex.flags & FLAGS_WAKE_MULTIPLE)
|
||||
+ return (long)futex_wait_multiple(uaddr, restart->futex.flags,
|
||||
+ restart->futex.val, tp);
|
||||
+
|
||||
return (long)futex_wait(uaddr, restart->futex.flags,
|
||||
restart->futex.val, tp, restart->futex.bitset);
|
||||
}
|
||||
@@ -3680,6 +3829,8 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
|
||||
uaddr2);
|
||||
case FUTEX_CMP_REQUEUE_PI:
|
||||
return futex_requeue(uaddr, flags, uaddr2, val, val2, &val3, 1);
|
||||
+ case FUTEX_WAIT_MULTIPLE:
|
||||
+ return futex_wait_multiple(uaddr, flags, val, timeout);
|
||||
}
|
||||
return -ENOSYS;
|
||||
}
|
||||
@@ -3696,7 +3847,8 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
|
||||
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
|
||||
cmd == FUTEX_WAIT_BITSET ||
|
||||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
|
||||
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
|
||||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
|
||||
if (unlikely(should_fail_futex(!(op & FUTEX_PRIVATE_FLAG))))
|
||||
return -EFAULT;
|
||||
if (get_timespec64(&ts, utime))
|
||||
@@ -3705,7 +3857,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
return -EINVAL;
|
||||
|
||||
t = timespec64_to_ktime(ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
t = ktime_add_safe(ktime_get(), t);
|
||||
tp = &t;
|
||||
}
|
||||
@@ -3889,14 +4041,15 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
|
||||
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
|
||||
cmd == FUTEX_WAIT_BITSET ||
|
||||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
|
||||
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
|
||||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
|
||||
if (get_old_timespec32(&ts, utime))
|
||||
return -EFAULT;
|
||||
if (!timespec64_valid(&ts))
|
||||
return -EINVAL;
|
||||
|
||||
t = timespec64_to_ktime(ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
t = ktime_add_safe(ktime_get(), t);
|
||||
tp = &t;
|
||||
}
|
||||
--
|
||||
2.20.1
|
7624
linux55-tkg/linux55-tkg-patches/0009-bmq_v5.5-r3.patch
Normal file
7624
linux55-tkg/linux55-tkg-patches/0009-bmq_v5.5-r3.patch
Normal file
File diff suppressed because it is too large
Load Diff
90
linux55-tkg/linux55-tkg-patches/0009-glitched-bmq.patch
Normal file
90
linux55-tkg/linux55-tkg-patches/0009-glitched-bmq.patch
Normal file
@ -0,0 +1,90 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - BMQ
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 9270a4370d54..30d01e647417 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -159,7 +159,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 100. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
/*
|
||||
* The total number of pages which are beyond the high watermark within all
|
||||
* zones.
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (55)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (63)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
43
linux55-tkg/linux55-tkg-patches/0011-ZFS-fix.patch
Normal file
43
linux55-tkg/linux55-tkg-patches/0011-ZFS-fix.patch
Normal file
@ -0,0 +1,43 @@
|
||||
From 1e010beda2896bdf3082fb37a3e49f8ce20e04d8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
|
||||
Date: Thu, 2 May 2019 05:28:08 +0100
|
||||
Subject: [PATCH] x86/fpu: Export kernel_fpu_{begin,end}() with
|
||||
EXPORT_SYMBOL_GPL
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We need these symbols in zfs as the fpu implementation breaks userspace:
|
||||
|
||||
https://github.com/zfsonlinux/zfs/issues/9346
|
||||
Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
|
||||
---
|
||||
arch/x86/kernel/fpu/core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
|
||||
index 12c70840980e..352538b3bb5d 100644
|
||||
--- a/arch/x86/kernel/fpu/core.c
|
||||
+++ b/arch/x86/kernel/fpu/core.c
|
||||
@@ -102,7 +102,7 @@ void kernel_fpu_begin(void)
|
||||
}
|
||||
__cpu_invalidate_fpregs_state();
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(kernel_fpu_begin);
|
||||
+EXPORT_SYMBOL(kernel_fpu_begin);
|
||||
|
||||
void kernel_fpu_end(void)
|
||||
{
|
||||
@@ -111,7 +111,7 @@ void kernel_fpu_end(void)
|
||||
this_cpu_write(in_kernel_fpu, false);
|
||||
preempt_enable();
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(kernel_fpu_end);
|
||||
+EXPORT_SYMBOL(kernel_fpu_end);
|
||||
|
||||
/*
|
||||
* Save the FPU state (mark it for reload if necessary):
|
||||
--
|
||||
2.23.0
|
||||
|
||||
|
1114
linux56-rc-tkg/PKGBUILD
Normal file
1114
linux56-rc-tkg/PKGBUILD
Normal file
File diff suppressed because it is too large
Load Diff
36
linux56-rc-tkg/README.md
Normal file
36
linux56-rc-tkg/README.md
Normal file
@ -0,0 +1,36 @@
|
||||
**Due to intel_pstate poor performances as of late, I have decided to disable it by default. It is still builtin though, and you can add `intel_pstate=enable` or `intel_pstate=passive` to your kernel command line (in GRUB for example) to either use plain intel_pstate governors or make use of acpi_cpufreq governors while keeping full support for turbo frequencies, respectively.**
|
||||
|
||||
A custom Linux kernel 5.6 RC with specific PDS, MuQSS and BMQ CPU schedulers related patchsets selector (stock CFS is also an option) and added tweaks for a nice interactivity/performance balance, aiming for the best gaming experience.
|
||||
|
||||
Various personalization options available and userpatches support (put your own patches in the same dir as the PKGBUILD, with the ".mypatch" extension.
|
||||
|
||||
MuQSS : http://ck-hack.blogspot.com/
|
||||
|
||||
BMQ : http://cchalpha.blogspot.com/
|
||||
|
||||
PDS-mq was originally created by Alfred Chen : http://cchalpha.blogspot.com/
|
||||
While he dropped it with kernel 5.1 in favor of its BMQ evolution/rework, my pretty bad gaming experiences with BMQ up to this point convinced me to keep PDS afloat for as long as it'll make sense/I'll be able to.
|
||||
|
||||
You can find prebuilts on chaotic-aur, but if you need the extra-spice of per-arch optimized prebuilts, you can find PDS and MuQSS variants daily builds here : https://repo.kitsuna.net/ - Thanks to LordKitsuna.
|
||||
|
||||
Comes with a slightly modified Arch config asking for a few core personalization settings at compilation time.
|
||||
If you want to streamline your kernel config for lower footprint and faster compilations : https://wiki.archlinux.org/index.php/Modprobed-db
|
||||
You can enable support for it at the beginning of the PKGBUILD file. Make sure to read everything you need to know about it.
|
||||
|
||||
## Other stuff included:
|
||||
- Per-CPU-arch native optimizations
|
||||
- memory management and swapping tweaks
|
||||
- scheduling tweaks
|
||||
- using prefered raid6 gen function directly
|
||||
- using lz4 algo for zswap by default
|
||||
- built-in Thinkpad hardware functions driver / embedded controller LPC3 functions / SMAPI support
|
||||
- optional "Zenify" patchset using core blk, mm and scheduler tweaks from Zen
|
||||
- CFS tweaks
|
||||
- using yeah TCP congestion algo by default
|
||||
- using cake network queue management system
|
||||
- using vm.max_map_count=262144 by default
|
||||
- intel E1000 fixes
|
||||
- cherry-picked clear linux patches
|
||||
- **optional** overrides for missing ACS capabilities
|
||||
- **optional** ZFS fpu symbols
|
||||
- **optional** Fsync support (proton)
|
175
linux56-rc-tkg/customization.cfg
Normal file
175
linux56-rc-tkg/customization.cfg
Normal file
@ -0,0 +1,175 @@
|
||||
# linux56-TkG config file
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux52-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux56-tkg.cfg
|
||||
|
||||
# Set to anything else than "true" to limit cleanup operations and keep source and files generated during compilation.
|
||||
# Default is "true".
|
||||
_NUKR="true"
|
||||
|
||||
# Custom compiler root dirs - Leave empty to use system compilers
|
||||
# Example: CUSTOM_GCC_PATH="/home/frog/PKGBUILDS/mostlyportable-gcc/gcc-mostlyportable-9.2.0"
|
||||
CUSTOM_GCC_PATH=""
|
||||
|
||||
# Set to the number corresponding to a predefined profile to use it. Current list of available profiles :
|
||||
# 1 - Custom (meaning nothing will be enforced and you get to configure everything)
|
||||
# 2 - Ryzen desktop (performance)
|
||||
# 3 - Generic Desktop (Performance)
|
||||
_OPTIPROFILE=""
|
||||
|
||||
# Set to true to bypass makepkg.conf and use all available threads for compilation. False will respect your makepkg.conf options.
|
||||
_force_all_threads="true"
|
||||
|
||||
# Set to true to use modprobed db to clean config from unneeded modules. Speeds up compilation considerably. Requires root - https://wiki.archlinux.org/index.php/Modprobed-db
|
||||
# !!!! Make sure to have a well populated db !!!! - Leave empty to be asked about it at build time
|
||||
_modprobeddb="false"
|
||||
|
||||
# Set to "1" to call make menuconfig or "2" to call make nconfig before building the kernel. Set to false to disable and skip the prompt.
|
||||
_menunconfig=""
|
||||
|
||||
# Set to true to generate a kernel config fragment from your changes in menuconfig/nconfig. Set to false to disable and skip the prompt.
|
||||
_diffconfig=""
|
||||
|
||||
# Set to the file name where the generated config fragment should be written to. Only used if _diffconfig is active.
|
||||
_diffconfig_name=""
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64" and Arch hardened is "config_hardened.x86_64".
|
||||
# To get a complete hardened setup, you have to use "cfs" as _cpusched
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# CPU scheduler - Options are "pds", muqss, "bmq", "cfs" or "cfsturbo" (experimental, for power CPUs https://lkml.org/lkml/2019/7/25/296)
|
||||
# "pds" is the recommended option for gaming
|
||||
_cpusched=""
|
||||
|
||||
# CPU sched_yield_type - Choose what sort of yield sched_yield will perform
|
||||
# For PDS and MuQSS: 0: No yield. (Recommended option for gaming on PDS and MuQSS)
|
||||
# 1: Yield only to better priority/deadline tasks. (Default - can be unstable with PDS on some platforms)
|
||||
# 2: Expire timeslice and recalculate deadline. (Usually the slowest option for PDS and MuQSS, not recommended)
|
||||
# For BMQ: 0: No yield.
|
||||
# 1: Deboost and requeue task. (Default)
|
||||
# 2: Set rq skip task.
|
||||
_sched_yield_type=""
|
||||
|
||||
# Round Robin interval is the longest duration two tasks with the same nice level will be delayed for. When CPU time is requested by a task, it receives a time slice equal
|
||||
# to the rr_interval in addition to a virtual deadline. When using yield_type 2, a low value can help offset the disadvantages of rescheduling a process that has yielded.
|
||||
# MuQSS default: 6ms"
|
||||
# PDS default: 4ms"
|
||||
# BMQ default: 4ms"
|
||||
# Set to "1" for 2ms, "2" for 4ms, "3" for 6ms, "4" for 8ms, or "default" to keep the chosen scheduler defaults.
|
||||
_rr_interval=""
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "1" to use CattaRappa mode (enabling full tickless), "2" for tickless idle only, or "0" for periodic ticks.
|
||||
# Full tickless can give higher performances in various cases but, depending on hardware, lower consistency. Just tickless idle can perform better on some platforms (mostly AMD based).
|
||||
_tickless=""
|
||||
|
||||
# Setting this to to "true" can improve latency on PDS (at the cost of throughput) and improve throughput on other schedulers (at the cost of latency) - Can improve VMs performance - Kernel default is "false"
|
||||
_voluntary_preempt=""
|
||||
|
||||
# Set to "true" to enable Device Tree and Open Firmware support. If you don't know about it, you don't need it - Default is "false"
|
||||
_OFenable="false"
|
||||
|
||||
# Set to "true" to use ACS override patch - https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#Bypassing_the_IOMMU_groups_.28ACS_override_patch.29 - Kernel default is "false"
|
||||
_acs_override=""
|
||||
|
||||
# Enable builtin Thinkpad series absolute trackpad as well as SMAPI and EC support drivers, for features such as battery charging control. For more information about this driver see http://www.thinkwiki.org/wiki/tp_smapi
|
||||
_tp_smapi_ec="false"
|
||||
|
||||
# Set to "true" to add back missing symbol for AES-NI/AVX support on ZFS - https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions.patch - Kernel default is "false"
|
||||
_zfsfix=""
|
||||
|
||||
# Set to "true" to enable support for fsync, an experimental replacement for esync found in Valve Proton 4.11+ - https://steamcommunity.com/games/221410/announcements/detail/2957094910196249305
|
||||
_fsync=""
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "1"
|
||||
_compileroptlevel="1"
|
||||
|
||||
# CPU compiler optimizations - Defaults to generic optimizations if left empty
|
||||
# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2"
|
||||
# Intel CPUs : "mpsc"(P4 & older Netburst based Xeon) "atom" "core2" "nehalem" "westmere" "silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylakex" "cannonlake" "icelake" "goldmont" "goldmontplus" "cascadelake"
|
||||
# Other options :
|
||||
# - "generic" (to share the package between machines with different CPUs)
|
||||
# - "native" (use compiler autodetection and will prompt for P6_NOPS - Selecting your arch manually in the list above is recommended instead of this option)
|
||||
_processor_opt=""
|
||||
|
||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# MuQSS and PDS only - SMT (Hyperthreading) aware nice priority and policy support (SMT_NICE) - Kernel default is "true" - You can disable this on non-SMT/HT CPUs for lower overhead
|
||||
_smt_nice=""
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# MuQSS only - CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "smt"
|
||||
_runqueue_sharing=""
|
||||
|
||||
# Timer frequency - "100" "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "500" - For MuQSS, 100Hz is recommended
|
||||
_timer_freq=""
|
||||
|
||||
# Default CPU governor - "performance", "ondemand", "schedutil" or leave empty for default (schedutil)
|
||||
_default_cpu_gov="ondemand"
|
||||
|
||||
# Use an aggressive ondemand governor instead of default ondemand to improve performance on low loads/high core count CPUs while keeping some power efficiency from frequency scaling.
|
||||
# It still requires you to either set ondemand as default governor or to select it some way.
|
||||
_aggressive_ondemand="true"
|
||||
|
||||
# On some platforms, an acpi_cpufreq bug affects performance negatively. Set to "true" to disable it as a workaround, but it will use more power.
|
||||
# https://github.com/Tk-Glitch/PKGBUILDS/issues/263
|
||||
_disable_acpi_cpufreq=""
|
||||
|
||||
# You can pass a default set of kernel command line options here - example: "intel_pstate=passive nowatchdog amdgpu.ppfeaturemask=0xfffd7fff mitigations=off"
|
||||
_custom_commandline="intel_pstate=passive"
|
||||
|
||||
|
||||
#### SPESHUL OPTION ####
|
||||
|
||||
# If you want to bypass the stock naming scheme and enforce something else (example : "linux") - Useful for some bootloaders requiring manual entry editing on each release.
|
||||
# !!! It will also change pkgname - If you don't explicitely need this, don't use it !!!
|
||||
_custom_pkgbase=""
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# community patches - add patches (separated by a space) of your choice by name from the community-patches dir
|
||||
# example: _community_patches="clear_nack_in_tend_isr.myrevert ffb_regression_fix.mypatch 0008-drm-amd-powerplay-force-the-trim-of-the-mclk-dpm-levels-if-OD-is-enabled.mypatch"
|
||||
_community_patches=""
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
||||
|
||||
|
||||
#### CONFIG FRAGMENTS ####
|
||||
|
||||
# You can use your own kernel config fragments by putting them in the same folder as the PKGBUILD and giving them the .myfrag extension.
|
||||
|
||||
# Also, the config fragments variable below must be set to true for the above to work.
|
||||
_config_fragments="true"
|
||||
|
||||
# Apply all config fragments without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_config_fragments_no_confirm="false"
|
10751
linux56-rc-tkg/linux56-tkg-config/config.x86_64
Normal file
10751
linux56-rc-tkg/linux56-tkg-config/config.x86_64
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,55 @@
|
||||
# linux56-TkG config file
|
||||
# Generic Desktop
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux50-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux55-tkg.cfg
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64".
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "true" to use explicit preemption points to lower latency at the cost of a small throughput loss - Can give a nice perf boost in VMs - Kernel default is "false"
|
||||
_voluntary_preempt="false"
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="1"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "mc"
|
||||
_runqueue_sharing="mc"
|
||||
|
||||
# Timer frequency - "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "750"
|
||||
_timer_freq="500"
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
58
linux56-rc-tkg/linux56-tkg-config/ryzen-desktop-profile.cfg
Normal file
58
linux56-rc-tkg/linux56-tkg-config/ryzen-desktop-profile.cfg
Normal file
@ -0,0 +1,58 @@
|
||||
# linux56-TkG config file
|
||||
# Ryzen Desktop
|
||||
|
||||
|
||||
#### MISC OPTIONS ####
|
||||
|
||||
# External config file to use - If the given file exists in path, it will override default config (customization.cfg) - Default is ~/.config/frogminer/linux52-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux55-tkg.cfg
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use from the linux???-tkg-config folder. Arch default is "config.x86_64".
|
||||
_configfile="config.x86_64"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# Set to "true" to disable FUNCTION_TRACER/GRAPH_TRACER, lowering overhead but limiting debugging and analyzing of kernel functions - Kernel default is "false"
|
||||
_ftracedisable="false"
|
||||
|
||||
# Set to "true" to disable NUMA, lowering overhead, but breaking CUDA/NvEnc on Nvidia equipped systems - Kernel default is "false"
|
||||
_numadisable="false"
|
||||
|
||||
# Set to "true" to use explicit preemption points to lower latency at the cost of a small throughput loss - Can give a nice perf boost in VMs - Kernel default is "false"
|
||||
_voluntary_preempt="false"
|
||||
|
||||
# A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience (ZENIFY) - Default is "true"
|
||||
_zenify="true"
|
||||
|
||||
# compiler optimization level - 1. Optimize for performance (-O2); 2. Optimize harder (-O3); 3. Optimize for size (-Os) - Kernel default is "2"
|
||||
_compileroptlevel="1"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="false"
|
||||
|
||||
# CPU scheduler runqueue sharing - No sharing (RQ_NONE), SMT (hyperthread) siblings (RQ_SMT), Multicore siblings (RQ_MC), Symmetric Multi-Processing (RQ_SMP), NUMA (RQ_ALL)
|
||||
# Valid values are "none", "smt", "mc", "mc-llc"(for zen), "smp", "all" - Kernel default is "mc"
|
||||
_runqueue_sharing="mc-llc"
|
||||
|
||||
# Timer frequency - "500", "750" or "1000" - More options available in kernel config prompt when left empty depending on selected cpusched - Kernel default is "500"
|
||||
_timer_freq="500"
|
||||
|
||||
# Default CPU governor - "performance", "ondemand" (tweaked), "schedutil" or leave empty for default (schedutil on AMD and legacy Intel, intel_pstate on modern Intel) - Enforcing an option will disable intel_pstate altogether!
|
||||
_default_cpu_gov="performance"
|
||||
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
||||
# You can use your own patches by putting them in the same folder as the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in the same folder as the PKGBUILD and giving them the .myrevert extension.
|
||||
|
||||
# Also, userpatches variable below must be set to true for the above to work.
|
||||
_user_patches="true"
|
||||
|
||||
# Apply all user patches without confirmation - !!! NOT RECOMMENDED !!!
|
||||
_user_patches_no_confirm="false"
|
@ -0,0 +1,156 @@
|
||||
From 5ec2dd3a095442ec1a21d86042a4994f2ba24e63 Mon Sep 17 00:00:00 2001
|
||||
Message-Id: <5ec2dd3a095442ec1a21d86042a4994f2ba24e63.1512651251.git.jan.steffens@gmail.com>
|
||||
From: Serge Hallyn <serge.hallyn@canonical.com>
|
||||
Date: Fri, 31 May 2013 19:12:12 +0100
|
||||
Subject: [PATCH] add sysctl to disallow unprivileged CLONE_NEWUSER by default
|
||||
|
||||
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
[bwh: Remove unneeded binary sysctl bits]
|
||||
Signed-off-by: Daniel Micay <danielmicay@gmail.com>
|
||||
---
|
||||
kernel/fork.c | 15 +++++++++++++++
|
||||
kernel/sysctl.c | 12 ++++++++++++
|
||||
kernel/user_namespace.c | 3 +++
|
||||
3 files changed, 30 insertions(+)
|
||||
|
||||
diff --git a/kernel/fork.c b/kernel/fork.c
|
||||
index 07cc743698d3668e..4011d68a8ff9305c 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -102,6 +102,11 @@
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/task.h>
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#else
|
||||
+#define unprivileged_userns_clone 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Minimum number of threads to boot the kernel
|
||||
@@ -1555,6 +1560,10 @@ static __latent_entropy struct task_struct *copy_process(
|
||||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
+ if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone)
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ return ERR_PTR(-EPERM);
|
||||
+
|
||||
/*
|
||||
* Thread groups must share signals as well, and detached threads
|
||||
* can only be started up within the thread group.
|
||||
@@ -2348,6 +2357,12 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
|
||||
if (unshare_flags & CLONE_NEWNS)
|
||||
unshare_flags |= CLONE_FS;
|
||||
|
||||
+ if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) {
|
||||
+ err = -EPERM;
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ goto bad_unshare_out;
|
||||
+ }
|
||||
+
|
||||
err = check_unshare_flags(unshare_flags);
|
||||
if (err)
|
||||
goto bad_unshare_out;
|
||||
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
|
||||
index b86520ed3fb60fbf..f7dab3760839f1a1 100644
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -105,6 +105,9 @@ extern int core_uses_pid;
|
||||
extern char core_pattern[];
|
||||
extern unsigned int core_pipe_limit;
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
extern int pid_max;
|
||||
extern int pid_max_min, pid_max_max;
|
||||
extern int percpu_pagelist_fraction;
|
||||
@@ -513,6 +516,15 @@ static struct ctl_table kern_table[] = {
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+ {
|
||||
+ .procname = "unprivileged_userns_clone",
|
||||
+ .data = &unprivileged_userns_clone,
|
||||
+ .maxlen = sizeof(int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = proc_dointvec,
|
||||
+ },
|
||||
+#endif
|
||||
#ifdef CONFIG_PROC_SYSCTL
|
||||
{
|
||||
.procname = "tainted",
|
||||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
|
||||
index c490f1e4313b998a..dd03bd39d7bf194d 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -24,6 +24,9 @@
|
||||
#include <linux/projid.h>
|
||||
#include <linux/fs_struct.h>
|
||||
|
||||
+/* sysctl */
|
||||
+int unprivileged_userns_clone;
|
||||
+
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
||||
|
||||
--
|
||||
2.15.1
|
||||
|
||||
From b5202296055dd333db4425120d3f93ef4e6a0573 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Thu, 7 Dec 2017 13:50:48 +0100
|
||||
Subject: ZEN: Add CONFIG for unprivileged_userns_clone
|
||||
|
||||
This way our default behavior continues to match the vanilla kernel.
|
||||
---
|
||||
init/Kconfig | 16 ++++++++++++++++
|
||||
kernel/user_namespace.c | 4 ++++
|
||||
2 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 4592bf7997c0..f3df02990aff 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1004,6 +1004,22 @@ config USER_NS
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
+config USER_NS_UNPRIVILEGED
|
||||
+ bool "Allow unprivileged users to create namespaces"
|
||||
+ default y
|
||||
+ depends on USER_NS
|
||||
+ help
|
||||
+ When disabled, unprivileged users will not be able to create
|
||||
+ new namespaces. Allowing users to create their own namespaces
|
||||
+ has been part of several recent local privilege escalation
|
||||
+ exploits, so if you need user namespaces but are
|
||||
+ paranoid^Wsecurity-conscious you want to disable this.
|
||||
+
|
||||
+ This setting can be overridden at runtime via the
|
||||
+ kernel.unprivileged_userns_clone sysctl.
|
||||
+
|
||||
+ If unsure, say Y.
|
||||
+
|
||||
config PID_NS
|
||||
bool "PID Namespaces"
|
||||
default y
|
||||
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
|
||||
index 6b9dbc257e34..107b17f0d528 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -27,7 +27,11 @@
|
||||
#include <linux/sort.h>
|
||||
|
||||
/* sysctl */
|
||||
+#ifdef CONFIG_USER_NS_UNPRIVILEGED
|
||||
+int unprivileged_userns_clone = 1;
|
||||
+#else
|
||||
int unprivileged_userns_clone;
|
||||
+#endif
|
||||
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
354
linux56-rc-tkg/linux56-tkg-patches/0002-clear-patches.patch
Normal file
354
linux56-rc-tkg/linux56-tkg-patches/0002-clear-patches.patch
Normal file
@ -0,0 +1,354 @@
|
||||
From 2ac70785613ef4c6b16414986bb18bd7b60d2a13 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Mon, 14 Mar 2016 11:10:58 -0600
|
||||
Subject: [PATCH] pci pme wakeups
|
||||
|
||||
Reduce wakeups for PME checks, which are a workaround for miswired
|
||||
boards (sadly, too many of them) in laptops.
|
||||
---
|
||||
drivers/pci/pci.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
|
||||
index c25acace7d91..0ddebdad9f5b 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -61,7 +61,7 @@ struct pci_pme_device {
|
||||
struct pci_dev *dev;
|
||||
};
|
||||
|
||||
-#define PME_TIMEOUT 1000 /* How long between PME checks */
|
||||
+#define PME_TIMEOUT 4000 /* How long between PME checks */
|
||||
|
||||
static void pci_dev_d3_sleep(struct pci_dev *dev)
|
||||
{
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From 7e7e36c67aa71d6a1ec5676d99d37c1fea389ceb Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sat, 19 Mar 2016 21:32:19 -0400
|
||||
Subject: [PATCH] intel_idle: tweak cpuidle cstates
|
||||
|
||||
Increase target_residency in cpuidle cstate
|
||||
|
||||
Tune intel_idle to be a bit less agressive;
|
||||
Clear linux is cleaner in hygiene (wakupes) than the average linux,
|
||||
so we can afford changing these in a way that increases
|
||||
performance while keeping power efficiency
|
||||
---
|
||||
drivers/idle/intel_idle.c | 44 +++++++++++++++++++--------------------
|
||||
1 file changed, 22 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/idle/intel_idle.c b/drivers/idle/intel_idle.c
|
||||
index 8b5d85c91e9d..5e2d813a048d 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -466,7 +466,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -474,7 +474,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 33,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 900,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -482,7 +482,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 133,
|
||||
- .target_residency = 400,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -490,7 +490,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x32",
|
||||
.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 166,
|
||||
- .target_residency = 500,
|
||||
+ .target_residency = 1500,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -498,7 +498,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 300,
|
||||
- .target_residency = 900,
|
||||
+ .target_residency = 2000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -506,7 +506,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 600,
|
||||
- .target_residency = 1800,
|
||||
+ .target_residency = 5000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -514,7 +514,7 @@ static struct cpuidle_state hsw_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 2600,
|
||||
- .target_residency = 7700,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -534,7 +534,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -542,7 +542,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 40,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -550,7 +550,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 133,
|
||||
- .target_residency = 400,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -558,7 +558,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x32",
|
||||
.flags = MWAIT2flg(0x32) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 166,
|
||||
- .target_residency = 500,
|
||||
+ .target_residency = 2000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -566,7 +566,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 300,
|
||||
- .target_residency = 900,
|
||||
+ .target_residency = 4000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -574,7 +574,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 600,
|
||||
- .target_residency = 1800,
|
||||
+ .target_residency = 7000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -582,7 +582,7 @@ static struct cpuidle_state bdw_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 2600,
|
||||
- .target_residency = 7700,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -603,7 +603,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -611,7 +611,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x10",
|
||||
.flags = MWAIT2flg(0x10) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 70,
|
||||
- .target_residency = 100,
|
||||
+ .target_residency = 1000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -619,7 +619,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x20",
|
||||
.flags = MWAIT2flg(0x20) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 85,
|
||||
- .target_residency = 200,
|
||||
+ .target_residency = 600,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -627,7 +627,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x33",
|
||||
.flags = MWAIT2flg(0x33) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 124,
|
||||
- .target_residency = 800,
|
||||
+ .target_residency = 3000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -635,7 +635,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x40",
|
||||
.flags = MWAIT2flg(0x40) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 200,
|
||||
- .target_residency = 800,
|
||||
+ .target_residency = 3200,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -643,7 +643,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x50",
|
||||
.flags = MWAIT2flg(0x50) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 480,
|
||||
- .target_residency = 5000,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -651,7 +651,7 @@ static struct cpuidle_state skl_cstates[] = {
|
||||
.desc = "MWAIT 0x60",
|
||||
.flags = MWAIT2flg(0x60) | CPUIDLE_FLAG_TLB_FLUSHED,
|
||||
.exit_latency = 890,
|
||||
- .target_residency = 5000,
|
||||
+ .target_residency = 9000,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -672,7 +672,7 @@ static struct cpuidle_state skx_cstates[] = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01),
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 300,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From b8211d4f79dd88dfc2d4bd52be46103ea0b70e3e Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Fri, 6 Jan 2017 15:34:09 +0000
|
||||
Subject: [PATCH] ipv4/tcp: allow the memory tuning for tcp to go a little
|
||||
bigger than default
|
||||
|
||||
---
|
||||
net/ipv4/tcp.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c
|
||||
index cf3c5095c10e..b30d51837b2d 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -3897,8 +3897,8 @@ void __init tcp_init(void)
|
||||
tcp_init_mem();
|
||||
/* Set per-socket limits to no more than 1/128 the pressure threshold */
|
||||
limit = nr_free_buffer_pages() << (PAGE_SHIFT - 7);
|
||||
- max_wshare = min(4UL*1024*1024, limit);
|
||||
- max_rshare = min(6UL*1024*1024, limit);
|
||||
+ max_wshare = min(16UL*1024*1024, limit);
|
||||
+ max_rshare = min(16UL*1024*1024, limit);
|
||||
|
||||
init_net.ipv4.sysctl_tcp_wmem[0] = SK_MEM_QUANTUM;
|
||||
init_net.ipv4.sysctl_tcp_wmem[1] = 16*1024;
|
||||
--
|
||||
2.20.1
|
||||
|
||||
From 050223869257b87e22636158a80da38d877248ed Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sun, 18 Feb 2018 23:35:41 +0000
|
||||
Subject: [PATCH] locking: rwsem: spin faster
|
||||
|
||||
tweak rwsem owner spinning a bit
|
||||
---
|
||||
kernel/locking/rwsem.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
|
||||
index eef04551eae7..1ec5ab4c8ff7 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -720,6 +720,7 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
struct task_struct *new, *owner;
|
||||
unsigned long flags, new_flags;
|
||||
enum owner_state state;
|
||||
+ int i = 0;
|
||||
|
||||
owner = rwsem_owner_flags(sem, &flags);
|
||||
state = rwsem_owner_state(owner, flags, nonspinnable);
|
||||
@@ -753,7 +754,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
From b836ea320114643d4354b43acb6ec8bb06ada487 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Thu, 2 Jun 2016 23:36:32 -0500
|
||||
Subject: [PATCH] drivers: Initialize ata before graphics
|
||||
|
||||
ATA init is the long pole in the boot process, and its asynchronous.
|
||||
move the graphics init after it so that ata and graphics initialize
|
||||
in parallel
|
||||
---
|
||||
drivers/Makefile | 15 ++++++++-------
|
||||
1 file changed, 8 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/Makefile b/drivers/Makefile
|
||||
index aaef17cc6512..d08f3a394929 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -58,15 +58,8 @@ obj-y += char/
|
||||
# iommu/ comes before gpu as gpu are using iommu controllers
|
||||
obj-y += iommu/
|
||||
|
||||
-# gpu/ comes after char for AGP vs DRM startup and after iommu
|
||||
-obj-y += gpu/
|
||||
-
|
||||
obj-$(CONFIG_CONNECTOR) += connector/
|
||||
|
||||
-# i810fb and intelfb depend on char/agp/
|
||||
-obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
-obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
|
||||
-
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-$(CONFIG_NVM) += lightnvm/
|
||||
obj-y += base/ block/ misc/ mfd/ nfc/
|
||||
@@ -79,6 +72,14 @@ obj-$(CONFIG_IDE) += ide/
|
||||
obj-y += scsi/
|
||||
obj-y += nvme/
|
||||
obj-$(CONFIG_ATA) += ata/
|
||||
+
|
||||
+# gpu/ comes after char for AGP vs DRM startup and after iommu
|
||||
+obj-y += gpu/
|
||||
+
|
||||
+# i810fb and intelfb depend on char/agp/
|
||||
+obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
+obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
|
||||
+
|
||||
obj-$(CONFIG_TARGET_CORE) += target/
|
||||
obj-$(CONFIG_MTD) += mtd/
|
||||
obj-$(CONFIG_SPI) += spi/
|
1459
linux56-rc-tkg/linux56-tkg-patches/0003-glitched-base.patch
Normal file
1459
linux56-rc-tkg/linux56-tkg-patches/0003-glitched-base.patch
Normal file
File diff suppressed because it is too large
Load Diff
72
linux56-rc-tkg/linux56-tkg-patches/0003-glitched-cfs.patch
Normal file
72
linux56-rc-tkg/linux56-tkg-patches/0003-glitched-cfs.patch
Normal file
@ -0,0 +1,72 @@
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
12561
linux56-rc-tkg/linux56-tkg-patches/0004-5.6-ck1.patch
Normal file
12561
linux56-rc-tkg/linux56-tkg-patches/0004-5.6-ck1.patch
Normal file
File diff suppressed because it is too large
Load Diff
78
linux56-rc-tkg/linux56-tkg-patches/0004-glitched-muqss.patch
Normal file
78
linux56-rc-tkg/linux56-tkg-patches/0004-glitched-muqss.patch
Normal file
@ -0,0 +1,78 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - MuQSS
|
||||
|
||||
diff --git a/kernel/sched/MuQSS.c b/kernel/sched/MuQSS.c
|
||||
index 84a1d08d68551..57c3036a68952 100644
|
||||
--- a/kernel/sched/MuQSS.c
|
||||
+++ b/kernel/sched/MuQSS.c
|
||||
@@ -163,7 +167,11 @@ int sched_interactive __read_mostly = 1;
|
||||
* are allowed to run five seconds as real time tasks. This is the total over
|
||||
* all online cpus.
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int sched_iso_cpu __read_mostly = 25;
|
||||
+#else
|
||||
int sched_iso_cpu __read_mostly = 70;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* sched_yield_type - Choose what sort of yield sched_yield will perform.
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -5,7 +5,7 @@
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
default HZ_100 if SCHED_MUQSS
|
||||
- default HZ_250_NODEF if !SCHED_MUQSS
|
||||
+ default HZ_500_NODEF if !SCHED_MUQSS
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -50,6 +50,20 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500_NODEF
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
+ config HZ_750_NODEF
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000_NODEF
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -63,6 +70,8 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250_NODEF
|
||||
default 300 if HZ_300_NODEF
|
||||
+ default 500 if HZ_500_NODEF
|
||||
+ default 750 if HZ_750_NODEF
|
||||
default 1000 if HZ_1000_NODEF
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index d4d36c61940b..4a9dfe471f1f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -15,7 +15,6 @@ NAME = Kleptomaniac Octopus
|
||||
|
||||
CKVERSION = -ck1
|
||||
CKNAME = MuQSS Powered
|
||||
-EXTRAVERSION := $(EXTRAVERSION)$(CKVERSION)
|
||||
|
||||
# We are using a recursive build, so we need to do a little thinking
|
||||
# to get the ordering right.
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (80)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (45)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (45)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (55)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (63)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
166
linux56-rc-tkg/linux56-tkg-patches/0005-glitched-pds.patch
Normal file
166
linux56-rc-tkg/linux56-tkg-patches/0005-glitched-pds.patch
Normal file
@ -0,0 +1,166 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - PDS
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 9270a4370d54..30d01e647417 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -159,7 +159,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 100. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
/*
|
||||
* The total number of pages which are beyond the high watermark within all
|
||||
* zones.
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 11fd9b502d06..e9bc34d3019b 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -715,6 +715,7 @@ menu "Scheduler features"
|
||||
config UCLAMP_TASK
|
||||
bool "Enable utilization clamping for RT/FAIR tasks"
|
||||
depends on CPU_FREQ_GOV_SCHEDUTIL
|
||||
+ depends on !SCHED_PDS
|
||||
help
|
||||
This feature enables the scheduler to track the clamped utilization
|
||||
of each CPU based on RUNNABLE tasks scheduled on that CPU.
|
||||
@@ -948,7 +948,6 @@ config CGROUP_DEVICE
|
||||
|
||||
config CGROUP_CPUACCT
|
||||
bool "Simple CPU accounting controller"
|
||||
- depends on !SCHED_PDS
|
||||
help
|
||||
Provides a simple controller for monitoring the
|
||||
total CPU consumed by the tasks in a cgroup.
|
||||
diff --git a/kernel/sched/Makefile b/kernel/sched/Makefile
|
||||
index b23231bae996..cab4e5c5b38e 100644
|
||||
--- a/kernel/sched/Makefile
|
||||
+++ b/kernel/sched/Makefile
|
||||
@@ -24,13 +24,13 @@ obj-y += fair.o rt.o deadline.o
|
||||
obj-$(CONFIG_SMP) += cpudeadline.o topology.o stop_task.o
|
||||
obj-$(CONFIG_SCHED_AUTOGROUP) += autogroup.o
|
||||
obj-$(CONFIG_SCHED_DEBUG) += debug.o
|
||||
-obj-$(CONFIG_CGROUP_CPUACCT) += cpuacct.o
|
||||
endif
|
||||
obj-y += loadavg.o clock.o cputime.o
|
||||
obj-y += idle.o
|
||||
obj-y += wait.o wait_bit.o swait.o completion.o
|
||||
obj-$(CONFIG_SMP) += cpupri.o pelt.o
|
||||
obj-$(CONFIG_SCHEDSTATS) += stats.o
|
||||
+obj-$(CONFIG_CGROUP_CPUACCT) += cpuacct.o
|
||||
obj-$(CONFIG_CPU_FREQ) += cpufreq.o
|
||||
obj-$(CONFIG_CPU_FREQ_GOV_SCHEDUTIL) += cpufreq_schedutil.o
|
||||
obj-$(CONFIG_MEMBARRIER) += membarrier.o
|
||||
|
||||
diff --git a/kernel/sched/pds.c b/kernel/sched/pds.c
|
||||
index 9281ad164..f09a609cf 100644
|
||||
--- a/kernel/sched/pds.c
|
||||
+++ b/kernel/sched/pds.c
|
||||
@@ -81,6 +81,18 @@ enum {
|
||||
NR_CPU_AFFINITY_CHK_LEVEL
|
||||
};
|
||||
|
||||
+/*
|
||||
+ * This allows printing both to /proc/sched_debug and
|
||||
+ * to the console
|
||||
+ */
|
||||
+#define SEQ_printf(m, x...) \
|
||||
+ do { \
|
||||
+ if (m) \
|
||||
+ seq_printf(m, x); \
|
||||
+ else \
|
||||
+ pr_cont(x); \
|
||||
+ } while (0)
|
||||
+
|
||||
static inline void print_scheduler_version(void)
|
||||
{
|
||||
printk(KERN_INFO "pds: PDS-mq CPU Scheduler 0.99o by Alfred Chen.\n");
|
||||
@@ -6353,7 +6365,10 @@ void ia64_set_curr_task(int cpu, struct task_struct *p)
|
||||
#ifdef CONFIG_SCHED_DEBUG
|
||||
void proc_sched_show_task(struct task_struct *p, struct pid_namespace *ns,
|
||||
struct seq_file *m)
|
||||
-{}
|
||||
+{
|
||||
+ SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, task_pid_nr_ns(p, ns),
|
||||
+ get_nr_threads(p));
|
||||
+}
|
||||
|
||||
void proc_sched_set_task(struct task_struct *p)
|
||||
{}
|
8369
linux56-rc-tkg/linux56-tkg-patches/0005-v5.6_undead-pds099o.patch
Normal file
8369
linux56-rc-tkg/linux56-tkg-patches/0005-v5.6_undead-pds099o.patch
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,192 @@
|
||||
From cdeab384f48dd9c88e2dff2e9ad8d57dca1a1b1c Mon Sep 17 00:00:00 2001
|
||||
From: Mark Weiman <mark.weiman@markzz.com>
|
||||
Date: Sun, 12 Aug 2018 11:36:21 -0400
|
||||
Subject: [PATCH] pci: Enable overrides for missing ACS capabilities
|
||||
|
||||
This an updated version of Alex Williamson's patch from:
|
||||
https://lkml.org/lkml/2013/5/30/513
|
||||
|
||||
Original commit message follows:
|
||||
|
||||
PCIe ACS (Access Control Services) is the PCIe 2.0+ feature that
|
||||
allows us to control whether transactions are allowed to be redirected
|
||||
in various subnodes of a PCIe topology. For instance, if two
|
||||
endpoints are below a root port or downsteam switch port, the
|
||||
downstream port may optionally redirect transactions between the
|
||||
devices, bypassing upstream devices. The same can happen internally
|
||||
on multifunction devices. The transaction may never be visible to the
|
||||
upstream devices.
|
||||
|
||||
One upstream device that we particularly care about is the IOMMU. If
|
||||
a redirection occurs in the topology below the IOMMU, then the IOMMU
|
||||
cannot provide isolation between devices. This is why the PCIe spec
|
||||
encourages topologies to include ACS support. Without it, we have to
|
||||
assume peer-to-peer DMA within a hierarchy can bypass IOMMU isolation.
|
||||
|
||||
Unfortunately, far too many topologies do not support ACS to make this
|
||||
a steadfast requirement. Even the latest chipsets from Intel are only
|
||||
sporadically supporting ACS. We have trouble getting interconnect
|
||||
vendors to include the PCIe spec required PCIe capability, let alone
|
||||
suggested features.
|
||||
|
||||
Therefore, we need to add some flexibility. The pcie_acs_override=
|
||||
boot option lets users opt-in specific devices or sets of devices to
|
||||
assume ACS support. The "downstream" option assumes full ACS support
|
||||
on root ports and downstream switch ports. The "multifunction"
|
||||
option assumes the subset of ACS features available on multifunction
|
||||
endpoints and upstream switch ports are supported. The "id:nnnn:nnnn"
|
||||
option enables ACS support on devices matching the provided vendor
|
||||
and device IDs, allowing more strategic ACS overrides. These options
|
||||
may be combined in any order. A maximum of 16 id specific overrides
|
||||
are available. It's suggested to use the most limited set of options
|
||||
necessary to avoid completely disabling ACS across the topology.
|
||||
Note to hardware vendors, we have facilities to permanently quirk
|
||||
specific devices which enforce isolation but not provide an ACS
|
||||
capability. Please contact me to have your devices added and save
|
||||
your customers the hassle of this boot option.
|
||||
|
||||
Signed-off-by: Mark Weiman <mark.weiman@markzz.com>
|
||||
---
|
||||
.../admin-guide/kernel-parameters.txt | 9 ++
|
||||
drivers/pci/quirks.c | 101 ++++++++++++++++++
|
||||
2 files changed, 110 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index aefd358a5ca3..173b3596fd9e 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -3190,6 +3190,15 @@
|
||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||
enabled, this kernel boot option can be used to
|
||||
disable the use of MSI interrupts system-wide.
|
||||
+ pcie_acs_override =
|
||||
+ [PCIE] Override missing PCIe ACS support for:
|
||||
+ downstream
|
||||
+ All downstream ports - full ACS capabilities
|
||||
+ multifunction
|
||||
+ All multifunction devices - multifunction ACS subset
|
||||
+ id:nnnn:nnnn
|
||||
+ Specific device - full ACS capabilities
|
||||
+ Specified as vid:did (vendor/device ID) in hex
|
||||
noioapicquirk [APIC] Disable all boot interrupt quirks.
|
||||
Safety option to keep boot IRQs enabled. This
|
||||
should never be necessary.
|
||||
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
|
||||
index 4700d24e5d55..8f7a3d7fd9c1 100644
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -3372,6 +3372,106 @@ static void quirk_no_bus_reset(struct pci_dev *dev)
|
||||
dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
|
||||
}
|
||||
|
||||
+static bool acs_on_downstream;
|
||||
+static bool acs_on_multifunction;
|
||||
+
|
||||
+#define NUM_ACS_IDS 16
|
||||
+struct acs_on_id {
|
||||
+ unsigned short vendor;
|
||||
+ unsigned short device;
|
||||
+};
|
||||
+static struct acs_on_id acs_on_ids[NUM_ACS_IDS];
|
||||
+static u8 max_acs_id;
|
||||
+
|
||||
+static __init int pcie_acs_override_setup(char *p)
|
||||
+{
|
||||
+ if (!p)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ while (*p) {
|
||||
+ if (!strncmp(p, "downstream", 10))
|
||||
+ acs_on_downstream = true;
|
||||
+ if (!strncmp(p, "multifunction", 13))
|
||||
+ acs_on_multifunction = true;
|
||||
+ if (!strncmp(p, "id:", 3)) {
|
||||
+ char opt[5];
|
||||
+ int ret;
|
||||
+ long val;
|
||||
+
|
||||
+ if (max_acs_id >= NUM_ACS_IDS - 1) {
|
||||
+ pr_warn("Out of PCIe ACS override slots (%d)\n",
|
||||
+ NUM_ACS_IDS);
|
||||
+ goto next;
|
||||
+ }
|
||||
+
|
||||
+ p += 3;
|
||||
+ snprintf(opt, 5, "%s", p);
|
||||
+ ret = kstrtol(opt, 16, &val);
|
||||
+ if (ret) {
|
||||
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
|
||||
+ goto next;
|
||||
+ }
|
||||
+ acs_on_ids[max_acs_id].vendor = val;
|
||||
+
|
||||
+ p += strcspn(p, ":");
|
||||
+ if (*p != ':') {
|
||||
+ pr_warn("PCIe ACS invalid ID\n");
|
||||
+ goto next;
|
||||
+ }
|
||||
+
|
||||
+ p++;
|
||||
+ snprintf(opt, 5, "%s", p);
|
||||
+ ret = kstrtol(opt, 16, &val);
|
||||
+ if (ret) {
|
||||
+ pr_warn("PCIe ACS ID parse error %d\n", ret);
|
||||
+ goto next;
|
||||
+ }
|
||||
+ acs_on_ids[max_acs_id].device = val;
|
||||
+ max_acs_id++;
|
||||
+ }
|
||||
+next:
|
||||
+ p += strcspn(p, ",");
|
||||
+ if (*p == ',')
|
||||
+ p++;
|
||||
+ }
|
||||
+
|
||||
+ if (acs_on_downstream || acs_on_multifunction || max_acs_id)
|
||||
+ pr_warn("Warning: PCIe ACS overrides enabled; This may allow non-IOMMU protected peer-to-peer DMA\n");
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+early_param("pcie_acs_override", pcie_acs_override_setup);
|
||||
+
|
||||
+static int pcie_acs_overrides(struct pci_dev *dev, u16 acs_flags)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ /* Never override ACS for legacy devices or devices with ACS caps */
|
||||
+ if (!pci_is_pcie(dev) ||
|
||||
+ pci_find_ext_capability(dev, PCI_EXT_CAP_ID_ACS))
|
||||
+ return -ENOTTY;
|
||||
+
|
||||
+ for (i = 0; i < max_acs_id; i++)
|
||||
+ if (acs_on_ids[i].vendor == dev->vendor &&
|
||||
+ acs_on_ids[i].device == dev->device)
|
||||
+ return 1;
|
||||
+
|
||||
+ switch (pci_pcie_type(dev)) {
|
||||
+ case PCI_EXP_TYPE_DOWNSTREAM:
|
||||
+ case PCI_EXP_TYPE_ROOT_PORT:
|
||||
+ if (acs_on_downstream)
|
||||
+ return 1;
|
||||
+ break;
|
||||
+ case PCI_EXP_TYPE_ENDPOINT:
|
||||
+ case PCI_EXP_TYPE_UPSTREAM:
|
||||
+ case PCI_EXP_TYPE_LEG_END:
|
||||
+ case PCI_EXP_TYPE_RC_END:
|
||||
+ if (acs_on_multifunction && dev->multifunction)
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ return -ENOTTY;
|
||||
+}
|
||||
/*
|
||||
* Some Atheros AR9xxx and QCA988x chips do not behave after a bus reset.
|
||||
* The device will throw a Link Down error on AER-capable systems and
|
||||
@@ -4513,6 +4613,7 @@ static const struct pci_dev_acs_enabled {
|
||||
{ PCI_VENDOR_ID_BROADCOM, 0xD714, pci_quirk_brcm_acs },
|
||||
/* Amazon Annapurna Labs */
|
||||
{ PCI_VENDOR_ID_AMAZON_ANNAPURNA_LABS, 0x0031, pci_quirk_al_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
419
linux56-rc-tkg/linux56-tkg-patches/0007-v5.6-fsync.patch
Normal file
419
linux56-rc-tkg/linux56-tkg-patches/0007-v5.6-fsync.patch
Normal file
@ -0,0 +1,419 @@
|
||||
split the futex key setup from the queue locking and key reading. This
|
||||
is useful to support the setup of multiple keys at the same time, like
|
||||
what is done in futex_requeue() and what will be done for the
|
||||
FUTEX_WAIT_MULTIPLE command.
|
||||
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
---
|
||||
kernel/futex.c | 71 +++++++++++++++++++++++++++++---------------------
|
||||
1 file changed, 42 insertions(+), 29 deletions(-)
|
||||
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 6d50728ef2e7..91f3db335c57 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -2631,6 +2631,39 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
__set_current_state(TASK_RUNNING);
|
||||
}
|
||||
|
||||
+static int __futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
+ struct futex_q *q, struct futex_hash_bucket **hb)
|
||||
+{
|
||||
+
|
||||
+ u32 uval;
|
||||
+ int ret;
|
||||
+
|
||||
+retry_private:
|
||||
+ *hb = queue_lock(q);
|
||||
+
|
||||
+ ret = get_futex_value_locked(&uval, uaddr);
|
||||
+
|
||||
+ if (ret) {
|
||||
+ queue_unlock(*hb);
|
||||
+
|
||||
+ ret = get_user(uval, uaddr);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (!(flags & FLAGS_SHARED))
|
||||
+ goto retry_private;
|
||||
+
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (uval != val) {
|
||||
+ queue_unlock(*hb);
|
||||
+ ret = -EWOULDBLOCK;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* futex_wait_setup() - Prepare to wait on a futex
|
||||
* @uaddr: the futex userspace address
|
||||
@@ -2651,7 +2684,6 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q,
|
||||
static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
struct futex_q *q, struct futex_hash_bucket **hb)
|
||||
{
|
||||
- u32 uval;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@@ -2672,38 +2704,19 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
* absorb a wakeup if *uaddr does not match the desired values
|
||||
* while the syscall executes.
|
||||
*/
|
||||
-retry:
|
||||
- ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, FUTEX_READ);
|
||||
- if (unlikely(ret != 0))
|
||||
- return ret;
|
||||
-
|
||||
-retry_private:
|
||||
- *hb = queue_lock(q);
|
||||
+ do {
|
||||
+ ret = get_futex_key(uaddr, flags & FLAGS_SHARED,
|
||||
+ &q->key, FUTEX_READ);
|
||||
+ if (unlikely(ret != 0))
|
||||
+ return ret;
|
||||
|
||||
- ret = get_futex_value_locked(&uval, uaddr);
|
||||
+ ret = __futex_wait_setup(uaddr, val, flags, q, hb);
|
||||
|
||||
- if (ret) {
|
||||
- queue_unlock(*hb);
|
||||
-
|
||||
- ret = get_user(uval, uaddr);
|
||||
+ /* Drop key reference if retry or error. */
|
||||
if (ret)
|
||||
- goto out;
|
||||
+ put_futex_key(&q->key);
|
||||
+ } while (ret > 0);
|
||||
|
||||
- if (!(flags & FLAGS_SHARED))
|
||||
- goto retry_private;
|
||||
-
|
||||
- put_futex_key(&q->key);
|
||||
- goto retry;
|
||||
- }
|
||||
-
|
||||
- if (uval != val) {
|
||||
- queue_unlock(*hb);
|
||||
- ret = -EWOULDBLOCK;
|
||||
- }
|
||||
-
|
||||
-out:
|
||||
- if (ret)
|
||||
- put_futex_key(&q->key);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
|
||||
This is a new futex operation, called FUTEX_WAIT_MULTIPLE, which allows
|
||||
a thread to wait on several futexes at the same time, and be awoken by
|
||||
any of them. In a sense, it implements one of the features that was
|
||||
supported by pooling on the old FUTEX_FD interface.
|
||||
|
||||
My use case for this operation lies in Wine, where we want to implement
|
||||
a similar interface available in Windows, used mainly for event
|
||||
handling. The wine folks have an implementation that uses eventfd, but
|
||||
it suffers from FD exhaustion (I was told they have application that go
|
||||
to the order of multi-milion FDs), and higher CPU utilization.
|
||||
|
||||
In time, we are also proposing modifications to glibc and libpthread to
|
||||
make this feature available for Linux native multithreaded applications
|
||||
using libpthread, which can benefit from the behavior of waiting on any
|
||||
of a group of futexes.
|
||||
|
||||
In particular, using futexes in our Wine use case reduced the CPU
|
||||
utilization by 4% for the game Beat Saber and by 1.5% for the game
|
||||
Shadow of Tomb Raider, both running over Proton (a wine based solution
|
||||
for Windows emulation), when compared to the eventfd interface. This
|
||||
implementation also doesn't rely of file descriptors, so it doesn't risk
|
||||
overflowing the resource.
|
||||
|
||||
Technically, the existing FUTEX_WAIT implementation can be easily
|
||||
reworked by using do_futex_wait_multiple with a count of one, and I
|
||||
have a patch showing how it works. I'm not proposing it, since
|
||||
futex is such a tricky code, that I'd be more confortable to have
|
||||
FUTEX_WAIT_MULTIPLE running upstream for a couple development cycles,
|
||||
before considering modifying FUTEX_WAIT.
|
||||
|
||||
From an implementation perspective, the futex list is passed as an array
|
||||
of (pointer,value,bitset) to the kernel, which will enqueue all of them
|
||||
and sleep if none was already triggered. It returns a hint of which
|
||||
futex caused the wake up event to userspace, but the hint doesn't
|
||||
guarantee that is the only futex triggered. Before calling the syscall
|
||||
again, userspace should traverse the list, trying to re-acquire any of
|
||||
the other futexes, to prevent an immediate -EWOULDBLOCK return code from
|
||||
the kernel.
|
||||
|
||||
This was tested using three mechanisms:
|
||||
|
||||
1) By reimplementing FUTEX_WAIT in terms of FUTEX_WAIT_MULTIPLE and
|
||||
running the unmodified tools/testing/selftests/futex and a full linux
|
||||
distro on top of this kernel.
|
||||
|
||||
2) By an example code that exercises the FUTEX_WAIT_MULTIPLE path on a
|
||||
multi-threaded, event-handling setup.
|
||||
|
||||
3) By running the Wine fsync implementation and executing multi-threaded
|
||||
applications, in particular the modern games mentioned above, on top of
|
||||
this implementation.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Signed-off-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Signed-off-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
---
|
||||
include/uapi/linux/futex.h | 7 ++
|
||||
kernel/futex.c | 161 ++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 164 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index a89eb0accd5e..2401c4cf5095 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -21,6 +21,7 @@
|
||||
#define FUTEX_WAKE_BITSET 10
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -150,4 +151,10 @@ struct robust_list_head {
|
||||
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
|
||||
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
|
||||
|
||||
+struct futex_wait_block {
|
||||
+ __u32 __user *uaddr;
|
||||
+ __u32 val;
|
||||
+ __u32 bitset;
|
||||
+};
|
||||
+
|
||||
#endif /* _UAPI_LINUX_FUTEX_H */
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 91f3db335c57..2623e8f152cd 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -183,6 +183,7 @@ static int __read_mostly futex_cmpxchg_enabled;
|
||||
#endif
|
||||
#define FLAGS_CLOCKRT 0x02
|
||||
#define FLAGS_HAS_TIMEOUT 0x04
|
||||
+#define FLAGS_WAKE_MULTIPLE 0x08
|
||||
|
||||
/*
|
||||
* Priority Inheritance state:
|
||||
@@ -2720,6 +2721,150 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int do_futex_wait_multiple(struct futex_wait_block *wb,
|
||||
+ u32 count, unsigned int flags,
|
||||
+ ktime_t *abs_time)
|
||||
+{
|
||||
+
|
||||
+ struct hrtimer_sleeper timeout, *to;
|
||||
+ struct futex_hash_bucket *hb;
|
||||
+ struct futex_q *qs = NULL;
|
||||
+ int ret;
|
||||
+ int i;
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(struct futex_q), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, flags,
|
||||
+ current->timer_slack_ns);
|
||||
+ retry:
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ qs[i].key = FUTEX_KEY_INIT;
|
||||
+ qs[i].bitset = wb[i].bitset;
|
||||
+
|
||||
+ ret = get_futex_key(wb[i].uaddr, flags & FLAGS_SHARED,
|
||||
+ &qs[i].key, FUTEX_READ);
|
||||
+ if (unlikely(ret != 0)) {
|
||||
+ for (--i; i >= 0; i--)
|
||||
+ put_futex_key(&qs[i].key);
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ set_current_state(TASK_INTERRUPTIBLE);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ ret = __futex_wait_setup(wb[i].uaddr, wb[i].val,
|
||||
+ flags, &qs[i], &hb);
|
||||
+ if (ret) {
|
||||
+ /* Drop the failed key directly. keys 0..(i-1)
|
||||
+ * will be put by unqueue_me.
|
||||
+ */
|
||||
+ put_futex_key(&qs[i].key);
|
||||
+
|
||||
+ /* Undo the partial work we did. */
|
||||
+ for (--i; i >= 0; i--)
|
||||
+ unqueue_me(&qs[i]);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+ if (ret > 0)
|
||||
+ goto retry;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ /* We can't hold to the bucket lock when dealing with
|
||||
+ * the next futex. Queue ourselves now so we can unlock
|
||||
+ * it before moving on.
|
||||
+ */
|
||||
+ queue_me(&qs[i], hb);
|
||||
+ }
|
||||
+
|
||||
+ if (to)
|
||||
+ hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
|
||||
+
|
||||
+ /* There is no easy to way to check if we are wake already on
|
||||
+ * multiple futexes without waking through each one of them. So
|
||||
+ * just sleep and let the scheduler handle it.
|
||||
+ */
|
||||
+ if (!to || to->task)
|
||||
+ freezable_schedule();
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ /* If we were woken (and unqueued), we succeeded. */
|
||||
+ for (i = 0; i < count; i++)
|
||||
+ if (!unqueue_me(&qs[i]))
|
||||
+ ret = i;
|
||||
+
|
||||
+ /* Succeed wakeup */
|
||||
+ if (ret >= 0)
|
||||
+ goto out;
|
||||
+
|
||||
+ /* Woken by triggered timeout */
|
||||
+ if (to && !to->task)
|
||||
+ goto out;
|
||||
+
|
||||
+ /*
|
||||
+ * We expect signal_pending(current), but we might be the
|
||||
+ * victim of a spurious wakeup as well.
|
||||
+ */
|
||||
+ if (!signal_pending(current))
|
||||
+ goto retry;
|
||||
+
|
||||
+ ret = -ERESTARTSYS;
|
||||
+ if (!abs_time)
|
||||
+ goto out;
|
||||
+
|
||||
+ ret = -ERESTART_RESTARTBLOCK;
|
||||
+ out:
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ kfree(qs);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static int futex_wait_multiple(u32 __user *uaddr, unsigned int flags,
|
||||
+ u32 count, ktime_t *abs_time)
|
||||
+{
|
||||
+ struct futex_wait_block *wb;
|
||||
+ struct restart_block *restart;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!count)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ wb = kcalloc(count, sizeof(struct futex_wait_block), GFP_KERNEL);
|
||||
+ if (!wb)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ if (copy_from_user(wb, uaddr,
|
||||
+ count * sizeof(struct futex_wait_block))) {
|
||||
+ ret = -EFAULT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ ret = do_futex_wait_multiple(wb, count, flags, abs_time);
|
||||
+
|
||||
+ if (ret == -ERESTART_RESTARTBLOCK) {
|
||||
+ restart = ¤t->restart_block;
|
||||
+ restart->fn = futex_wait_restart;
|
||||
+ restart->futex.uaddr = uaddr;
|
||||
+ restart->futex.val = count;
|
||||
+ restart->futex.time = *abs_time;
|
||||
+ restart->futex.flags = (flags | FLAGS_HAS_TIMEOUT |
|
||||
+ FLAGS_WAKE_MULTIPLE);
|
||||
+ }
|
||||
+
|
||||
+out:
|
||||
+ kfree(wb);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val,
|
||||
ktime_t *abs_time, u32 bitset)
|
||||
{
|
||||
@@ -2797,6 +2942,10 @@ static long futex_wait_restart(struct restart_block *restart)
|
||||
}
|
||||
restart->fn = do_no_restart_syscall;
|
||||
|
||||
+ if (restart->futex.flags & FLAGS_WAKE_MULTIPLE)
|
||||
+ return (long)futex_wait_multiple(uaddr, restart->futex.flags,
|
||||
+ restart->futex.val, tp);
|
||||
+
|
||||
return (long)futex_wait(uaddr, restart->futex.flags,
|
||||
restart->futex.val, tp, restart->futex.bitset);
|
||||
}
|
||||
@@ -3680,6 +3829,8 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
|
||||
uaddr2);
|
||||
case FUTEX_CMP_REQUEUE_PI:
|
||||
return futex_requeue(uaddr, flags, uaddr2, val, val2, &val3, 1);
|
||||
+ case FUTEX_WAIT_MULTIPLE:
|
||||
+ return futex_wait_multiple(uaddr, flags, val, timeout);
|
||||
}
|
||||
return -ENOSYS;
|
||||
}
|
||||
@@ -3696,7 +3847,8 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
|
||||
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
|
||||
cmd == FUTEX_WAIT_BITSET ||
|
||||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
|
||||
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
|
||||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
|
||||
if (unlikely(should_fail_futex(!(op & FUTEX_PRIVATE_FLAG))))
|
||||
return -EFAULT;
|
||||
if (get_timespec64(&ts, utime))
|
||||
@@ -3705,7 +3857,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
return -EINVAL;
|
||||
|
||||
t = timespec64_to_ktime(ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
t = ktime_add_safe(ktime_get(), t);
|
||||
tp = &t;
|
||||
}
|
||||
@@ -3889,14 +4041,15 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
|
||||
if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI ||
|
||||
cmd == FUTEX_WAIT_BITSET ||
|
||||
- cmd == FUTEX_WAIT_REQUEUE_PI)) {
|
||||
+ cmd == FUTEX_WAIT_REQUEUE_PI ||
|
||||
+ cmd == FUTEX_WAIT_MULTIPLE)) {
|
||||
if (get_old_timespec32(&ts, utime))
|
||||
return -EFAULT;
|
||||
if (!timespec64_valid(&ts))
|
||||
return -EINVAL;
|
||||
|
||||
t = timespec64_to_ktime(ts);
|
||||
- if (cmd == FUTEX_WAIT)
|
||||
+ if (cmd == FUTEX_WAIT || cmd == FUTEX_WAIT_MULTIPLE)
|
||||
t = ktime_add_safe(ktime_get(), t);
|
||||
tp = &t;
|
||||
}
|
||||
--
|
||||
2.20.1
|
7624
linux56-rc-tkg/linux56-tkg-patches/0009-bmq_v5.6-r0.patch
Normal file
7624
linux56-rc-tkg/linux56-tkg-patches/0009-bmq_v5.6-r0.patch
Normal file
File diff suppressed because it is too large
Load Diff
90
linux56-rc-tkg/linux56-tkg-patches/0009-glitched-bmq.patch
Normal file
90
linux56-rc-tkg/linux56-tkg-patches/0009-glitched-bmq.patch
Normal file
@ -0,0 +1,90 @@
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 4 Jul 2018 04:30:08 +0200
|
||||
Subject: glitched - BMQ
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_250
|
||||
+ default HZ_500
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -39,6 +39,13 @@ choice
|
||||
on SMP and NUMA systems and exactly dividing by both PAL and
|
||||
NTSC frame rates for video and multimedia work.
|
||||
|
||||
+ config HZ_500
|
||||
+ bool "500 HZ"
|
||||
+ help
|
||||
+ 500 Hz is a balanced timer frequency. Provides fast interactivity
|
||||
+ on desktops with great smoothness without increasing CPU power
|
||||
+ consumption and sacrificing the battery life on laptops.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -52,6 +59,7 @@ config HZ
|
||||
default 100 if HZ_100
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
+ default 500 if HZ_500
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/kernel/Kconfig.hz b/kernel/Kconfig.hz
|
||||
index 2a202a846757..1d9c7ed79b11 100644
|
||||
--- a/kernel/Kconfig.hz
|
||||
+++ b/kernel/Kconfig.hz
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
choice
|
||||
prompt "Timer frequency"
|
||||
- default HZ_500
|
||||
+ default HZ_750
|
||||
help
|
||||
Allows the configuration of the timer frequency. It is customary
|
||||
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
||||
@@ -46,6 +46,13 @@ choice
|
||||
on desktops with great smoothness without increasing CPU power
|
||||
consumption and sacrificing the battery life on laptops.
|
||||
|
||||
+ config HZ_750
|
||||
+ bool "750 HZ"
|
||||
+ help
|
||||
+ 750 Hz is a good timer frequency for desktops. Provides fast
|
||||
+ interactivity with great smoothness without sacrificing too
|
||||
+ much throughput.
|
||||
+
|
||||
config HZ_1000
|
||||
bool "1000 HZ"
|
||||
help
|
||||
@@ -60,6 +67,7 @@ config HZ
|
||||
default 250 if HZ_250
|
||||
default 300 if HZ_300
|
||||
default 500 if HZ_500
|
||||
+ default 750 if HZ_750
|
||||
default 1000 if HZ_1000
|
||||
|
||||
config SCHED_HRTICK
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 9270a4370d54..30d01e647417 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -159,7 +159,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 100. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
/*
|
||||
* The total number of pages which are beyond the high watermark within all
|
||||
* zones.
|
@ -0,0 +1,18 @@
|
||||
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
index 6b423eebfd5d..61e3271675d6 100644
|
||||
--- a/drivers/cpufreq/cpufreq_ondemand.c
|
||||
+++ b/drivers/cpufreq/cpufreq_ondemand.c
|
||||
@@ -21,10 +21,10 @@
|
||||
#include "cpufreq_ondemand.h"
|
||||
|
||||
/* On-demand governor macros */
|
||||
-#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||
-#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||
+#define DEF_FREQUENCY_UP_THRESHOLD (55)
|
||||
+#define DEF_SAMPLING_DOWN_FACTOR (5)
|
||||
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||
+#define MICRO_FREQUENCY_UP_THRESHOLD (63)
|
||||
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||
#define MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
43
linux56-rc-tkg/linux56-tkg-patches/0011-ZFS-fix.patch
Normal file
43
linux56-rc-tkg/linux56-tkg-patches/0011-ZFS-fix.patch
Normal file
@ -0,0 +1,43 @@
|
||||
From 1e010beda2896bdf3082fb37a3e49f8ce20e04d8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= <joerg@thalheim.io>
|
||||
Date: Thu, 2 May 2019 05:28:08 +0100
|
||||
Subject: [PATCH] x86/fpu: Export kernel_fpu_{begin,end}() with
|
||||
EXPORT_SYMBOL_GPL
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We need these symbols in zfs as the fpu implementation breaks userspace:
|
||||
|
||||
https://github.com/zfsonlinux/zfs/issues/9346
|
||||
Signed-off-by: Jörg Thalheim <joerg@thalheim.io>
|
||||
---
|
||||
arch/x86/kernel/fpu/core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
|
||||
index 12c70840980e..352538b3bb5d 100644
|
||||
--- a/arch/x86/kernel/fpu/core.c
|
||||
+++ b/arch/x86/kernel/fpu/core.c
|
||||
@@ -102,7 +102,7 @@ void kernel_fpu_begin(void)
|
||||
}
|
||||
__cpu_invalidate_fpregs_state();
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(kernel_fpu_begin);
|
||||
+EXPORT_SYMBOL(kernel_fpu_begin);
|
||||
|
||||
void kernel_fpu_end(void)
|
||||
{
|
||||
@@ -111,7 +111,7 @@ void kernel_fpu_end(void)
|
||||
this_cpu_write(in_kernel_fpu, false);
|
||||
preempt_enable();
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(kernel_fpu_end);
|
||||
+EXPORT_SYMBOL(kernel_fpu_end);
|
||||
|
||||
/*
|
||||
* Save the FPU state (mark it for reload if necessary):
|
||||
--
|
||||
2.23.0
|
||||
|
||||
|
2415
linux56-rc-tkg/linux56-tkg-patches/0013-tp_smapi_ec.patch
Normal file
2415
linux56-rc-tkg/linux56-tkg-patches/0013-tp_smapi_ec.patch
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user