git subrepo clone https://github.com/Frogging-Family/linux-tkg
subrepo: subdir: "linux-tkg" merged: "9c02fea" upstream: origin: "https://github.com/Frogging-Family/linux-tkg" branch: "master" commit: "9c02fea" git-subrepo: version: "0.4.3" origin: "???" commit: "???"
This commit is contained in:
parent
8f91d9e662
commit
d9d05819e1
280 changed files with 1156701 additions and 0 deletions
21
linux-tkg/.github/workflows/auto-update-kernel-versions.yml
vendored
Normal file
21
linux-tkg/.github/workflows/auto-update-kernel-versions.yml
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
name: Automatic version bumping
|
||||
on:
|
||||
schedule:
|
||||
- cron: '3 */6 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- run: |
|
||||
git config user.name "BIG UGLY FROGMINER"
|
||||
git config user.email BIG_UGLY_FROGMINER@froggi.es
|
||||
./update-kernel-versions.sh
|
||||
changes=$(cat kernel_updates)
|
||||
if [ -n "$changes" ]; then
|
||||
git add PKGBUILD linux-tkg-config/prepare
|
||||
git commit --author="Adel KARA SLIMANE <adel.ks@zegrapher.com>" -m "version bumps:$changes"
|
||||
git push
|
||||
fi
|
21
linux-tkg/.gitignore
vendored
Normal file
21
linux-tkg/.gitignore
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
.*
|
||||
!.github
|
||||
!.gitignore
|
||||
*~
|
||||
*.orig
|
||||
*.log
|
||||
*.run
|
||||
*.tgz
|
||||
*.xz
|
||||
*.pkg
|
||||
*.bak
|
||||
*.tar.gz
|
||||
*.pkg.*
|
||||
*.old
|
||||
*.db
|
||||
*.files
|
||||
*/src/
|
||||
src/*
|
||||
*/pkg/
|
||||
pkg/*
|
||||
*/linux-5*/
|
12
linux-tkg/.gitrepo
Normal file
12
linux-tkg/.gitrepo
Normal file
|
@ -0,0 +1,12 @@
|
|||
; DO NOT EDIT (unless you know what you are doing)
|
||||
;
|
||||
; This subdirectory is a git "subrepo", and this file is maintained by the
|
||||
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
|
||||
;
|
||||
[subrepo]
|
||||
remote = https://github.com/Frogging-Family/linux-tkg
|
||||
branch = master
|
||||
commit = 9c02feac7ab18e7edb62fa748f471752222c2b42
|
||||
parent = 8f91d9e662a66e9f3cbc4c02bb90dd68eba2d22a
|
||||
method = merge
|
||||
cmdver = 0.4.3
|
996
linux-tkg/PKGBUILD
Normal file
996
linux-tkg/PKGBUILD
Normal file
|
@ -0,0 +1,996 @@
|
|||
# Based on the file created for Arch Linux by:
|
||||
# Tobias Powalowski <tpowa@archlinux.org>
|
||||
# Thomas Baechler <thomas@archlinux.org>
|
||||
|
||||
# Contributor: Tk-Glitch <ti3nou at gmail dot com>
|
||||
# Contributor: Hyper-KVM <hyperkvmx86 at gmail dot com>
|
||||
|
||||
plain ' .---.` `.---.'
|
||||
plain ' `/syhhhyso- -osyhhhys/`'
|
||||
plain ' .syNMdhNNhss/``.---.``/sshNNhdMNys.'
|
||||
plain ' +sdMh.`+MNsssssssssssssssNM+`.hMds+'
|
||||
plain ' :syNNdhNNhssssssssssssssshNNhdNNys:'
|
||||
plain ' /ssyhhhysssssssssssssssssyhhhyss/'
|
||||
plain ' .ossssssssssssssssssssssssssssso.'
|
||||
plain ' :sssssssssssssssssssssssssssssssss:'
|
||||
plain ' /sssssssssssssssssssssssssssssssssss/ Linux-tkg'
|
||||
plain ' :sssssssssssssoosssssssoosssssssssssss: kernels'
|
||||
plain ' osssssssssssssoosssssssoossssssssssssso'
|
||||
plain ' osssssssssssyyyyhhhhhhhyyyyssssssssssso'
|
||||
plain ' /yyyyyyhhdmmmmNNNNNNNNNNNmmmmdhhyyyyyy/'
|
||||
plain ' smmmNNNNNNNNNNNNNNNNNNNNNNNNNNNNNmmms'
|
||||
plain ' /dNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNd/'
|
||||
plain ' `:sdNNNNNNNNNNNNNNNNNNNNNNNNNds:`'
|
||||
plain ' `-+shdNNNNNNNNNNNNNNNdhs+-`'
|
||||
plain ' `.-:///////:-.`'
|
||||
|
||||
_where="$PWD" # track basedir as different Arch based distros are moving srcdir around
|
||||
_ispkgbuild="true"
|
||||
_distro="Arch"
|
||||
|
||||
source "$_where"/customization.cfg # load default configuration from file
|
||||
source "$_where"/linux-tkg-config/prepare
|
||||
|
||||
if [ -e "$_EXT_CONFIG_PATH" ]; then
|
||||
msg2 "External configuration file $_EXT_CONFIG_PATH will be used and will override customization.cfg values."
|
||||
source "$_EXT_CONFIG_PATH"
|
||||
fi
|
||||
|
||||
# Make sure we're in a clean state
|
||||
if [ ! -e "$_where"/BIG_UGLY_FROGMINER ]; then
|
||||
_tkg_initscript
|
||||
fi
|
||||
|
||||
source "$_where"/BIG_UGLY_FROGMINER
|
||||
|
||||
if [[ "$_sub" = rc* ]]; then
|
||||
_srcpath="linux-${_basekernel}-${_sub}"
|
||||
kernel_site="https://git.kernel.org/torvalds/t/linux-${_basekernel}-${_sub}.tar.gz"
|
||||
else
|
||||
_srcpath="linux-${_basekernel}"
|
||||
kernel_site="https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-${_basekernel}.tar.xz"
|
||||
patch_site="https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-${_basekernel}.${_sub}.xz"
|
||||
fi
|
||||
|
||||
if [ -n "$_custom_pkgbase" ]; then
|
||||
pkgbase="${_custom_pkgbase}"
|
||||
else
|
||||
pkgbase=linux"${_basever}"-tkg-"${_cpusched}"${_compiler_name}
|
||||
fi
|
||||
pkgname=("${pkgbase}" "${pkgbase}-headers")
|
||||
pkgver="${_basekernel}"."${_sub}"
|
||||
pkgrel=247
|
||||
pkgdesc='Linux-tkg'
|
||||
arch=('x86_64') # no i686 in here
|
||||
url="http://www.kernel.org/"
|
||||
license=('GPL2')
|
||||
makedepends=('bison' 'xmlto' 'docbook-xsl' 'kmod' 'inetutils' 'bc' 'libelf' 'pahole' 'patchutils' 'flex' 'python-sphinx' 'python-sphinx_rtd_theme' 'graphviz' 'imagemagick' 'git' 'cpio' 'perl' 'tar' 'xz' 'wget')
|
||||
if [ "$_compiler_name" = "-llvm" ]; then
|
||||
makedepends+=( 'lld' 'clang' 'llvm')
|
||||
fi
|
||||
optdepends=('schedtool')
|
||||
options=('!strip' 'docs')
|
||||
|
||||
case $_basever in
|
||||
54)
|
||||
#opt_ver="4.19-5.4"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
#"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-4.19-5.4.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.4-ck1.patch
|
||||
0005-glitched-ondemand-pds.patch
|
||||
0005-glitched-pds.patch
|
||||
0005-v5.4_undead-pds099o.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.4-fsync.patch
|
||||
#0008-5.4-bcachefs.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-bmq_v5.4-r2.patch
|
||||
0012-linux-hardened.patch
|
||||
)
|
||||
sha256sums=('bf338980b1670bca287f9994b7441c2361907635879169c64ae78364efc5f491'
|
||||
'69c153d9d425273762df1d1f917904e0b9f765fb7a9b49ea32a27f2264a614cc'
|
||||
#'SKIP'
|
||||
'b0c4c60669f47ba4d3d1388368a5f9790aa697af42c917ed2ef177f111336d8b'
|
||||
'1f4a20d6eaaa0d969af93152a65191492400c6aa838fc1c290b0dd29bb6019d8'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'31dc68e84aecfb7d069efb1305049122c65694676be8b955634abcf0675922a2'
|
||||
'd02bf5ca08fd610394b9d3a0c3b176d74af206f897dee826e5cbaec97bb4a4aa'
|
||||
'886ed1d648938d776a795d289af0c83207c1c70c00cd9d79560951d0bc951e25'
|
||||
'7058e57fd68367b029adc77f2a82928f1433daaf02c8c279cb2d13556c8804d7'
|
||||
'9420cf1a04740956008e535725ae38a2f759188841be3776447a4eb635fa5158'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'bc69d6e5ee8172b0242c8fa72d13cfe2b8d2b6601468836908a7dfe8b78a3bbb'
|
||||
'815974c65f47301d2a5d1577bf95e8a4b54cad7d77f226e0065f83e763837c48'
|
||||
'62496f9ca788996181ef145f96ad26291282fcc3fb95cdc04080dcf84365be33'
|
||||
'eac7e5d6201528e64f4bdf5e286c842511e1afc52e1518dc8e7d11932bbe0a99'
|
||||
'29f7dc8930426b9cf86742ca80623b96b97c1d92a4436ba4e2adcde5200b4c29'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'2d9260b80b43bbd605cf420d6bd53aa7262103dfd77196ba590ece5600b6dc0d'
|
||||
'3832f828a9f402b153fc9a6829c5a4eaf6091804bcda3a0423c8e1b57e26420d'
|
||||
'c98befca824f761260466410a1dd94d2b9be6f7211b5daefcfc0f3a102bbdc81'
|
||||
'aeb31404c26ee898d007b1f66cb9572c9884ad8eca14edc4587d68f6cba6de46')
|
||||
;;
|
||||
57)
|
||||
opt_ver="5.7"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/outdated_versions/enable_additional_cpu_optimizations_for_gcc_v10.1%2B_kernel_v5.7.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.7-ck1.patch
|
||||
0005-glitched-ondemand-pds.patch
|
||||
0005-glitched-pds.patch
|
||||
0005-v5.7_undead-pds099o.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.7-fsync.patch
|
||||
0008-5.7-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.7-r3.patch
|
||||
0012-linux-hardened.patch
|
||||
)
|
||||
sha256sums=('de8163bb62f822d84f7a3983574ec460060bf013a78ff79cd7c979ff1ec1d7e0'
|
||||
'66a0173a13cd58015f5bf1b14f67bfa15dc1db5d8e7225fcd95ac2e9a5341653'
|
||||
'SKIP'
|
||||
'357a0db541f7de924ed89c21f5a6f3de4889b134c5d05d5e32ccd234bd81eedf'
|
||||
'15ce09447b7e9b28425c1df5961c955378f2829e4115037337eef347b1db3d9d'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'31dc68e84aecfb7d069efb1305049122c65694676be8b955634abcf0675922a2'
|
||||
'd02bf5ca08fd610394b9d3a0c3b176d74af206f897dee826e5cbaec97bb4a4aa'
|
||||
'bbf332201423888257c9687bee06916a5dbbac2194f9df5b4126100c40e48d16'
|
||||
'7058e57fd68367b029adc77f2a82928f1433daaf02c8c279cb2d13556c8804d7'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'bc69d6e5ee8172b0242c8fa72d13cfe2b8d2b6601468836908a7dfe8b78a3bbb'
|
||||
'8d8aec86e34dbec6cc3a47f2cd55dc9212e95d36b6cd34d6e637c66731e7d838'
|
||||
'62496f9ca788996181ef145f96ad26291282fcc3fb95cdc04080dcf84365be33'
|
||||
'7fd8e776209dac98627453fda754bdf9aff4a09f27cb0b3766d7983612eb3c74'
|
||||
'55be5e4c6254da0a9d34bbfac807a70d8b58b3f7b2ec852026195c4db5e263e2'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'cd225e86d72eaf6c31ef3d7b20df397f4cc44ddd04389850691292cdf292b204'
|
||||
'd2214504c43f9d297a8ef68dffc198143bfebf85614b71637a71978d7a86bd78'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'965a517a283f265a012545fbb5cc9e516efc9f6166d2aa1baf7293a32a1086b7'
|
||||
'b2a2ae866fc3f1093f67e69ba59738827e336b8f800fb0487599127f7f3ef881'
|
||||
'6821f92bd2bde3a3938d17b070d70f18a2f33cae81647567b5a4d94c9cd75f3d')
|
||||
;;
|
||||
58)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
#'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
#0004-glitched-ondemand-muqss.patch
|
||||
#0004-glitched-muqss.patch
|
||||
#0004-5.8-ck1.patch
|
||||
0005-undead-glitched-ondemand-pds.patch
|
||||
0005-undead-glitched-pds.patch
|
||||
0005-v5.8_undead-pds099o.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.8-fsync.patch
|
||||
0008-5.8-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.8-r3.patch
|
||||
#0012-linux-hardened.patch
|
||||
)
|
||||
sha256sums=('e7f75186aa0642114af8f19d99559937300ca27acaf7451b36d4f9b0f85cf1f5'
|
||||
'5b558a40c2fdad2c497fe0b1a64679313fd5a7ccbaecef8803d49b3baaccbacd'
|
||||
'SKIP'
|
||||
'f4754fbe2619ef321e49a7b560fad058b2459d17cff0b90e839cb475f46e8b63'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'b9ebe0ae69bc2b2091d6bfcf6c7875a87ea7969fcfa4e306c48d47a60f9ef4d6'
|
||||
'7058e57fd68367b029adc77f2a82928f1433daaf02c8c279cb2d13556c8804d7'
|
||||
'62496f9ca788996181ef145f96ad26291282fcc3fb95cdc04080dcf84365be33'
|
||||
'7fd8e776209dac98627453fda754bdf9aff4a09f27cb0b3766d7983612eb3c74'
|
||||
'31b172eb6a0c635a8d64cc1c2e8181d9f928ee991bd44f6e556d1713b815f8d9'
|
||||
'87bca363416655bc865fcb2cc0d1532cb010a61d9b9f625e3c15cd12eeee3a59'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'cd225e86d72eaf6c31ef3d7b20df397f4cc44ddd04389850691292cdf292b204'
|
||||
'e73c3a8a040a35eb48d1e0ce4f66dd6e6f69fd10ee5b1acf3a0334cbf7ffb0c4'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'965a517a283f265a012545fbb5cc9e516efc9f6166d2aa1baf7293a32a1086b7'
|
||||
'f5dbff4833a2e3ca94c202e5197894d5f1006c689ff149355353e77d2e17c943')
|
||||
;;
|
||||
59)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
$patch_site
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
"config.x86_64" # stock Arch config
|
||||
#$hardened_config_file # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.9-ck1.patch
|
||||
0005-undead-glitched-ondemand-pds.patch
|
||||
0005-undead-glitched-pds.patch
|
||||
0005-v5.9_undead-pds099o.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.9-fsync.patch
|
||||
0008-5.9-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.9-r3.patch
|
||||
#0012-linux-hardened.patch
|
||||
)
|
||||
sha256sums=('3239a4ee1250bf2048be988cc8cb46c487b2c8a0de5b1b032d38394d5c6b1a06'
|
||||
'46c520da2db82d8f9a15c2117d3a50e0faaaf98f05bd4ea1f3105e2724f207d6'
|
||||
'SKIP'
|
||||
'ce2711b9d628e71af62706b830c2f259a43ad1e614871dd90bcb99d8709e1dab'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'902885088ed0748e40372e04a8ec11adf5acf3d935abffc6737dd9e6ec13bb93'
|
||||
'7058e57fd68367b029adc77f2a82928f1433daaf02c8c279cb2d13556c8804d7'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'2bbbac963b6ca44ef3f8a71ec7c5cad7d66df860869a73059087ee236775970a'
|
||||
'45a9ab99215ab3313be6e66e073d29154aac55bc58975a4df2dad116c918d27c'
|
||||
'62496f9ca788996181ef145f96ad26291282fcc3fb95cdc04080dcf84365be33'
|
||||
'31b428c464905e44ed61cdcd1f42b4ec157ebe5a44cb5b608c4c99b466df66ba'
|
||||
'f9f5f0a3a1d6c5233b9d7a4afe8ed99be97c4ff00a80bde4017d117c7d5f98ed'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'b302ba6c5bbe8ed19b20207505d513208fae1e678cf4d8e7ac0b154e5fe3f456'
|
||||
'14a261f1940a2b21b6b14df7391fc2c6274694bcfabfac3d0e985a67285dbfe7'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'0d5fe3a9050536fe431564b221badb85af7ff57b330e3978ae90d21989fcad2d')
|
||||
;;
|
||||
510)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.10-ck1.patch
|
||||
0005-undead-glitched-ondemand-pds.patch
|
||||
0005-undead-glitched-pds.patch
|
||||
0005-v5.10_undead-pds099o.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.10-fsync.patch
|
||||
0007-v5.10-futex2_interface.patch
|
||||
0007-v5.10-winesync.patch
|
||||
0008-5.10-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.10-r3.patch
|
||||
0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
)
|
||||
sha256sums=('dcdf99e43e98330d925016985bfbc7b83c66d367b714b2de0cbbfcbf83d8ca43'
|
||||
'3ce705c37f70db9962bd615329e34b85bc41eb3eff63284eb34e2979da05ce5b'
|
||||
'SKIP'
|
||||
'13a39ab2be1301b60565cb6a4bedb2bca16b6b12427407c099a81169feb367d6'
|
||||
'eb1da1a028a1c967222b5bdac1db2b2c4d8285bafd714892f6fc821c10416341'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'acc50cd9f88b9f12dc4321fab7af66f6cc8299bb83ebcb4056f6189fca22ec9c'
|
||||
'7058e57fd68367b029adc77f2a82928f1433daaf02c8c279cb2d13556c8804d7'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'2bbbac963b6ca44ef3f8a71ec7c5cad7d66df860869a73059087ee236775970a'
|
||||
'e00096244e5cddaa5500d08b5f692fd3f25be9401dfa3b0fc624625ff2f5e198'
|
||||
'62496f9ca788996181ef145f96ad26291282fcc3fb95cdc04080dcf84365be33'
|
||||
'31b428c464905e44ed61cdcd1f42b4ec157ebe5a44cb5b608c4c99b466df66ba'
|
||||
'd29895468e2113538db457282e6d7a8ca6afec7c4bac5d98811f70fe1cdc333b'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'b302ba6c5bbe8ed19b20207505d513208fae1e678cf4d8e7ac0b154e5fe3f456'
|
||||
'f46ed0f026490b11b6a6cfb21e78cd253f0d7c308dc5a34e93971659a4eaa19e'
|
||||
'c2c0c6423d09278e300c481d891b8072ec5fd89e49e75f36a698b610aa819e65'
|
||||
'377d0eb1df251808b8280d1aec598b4a2986f7d167306cdec9048c337cdcf2e1'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'b9da77449157c36193d4dc8a43f4cebe7f13d9f6bbcdadbcbf1e61da1f5f887e'
|
||||
'105f51e904d80f63c1421203e093b612fc724edefd3e388b64f8d371c0b3a842'
|
||||
'7fb1104c167edb79ec8fbdcde97940ed0f806aa978bdd14d0c665a1d76d25c24')
|
||||
;;
|
||||
511)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.11-ck1.patch
|
||||
0005-undead-glitched-ondemand-pds.patch
|
||||
0005-undead-glitched-pds.patch
|
||||
0005-v5.11_undead-pds099o.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.11-fsync.patch
|
||||
0007-v5.11-futex2_interface.patch
|
||||
0007-v5.11-winesync.patch
|
||||
0008-5.11-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.11-r3.patch
|
||||
0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('04f07b54f0d40adfab02ee6cbd2a942c96728d87c1ef9e120d0cb9ba3fe067b4'
|
||||
'07aac31956d3f483a91506524befd45962f3bbfda2f8d43cf90713caf872d9ba'
|
||||
'SKIP'
|
||||
'fc08ac33e3bc47ed0ee595a2e4b84bc45b02682b383db6acfe281792e88f6231'
|
||||
'837ad05b68d0443580f78f5eb316db46c6b67abfefa66c22b6cb94f4915a52ba'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'1ac97da07e72ec7e2b0923d32daacacfaa632a44c714d6942d9f143fe239e1b5'
|
||||
'7058e57fd68367b029adc77f2a82928f1433daaf02c8c279cb2d13556c8804d7'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'2bbbac963b6ca44ef3f8a71ec7c5cad7d66df860869a73059087ee236775970a'
|
||||
'2f7e24e70ed1f5561155a1b5e5aab9927aea317db0500e8cf83cd059807f9c7e'
|
||||
'62496f9ca788996181ef145f96ad26291282fcc3fb95cdc04080dcf84365be33'
|
||||
'31b428c464905e44ed61cdcd1f42b4ec157ebe5a44cb5b608c4c99b466df66ba'
|
||||
'4169fffe69eb5216831e545cb7439fa8e3fc09066757d7d4c496fe024fc373ee'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'b302ba6c5bbe8ed19b20207505d513208fae1e678cf4d8e7ac0b154e5fe3f456'
|
||||
'073e7b8ab48aa9abdb5cedb5c729a2f624275ebdbe1769476231c9e712145496'
|
||||
'c2c0c6423d09278e300c481d891b8072ec5fd89e49e75f36a698b610aa819e65'
|
||||
'6c831d7cdfe4897656b76c4ec60e0a18d6f3618f79c402ebc3bf4453a6616319'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'5cd64937e3a517f49f4311c47bd692eb8e117f09d655cd456e03366373ba8060'
|
||||
'9e7b1663f5247f15e883ce04e1dc2b18164aa19ebe47f75967be09659eff1101'
|
||||
'7fb1104c167edb79ec8fbdcde97940ed0f806aa978bdd14d0c665a1d76d25c24'
|
||||
'b1c6599d0e1ac9b66898d652ed99dae3fb8676d840a43ffa920a78d96e0521be'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
512)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
#'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.12-ck1.patch
|
||||
#0005-undead-glitched-ondemand-pds.patch
|
||||
#0005-undead-glitched-pds.patch
|
||||
#0005-v5.12_undead-pds099o.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.12-fsync.patch
|
||||
0007-v5.12-futex2_interface.patch
|
||||
0007-v5.12-winesync.patch
|
||||
0008-5.12-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.12-r1.patch
|
||||
#0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('7d0df6f2bf2384d68d0bd8e1fe3e071d64364dcdc6002e7b5c87c92d48fac366'
|
||||
'a41e4a4eb50c670a48f9c9bcc32ccb2195c02e3caa823a6aaed04537fdd8b73d'
|
||||
'SKIP'
|
||||
'0a7c40402715f8817c4f40173ca1fa8af84c56f7658be281e5424319000370b6'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'a447e697cb744283e3e89f300c8a8bda04a9c8108f03677fb48bf9675c992cbd'
|
||||
'5efd40c392ece498d2d43d5443e6537c2d9ef7cf9820d5ce80b6577fc5d1a4b2'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'3cdc90f272465c2edb6bac8a3c90f2e098ba8ca73d27e4c0cadf70b7e87641ea'
|
||||
'c8b0f2a1ef84b192c67b61c5a60426a640d5a83ac55a736929f0c4e6ec7b85f8'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'b302ba6c5bbe8ed19b20207505d513208fae1e678cf4d8e7ac0b154e5fe3f456'
|
||||
'540dda70cccc0cb23f0d0311f9947209cfe377070620e5fca69f66cc1efe817e'
|
||||
'9b324790ecf0240cbb314b8e02a7dcbfb14e3408267b702ad96f40a2ce77fdc2'
|
||||
'c6c5bcfac976c2304bdd13b80f8ad0329e5e53a6d9e9d130115204ea09fe2848'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'6325b3d6972725e41adbaf5e2db19a040dbf0856046cecc1c4d6786a064d04ff'
|
||||
'7fb1104c167edb79ec8fbdcde97940ed0f806aa978bdd14d0c665a1d76d25c24'
|
||||
'b1c6599d0e1ac9b66898d652ed99dae3fb8676d840a43ffa920a78d96e0521be'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
513)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0004-glitched-ondemand-muqss.patch
|
||||
0004-glitched-muqss.patch
|
||||
0004-5.13-ck1.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.13-fsync.patch
|
||||
0007-v5.13-futex2_interface.patch
|
||||
0007-v5.13-futex_waitv.patch
|
||||
0007-v5.13-fsync1_via_futex_waitv.patch
|
||||
0007-v5.13-winesync.patch
|
||||
0008-5.13-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.13-r3.patch
|
||||
0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('3f6baa97f37518439f51df2e4f3d65a822ca5ff016aa8e60d2cc53b95a6c89d9'
|
||||
'6fadc31348a0c0bbce86b067811d1dadae307bbde5b712c688b3193d73f0fb71'
|
||||
'SKIP'
|
||||
'06ad99b810943f7ce4650fe656156f4b40d11fabd9b89e2b1beff06c46836efc'
|
||||
'49a34dfc8ee7663a8a20c614f086e16ec70e8822db27a91050fd6ffebf87a650'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'ef48eea194c1c101de0461572eaf311f232fee55c155c52904b20085a92db680'
|
||||
'5efd40c392ece498d2d43d5443e6537c2d9ef7cf9820d5ce80b6577fc5d1a4b2'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'c605f638d74c61861ebdc36ebd4cb8b6475eae2f6273e1ccb2bbb3e10a2ec3fe'
|
||||
'de718ecea652a74e1d821459397d3dafaa3de1a7dba3df51ba9fc42b8645c3e2'
|
||||
'12d7c7457d4605ba00cb888383779e591a58e701643d763d8fe05dcdec3e9830'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'89d837bfea3515504b1c99fc881ebdc4f15e2999558127a263e795fc69408a39'
|
||||
'9ec679871cba674cf876ba836cde969296ae5034bcc10e1ec39b372e6e07aab0'
|
||||
'0e3473c19e5513bee886f03cf2476f746d8b5b2fbc0841c9d60d609b16a97c14'
|
||||
'f5ed3062543074472172e30f3db4baa1e292b50e11c1c19e2511b71b28ac7e48'
|
||||
'9b324790ecf0240cbb314b8e02a7dcbfb14e3408267b702ad96f40a2ce77fdc2'
|
||||
'b0004bc559653fd8719b8adcfa1ead1075db3425d30d7d7adb8cbc6296386a8f'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'ccf925b6326a8cf63d28c00a7645a0fa120608bfcf5dabb77a4522f249aa306d'
|
||||
'ab6471e61fad017ef1a5c3544a3c24029f81d7ad5bbdebbf98691ecfd051d4c4'
|
||||
'7fb1104c167edb79ec8fbdcde97940ed0f806aa978bdd14d0c665a1d76d25c24'
|
||||
'b1c6599d0e1ac9b66898d652ed99dae3fb8676d840a43ffa920a78d96e0521be'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
514)
|
||||
opt_ver="5.8-5.14"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.8-5.14.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
#'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.14-fsync.patch
|
||||
0007-v5.14-futex2_interface.patch
|
||||
0007-v5.14-futex_waitv.patch
|
||||
0007-v5.14-fsync1_via_futex_waitv.patch
|
||||
0007-v5.14-winesync.patch
|
||||
#0008-5.14-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.14-r3.patch
|
||||
#0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('7e068b5e0d26a62b10e5320b25dce57588cbbc6f781c090442138c9c9c3271b2'
|
||||
'578be613998d8aa7e5460d6d5448799e422198d31e157c67eec2e5e58abb9c60'
|
||||
'SKIP'
|
||||
'f5d3635520c9eb9519629f6df0d9a58091ed4b1ea4ddb1acd5caf5822d91a060'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'2ed4f07f972f1a5c42fa7746f486a28c28a568404ca0caf7ae9416acbae5555a'
|
||||
'5efd40c392ece498d2d43d5443e6537c2d9ef7cf9820d5ce80b6577fc5d1a4b2'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'aa67e81a27d9062e463594acb91eca6dd13388f23cbe53ca56298f9dba61cc10'
|
||||
'efe5e21706fdf64559ead866c85a5d88c5c3f743d814410df3810ca61cc5b966'
|
||||
'5742277f41f22bf29fa9742562946b8a01377f8a22adb42ceed3607541c1d5b6'
|
||||
'5bd2e13d3c70abe4efefa1c4374a5d3801fece087f093ce6a8ca5b8466dc1f20'
|
||||
'9b324790ecf0240cbb314b8e02a7dcbfb14e3408267b702ad96f40a2ce77fdc2'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'1565038792869f1e99dc321b57d00dbfa14ab824a995f39c4d3effceab0b5415'
|
||||
'80a965ee61357c8f0a697eb71225976b7e352d4e54d9e576d3a1779d2a06714a'
|
||||
'1b656ad96004f27e9dc63d7f430b50d5c48510d6d4cd595a81c24b21adb70313'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
515)
|
||||
opt_ver="5.15%2B"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.15%2B.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
0007-v5.15-fsync.patch
|
||||
0007-v5.15-futex_waitv.patch
|
||||
0007-v5.15-fsync1_via_futex_waitv.patch
|
||||
0007-v5.15-winesync.patch
|
||||
0008-5.15-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.15-r1.patch
|
||||
0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('57b2cf6991910e3b67a1b3490022e8a0674b6965c74c12da1e99d138d1991ee8'
|
||||
'ab323e0994a6bf1e8116a0e26c8e64edba87c7d85ec99f00380fdc11168dcda4'
|
||||
'SKIP'
|
||||
'24be2e8863e265195a24d7082804cd4328fd9f0a31b88672c884b9fd42469ed8'
|
||||
'6e3ef6bc4779ae3b7154642147d5ab3ece6e38e3e08bdb30f86d89d2b4855fa9'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'2e2c5c546fb2aabfa90f31310355324f58c6783d520b45b8898577bb7d1a5277'
|
||||
'5efd40c392ece498d2d43d5443e6537c2d9ef7cf9820d5ce80b6577fc5d1a4b2'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'0b73ec751187d899a4c347b9287c7a76d06523abaeca985a76d0f7ae167d4b1f'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
'6c4f0099896f69e56ebd8c9eac266ac8ad993acecd50945e0e84ef6f95f9ddca'
|
||||
'c8f7c50d9b1418ba22b5ca735c47111a162be416109714d26a674162e5b2cb97'
|
||||
'63a2ddf7ca9d3922f4eac3ac66bc37ffb10ad8b18b3e596832d3faa66b93dfa6'
|
||||
'751c4b010d3cef24586fa35498d19060691ad4def35066a0048275b2c371781f'
|
||||
'68659b54bd0c0539c22869feea8017faf947af6883d75c00089f2bfd9f265f8e'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'978b197efa56781a1d5651a3649c3d8b926d55748b4b9063788dfe1a861fc1bc'
|
||||
'7859fe0537662304a62b8f9bf9f6aff201d27097753f9c61e368a7fd19cc55df'
|
||||
'4499b55ed1c0b9527feba77160f6f244c93dfed417d04e0ba88a077a8140b281'
|
||||
'434e4707efc1bc3919597c87d44fa537f7563ae04236479bbf1adb5f410ab69d'
|
||||
'1b656ad96004f27e9dc63d7f430b50d5c48510d6d4cd595a81c24b21adb70313'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
516)
|
||||
opt_ver="5.15%2B"
|
||||
source=("$kernel_site"
|
||||
"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.15%2B.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
#'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
#0007-v5.16-fsync.patch
|
||||
0007-v5.16-fsync1_via_futex_waitv.patch
|
||||
0007-v5.16-winesync.patch
|
||||
#0008-5.14-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.16-r0.patch
|
||||
#0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('027d7e8988bb69ac12ee92406c3be1fe13f990b1ca2249e226225cd1573308bb'
|
||||
'aaa5555a903f794fb753f35427781b608d72ea34993c018ae1289037376037a0'
|
||||
'SKIP'
|
||||
'5b54e733edceca75df8d7c44aee4a811f3d058861ce54ab0839a7705d47e59df'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'fc6b5f3d03cacbb8ac547a8829f0c7544aaf7548f26298f8783d693a617b81d9'
|
||||
'5efd40c392ece498d2d43d5443e6537c2d9ef7cf9820d5ce80b6577fc5d1a4b2'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
#'4503034f211de3013f8500106da753e5d1bcac14bc5576671cbe6f574805b3cd'
|
||||
'9df628fd530950e37d31da854cb314d536f33c83935adf5c47e71266a55f7004'
|
||||
'f91223f98f132602a4fa525917a1f27afe30bdb55a1ac863e739c536188417b3'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'7bd99d10ec9f834de95424d033f940f9531beb3a7b4d9711448f0ed66832c03d'
|
||||
#'decd4a55c0d47b1eb808733490cdfea1207a2022d46f06d04a3cc60fdcb3f32c'
|
||||
'1aa0a172e1e27fb8171053f3047dcf4a61bd2eda5ea18f02b2bb391741a69887'
|
||||
'1b656ad96004f27e9dc63d7f430b50d5c48510d6d4cd595a81c24b21adb70313'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
517)
|
||||
opt_ver="5.15%2B"
|
||||
source=("$kernel_site"
|
||||
#"$patch_site"
|
||||
"https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-5.15%2B.patch"
|
||||
'config.x86_64' # stock Arch config
|
||||
#'config_hardened.x86_64' # hardened Arch config
|
||||
90-cleanup.hook
|
||||
cleanup
|
||||
# ARCH Patches
|
||||
0001-add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by.patch
|
||||
# TkG
|
||||
0002-clear-patches.patch
|
||||
0003-glitched-base.patch
|
||||
0003-glitched-cfs.patch
|
||||
0003-glitched-cfs-additions.patch
|
||||
0005-glitched-pds.patch
|
||||
0006-add-acs-overrides_iommu.patch
|
||||
#0007-v5.16-fsync.patch
|
||||
0007-v5.17-fsync1_via_futex_waitv.patch
|
||||
0007-v5.17-winesync.patch
|
||||
#0008-5.14-bcachefs.patch
|
||||
0009-glitched-ondemand-bmq.patch
|
||||
0009-glitched-bmq.patch
|
||||
0009-prjc_v5.17-r0.patch
|
||||
#0012-linux-hardened.patch
|
||||
0012-misc-additions.patch
|
||||
# MM Dirty Soft for WRITE_WATCH support in Wine
|
||||
0001-mm-Support-soft-dirty-flag-reset-for-VA-range.patch
|
||||
0002-mm-Support-soft-dirty-flag-read-with-reset.patch
|
||||
)
|
||||
sha256sums=('35575d4843f405ddd229f358a81fecca460fcd7a4b087bd74f0a34cc4c20b2c1'
|
||||
#upcoming_kernel_patch_sha256
|
||||
'SKIP'
|
||||
'961c380f74b9e28a47a21001fc330460dcd639f7580b7a178472e40af8f4dcd4'
|
||||
'1e15fc2ef3fa770217ecc63a220e5df2ddbcf3295eb4a021171e7edd4c6cc898'
|
||||
'66a03c246037451a77b4d448565b1d7e9368270c7d02872fbd0b5d024ed0a997'
|
||||
'f6383abef027fd9a430fd33415355e0df492cdc3c90e9938bf2d98f4f63b32e6'
|
||||
'35a7cde86fb94939c0f25a62b8c47f3de0dbd3c65f876f460b263181b3e92fc0'
|
||||
'fc6b5f3d03cacbb8ac547a8829f0c7544aaf7548f26298f8783d693a617b81d9'
|
||||
'5efd40c392ece498d2d43d5443e6537c2d9ef7cf9820d5ce80b6577fc5d1a4b2'
|
||||
'e5ea0bb25ee294c655ac3cc30e1eea497799826108fbfb4ef3258c676c1e8a12'
|
||||
'fca63d15ca4502aebd73e76d7499b243d2c03db71ff5ab0bf5cf268b2e576320'
|
||||
'19661ec0d39f9663452b34433214c755179894528bf73a42f6ba52ccf572832a'
|
||||
#'4503034f211de3013f8500106da753e5d1bcac14bc5576671cbe6f574805b3cd'
|
||||
'9df628fd530950e37d31da854cb314d536f33c83935adf5c47e71266a55f7004'
|
||||
'f91223f98f132602a4fa525917a1f27afe30bdb55a1ac863e739c536188417b3'
|
||||
'9fad4a40449e09522899955762c8928ae17f4cdaa16e01239fd12592e9d58177'
|
||||
'a557b342111849a5f920bbe1c129f3ff1fc1eff62c6bd6685e0972fc88e39911'
|
||||
'cfaa1a7efd24fb7967511ae0423362d33631bf355516c6ef524403e8e343e448'
|
||||
#'decd4a55c0d47b1eb808733490cdfea1207a2022d46f06d04a3cc60fdcb3f32c'
|
||||
'1aa0a172e1e27fb8171053f3047dcf4a61bd2eda5ea18f02b2bb391741a69887'
|
||||
'1b656ad96004f27e9dc63d7f430b50d5c48510d6d4cd595a81c24b21adb70313'
|
||||
'b0319a7dff9c48b2f3e3d3597ee154bf92223149a633a8b7ce4026252db86da6')
|
||||
;;
|
||||
esac
|
||||
|
||||
export KBUILD_BUILD_HOST=archlinux
|
||||
export KBUILD_BUILD_USER=$pkgbase
|
||||
export KBUILD_BUILD_TIMESTAMP="$(date -Ru${SOURCE_DATE_EPOCH:+d @$SOURCE_DATE_EPOCH})"
|
||||
|
||||
prepare() {
|
||||
rm -rf $pkgdir # Nuke the entire pkg folder so it'll get regenerated clean on next build
|
||||
|
||||
ln -s "${_where}/customization.cfg" "${srcdir}" # workaround
|
||||
|
||||
cd "${srcdir}/${_srcpath}"
|
||||
|
||||
_tkg_srcprep
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/${_srcpath}"
|
||||
|
||||
# Use custom compiler paths if defined
|
||||
if [ "$_compiler_name" = "-llvm" ] && [ -n "${CUSTOM_LLVM_PATH}" ]; then
|
||||
PATH=${CUSTOM_LLVM_PATH}/bin:${CUSTOM_LLVM_PATH}/lib:${CUSTOM_LLVM_PATH}/include:${PATH}
|
||||
elif [ -n "${CUSTOM_GCC_PATH}" ]; then
|
||||
PATH=${CUSTOM_GCC_PATH}/bin:${CUSTOM_GCC_PATH}/lib:${CUSTOM_GCC_PATH}/include:${PATH}
|
||||
fi
|
||||
|
||||
if [ "$_force_all_threads" = "true" ]; then
|
||||
_force_all_threads="-j$((`nproc`+1))"
|
||||
else
|
||||
_force_all_threads="${MAKEFLAGS}"
|
||||
fi
|
||||
|
||||
# ccache
|
||||
if [ "$_noccache" != "true" ] && pacman -Qq ccache &> /dev/null; then
|
||||
export PATH="/usr/lib/ccache/bin/:$PATH"
|
||||
export CCACHE_SLOPPINESS="file_macro,locale,time_macros"
|
||||
export CCACHE_NOHASHDIR="true"
|
||||
msg2 'ccache was found and will be used'
|
||||
fi
|
||||
|
||||
# document the TkG variables, excluding "_", "_EXT_CONFIG_PATH", "_where", and "_path".
|
||||
declare -p | cut -d ' ' -f 3 | grep -P '^_(?!=|EXT_CONFIG_PATH|where|path)' > "${srcdir}/customization-full.cfg"
|
||||
|
||||
# remove -O2 flag and place user optimization flag
|
||||
CFLAGS=${CFLAGS/-O2/}
|
||||
CFLAGS+=" ${_compileropt}"
|
||||
|
||||
# build!
|
||||
_runtime=$( time ( schedtool -B -n 1 -e ionice -n 1 make ${_force_all_threads} ${llvm_opt} LOCALVERSION= bzImage modules 2>&1 ) 3>&1 1>&2 2>&3 ) || _runtime=$( time ( make ${_force_all_threads} ${llvm_opt} LOCALVERSION= bzImage modules 2>&1 ) 3>&1 1>&2 2>&3 )
|
||||
}
|
||||
|
||||
hackbase() {
|
||||
pkgdesc="The $pkgdesc kernel and modules"
|
||||
depends=('coreutils' 'kmod' 'initramfs')
|
||||
optdepends=('linux-docs: Kernel hackers manual - HTML documentation that comes with the Linux kernel.'
|
||||
'crda: to set the correct wireless channels of your country.'
|
||||
'linux-firmware: Firmware files for Linux'
|
||||
'modprobed-db: Keeps track of EVERY kernel module that has ever been probed. Useful for make localmodconfig.'
|
||||
'nvidia-tkg: NVIDIA drivers for all installed kernels - non-dkms version.'
|
||||
'nvidia-dkms-tkg: NVIDIA drivers for all installed kernels - dkms version.'
|
||||
'update-grub: Simple wrapper around grub-mkconfig.')
|
||||
if [ -e "${srcdir}/winesync.rules" ]; then
|
||||
provides=("linux=${pkgver}" "${pkgbase}" VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE WINESYNC-MODULE winesync-header)
|
||||
else
|
||||
provides=("linux=${pkgver}" "${pkgbase}" VIRTUALBOX-GUEST-MODULES WIREGUARD-MODULE)
|
||||
fi
|
||||
replaces=(virtualbox-guest-modules-arch wireguard-arch)
|
||||
|
||||
cd "${srcdir}/${_srcpath}"
|
||||
|
||||
# get kernel version
|
||||
local _kernver="$(<version)"
|
||||
local modulesdir="$pkgdir/usr/lib/modules/$_kernver"
|
||||
|
||||
msg2 "Installing boot image..."
|
||||
# systemd expects to find the kernel here to allow hibernation
|
||||
# https://github.com/systemd/systemd/commit/edda44605f06a41fb86b7ab8128dcf99161d2344
|
||||
install -Dm644 "$(make ${llvm_opt} -s image_name)" "$modulesdir/vmlinuz"
|
||||
|
||||
# Used by mkinitcpio to name the kernel
|
||||
echo "$pkgbase" | install -Dm644 /dev/stdin "$modulesdir/pkgbase"
|
||||
|
||||
msg2 "Installing modules..."
|
||||
make INSTALL_MOD_PATH="$pkgdir/usr" INSTALL_MOD_STRIP=1 modules_install
|
||||
|
||||
# remove build and source links
|
||||
rm "$modulesdir"/{source,build}
|
||||
|
||||
# install cleanup pacman hook and script
|
||||
sed -e "s|cleanup|${pkgbase}-cleanup|g" "${srcdir}"/90-cleanup.hook |
|
||||
install -Dm644 /dev/stdin "${pkgdir}/usr/share/libalpm/hooks/90-${pkgbase}.hook"
|
||||
install -Dm755 "${srcdir}"/cleanup "${pkgdir}/usr/share/libalpm/scripts/${pkgbase}-cleanup"
|
||||
|
||||
# install customization file, for reference
|
||||
install -Dm644 "${srcdir}"/customization-full.cfg "${pkgdir}/usr/share/doc/${pkgbase}/customization.cfg"
|
||||
|
||||
# workaround for missing header with winesync
|
||||
if [ -e "${srcdir}/${_srcpath}/include/uapi/linux/winesync.h" ]; then
|
||||
msg2 "Workaround missing winesync header"
|
||||
install -Dm644 "${srcdir}/${_srcpath}"/include/uapi/linux/winesync.h "${pkgdir}/usr/include/linux/winesync.h"
|
||||
fi
|
||||
|
||||
# load winesync module at boot
|
||||
if [ -e "${srcdir}/winesync.conf" ]; then
|
||||
msg2 "Set the winesync module to be loaded at boot through /etc/modules-load.d"
|
||||
install -Dm644 "${srcdir}"/winesync.conf "${pkgdir}/etc/modules-load.d/winesync.conf"
|
||||
fi
|
||||
|
||||
# install udev rule for winesync
|
||||
if [ -e "${srcdir}/winesync.rules" ]; then
|
||||
msg2 "Installing udev rule for winesync"
|
||||
install -Dm644 "${srcdir}"/winesync.rules "${pkgdir}/etc/udev/rules.d/winesync.rules"
|
||||
fi
|
||||
}
|
||||
|
||||
hackheaders() {
|
||||
pkgdesc="Headers and scripts for building modules for the $pkgdesc kernel"
|
||||
provides=("linux-headers=${pkgver}" "${pkgbase}-headers=${pkgver}")
|
||||
case $_basever in
|
||||
54|57|58|59|510)
|
||||
;;
|
||||
*)
|
||||
depends=('pahole')
|
||||
;;
|
||||
esac
|
||||
|
||||
cd "${srcdir}/${_srcpath}"
|
||||
local builddir="${pkgdir}/usr/lib/modules/$(<version)/build"
|
||||
|
||||
msg2 "Installing build files..."
|
||||
install -Dt "$builddir" -m644 .config Makefile Module.symvers System.map \
|
||||
localversion.* version vmlinux
|
||||
install -Dt "$builddir/kernel" -m644 kernel/Makefile
|
||||
install -Dt "$builddir/arch/x86" -m644 arch/x86/Makefile
|
||||
cp -t "$builddir" -a scripts
|
||||
|
||||
# add objtool for external module building and enabled VALIDATION_STACK option
|
||||
install -Dt "$builddir/tools/objtool" tools/objtool/objtool
|
||||
|
||||
# add xfs and shmem for aufs building
|
||||
mkdir -p "$builddir"/{fs/xfs,mm}
|
||||
|
||||
# add resolve_btfids on 5.16+
|
||||
if [ $_basever -ge 516 ]; then
|
||||
install -Dt "$builddir"/tools/bpf/resolve_btfids tools/bpf/resolve_btfids/resolve_btfids
|
||||
fi
|
||||
|
||||
msg2 "Installing headers..."
|
||||
cp -t "$builddir" -a include
|
||||
cp -t "$builddir/arch/x86" -a arch/x86/include
|
||||
install -Dt "$builddir/arch/x86/kernel" -m644 arch/x86/kernel/asm-offsets.s
|
||||
|
||||
install -Dt "$builddir/drivers/md" -m644 drivers/md/*.h
|
||||
install -Dt "$builddir/net/mac80211" -m644 net/mac80211/*.h
|
||||
|
||||
# http://bugs.archlinux.org/task/13146
|
||||
install -Dt "$builddir/drivers/media/i2c" -m644 drivers/media/i2c/msp3400-driver.h
|
||||
|
||||
# http://bugs.archlinux.org/task/20402
|
||||
install -Dt "$builddir/drivers/media/usb/dvb-usb" -m644 drivers/media/usb/dvb-usb/*.h
|
||||
install -Dt "$builddir/drivers/media/dvb-frontends" -m644 drivers/media/dvb-frontends/*.h
|
||||
install -Dt "$builddir/drivers/media/tuners" -m644 drivers/media/tuners/*.h
|
||||
|
||||
msg2 "Installing KConfig files..."
|
||||
find . -name 'Kconfig*' -exec install -Dm644 {} "$builddir/{}" \;
|
||||
|
||||
msg2 "Removing unneeded architectures..."
|
||||
local arch
|
||||
for arch in "$builddir"/arch/*/; do
|
||||
[[ $arch = */x86/ ]] && continue
|
||||
echo "Removing $(basename "$arch")"
|
||||
rm -r "$arch"
|
||||
done
|
||||
|
||||
msg2 "Removing documentation..."
|
||||
rm -r "$builddir/Documentation"
|
||||
|
||||
msg2 "Removing broken symlinks..."
|
||||
find -L "$builddir" -type l -printf 'Removing %P\n' -delete
|
||||
|
||||
msg2 "Removing loose objects..."
|
||||
find "$builddir" -type f -name '*.o' -printf 'Removing %P\n' -delete
|
||||
|
||||
msg2 "Stripping build tools..."
|
||||
local file
|
||||
while read -rd '' file; do
|
||||
case "$(file -bi "$file")" in
|
||||
application/x-sharedlib\;*) # Libraries (.so)
|
||||
strip -v $STRIP_SHARED "$file" ;;
|
||||
application/x-archive\;*) # Libraries (.a)
|
||||
strip -v $STRIP_STATIC "$file" ;;
|
||||
application/x-executable\;*) # Binaries
|
||||
strip -v $STRIP_BINARIES "$file" ;;
|
||||
application/x-pie-executable\;*) # Relocatable binaries
|
||||
strip -v $STRIP_SHARED "$file" ;;
|
||||
esac
|
||||
done < <(find "$builddir" -type f -perm -u+x ! -name vmlinux -print0)
|
||||
|
||||
msg2 "Adding symlink..."
|
||||
mkdir -p "$pkgdir/usr/src"
|
||||
ln -sr "$builddir" "$pkgdir/usr/src/$pkgbase"
|
||||
|
||||
if [ "$_STRIP" = "true" ]; then
|
||||
echo "Stripping vmlinux..."
|
||||
strip -v $STRIP_STATIC "$builddir/vmlinux"
|
||||
fi
|
||||
|
||||
if [ "$_NUKR" = "true" ]; then
|
||||
rm -rf "$srcdir" # Nuke the entire src folder so it'll get regenerated clean on next build
|
||||
fi
|
||||
}
|
||||
|
||||
source /dev/stdin <<EOF
|
||||
package_${pkgbase}() {
|
||||
hackbase
|
||||
}
|
||||
|
||||
package_${pkgbase}-headers() {
|
||||
hackheaders
|
||||
}
|
||||
EOF
|
154
linux-tkg/README.md
Normal file
154
linux-tkg/README.md
Normal file
|
@ -0,0 +1,154 @@
|
|||
## linux-tkg
|
||||
|
||||
This repository provides scripts to automatically download, patch and compile the Linux Kernel from [the official Linux git repository](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git), with a selection of patches aiming for better desktop/gaming experience. The provided patches can be enabled/disabled by editing the `customization.cfg` file and/or by following the interactive install script. You can also use your own patches (more information in `customization.cfg` file).
|
||||
|
||||
### Important information
|
||||
|
||||
- **Non-pacman distros support can be considered experimental. You're invited to report issues you might encounter with it.**
|
||||
|
||||
- In `intel_pstate` driver, frequency scaling aggressiveness has been changed with kernel 5.5 which results in stutters and poor performance in low/medium load scenarios (for higher power savings). As a workaround for our gaming needs, we are setting it to passive mode to make use of the `acpi_cpufreq` governor passthrough, keeping full support for turbo frequencies. It's combined with our aggressive ondemand governor by default for good performance on most CPUs while keeping frequency scaling for power savings. In a typical low/medium load scenario (Core i7 9700k, playing Mario Galaxy on Dolphin emulator) intel_pstate in performance mode gives a stuttery 45-50 fps experience, while passive mode + aggressive ondemand offers a locked 60 fps.
|
||||
- Nvidia's proprietary drivers might need to be patched if they don't support your chosen kernel OOTB: [Frogging-Family nvidia-all](https://github.com/Frogging-Family/nvidia-all) can do that automatically for you.
|
||||
- Note regarding kernels older than 5.9 on Arch Linux: since the switch to `zstd` compressed `initramfs` by default, you will face an `invalid magic at start of compress` error by default. You can workaround the issue by editing `/etc/mkinitcpio.conf` to uncomment the `COMPRESSION="lz4"` (for example, since that's the best option after zstd) line and regenerating `initramfs` for all kernels with `sudo mkinitpcio -P`
|
||||
|
||||
### Customization options
|
||||
#### Alternative CPU schedulers
|
||||
|
||||
[CFS](https://en.wikipedia.org/wiki/Completely_Fair_Scheduler) is the only CPU scheduler available in the "vanilla" kernel sources. Its current implementation doesn't allow for injecting additional schedulers, and requires replacing it. Only one scheduler can be patched in at a time.
|
||||
|
||||
Alternative schedulers are available to you in linux-tkg:
|
||||
- Project C / PDS & BMQ by Alfred Chen: [blog](http://cchalpha.blogspot.com/ ), [code repository](https://gitlab.com/alfredchen/projectc)
|
||||
- MuQSS by Con Kolivas : [blog](http://ck-hack.blogspot.com/), [code repository](https://github.com/ckolivas/linux)
|
||||
- CacULE by Hamad Marri: [code repository](https://github.com/hamadmarri/cacule-cpu-scheduler)
|
||||
- Undead PDS: TkG's port of the pre-Project C "PDS-mq" scheduler by Alfred Chen. While PDS-mq got dropped with kernel 5.1 in favor of its BMQ evolution/rework, it wasn't on par with PDS-mq in gaming. "U" PDS still performs better in some cases than other schedulers, so it's been kept undead.
|
||||
|
||||
These alternative schedulers can offer a better performance/latency ratio for gaming and desktop use. The availability of each scheduler depends on the chosen Kernel version: the script will display what's available on a per-version basis.
|
||||
#### Default tweaks
|
||||
- Memory management and swapping tweaks
|
||||
- Scheduling tweaks
|
||||
- `CFS` tweaks
|
||||
- Using the ["Cake"](https://www.bufferbloat.net/projects/codel/wiki/CakeTechnical/) network queue management system
|
||||
- Using `vm.max_map_count=524288` by default
|
||||
- Cherry-picked patches from [Clear Linux's patchset](https://github.com/clearlinux-pkgs/linux)
|
||||
|
||||
#### Optional tweaks
|
||||
The `customization.cfg` file offers many toggles for extra tweaks:
|
||||
- `Fsync`, `Futex2` and `Fastsync+winesync` support: can improve the performance in games, needs a patched wine like [wine-tkg](https://github.com/Frogging-Family/wine-tkg-git)
|
||||
- [Graysky's per-CPU-arch native optimizations](https://github.com/graysky2/kernel_compiler_patch): tunes the compiled code to to a specified CPU
|
||||
- Compile with GCC or Clang with optional `O2`/`O3` and `LTO` (Clang only) optimizations.
|
||||
- **Warning regarding DKMS modules and Clang:** `DKMS` will default to using GCC, which will fail to build modules against a Clang-built kernel. This will - for example - break Nvidia drivers. Forcing `DKMS` to use Clang can be done but isn't recommended.
|
||||
- Using [Modprobed-db](https://github.com/graysky2/modprobed-db)'s database can reduce the compilation time and produce a smaller kernel which will only contain the modules listed in it. **NOT recommended**
|
||||
- **Warning**: make sure to read [thoroughly about it first](https://wiki.archlinux.org/index.php/Modprobed-db) since it comes with caveats that can lead to an unbootable kernel.
|
||||
- "Zenify" patchset using core blk, mm and scheduler tweaks from Zen
|
||||
- [Anbox](https://wiki.archlinux.org/title/Anbox) support (See [Anbox usage](https://github.com/Frogging-Family/linux-tkg#anbox-usage))
|
||||
- `ZFS` FPU symbols (<5.9)
|
||||
- Overrides for missing ACS capabilities
|
||||
- Provide own kernel `.config` file
|
||||
- ...
|
||||
#### User patches
|
||||
|
||||
To apply your own patch files using the provided scripts, you will need to put them in a `linux5y-tkg-userpatches` folder -- `y` needs to be changed with the kernel version the patch works on, _e.g_ `linux510-tkg-userpatches` -- at the same level as the `PKGBUILD` file, with the `.mypatch` extension. The script will by default ask if you want to apply them, one by one. The option `_user_patches` should be set to `true` in the `customization.cfg` file for this to work.
|
||||
|
||||
#### Anbox usage
|
||||
|
||||
When enabling the anbox support option, the `binder` and `ashmem` modules are built-in. You don't have to load them. However you'll need to mount binderfs :
|
||||
```shell
|
||||
sudo mkdir /dev/binderfs
|
||||
sudo mount -t binder binder /dev/binderfs
|
||||
```
|
||||
|
||||
To make this persistent, you can create `/etc/tmpfiles.d/anbox.conf` with the following content :
|
||||
```
|
||||
d! /dev/binderfs 0755 root root
|
||||
```
|
||||
After which you can add the following to your `/etc/fstab` :
|
||||
```
|
||||
binder /dev/binderfs binder nofail 0 0
|
||||
```
|
||||
|
||||
Then, if needed, start the anbox service :
|
||||
```shell
|
||||
systemctl start anbox-container-manager.service
|
||||
```
|
||||
|
||||
You can also enable the service for it to be auto-started on boot :
|
||||
```shell
|
||||
systemctl enable anbox-container-manager.service
|
||||
```
|
||||
|
||||
You're set to run Anbox.
|
||||
If you prefer automatic setup you can install `anbox-support` from AUR which will take care of everything by itself.
|
||||
|
||||
|
||||
### Install procedure
|
||||
|
||||
#### Arch & derivatives
|
||||
```shell
|
||||
git clone https://github.com/Frogging-Family/linux-tkg.git
|
||||
cd linux-tkg
|
||||
# Optional: edit the "customization.cfg" file
|
||||
makepkg -si
|
||||
```
|
||||
The script will use a slightly modified Arch config from the `linux-tkg-config` folder, it can be changed through the `_configfile` variable in `customization.cfg`. The options selected at build-time are installed to `/usr/share/doc/$pkgbase/customization.cfg`, where `$pkgbase` is the package name.
|
||||
|
||||
#### DEB (Debian, Ubuntu and derivatives) and RPM (Fedora, SUSE and derivatives) based distributions
|
||||
The interactive `install.sh` script will create, depending on the selected distro, `.deb` or `.rpm` packages, move them in the the subfolder `DEBS` or `RPMS` then prompts to install them with the distro's package manager.
|
||||
```shell
|
||||
git clone https://github.com/Frogging-Family/linux-tkg.git
|
||||
cd linux-tkg
|
||||
# Optional: edit the "customization.cfg" file
|
||||
./install.sh install
|
||||
```
|
||||
Uninstalling custom kernels installed through the script has to be done
|
||||
manually. `install.sh` can can help out with some useful information:
|
||||
```shell
|
||||
cd path/to/linux-tkg
|
||||
./install.sh uninstall-help
|
||||
```
|
||||
The script will use a slightly modified Arch config from the `linux-tkg-config` folder, it can be changed through the `_configfile` variable in `customization.cfg`.
|
||||
|
||||
#### Void Linux
|
||||
```shell
|
||||
git clone -b tkg https://github.com/Hyper-KVM/void-packages/
|
||||
cd void-packages
|
||||
./xbps-src binary-bootstrap
|
||||
# Optional: edit customization.cfg located in srcpkgs/linux-tkg/files
|
||||
# Optional: add custom userpatches with the ".mypatch" extension to srcpkgs/linux-tkg/files/mypatches
|
||||
./xbps-src pkg -j$(nproc) linux-tkg
|
||||
```
|
||||
If you have to restart the build for any reason, run `./xbps-src clean linux-tkg` first.
|
||||
#### Generic install
|
||||
The interactive `install.sh` script can be used to perform a "Generic" install by choosing `Generic` when prompted. It git clones the kernel tree in the `linux-src-git` folder, patches the code and edits a `.config` file in it. The commands to do are the following:
|
||||
```shell
|
||||
git clone https://github.com/Frogging-Family/linux-tkg.git
|
||||
cd linux-tkg
|
||||
# Optional: edit the "customization.cfg" file
|
||||
./install.sh install
|
||||
```
|
||||
The script will compile the kernel then prompt before doing the following:
|
||||
```shell
|
||||
sudo cp -R . /usr/src/linux-tkg-${kernel_flavor}
|
||||
cd /usr/src/linux-tkg-${kernel_flavor}
|
||||
sudo make modules_install
|
||||
sudo make install
|
||||
sudo dracut --force --hostonly --kver $_kernelname $_dracut_options
|
||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||
```
|
||||
**Notes:**
|
||||
- All the needed dependencies to patch, configure, compile or install the kernel are expected to be installed by the user beforehand.
|
||||
- If you only want the script to patch the sources in `linux-src-git`, you can use `./install.sh config`
|
||||
- `${kernel_flavor}` is a default naming scheme but can be customized with the variable `_kernel_localversion` in `customization.cfg`.
|
||||
- `_dracut_options` is a variable that can be changed in `customization.cfg`.
|
||||
- The script uses Arch's `.config` file as a base. A custom one can be provided through `_configfile` in `customization.cfg`.
|
||||
- The installed files will not be tracked by your package manager and uninstalling requires manual intervention. `./install.sh uninstall-help` can help with useful information if your install procedure follows the `Generic` approach.
|
||||
#### Gentoo
|
||||
The interactive `install.sh` script supports Gentoo by following the same procedure as `Generic`, symlinks the sources folder in `/usr/src/` to `/usr/src/linux`, then offers to do an `emerge @module-rebuild` for convenience
|
||||
```shell
|
||||
git clone https://github.com/Frogging-Family/linux-tkg.git
|
||||
cd linux-tkg
|
||||
# Optional: edit the "customization.cfg" file
|
||||
./install.sh install
|
||||
```
|
||||
**Notes:**
|
||||
- The script will prompt for using `llvm-libunwind`, it can only work with the `llvm-libunwind` `USE` flag in `sys-devel/clang` but it is experimental:
|
||||
- Manual intervention is needed on the `net-fs/samba` EBUILD, see [here](https://bugs.gentoo.org/791349)
|
||||
- The `-unwind` `USE` flag is needed in `app-emulation/wine*` EBUILDs
|
271
linux-tkg/customization.cfg
Normal file
271
linux-tkg/customization.cfg
Normal file
|
@ -0,0 +1,271 @@
|
|||
# linux-TkG config file
|
||||
|
||||
# Linux distribution you are using, options are "Arch", "Void", "Ubuntu", "Debian", "Fedora", "Suse", "Gentoo", "Generic".
|
||||
# It is automatically set to "Arch" when using PKGBUILD.
|
||||
# If left empty, the script will prompt
|
||||
_distro=""
|
||||
|
||||
# Kernel Version - Options are "5.4", "5.7", "5.8", "5.9", "5.10", "5.11", "5.12", "5.13", "5.14"
|
||||
_version=""
|
||||
|
||||
#### 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/linux-tkg.cfg
|
||||
_EXT_CONFIG_PATH=~/.config/frogminer/linux-tkg.cfg
|
||||
|
||||
# [Arch specific] Set to anything else than "true" to limit cleanup operations and keep source and files generated during compilation.
|
||||
# Default is "true".
|
||||
_NUKR="true"
|
||||
|
||||
# [install.sh specific] Git mirror to use to get the kernel sources, possible values are "googlesource.com" and "kernel.org"
|
||||
_git_mirror="kernel.org"
|
||||
|
||||
# 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=""
|
||||
|
||||
# Custom LLVM compiler root dirs - Leave empty to use system llvm compiler
|
||||
# Example: CUSTOM_LLVM_PATH="/home/frog/PKGBUILDS/mostlyportable-llvm/llvm-mostlyportable-11.0.0"
|
||||
CUSTOM_LLVM_PATH=""
|
||||
|
||||
# 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 prevent ccache from being used and set CONFIG_GCC_PLUGINS=y (which needs to be disabled for ccache to work properly)
|
||||
_noccache="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
|
||||
# Using this option can trigger user prompts if the config doesn't go smoothly.
|
||||
# !!!! Make sure to have a well populated db !!!! - Leave empty to be asked about it at build time
|
||||
_modprobeddb="false"
|
||||
|
||||
# modprobed-db database file location
|
||||
_modprobeddb_db_path=~/.config/modprobed.db
|
||||
|
||||
# Set to "1" to call make menuconfig, "2" to call make nconfig, "3" to call make xconfig, 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=""
|
||||
|
||||
# [install.sh specific] Use tmpfs as a work directory, recommended when RAM >= 32GB to reduce HDD/SSD usage. For more information, see https://wiki.archlinux.org/title/Tmpfs
|
||||
_use_tmpfs="false"
|
||||
|
||||
# [install.sh specific] tmpfs folder path, only used when _use_tmpfs="true".
|
||||
# Creates a linux-tkg work folder within that pathmake sure to have nothing important in "$_tmpfs_path/linux-tkg"
|
||||
_tmpfs_path="/tmp"
|
||||
|
||||
# [install.sh: Generic and Gentoo specific] Dracut options when generating initramfs
|
||||
_dracut_options="--lz4"
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
|
||||
# Name of the default config file to use for the kernel
|
||||
# Default (empty) : "config.x86_64" from the linux-tkg-config/5.y folder.
|
||||
# "running-kernel" : Picks the .config file from the currently running kernel.
|
||||
# It is recommended to be running an official kernel before running this script, to pick off a correct .config file
|
||||
# "config_hardened.x86_64" : config file for a hardened kernel, available for kernel version "5.13", "5.10" and "5.4" .
|
||||
# To get a complete hardened setup, you have to use "cfs" as _cpusched.
|
||||
# User provided value : custom user provided file, the given path should be relative to the PKGBUILD file. This enables for example to use a user stripped down .config file.
|
||||
# If the .config file isn't up to date with the chosen kernel version, any extra CONFIG_XXXX is set to its default value.
|
||||
# Note: the script copies the resulting .config file as "kernelconfig.new" next to the PKGBUILD as a convenience for an eventual re-use. It gets overwritten at each run.
|
||||
# One can use "kernelconfig.new" here to always use the latest edited .config file. modprobed-db needs to be used only once for its changes to be picked up.
|
||||
_configfile=""
|
||||
|
||||
# Determine whether to call "olddefconfig" (default) or "oldconfig" for manual config updating interaction.
|
||||
_config_updating="olddefconfig"
|
||||
|
||||
# Disable some non-module debugging - See PKGBUILD for the list
|
||||
_debugdisable="false"
|
||||
|
||||
# Strip the vmlinux file after build is done. Set to anything other than "true" if you require debug headers. Default is "true"
|
||||
_STRIP="true"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# CPU scheduler - Options are "upds" (TkG's Undead PDS), "pds", "bmq", "muqss", "cacule" or "cfs" (kernel's default)
|
||||
_cpusched=""
|
||||
|
||||
# Compiler to use - Options are "gcc" or "llvm".
|
||||
# For advanced users.
|
||||
_compiler=""
|
||||
|
||||
# Force the use of the LLVM Integrated Assembler whether using LLVM, LTO or not.
|
||||
# Set to "1" to enable.
|
||||
_llvm_ias=""
|
||||
|
||||
# Clang LTO mode, only available with the "llvm" compiler - options are "no", "full" or "thin".
|
||||
# ! This is currently experimental and might result in an unbootable kernel - Not recommended !
|
||||
# "no: do not enable LTO"
|
||||
# "full: uses 1 thread for Linking, slow and uses more memory, theoretically with the highest performance gains."
|
||||
# "thin: uses multiple threads, faster and uses less memory, may have a lower runtime performance than Full."
|
||||
_lto_mode=""
|
||||
|
||||
# Apply PREEMPT_RT patchset to the kernel.
|
||||
# ! Only CFS CPU scheduler is compatible with this patchset !
|
||||
# Set to "1" to enable.
|
||||
_preempt_rt=""
|
||||
|
||||
# Forcibly apply the PREEMPT_RT patchset to the kernel, even when upstream does not officially support the kernel subversion.
|
||||
# ! This will still not apply when the patch itself or linux-tkg (see _version) do not support the kernel major version - Not recommended !
|
||||
# Set to "1" to enable.
|
||||
_preempt_rt_force=""
|
||||
|
||||
# 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 "true" to enable misc additions - May contain temporary fixes pending upstream or changes that can break on non-Arch - Kernel default is "true"
|
||||
_misc_adds="true"
|
||||
|
||||
# Set to "0" for periodic ticks, "1" to use CattaRappa mode (enabling full tickless) and "2" for tickless idle only.
|
||||
# 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=""
|
||||
|
||||
# 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 Bcache filesystem support. You'll have to install bcachefs-tools-git from AUR for utilities - https://bcachefs.org/ - If in doubt, set to "false"
|
||||
_bcachefs=""
|
||||
|
||||
# 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
|
||||
# Can be enabled alongside _futex_waitv on 5.13+ to use it as a fallback for older Proton builds
|
||||
_fsync="true"
|
||||
|
||||
# Set to "true" to enable support for futex2, an experimental interface that can be used by proton-tkg and proton 5.13 experimental through Fsync - Can be enabled alongside fsync to use it as a fallback
|
||||
# https://gitlab.collabora.com/tonyk/linux/-/tree/futex2-dev
|
||||
_futex2="true"
|
||||
|
||||
# Set to "true" to enable backported patches to add support for the futex_waitv() syscall, a new interface for fsync. It will appear in mainline at Linux 5.16 release and requires a wine/proton with builtin support for it. It's expected to be available in Valve Proton 6.3 stable soon - https://github.com/ValveSoftware/wine/pull/128
|
||||
# !! Disables futex2 interfaces support !!
|
||||
# https://github.com/andrealmeid/futex_waitv_patches
|
||||
_futex_waitv="false"
|
||||
|
||||
# Set to "true" to enable support for winesync, an experimental replacement for esync - requires patched wine - https://repo.or.cz/linux/zf.git/shortlog/refs/heads/winesync
|
||||
# ! Can't be used on multiple kernels installed side-by-side, which will require https://aur.archlinux.org/packages/winesync-dkms/ instead of this option !
|
||||
_winesync="false"
|
||||
|
||||
# Set to "true" to enable Binder and Ashmem, the kernel modules required to use the android emulator Anbox. ! This doesn't apply to 5.4.y !
|
||||
_anbox=""
|
||||
|
||||
# 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 prompt at kernel config if left empty
|
||||
# AMD CPUs : "k8" "k8sse3" "k10" "barcelona" "bobcat" "jaguar" "bulldozer" "piledriver" "steamroller" "excavator" "zen" "zen2" "zen3" (zen3 opt support depends on GCC11)
|
||||
# Intel CPUs : "mpsc"(P4 & older Netburst based Xeon) "atom" "core2" "nehalem" "westmere" "silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylakex" "cannonlake" "icelake" "goldmont" "goldmontplus" "cascadelake" "cooperlake" "tigerlake"
|
||||
# Other options :
|
||||
# - "native_amd" (use compiler autodetection - Selecting your arch manually in the list above is recommended instead of this option)
|
||||
# - "native_intel" (use compiler autodetection and will prompt for P6_NOPS - Selecting your arch manually in the list above is recommended instead of this option)
|
||||
# - "generic" (kernel's default - to share the package between machines with different CPU µarch as long as they are x86-64)
|
||||
#
|
||||
# https://en.wikipedia.org/wiki/X86-64#Microarchitecture_Levels)
|
||||
# - "generic_v2" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v2
|
||||
# - "generic_v3" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v3
|
||||
# - "generic_v4" (depends on GCC11 - to share the package between machines with different CPU µarch supporting at least x86-64-v4
|
||||
_processor_opt=""
|
||||
|
||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# CacULE only - Enable Response Driven Balancer, an experimental load balancer for CacULE
|
||||
_cacule_rdb="false"
|
||||
|
||||
# CacULE only - Load balance time period - Default is 19
|
||||
# https://github.com/hamadmarri/cacule-cpu-scheduler/blob/master/patches/CacULE/RDB/rdb.patch#L56
|
||||
_cacule_rdb_interval="19"
|
||||
|
||||
# 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" ("2000" can be set for cacule cpu sched, and will fallback to default if set while on another schedulers) - More options available in kernel config prompt when left empty depending on selected cpusched with the default option pointed with a ">"
|
||||
_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 in some way at runtime.
|
||||
_aggressive_ondemand="true"
|
||||
|
||||
# [Advanced] Default TCP IPv4 algorithm to use. Options are: "yeah", "bbr", "cubic", "reno", "vegas" and "westwood". Leave empty if unsure.
|
||||
# This config option will not be prompted
|
||||
# Can be changed at runtime with the command line `# echo "$name" > /proc/sys/net/ipv4/tcp_congestion_control` where $name is one of the options above.
|
||||
# Default (empty) and fallback : cubic
|
||||
_tcp_cong_alg=""
|
||||
|
||||
# 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=""
|
||||
|
||||
# [non-Arch specific] Kernel localversion. Putting it to "Mario" will make for example the kernel version be 5.7.0-tkg-Mario (given by uname -r)
|
||||
# If left empty, it will use "-tkg-${_cpusched}${_compiler}" where "${_cpusched}" will be replaced by the user chosen scheduler, ${_compiler} will be replaced by "-llvm" if clang is used (nothing for GCC).
|
||||
_kernel_localversion=""
|
||||
|
||||
# Set to "true" to add back missing symbol for AES-NI/AVX support on ZFS - This is a legacy option that can be ignored on 5.10+ kernels - https://github.com/NixOS/nixpkgs/blob/master/pkgs/os-specific/linux/kernel/export_kernel_fpu_functions.patch
|
||||
_zfsfix="true"
|
||||
|
||||
|
||||
#### 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 a subfolder called linux<version>-tkg-userpatches (e.g. linux510-tkg-userpatches) next to the PKGBUILD and giving them the .mypatch extension.
|
||||
# You can also revert patches by putting them in that same folder 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"
|
552
linux-tkg/install.sh
Executable file
552
linux-tkg/install.sh
Executable file
|
@ -0,0 +1,552 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Stop the script at any ecountered error
|
||||
set -e
|
||||
|
||||
_where=`pwd`
|
||||
srcdir="$_where"
|
||||
|
||||
source customization.cfg
|
||||
|
||||
source linux-tkg-config/prepare
|
||||
|
||||
msg2() {
|
||||
echo -e " \033[1;34m->\033[1;0m \033[1;1m$1\033[1;0m" >&2
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e " \033[1;31m==> ERROR: $1\033[1;0m" >&2
|
||||
}
|
||||
|
||||
warning() {
|
||||
echo -e " \033[1;33m==> WARNING: $1\033[1;0m" >&2
|
||||
}
|
||||
|
||||
plain() {
|
||||
echo -e "$1" >&2
|
||||
}
|
||||
|
||||
_distro_prompt() {
|
||||
echo "Which linux distribution are you running ?"
|
||||
echo "if it's not on the list, chose the closest one to it: Fedora/Suse for RPM, Ubuntu/Debian for DEB"
|
||||
_prompt_from_array "Debian" "Fedora" "Suse" "Ubuntu" "Gentoo" "Generic"
|
||||
_distro="${_selected_value}"
|
||||
}
|
||||
|
||||
_install_dependencies() {
|
||||
if [ "$_compiler_name" = "llvm" ]; then
|
||||
clang_deps="llvm clang lld"
|
||||
fi
|
||||
if [ "$_distro" = "Debian" -o "$_distro" = "Ubuntu" ]; then
|
||||
msg2 "Installing dependencies"
|
||||
sudo apt install bc bison build-essential ccache cpio fakeroot flex git kmod libelf-dev libncurses5-dev libssl-dev lz4 qtbase5-dev rsync schedtool wget zstd ${clang_deps} -y
|
||||
elif [ "$_distro" = "Fedora" ]; then
|
||||
msg2 "Installing dependencies"
|
||||
if [ $(rpm -E %fedora) = "32" ]; then
|
||||
sudo dnf install bison ccache dwarves elfutils-libelf-devel fedora-packager fedpkg flex gcc-c++ git grubby libXi-devel lz4 ncurses-devel openssl-devel pesign qt5-devel rpm-build rpmdevtools schedtool zstd ${clang_deps} -y
|
||||
else
|
||||
sudo dnf install bison ccache dwarves elfutils-devel elfutils-libelf-devel fedora-packager fedpkg flex gcc-c++ git grubby libXi-devel lz4 make ncurses-devel openssl openssl-devel perl-devel perl-generators pesign python3-devel qt5-qtbase-devel rpm-build rpmdevtools schedtool zstd -y ${clang_deps} -y
|
||||
fi
|
||||
elif [ "$_distro" = "Suse" ]; then
|
||||
msg2 "Installing dependencies"
|
||||
sudo zypper install -y bc bison ccache dwarves elfutils flex gcc-c++ git libXi-devel libelf-devel libqt5-qtbase-common-devel libqt5-qtbase-devel lz4 make ncurses-devel openssl-devel patch pesign rpm-build rpmdevtools schedtool ${clang_deps}
|
||||
fi
|
||||
}
|
||||
|
||||
_linux_git_branch_checkout() {
|
||||
|
||||
cd "$_where"
|
||||
|
||||
if [[ -z "$_git_mirror" || ! "$_git_mirror" =~ ^(kernel\.org|googlesource\.com)$ ]]; then
|
||||
while true; do
|
||||
echo "Which git repository would you like to clone the linux sources from ?"
|
||||
echo " 0) kernel.org (official)"
|
||||
echo " 1) googlesource.com (faster mirror)"
|
||||
read -p "[0-1]: " _git_repo_index
|
||||
|
||||
if [ "$_git_repo_index" = "0" ]; then
|
||||
_git_mirror="kernel.org"
|
||||
break
|
||||
elif [ "$_git_repo_index" = "1" ]; then
|
||||
_git_mirror="googlesource.com"
|
||||
break
|
||||
else
|
||||
echo "Wrong index."
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if ! [ -d linux-src-git ]; then
|
||||
msg2 "First initialization of the linux source code git folder"
|
||||
mkdir linux-src-git
|
||||
cd linux-src-git
|
||||
git init
|
||||
|
||||
git remote add kernel.org https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||
git remote add googlesource.com https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable
|
||||
else
|
||||
cd linux-src-git
|
||||
|
||||
# Remove "origin" remote if present
|
||||
if git remote -v | grep -w "origin" ; then
|
||||
git remote rm origin
|
||||
fi
|
||||
|
||||
if ! git remote -v | grep -w "kernel.org" ; then
|
||||
git remote add kernel.org https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||
fi
|
||||
if ! git remote -v | grep -w "googlesource.com" ; then
|
||||
git remote add googlesource.com https://kernel.googlesource.com/pub/scm/linux/kernel/git/stable/linux-stable
|
||||
fi
|
||||
|
||||
msg2 "Current branch: $(git branch | grep "\*")"
|
||||
msg2 "Reseting files to their original state"
|
||||
|
||||
git reset --hard HEAD
|
||||
git clean -f -d -x
|
||||
fi
|
||||
|
||||
if [[ "$_sub" = rc* ]]; then
|
||||
msg2 "Switching to master branch for RC Kernel"
|
||||
|
||||
if ! git branch --list | grep "master-${_git_mirror}" ; then
|
||||
msg2 "master branch doesn't locally exist, shallow cloning..."
|
||||
git remote set-branches --add kernel.org master
|
||||
git remote set-branches --add googlesource.com master
|
||||
git fetch --depth=1 $_git_mirror master
|
||||
git fetch --depth 1 $_git_mirror tag "v${_basekernel}-${_sub}"
|
||||
git checkout -b master-${_git_mirror} ${_git_mirror}/master
|
||||
else
|
||||
msg2 "master branch exists locally, updating..."
|
||||
git checkout master-${_git_mirror}
|
||||
git fetch --depth 1 $_git_mirror tag "v${_basekernel}-${_sub}"
|
||||
git reset --hard ${_git_mirror}/master
|
||||
fi
|
||||
msg2 "Checking out latest RC tag: v${_basekernel}-${_sub}"
|
||||
git checkout "v${_basekernel}-${_sub}"
|
||||
else
|
||||
# define kernel tag so we treat the 0 subver properly
|
||||
_kernel_tag="v${_basekernel}.${_sub}"
|
||||
if [ "$_sub" = "0" ];then
|
||||
_kernel_tag="v${_basekernel}"
|
||||
fi
|
||||
|
||||
msg2 "Switching to linux-${_basekernel}.y"
|
||||
if ! git branch --list | grep -w "linux-${_basekernel}-${_git_mirror}" ; then
|
||||
msg2 "${_basekernel}.y branch doesn't locally exist, shallow cloning..."
|
||||
git remote set-branches --add kernel.org linux-${_basekernel}.y
|
||||
git remote set-branches --add googlesource.com linux-${_basekernel}.y
|
||||
git fetch --depth=1 $_git_mirror linux-${_basekernel}.y
|
||||
git fetch --depth=1 $_git_mirror tag "${_kernel_tag}"
|
||||
git checkout -b linux-${_basekernel}-${_git_mirror} ${_git_mirror}/linux-${_basekernel}.y
|
||||
else
|
||||
msg2 "${_basekernel}.y branch exists locally, updating..."
|
||||
git checkout linux-${_basekernel}-${_git_mirror}
|
||||
git fetch --depth 1 $_git_mirror tag "${_kernel_tag}"
|
||||
git reset --hard ${_git_mirror}/linux-${_basekernel}.y
|
||||
fi
|
||||
msg2 "Checking out latest release: ${_kernel_tag}"
|
||||
git checkout "${_kernel_tag}"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" != "install" ] && [ "$1" != "config" ] && [ "$1" != "uninstall-help" ]; then
|
||||
msg2 "Argument not recognised, options are:
|
||||
- config : interactive script that shallow clones the linux 5.x.y git tree into the folder linux-src-git, then applies extra patches and prepares the .config file
|
||||
by copying the one from the currently running linux system and updates it.
|
||||
- install : does the config step, proceeds to compile, then prompts to install
|
||||
- 'DEB' distros: it creates .deb packages that will be installed then stored in the DEBS folder.
|
||||
- 'RPM' distros: it creates .rpm packages that will be installed then stored in the RPMS folder.
|
||||
- 'Generic' distro: it uses 'make modules_install' and 'make install', uses 'dracut' to create an initramfs, then updates grub's boot entry.
|
||||
- uninstall-help : [RPM and DEB based distros only], lists the installed kernels in this system, then gives hints on how to uninstall them manually."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Load external configuration file if present. Available variable values will overwrite customization.cfg ones.
|
||||
if [ -e "$_EXT_CONFIG_PATH" ]; then
|
||||
msg2 "External configuration file $_EXT_CONFIG_PATH will be used and will override customization.cfg values."
|
||||
source "$_EXT_CONFIG_PATH"
|
||||
fi
|
||||
|
||||
if [ "$1" = "install" ] || [ "$1" = "config" ]; then
|
||||
|
||||
if [ -z "$_distro" ] && [ "$1" = "install" ]; then
|
||||
_distro_prompt
|
||||
fi
|
||||
|
||||
if [ "$1" = "config" ]; then
|
||||
_distro="Unknown"
|
||||
fi
|
||||
|
||||
# Run init script that is also run in PKGBUILD, it will define some env vars that we will use
|
||||
_tkg_initscript
|
||||
|
||||
if [[ "${_compiler}" = "llvm" && "${_distro}" =~ ^(Generic|Gentoo)$ ]]; then
|
||||
read -p "Replace \"libunwind\" with \"llvm-libunwind\" ? Y/[n]:" _libunwind_replace
|
||||
if [[ "${_libunwind_replace}" =~ ^(y|yes|Yes|Y)$ ]]; then
|
||||
export LDFLAGS_MODULE="-unwindlib=libunwind"
|
||||
export HOSTLDFLAGS="-unwindlib=libunwind"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ "$1" = "install" && ! "$_distro" =~ ^(Ubuntu|Debian|Fedora|Suse|Gentoo|Generic)$ ]]; then
|
||||
msg2 "Variable \"_distro\" in \"customization.cfg\" has been set to an unkown value. Prompting..."
|
||||
_distro_prompt
|
||||
fi
|
||||
|
||||
# Install the needed dependencies if the user wants to install the kernel
|
||||
# Not needed if the user asks for install.sh config
|
||||
if [ "$1" == "install" ]; then
|
||||
_install_dependencies
|
||||
fi
|
||||
|
||||
# Force prepare script to avoid Arch specific commands if the user is using `config`
|
||||
if [ "$1" = "config" ]; then
|
||||
_distro=""
|
||||
fi
|
||||
|
||||
# Git clone (if necessary) and checkout the asked branch by the user
|
||||
_linux_git_branch_checkout
|
||||
|
||||
cd "$_where"
|
||||
|
||||
if [ "$_basever" = "54" ]; then
|
||||
opt_ver="4.19-5.4"
|
||||
elif [ "$_basever" = "57" ]; then
|
||||
opt_ver="5.7"
|
||||
opt_alternative_url="true"
|
||||
elif [[ "$_basever" =~ ^(58|59|510|511|512|513|514)$ ]]; then
|
||||
opt_ver="5.8-5.14"
|
||||
else
|
||||
opt_ver="5.15+"
|
||||
fi
|
||||
|
||||
if [ -n "$opt_ver" ]; then
|
||||
msg2 "Downloading Graysky2's CPU optimisations patch"
|
||||
if [ "$opt_alternative_url" != "true" ]; then
|
||||
wget "https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/more-uarches-for-kernel-${opt_ver}.patch"
|
||||
else
|
||||
wget "https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/outdated_versions/enable_additional_cpu_optimizations_for_gcc_v10.1+_kernel_v${opt_ver}.patch"
|
||||
fi
|
||||
fi
|
||||
|
||||
# cd into the linux-src folder is important before calling _tkg_srcprep
|
||||
cd "$_where/linux-src-git"
|
||||
_tkg_srcprep
|
||||
|
||||
_build_dir="$_where"
|
||||
if [ "$_use_tmpfs" = "true" ]; then
|
||||
if [ -d "$_tmpfs_path/linux-tkg" ]; then
|
||||
msg2 "Nuking linux-tkg tmpfs folder $_tmpfs_path/linux-tkg"
|
||||
rm -rf "$_tmpfs_path/linux-tkg"
|
||||
fi
|
||||
mkdir "$_tmpfs_path/linux-tkg"
|
||||
cp -r "$_where/linux-src-git" "$_tmpfs_path/linux-tkg/linux-src-git"
|
||||
|
||||
# cd into the linux-src folder is important before calling _tkg_srcprep
|
||||
_build_dir="$_tmpfs_path/linux-tkg"
|
||||
cd "$_tmpfs_path/linux-tkg/linux-src-git"
|
||||
fi
|
||||
|
||||
|
||||
# Uppercase characters are not allowed in source package name for debian based distros
|
||||
if [[ "$_distro" =~ ^(Debian|Ubuntu)$ && "$_cpusched" = "MuQSS" ]]; then
|
||||
_cpusched="muqss"
|
||||
fi
|
||||
|
||||
msg2 "Configuration done."
|
||||
fi
|
||||
|
||||
if [ "$1" = "install" ]; then
|
||||
|
||||
if [ -e "${_where}/winesync.rules" ]; then
|
||||
msg2 "Installing udev rule for winesync"
|
||||
sudo cp "${_where}"/winesync.rules /etc/udev/rules.d/winesync.rules
|
||||
sudo chmod 644 /etc/udev/rules.d/winesync.rules
|
||||
|
||||
msg2 "Adding winesync to '/etc/modules-load.d' for auto-loading by systemd - Password prompt incoming!"
|
||||
sudo sh -c 'echo "winesync" >/etc/modules-load.d/winesync.conf'
|
||||
fi
|
||||
|
||||
# Use custom compiler paths if defined
|
||||
if [ "$_compiler_name" = "-llvm" ] && [ -n "${CUSTOM_LLVM_PATH}" ]; then
|
||||
PATH="${CUSTOM_LLVM_PATH}/bin:${CUSTOM_LLVM_PATH}/lib:${CUSTOM_LLVM_PATH}/include:${PATH}"
|
||||
elif [ -n "${CUSTOM_GCC_PATH}" ]; then
|
||||
PATH="${CUSTOM_GCC_PATH}/bin:${CUSTOM_GCC_PATH}/lib:${CUSTOM_GCC_PATH}/include:${PATH}"
|
||||
fi
|
||||
|
||||
if [ "$_force_all_threads" = "true" ]; then
|
||||
_thread_num=`nproc`
|
||||
else
|
||||
_thread_num=`expr \`nproc\` / 4`
|
||||
if [ "$_thread_num" = "0" ]; then
|
||||
_thread_num=1
|
||||
fi
|
||||
fi
|
||||
|
||||
# ccache
|
||||
if [ "$_noccache" != "true" ]; then
|
||||
export PATH="/usr/lib64/ccache/:/usr/lib/ccache/bin/:$PATH"
|
||||
|
||||
export CCACHE_SLOPPINESS="file_macro,locale,time_macros"
|
||||
export CCACHE_NOHASHDIR="true"
|
||||
msg2 'Enabled ccache'
|
||||
fi
|
||||
|
||||
if [ -z "$_kernel_localversion" ]; then
|
||||
if [ "$_preempt_rt" = "1" ]; then
|
||||
_kernel_flavor="tkg-${_cpusched}-rt${_compiler_name}"
|
||||
else
|
||||
_kernel_flavor="tkg-${_cpusched}${_compiler_name}"
|
||||
fi
|
||||
else
|
||||
_kernel_flavor="tkg-${_kernel_localversion}"
|
||||
fi
|
||||
|
||||
# Setup kernel_subver variable
|
||||
if [[ "$_sub" = rc* ]]; then
|
||||
# if an RC version, subver will always be 0
|
||||
_kernel_subver=0
|
||||
else
|
||||
_kernel_subver="${_sub}"
|
||||
fi
|
||||
|
||||
_timed_build() {
|
||||
_runtime=$( time ( schedtool -B -n 1 -e ionice -n 1 "$@" 2>&1 ) 3>&1 1>&2 2>&3 ) || _runtime=$( time ( "$@" 2>&1 ) 3>&1 1>&2 2>&3 )
|
||||
}
|
||||
|
||||
if [[ "$_distro" =~ ^(Ubuntu|Debian)$ ]]; then
|
||||
|
||||
msg2 "Building kernel DEB packages"
|
||||
_timed_build make ${llvm_opt} -j ${_thread_num} deb-pkg LOCALVERSION=-${_kernel_flavor}
|
||||
msg2 "Building successfully finished!"
|
||||
|
||||
# Create DEBS folder if it doesn't exist
|
||||
cd "$_where"
|
||||
mkdir -p DEBS
|
||||
|
||||
# Move deb files to DEBS folder inside the linux-tkg folder
|
||||
mv "$_build_dir"/*.deb "$_where"/DEBS/
|
||||
|
||||
read -p "Do you want to install the new Kernel ? Y/[n]: " _install
|
||||
if [[ "$_install" =~ ^(y|Y|yes|Yes)$ ]]; then
|
||||
cd "$_where"
|
||||
if [[ "$_sub" = rc* ]]; then
|
||||
_kernelname=$_basekernel.$_kernel_subver-$_sub-$_kernel_flavor
|
||||
else
|
||||
_kernelname=$_basekernel.$_kernel_subver-$_kernel_flavor
|
||||
fi
|
||||
_headers_deb="linux-headers-${_kernelname}*.deb"
|
||||
_image_deb="linux-image-${_kernelname}_*.deb"
|
||||
_kernel_devel_deb="linux-libc-dev_${_kernelname}*.deb"
|
||||
|
||||
cd DEBS
|
||||
sudo dpkg -i $_headers_deb $_image_deb $_kernel_devel_deb
|
||||
fi
|
||||
|
||||
elif [[ "$_distro" =~ ^(Fedora|Suse)$ ]]; then
|
||||
|
||||
# Replace dashes with underscores, it seems that it's being done by binrpm-pkg
|
||||
# Se we can actually refer properly to the rpm files.
|
||||
_kernel_flavor=${_kernel_flavor//-/_}
|
||||
|
||||
if [[ "$_sub" == rc* ]]; then
|
||||
_extra_ver_str="_${_sub}_${_kernel_flavor}"
|
||||
else
|
||||
_extra_ver_str="_${_kernel_flavor}"
|
||||
fi
|
||||
|
||||
_fedora_work_dir="${HOME}/.cache/linux-tkg-rpmbuild"
|
||||
if [ "$_use_tmpfs" = "true" ]; then
|
||||
_fedora_work_dir="$_tmpfs_path/linux-tkg/linux-tkg-rpmbuild"
|
||||
fi
|
||||
|
||||
msg2 "Building kernel RPM packages"
|
||||
RPMOPTS="--define '_topdir ${_fedora_work_dir}'" _timed_build make ${llvm_opt} -j ${_thread_num} rpm-pkg EXTRAVERSION="${_extra_ver_str}"
|
||||
msg2 "Building successfully finished!"
|
||||
|
||||
# Create RPMS folder if it doesn't exist
|
||||
cd "$_where"
|
||||
mkdir -p RPMS
|
||||
|
||||
# Move rpm files to RPMS folder inside the linux-tkg folder
|
||||
mv ${_fedora_work_dir}/RPMS/x86_64/*tkg* "$_where"/RPMS/
|
||||
|
||||
read -p "Do you want to install the new Kernel ? Y/[n]: " _install
|
||||
if [[ "$_install" =~ ^(Y|y|Yes|yes)$ ]]; then
|
||||
|
||||
if [[ "$_sub" = rc* ]]; then
|
||||
_kernelname=$_basekernel.${_kernel_subver}_${_sub}_$_kernel_flavor
|
||||
else
|
||||
_kernelname=$_basekernel.${_kernel_subver}_$_kernel_flavor
|
||||
fi
|
||||
_headers_rpm="kernel-headers-${_kernelname}*.rpm"
|
||||
_kernel_rpm="kernel-${_kernelname}*.rpm"
|
||||
# The headers are actually contained in the kernel-devel RPM and not the headers one...
|
||||
_kernel_devel_rpm="kernel-devel-${_kernelname}*.rpm"
|
||||
|
||||
cd RPMS
|
||||
if [ "$_distro" = "Fedora" ]; then
|
||||
sudo dnf install $_headers_rpm $_kernel_rpm $_kernel_devel_rpm
|
||||
elif [ "$_distro" = "Suse" ]; then
|
||||
msg2 "Some files from 'linux-glibc-devel' will be replaced by files from the custom kernel-hearders package"
|
||||
msg2 "To revert back to the original kernel headers do 'sudo zypper install -f linux-glibc-devel'"
|
||||
sudo zypper install --replacefiles --allow-unsigned-rpm $_headers_rpm $_kernel_rpm $_kernel_devel_rpm
|
||||
fi
|
||||
|
||||
msg2 "Install successful"
|
||||
fi
|
||||
|
||||
elif [[ "$_distro" =~ ^(Gentoo|Generic)$ ]]; then
|
||||
|
||||
./scripts/config --set-str LOCALVERSION "-${_kernel_flavor}"
|
||||
|
||||
if [[ "$_sub" = rc* ]]; then
|
||||
_kernelname=$_basekernel.${_kernel_subver}-${_sub}-$_kernel_flavor
|
||||
else
|
||||
_kernelname=$_basekernel.${_kernel_subver}-$_kernel_flavor
|
||||
fi
|
||||
|
||||
msg2 "Building kernel"
|
||||
_timed_build make ${llvm_opt} -j ${_thread_num}
|
||||
msg2 "Build successful"
|
||||
|
||||
if [ "$_STRIP" = "true" ]; then
|
||||
echo "Stripping vmlinux..."
|
||||
strip -v $STRIP_STATIC "vmlinux"
|
||||
fi
|
||||
|
||||
_headers_folder_name="linux-$_kernelname"
|
||||
|
||||
msg2 "Removing unneeded architectures..."
|
||||
for arch in arch/*/; do
|
||||
[[ $arch = */x86/ ]] && continue
|
||||
echo "Removing $(basename "$arch")"
|
||||
rm -r "$arch"
|
||||
done
|
||||
|
||||
msg2 "Removing broken symlinks..."
|
||||
find -L . -type l -printf 'Removing %P\n' -delete
|
||||
|
||||
msg2 "Removing loose objects..."
|
||||
find . -type f -name '*.o' -printf 'Removing %P\n' -delete
|
||||
|
||||
msg2 "Stripping build tools..."
|
||||
while read -rd '' file; do
|
||||
case "$(file -bi "$file")" in
|
||||
application/x-sharedlib\;*) # Libraries (.so)
|
||||
strip -v $STRIP_SHARED "$file" ;;
|
||||
application/x-archive\;*) # Libraries (.a)
|
||||
strip -v $STRIP_STATIC "$file" ;;
|
||||
application/x-executable\;*) # Binaries
|
||||
strip -v $STRIP_BINARIES "$file" ;;
|
||||
application/x-pie-executable\;*) # Relocatable binaries
|
||||
strip -v $STRIP_SHARED "$file" ;;
|
||||
esac
|
||||
done < <(find . -type f -perm -u+x ! -name vmlinux -print0)
|
||||
|
||||
echo -e "\n\n"
|
||||
|
||||
msg2 "The installation process will run the following commands:"
|
||||
echo " # copy the patched and compiled sources to /usr/src/$_headers_folder_name"
|
||||
echo " sudo make modules_install"
|
||||
echo " sudo make install"
|
||||
echo " sudo dracut --force --hostonly ${_dracut_options} --kver $_kernelname"
|
||||
echo " sudo grub-mkconfig -o /boot/grub/grub.cfg"
|
||||
|
||||
msg2 "Note: Uninstalling requires manual intervention, use './install.sh uninstall-help' for more information."
|
||||
read -p "Continue ? Y/[n]: " _continue
|
||||
|
||||
if ! [[ "$_continue" =~ ^(Y|y|Yes|yes)$ ]];then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
msg2 "Copying files over to /usr/src/$_headers_folder_name"
|
||||
if [ -d "/usr/src/$_headers_folder_name" ]; then
|
||||
msg2 "Removing old folder in /usr/src/$_headers_folder_name"
|
||||
sudo rm -rf "/usr/src/$_headers_folder_name"
|
||||
fi
|
||||
sudo cp -R . "/usr/src/$_headers_folder_name"
|
||||
sudo rm -rf "/usr/src/$_headers_folder_name/.git"
|
||||
cd "/usr/src/$_headers_folder_name"
|
||||
|
||||
msg2 "Installing modules"
|
||||
if [ "$_STRIP" = "true" ]; then
|
||||
sudo make modules_install INSTALL_MOD_STRIP="1"
|
||||
else
|
||||
sudo make modules_install
|
||||
fi
|
||||
msg2 "Removing modules from source folder in /usr/src/${_kernel_src_gentoo}"
|
||||
sudo find . -type f -name '*.ko' -delete
|
||||
sudo find . -type f -name '*.ko.cmd' -delete
|
||||
|
||||
msg2 "Installing kernel"
|
||||
sudo make install
|
||||
msg2 "Creating initramfs"
|
||||
sudo dracut --force --hostonly ${_dracut_options} --kver $_kernelname
|
||||
msg2 "Updating GRUB"
|
||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||
|
||||
if [ "$_distro" = "Gentoo" ]; then
|
||||
|
||||
msg2 "Selecting the kernel source code as default source folder"
|
||||
sudo ln -sfn "/usr/src/$_headers_folder_name" "/usr/src/linux"
|
||||
|
||||
msg2 "Rebuild kernel modules with \"emerge @module-rebuild\" ?"
|
||||
if [ "$_compiler" = "llvm" ];then
|
||||
warning "Building modules with LLVM/Clang is mostly unsupported OOTB by \"emerge @module-rebuild\" except for Nvidia 465.31+"
|
||||
warning " Manually setting \"CC=clang\" for some modules may work if you haven't used LTO"
|
||||
fi
|
||||
|
||||
read -p "Y/[n]: " _continue
|
||||
if [[ "$_continue" =~ ^(Y|y|Yes|yes)$ ]];then
|
||||
sudo emerge @module-rebuild --keep-going
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$1" = "uninstall-help" ]; then
|
||||
|
||||
if [ -z $_distro ]; then
|
||||
_distro_prompt
|
||||
fi
|
||||
|
||||
cd "$_where"
|
||||
|
||||
if [[ "$_distro" =~ ^(Ubuntu|Debian)$ ]]; then
|
||||
msg2 "List of installed custom tkg kernels: "
|
||||
dpkg -l "*tkg*" | grep "linux.*tkg"
|
||||
dpkg -l "*linux-libc-dev*" | grep "linux.*tkg"
|
||||
msg2 "To uninstall a version, you should remove the linux-image, linux-headers and linux-libc-dev associated to it (if installed), with: "
|
||||
msg2 " sudo apt remove linux-image-VERSION linux-headers-VERSION linux-libc-dev-VERSION"
|
||||
msg2 " where VERSION is displayed in the lists above, uninstall only versions that have \"tkg\" in its name"
|
||||
msg2 "Note: linux-libc-dev packages are no longer created and installed, you can safely remove any remnants."
|
||||
elif [ "$_distro" = "Fedora" ]; then
|
||||
msg2 "List of installed custom tkg kernels: "
|
||||
dnf list --installed kernel*
|
||||
msg2 "To uninstall a version, you should remove the kernel, kernel-headers and kernel-devel associated to it (if installed), with: "
|
||||
msg2 " sudo dnf remove --noautoremove kernel-VERSION kernel-devel-VERSION kernel-headers-VERSION"
|
||||
msg2 " where VERSION is displayed in the second column"
|
||||
msg2 "Note: kernel-headers packages are no longer created and installed, you can safely remove any remnants."
|
||||
elif [ "$_distro" = "Suse" ]; then
|
||||
msg2 "List of installed custom tkg kernels: "
|
||||
zypper packages --installed-only | grep "kernel.*tkg"
|
||||
msg2 "To uninstall a version, you should remove the kernel, kernel-headers and kernel-devel associated to it (if installed), with: "
|
||||
msg2 " sudo zypper remove --no-clean-deps kernel-VERSION kernel-devel-VERSION kernel-headers-VERSION"
|
||||
msg2 " where VERSION is displayed in the second to last column"
|
||||
msg2 "Note: kernel-headers packages are no longer created and installed, you can safely remove any remnants."
|
||||
elif [[ "$_distro" =~ ^(Generic|Gentoo)$ ]]; then
|
||||
msg2 "Folders in /lib/modules :"
|
||||
ls /lib/modules
|
||||
msg2 "Files in /boot :"
|
||||
ls /boot
|
||||
msg2 "To uninstall a kernel version installed through install.sh with 'Generic' as a distro:"
|
||||
msg2 " - Remove manually the corresponding folder in '/lib/modules'"
|
||||
msg2 " - Remove manually the corresponding 'System.map', 'vmlinuz', 'config' and 'initramfs' in the folder :/boot"
|
||||
msg2 " - Update the boot menu. e.g. 'sudo grub-mkconfig -o /boot/grub/grub.cfg'"
|
||||
fi
|
||||
|
||||
fi
|
14
linux-tkg/linux-tkg-config/5.10/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.10/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.10/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.10/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10157
linux-tkg/linux-tkg-config/5.10/config.x86_64
Normal file
10157
linux-tkg/linux-tkg-config/5.10/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
10114
linux-tkg/linux-tkg-config/5.10/config_hardened.x86_64
Normal file
10114
linux-tkg/linux-tkg-config/5.10/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.11/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.11/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.11/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.11/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10417
linux-tkg/linux-tkg-config/5.11/config.x86_64
Normal file
10417
linux-tkg/linux-tkg-config/5.11/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
10195
linux-tkg/linux-tkg-config/5.11/config_hardened.x86_64
Normal file
10195
linux-tkg/linux-tkg-config/5.11/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.12/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.12/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.12/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.12/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10482
linux-tkg/linux-tkg-config/5.12/config.x86_64
Normal file
10482
linux-tkg/linux-tkg-config/5.12/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.13/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.13/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.13/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.13/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10561
linux-tkg/linux-tkg-config/5.13/config.x86_64
Normal file
10561
linux-tkg/linux-tkg-config/5.13/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
10343
linux-tkg/linux-tkg-config/5.13/config_hardened.x86_64
Normal file
10343
linux-tkg/linux-tkg-config/5.13/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.14/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.14/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.14/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.14/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10623
linux-tkg/linux-tkg-config/5.14/config.x86_64
Normal file
10623
linux-tkg/linux-tkg-config/5.14/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.15/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.15/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.15/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.15/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10682
linux-tkg/linux-tkg-config/5.15/config.x86_64
Normal file
10682
linux-tkg/linux-tkg-config/5.15/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
10481
linux-tkg/linux-tkg-config/5.15/config_hardened.x86_64
Normal file
10481
linux-tkg/linux-tkg-config/5.15/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.16/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.16/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.16/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.16/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10758
linux-tkg/linux-tkg-config/5.16/config.x86_64
Normal file
10758
linux-tkg/linux-tkg-config/5.16/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.17/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.17/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.17/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.17/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10842
linux-tkg/linux-tkg-config/5.17/config.x86_64
Normal file
10842
linux-tkg/linux-tkg-config/5.17/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.4/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.4/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.4/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.4/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10581
linux-tkg/linux-tkg-config/5.4/config.x86_64
Normal file
10581
linux-tkg/linux-tkg-config/5.4/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
10527
linux-tkg/linux-tkg-config/5.4/config_hardened.x86_64
Normal file
10527
linux-tkg/linux-tkg-config/5.4/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.7/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.7/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.7/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.7/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
10865
linux-tkg/linux-tkg-config/5.7/config.x86_64
Normal file
10865
linux-tkg/linux-tkg-config/5.7/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
10839
linux-tkg/linux-tkg-config/5.7/config_hardened.x86_64
Normal file
10839
linux-tkg/linux-tkg-config/5.7/config_hardened.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.8/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.8/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.8/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.8/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
11022
linux-tkg/linux-tkg-config/5.8/config.x86_64
Normal file
11022
linux-tkg/linux-tkg-config/5.8/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
14
linux-tkg/linux-tkg-config/5.9/90-cleanup.hook
Normal file
14
linux-tkg/linux-tkg-config/5.9/90-cleanup.hook
Normal file
|
@ -0,0 +1,14 @@
|
|||
[Trigger]
|
||||
Type = File
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Operation = Remove
|
||||
Target = usr/lib/modules/*/
|
||||
Target = !usr/lib/modules/*/?*
|
||||
|
||||
[Action]
|
||||
Description = Cleaning up...
|
||||
When = PostTransaction
|
||||
Exec = /usr/share/libalpm/scripts/cleanup
|
||||
NeedsTargets
|
||||
|
10
linux-tkg/linux-tkg-config/5.9/cleanup
Executable file
10
linux-tkg/linux-tkg-config/5.9/cleanup
Executable file
|
@ -0,0 +1,10 @@
|
|||
#!/bin/bash
|
||||
|
||||
for _f in /usr/lib/modules/*tkg*; do
|
||||
if [[ ! -e ${_f}/vmlinuz ]]; then
|
||||
rm -rf "$_f"
|
||||
fi
|
||||
done
|
||||
|
||||
# vim:set ft=sh sw=2 et:
|
||||
|
11084
linux-tkg/linux-tkg-config/5.9/config.x86_64
Normal file
11084
linux-tkg/linux-tkg-config/5.9/config.x86_64
Normal file
File diff suppressed because it is too large
Load diff
1602
linux-tkg/linux-tkg-config/prepare
Normal file
1602
linux-tkg/linux-tkg-config/prepare
Normal file
File diff suppressed because it is too large
Load diff
|
@ -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;
|
||||
|
||||
#if defined(CONFIG_SYSCTL)
|
||||
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
/* Constants used for minimum and maximum */
|
||||
#ifdef CONFIG_LOCKUP_DETECTOR
|
||||
static int sixty = 60;
|
||||
@@ -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);
|
360
linux-tkg/linux-tkg-patches/5.10/0002-clear-patches.patch
Normal file
360
linux-tkg/linux-tkg-patches/5.10/0002-clear-patches.patch
Normal file
|
@ -0,0 +1,360 @@
|
|||
From 0000000000000000000000000000000000000000 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 c9338f9..6974fbf 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -62,7 +62,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)
|
||||
{
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 f449584..c994d24 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -531,7 +531,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -539,7 +539,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -547,7 +547,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -555,7 +555,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -563,7 +563,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -571,7 +571,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -579,7 +579,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -599,7 +599,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -607,7 +607,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -615,7 +615,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -623,7 +623,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -631,7 +631,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -639,7 +639,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -647,7 +647,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -668,7 +668,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -676,7 +676,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -684,7 +684,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -692,7 +692,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -700,7 +700,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -708,7 +708,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -716,7 +716,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -737,7 +737,7 @@ static struct cpuidle_state skx_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 300,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 30c1142..4345075 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -4201,8 +4201,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;
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 f11b9bd..1bbfcc1 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -717,6 +717,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);
|
||||
@@ -750,7 +751,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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] 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 c0cd1b9..af1e2fb 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -59,15 +59,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/
|
||||
@@ -80,6 +73,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/
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
660
linux-tkg/linux-tkg-patches/5.10/0003-glitched-base.patch
Normal file
660
linux-tkg/linux-tkg-patches/5.10/0003-glitched-base.patch
Normal file
|
@ -0,0 +1,660 @@
|
|||
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: [PATCH 01/17] glitched
|
||||
|
||||
---
|
||||
scripts/mkcompile_h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
|
||||
index baf3ab8d9d49..854e32e6aec7 100755
|
||||
--- a/scripts/mkcompile_h
|
||||
+++ b/scripts/mkcompile_h
|
||||
@@ -41,8 +41,8 @@ else
|
||||
fi
|
||||
|
||||
UTS_VERSION="#$VERSION"
|
||||
-CONFIG_FLAGS=""
|
||||
-if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
|
||||
+CONFIG_FLAGS="TKG"
|
||||
+if [ -n "$SMP" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS SMP"; fi
|
||||
if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
|
||||
if [ -n "$PREEMPT_RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT"; fi
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From c304f43d14e98d4bf1215fc10bc5012f554bdd8a Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 16:59:22 +0000
|
||||
Subject: [PATCH 02/17] dcache: cache_pressure = 50 decreases the rate at which
|
||||
VFS caches are reclaimed
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
fs/dcache.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index 361ea7ab30ea..0c5cf69b241a 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -71,7 +71,7 @@
|
||||
* If no ancestor relationship:
|
||||
* arbitrary, since it's serialized on rename_lock
|
||||
*/
|
||||
-int sysctl_vfs_cache_pressure __read_mostly = 100;
|
||||
+int sysctl_vfs_cache_pressure __read_mostly = 50;
|
||||
EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
|
||||
|
||||
__cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock);
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 28f32f59d9d55ac7ec3a20b79bdd02d2a0a5f7e1 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 18:29:13 +0000
|
||||
Subject: [PATCH 03/17] sched/core: nr_migrate = 128 increases number of tasks
|
||||
to iterate in a single balance run.
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
kernel/sched/core.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||||
index f788cd61df21..2bfbb4213707 100644
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -59,7 +59,7 @@ const_debug unsigned int sysctl_sched_features =
|
||||
* Number of tasks to iterate in a single balance run.
|
||||
* Limited because this is done with IRQs disabled.
|
||||
*/
|
||||
-const_debug unsigned int sysctl_sched_nr_migrate = 32;
|
||||
+const_debug unsigned int sysctl_sched_nr_migrate = 128;
|
||||
|
||||
/*
|
||||
* period over which we measure -rt task CPU usage in us.
|
||||
@@ -71,9 +71,9 @@ __read_mostly int scheduler_running;
|
||||
|
||||
/*
|
||||
* part of the period that we allow rt tasks to run in us.
|
||||
- * default: 0.95s
|
||||
+ * XanMod default: 0.98s
|
||||
*/
|
||||
-int sysctl_sched_rt_runtime = 950000;
|
||||
+int sysctl_sched_rt_runtime = 980000;
|
||||
|
||||
/*
|
||||
* __task_rq_lock - lock the rq @p resides on.
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From acc49f33a10f61dc66c423888cbb883ba46710e4 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 17:41:29 +0000
|
||||
Subject: [PATCH 04/17] scripts: disable the localversion "+" tag of a git repo
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
scripts/setlocalversion | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
||||
index 20f2efd57b11..0552d8b9f582 100755
|
||||
--- a/scripts/setlocalversion
|
||||
+++ b/scripts/setlocalversion
|
||||
@@ -54,7 +54,7 @@ scm_version()
|
||||
# If only the short version is requested, don't bother
|
||||
# running further git commands
|
||||
if $short; then
|
||||
- echo "+"
|
||||
+ # echo "+"
|
||||
return
|
||||
fi
|
||||
# If we are past a tagged commit (like
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 61fcb33fb0de8bc0f060e0a1ada38ed149217f4d Mon Sep 17 00:00:00 2001
|
||||
From: Oleksandr Natalenko <oleksandr@redhat.com>
|
||||
Date: Wed, 11 Dec 2019 11:46:19 +0100
|
||||
Subject: [PATCH 05/17] init/Kconfig: enable -O3 for all arches
|
||||
|
||||
Building a kernel with -O3 may help in hunting bugs like [1] and thus
|
||||
using this switch should not be restricted to one specific arch only.
|
||||
|
||||
With that, lets expose it for everyone.
|
||||
|
||||
[1] https://lore.kernel.org/lkml/673b885183fb64f1cbb3ed2387524077@natalenko.name/
|
||||
|
||||
Signed-off-by: Oleksandr Natalenko <oleksandr@redhat.com>
|
||||
---
|
||||
init/Kconfig | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 0498af567f70..3ae8678e1145 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1278,7 +1278,6 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
|
||||
config CC_OPTIMIZE_FOR_PERFORMANCE_O3
|
||||
bool "Optimize more for performance (-O3)"
|
||||
- depends on ARC
|
||||
help
|
||||
Choosing this option will pass "-O3" to your compiler to optimize
|
||||
the kernel yet more for performance.
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 360c6833e07cc9fdef5746f6bc45bdbc7212288d Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Fri, 26 Oct 2018 11:22:33 +0100
|
||||
Subject: [PATCH 06/17] infiniband: Fix __read_overflow2 error with -O3
|
||||
inlining
|
||||
|
||||
---
|
||||
drivers/infiniband/core/addr.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
|
||||
index 3a98439bba83..6efc4f907f58 100644
|
||||
--- a/drivers/infiniband/core/addr.c
|
||||
+++ b/drivers/infiniband/core/addr.c
|
||||
@@ -820,6 +820,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
|
||||
union {
|
||||
struct sockaddr_in _sockaddr_in;
|
||||
struct sockaddr_in6 _sockaddr_in6;
|
||||
+ struct sockaddr_ib _sockaddr_ib;
|
||||
} sgid_addr, dgid_addr;
|
||||
int ret;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From f85ed068b4d0e6c31edce8574a95757a60e58b87 Mon Sep 17 00:00:00 2001
|
||||
From: Etienne Juvigny <Ti3noU@gmail.com>
|
||||
Date: Mon, 3 Sep 2018 17:36:25 +0200
|
||||
Subject: [PATCH 07/17] Zenify & stuff
|
||||
|
||||
---
|
||||
init/Kconfig | 32 ++++++++++++++++++++++++++++++++
|
||||
kernel/sched/fair.c | 25 +++++++++++++++++++++++++
|
||||
mm/page-writeback.c | 8 ++++++++
|
||||
3 files changed, 65 insertions(+)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 3ae8678e1145..da708eed0f1e 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -92,6 +92,38 @@ config THREAD_INFO_IN_TASK
|
||||
|
||||
menu "General setup"
|
||||
|
||||
+config ZENIFY
|
||||
+ bool "A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience"
|
||||
+ default y
|
||||
+ help
|
||||
+ Tunes the kernel for responsiveness at the cost of throughput and power usage.
|
||||
+
|
||||
+ --- Virtual Memory Subsystem ---------------------------
|
||||
+
|
||||
+ Mem dirty before bg writeback..: 10 % -> 20 %
|
||||
+ Mem dirty before sync writeback: 20 % -> 50 %
|
||||
+
|
||||
+ --- Block Layer ----------------------------------------
|
||||
+
|
||||
+ Queue depth...............: 128 -> 512
|
||||
+ Default MQ scheduler......: mq-deadline -> bfq
|
||||
+
|
||||
+ --- CFS CPU Scheduler ----------------------------------
|
||||
+
|
||||
+ Scheduling latency.............: 6 -> 3 ms
|
||||
+ Minimal granularity............: 0.75 -> 0.3 ms
|
||||
+ Wakeup granularity.............: 1 -> 0.5 ms
|
||||
+ CPU migration cost.............: 0.5 -> 0.25 ms
|
||||
+ Bandwidth slice size...........: 5 -> 3 ms
|
||||
+ Ondemand fine upscaling limit..: 95 % -> 85 %
|
||||
+
|
||||
+ --- MuQSS CPU Scheduler --------------------------------
|
||||
+
|
||||
+ Scheduling interval............: 6 -> 3 ms
|
||||
+ ISO task max realtime use......: 70 % -> 25 %
|
||||
+ Ondemand coarse upscaling limit: 80 % -> 45 %
|
||||
+ Ondemand fine upscaling limit..: 95 % -> 45 %
|
||||
+
|
||||
config BROKEN
|
||||
bool
|
||||
|
||||
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
|
||||
index 6b3b59cc51d6..2a0072192c3d 100644
|
||||
--- a/kernel/sched/fair.c
|
||||
+++ b/kernel/sched/fair.c
|
||||
@@ -37,8 +37,13 @@
|
||||
*
|
||||
* (default: 6ms * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_latency = 3000000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_latency = 3000000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_latency = 6000000ULL;
|
||||
static unsigned int normalized_sysctl_sched_latency = 6000000ULL;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* The initial- and re-scaling of tunables is configurable
|
||||
@@ -58,13 +63,22 @@ enum sched_tunable_scaling sysctl_sched_tunable_scaling = SCHED_TUNABLESCALING_L
|
||||
*
|
||||
* (default: 0.75 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_min_granularity = 300000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_min_granularity = 300000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_min_granularity = 750000ULL;
|
||||
static unsigned int normalized_sysctl_sched_min_granularity = 750000ULL;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* This value is kept at sysctl_sched_latency/sysctl_sched_min_granularity
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static unsigned int sched_nr_latency = 10;
|
||||
+#else
|
||||
static unsigned int sched_nr_latency = 8;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* After fork, child runs first. If set to 0 (default) then
|
||||
@@ -128,8 +149,12 @@ int __weak arch_asym_cpu_priority(int cpu)
|
||||
*
|
||||
* (default: 5 msec, units: microseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_cfs_bandwidth_slice = 3000UL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_cfs_bandwidth_slice = 5000UL;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
static inline void update_load_add(struct load_weight *lw, unsigned long inc)
|
||||
{
|
||||
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
|
||||
index 28b3e7a67565..01a1aef2b9b1 100644
|
||||
--- a/mm/page-writeback.c
|
||||
+++ b/mm/page-writeback.c
|
||||
@@ -71,7 +71,11 @@ static long ratelimit_pages = 32;
|
||||
/*
|
||||
* Start background writeback (via writeback threads) at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int dirty_background_ratio = 20;
|
||||
+#else
|
||||
int dirty_background_ratio = 10;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* dirty_background_bytes starts at 0 (disabled) so that it is a function of
|
||||
@@ -88,7 +92,11 @@ int vm_highmem_is_dirtyable;
|
||||
/*
|
||||
* The generator of dirty data starts writeback at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int vm_dirty_ratio = 50;
|
||||
+#else
|
||||
int vm_dirty_ratio = 20;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From e92e67143385cf285851e12aa8b7f083dd38dd24 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <damentz@liquorix.net>
|
||||
Date: Sun, 16 Jan 2011 18:57:32 -0600
|
||||
Subject: [PATCH 08/17] ZEN: Allow TCP YeAH as default congestion control
|
||||
|
||||
4.4: In my tests YeAH dramatically slowed down transfers over a WLAN,
|
||||
reducing throughput from ~65Mbps (CUBIC) to ~7MBps (YeAH) over 10
|
||||
seconds (netperf TCP_STREAM) including long stalls.
|
||||
|
||||
Be careful when choosing this. ~heftig
|
||||
---
|
||||
net/ipv4/Kconfig | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
|
||||
index e64e59b536d3..bfb55ef7ebbe 100644
|
||||
--- a/net/ipv4/Kconfig
|
||||
+++ b/net/ipv4/Kconfig
|
||||
@@ -691,6 +691,9 @@ choice
|
||||
config DEFAULT_VEGAS
|
||||
bool "Vegas" if TCP_CONG_VEGAS=y
|
||||
|
||||
+ config DEFAULT_YEAH
|
||||
+ bool "YeAH" if TCP_CONG_YEAH=y
|
||||
+
|
||||
config DEFAULT_VENO
|
||||
bool "Veno" if TCP_CONG_VENO=y
|
||||
|
||||
@@ -724,6 +727,7 @@ config DEFAULT_TCP_CONG
|
||||
default "htcp" if DEFAULT_HTCP
|
||||
default "hybla" if DEFAULT_HYBLA
|
||||
default "vegas" if DEFAULT_VEGAS
|
||||
+ default "yeah" if DEFAULT_YEAH
|
||||
default "westwood" if DEFAULT_WESTWOOD
|
||||
default "veno" if DEFAULT_VENO
|
||||
default "reno" if DEFAULT_RENO
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 76dbe7477bfde1b5e8bf29a71b5af7ab2be9b98e Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Wed, 28 Nov 2018 19:01:27 -0600
|
||||
Subject: [PATCH 09/17] zen: Use [defer+madvise] as default khugepaged defrag
|
||||
strategy
|
||||
|
||||
For some reason, the default strategy to respond to THP fault fallbacks
|
||||
is still just madvise, meaning stall if the program wants transparent
|
||||
hugepages, but don't trigger a background reclaim / compaction if THP
|
||||
begins to fail allocations. This creates a snowball affect where we
|
||||
still use the THP code paths, but we almost always fail once a system
|
||||
has been active and busy for a while.
|
||||
|
||||
The option "defer" was created for interactive systems where THP can
|
||||
still improve performance. If we have to fallback to a regular page due
|
||||
to an allocation failure or anything else, we will trigger a background
|
||||
reclaim and compaction so future THP attempts succeed and previous
|
||||
attempts eventually have their smaller pages combined without stalling
|
||||
running applications.
|
||||
|
||||
We still want madvise to stall applications that explicitely want THP,
|
||||
so defer+madvise _does_ make a ton of sense. Make it the default for
|
||||
interactive systems, especially if the kernel maintainer left
|
||||
transparent hugepages on "always".
|
||||
|
||||
Reasoning and details in the original patch: https://lwn.net/Articles/711248/
|
||||
---
|
||||
mm/huge_memory.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
|
||||
index 74300e337c3c..9277f22c10a7 100644
|
||||
--- a/mm/huge_memory.c
|
||||
+++ b/mm/huge_memory.c
|
||||
@@ -53,7 +53,11 @@ unsigned long transparent_hugepage_flags __read_mostly =
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE
|
||||
(1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)|
|
||||
#endif
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG)|
|
||||
+#else
|
||||
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG)|
|
||||
+#endif
|
||||
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)|
|
||||
(1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG);
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 2b65a1329cb220b43c19c4d0de5833fae9e2b22d Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Wed, 24 Oct 2018 16:58:52 -0300
|
||||
Subject: [PATCH 10/17] net/sched: allow configuring cake qdisc as default
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
net/sched/Kconfig | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/net/sched/Kconfig b/net/sched/Kconfig
|
||||
index 84badf00647e..6a922bca9f39 100644
|
||||
--- a/net/sched/Kconfig
|
||||
+++ b/net/sched/Kconfig
|
||||
@@ -471,6 +471,9 @@ choice
|
||||
config DEFAULT_SFQ
|
||||
bool "Stochastic Fair Queue" if NET_SCH_SFQ
|
||||
|
||||
+ config DEFAULT_CAKE
|
||||
+ bool "Common Applications Kept Enhanced" if NET_SCH_CAKE
|
||||
+
|
||||
config DEFAULT_PFIFO_FAST
|
||||
bool "Priority FIFO Fast"
|
||||
endchoice
|
||||
@@ -481,6 +484,7 @@ config DEFAULT_NET_SCH
|
||||
default "fq" if DEFAULT_FQ
|
||||
default "fq_codel" if DEFAULT_FQ_CODEL
|
||||
default "sfq" if DEFAULT_SFQ
|
||||
+ default "cake" if DEFAULT_CAKE
|
||||
default "pfifo_fast"
|
||||
endif
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 816ee502759e954304693813bd03d94986b28dba Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Mon, 18 Feb 2019 17:40:57 +0100
|
||||
Subject: [PATCH 11/17] mm: Set watermark_scale_factor to 200 (from 10)
|
||||
|
||||
Multiple users have reported it's helping reducing/eliminating stuttering
|
||||
with DXVK.
|
||||
---
|
||||
mm/page_alloc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index 898ff44f2c7b..e72074034793 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -330,7 +330,7 @@ int watermark_boost_factor __read_mostly;
|
||||
#else
|
||||
int watermark_boost_factor __read_mostly = 15000;
|
||||
#endif
|
||||
-int watermark_scale_factor = 10;
|
||||
+int watermark_scale_factor = 200;
|
||||
|
||||
static unsigned long nr_kernel_pages __initdata;
|
||||
static unsigned long nr_all_pages __initdata;
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 90240bcd90a568878738e66c0d45bed3e38e347b Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Fri, 19 Apr 2019 12:33:38 +0200
|
||||
Subject: [PATCH 12/17] Set vm.max_map_count to 262144 by default
|
||||
|
||||
The value is still pretty low, and AMD64-ABI and ELF extended numbering
|
||||
supports that, so we should be fine on modern x86 systems.
|
||||
|
||||
This fixes crashes in some applications using more than 65535 vmas (also
|
||||
affects some windows games running in wine, such as Star Citizen).
|
||||
---
|
||||
include/linux/mm.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index bc05c3588aa3..b0cefe94920d 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -190,8 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
|
||||
* not a hard limit any more. Although some userspace tools can be surprised by
|
||||
* that.
|
||||
*/
|
||||
-#define MAPCOUNT_ELF_CORE_MARGIN (5)
|
||||
-#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
|
||||
+#define DEFAULT_MAX_MAP_COUNT (262144)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 3a34034dba5efe91bcec491efe8c66e8087f509b Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Mon, 27 Jul 2020 00:19:18 +0200
|
||||
Subject: [PATCH 13/17] mm: bump DEFAULT_MAX_MAP_COUNT
|
||||
|
||||
Some games such as Detroit: Become Human tend to be very crash prone with
|
||||
lower values.
|
||||
---
|
||||
include/linux/mm.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index b0cefe94920d..890165099b07 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -190,7 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
|
||||
* not a hard limit any more. Although some userspace tools can be surprised by
|
||||
* that.
|
||||
*/
|
||||
-#define DEFAULT_MAX_MAP_COUNT (262144)
|
||||
+#define DEFAULT_MAX_MAP_COUNT (524288)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 977812938da7c7226415778c340832141d9278b7 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 25 Nov 2019 15:13:06 -0300
|
||||
Subject: [PATCH 14/17] elevator: set default scheduler to bfq for blk-mq
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
block/elevator.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/block/elevator.c b/block/elevator.c
|
||||
index 4eab3d70e880..79669aa39d79 100644
|
||||
--- a/block/elevator.c
|
||||
+++ b/block/elevator.c
|
||||
@@ -623,15 +623,15 @@ static inline bool elv_support_iosched(struct request_queue *q)
|
||||
}
|
||||
|
||||
/*
|
||||
- * For single queue devices, default to using mq-deadline. If we have multiple
|
||||
- * queues or mq-deadline is not available, default to "none".
|
||||
+ * For single queue devices, default to using bfq. If we have multiple
|
||||
+ * queues or bfq is not available, default to "none".
|
||||
*/
|
||||
static struct elevator_type *elevator_get_default(struct request_queue *q)
|
||||
{
|
||||
if (q->nr_hw_queues != 1)
|
||||
return NULL;
|
||||
|
||||
- return elevator_get(q, "mq-deadline", false);
|
||||
+ return elevator_get(q, "bfq", false);
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.28.0
|
||||
|
||||
From 3c229f434aca65c4ca61772bc03c3e0370817b92 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 3 Aug 2020 17:05:04 +0000
|
||||
Subject: [PATCH 16/17] mm: set 2 megabytes for address_space-level file
|
||||
read-ahead pages size
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/pagemap.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
|
||||
index cf2468da68e9..007dea784451 100644
|
||||
--- a/include/linux/pagemap.h
|
||||
+++ b/include/linux/pagemap.h
|
||||
@@ -655,7 +655,7 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask);
|
||||
void delete_from_page_cache_batch(struct address_space *mapping,
|
||||
struct pagevec *pvec);
|
||||
|
||||
-#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
|
||||
+#define VM_READAHEAD_PAGES (SZ_2M / PAGE_SIZE)
|
||||
|
||||
void page_cache_sync_readahead(struct address_space *, struct file_ra_state *,
|
||||
struct file *, pgoff_t index, unsigned long req_count);
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 716f41cf6631f3a85834dcb67b4ce99185b6387f Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Wed, 15 Jan 2020 20:43:56 -0600
|
||||
Subject: [PATCH 17/17] ZEN: intel-pstate: Implement "enable" parameter
|
||||
|
||||
If intel-pstate is compiled into the kernel, it will preempt the loading
|
||||
of acpi-cpufreq so you can take advantage of hardware p-states without
|
||||
any friction.
|
||||
|
||||
However, intel-pstate is not completely superior to cpufreq's ondemand
|
||||
for one reason. There's no concept of an up_threshold property.
|
||||
|
||||
In ondemand, up_threshold essentially reduces the maximum utilization to
|
||||
compare against, allowing you to hit max frequencies and turbo boost
|
||||
from a much lower core utilization.
|
||||
|
||||
With intel-pstate, you have the concept of minimum and maximum
|
||||
performance, but no tunable that lets you define, maximum frequency
|
||||
means 50% core utilization. For just this oversight, there's reasons
|
||||
you may want ondemand.
|
||||
|
||||
Lets support setting "enable" in kernel boot parameters. This lets
|
||||
kernel maintainers include "intel_pstate=disable" statically in the
|
||||
static boot parameters, but let users of the kernel override this
|
||||
selection.
|
||||
---
|
||||
Documentation/admin-guide/kernel-parameters.txt | 3 +++
|
||||
drivers/cpufreq/intel_pstate.c | 2 ++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index fb95fad81c79..3e92fee81e33 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -1857,6 +1857,9 @@
|
||||
disable
|
||||
Do not enable intel_pstate as the default
|
||||
scaling driver for the supported processors
|
||||
+ enable
|
||||
+ Enable intel_pstate in-case "disable" was passed
|
||||
+ previously in the kernel boot parameters
|
||||
passive
|
||||
Use intel_pstate as a scaling driver, but configure it
|
||||
to work with generic cpufreq governors (instead of
|
||||
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
|
||||
index 36a469150ff9..aee891c9b78a 100644
|
||||
--- a/drivers/cpufreq/intel_pstate.c
|
||||
+++ b/drivers/cpufreq/intel_pstate.c
|
||||
@@ -2845,6 +2845,8 @@ static int __init intel_pstate_setup(char *str)
|
||||
if (!strcmp(str, "no_hwp"))
|
||||
no_hwp = 1;
|
||||
|
||||
+ if (!strcmp(str, "enable"))
|
||||
+ no_load = 0;
|
||||
if (!strcmp(str, "force"))
|
||||
force_load = 1;
|
||||
if (!strcmp(str, "hwp_only"))
|
||||
--
|
||||
2.28.0
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
|
||||
index 6b3b59cc51d6..2a0072192c3d 100644
|
||||
--- a/kernel/sched/fair.c
|
||||
+++ b/kernel/sched/fair.c
|
||||
@@ -81,10 +95,17 @@ unsigned int sysctl_sched_child_runs_first __read_mostly;
|
||||
*
|
||||
* (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_wakeup_granularity = 500000UL;
|
||||
+static unsigned int normalized_sysctl_sched_wakeup_granularity = 500000UL;
|
||||
+
|
||||
+const_debug unsigned int sysctl_sched_migration_cost = 50000UL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_wakeup_granularity = 1000000UL;
|
||||
static unsigned int normalized_sysctl_sched_wakeup_granularity = 1000000UL;
|
||||
|
||||
const_debug unsigned int sysctl_sched_migration_cost = 500000UL;
|
||||
+#endif
|
||||
|
||||
int sched_thermal_decay_shift;
|
||||
static int __init setup_sched_thermal_decay_shift(char *str)
|
72
linux-tkg/linux-tkg-patches/5.10/0003-glitched-cfs.patch
Normal file
72
linux-tkg/linux-tkg-patches/5.10/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
|
||||
|
13380
linux-tkg/linux-tkg-patches/5.10/0004-5.10-ck1.patch
Normal file
13380
linux-tkg/linux-tkg-patches/5.10/0004-5.10-ck1.patch
Normal file
File diff suppressed because it is too large
Load diff
90
linux-tkg/linux-tkg-patches/5.10/0004-glitched-muqss.patch
Normal file
90
linux-tkg/linux-tkg-patches/5.10/0004-glitched-muqss.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 - 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.
|
||||
diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
|
||||
index dd554bd43..75030ad93 100755
|
||||
--- a/scripts/headers_install.sh
|
||||
+++ b/scripts/headers_install.sh
|
||||
@@ -89,6 +89,7 @@ include/uapi/linux/atmdev.h:CONFIG_COMPAT
|
||||
include/uapi/linux/eventpoll.h:CONFIG_PM_SLEEP
|
||||
include/uapi/linux/hw_breakpoint.h:CONFIG_HAVE_MIXED_BREAKPOINTS_REGS
|
||||
include/uapi/linux/pktcdvd.h:CONFIG_CDROM_PKTCDVD_WCACHE
|
||||
+include/uapi/linux/sched.h:CONFIG_SCHED_MUQSS
|
||||
"
|
||||
|
||||
for c in $configs
|
|
@ -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)
|
90
linux-tkg/linux-tkg-patches/5.10/0005-glitched-pds.patch
Normal file
90
linux-tkg/linux-tkg-patches/5.10/0005-glitched-pds.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 - 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
|
||||
@@ -169,7 +169,7 @@
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
|
@ -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)
|
165
linux-tkg/linux-tkg-patches/5.10/0005-undead-glitched-pds.patch
Normal file
165
linux-tkg/linux-tkg-patches/5.10/0005-undead-glitched-pds.patch
Normal file
|
@ -0,0 +1,165 @@
|
|||
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
|
||||
@@ -169,7 +169,7 @@
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
||||
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)
|
||||
{}
|
8786
linux-tkg/linux-tkg-patches/5.10/0005-v5.10_undead-pds099o.patch
Normal file
8786
linux-tkg/linux-tkg-patches/5.10/0005-v5.10_undead-pds099o.patch
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,193 @@
|
|||
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_ZHAOXIN, 0x9083, pci_quirk_mf_endpoint_acs },
|
||||
/* Zhaoxin Root/Downstream Ports */
|
||||
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
597
linux-tkg/linux-tkg-patches/5.10/0007-v5.10-fsync.patch
Normal file
597
linux-tkg/linux-tkg-patches/5.10/0007-v5.10-fsync.patch
Normal file
|
@ -0,0 +1,597 @@
|
|||
From 7b5df0248ce255ef5b7204d65a7b3783ebb76a3d Mon Sep 17 00:00:00 2001
|
||||
From: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
Date: Fri, 13 Dec 2019 11:08:02 -0300
|
||||
Subject: [PATCH 1/2] futex: Implement mechanism to wait on any of several
|
||||
futexes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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.
|
||||
|
||||
The use case lies in the Wine implementation of the Windows NT interface
|
||||
WaitMultipleObjects. This Windows API function allows a thread to sleep
|
||||
waiting on the first of a set of event sources (mutexes, timers, signal,
|
||||
console input, etc) to signal. Considering this is a primitive
|
||||
synchronization operation for Windows applications, being able to quickly
|
||||
signal events on the producer side, and quickly go to sleep on the
|
||||
consumer side is essential for good performance of those running over Wine.
|
||||
|
||||
Wine developers have an implementation that uses eventfd, but it suffers
|
||||
from FD exhaustion (there is applications that go to the order of
|
||||
multi-milion FDs), and higher CPU utilization than this new operation.
|
||||
|
||||
The futex list is passed as an array of `struct futex_wait_block`
|
||||
(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 modern games, on top of this implementation.
|
||||
|
||||
Changes were tested for the following ABIs: x86_64, i386 and x32.
|
||||
Support for x32 applications is not implemented since it would
|
||||
take a major rework adding a new entry point and splitting the current
|
||||
futex 64 entry point in two and we can't change the current x32 syscall
|
||||
number without breaking user space compatibility.
|
||||
|
||||
CC: Steven Rostedt <rostedt@goodmis.org>
|
||||
Cc: Richard Yao <ryao@gentoo.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Co-developed-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Co-developed-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Signed-off-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Co-developed-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
[Added compatibility code]
|
||||
Co-developed-by: André Almeida <andrealmeid@collabora.com>
|
||||
Signed-off-by: André Almeida <andrealmeid@collabora.com>
|
||||
|
||||
Adjusted for v5.9: Removed `put_futex_key` calls.
|
||||
---
|
||||
include/uapi/linux/futex.h | 20 +++
|
||||
kernel/futex.c | 352 ++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 370 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index a89eb0accd5e2..580001e89c6ca 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 13
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -40,6 +41,8 @@
|
||||
FUTEX_PRIVATE_FLAG)
|
||||
#define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | \
|
||||
FUTEX_PRIVATE_FLAG)
|
||||
+#define FUTEX_WAIT_MULTIPLE_PRIVATE (FUTEX_WAIT_MULTIPLE | \
|
||||
+ FUTEX_PRIVATE_FLAG)
|
||||
|
||||
/*
|
||||
* Support for robust futexes: the kernel cleans up held futexes at
|
||||
@@ -150,4 +153,21 @@ struct robust_list_head {
|
||||
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
|
||||
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
|
||||
|
||||
+/*
|
||||
+ * Maximum number of multiple futexes to wait for
|
||||
+ */
|
||||
+#define FUTEX_MULTIPLE_MAX_COUNT 128
|
||||
+
|
||||
+/**
|
||||
+ * struct futex_wait_block - Block of futexes to be waited for
|
||||
+ * @uaddr: User address of the futex
|
||||
+ * @val: Futex value expected by userspace
|
||||
+ * @bitset: Bitset for the optional bitmasked wakeup
|
||||
+ */
|
||||
+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 a5876694a60eb..6f4bea76df460 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -197,6 +197,8 @@ struct futex_pi_state {
|
||||
* @rt_waiter: rt_waiter storage for use with requeue_pi
|
||||
* @requeue_pi_key: the requeue_pi target futex key
|
||||
* @bitset: bitset for the optional bitmasked wakeup
|
||||
+ * @uaddr: userspace address of futex
|
||||
+ * @uval: expected futex's value
|
||||
*
|
||||
* We use this hashed waitqueue, instead of a normal wait_queue_entry_t, so
|
||||
* we can wake only the relevant ones (hashed queues may be shared).
|
||||
@@ -219,6 +221,8 @@ struct futex_q {
|
||||
struct rt_mutex_waiter *rt_waiter;
|
||||
union futex_key *requeue_pi_key;
|
||||
u32 bitset;
|
||||
+ u32 __user *uaddr;
|
||||
+ u32 uval;
|
||||
} __randomize_layout;
|
||||
|
||||
static const struct futex_q futex_q_init = {
|
||||
@@ -2304,6 +2308,29 @@ static int unqueue_me(struct futex_q *q)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * unqueue_multiple() - Remove several futexes from their futex_hash_bucket
|
||||
+ * @q: The list of futexes to unqueue
|
||||
+ * @count: Number of futexes in the list
|
||||
+ *
|
||||
+ * Helper to unqueue a list of futexes. This can't fail.
|
||||
+ *
|
||||
+ * Return:
|
||||
+ * - >=0 - Index of the last futex that was awoken;
|
||||
+ * - -1 - If no futex was awoken
|
||||
+ */
|
||||
+static int unqueue_multiple(struct futex_q *q, int count)
|
||||
+{
|
||||
+ int ret = -1;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (!unqueue_me(&q[i]))
|
||||
+ ret = i;
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* PI futexes can not be requeued and must remove themself from the
|
||||
* hash bucket. The hash bucket lock (i.e. lock_ptr) is held on entry
|
||||
@@ -2662,6 +2689,205 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * futex_wait_multiple_setup() - Prepare to wait and enqueue multiple futexes
|
||||
+ * @qs: The corresponding futex list
|
||||
+ * @count: The size of the lists
|
||||
+ * @flags: Futex flags (FLAGS_SHARED, etc.)
|
||||
+ * @awaken: Index of the last awoken futex
|
||||
+ *
|
||||
+ * Prepare multiple futexes in a single step and enqueue them. This may fail if
|
||||
+ * the futex list is invalid or if any futex was already awoken. On success the
|
||||
+ * task is ready to interruptible sleep.
|
||||
+ *
|
||||
+ * Return:
|
||||
+ * - 1 - One of the futexes was awaken by another thread
|
||||
+ * - 0 - Success
|
||||
+ * - <0 - -EFAULT, -EWOULDBLOCK or -EINVAL
|
||||
+ */
|
||||
+static int futex_wait_multiple_setup(struct futex_q *qs, int count,
|
||||
+ unsigned int flags, int *awaken)
|
||||
+{
|
||||
+ struct futex_hash_bucket *hb;
|
||||
+ int ret, i;
|
||||
+ u32 uval;
|
||||
+
|
||||
+ /*
|
||||
+ * Enqueuing multiple futexes is tricky, because we need to
|
||||
+ * enqueue each futex in the list before dealing with the next
|
||||
+ * one to avoid deadlocking on the hash bucket. But, before
|
||||
+ * enqueuing, we need to make sure that current->state is
|
||||
+ * TASK_INTERRUPTIBLE, so we don't absorb any awake events, which
|
||||
+ * cannot be done before the get_futex_key of the next key,
|
||||
+ * because it calls get_user_pages, which can sleep. Thus, we
|
||||
+ * fetch the list of futexes keys in two steps, by first pinning
|
||||
+ * all the memory keys in the futex key, and only then we read
|
||||
+ * each key and queue the corresponding futex.
|
||||
+ */
|
||||
+retry:
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ qs[i].key = FUTEX_KEY_INIT;
|
||||
+ ret = get_futex_key(qs[i].uaddr, flags & FLAGS_SHARED,
|
||||
+ &qs[i].key, FUTEX_READ);
|
||||
+ if (unlikely(ret)) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ set_current_state(TASK_INTERRUPTIBLE);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ struct futex_q *q = &qs[i];
|
||||
+
|
||||
+ hb = queue_lock(q);
|
||||
+
|
||||
+ ret = get_futex_value_locked(&uval, q->uaddr);
|
||||
+ if (ret) {
|
||||
+ /*
|
||||
+ * We need to try to handle the fault, which
|
||||
+ * cannot be done without sleep, so we need to
|
||||
+ * undo all the work already done, to make sure
|
||||
+ * we don't miss any wake ups. Therefore, clean
|
||||
+ * up, handle the fault and retry from the
|
||||
+ * beginning.
|
||||
+ */
|
||||
+ queue_unlock(hb);
|
||||
+
|
||||
+ /*
|
||||
+ * Keys 0..(i-1) are implicitly put
|
||||
+ * on unqueue_multiple.
|
||||
+ */
|
||||
+ *awaken = unqueue_multiple(qs, i);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ /*
|
||||
+ * On a real fault, prioritize the error even if
|
||||
+ * some other futex was awoken. Userspace gave
|
||||
+ * us a bad address, -EFAULT them.
|
||||
+ */
|
||||
+ ret = get_user(uval, q->uaddr);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /*
|
||||
+ * Even if the page fault was handled, If
|
||||
+ * something was already awaken, we can safely
|
||||
+ * give up and succeed to give a hint for userspace to
|
||||
+ * acquire the right futex faster.
|
||||
+ */
|
||||
+ if (*awaken >= 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ goto retry;
|
||||
+ }
|
||||
+
|
||||
+ if (uval != q->uval) {
|
||||
+ queue_unlock(hb);
|
||||
+
|
||||
+ /*
|
||||
+ * If something was already awaken, we can
|
||||
+ * safely ignore the error and succeed.
|
||||
+ */
|
||||
+ *awaken = unqueue_multiple(qs, i);
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+ if (*awaken >= 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ return -EWOULDBLOCK;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * The bucket lock can't be held while dealing with the
|
||||
+ * next futex. Queue each futex at this moment so hb can
|
||||
+ * be unlocked.
|
||||
+ */
|
||||
+ queue_me(&qs[i], hb);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * futex_wait_multiple() - Prepare to wait on and enqueue several futexes
|
||||
+ * @qs: The list of futexes to wait on
|
||||
+ * @op: Operation code from futex's syscall
|
||||
+ * @count: The number of objects
|
||||
+ * @abs_time: Timeout before giving up and returning to userspace
|
||||
+ *
|
||||
+ * Entry point for the FUTEX_WAIT_MULTIPLE futex operation, this function
|
||||
+ * sleeps on a group of futexes and returns on the first futex that
|
||||
+ * triggered, or after the timeout has elapsed.
|
||||
+ *
|
||||
+ * Return:
|
||||
+ * - >=0 - Hint to the futex that was awoken
|
||||
+ * - <0 - On error
|
||||
+ */
|
||||
+static int futex_wait_multiple(struct futex_q *qs, int op,
|
||||
+ u32 count, ktime_t *abs_time)
|
||||
+{
|
||||
+ struct hrtimer_sleeper timeout, *to;
|
||||
+ int ret, flags = 0, hint = 0;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ if (!(op & FUTEX_PRIVATE_FLAG))
|
||||
+ flags |= FLAGS_SHARED;
|
||||
+
|
||||
+ if (op & FUTEX_CLOCK_REALTIME)
|
||||
+ flags |= FLAGS_CLOCKRT;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, flags, 0);
|
||||
+ while (1) {
|
||||
+ ret = futex_wait_multiple_setup(qs, count, flags, &hint);
|
||||
+ if (ret) {
|
||||
+ if (ret > 0) {
|
||||
+ /* A futex was awaken during setup */
|
||||
+ ret = hint;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (to)
|
||||
+ hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
|
||||
+
|
||||
+ /*
|
||||
+ * Avoid sleeping if another thread already tried to
|
||||
+ * wake us.
|
||||
+ */
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (plist_node_empty(&qs[i].list))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (i == count && (!to || to->task))
|
||||
+ freezable_schedule();
|
||||
+
|
||||
+ ret = unqueue_multiple(qs, count);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ if (ret >= 0)
|
||||
+ break;
|
||||
+ if (to && !to->task) {
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ break;
|
||||
+ } else if (signal_pending(current)) {
|
||||
+ ret = -ERESTARTSYS;
|
||||
+ break;
|
||||
+ }
|
||||
+ /*
|
||||
+ * The final case is a spurious wakeup, for
|
||||
+ * which just retry.
|
||||
+ */
|
||||
+ }
|
||||
+
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val,
|
||||
ktime_t *abs_time, u32 bitset)
|
||||
{
|
||||
@@ -3774,6 +4000,43 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * futex_read_wait_block - Read an array of futex_wait_block from userspace
|
||||
+ * @uaddr: Userspace address of the block
|
||||
+ * @count: Number of blocks to be read
|
||||
+ *
|
||||
+ * This function creates and allocate an array of futex_q (we zero it to
|
||||
+ * initialize the fields) and then, for each futex_wait_block element from
|
||||
+ * userspace, fill a futex_q element with proper values.
|
||||
+ */
|
||||
+inline struct futex_q *futex_read_wait_block(u32 __user *uaddr, u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_q *qs;
|
||||
+ struct futex_wait_block fwb;
|
||||
+ struct futex_wait_block __user *entry =
|
||||
+ (struct futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_MULTIPLE_MAX_COUNT)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(*qs), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(qs);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ qs[i].uaddr = fwb.uaddr;
|
||||
+ qs[i].uval = fwb.val;
|
||||
+ qs[i].bitset = fwb.bitset;
|
||||
+ }
|
||||
+
|
||||
+ return qs;
|
||||
+}
|
||||
|
||||
SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
struct __kernel_timespec __user *, utime, u32 __user *, uaddr2,
|
||||
@@ -3786,7 +4049,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))
|
||||
@@ -3807,6 +4071,25 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
cmd == FUTEX_CMP_REQUEUE_PI || cmd == FUTEX_WAKE_OP)
|
||||
val2 = (u32) (unsigned long) utime;
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE) {
|
||||
+ int ret;
|
||||
+ struct futex_q *qs;
|
||||
+
|
||||
+#ifdef CONFIG_X86_X32
|
||||
+ if (unlikely(in_x32_syscall()))
|
||||
+ return -ENOSYS;
|
||||
+#endif
|
||||
+ qs = futex_read_wait_block(uaddr, val);
|
||||
+
|
||||
+ if (IS_ERR(qs))
|
||||
+ return PTR_ERR(qs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(qs, op, val, tp);
|
||||
+ kfree(qs);
|
||||
+
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);
|
||||
}
|
||||
|
||||
@@ -3969,6 +4252,57 @@ COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid,
|
||||
#endif /* CONFIG_COMPAT */
|
||||
|
||||
#ifdef CONFIG_COMPAT_32BIT_TIME
|
||||
+/**
|
||||
+ * struct compat_futex_wait_block - Block of futexes to be waited for
|
||||
+ * @uaddr: User address of the futex (compatible pointer)
|
||||
+ * @val: Futex value expected by userspace
|
||||
+ * @bitset: Bitset for the optional bitmasked wakeup
|
||||
+ */
|
||||
+struct compat_futex_wait_block {
|
||||
+ compat_uptr_t uaddr;
|
||||
+ __u32 val;
|
||||
+ __u32 bitset;
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * compat_futex_read_wait_block - Read an array of futex_wait_block from
|
||||
+ * userspace
|
||||
+ * @uaddr: Userspace address of the block
|
||||
+ * @count: Number of blocks to be read
|
||||
+ *
|
||||
+ * This function does the same as futex_read_wait_block(), except that it
|
||||
+ * converts the pointer to the futex from the compat version to the regular one.
|
||||
+ */
|
||||
+inline struct futex_q *compat_futex_read_wait_block(u32 __user *uaddr,
|
||||
+ u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_q *qs;
|
||||
+ struct compat_futex_wait_block fwb;
|
||||
+ struct compat_futex_wait_block __user *entry =
|
||||
+ (struct compat_futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_MULTIPLE_MAX_COUNT)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(*qs), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(qs);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ qs[i].uaddr = compat_ptr(fwb.uaddr);
|
||||
+ qs[i].uval = fwb.val;
|
||||
+ qs[i].bitset = fwb.bitset;
|
||||
+ }
|
||||
+
|
||||
+ return qs;
|
||||
+}
|
||||
+
|
||||
SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
struct old_timespec32 __user *, utime, u32 __user *, uaddr2,
|
||||
u32, val3)
|
||||
@@ -3980,7 +4314,8 @@ 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))
|
||||
@@ -3995,6 +4330,19 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
cmd == FUTEX_CMP_REQUEUE_PI || cmd == FUTEX_WAKE_OP)
|
||||
val2 = (int) (unsigned long) utime;
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE) {
|
||||
+ int ret;
|
||||
+ struct futex_q *qs = compat_futex_read_wait_block(uaddr, val);
|
||||
+
|
||||
+ if (IS_ERR(qs))
|
||||
+ return PTR_ERR(qs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(qs, op, val, tp);
|
||||
+ kfree(qs);
|
||||
+
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);
|
||||
}
|
||||
#endif /* CONFIG_COMPAT_32BIT_TIME */
|
||||
|
||||
From ccdddb50d330d2ee1a4d2cbfdd27bdd7fb10eec3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@collabora.com>
|
||||
Date: Fri, 7 Feb 2020 23:28:02 -0300
|
||||
Subject: [PATCH 2/2] futex: Add Proton compatibility code
|
||||
|
||||
---
|
||||
include/uapi/linux/futex.h | 2 +-
|
||||
kernel/futex.c | 5 +++--
|
||||
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index 580001e89c6ca..a3e760886b8e7 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -21,7 +21,7 @@
|
||||
#define FUTEX_WAKE_BITSET 10
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
-#define FUTEX_WAIT_MULTIPLE 13
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 6f4bea76df460..03d89fe7b8392 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -4059,7 +4059,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;
|
||||
}
|
||||
@@ -4260,6 +4260,7 @@ COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid,
|
||||
*/
|
||||
struct compat_futex_wait_block {
|
||||
compat_uptr_t uaddr;
|
||||
+ __u32 pad;
|
||||
__u32 val;
|
||||
__u32 bitset;
|
||||
};
|
||||
@@ -4322,7 +4323,7 @@ SYSCALL_DEFINE6(futex_time32, 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;
|
||||
}
|
2020
linux-tkg/linux-tkg-patches/5.10/0007-v5.10-futex2_interface.patch
Normal file
2020
linux-tkg/linux-tkg-patches/5.10/0007-v5.10-futex2_interface.patch
Normal file
File diff suppressed because it is too large
Load diff
4374
linux-tkg/linux-tkg-patches/5.10/0007-v5.10-winesync.patch
Normal file
4374
linux-tkg/linux-tkg-patches/5.10/0007-v5.10-winesync.patch
Normal file
File diff suppressed because it is too large
Load diff
71768
linux-tkg/linux-tkg-patches/5.10/0008-5.10-bcachefs.patch
Normal file
71768
linux-tkg/linux-tkg-patches/5.10/0008-5.10-bcachefs.patch
Normal file
File diff suppressed because it is too large
Load diff
90
linux-tkg/linux-tkg-patches/5.10/0009-glitched-bmq.patch
Normal file
90
linux-tkg/linux-tkg-patches/5.10/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
|
||||
@@ -169,7 +169,7 @@
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
|
@ -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 (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)
|
8706
linux-tkg/linux-tkg-patches/5.10/0009-prjc_v5.10-r3.patch
Normal file
8706
linux-tkg/linux-tkg-patches/5.10/0009-prjc_v5.10-r3.patch
Normal file
File diff suppressed because it is too large
Load diff
43
linux-tkg/linux-tkg-patches/5.10/0011-ZFS-fix.patch
Normal file
43
linux-tkg/linux-tkg-patches/5.10/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
|
||||
|
||||
|
3430
linux-tkg/linux-tkg-patches/5.10/0012-linux-hardened.patch
Normal file
3430
linux-tkg/linux-tkg-patches/5.10/0012-linux-hardened.patch
Normal file
File diff suppressed because it is too large
Load diff
133
linux-tkg/linux-tkg-patches/5.10/0012-misc-additions.patch
Normal file
133
linux-tkg/linux-tkg-patches/5.10/0012-misc-additions.patch
Normal file
|
@ -0,0 +1,133 @@
|
|||
From e5e77ad2223f662e1615266d8ef39a8db7e65a70 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Felix=20H=C3=A4dicke?= <felixhaedicke@web.de>
|
||||
Date: Thu, 19 Nov 2020 09:22:32 +0100
|
||||
Subject: HID: quirks: Add Apple Magic Trackpad 2 to hid_have_special_driver
|
||||
list
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The Apple Magic Trackpad 2 is handled by the magicmouse driver. And
|
||||
there were severe stability issues when both drivers (hid-generic and
|
||||
hid-magicmouse) were loaded for this device.
|
||||
|
||||
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=210241
|
||||
|
||||
Signed-off-by: Felix Hädicke <felixhaedicke@web.de>
|
||||
---
|
||||
drivers/hid/hid-quirks.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
|
||||
index bf7ecab5d9e5..142e9dae2837 100644
|
||||
--- a/drivers/hid/hid-quirks.c
|
||||
+++ b/drivers/hid/hid-quirks.c
|
||||
@@ -478,6 +478,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||
#if IS_ENABLED(CONFIG_HID_MAGICMOUSE)
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
|
||||
+ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) },
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_HID_MAYFLASH)
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) },
|
||||
--
|
||||
cgit v1.2.3-1-gf6bb5
|
||||
|
||||
From e437ac931e89629f952ce9f3f9dfe45ac505cd0d Mon Sep 17 00:00:00 2001
|
||||
From: Joshua Ashton <joshua@froggi.es>
|
||||
Date: Tue, 5 Jan 2021 19:46:01 +0000
|
||||
Subject: [PATCH] drm/amdgpu: don't limit gtt size on apus
|
||||
|
||||
Since commit 24562523688b ("Revert "drm/amd/amdgpu: set gtt size
|
||||
according to system memory size only""), the GTT size was limited by
|
||||
3GiB or VRAM size.
|
||||
|
||||
This is problematic on APU systems with a small carveout
|
||||
(notably, those that ship with dGPUs where this is unconfigurable),
|
||||
where the carveout size can be as low as 128MiB.
|
||||
|
||||
This makes it so the GTT size heuristic always uses 3/4ths of
|
||||
the system memory size on APUs (limiting the size by 3GiB/VRAM size
|
||||
only on devices with dedicated video memory).
|
||||
|
||||
Fixes: 24562523688b ("Revert drm/amd/amdgpu: set gtt size according to
|
||||
system memory size only")
|
||||
|
||||
Signed-off-by: Joshua Ashton <joshua@froggi.es>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 5 +++--
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 12 +++++++++---
|
||||
2 files changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
index 72efd579ec5e..a5a41e9272d6 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
@@ -192,8 +192,9 @@ module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
|
||||
|
||||
/**
|
||||
* DOC: gttsize (int)
|
||||
- * Restrict the size of GTT domain in MiB for testing. The default is -1 (It's VRAM size if 3GB < VRAM < 3/4 RAM,
|
||||
- * otherwise 3/4 RAM size).
|
||||
+ * Restrict the size of GTT domain in MiB for testing. The default is -1 (On APUs this is 3/4th
|
||||
+ * of the system memory; on dGPUs this is 3GiB or VRAM sized, whichever is bigger,
|
||||
+ * with an upper bound of 3/4th of system memory.
|
||||
*/
|
||||
MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
|
||||
module_param_named(gttsize, amdgpu_gtt_size, int, 0600);
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
|
||||
index 4d8f19ab1014..294f26f4f310 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
|
||||
@@ -1865,9 +1865,15 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
struct sysinfo si;
|
||||
|
||||
si_meminfo(&si);
|
||||
- gtt_size = min(max((AMDGPU_DEFAULT_GTT_SIZE_MB << 20),
|
||||
- adev->gmc.mc_vram_size),
|
||||
- ((uint64_t)si.totalram * si.mem_unit * 3/4));
|
||||
+ gtt_size = (uint64_t)si.totalram * si.mem_unit * 3/4;
|
||||
+ /* If we have dedicated memory, limit our GTT size to
|
||||
+ * 3GiB or VRAM size, whichever is bigger
|
||||
+ */
|
||||
+ if (!(adev->flags & AMD_IS_APU)) {
|
||||
+ gtt_size = min(max(AMDGPU_DEFAULT_GTT_SIZE_MB << 20,
|
||||
+ adev->gmc.mc_vram_size),
|
||||
+ gtt_size);
|
||||
+ }
|
||||
}
|
||||
else
|
||||
gtt_size = (uint64_t)amdgpu_gtt_size << 20;
|
||||
--
|
||||
2.30.0
|
||||
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 3 Feb 2021 11:20:12 +0200
|
||||
Subject: Revert "cpufreq: Avoid configuring old governors as default with intel_pstate"
|
||||
|
||||
This is an undesirable behavior for us since our aggressive ondemand performs
|
||||
better than schedutil for gaming when using intel_pstate in passive mode.
|
||||
Also it interferes with the option to select the desired default governor we have.
|
||||
|
||||
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
|
||||
index 2c7171e0b0010..85de313ddec29 100644
|
||||
--- a/drivers/cpufreq/Kconfig
|
||||
+++ b/drivers/cpufreq/Kconfig
|
||||
@@ -71,7 +71,6 @@ config CPU_FREQ_DEFAULT_GOV_USERSPACE
|
||||
|
||||
config CPU_FREQ_DEFAULT_GOV_ONDEMAND
|
||||
bool "ondemand"
|
||||
- depends on !(X86_INTEL_PSTATE && SMP)
|
||||
select CPU_FREQ_GOV_ONDEMAND
|
||||
select CPU_FREQ_GOV_PERFORMANCE
|
||||
help
|
||||
@@ -83,7 +84,6 @@ config CPU_FREQ_DEFAULT_GOV_ONDEMAND
|
||||
|
||||
config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
|
||||
bool "conservative"
|
||||
- depends on !(X86_INTEL_PSTATE && SMP)
|
||||
select CPU_FREQ_GOV_CONSERVATIVE
|
||||
select CPU_FREQ_GOV_PERFORMANCE
|
||||
help
|
|
@ -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;
|
||||
|
||||
#if defined(CONFIG_SYSCTL)
|
||||
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
/* Constants used for minimum and maximum */
|
||||
#ifdef CONFIG_LOCKUP_DETECTOR
|
||||
static int sixty = 60;
|
||||
@@ -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);
|
|
@ -0,0 +1,244 @@
|
|||
From 5ae86c8436b83762bc6cf46bea1da6ace2d3f50e Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Wed, 6 May 2020 14:37:44 +0300
|
||||
Subject: [PATCH 1/2] mm: Support soft dirty flag reset for VA range.
|
||||
|
||||
---
|
||||
fs/proc/task_mmu.c | 129 ++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 103 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index 3cec6fbef725..7c7865028f10 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -1032,6 +1032,8 @@ enum clear_refs_types {
|
||||
|
||||
struct clear_refs_private {
|
||||
enum clear_refs_types type;
|
||||
+ unsigned long start, end;
|
||||
+ bool clear_range;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MEM_SOFT_DIRTY
|
||||
@@ -1125,6 +1127,8 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,
|
||||
spinlock_t *ptl;
|
||||
struct page *page;
|
||||
|
||||
+ BUG_ON(addr < cp->start || end > cp->end);
|
||||
+
|
||||
ptl = pmd_trans_huge_lock(pmd, vma);
|
||||
if (ptl) {
|
||||
if (cp->type == CLEAR_REFS_SOFT_DIRTY) {
|
||||
@@ -1181,9 +1185,11 @@ static int clear_refs_test_walk(unsigned long start, unsigned long end,
|
||||
struct clear_refs_private *cp = walk->private;
|
||||
struct vm_area_struct *vma = walk->vma;
|
||||
|
||||
- if (vma->vm_flags & VM_PFNMAP)
|
||||
+ if (!cp->clear_range && (vma->vm_flags & VM_PFNMAP))
|
||||
return 1;
|
||||
|
||||
+ BUG_ON(start < cp->start || end > cp->end);
|
||||
+
|
||||
/*
|
||||
* Writing 1 to /proc/pid/clear_refs affects all pages.
|
||||
* Writing 2 to /proc/pid/clear_refs only affects anonymous pages.
|
||||
@@ -1206,10 +1212,12 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct task_struct *task;
|
||||
- char buffer[PROC_NUMBUF];
|
||||
+ char buffer[18];
|
||||
struct mm_struct *mm;
|
||||
struct vm_area_struct *vma;
|
||||
enum clear_refs_types type;
|
||||
+ unsigned long start, end;
|
||||
+ bool clear_range;
|
||||
int itype;
|
||||
int rv;
|
||||
|
||||
@@ -1218,12 +1226,34 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
|
||||
count = sizeof(buffer) - 1;
|
||||
if (copy_from_user(buffer, buf, count))
|
||||
return -EFAULT;
|
||||
- rv = kstrtoint(strstrip(buffer), 10, &itype);
|
||||
- if (rv < 0)
|
||||
- return rv;
|
||||
- type = (enum clear_refs_types)itype;
|
||||
- if (type < CLEAR_REFS_ALL || type >= CLEAR_REFS_LAST)
|
||||
- return -EINVAL;
|
||||
+
|
||||
+ if (buffer[0] == '6')
|
||||
+ {
|
||||
+ static int once;
|
||||
+
|
||||
+ if (!once++)
|
||||
+ printk(KERN_DEBUG "task_mmu: Using POC clear refs range implementation.\n");
|
||||
+
|
||||
+ if (count != 17)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ type = CLEAR_REFS_SOFT_DIRTY;
|
||||
+ start = *(unsigned long *)(buffer + 1);
|
||||
+ end = *(unsigned long *)(buffer + 1 + 8);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ rv = kstrtoint(strstrip(buffer), 10, &itype);
|
||||
+ if (rv < 0)
|
||||
+ return rv;
|
||||
+ type = (enum clear_refs_types)itype;
|
||||
+
|
||||
+ if (type < CLEAR_REFS_ALL || type >= CLEAR_REFS_LAST)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ start = 0;
|
||||
+ end = -1UL;
|
||||
+ }
|
||||
|
||||
task = get_proc_task(file_inode(file));
|
||||
if (!task)
|
||||
@@ -1235,41 +1265,87 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
|
||||
.type = type,
|
||||
};
|
||||
|
||||
- if (mmap_write_lock_killable(mm)) {
|
||||
- count = -EINTR;
|
||||
- goto out_mm;
|
||||
+ if (start || end != -1UL)
|
||||
+ {
|
||||
+ start = min(start, mm->highest_vm_end) & PAGE_MASK;
|
||||
+ end = min(end, mm->highest_vm_end) & PAGE_MASK;
|
||||
+
|
||||
+ if (start >= end)
|
||||
+ {
|
||||
+ count = -EINVAL;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ clear_range = true;
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ clear_range = false;
|
||||
+ }
|
||||
+
|
||||
+ cp.start = start;
|
||||
+ cp.end = end;
|
||||
+ cp.clear_range = clear_range;
|
||||
+
|
||||
if (type == CLEAR_REFS_MM_HIWATER_RSS) {
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Writing 5 to /proc/pid/clear_refs resets the peak
|
||||
* resident set size to this mm's current rss value.
|
||||
*/
|
||||
reset_mm_hiwater_rss(mm);
|
||||
- goto out_unlock;
|
||||
+ mmap_write_unlock(mm);
|
||||
+ goto out_mm;
|
||||
}
|
||||
|
||||
if (type == CLEAR_REFS_SOFT_DIRTY) {
|
||||
- for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
- if (!(vma->vm_flags & VM_SOFTDIRTY))
|
||||
- continue;
|
||||
- vma->vm_flags &= ~VM_SOFTDIRTY;
|
||||
- vma_set_page_prot(vma);
|
||||
+ if (mmap_read_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
}
|
||||
-
|
||||
+ if (!clear_range)
|
||||
+ for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
+ if (!(vma->vm_flags & VM_SOFTDIRTY))
|
||||
+ continue;
|
||||
+ mmap_read_unlock(mm);
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
+ vma->vm_flags &= ~VM_SOFTDIRTY;
|
||||
+ vma_set_page_prot(vma);
|
||||
+ }
|
||||
+ mmap_write_downgrade(mm);
|
||||
+ break;
|
||||
+ }
|
||||
inc_tlb_flush_pending(mm);
|
||||
mmu_notifier_range_init(&range, MMU_NOTIFY_SOFT_DIRTY,
|
||||
- 0, NULL, mm, 0, -1UL);
|
||||
+ 0, NULL, mm, start, end);
|
||||
mmu_notifier_invalidate_range_start(&range);
|
||||
}
|
||||
- walk_page_range(mm, 0, mm->highest_vm_end, &clear_refs_walk_ops,
|
||||
+ else
|
||||
+ {
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ }
|
||||
+ walk_page_range(mm, start, end == -1UL ? mm->highest_vm_end : end, &clear_refs_walk_ops,
|
||||
&cp);
|
||||
if (type == CLEAR_REFS_SOFT_DIRTY) {
|
||||
mmu_notifier_invalidate_range_end(&range);
|
||||
flush_tlb_mm(mm);
|
||||
dec_tlb_flush_pending(mm);
|
||||
+ mmap_read_unlock(mm);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ mmap_write_unlock(mm);
|
||||
}
|
||||
-out_unlock:
|
||||
- mmap_write_unlock(mm);
|
||||
out_mm:
|
||||
mmput(mm);
|
||||
}
|
||||
@@ -1301,6 +1377,7 @@ struct pagemapread {
|
||||
#define PM_PFRAME_MASK GENMASK_ULL(PM_PFRAME_BITS - 1, 0)
|
||||
#define PM_SOFT_DIRTY BIT_ULL(55)
|
||||
#define PM_MMAP_EXCLUSIVE BIT_ULL(56)
|
||||
+#define PM_SOFT_DIRTY_PAGE BIT_ULL(57)
|
||||
#define PM_FILE BIT_ULL(61)
|
||||
#define PM_SWAP BIT_ULL(62)
|
||||
#define PM_PRESENT BIT_ULL(63)
|
||||
@@ -1373,11 +1450,11 @@ static pagemap_entry_t pte_to_pagemap_entry(struct pagemapread *pm,
|
||||
flags |= PM_PRESENT;
|
||||
page = vm_normal_page(vma, addr, pte);
|
||||
if (pte_soft_dirty(pte))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
} else if (is_swap_pte(pte)) {
|
||||
swp_entry_t entry;
|
||||
if (pte_swp_soft_dirty(pte))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
entry = pte_to_swp_entry(pte);
|
||||
if (pm->show_pfn)
|
||||
frame = swp_type(entry) |
|
||||
@@ -1424,7 +1501,7 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
|
||||
flags |= PM_PRESENT;
|
||||
if (pmd_soft_dirty(pmd))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
if (pm->show_pfn)
|
||||
frame = pmd_pfn(pmd) +
|
||||
((addr & ~PMD_MASK) >> PAGE_SHIFT);
|
||||
@@ -1442,7 +1519,7 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
}
|
||||
flags |= PM_SWAP;
|
||||
if (pmd_swp_soft_dirty(pmd))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
VM_BUG_ON(!is_pmd_migration_entry(pmd));
|
||||
page = migration_entry_to_page(entry);
|
||||
}
|
||||
--
|
||||
2.30.2
|
||||
|
360
linux-tkg/linux-tkg-patches/5.11/0002-clear-patches.patch
Normal file
360
linux-tkg/linux-tkg-patches/5.11/0002-clear-patches.patch
Normal file
|
@ -0,0 +1,360 @@
|
|||
From 0000000000000000000000000000000000000000 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 c9338f9..6974fbf 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -62,7 +62,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)
|
||||
{
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 f449584..c994d24 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -531,7 +531,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -539,7 +539,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -547,7 +547,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -555,7 +555,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -563,7 +563,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -571,7 +571,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -579,7 +579,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -599,7 +599,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -607,7 +607,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -615,7 +615,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -623,7 +623,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -631,7 +631,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -639,7 +639,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -647,7 +647,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -668,7 +668,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -676,7 +676,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -684,7 +684,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -692,7 +692,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -700,7 +700,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -708,7 +708,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -716,7 +716,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -737,7 +737,7 @@ static struct cpuidle_state skx_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 300,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 30c1142..4345075 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -4201,8 +4201,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;
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 f11b9bd..1bbfcc1 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -717,6 +717,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);
|
||||
@@ -750,7 +751,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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] 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 c0cd1b9..af1e2fb 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -59,15 +59,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/
|
||||
@@ -80,6 +73,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/
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
|
@ -0,0 +1,363 @@
|
|||
From 9c85113cf4019e7b277a44e72bda8b78347aa72f Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Thu, 7 May 2020 14:05:31 +0300
|
||||
Subject: [PATCH 2/2] mm: Support soft dirty flag read with reset.
|
||||
|
||||
---
|
||||
fs/proc/base.c | 3 +
|
||||
fs/proc/internal.h | 1 +
|
||||
fs/proc/task_mmu.c | 144 +++++++++++++++++++++++++++++++++++++++------
|
||||
3 files changed, 130 insertions(+), 18 deletions(-)
|
||||
|
||||
diff --git a/fs/proc/base.c b/fs/proc/base.c
|
||||
index b3422cda2a91..8199ae2411ca 100644
|
||||
--- a/fs/proc/base.c
|
||||
+++ b/fs/proc/base.c
|
||||
@@ -3202,6 +3202,9 @@ static const struct pid_entry tgid_base_stuff[] = {
|
||||
REG("smaps", S_IRUGO, proc_pid_smaps_operations),
|
||||
REG("smaps_rollup", S_IRUGO, proc_pid_smaps_rollup_operations),
|
||||
REG("pagemap", S_IRUSR, proc_pagemap_operations),
|
||||
+#ifdef CONFIG_MEM_SOFT_DIRTY
|
||||
+ REG("pagemap_reset", S_IRUSR, proc_pagemap_reset_operations),
|
||||
+#endif
|
||||
#endif
|
||||
#ifdef CONFIG_SECURITY
|
||||
DIR("attr", S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
|
||||
diff --git a/fs/proc/internal.h b/fs/proc/internal.h
|
||||
index f60b379dcdc7..36a901cf0e7f 100644
|
||||
--- a/fs/proc/internal.h
|
||||
+++ b/fs/proc/internal.h
|
||||
@@ -303,6 +303,7 @@ extern const struct file_operations proc_pid_smaps_operations;
|
||||
extern const struct file_operations proc_pid_smaps_rollup_operations;
|
||||
extern const struct file_operations proc_clear_refs_operations;
|
||||
extern const struct file_operations proc_pagemap_operations;
|
||||
+extern const struct file_operations proc_pagemap_reset_operations;
|
||||
|
||||
extern unsigned long task_vsize(struct mm_struct *);
|
||||
extern unsigned long task_statm(struct mm_struct *,
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index 7c7865028f10..a21694967915 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -1056,8 +1056,8 @@ static inline bool pte_is_pinned(struct vm_area_struct *vma, unsigned long addr,
|
||||
return page_maybe_dma_pinned(page);
|
||||
}
|
||||
|
||||
-static inline void clear_soft_dirty(struct vm_area_struct *vma,
|
||||
- unsigned long addr, pte_t *pte)
|
||||
+static inline bool clear_soft_dirty(struct vm_area_struct *vma,
|
||||
+ unsigned long addr, pte_t *pte)
|
||||
{
|
||||
/*
|
||||
* The soft-dirty tracker uses #PF-s to catch writes
|
||||
@@ -1066,37 +1066,46 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma,
|
||||
* of how soft-dirty works.
|
||||
*/
|
||||
pte_t ptent = *pte;
|
||||
+ bool ret = false;
|
||||
|
||||
if (pte_present(ptent)) {
|
||||
pte_t old_pte;
|
||||
|
||||
if (pte_is_pinned(vma, addr, ptent))
|
||||
- return;
|
||||
+ return ret;
|
||||
old_pte = ptep_modify_prot_start(vma, addr, pte);
|
||||
+ ret = pte_soft_dirty(old_pte);
|
||||
ptent = pte_wrprotect(old_pte);
|
||||
ptent = pte_clear_soft_dirty(ptent);
|
||||
ptep_modify_prot_commit(vma, addr, pte, old_pte, ptent);
|
||||
} else if (is_swap_pte(ptent)) {
|
||||
+ ret = pte_swp_soft_dirty(ptent);
|
||||
ptent = pte_swp_clear_soft_dirty(ptent);
|
||||
set_pte_at(vma->vm_mm, addr, pte, ptent);
|
||||
}
|
||||
+ return ret;
|
||||
}
|
||||
#else
|
||||
-static inline void clear_soft_dirty(struct vm_area_struct *vma,
|
||||
+static inline bool clear_soft_dirty(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *pte)
|
||||
{
|
||||
+ return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MEM_SOFT_DIRTY) && defined(CONFIG_TRANSPARENT_HUGEPAGE)
|
||||
-static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma,
|
||||
+static inline bool clear_soft_dirty_pmd(struct vm_area_struct *vma,
|
||||
unsigned long addr, pmd_t *pmdp)
|
||||
{
|
||||
pmd_t old, pmd = *pmdp;
|
||||
+ bool ret = false;
|
||||
|
||||
if (pmd_present(pmd)) {
|
||||
/* See comment in change_huge_pmd() */
|
||||
old = pmdp_invalidate(vma, addr, pmdp);
|
||||
+
|
||||
+ ret = pmd_soft_dirty(old);
|
||||
+
|
||||
if (pmd_dirty(old))
|
||||
pmd = pmd_mkdirty(pmd);
|
||||
if (pmd_young(old))
|
||||
@@ -1107,14 +1116,17 @@ static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma,
|
||||
|
||||
set_pmd_at(vma->vm_mm, addr, pmdp, pmd);
|
||||
} else if (is_migration_entry(pmd_to_swp_entry(pmd))) {
|
||||
+ ret = pmd_swp_soft_dirty(pmd);
|
||||
pmd = pmd_swp_clear_soft_dirty(pmd);
|
||||
set_pmd_at(vma->vm_mm, addr, pmdp, pmd);
|
||||
}
|
||||
+ return ret;
|
||||
}
|
||||
#else
|
||||
-static inline void clear_soft_dirty_pmd(struct vm_area_struct *vma,
|
||||
+static inline bool clear_soft_dirty_pmd(struct vm_area_struct *vma,
|
||||
unsigned long addr, pmd_t *pmdp)
|
||||
{
|
||||
+ return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1367,6 +1379,7 @@ struct pagemapread {
|
||||
int pos, len; /* units: PM_ENTRY_BYTES, not bytes */
|
||||
pagemap_entry_t *buffer;
|
||||
bool show_pfn;
|
||||
+ bool reset;
|
||||
};
|
||||
|
||||
#define PAGEMAP_WALK_SIZE (PMD_SIZE)
|
||||
@@ -1398,6 +1411,14 @@ static int add_to_pagemap(unsigned long addr, pagemap_entry_t *pme,
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int add_addr_to_pagemap(unsigned long addr, struct pagemapread *pm)
|
||||
+{
|
||||
+ ((unsigned long *)pm->buffer)[pm->pos++] = addr;
|
||||
+ if (pm->pos >= pm->len)
|
||||
+ return PM_END_OF_BUFFER;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int pagemap_pte_hole(unsigned long start, unsigned long end,
|
||||
__always_unused int depth, struct mm_walk *walk)
|
||||
{
|
||||
@@ -1405,6 +1426,9 @@ static int pagemap_pte_hole(unsigned long start, unsigned long end,
|
||||
unsigned long addr = start;
|
||||
int err = 0;
|
||||
|
||||
+ if (pm->reset)
|
||||
+ goto out;
|
||||
+
|
||||
while (addr < end) {
|
||||
struct vm_area_struct *vma = find_vma(walk->mm, addr);
|
||||
pagemap_entry_t pme = make_pme(0, 0);
|
||||
@@ -1439,8 +1463,9 @@ static int pagemap_pte_hole(unsigned long start, unsigned long end,
|
||||
}
|
||||
|
||||
static pagemap_entry_t pte_to_pagemap_entry(struct pagemapread *pm,
|
||||
- struct vm_area_struct *vma, unsigned long addr, pte_t pte)
|
||||
+ struct vm_area_struct *vma, unsigned long addr, pte_t *pte_addr)
|
||||
{
|
||||
+ pte_t pte = *pte_addr;
|
||||
u64 frame = 0, flags = 0;
|
||||
struct page *page = NULL;
|
||||
|
||||
@@ -1493,6 +1518,20 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
pmd_t pmd = *pmdp;
|
||||
struct page *page = NULL;
|
||||
|
||||
+ if (pm->reset)
|
||||
+ {
|
||||
+ if (clear_soft_dirty_pmd(vma, addr, pmdp))
|
||||
+ {
|
||||
+ for (; addr != end; addr += PAGE_SIZE)
|
||||
+ {
|
||||
+ err = add_addr_to_pagemap(addr, pm);
|
||||
+ if (err)
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ goto trans_huge_done;
|
||||
+ }
|
||||
+
|
||||
if (vma->vm_flags & VM_SOFTDIRTY)
|
||||
flags |= PM_SOFT_DIRTY;
|
||||
|
||||
@@ -1541,6 +1580,7 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
frame += (1 << MAX_SWAPFILES_SHIFT);
|
||||
}
|
||||
}
|
||||
+trans_huge_done:
|
||||
spin_unlock(ptl);
|
||||
return err;
|
||||
}
|
||||
@@ -1555,10 +1595,18 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
*/
|
||||
orig_pte = pte = pte_offset_map_lock(walk->mm, pmdp, addr, &ptl);
|
||||
for (; addr < end; pte++, addr += PAGE_SIZE) {
|
||||
- pagemap_entry_t pme;
|
||||
+ if (pm->reset)
|
||||
+ {
|
||||
+ if (clear_soft_dirty(vma, addr, pte))
|
||||
+ err = add_addr_to_pagemap(addr, pm);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ pagemap_entry_t pme;
|
||||
|
||||
- pme = pte_to_pagemap_entry(pm, vma, addr, *pte);
|
||||
- err = add_to_pagemap(addr, &pme, pm);
|
||||
+ pme = pte_to_pagemap_entry(pm, vma, addr, pte);
|
||||
+ err = add_to_pagemap(addr, &pme, pm);
|
||||
+ }
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
@@ -1650,8 +1698,8 @@ static const struct mm_walk_ops pagemap_ops = {
|
||||
* determine which areas of memory are actually mapped and llseek to
|
||||
* skip over unmapped regions.
|
||||
*/
|
||||
-static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
- size_t count, loff_t *ppos)
|
||||
+static ssize_t do_pagemap_read(struct file *file, char __user *buf,
|
||||
+ size_t count, loff_t *ppos, bool reset)
|
||||
{
|
||||
struct mm_struct *mm = file->private_data;
|
||||
struct pagemapread pm;
|
||||
@@ -1660,6 +1708,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
unsigned long start_vaddr;
|
||||
unsigned long end_vaddr;
|
||||
int ret = 0, copied = 0;
|
||||
+ struct mmu_notifier_range range;
|
||||
+ size_t buffer_len;
|
||||
|
||||
if (!mm || !mmget_not_zero(mm))
|
||||
goto out;
|
||||
@@ -1675,19 +1725,38 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
|
||||
/* do not disclose physical addresses: attack vector */
|
||||
pm.show_pfn = file_ns_capable(file, &init_user_ns, CAP_SYS_ADMIN);
|
||||
+ pm.reset = reset;
|
||||
|
||||
- pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
|
||||
- pm.buffer = kmalloc_array(pm.len, PM_ENTRY_BYTES, GFP_KERNEL);
|
||||
+ buffer_len = min(PAGEMAP_WALK_SIZE >> PAGE_SHIFT, count / PM_ENTRY_BYTES);
|
||||
+
|
||||
+ pm.buffer = kmalloc_array(buffer_len, PM_ENTRY_BYTES, GFP_KERNEL);
|
||||
ret = -ENOMEM;
|
||||
if (!pm.buffer)
|
||||
goto out_mm;
|
||||
|
||||
src = *ppos;
|
||||
svpfn = src / PM_ENTRY_BYTES;
|
||||
- end_vaddr = mm->task_size;
|
||||
+
|
||||
+ start_vaddr = svpfn << PAGE_SHIFT;
|
||||
+
|
||||
+ if (reset)
|
||||
+ {
|
||||
+ if (count < sizeof(end_vaddr))
|
||||
+ {
|
||||
+ ret = -EINVAL;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ if (copy_from_user(&end_vaddr, buf, sizeof(end_vaddr)))
|
||||
+ return -EFAULT;
|
||||
+ end_vaddr = min(end_vaddr, mm->task_size);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ end_vaddr = mm->task_size;
|
||||
+ start_vaddr = end_vaddr;
|
||||
+ }
|
||||
|
||||
/* watch out for wraparound */
|
||||
- start_vaddr = end_vaddr;
|
||||
if (svpfn <= (ULONG_MAX >> PAGE_SHIFT))
|
||||
start_vaddr = untagged_addr(svpfn << PAGE_SHIFT);
|
||||
|
||||
@@ -1707,18 +1776,35 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
unsigned long end;
|
||||
|
||||
pm.pos = 0;
|
||||
- end = (start_vaddr + PAGEMAP_WALK_SIZE) & PAGEMAP_WALK_MASK;
|
||||
+ pm.len = min(buffer_len, count / PM_ENTRY_BYTES);
|
||||
+
|
||||
+ end = reset ? end_vaddr : (start_vaddr + (pm.len << PAGE_SHIFT));
|
||||
/* overflow ? */
|
||||
if (end < start_vaddr || end > end_vaddr)
|
||||
end = end_vaddr;
|
||||
+
|
||||
ret = mmap_read_lock_killable(mm);
|
||||
if (ret)
|
||||
goto out_free;
|
||||
+
|
||||
+ if (reset)
|
||||
+ {
|
||||
+ inc_tlb_flush_pending(mm);
|
||||
+ mmu_notifier_range_init(&range, MMU_NOTIFY_SOFT_DIRTY,
|
||||
+ 0, NULL, mm, start_vaddr, end);
|
||||
+ mmu_notifier_invalidate_range_start(&range);
|
||||
+ }
|
||||
ret = walk_page_range(mm, start_vaddr, end, &pagemap_ops, &pm);
|
||||
+ if (reset)
|
||||
+ {
|
||||
+ mmu_notifier_invalidate_range_end(&range);
|
||||
+ flush_tlb_mm(mm);
|
||||
+ dec_tlb_flush_pending(mm);
|
||||
+ }
|
||||
mmap_read_unlock(mm);
|
||||
- start_vaddr = end;
|
||||
|
||||
len = min(count, PM_ENTRY_BYTES * pm.pos);
|
||||
+ BUG_ON(ret && ret != PM_END_OF_BUFFER);
|
||||
if (copy_to_user(buf, pm.buffer, len)) {
|
||||
ret = -EFAULT;
|
||||
goto out_free;
|
||||
@@ -1726,6 +1812,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
copied += len;
|
||||
buf += len;
|
||||
count -= len;
|
||||
+
|
||||
+ start_vaddr = reset && pm.pos == pm.len ? ((unsigned long *)pm.buffer)[pm.pos - 1] + PAGE_SIZE : end;
|
||||
}
|
||||
*ppos += copied;
|
||||
if (!ret || ret == PM_END_OF_BUFFER)
|
||||
@@ -1739,6 +1827,18 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static ssize_t pagemap_read(struct file *file, char __user *buf,
|
||||
+ size_t count, loff_t *ppos)
|
||||
+{
|
||||
+ return do_pagemap_read(file, buf, count, ppos, false);
|
||||
+}
|
||||
+
|
||||
+static ssize_t pagemap_reset_read(struct file *file, char __user *buf,
|
||||
+ size_t count, loff_t *ppos)
|
||||
+{
|
||||
+ return do_pagemap_read(file, buf, count, ppos, true);
|
||||
+}
|
||||
+
|
||||
static int pagemap_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct mm_struct *mm;
|
||||
@@ -1765,6 +1865,14 @@ const struct file_operations proc_pagemap_operations = {
|
||||
.open = pagemap_open,
|
||||
.release = pagemap_release,
|
||||
};
|
||||
+
|
||||
+const struct file_operations proc_pagemap_reset_operations = {
|
||||
+ .llseek = mem_lseek, /* borrow this */
|
||||
+ .read = pagemap_reset_read,
|
||||
+ .open = pagemap_open,
|
||||
+ .release = pagemap_release,
|
||||
+};
|
||||
+
|
||||
#endif /* CONFIG_PROC_PAGE_MONITOR */
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
--
|
||||
2.30.2
|
||||
|
678
linux-tkg/linux-tkg-patches/5.11/0003-glitched-base.patch
Normal file
678
linux-tkg/linux-tkg-patches/5.11/0003-glitched-base.patch
Normal file
|
@ -0,0 +1,678 @@
|
|||
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: [PATCH 01/17] glitched
|
||||
|
||||
---
|
||||
scripts/mkcompile_h | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
|
||||
index baf3ab8d9d49..854e32e6aec7 100755
|
||||
--- a/scripts/mkcompile_h
|
||||
+++ b/scripts/mkcompile_h
|
||||
@@ -41,8 +41,8 @@ else
|
||||
fi
|
||||
|
||||
UTS_VERSION="#$VERSION"
|
||||
-CONFIG_FLAGS=""
|
||||
-if [ -n "$SMP" ] ; then CONFIG_FLAGS="SMP"; fi
|
||||
+CONFIG_FLAGS="TKG"
|
||||
+if [ -n "$SMP" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS SMP"; fi
|
||||
if [ -n "$PREEMPT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT"; fi
|
||||
if [ -n "$PREEMPT_RT" ] ; then CONFIG_FLAGS="$CONFIG_FLAGS PREEMPT_RT"; fi
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From c304f43d14e98d4bf1215fc10bc5012f554bdd8a Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 16:59:22 +0000
|
||||
Subject: [PATCH 02/17] dcache: cache_pressure = 50 decreases the rate at which
|
||||
VFS caches are reclaimed
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
fs/dcache.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/fs/dcache.c b/fs/dcache.c
|
||||
index 361ea7ab30ea..0c5cf69b241a 100644
|
||||
--- a/fs/dcache.c
|
||||
+++ b/fs/dcache.c
|
||||
@@ -71,7 +71,7 @@
|
||||
* If no ancestor relationship:
|
||||
* arbitrary, since it's serialized on rename_lock
|
||||
*/
|
||||
-int sysctl_vfs_cache_pressure __read_mostly = 100;
|
||||
+int sysctl_vfs_cache_pressure __read_mostly = 50;
|
||||
EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
|
||||
|
||||
__cacheline_aligned_in_smp DEFINE_SEQLOCK(rename_lock);
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 28f32f59d9d55ac7ec3a20b79bdd02d2a0a5f7e1 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 18:29:13 +0000
|
||||
Subject: [PATCH 03/17] sched/core: nr_migrate = 128 increases number of tasks
|
||||
to iterate in a single balance run.
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
kernel/sched/core.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||||
index f788cd61df21..2bfbb4213707 100644
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -59,7 +59,7 @@ const_debug unsigned int sysctl_sched_features =
|
||||
* Number of tasks to iterate in a single balance run.
|
||||
* Limited because this is done with IRQs disabled.
|
||||
*/
|
||||
-const_debug unsigned int sysctl_sched_nr_migrate = 32;
|
||||
+const_debug unsigned int sysctl_sched_nr_migrate = 128;
|
||||
|
||||
/*
|
||||
* period over which we measure -rt task CPU usage in us.
|
||||
@@ -71,9 +71,9 @@ __read_mostly int scheduler_running;
|
||||
|
||||
/*
|
||||
* part of the period that we allow rt tasks to run in us.
|
||||
- * default: 0.95s
|
||||
+ * XanMod default: 0.98s
|
||||
*/
|
||||
-int sysctl_sched_rt_runtime = 950000;
|
||||
+int sysctl_sched_rt_runtime = 980000;
|
||||
|
||||
/*
|
||||
* __task_rq_lock - lock the rq @p resides on.
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From acc49f33a10f61dc66c423888cbb883ba46710e4 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 17:41:29 +0000
|
||||
Subject: [PATCH 04/17] scripts: disable the localversion "+" tag of a git repo
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
scripts/setlocalversion | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
||||
index 20f2efd57b11..0552d8b9f582 100755
|
||||
--- a/scripts/setlocalversion
|
||||
+++ b/scripts/setlocalversion
|
||||
@@ -54,7 +54,7 @@ scm_version()
|
||||
# If only the short version is requested, don't bother
|
||||
# running further git commands
|
||||
if $short; then
|
||||
- echo "+"
|
||||
+ # echo "+"
|
||||
return
|
||||
fi
|
||||
# If we are past a tagged commit (like
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 61fcb33fb0de8bc0f060e0a1ada38ed149217f4d Mon Sep 17 00:00:00 2001
|
||||
From: Oleksandr Natalenko <oleksandr@redhat.com>
|
||||
Date: Wed, 11 Dec 2019 11:46:19 +0100
|
||||
Subject: [PATCH 05/17] init/Kconfig: enable -O3 for all arches
|
||||
|
||||
Building a kernel with -O3 may help in hunting bugs like [1] and thus
|
||||
using this switch should not be restricted to one specific arch only.
|
||||
|
||||
With that, lets expose it for everyone.
|
||||
|
||||
[1] https://lore.kernel.org/lkml/673b885183fb64f1cbb3ed2387524077@natalenko.name/
|
||||
|
||||
Signed-off-by: Oleksandr Natalenko <oleksandr@redhat.com>
|
||||
---
|
||||
init/Kconfig | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 0498af567f70..3ae8678e1145 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1278,7 +1278,6 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
|
||||
config CC_OPTIMIZE_FOR_PERFORMANCE_O3
|
||||
bool "Optimize more for performance (-O3)"
|
||||
- depends on ARC
|
||||
help
|
||||
Choosing this option will pass "-O3" to your compiler to optimize
|
||||
the kernel yet more for performance.
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 360c6833e07cc9fdef5746f6bc45bdbc7212288d Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Fri, 26 Oct 2018 11:22:33 +0100
|
||||
Subject: [PATCH 06/17] infiniband: Fix __read_overflow2 error with -O3
|
||||
inlining
|
||||
|
||||
---
|
||||
drivers/infiniband/core/addr.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
|
||||
index 3a98439bba83..6efc4f907f58 100644
|
||||
--- a/drivers/infiniband/core/addr.c
|
||||
+++ b/drivers/infiniband/core/addr.c
|
||||
@@ -820,6 +820,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
|
||||
union {
|
||||
struct sockaddr_in _sockaddr_in;
|
||||
struct sockaddr_in6 _sockaddr_in6;
|
||||
+ struct sockaddr_ib _sockaddr_ib;
|
||||
} sgid_addr, dgid_addr;
|
||||
int ret;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From f85ed068b4d0e6c31edce8574a95757a60e58b87 Mon Sep 17 00:00:00 2001
|
||||
From: Etienne Juvigny <Ti3noU@gmail.com>
|
||||
Date: Mon, 3 Sep 2018 17:36:25 +0200
|
||||
Subject: [PATCH 07/17] Zenify & stuff
|
||||
|
||||
---
|
||||
init/Kconfig | 32 ++++++++++++++++++++++++++++++++
|
||||
kernel/sched/fair.c | 25 +++++++++++++++++++++++++
|
||||
mm/page-writeback.c | 8 ++++++++
|
||||
3 files changed, 65 insertions(+)
|
||||
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 3ae8678e1145..da708eed0f1e 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -92,6 +92,38 @@ config THREAD_INFO_IN_TASK
|
||||
|
||||
menu "General setup"
|
||||
|
||||
+config ZENIFY
|
||||
+ bool "A selection of patches from Zen/Liquorix kernel and additional tweaks for a better gaming experience"
|
||||
+ default y
|
||||
+ help
|
||||
+ Tunes the kernel for responsiveness at the cost of throughput and power usage.
|
||||
+
|
||||
+ --- Virtual Memory Subsystem ---------------------------
|
||||
+
|
||||
+ Mem dirty before bg writeback..: 10 % -> 20 %
|
||||
+ Mem dirty before sync writeback: 20 % -> 50 %
|
||||
+
|
||||
+ --- Block Layer ----------------------------------------
|
||||
+
|
||||
+ Queue depth...............: 128 -> 512
|
||||
+ Default MQ scheduler......: mq-deadline -> bfq
|
||||
+
|
||||
+ --- CFS CPU Scheduler ----------------------------------
|
||||
+
|
||||
+ Scheduling latency.............: 6 -> 3 ms
|
||||
+ Minimal granularity............: 0.75 -> 0.3 ms
|
||||
+ Wakeup granularity.............: 1 -> 0.5 ms
|
||||
+ CPU migration cost.............: 0.5 -> 0.25 ms
|
||||
+ Bandwidth slice size...........: 5 -> 3 ms
|
||||
+ Ondemand fine upscaling limit..: 95 % -> 85 %
|
||||
+
|
||||
+ --- MuQSS CPU Scheduler --------------------------------
|
||||
+
|
||||
+ Scheduling interval............: 6 -> 3 ms
|
||||
+ ISO task max realtime use......: 70 % -> 25 %
|
||||
+ Ondemand coarse upscaling limit: 80 % -> 45 %
|
||||
+ Ondemand fine upscaling limit..: 95 % -> 45 %
|
||||
+
|
||||
config BROKEN
|
||||
bool
|
||||
|
||||
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
|
||||
index 6b3b59cc51d6..2a0072192c3d 100644
|
||||
--- a/kernel/sched/fair.c
|
||||
+++ b/kernel/sched/fair.c
|
||||
@@ -37,8 +37,13 @@
|
||||
*
|
||||
* (default: 6ms * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_latency = 3000000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_latency = 3000000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_latency = 6000000ULL;
|
||||
static unsigned int normalized_sysctl_sched_latency = 6000000ULL;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* The initial- and re-scaling of tunables is configurable
|
||||
@@ -58,13 +63,22 @@ enum sched_tunable_scaling sysctl_sched_tunable_scaling = SCHED_TUNABLESCALING_L
|
||||
*
|
||||
* (default: 0.75 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_min_granularity = 300000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_min_granularity = 300000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_min_granularity = 750000ULL;
|
||||
static unsigned int normalized_sysctl_sched_min_granularity = 750000ULL;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* This value is kept at sysctl_sched_latency/sysctl_sched_min_granularity
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static unsigned int sched_nr_latency = 10;
|
||||
+#else
|
||||
static unsigned int sched_nr_latency = 8;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* After fork, child runs first. If set to 0 (default) then
|
||||
@@ -81,10 +95,17 @@ unsigned int sysctl_sched_child_runs_first __read_mostly;
|
||||
*
|
||||
* (default: 1 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_wakeup_granularity = 500000UL;
|
||||
+static unsigned int normalized_sysctl_sched_wakeup_granularity = 500000UL;
|
||||
+
|
||||
+const_debug unsigned int sysctl_sched_migration_cost = 50000UL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_wakeup_granularity = 1000000UL;
|
||||
static unsigned int normalized_sysctl_sched_wakeup_granularity = 1000000UL;
|
||||
|
||||
const_debug unsigned int sysctl_sched_migration_cost = 500000UL;
|
||||
+#endif
|
||||
|
||||
int sched_thermal_decay_shift;
|
||||
static int __init setup_sched_thermal_decay_shift(char *str)
|
||||
@@ -128,8 +149,12 @@ int __weak arch_asym_cpu_priority(int cpu)
|
||||
*
|
||||
* (default: 5 msec, units: microseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_cfs_bandwidth_slice = 3000UL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_cfs_bandwidth_slice = 5000UL;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
static inline void update_load_add(struct load_weight *lw, unsigned long inc)
|
||||
{
|
||||
diff --git a/mm/page-writeback.c b/mm/page-writeback.c
|
||||
index 28b3e7a67565..01a1aef2b9b1 100644
|
||||
--- a/mm/page-writeback.c
|
||||
+++ b/mm/page-writeback.c
|
||||
@@ -71,7 +71,11 @@ static long ratelimit_pages = 32;
|
||||
/*
|
||||
* Start background writeback (via writeback threads) at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int dirty_background_ratio = 20;
|
||||
+#else
|
||||
int dirty_background_ratio = 10;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* dirty_background_bytes starts at 0 (disabled) so that it is a function of
|
||||
@@ -88,7 +92,11 @@ int vm_highmem_is_dirtyable;
|
||||
/*
|
||||
* The generator of dirty data starts writeback at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+int vm_dirty_ratio = 50;
|
||||
+#else
|
||||
int vm_dirty_ratio = 20;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From e92e67143385cf285851e12aa8b7f083dd38dd24 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <damentz@liquorix.net>
|
||||
Date: Sun, 16 Jan 2011 18:57:32 -0600
|
||||
Subject: [PATCH 08/17] ZEN: Allow TCP YeAH as default congestion control
|
||||
|
||||
4.4: In my tests YeAH dramatically slowed down transfers over a WLAN,
|
||||
reducing throughput from ~65Mbps (CUBIC) to ~7MBps (YeAH) over 10
|
||||
seconds (netperf TCP_STREAM) including long stalls.
|
||||
|
||||
Be careful when choosing this. ~heftig
|
||||
---
|
||||
net/ipv4/Kconfig | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/net/ipv4/Kconfig b/net/ipv4/Kconfig
|
||||
index e64e59b536d3..bfb55ef7ebbe 100644
|
||||
--- a/net/ipv4/Kconfig
|
||||
+++ b/net/ipv4/Kconfig
|
||||
@@ -691,6 +691,9 @@ choice
|
||||
config DEFAULT_VEGAS
|
||||
bool "Vegas" if TCP_CONG_VEGAS=y
|
||||
|
||||
+ config DEFAULT_YEAH
|
||||
+ bool "YeAH" if TCP_CONG_YEAH=y
|
||||
+
|
||||
config DEFAULT_VENO
|
||||
bool "Veno" if TCP_CONG_VENO=y
|
||||
|
||||
@@ -724,6 +727,7 @@ config DEFAULT_TCP_CONG
|
||||
default "htcp" if DEFAULT_HTCP
|
||||
default "hybla" if DEFAULT_HYBLA
|
||||
default "vegas" if DEFAULT_VEGAS
|
||||
+ default "yeah" if DEFAULT_YEAH
|
||||
default "westwood" if DEFAULT_WESTWOOD
|
||||
default "veno" if DEFAULT_VENO
|
||||
default "reno" if DEFAULT_RENO
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 76dbe7477bfde1b5e8bf29a71b5af7ab2be9b98e Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Wed, 28 Nov 2018 19:01:27 -0600
|
||||
Subject: [PATCH 09/17] zen: Use [defer+madvise] as default khugepaged defrag
|
||||
strategy
|
||||
|
||||
For some reason, the default strategy to respond to THP fault fallbacks
|
||||
is still just madvise, meaning stall if the program wants transparent
|
||||
hugepages, but don't trigger a background reclaim / compaction if THP
|
||||
begins to fail allocations. This creates a snowball affect where we
|
||||
still use the THP code paths, but we almost always fail once a system
|
||||
has been active and busy for a while.
|
||||
|
||||
The option "defer" was created for interactive systems where THP can
|
||||
still improve performance. If we have to fallback to a regular page due
|
||||
to an allocation failure or anything else, we will trigger a background
|
||||
reclaim and compaction so future THP attempts succeed and previous
|
||||
attempts eventually have their smaller pages combined without stalling
|
||||
running applications.
|
||||
|
||||
We still want madvise to stall applications that explicitely want THP,
|
||||
so defer+madvise _does_ make a ton of sense. Make it the default for
|
||||
interactive systems, especially if the kernel maintainer left
|
||||
transparent hugepages on "always".
|
||||
|
||||
Reasoning and details in the original patch: https://lwn.net/Articles/711248/
|
||||
---
|
||||
mm/huge_memory.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
|
||||
index 74300e337c3c..9277f22c10a7 100644
|
||||
--- a/mm/huge_memory.c
|
||||
+++ b/mm/huge_memory.c
|
||||
@@ -53,7 +53,11 @@ unsigned long transparent_hugepage_flags __read_mostly =
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE_MADVISE
|
||||
(1<<TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG)|
|
||||
#endif
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+ (1<<TRANSPARENT_HUGEPAGE_DEFRAG_KSWAPD_OR_MADV_FLAG)|
|
||||
+#else
|
||||
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_REQ_MADV_FLAG)|
|
||||
+#endif
|
||||
(1<<TRANSPARENT_HUGEPAGE_DEFRAG_KHUGEPAGED_FLAG)|
|
||||
(1<<TRANSPARENT_HUGEPAGE_USE_ZERO_PAGE_FLAG);
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 2b65a1329cb220b43c19c4d0de5833fae9e2b22d Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Wed, 24 Oct 2018 16:58:52 -0300
|
||||
Subject: [PATCH 10/17] net/sched: allow configuring cake qdisc as default
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
net/sched/Kconfig | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/net/sched/Kconfig b/net/sched/Kconfig
|
||||
index 84badf00647e..6a922bca9f39 100644
|
||||
--- a/net/sched/Kconfig
|
||||
+++ b/net/sched/Kconfig
|
||||
@@ -471,6 +471,9 @@ choice
|
||||
config DEFAULT_SFQ
|
||||
bool "Stochastic Fair Queue" if NET_SCH_SFQ
|
||||
|
||||
+ config DEFAULT_CAKE
|
||||
+ bool "Common Applications Kept Enhanced" if NET_SCH_CAKE
|
||||
+
|
||||
config DEFAULT_PFIFO_FAST
|
||||
bool "Priority FIFO Fast"
|
||||
endchoice
|
||||
@@ -481,6 +484,7 @@ config DEFAULT_NET_SCH
|
||||
default "fq" if DEFAULT_FQ
|
||||
default "fq_codel" if DEFAULT_FQ_CODEL
|
||||
default "sfq" if DEFAULT_SFQ
|
||||
+ default "cake" if DEFAULT_CAKE
|
||||
default "pfifo_fast"
|
||||
endif
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 816ee502759e954304693813bd03d94986b28dba Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Mon, 18 Feb 2019 17:40:57 +0100
|
||||
Subject: [PATCH 11/17] mm: Set watermark_scale_factor to 200 (from 10)
|
||||
|
||||
Multiple users have reported it's helping reducing/eliminating stuttering
|
||||
with DXVK.
|
||||
---
|
||||
mm/page_alloc.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index 898ff44f2c7b..e72074034793 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -330,7 +330,7 @@ int watermark_boost_factor __read_mostly;
|
||||
#else
|
||||
int watermark_boost_factor __read_mostly = 15000;
|
||||
#endif
|
||||
-int watermark_scale_factor = 10;
|
||||
+int watermark_scale_factor = 200;
|
||||
|
||||
static unsigned long nr_kernel_pages __initdata;
|
||||
static unsigned long nr_all_pages __initdata;
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 90240bcd90a568878738e66c0d45bed3e38e347b Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Fri, 19 Apr 2019 12:33:38 +0200
|
||||
Subject: [PATCH 12/17] Set vm.max_map_count to 262144 by default
|
||||
|
||||
The value is still pretty low, and AMD64-ABI and ELF extended numbering
|
||||
supports that, so we should be fine on modern x86 systems.
|
||||
|
||||
This fixes crashes in some applications using more than 65535 vmas (also
|
||||
affects some windows games running in wine, such as Star Citizen).
|
||||
---
|
||||
include/linux/mm.h | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index bc05c3588aa3..b0cefe94920d 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -190,8 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
|
||||
* not a hard limit any more. Although some userspace tools can be surprised by
|
||||
* that.
|
||||
*/
|
||||
-#define MAPCOUNT_ELF_CORE_MARGIN (5)
|
||||
-#define DEFAULT_MAX_MAP_COUNT (USHRT_MAX - MAPCOUNT_ELF_CORE_MARGIN)
|
||||
+#define DEFAULT_MAX_MAP_COUNT (262144)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 3a34034dba5efe91bcec491efe8c66e8087f509b Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Mon, 27 Jul 2020 00:19:18 +0200
|
||||
Subject: [PATCH 13/17] mm: bump DEFAULT_MAX_MAP_COUNT
|
||||
|
||||
Some games such as Detroit: Become Human tend to be very crash prone with
|
||||
lower values.
|
||||
---
|
||||
include/linux/mm.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/mm.h b/include/linux/mm.h
|
||||
index b0cefe94920d..890165099b07 100644
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -190,7 +190,7 @@ static inline void __mm_zero_struct_page(struct page *page)
|
||||
* not a hard limit any more. Although some userspace tools can be surprised by
|
||||
* that.
|
||||
*/
|
||||
-#define DEFAULT_MAX_MAP_COUNT (262144)
|
||||
+#define DEFAULT_MAX_MAP_COUNT (524288)
|
||||
|
||||
extern int sysctl_max_map_count;
|
||||
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 977812938da7c7226415778c340832141d9278b7 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 25 Nov 2019 15:13:06 -0300
|
||||
Subject: [PATCH 14/17] elevator: set default scheduler to bfq for blk-mq
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
---
|
||||
block/elevator.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/block/elevator.c b/block/elevator.c
|
||||
index 4eab3d70e880..79669aa39d79 100644
|
||||
--- a/block/elevator.c
|
||||
+++ b/block/elevator.c
|
||||
@@ -623,15 +623,15 @@ static inline bool elv_support_iosched(struct request_queue *q)
|
||||
}
|
||||
|
||||
/*
|
||||
- * For single queue devices, default to using mq-deadline. If we have multiple
|
||||
- * queues or mq-deadline is not available, default to "none".
|
||||
+ * For single queue devices, default to using bfq. If we have multiple
|
||||
+ * queues or bfq is not available, default to "none".
|
||||
*/
|
||||
static struct elevator_type *elevator_get_default(struct request_queue *q)
|
||||
{
|
||||
if (q->nr_hw_queues != 1)
|
||||
return NULL;
|
||||
|
||||
- return elevator_get(q, "mq-deadline", false);
|
||||
+ return elevator_get(q, "bfq", false);
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.28.0
|
||||
|
||||
From 3c229f434aca65c4ca61772bc03c3e0370817b92 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 3 Aug 2020 17:05:04 +0000
|
||||
Subject: [PATCH 16/17] mm: set 2 megabytes for address_space-level file
|
||||
read-ahead pages size
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/pagemap.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
|
||||
index cf2468da68e9..007dea784451 100644
|
||||
--- a/include/linux/pagemap.h
|
||||
+++ b/include/linux/pagemap.h
|
||||
@@ -655,7 +655,7 @@ int replace_page_cache_page(struct page *old, struct page *new, gfp_t gfp_mask);
|
||||
void delete_from_page_cache_batch(struct address_space *mapping,
|
||||
struct pagevec *pvec);
|
||||
|
||||
-#define VM_READAHEAD_PAGES (SZ_128K / PAGE_SIZE)
|
||||
+#define VM_READAHEAD_PAGES (SZ_2M / PAGE_SIZE)
|
||||
|
||||
void page_cache_sync_readahead(struct address_space *, struct file_ra_state *,
|
||||
struct file *, pgoff_t index, unsigned long req_count);
|
||||
--
|
||||
2.28.0
|
||||
|
||||
|
||||
From 716f41cf6631f3a85834dcb67b4ce99185b6387f Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Wed, 15 Jan 2020 20:43:56 -0600
|
||||
Subject: [PATCH 17/17] ZEN: intel-pstate: Implement "enable" parameter
|
||||
|
||||
If intel-pstate is compiled into the kernel, it will preempt the loading
|
||||
of acpi-cpufreq so you can take advantage of hardware p-states without
|
||||
any friction.
|
||||
|
||||
However, intel-pstate is not completely superior to cpufreq's ondemand
|
||||
for one reason. There's no concept of an up_threshold property.
|
||||
|
||||
In ondemand, up_threshold essentially reduces the maximum utilization to
|
||||
compare against, allowing you to hit max frequencies and turbo boost
|
||||
from a much lower core utilization.
|
||||
|
||||
With intel-pstate, you have the concept of minimum and maximum
|
||||
performance, but no tunable that lets you define, maximum frequency
|
||||
means 50% core utilization. For just this oversight, there's reasons
|
||||
you may want ondemand.
|
||||
|
||||
Lets support setting "enable" in kernel boot parameters. This lets
|
||||
kernel maintainers include "intel_pstate=disable" statically in the
|
||||
static boot parameters, but let users of the kernel override this
|
||||
selection.
|
||||
---
|
||||
Documentation/admin-guide/kernel-parameters.txt | 3 +++
|
||||
drivers/cpufreq/intel_pstate.c | 2 ++
|
||||
2 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
|
||||
index fb95fad81c79..3e92fee81e33 100644
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -1857,6 +1857,9 @@
|
||||
disable
|
||||
Do not enable intel_pstate as the default
|
||||
scaling driver for the supported processors
|
||||
+ enable
|
||||
+ Enable intel_pstate in-case "disable" was passed
|
||||
+ previously in the kernel boot parameters
|
||||
passive
|
||||
Use intel_pstate as a scaling driver, but configure it
|
||||
to work with generic cpufreq governors (instead of
|
||||
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c
|
||||
index 36a469150ff9..aee891c9b78a 100644
|
||||
--- a/drivers/cpufreq/intel_pstate.c
|
||||
+++ b/drivers/cpufreq/intel_pstate.c
|
||||
@@ -2845,6 +2845,8 @@ static int __init intel_pstate_setup(char *str)
|
||||
pr_info("HWP disabled\n");
|
||||
no_hwp = 1;
|
||||
}
|
||||
+ if (!strcmp(str, "enable"))
|
||||
+ no_load = 0;
|
||||
if (!strcmp(str, "force"))
|
||||
force_load = 1;
|
||||
if (!strcmp(str, "hwp_only"))
|
||||
--
|
||||
2.28.0
|
||||
|
72
linux-tkg/linux-tkg-patches/5.11/0003-glitched-cfs.patch
Normal file
72
linux-tkg/linux-tkg-patches/5.11/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
|
||||
|
13457
linux-tkg/linux-tkg-patches/5.11/0004-5.11-ck1.patch
Normal file
13457
linux-tkg/linux-tkg-patches/5.11/0004-5.11-ck1.patch
Normal file
File diff suppressed because it is too large
Load diff
90
linux-tkg/linux-tkg-patches/5.11/0004-glitched-muqss.patch
Normal file
90
linux-tkg/linux-tkg-patches/5.11/0004-glitched-muqss.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 - 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.
|
||||
diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
|
||||
index dd554bd43..75030ad93 100755
|
||||
--- a/scripts/headers_install.sh
|
||||
+++ b/scripts/headers_install.sh
|
||||
@@ -89,6 +89,7 @@ include/uapi/linux/atmdev.h:CONFIG_COMPAT
|
||||
include/uapi/linux/eventpoll.h:CONFIG_PM_SLEEP
|
||||
include/uapi/linux/hw_breakpoint.h:CONFIG_HAVE_MIXED_BREAKPOINTS_REGS
|
||||
include/uapi/linux/pktcdvd.h:CONFIG_CDROM_PKTCDVD_WCACHE
|
||||
+include/uapi/linux/sched.h:CONFIG_SCHED_MUQSS
|
||||
"
|
||||
|
||||
for c in $configs
|
|
@ -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)
|
90
linux-tkg/linux-tkg-patches/5.11/0005-glitched-pds.patch
Normal file
90
linux-tkg/linux-tkg-patches/5.11/0005-glitched-pds.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 - 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
|
||||
@@ -169,7 +169,7 @@
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
|
@ -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)
|
165
linux-tkg/linux-tkg-patches/5.11/0005-undead-glitched-pds.patch
Normal file
165
linux-tkg/linux-tkg-patches/5.11/0005-undead-glitched-pds.patch
Normal file
|
@ -0,0 +1,165 @@
|
|||
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
|
||||
@@ -169,7 +169,7 @@
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
||||
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)
|
||||
{}
|
9110
linux-tkg/linux-tkg-patches/5.11/0005-v5.11_undead-pds099o.patch
Normal file
9110
linux-tkg/linux-tkg-patches/5.11/0005-v5.11_undead-pds099o.patch
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,193 @@
|
|||
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_ZHAOXIN, 0x9083, pci_quirk_mf_endpoint_acs },
|
||||
/* Zhaoxin Root/Downstream Ports */
|
||||
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
597
linux-tkg/linux-tkg-patches/5.11/0007-v5.11-fsync.patch
Normal file
597
linux-tkg/linux-tkg-patches/5.11/0007-v5.11-fsync.patch
Normal file
|
@ -0,0 +1,597 @@
|
|||
From 7b5df0248ce255ef5b7204d65a7b3783ebb76a3d Mon Sep 17 00:00:00 2001
|
||||
From: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
Date: Fri, 13 Dec 2019 11:08:02 -0300
|
||||
Subject: [PATCH 1/2] futex: Implement mechanism to wait on any of several
|
||||
futexes
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
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.
|
||||
|
||||
The use case lies in the Wine implementation of the Windows NT interface
|
||||
WaitMultipleObjects. This Windows API function allows a thread to sleep
|
||||
waiting on the first of a set of event sources (mutexes, timers, signal,
|
||||
console input, etc) to signal. Considering this is a primitive
|
||||
synchronization operation for Windows applications, being able to quickly
|
||||
signal events on the producer side, and quickly go to sleep on the
|
||||
consumer side is essential for good performance of those running over Wine.
|
||||
|
||||
Wine developers have an implementation that uses eventfd, but it suffers
|
||||
from FD exhaustion (there is applications that go to the order of
|
||||
multi-milion FDs), and higher CPU utilization than this new operation.
|
||||
|
||||
The futex list is passed as an array of `struct futex_wait_block`
|
||||
(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 modern games, on top of this implementation.
|
||||
|
||||
Changes were tested for the following ABIs: x86_64, i386 and x32.
|
||||
Support for x32 applications is not implemented since it would
|
||||
take a major rework adding a new entry point and splitting the current
|
||||
futex 64 entry point in two and we can't change the current x32 syscall
|
||||
number without breaking user space compatibility.
|
||||
|
||||
CC: Steven Rostedt <rostedt@goodmis.org>
|
||||
Cc: Richard Yao <ryao@gentoo.org>
|
||||
Cc: Thomas Gleixner <tglx@linutronix.de>
|
||||
Cc: Peter Zijlstra <peterz@infradead.org>
|
||||
Co-developed-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
Co-developed-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Signed-off-by: Steven Noonan <steven@valvesoftware.com>
|
||||
Co-developed-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Pierre-Loup A. Griffais <pgriffais@valvesoftware.com>
|
||||
Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com>
|
||||
[Added compatibility code]
|
||||
Co-developed-by: André Almeida <andrealmeid@collabora.com>
|
||||
Signed-off-by: André Almeida <andrealmeid@collabora.com>
|
||||
|
||||
Adjusted for v5.9: Removed `put_futex_key` calls.
|
||||
---
|
||||
include/uapi/linux/futex.h | 20 +++
|
||||
kernel/futex.c | 352 ++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 370 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index a89eb0accd5e2..580001e89c6ca 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 13
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -40,6 +41,8 @@
|
||||
FUTEX_PRIVATE_FLAG)
|
||||
#define FUTEX_CMP_REQUEUE_PI_PRIVATE (FUTEX_CMP_REQUEUE_PI | \
|
||||
FUTEX_PRIVATE_FLAG)
|
||||
+#define FUTEX_WAIT_MULTIPLE_PRIVATE (FUTEX_WAIT_MULTIPLE | \
|
||||
+ FUTEX_PRIVATE_FLAG)
|
||||
|
||||
/*
|
||||
* Support for robust futexes: the kernel cleans up held futexes at
|
||||
@@ -150,4 +153,21 @@ struct robust_list_head {
|
||||
(((op & 0xf) << 28) | ((cmp & 0xf) << 24) \
|
||||
| ((oparg & 0xfff) << 12) | (cmparg & 0xfff))
|
||||
|
||||
+/*
|
||||
+ * Maximum number of multiple futexes to wait for
|
||||
+ */
|
||||
+#define FUTEX_MULTIPLE_MAX_COUNT 128
|
||||
+
|
||||
+/**
|
||||
+ * struct futex_wait_block - Block of futexes to be waited for
|
||||
+ * @uaddr: User address of the futex
|
||||
+ * @val: Futex value expected by userspace
|
||||
+ * @bitset: Bitset for the optional bitmasked wakeup
|
||||
+ */
|
||||
+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 a5876694a60eb..6f4bea76df460 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -197,6 +197,8 @@ struct futex_pi_state {
|
||||
* @rt_waiter: rt_waiter storage for use with requeue_pi
|
||||
* @requeue_pi_key: the requeue_pi target futex key
|
||||
* @bitset: bitset for the optional bitmasked wakeup
|
||||
+ * @uaddr: userspace address of futex
|
||||
+ * @uval: expected futex's value
|
||||
*
|
||||
* We use this hashed waitqueue, instead of a normal wait_queue_entry_t, so
|
||||
* we can wake only the relevant ones (hashed queues may be shared).
|
||||
@@ -219,6 +221,8 @@ struct futex_q {
|
||||
struct rt_mutex_waiter *rt_waiter;
|
||||
union futex_key *requeue_pi_key;
|
||||
u32 bitset;
|
||||
+ u32 __user *uaddr;
|
||||
+ u32 uval;
|
||||
} __randomize_layout;
|
||||
|
||||
static const struct futex_q futex_q_init = {
|
||||
@@ -2304,6 +2308,29 @@ static int unqueue_me(struct futex_q *q)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * unqueue_multiple() - Remove several futexes from their futex_hash_bucket
|
||||
+ * @q: The list of futexes to unqueue
|
||||
+ * @count: Number of futexes in the list
|
||||
+ *
|
||||
+ * Helper to unqueue a list of futexes. This can't fail.
|
||||
+ *
|
||||
+ * Return:
|
||||
+ * - >=0 - Index of the last futex that was awoken;
|
||||
+ * - -1 - If no futex was awoken
|
||||
+ */
|
||||
+static int unqueue_multiple(struct futex_q *q, int count)
|
||||
+{
|
||||
+ int ret = -1;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (!unqueue_me(&q[i]))
|
||||
+ ret = i;
|
||||
+ }
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* PI futexes can not be requeued and must remove themself from the
|
||||
* hash bucket. The hash bucket lock (i.e. lock_ptr) is held on entry
|
||||
@@ -2662,6 +2689,205 @@ static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
return ret;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * futex_wait_multiple_setup() - Prepare to wait and enqueue multiple futexes
|
||||
+ * @qs: The corresponding futex list
|
||||
+ * @count: The size of the lists
|
||||
+ * @flags: Futex flags (FLAGS_SHARED, etc.)
|
||||
+ * @awaken: Index of the last awoken futex
|
||||
+ *
|
||||
+ * Prepare multiple futexes in a single step and enqueue them. This may fail if
|
||||
+ * the futex list is invalid or if any futex was already awoken. On success the
|
||||
+ * task is ready to interruptible sleep.
|
||||
+ *
|
||||
+ * Return:
|
||||
+ * - 1 - One of the futexes was awaken by another thread
|
||||
+ * - 0 - Success
|
||||
+ * - <0 - -EFAULT, -EWOULDBLOCK or -EINVAL
|
||||
+ */
|
||||
+static int futex_wait_multiple_setup(struct futex_q *qs, int count,
|
||||
+ unsigned int flags, int *awaken)
|
||||
+{
|
||||
+ struct futex_hash_bucket *hb;
|
||||
+ int ret, i;
|
||||
+ u32 uval;
|
||||
+
|
||||
+ /*
|
||||
+ * Enqueuing multiple futexes is tricky, because we need to
|
||||
+ * enqueue each futex in the list before dealing with the next
|
||||
+ * one to avoid deadlocking on the hash bucket. But, before
|
||||
+ * enqueuing, we need to make sure that current->state is
|
||||
+ * TASK_INTERRUPTIBLE, so we don't absorb any awake events, which
|
||||
+ * cannot be done before the get_futex_key of the next key,
|
||||
+ * because it calls get_user_pages, which can sleep. Thus, we
|
||||
+ * fetch the list of futexes keys in two steps, by first pinning
|
||||
+ * all the memory keys in the futex key, and only then we read
|
||||
+ * each key and queue the corresponding futex.
|
||||
+ */
|
||||
+retry:
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ qs[i].key = FUTEX_KEY_INIT;
|
||||
+ ret = get_futex_key(qs[i].uaddr, flags & FLAGS_SHARED,
|
||||
+ &qs[i].key, FUTEX_READ);
|
||||
+ if (unlikely(ret)) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ set_current_state(TASK_INTERRUPTIBLE);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ struct futex_q *q = &qs[i];
|
||||
+
|
||||
+ hb = queue_lock(q);
|
||||
+
|
||||
+ ret = get_futex_value_locked(&uval, q->uaddr);
|
||||
+ if (ret) {
|
||||
+ /*
|
||||
+ * We need to try to handle the fault, which
|
||||
+ * cannot be done without sleep, so we need to
|
||||
+ * undo all the work already done, to make sure
|
||||
+ * we don't miss any wake ups. Therefore, clean
|
||||
+ * up, handle the fault and retry from the
|
||||
+ * beginning.
|
||||
+ */
|
||||
+ queue_unlock(hb);
|
||||
+
|
||||
+ /*
|
||||
+ * Keys 0..(i-1) are implicitly put
|
||||
+ * on unqueue_multiple.
|
||||
+ */
|
||||
+ *awaken = unqueue_multiple(qs, i);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ /*
|
||||
+ * On a real fault, prioritize the error even if
|
||||
+ * some other futex was awoken. Userspace gave
|
||||
+ * us a bad address, -EFAULT them.
|
||||
+ */
|
||||
+ ret = get_user(uval, q->uaddr);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /*
|
||||
+ * Even if the page fault was handled, If
|
||||
+ * something was already awaken, we can safely
|
||||
+ * give up and succeed to give a hint for userspace to
|
||||
+ * acquire the right futex faster.
|
||||
+ */
|
||||
+ if (*awaken >= 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ goto retry;
|
||||
+ }
|
||||
+
|
||||
+ if (uval != q->uval) {
|
||||
+ queue_unlock(hb);
|
||||
+
|
||||
+ /*
|
||||
+ * If something was already awaken, we can
|
||||
+ * safely ignore the error and succeed.
|
||||
+ */
|
||||
+ *awaken = unqueue_multiple(qs, i);
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+ if (*awaken >= 0)
|
||||
+ return 1;
|
||||
+
|
||||
+ return -EWOULDBLOCK;
|
||||
+ }
|
||||
+
|
||||
+ /*
|
||||
+ * The bucket lock can't be held while dealing with the
|
||||
+ * next futex. Queue each futex at this moment so hb can
|
||||
+ * be unlocked.
|
||||
+ */
|
||||
+ queue_me(&qs[i], hb);
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+/**
|
||||
+ * futex_wait_multiple() - Prepare to wait on and enqueue several futexes
|
||||
+ * @qs: The list of futexes to wait on
|
||||
+ * @op: Operation code from futex's syscall
|
||||
+ * @count: The number of objects
|
||||
+ * @abs_time: Timeout before giving up and returning to userspace
|
||||
+ *
|
||||
+ * Entry point for the FUTEX_WAIT_MULTIPLE futex operation, this function
|
||||
+ * sleeps on a group of futexes and returns on the first futex that
|
||||
+ * triggered, or after the timeout has elapsed.
|
||||
+ *
|
||||
+ * Return:
|
||||
+ * - >=0 - Hint to the futex that was awoken
|
||||
+ * - <0 - On error
|
||||
+ */
|
||||
+static int futex_wait_multiple(struct futex_q *qs, int op,
|
||||
+ u32 count, ktime_t *abs_time)
|
||||
+{
|
||||
+ struct hrtimer_sleeper timeout, *to;
|
||||
+ int ret, flags = 0, hint = 0;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ if (!(op & FUTEX_PRIVATE_FLAG))
|
||||
+ flags |= FLAGS_SHARED;
|
||||
+
|
||||
+ if (op & FUTEX_CLOCK_REALTIME)
|
||||
+ flags |= FLAGS_CLOCKRT;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, flags, 0);
|
||||
+ while (1) {
|
||||
+ ret = futex_wait_multiple_setup(qs, count, flags, &hint);
|
||||
+ if (ret) {
|
||||
+ if (ret > 0) {
|
||||
+ /* A futex was awaken during setup */
|
||||
+ ret = hint;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (to)
|
||||
+ hrtimer_start_expires(&to->timer, HRTIMER_MODE_ABS);
|
||||
+
|
||||
+ /*
|
||||
+ * Avoid sleeping if another thread already tried to
|
||||
+ * wake us.
|
||||
+ */
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (plist_node_empty(&qs[i].list))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (i == count && (!to || to->task))
|
||||
+ freezable_schedule();
|
||||
+
|
||||
+ ret = unqueue_multiple(qs, count);
|
||||
+
|
||||
+ __set_current_state(TASK_RUNNING);
|
||||
+
|
||||
+ if (ret >= 0)
|
||||
+ break;
|
||||
+ if (to && !to->task) {
|
||||
+ ret = -ETIMEDOUT;
|
||||
+ break;
|
||||
+ } else if (signal_pending(current)) {
|
||||
+ ret = -ERESTARTSYS;
|
||||
+ break;
|
||||
+ }
|
||||
+ /*
|
||||
+ * The final case is a spurious wakeup, for
|
||||
+ * which just retry.
|
||||
+ */
|
||||
+ }
|
||||
+
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static int futex_wait(u32 __user *uaddr, unsigned int flags, u32 val,
|
||||
ktime_t *abs_time, u32 bitset)
|
||||
{
|
||||
@@ -3774,6 +4000,43 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * futex_read_wait_block - Read an array of futex_wait_block from userspace
|
||||
+ * @uaddr: Userspace address of the block
|
||||
+ * @count: Number of blocks to be read
|
||||
+ *
|
||||
+ * This function creates and allocate an array of futex_q (we zero it to
|
||||
+ * initialize the fields) and then, for each futex_wait_block element from
|
||||
+ * userspace, fill a futex_q element with proper values.
|
||||
+ */
|
||||
+inline struct futex_q *futex_read_wait_block(u32 __user *uaddr, u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_q *qs;
|
||||
+ struct futex_wait_block fwb;
|
||||
+ struct futex_wait_block __user *entry =
|
||||
+ (struct futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_MULTIPLE_MAX_COUNT)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(*qs), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(qs);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ qs[i].uaddr = fwb.uaddr;
|
||||
+ qs[i].uval = fwb.val;
|
||||
+ qs[i].bitset = fwb.bitset;
|
||||
+ }
|
||||
+
|
||||
+ return qs;
|
||||
+}
|
||||
|
||||
SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
struct __kernel_timespec __user *, utime, u32 __user *, uaddr2,
|
||||
@@ -3786,7 +4049,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))
|
||||
@@ -3807,6 +4071,25 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
cmd == FUTEX_CMP_REQUEUE_PI || cmd == FUTEX_WAKE_OP)
|
||||
val2 = (u32) (unsigned long) utime;
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE) {
|
||||
+ int ret;
|
||||
+ struct futex_q *qs;
|
||||
+
|
||||
+#ifdef CONFIG_X86_X32
|
||||
+ if (unlikely(in_x32_syscall()))
|
||||
+ return -ENOSYS;
|
||||
+#endif
|
||||
+ qs = futex_read_wait_block(uaddr, val);
|
||||
+
|
||||
+ if (IS_ERR(qs))
|
||||
+ return PTR_ERR(qs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(qs, op, val, tp);
|
||||
+ kfree(qs);
|
||||
+
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);
|
||||
}
|
||||
|
||||
@@ -3969,6 +4252,57 @@ COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid,
|
||||
#endif /* CONFIG_COMPAT */
|
||||
|
||||
#ifdef CONFIG_COMPAT_32BIT_TIME
|
||||
+/**
|
||||
+ * struct compat_futex_wait_block - Block of futexes to be waited for
|
||||
+ * @uaddr: User address of the futex (compatible pointer)
|
||||
+ * @val: Futex value expected by userspace
|
||||
+ * @bitset: Bitset for the optional bitmasked wakeup
|
||||
+ */
|
||||
+struct compat_futex_wait_block {
|
||||
+ compat_uptr_t uaddr;
|
||||
+ __u32 val;
|
||||
+ __u32 bitset;
|
||||
+};
|
||||
+
|
||||
+/**
|
||||
+ * compat_futex_read_wait_block - Read an array of futex_wait_block from
|
||||
+ * userspace
|
||||
+ * @uaddr: Userspace address of the block
|
||||
+ * @count: Number of blocks to be read
|
||||
+ *
|
||||
+ * This function does the same as futex_read_wait_block(), except that it
|
||||
+ * converts the pointer to the futex from the compat version to the regular one.
|
||||
+ */
|
||||
+inline struct futex_q *compat_futex_read_wait_block(u32 __user *uaddr,
|
||||
+ u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_q *qs;
|
||||
+ struct compat_futex_wait_block fwb;
|
||||
+ struct compat_futex_wait_block __user *entry =
|
||||
+ (struct compat_futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_MULTIPLE_MAX_COUNT)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ qs = kcalloc(count, sizeof(*qs), GFP_KERNEL);
|
||||
+ if (!qs)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(qs);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ qs[i].uaddr = compat_ptr(fwb.uaddr);
|
||||
+ qs[i].uval = fwb.val;
|
||||
+ qs[i].bitset = fwb.bitset;
|
||||
+ }
|
||||
+
|
||||
+ return qs;
|
||||
+}
|
||||
+
|
||||
SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
struct old_timespec32 __user *, utime, u32 __user *, uaddr2,
|
||||
u32, val3)
|
||||
@@ -3980,7 +4314,8 @@ 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))
|
||||
@@ -3995,6 +4330,19 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
cmd == FUTEX_CMP_REQUEUE_PI || cmd == FUTEX_WAKE_OP)
|
||||
val2 = (int) (unsigned long) utime;
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE) {
|
||||
+ int ret;
|
||||
+ struct futex_q *qs = compat_futex_read_wait_block(uaddr, val);
|
||||
+
|
||||
+ if (IS_ERR(qs))
|
||||
+ return PTR_ERR(qs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(qs, op, val, tp);
|
||||
+ kfree(qs);
|
||||
+
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);
|
||||
}
|
||||
#endif /* CONFIG_COMPAT_32BIT_TIME */
|
||||
|
||||
From ccdddb50d330d2ee1a4d2cbfdd27bdd7fb10eec3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@collabora.com>
|
||||
Date: Fri, 7 Feb 2020 23:28:02 -0300
|
||||
Subject: [PATCH 2/2] futex: Add Proton compatibility code
|
||||
|
||||
---
|
||||
include/uapi/linux/futex.h | 2 +-
|
||||
kernel/futex.c | 5 +++--
|
||||
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index 580001e89c6ca..a3e760886b8e7 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -21,7 +21,7 @@
|
||||
#define FUTEX_WAKE_BITSET 10
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
-#define FUTEX_WAIT_MULTIPLE 13
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
diff --git a/kernel/futex.c b/kernel/futex.c
|
||||
index 6f4bea76df460..03d89fe7b8392 100644
|
||||
--- a/kernel/futex.c
|
||||
+++ b/kernel/futex.c
|
||||
@@ -4059,7 +4059,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;
|
||||
}
|
||||
@@ -4260,6 +4260,7 @@ COMPAT_SYSCALL_DEFINE3(get_robust_list, int, pid,
|
||||
*/
|
||||
struct compat_futex_wait_block {
|
||||
compat_uptr_t uaddr;
|
||||
+ __u32 pad;
|
||||
__u32 val;
|
||||
__u32 bitset;
|
||||
};
|
||||
@@ -4322,7 +4323,7 @@ SYSCALL_DEFINE6(futex_time32, 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;
|
||||
}
|
4423
linux-tkg/linux-tkg-patches/5.11/0007-v5.11-futex2_interface.patch
Normal file
4423
linux-tkg/linux-tkg-patches/5.11/0007-v5.11-futex2_interface.patch
Normal file
File diff suppressed because it is too large
Load diff
4374
linux-tkg/linux-tkg-patches/5.11/0007-v5.11-winesync.patch
Normal file
4374
linux-tkg/linux-tkg-patches/5.11/0007-v5.11-winesync.patch
Normal file
File diff suppressed because it is too large
Load diff
72892
linux-tkg/linux-tkg-patches/5.11/0008-5.11-bcachefs.patch
Normal file
72892
linux-tkg/linux-tkg-patches/5.11/0008-5.11-bcachefs.patch
Normal file
File diff suppressed because it is too large
Load diff
90
linux-tkg/linux-tkg-patches/5.11/0009-glitched-bmq.patch
Normal file
90
linux-tkg/linux-tkg-patches/5.11/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
|
||||
@@ -169,7 +169,7 @@
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 20;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
|
@ -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 (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)
|
9495
linux-tkg/linux-tkg-patches/5.11/0009-prjc_v5.11-r3.patch
Normal file
9495
linux-tkg/linux-tkg-patches/5.11/0009-prjc_v5.11-r3.patch
Normal file
File diff suppressed because it is too large
Load diff
43
linux-tkg/linux-tkg-patches/5.11/0011-ZFS-fix.patch
Normal file
43
linux-tkg/linux-tkg-patches/5.11/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
|
||||
|
||||
|
3377
linux-tkg/linux-tkg-patches/5.11/0012-linux-hardened.patch
Normal file
3377
linux-tkg/linux-tkg-patches/5.11/0012-linux-hardened.patch
Normal file
File diff suppressed because it is too large
Load diff
133
linux-tkg/linux-tkg-patches/5.11/0012-misc-additions.patch
Normal file
133
linux-tkg/linux-tkg-patches/5.11/0012-misc-additions.patch
Normal file
|
@ -0,0 +1,133 @@
|
|||
From e5e77ad2223f662e1615266d8ef39a8db7e65a70 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Felix=20H=C3=A4dicke?= <felixhaedicke@web.de>
|
||||
Date: Thu, 19 Nov 2020 09:22:32 +0100
|
||||
Subject: HID: quirks: Add Apple Magic Trackpad 2 to hid_have_special_driver
|
||||
list
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The Apple Magic Trackpad 2 is handled by the magicmouse driver. And
|
||||
there were severe stability issues when both drivers (hid-generic and
|
||||
hid-magicmouse) were loaded for this device.
|
||||
|
||||
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=210241
|
||||
|
||||
Signed-off-by: Felix Hädicke <felixhaedicke@web.de>
|
||||
---
|
||||
drivers/hid/hid-quirks.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
|
||||
index bf7ecab5d9e5..142e9dae2837 100644
|
||||
--- a/drivers/hid/hid-quirks.c
|
||||
+++ b/drivers/hid/hid-quirks.c
|
||||
@@ -478,6 +478,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||
#if IS_ENABLED(CONFIG_HID_MAGICMOUSE)
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
|
||||
+ { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) },
|
||||
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) },
|
||||
#endif
|
||||
#if IS_ENABLED(CONFIG_HID_MAYFLASH)
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3) },
|
||||
--
|
||||
cgit v1.2.3-1-gf6bb5
|
||||
|
||||
From e437ac931e89629f952ce9f3f9dfe45ac505cd0d Mon Sep 17 00:00:00 2001
|
||||
From: Joshua Ashton <joshua@froggi.es>
|
||||
Date: Tue, 5 Jan 2021 19:46:01 +0000
|
||||
Subject: [PATCH] drm/amdgpu: don't limit gtt size on apus
|
||||
|
||||
Since commit 24562523688b ("Revert "drm/amd/amdgpu: set gtt size
|
||||
according to system memory size only""), the GTT size was limited by
|
||||
3GiB or VRAM size.
|
||||
|
||||
This is problematic on APU systems with a small carveout
|
||||
(notably, those that ship with dGPUs where this is unconfigurable),
|
||||
where the carveout size can be as low as 128MiB.
|
||||
|
||||
This makes it so the GTT size heuristic always uses 3/4ths of
|
||||
the system memory size on APUs (limiting the size by 3GiB/VRAM size
|
||||
only on devices with dedicated video memory).
|
||||
|
||||
Fixes: 24562523688b ("Revert drm/amd/amdgpu: set gtt size according to
|
||||
system memory size only")
|
||||
|
||||
Signed-off-by: Joshua Ashton <joshua@froggi.es>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 5 +++--
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 12 +++++++++---
|
||||
2 files changed, 12 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
index 72efd579ec5e..a5a41e9272d6 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
@@ -192,8 +192,9 @@ module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
|
||||
|
||||
/**
|
||||
* DOC: gttsize (int)
|
||||
- * Restrict the size of GTT domain in MiB for testing. The default is -1 (It's VRAM size if 3GB < VRAM < 3/4 RAM,
|
||||
- * otherwise 3/4 RAM size).
|
||||
+ * Restrict the size of GTT domain in MiB for testing. The default is -1 (On APUs this is 3/4th
|
||||
+ * of the system memory; on dGPUs this is 3GiB or VRAM sized, whichever is bigger,
|
||||
+ * with an upper bound of 3/4th of system memory.
|
||||
*/
|
||||
MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
|
||||
module_param_named(gttsize, amdgpu_gtt_size, int, 0600);
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
|
||||
index 4d8f19ab1014..294f26f4f310 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
|
||||
@@ -1865,9 +1865,15 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
|
||||
struct sysinfo si;
|
||||
|
||||
si_meminfo(&si);
|
||||
- gtt_size = min(max((AMDGPU_DEFAULT_GTT_SIZE_MB << 20),
|
||||
- adev->gmc.mc_vram_size),
|
||||
- ((uint64_t)si.totalram * si.mem_unit * 3/4));
|
||||
+ gtt_size = (uint64_t)si.totalram * si.mem_unit * 3/4;
|
||||
+ /* If we have dedicated memory, limit our GTT size to
|
||||
+ * 3GiB or VRAM size, whichever is bigger
|
||||
+ */
|
||||
+ if (!(adev->flags & AMD_IS_APU)) {
|
||||
+ gtt_size = min(max(AMDGPU_DEFAULT_GTT_SIZE_MB << 20,
|
||||
+ adev->gmc.mc_vram_size),
|
||||
+ gtt_size);
|
||||
+ }
|
||||
}
|
||||
else
|
||||
gtt_size = (uint64_t)amdgpu_gtt_size << 20;
|
||||
--
|
||||
2.30.0
|
||||
|
||||
From f7f49141a5dbe9c99d78196b58c44307fb2e6be3 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Wed, 3 Feb 2021 11:20:12 +0200
|
||||
Subject: Revert "cpufreq: Avoid configuring old governors as default with intel_pstate"
|
||||
|
||||
This is an undesirable behavior for us since our aggressive ondemand performs
|
||||
better than schedutil for gaming when using intel_pstate in passive mode.
|
||||
Also it interferes with the option to select the desired default governor we have.
|
||||
|
||||
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
|
||||
index 2c7171e0b0010..85de313ddec29 100644
|
||||
--- a/drivers/cpufreq/Kconfig
|
||||
+++ b/drivers/cpufreq/Kconfig
|
||||
@@ -71,7 +71,6 @@ config CPU_FREQ_DEFAULT_GOV_USERSPACE
|
||||
|
||||
config CPU_FREQ_DEFAULT_GOV_ONDEMAND
|
||||
bool "ondemand"
|
||||
- depends on !(X86_INTEL_PSTATE && SMP)
|
||||
select CPU_FREQ_GOV_ONDEMAND
|
||||
select CPU_FREQ_GOV_PERFORMANCE
|
||||
help
|
||||
@@ -83,7 +84,6 @@ config CPU_FREQ_DEFAULT_GOV_ONDEMAND
|
||||
|
||||
config CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
|
||||
bool "conservative"
|
||||
- depends on !(X86_INTEL_PSTATE && SMP)
|
||||
select CPU_FREQ_GOV_CONSERVATIVE
|
||||
select CPU_FREQ_GOV_PERFORMANCE
|
||||
help
|
|
@ -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;
|
||||
|
||||
#if defined(CONFIG_SYSCTL)
|
||||
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
/* Constants used for minimum and maximum */
|
||||
#ifdef CONFIG_LOCKUP_DETECTOR
|
||||
static int sixty = 60;
|
||||
@@ -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);
|
|
@ -0,0 +1,244 @@
|
|||
From 5ae86c8436b83762bc6cf46bea1da6ace2d3f50e Mon Sep 17 00:00:00 2001
|
||||
From: Paul Gofman <pgofman@codeweavers.com>
|
||||
Date: Wed, 6 May 2020 14:37:44 +0300
|
||||
Subject: [PATCH 1/2] mm: Support soft dirty flag reset for VA range.
|
||||
|
||||
---
|
||||
fs/proc/task_mmu.c | 129 ++++++++++++++++++++++++++++++++++++---------
|
||||
1 file changed, 103 insertions(+), 26 deletions(-)
|
||||
|
||||
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
|
||||
index 3cec6fbef725..7c7865028f10 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -1032,6 +1032,8 @@ enum clear_refs_types {
|
||||
|
||||
struct clear_refs_private {
|
||||
enum clear_refs_types type;
|
||||
+ unsigned long start, end;
|
||||
+ bool clear_range;
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MEM_SOFT_DIRTY
|
||||
@@ -1125,6 +1127,8 @@ static int clear_refs_pte_range(pmd_t *pmd, unsigned long addr,
|
||||
spinlock_t *ptl;
|
||||
struct page *page;
|
||||
|
||||
+ BUG_ON(addr < cp->start || end > cp->end);
|
||||
+
|
||||
ptl = pmd_trans_huge_lock(pmd, vma);
|
||||
if (ptl) {
|
||||
if (cp->type == CLEAR_REFS_SOFT_DIRTY) {
|
||||
@@ -1181,9 +1185,11 @@ static int clear_refs_test_walk(unsigned long start, unsigned long end,
|
||||
struct clear_refs_private *cp = walk->private;
|
||||
struct vm_area_struct *vma = walk->vma;
|
||||
|
||||
- if (vma->vm_flags & VM_PFNMAP)
|
||||
+ if (!cp->clear_range && (vma->vm_flags & VM_PFNMAP))
|
||||
return 1;
|
||||
|
||||
+ BUG_ON(start < cp->start || end > cp->end);
|
||||
+
|
||||
/*
|
||||
* Writing 1 to /proc/pid/clear_refs affects all pages.
|
||||
* Writing 2 to /proc/pid/clear_refs only affects anonymous pages.
|
||||
@@ -1206,10 +1212,12 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct task_struct *task;
|
||||
- char buffer[PROC_NUMBUF];
|
||||
+ char buffer[18];
|
||||
struct mm_struct *mm;
|
||||
struct vm_area_struct *vma;
|
||||
enum clear_refs_types type;
|
||||
+ unsigned long start, end;
|
||||
+ bool clear_range;
|
||||
int itype;
|
||||
int rv;
|
||||
|
||||
@@ -1218,12 +1226,34 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
|
||||
count = sizeof(buffer) - 1;
|
||||
if (copy_from_user(buffer, buf, count))
|
||||
return -EFAULT;
|
||||
- rv = kstrtoint(strstrip(buffer), 10, &itype);
|
||||
- if (rv < 0)
|
||||
- return rv;
|
||||
- type = (enum clear_refs_types)itype;
|
||||
- if (type < CLEAR_REFS_ALL || type >= CLEAR_REFS_LAST)
|
||||
- return -EINVAL;
|
||||
+
|
||||
+ if (buffer[0] == '6')
|
||||
+ {
|
||||
+ static int once;
|
||||
+
|
||||
+ if (!once++)
|
||||
+ printk(KERN_DEBUG "task_mmu: Using POC clear refs range implementation.\n");
|
||||
+
|
||||
+ if (count != 17)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ type = CLEAR_REFS_SOFT_DIRTY;
|
||||
+ start = *(unsigned long *)(buffer + 1);
|
||||
+ end = *(unsigned long *)(buffer + 1 + 8);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ rv = kstrtoint(strstrip(buffer), 10, &itype);
|
||||
+ if (rv < 0)
|
||||
+ return rv;
|
||||
+ type = (enum clear_refs_types)itype;
|
||||
+
|
||||
+ if (type < CLEAR_REFS_ALL || type >= CLEAR_REFS_LAST)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ start = 0;
|
||||
+ end = -1UL;
|
||||
+ }
|
||||
|
||||
task = get_proc_task(file_inode(file));
|
||||
if (!task)
|
||||
@@ -1235,41 +1265,87 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf,
|
||||
.type = type,
|
||||
};
|
||||
|
||||
- if (mmap_write_lock_killable(mm)) {
|
||||
- count = -EINTR;
|
||||
- goto out_mm;
|
||||
+ if (start || end != -1UL)
|
||||
+ {
|
||||
+ start = min(start, mm->highest_vm_end) & PAGE_MASK;
|
||||
+ end = min(end, mm->highest_vm_end) & PAGE_MASK;
|
||||
+
|
||||
+ if (start >= end)
|
||||
+ {
|
||||
+ count = -EINVAL;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ clear_range = true;
|
||||
}
|
||||
+ else
|
||||
+ {
|
||||
+ clear_range = false;
|
||||
+ }
|
||||
+
|
||||
+ cp.start = start;
|
||||
+ cp.end = end;
|
||||
+ cp.clear_range = clear_range;
|
||||
+
|
||||
if (type == CLEAR_REFS_MM_HIWATER_RSS) {
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Writing 5 to /proc/pid/clear_refs resets the peak
|
||||
* resident set size to this mm's current rss value.
|
||||
*/
|
||||
reset_mm_hiwater_rss(mm);
|
||||
- goto out_unlock;
|
||||
+ mmap_write_unlock(mm);
|
||||
+ goto out_mm;
|
||||
}
|
||||
|
||||
if (type == CLEAR_REFS_SOFT_DIRTY) {
|
||||
- for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
- if (!(vma->vm_flags & VM_SOFTDIRTY))
|
||||
- continue;
|
||||
- vma->vm_flags &= ~VM_SOFTDIRTY;
|
||||
- vma_set_page_prot(vma);
|
||||
+ if (mmap_read_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
}
|
||||
-
|
||||
+ if (!clear_range)
|
||||
+ for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
+ if (!(vma->vm_flags & VM_SOFTDIRTY))
|
||||
+ continue;
|
||||
+ mmap_read_unlock(mm);
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ for (vma = mm->mmap; vma; vma = vma->vm_next) {
|
||||
+ vma->vm_flags &= ~VM_SOFTDIRTY;
|
||||
+ vma_set_page_prot(vma);
|
||||
+ }
|
||||
+ mmap_write_downgrade(mm);
|
||||
+ break;
|
||||
+ }
|
||||
inc_tlb_flush_pending(mm);
|
||||
mmu_notifier_range_init(&range, MMU_NOTIFY_SOFT_DIRTY,
|
||||
- 0, NULL, mm, 0, -1UL);
|
||||
+ 0, NULL, mm, start, end);
|
||||
mmu_notifier_invalidate_range_start(&range);
|
||||
}
|
||||
- walk_page_range(mm, 0, mm->highest_vm_end, &clear_refs_walk_ops,
|
||||
+ else
|
||||
+ {
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ }
|
||||
+ walk_page_range(mm, start, end == -1UL ? mm->highest_vm_end : end, &clear_refs_walk_ops,
|
||||
&cp);
|
||||
if (type == CLEAR_REFS_SOFT_DIRTY) {
|
||||
mmu_notifier_invalidate_range_end(&range);
|
||||
flush_tlb_mm(mm);
|
||||
dec_tlb_flush_pending(mm);
|
||||
+ mmap_read_unlock(mm);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ mmap_write_unlock(mm);
|
||||
}
|
||||
-out_unlock:
|
||||
- mmap_write_unlock(mm);
|
||||
out_mm:
|
||||
mmput(mm);
|
||||
}
|
||||
@@ -1301,6 +1377,7 @@ struct pagemapread {
|
||||
#define PM_PFRAME_MASK GENMASK_ULL(PM_PFRAME_BITS - 1, 0)
|
||||
#define PM_SOFT_DIRTY BIT_ULL(55)
|
||||
#define PM_MMAP_EXCLUSIVE BIT_ULL(56)
|
||||
+#define PM_SOFT_DIRTY_PAGE BIT_ULL(57)
|
||||
#define PM_FILE BIT_ULL(61)
|
||||
#define PM_SWAP BIT_ULL(62)
|
||||
#define PM_PRESENT BIT_ULL(63)
|
||||
@@ -1373,11 +1450,11 @@ static pagemap_entry_t pte_to_pagemap_entry(struct pagemapread *pm,
|
||||
flags |= PM_PRESENT;
|
||||
page = vm_normal_page(vma, addr, pte);
|
||||
if (pte_soft_dirty(pte))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
} else if (is_swap_pte(pte)) {
|
||||
swp_entry_t entry;
|
||||
if (pte_swp_soft_dirty(pte))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
entry = pte_to_swp_entry(pte);
|
||||
if (pm->show_pfn)
|
||||
frame = swp_type(entry) |
|
||||
@@ -1424,7 +1501,7 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
|
||||
flags |= PM_PRESENT;
|
||||
if (pmd_soft_dirty(pmd))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
if (pm->show_pfn)
|
||||
frame = pmd_pfn(pmd) +
|
||||
((addr & ~PMD_MASK) >> PAGE_SHIFT);
|
||||
@@ -1442,7 +1519,7 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
}
|
||||
flags |= PM_SWAP;
|
||||
if (pmd_swp_soft_dirty(pmd))
|
||||
- flags |= PM_SOFT_DIRTY;
|
||||
+ flags |= PM_SOFT_DIRTY | PM_SOFT_DIRTY_PAGE;
|
||||
VM_BUG_ON(!is_pmd_migration_entry(pmd));
|
||||
page = migration_entry_to_page(entry);
|
||||
}
|
||||
--
|
||||
2.30.2
|
||||
|
360
linux-tkg/linux-tkg-patches/5.12/0002-clear-patches.patch
Normal file
360
linux-tkg/linux-tkg-patches/5.12/0002-clear-patches.patch
Normal file
|
@ -0,0 +1,360 @@
|
|||
From 0000000000000000000000000000000000000000 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 c9338f9..6974fbf 100644
|
||||
--- a/drivers/pci/pci.c
|
||||
+++ b/drivers/pci/pci.c
|
||||
@@ -62,7 +62,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)
|
||||
{
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 f449584..c994d24 100644
|
||||
--- a/drivers/idle/intel_idle.c
|
||||
+++ b/drivers/idle/intel_idle.c
|
||||
@@ -531,7 +531,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -539,7 +539,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -547,7 +547,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -555,7 +555,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -563,7 +563,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -571,7 +571,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -579,7 +579,7 @@ static struct cpuidle_state hsw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -599,7 +599,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -607,7 +607,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -615,7 +615,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -623,7 +623,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -631,7 +631,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -639,7 +639,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -647,7 +647,7 @@ static struct cpuidle_state bdw_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -668,7 +668,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 120,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
@@ -676,7 +676,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -684,7 +684,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -692,7 +692,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -700,7 +700,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -708,7 +708,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -716,7 +716,7 @@ static struct cpuidle_state skl_cstates[] __initdata = {
|
||||
.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, },
|
||||
{
|
||||
@@ -737,7 +737,7 @@ static struct cpuidle_state skx_cstates[] __initdata = {
|
||||
.desc = "MWAIT 0x01",
|
||||
.flags = MWAIT2flg(0x01) | CPUIDLE_FLAG_ALWAYS_ENABLE,
|
||||
.exit_latency = 10,
|
||||
- .target_residency = 20,
|
||||
+ .target_residency = 300,
|
||||
.enter = &intel_idle,
|
||||
.enter_s2idle = intel_idle_s2idle, },
|
||||
{
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 30c1142..4345075 100644
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -4201,8 +4201,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;
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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 f11b9bd..1bbfcc1 100644
|
||||
--- a/kernel/locking/rwsem.c
|
||||
+++ b/kernel/locking/rwsem.c
|
||||
@@ -717,6 +717,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);
|
||||
@@ -750,7 +751,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
|
||||
break;
|
||||
}
|
||||
|
||||
- cpu_relax();
|
||||
+ if (i++ > 1000)
|
||||
+ cpu_relax();
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
||||
From 0000000000000000000000000000000000000000 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] 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 c0cd1b9..af1e2fb 100644
|
||||
--- a/drivers/Makefile
|
||||
+++ b/drivers/Makefile
|
||||
@@ -59,15 +59,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/
|
||||
@@ -80,6 +73,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/
|
||||
--
|
||||
https://clearlinux.org
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue