Compare commits
1 Commits
master
...
74d4ce666a
Author | SHA1 | Date | |
---|---|---|---|
|
74d4ce666a |
77
.github/workflows/arch-builder.yml
vendored
77
.github/workflows/arch-builder.yml
vendored
@@ -1,77 +0,0 @@
|
||||
name: Build archlinux kernel
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
_cpusched:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
|
||||
env:
|
||||
_waydroid: "true"
|
||||
_processor_opt: "generic"
|
||||
_git_mirror: "github.com"
|
||||
PKGDEST: "/tmp/linux-tkg"
|
||||
_debugdisable: "true"
|
||||
_noccache: "true"
|
||||
_STRIP: "true"
|
||||
_kernel_on_diet: "true"
|
||||
_kernel_work_folder: "/tmp"
|
||||
_kernel_source_folder: "/tmp"
|
||||
# _modprobeddb: "true"
|
||||
_modprobeddb_db_path: ${{ github.workspace }}/modprobed.db
|
||||
|
||||
|
||||
|
||||
jobs:
|
||||
build-kernel:
|
||||
env:
|
||||
_cpusched: ${{ inputs._cpusched }}
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
container: archlinux:latest
|
||||
|
||||
steps:
|
||||
# We need to install git so the checkout is done with it
|
||||
- name: Update mirrorlist
|
||||
run: |
|
||||
pacman -Sy --noconfirm reflector
|
||||
reflector --latest 50 --protocol http,https --sort rate --save /etc/pacman.d/mirrorlist
|
||||
|
||||
- name: Install git
|
||||
run: pacman -Syu --noconfirm git
|
||||
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# 1. Install deps needed for building and sudo
|
||||
# 2. create a user "user" and give it passwordless sudo
|
||||
# and necessary permissions
|
||||
# because makepkg absolutely refuses to run as root
|
||||
- name: Prepare for makepkg
|
||||
run: |
|
||||
pacman -Syu --noconfirm base-devel sudo
|
||||
useradd user -G wheel && echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||
chown user -R ..
|
||||
chown user -R /tmp
|
||||
|
||||
# - name: "[debug] make dummy modprobed-db file for faster ci"
|
||||
# run: |
|
||||
# touch "${_modprobeddb_db_path}"
|
||||
# echo "${_modprobeddb_db_path}"
|
||||
|
||||
- name: Compile Kernel
|
||||
run: su user -c "yes '' | makepkg --noconfirm -s"
|
||||
# run: |
|
||||
# mkdir -p "$PKGDEST"
|
||||
# echo "test" > "$PKGDEST"/linux-$_cpusched.pkg.tar.zst
|
||||
|
||||
- name: rename kernel config
|
||||
run: mv kernelconfig.new kernelconfig.arch.${{ env._cpusched }}.txt
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: arch-kernel-packages-${{ env._cpusched }}
|
||||
path: |
|
||||
${{ env.PKGDEST }}/linux*.pkg.tar.zst
|
||||
kernelconfig*.txt
|
174
.github/workflows/build-current-kernel-arch.yml
vendored
Normal file
174
.github/workflows/build-current-kernel-arch.yml
vendored
Normal file
@@ -0,0 +1,174 @@
|
||||
name: Latest Kernel for archlinux
|
||||
on:
|
||||
schedule:
|
||||
- cron: '17 */12 * * *' # “At minute 17 past every 12th hour.”
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
env:
|
||||
_waydroid: "true"
|
||||
_processor_opt: "generic"
|
||||
PKGDEST: "/tmp/linux-tkg"
|
||||
_debugdisable: "true"
|
||||
_noccache: "true"
|
||||
_STRIP: "true"
|
||||
_kernel_on_diet: "true"
|
||||
_kernel_work_folder: "/tmp"
|
||||
_kernel_source_folder: "/tmp"
|
||||
# _modprobeddb: "true"
|
||||
# _modprobeddb_db_path: ${{ github.workspace }}/modprobed.db
|
||||
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
check-for-newer-kernel:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
new_kernel: ${{ steps.check_for_new_kernel.outputs.new_kernel }}
|
||||
latest_kernel: ${{ steps.check_for_new_kernel.outputs.latest_kernel }}
|
||||
|
||||
steps:
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v3.0.2
|
||||
|
||||
# Get latest release in repo, so we compare its version
|
||||
# with the latest kernel available so far
|
||||
- name: Get latest release
|
||||
id: latest_release
|
||||
uses: pozetroninc/github-action-get-latest-release@master
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
# it fails when there's no release
|
||||
continue-on-error: true
|
||||
|
||||
- name: Get latest kernel version
|
||||
id: check_for_new_kernel
|
||||
run: |
|
||||
./.github/get_latest_kver.sh
|
||||
latest_kernel="$(cat .github/latest-kernel)"
|
||||
echo "latest_kernel=$latest_kernel" >> $GITHUB_OUTPUT
|
||||
new_kernel=0
|
||||
[[ "$latest_kernel" != "$latest_release" ]] || new_kernel=$?
|
||||
echo "new_kernel=$new_kernel" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
latest_release: ${{ steps.latest_release.outputs.release }}
|
||||
|
||||
build-eevdf:
|
||||
env:
|
||||
_cpusched: "eevdf"
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
container: archlinux:latest
|
||||
|
||||
needs: [check-for-newer-kernel]
|
||||
if: |
|
||||
github.ref == 'refs/heads/master' &&
|
||||
needs.check-for-newer-kernel.outputs.new_kernel == '0'
|
||||
|
||||
steps:
|
||||
# We need to install git so the checkout is done with it
|
||||
- name: Install git
|
||||
run: pacman -Syu --noconfirm git
|
||||
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v3.0.2
|
||||
|
||||
# 1. Install deps needed for building and sudo
|
||||
# 2. create a user "user" and give it passwordless sudo
|
||||
# and necessary permissions
|
||||
# because makepkg absolutely refuses to run as root
|
||||
- name: Prepare for makepkg
|
||||
run: |
|
||||
pacman -Syu --noconfirm base-devel sudo
|
||||
useradd user -G wheel && echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||
chown user -R ..
|
||||
chown user -R /tmp
|
||||
echo -e 'CONFIG_FAT_FS=m\nCONFIG_MSDOS_FS=m\nCONFIG_VFAT_FS=m\nCONFIG_FAT_DEFAULT_CODEPAGE=437\nCONFIG_FAT_DEFAULT_IOCHARSET="ascii"\nCONFIG_FAT_DEFAULT_UTF8=y\nCONFIG_EXFAT_FS=m\nCONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"\n# CONFIG_NTFS_FS is not set\nCONFIG_NTFS3_FS=m\n# CONFIG_NTFS3_64BIT_CLUSTER is not set\nCONFIG_NTFS3_LZX_XPRESS=y\nCONFIG_NTFS3_FS_POSIX_ACL=y' > FS_modprobed-db.myfrag
|
||||
|
||||
# - name: "[debug] make dummy modprobed-db file for faster ci"
|
||||
# run: |
|
||||
# touch "${_modprobeddb_db_path}"
|
||||
# echo "${_modprobeddb_db_path}"
|
||||
|
||||
- name: Compile Kernel
|
||||
run: su user -c "yes '' | makepkg --noconfirm -s"
|
||||
# run: |
|
||||
# mkdir -p "$PKGDEST"
|
||||
# echo "test" > "$PKGDEST"/linux-$_cpusched.pkg.tar.zst
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: kernel-packages-${{ env._cpusched }}
|
||||
path: ${{ env.PKGDEST }}/linux*.pkg.tar.zst
|
||||
|
||||
build-bore-eevdf:
|
||||
env:
|
||||
_cpusched: "bore-eevdf"
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
container: archlinux:latest
|
||||
|
||||
needs: [check-for-newer-kernel]
|
||||
if: |
|
||||
github.ref == 'refs/heads/master' &&
|
||||
needs.check-for-newer-kernel.outputs.new_kernel == '0'
|
||||
|
||||
steps:
|
||||
# We need to install git so the checkout is done with it
|
||||
- name: Install git
|
||||
run: pacman -Syu --noconfirm git
|
||||
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v3.0.2
|
||||
|
||||
# 1. Install deps needed for building and sudo
|
||||
# 2. create a user "user" and give it passwordless sudo
|
||||
# and necessary permissions
|
||||
# because makepkg absolutely refuses to run as root
|
||||
- name: Prepare for makepkg
|
||||
run: |
|
||||
pacman -Syu --noconfirm base-devel sudo
|
||||
useradd user -G wheel && echo "user ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
||||
chown user -R ..
|
||||
chown user -R /tmp
|
||||
echo -e 'CONFIG_FAT_FS=m\nCONFIG_MSDOS_FS=m\nCONFIG_VFAT_FS=m\nCONFIG_FAT_DEFAULT_CODEPAGE=437\nCONFIG_FAT_DEFAULT_IOCHARSET="ascii"\nCONFIG_FAT_DEFAULT_UTF8=y\nCONFIG_EXFAT_FS=m\nCONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"\n# CONFIG_NTFS_FS is not set\nCONFIG_NTFS3_FS=m\n# CONFIG_NTFS3_64BIT_CLUSTER is not set\nCONFIG_NTFS3_LZX_XPRESS=y\nCONFIG_NTFS3_FS_POSIX_ACL=y' > FS_modprobed-db.myfrag
|
||||
|
||||
# - name: "[debug] make dummy modprobed-db file for faster ci"
|
||||
# run: |
|
||||
# touch "${_modprobeddb_db_path}"
|
||||
# echo "${_modprobeddb_db_path}"
|
||||
|
||||
- name: Compile Kernel
|
||||
run: su user -c "yes '' | makepkg --noconfirm -s"
|
||||
# run: |
|
||||
# mkdir -p "$PKGDEST"
|
||||
# echo "test" > "$PKGDEST"/linux-$_cpusched.pkg.tar.zst
|
||||
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: kernel-packages-${{ env._cpusched }}
|
||||
path: ${{ env.PKGDEST }}/linux*.pkg.tar.zst
|
||||
|
||||
make-release:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [check-for-newer-kernel, "build-eevdf", "build-bore-eevdf"]
|
||||
steps:
|
||||
- name: Download release artifacts
|
||||
uses: actions/download-artifact@v3
|
||||
with:
|
||||
path: ${{ env.PKGDEST }}
|
||||
|
||||
- name: Make new release
|
||||
uses: "marvinpinto/action-automatic-releases@latest"
|
||||
with:
|
||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
automatic_release_tag: ${{ needs.check-for-newer-kernel.outputs.latest_kernel }}
|
||||
prerelease: false
|
||||
title: "[experimental] ${{ needs.check-for-newer-kernel.outputs.latest_kernel }}"
|
||||
files: |
|
||||
${{ env.PKGDEST }}/kernel-packages-*/*
|
82
.github/workflows/build-release-kernels.yml
vendored
82
.github/workflows/build-release-kernels.yml
vendored
@@ -1,82 +0,0 @@
|
||||
name: Build & Release Latest Kernel
|
||||
on:
|
||||
schedule:
|
||||
- cron: '17 */12 * * *' # “At minute 17 past every 12th hour.”
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
|
||||
check-for-newer-kernel:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
new_kernel: ${{ steps.check_for_new_kernel.outputs.new_kernel }}
|
||||
latest_kernel: ${{ steps.check_for_new_kernel.outputs.latest_kernel }}
|
||||
|
||||
steps:
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v3.0.2
|
||||
|
||||
# Get latest release in repo, so we compare its version
|
||||
# with the latest kernel available so far
|
||||
- name: Get latest release
|
||||
id: latest_release
|
||||
uses: pozetroninc/github-action-get-latest-release@master
|
||||
with:
|
||||
repository: ${{ github.repository }}
|
||||
# it fails when there's no release
|
||||
continue-on-error: true
|
||||
|
||||
- name: Get latest kernel version
|
||||
id: check_for_new_kernel
|
||||
run: |
|
||||
./.github/get_latest_kver.sh
|
||||
latest_kernel="$(cat .github/latest-kernel)"
|
||||
echo "latest_kernel=$latest_kernel" >> $GITHUB_OUTPUT
|
||||
new_kernel=0
|
||||
[[ "$latest_kernel" != "$latest_release" ]] || new_kernel=$?
|
||||
echo "new_kernel=$new_kernel" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
latest_release: ${{ steps.latest_release.outputs.release }}
|
||||
|
||||
build:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
_cpusched: [bore, eevdf, pds, bmq]
|
||||
os: [arch, ubuntu, fedora]
|
||||
uses: ./.github/workflows/builder-dispatcher.yml
|
||||
with:
|
||||
_cpusched: ${{ matrix._cpusched }}
|
||||
os: ${{ matrix.os }}
|
||||
|
||||
needs: [check-for-newer-kernel]
|
||||
if: |
|
||||
github.ref == 'refs/heads/master' &&
|
||||
needs.check-for-newer-kernel.outputs.new_kernel == '0'
|
||||
|
||||
make-release:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs:
|
||||
- "check-for-newer-kernel"
|
||||
- "build"
|
||||
if: needs.build.result == 'success'
|
||||
|
||||
steps:
|
||||
- name: Download release artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
|
||||
- name: Make new release
|
||||
uses: "marvinpinto/action-automatic-releases@latest"
|
||||
with:
|
||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
automatic_release_tag: ${{ needs.check-for-newer-kernel.outputs.latest_kernel }}
|
||||
prerelease: false
|
||||
title: "[experimental] ${{ needs.check-for-newer-kernel.outputs.latest_kernel }}"
|
||||
files: |
|
||||
${{ github.workspace }}/arch-kernel-packages-*/**
|
||||
${{ github.workspace }}/ubuntu-kernel-packages-*/**
|
||||
${{ github.workspace }}/fedora-kernel-packages-*/**
|
29
.github/workflows/builder-dispatcher.yml
vendored
29
.github/workflows/builder-dispatcher.yml
vendored
@@ -1,29 +0,0 @@
|
||||
name: builder dispatcher
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
os:
|
||||
required: true
|
||||
type: string
|
||||
_cpusched:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
jobs:
|
||||
dispatch-to-fedora:
|
||||
uses: ./.github/workflows/fedora-builder.yml
|
||||
with:
|
||||
_cpusched: ${{ inputs._cpusched }}
|
||||
if: inputs.os == 'fedora'
|
||||
|
||||
dispatch-to-ubuntu:
|
||||
uses: ./.github/workflows/ubuntu-builder.yml
|
||||
with:
|
||||
_cpusched: ${{ inputs._cpusched }}
|
||||
if: inputs.os == 'ubuntu'
|
||||
|
||||
dispatch-to-arch:
|
||||
uses: ./.github/workflows/arch-builder.yml
|
||||
with:
|
||||
_cpusched: ${{ inputs._cpusched }}
|
||||
if: inputs.os == 'arch'
|
71
.github/workflows/fedora-builder.yml
vendored
71
.github/workflows/fedora-builder.yml
vendored
@@ -1,71 +0,0 @@
|
||||
name: Build Fedora kernel
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
_cpusched:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
|
||||
env:
|
||||
_waydroid: "true"
|
||||
_processor_opt: "generic"
|
||||
_distro: "Fedora"
|
||||
_git_mirror: "github.com"
|
||||
_logging_use_script: "no"
|
||||
_install_after_building: "no"
|
||||
_debugdisable: "true"
|
||||
_noccache: "true"
|
||||
_STRIP: "true"
|
||||
_kernel_on_diet: "true"
|
||||
_kernel_work_folder: "/tmp"
|
||||
_kernel_source_folder: "/tmp"
|
||||
# _modprobeddb: "true"
|
||||
_modprobeddb_db_path: ${{ github.workspace }}/modprobed.db
|
||||
|
||||
|
||||
|
||||
jobs:
|
||||
build-kernel:
|
||||
env:
|
||||
_cpusched: ${{ inputs._cpusched }}
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
container: fedora:latest
|
||||
|
||||
steps:
|
||||
- name: Install git (needed for checkout)
|
||||
run: dnf install git -y
|
||||
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: fix git folder ownership
|
||||
run: git config --global --add safe.directory `pwd`
|
||||
|
||||
- name: run git status
|
||||
run: git status
|
||||
|
||||
# - name: "[debug] make dummy modprobed-db file for faster ci"
|
||||
# run: |
|
||||
# touch "${_modprobeddb_db_path}"
|
||||
# echo "${_modprobeddb_db_path}"
|
||||
|
||||
- name: Install deps and compile kernel
|
||||
run: yes '' | ./install.sh install
|
||||
# run: |
|
||||
# mkdir -p "$PKGDEST"
|
||||
# echo "test" > "$PKGDEST"/linux-$_cpusched.pkg.tar.zst
|
||||
|
||||
- name: Cleanup useless RPM files
|
||||
run: rm -rf RPMS/*kernel-headers*.rpm
|
||||
|
||||
- name: rename kernel config
|
||||
run: mv kernelconfig.new kernelconfig.fedora.${{ env._cpusched }}.txt
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: fedora-kernel-packages-${{ env._cpusched }}
|
||||
path: |
|
||||
${{ github.workspace }}/RPMS/*.rpm
|
||||
kernelconfig*.txt
|
61
.github/workflows/ubuntu-builder.yml
vendored
61
.github/workflows/ubuntu-builder.yml
vendored
@@ -1,61 +0,0 @@
|
||||
name: Build Ubuntu kernel
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
_cpusched:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
|
||||
env:
|
||||
_waydroid: "true"
|
||||
_processor_opt: "generic"
|
||||
_distro: "Ubuntu"
|
||||
_git_mirror: "github.com"
|
||||
_logging_use_script: "no"
|
||||
_install_after_building: "no"
|
||||
_debugdisable: "true"
|
||||
_noccache: "true"
|
||||
_STRIP: "true"
|
||||
_kernel_on_diet: "true"
|
||||
_kernel_work_folder: "/tmp"
|
||||
_kernel_source_folder: "/tmp"
|
||||
# _modprobeddb: "true"
|
||||
_modprobeddb_db_path: ${{ github.workspace }}/modprobed.db
|
||||
|
||||
|
||||
|
||||
jobs:
|
||||
build-kernel:
|
||||
env:
|
||||
_cpusched: ${{ inputs._cpusched }}
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkount linux-tkg
|
||||
uses: actions/checkout@v4
|
||||
|
||||
# - name: "[debug] make dummy modprobed-db file for faster ci"
|
||||
# run: |
|
||||
# touch "${_modprobeddb_db_path}"
|
||||
# echo "${_modprobeddb_db_path}"
|
||||
|
||||
- name: Install deps and compile kernel
|
||||
run: yes '' | ./install.sh install
|
||||
# run: |
|
||||
# mkdir -p "$PKGDEST"
|
||||
# echo "test" > "$PKGDEST"/linux-$_cpusched.pkg.tar.zst
|
||||
|
||||
- name: Cleanup useless DEB files
|
||||
run: rm -rf DEBS/*dbg*.deb DEBS/*libc-dev*.deb
|
||||
|
||||
- name: rename kernel config
|
||||
run: mv kernelconfig.new kernelconfig.ubuntu.${{ env._cpusched }}.txt
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ubuntu-kernel-packages-${{ env._cpusched }}
|
||||
path: |
|
||||
${{ github.workspace }}/DEBS/*.deb
|
||||
${{ github.workspace }}/kernelconfig*.txt
|
339
LICENSE
339
LICENSE
@@ -1,339 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
11
README.md
11
README.md
@@ -75,7 +75,9 @@ The script will use a slightly modified Arch config from the `linux-tkg-config`
|
||||
#### DEB (Debian, Ubuntu and derivatives) and RPM (Fedora, SUSE and derivatives) based distributions
|
||||
|
||||
**Important notes:**
|
||||
An issue has been reported for Ubuntu where the stock kernel cannot boot properly any longer, the whereabouts are not entirely clear (only a single user reported that, see https://github.com/Frogging-Family/linux-tkg/issues/436).
|
||||
- Some issues have been reported by both Fedora (see https://github.com/Frogging-Family/linux-tkg/issues/383) and Ubuntu (see https://github.com/Frogging-Family/linux-tkg/issues/436) users where stock kernels cannot boot any longer, the whereabouts are still not entirely clear (it does not seem to affect every user)
|
||||
- Ubuntu: appears to be an initramfs generation issue
|
||||
- Fedora: needs disabling then re-enabling SELINUX so one can boot
|
||||
|
||||
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
|
||||
@@ -114,7 +116,6 @@ sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||
- 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`.
|
||||
- `_libunwind_replace` is a variable that can be changed in `customization.cfg` for replacing `libunwind` with `llvm-libunwind`.
|
||||
- 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.
|
||||
|
||||
@@ -126,4 +127,8 @@ cd linux-tkg
|
||||
# Optional: edit the "customization.cfg" file
|
||||
./install.sh install
|
||||
```
|
||||
**Note:** If you're running openrc, you'll want to set `_configfile="running-kernel"` to use your current kernel's defconfig instead of Arch's. Else the resulting kernel won't boot.
|
||||
**Notes:**
|
||||
- If you're running openrc, you'll want to set `_configfile="running-kernel"` to use your current kernel's defconfig instead of Arch's. Else the resulting kernel won't boot.
|
||||
- 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
|
||||
|
@@ -21,7 +21,7 @@ _EXT_CONFIG_PATH=~/.config/frogminer/linux-tkg.cfg
|
||||
_NUKR="true"
|
||||
|
||||
# Git mirror to use to get the kernel sources, possible values are "kernel.org", "googlesource.com", "github.com" and "torvalds"
|
||||
_git_mirror=""
|
||||
_git_mirror="kernel.org"
|
||||
|
||||
# Root folder where to checkout the kernel sources (linux-src-git subdir) and build
|
||||
# Note: - Leave empty to use PKGBUILD's dir
|
||||
@@ -74,7 +74,7 @@ _diffconfig="false"
|
||||
# Set to the file name where the generated config fragment should be written to. Only used if _diffconfig is active.
|
||||
_diffconfig_name=""
|
||||
|
||||
# [Generic and Gentoo specific] Dracut options when generating initramfs
|
||||
# [install.sh: Generic and Gentoo specific] Dracut options when generating initramfs
|
||||
_dracut_options="--lz4"
|
||||
|
||||
#### KERNEL OPTIONS ####
|
||||
@@ -102,23 +102,17 @@ _STRIP="true"
|
||||
|
||||
# LEAVE AN EMPTY VALUE TO BE PROMPTED ABOUT FOLLOWING OPTIONS AT BUILD TIME
|
||||
|
||||
# CPU scheduler - Options are "pds", "bmq", "cacule", "tt", "bore", "bore-eevdf", "echo", "cfs" (linux 6.5-) or "eevdf" (kernel's default, 6.6+)
|
||||
# CPU scheduler - Options are "pds", "bmq", "cacule", "tt", "bore", "bore-eevdf", "cfs" (linux 6.5-) or "eevdf" (kernel's default, 6.6+)
|
||||
# "upds" (TkG's Undead PDS) and "muqss" are also available on legacy kernel revisions
|
||||
_cpusched="eevdf"
|
||||
_cpusched="pds"
|
||||
|
||||
# Compiler to use - Options are "gcc" or "llvm".
|
||||
# For advanced users.
|
||||
_compiler="gcc"
|
||||
|
||||
# [Generic and Gentoo specific] Replace `libunwind` with `llvm-libunwind`.
|
||||
# ! This is currently experimental.
|
||||
# ! It can only work with the `llvm-libunwind` `USE` flag in `sys-devel/clang-common` for Gentoo.
|
||||
# Set to "true" to enable.
|
||||
_libunwind_replace=""
|
||||
|
||||
# Use the LLVM Integrated Assembler for a complete LLVM toolchain built kernel. Default is "1" when using LLVM.
|
||||
# Set to "0" to disable if desired, otherwise stick to the default behavior.
|
||||
_llvm_ias="1"
|
||||
# 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 !
|
||||
@@ -144,7 +138,7 @@ _preempt_rt_force=""
|
||||
# For BMQ: 0: No yield.
|
||||
# 1: Deboost and requeue task. (Default)
|
||||
# 2: Set rq skip task.
|
||||
_sched_yield_type=""
|
||||
_sched_yield_type="0"
|
||||
|
||||
# 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.
|
||||
@@ -172,12 +166,8 @@ _tickless="2"
|
||||
# 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="false"
|
||||
|
||||
# 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, leave it to "false"
|
||||
# Note:
|
||||
# - only for linux <= 6.6, upstreamed (aka included) in linux >= 6.7
|
||||
# - this fs can be buggy and isn't recommended on production machines
|
||||
# - linux <= 6.0 : this option conflicts with MGLRU
|
||||
# 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"
|
||||
# This can be buggy and isn't recommended on a production machine, also enabling this option will not allow you to enable MGLRU.
|
||||
_bcachefs="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/winesync4
|
||||
@@ -202,7 +192,7 @@ _compileroptlevel="2"
|
||||
# Intel CPUs : "mpsc"(P4 & older Netburst based Xeon) "atom" "core2" "nehalem" "westmere" "silvermont" "sandybridge" "ivybridge" "haswell" "broadwell" "skylake" "skylakex" "cannonlake" "icelake" "goldmont" "goldmontplus" "cascadelake" "cooperlake" "tigerlake" "sapphirerapids" "rocketlake" "alderlake" "raptorlake" "meteorlake" (raptorlake and meteorlake opt support require GCC13)
|
||||
# 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 - 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)
|
||||
@@ -222,12 +212,12 @@ _cacule_rdb_interval="19"
|
||||
_tt_high_hz="false"
|
||||
|
||||
# MuQSS and PDS only - SMT (Hyperthreading) aware nice priority and policy support (SMT_NICE) - Kernel default is "true" - You can disable this on non-SMT/HT CPUs for lower overhead
|
||||
_smt_nice=""
|
||||
_smt_nice="true"
|
||||
|
||||
# Trust the CPU manufacturer to initialize Linux's CRNG (RANDOM_TRUST_CPU) - Kernel default is "false"
|
||||
_random_trust_cpu="true"
|
||||
|
||||
# Timer frequency - "100" "250" "300" "500" "750" "1000" ("2000" is available for cacule cpusched only, "625" is available for echo cpusched only) - More options available in kernel config prompt when left empty depending on selected cpusched with the default option pointed with a ">" (2000 for cacule, 100 for muqss, 625 for echo and 1000 for other cpu schedulers)
|
||||
# Timer frequency - "100" "250" "300" "500" "750" "1000" ("2000" is available for cacule cpusched only) - More options available in kernel config prompt when left empty depending on selected cpusched with the default option pointed with a ">" (2000 for cacule, 100 for muqss and 1000 for other cpu schedulers)
|
||||
_timer_freq="1000"
|
||||
|
||||
# Default CPU governor - "performance", "ondemand", "schedutil" or leave empty for default (schedutil)
|
||||
@@ -270,13 +260,6 @@ _kernel_localversion=""
|
||||
# Default Arch kernel value is 320
|
||||
_NR_CPUS_value=""
|
||||
|
||||
# [non-Arch only] Install kernel after the building is done ?
|
||||
# Options are: "yes", "no", "prompt"
|
||||
_install_after_building="prompt"
|
||||
|
||||
# [non-Arch only] Use 'script' command for logging
|
||||
_logging_use_script="yes"
|
||||
|
||||
#### LEGACY OPTIONS ####
|
||||
|
||||
# Upstreamed version of Fsync from Linux 5.16 for previous kernel versions - https://github.com/andrealmeid/futex_waitv_patches
|
||||
@@ -302,12 +285,10 @@ _runqueue_sharing=""
|
||||
# MuQSS only - Make IRQ threading compulsory (FORCE_IRQ_THREADING) - Default is "false"
|
||||
_irq_threading="false"
|
||||
|
||||
# Set to "true" to add multi-generational LRU framework support for improved memory pressure handling
|
||||
# Note:
|
||||
# - For kernel >= 5.18, Upstream for kernel >= 6.1
|
||||
# - Conflicts with bcachefs for linux <= 6.0
|
||||
# - More information https://lore.kernel.org/lkml/20220706220022.968789-1-yuzhao@google.com/
|
||||
# - Older kernel versions might have a patch available in the community-patches repo
|
||||
# Set to "true" to add multi-generational LRU framework support on kernel 5.18+ - Improves memory pressure handling - https://lore.kernel.org/lkml/20220706220022.968789-1-yuzhao@google.com/
|
||||
# Older kernel versions might have a patch available in the community-patches repo
|
||||
# Upstream as of 6.1
|
||||
# ! This option will be disabled when bcachefs is enabled !
|
||||
_mglru="true"
|
||||
|
||||
#### USER PATCHES ####
|
||||
|
47
install.sh
47
install.sh
@@ -7,7 +7,7 @@ set -e
|
||||
declare -p -x > current_env
|
||||
|
||||
# If current run is not using 'script' for logging, do it
|
||||
if [[ "$_logging_use_script" =~ ^(Y|y|Yes|yes)$ && -z "$SCRIPT" ]]; then
|
||||
if [ -z "$SCRIPT" ]; then
|
||||
export SCRIPT=1
|
||||
/usr/bin/script -q -e -c "$0 $@" shell-output.log
|
||||
exit_status="$?"
|
||||
@@ -112,9 +112,12 @@ if [ "$1" = "install" ] || [ "$1" = "config" ]; then
|
||||
# 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)$ && "${_libunwind_replace}" = "true" ]]; then
|
||||
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
|
||||
@@ -205,13 +208,10 @@ if [ "$1" = "install" ]; then
|
||||
|
||||
cd "$_kernel_work_folder_abs"
|
||||
|
||||
msg2 "Add patched files to the diff.patch"
|
||||
git add .
|
||||
|
||||
if [[ "$_distro" =~ ^(Ubuntu|Debian)$ ]]; then
|
||||
|
||||
msg2 "Building kernel DEB packages"
|
||||
make ${llvm_opt} -j ${_thread_num} bindeb-pkg LOCALVERSION=-${_kernel_flavor}
|
||||
make ${llvm_opt} -j ${_thread_num} deb-pkg LOCALVERSION=-${_kernel_flavor}
|
||||
msg2 "Building successfully finished!"
|
||||
|
||||
# Create DEBS folder if it doesn't exist
|
||||
@@ -221,18 +221,8 @@ if [ "$1" = "install" ]; then
|
||||
# Move deb files to DEBS folder inside the linux-tkg folder
|
||||
mv "$_build_dir"/*.deb "$_where"/DEBS/
|
||||
|
||||
# Install only the winesync header in whatever kernel src there is, if there is
|
||||
if [ -e "${_where}/winesync.rules" ]; then
|
||||
sudo mkdir -p /usr/include/linux/
|
||||
# install winesync header
|
||||
sudo cp "$_kernel_work_folder_abs"/include/uapi/linux/winesync.h /usr/include/linux/winesync.h
|
||||
fi
|
||||
|
||||
if [[ "$_install_after_building" = "prompt" ]]; then
|
||||
read -p "Do you want to install the new Kernel ? Y/[n]: " _install
|
||||
fi
|
||||
|
||||
if [[ "$_install_after_building" =~ ^(Y|y|Yes|yes)$ || "$_install" =~ ^(Y|y|Yes|yes)$ ]]; then
|
||||
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
|
||||
@@ -260,8 +250,11 @@ if [ "$1" = "install" ]; then
|
||||
|
||||
_fedora_work_dir="$_kernel_work_folder_abs/rpmbuild"
|
||||
|
||||
msg2 "Add patched files to the diff.patch"
|
||||
(cd ${_kernel_work_folder_abs} && git add -- . ':!rpmbuild')
|
||||
|
||||
msg2 "Building kernel RPM packages"
|
||||
RPMOPTS="--define '_topdir ${_fedora_work_dir}'" make ${llvm_opt} -j ${_thread_num} binrpm-pkg EXTRAVERSION="${_extra_ver_str}"
|
||||
RPMOPTS="--define '_topdir ${_fedora_work_dir}'" make ${llvm_opt} -j ${_thread_num} rpm-pkg EXTRAVERSION="${_extra_ver_str}"
|
||||
msg2 "Building successfully finished!"
|
||||
|
||||
# Create RPMS folder if it doesn't exist
|
||||
@@ -271,18 +264,8 @@ if [ "$1" = "install" ]; then
|
||||
# Move rpm files to RPMS folder inside the linux-tkg folder
|
||||
mv ${_fedora_work_dir}/RPMS/x86_64/*tkg* "$_where"/RPMS/
|
||||
|
||||
# Install only the winesync header in whatever kernel src there is, if there is
|
||||
if [ -e "${_where}/winesync.rules" ]; then
|
||||
sudo mkdir -p /usr/include/linux/
|
||||
# install winesync header
|
||||
sudo cp "$_kernel_work_folder_abs"/include/uapi/linux/winesync.h /usr/include/linux/winesync.h
|
||||
fi
|
||||
|
||||
if [[ "$_install_after_building" = "prompt" ]]; then
|
||||
read -p "Do you want to install the new Kernel ? Y/[n]: " _install
|
||||
fi
|
||||
|
||||
if [[ "$_install_after_building" =~ ^(Y|y|Yes|yes)$ || "$_install" =~ ^(Y|y|Yes|yes)$ ]]; then
|
||||
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
|
||||
@@ -396,7 +379,7 @@ if [ "$1" = "install" ]; then
|
||||
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*
|
||||
sudo rm -rf "/usr/src/$_headers_folder_name/.git"
|
||||
cd "/usr/src/$_headers_folder_name"
|
||||
|
||||
msg2 "Installing modules"
|
||||
|
@@ -569,7 +569,6 @@ tea5767
|
||||
tee
|
||||
tg3
|
||||
thermal
|
||||
thinkpad_acpi
|
||||
thunderbolt
|
||||
tiny_power_button
|
||||
tls
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 6.6.11 Kernel Configuration
|
||||
# Linux/x86 6.6.1-arch1 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (GCC) 13.2.1 20230801"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
@@ -123,16 +123,14 @@ CONFIG_BPF_JIT=y
|
||||
CONFIG_BPF_JIT_ALWAYS_ON=y
|
||||
CONFIG_BPF_JIT_DEFAULT_ON=y
|
||||
CONFIG_BPF_UNPRIV_DEFAULT_OFF=y
|
||||
CONFIG_USERMODE_DRIVER=y
|
||||
CONFIG_BPF_PRELOAD=y
|
||||
CONFIG_BPF_PRELOAD_UMD=m
|
||||
# CONFIG_BPF_PRELOAD is not set
|
||||
CONFIG_BPF_LSM=y
|
||||
# end of BPF subsystem
|
||||
|
||||
CONFIG_PREEMPT_BUILD=y
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
CONFIG_PREEMPT_VOLUNTARY=y
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_PREEMPT_COUNT=y
|
||||
CONFIG_PREEMPTION=y
|
||||
CONFIG_PREEMPT_DYNAMIC=y
|
||||
@@ -880,9 +878,9 @@ CONFIG_SOFTIRQ_ON_OWN_STACK=y
|
||||
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
|
||||
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
|
||||
CONFIG_HAVE_EXIT_THREAD=y
|
||||
CONFIG_ARCH_MMAP_RND_BITS=32
|
||||
CONFIG_ARCH_MMAP_RND_BITS=28
|
||||
CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=16
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8
|
||||
CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
|
||||
@@ -3504,6 +3502,7 @@ CONFIG_STMMAC_ETH=m
|
||||
CONFIG_STMMAC_PLATFORM=m
|
||||
CONFIG_DWMAC_GENERIC=m
|
||||
CONFIG_DWMAC_INTEL=m
|
||||
CONFIG_DWMAC_LOONGSON=m
|
||||
CONFIG_STMMAC_PCI=m
|
||||
CONFIG_NET_VENDOR_SUN=y
|
||||
CONFIG_HAPPYMEAL=m
|
||||
@@ -11420,6 +11419,8 @@ CONFIG_DEBUG_LIST=y
|
||||
# CONFIG_DEBUG_MAPLE_TREE is not set
|
||||
# end of Debug kernel data structures
|
||||
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
|
||||
#
|
||||
# RCU Debugging
|
||||
#
|
||||
|
@@ -569,7 +569,6 @@ tea5767
|
||||
tee
|
||||
tg3
|
||||
thermal
|
||||
thinkpad_acpi
|
||||
thunderbolt
|
||||
tiny_power_button
|
||||
tls
|
||||
|
@@ -1,6 +1,6 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 6.7.2-arch1 Kernel Configuration
|
||||
# Linux/x86 6.7.0-rc1 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (GCC) 13.2.1 20230801"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
@@ -498,7 +498,7 @@ CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
|
||||
CONFIG_X86_INTEL_TSX_MODE_AUTO=y
|
||||
CONFIG_X86_SGX=y
|
||||
CONFIG_X86_USER_SHADOW_STACK=y
|
||||
CONFIG_INTEL_TDX_HOST=y
|
||||
# CONFIG_INTEL_TDX_HOST is not set
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
CONFIG_EFI_HANDOVER_PROTOCOL=y
|
||||
@@ -882,9 +882,9 @@ CONFIG_SOFTIRQ_ON_OWN_STACK=y
|
||||
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
|
||||
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
|
||||
CONFIG_HAVE_EXIT_THREAD=y
|
||||
CONFIG_ARCH_MMAP_RND_BITS=32
|
||||
CONFIG_ARCH_MMAP_RND_BITS=28
|
||||
CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=16
|
||||
CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8
|
||||
CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
|
||||
CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
|
||||
@@ -1187,9 +1187,9 @@ CONFIG_MAPPING_DIRTY_HELPERS=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_SECRETMEM=y
|
||||
CONFIG_ANON_VMA_NAME=y
|
||||
CONFIG_USERFAULTFD=y
|
||||
CONFIG_HAVE_ARCH_USERFAULTFD_WP=y
|
||||
CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y
|
||||
CONFIG_USERFAULTFD=y
|
||||
CONFIG_PTE_MARKER_UFFD_WP=y
|
||||
CONFIG_LRU_GEN=y
|
||||
CONFIG_LRU_GEN_ENABLED=y
|
||||
@@ -1309,7 +1309,7 @@ CONFIG_DEFAULT_CUBIC=y
|
||||
# CONFIG_DEFAULT_RENO is not set
|
||||
CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
CONFIG_TCP_SIGPOOL=y
|
||||
CONFIG_TCP_AO=y
|
||||
# CONFIG_TCP_AO is not set
|
||||
CONFIG_TCP_MD5SIG=y
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
@@ -2593,7 +2593,7 @@ CONFIG_ZRAM_DEF_COMP_ZSTD=y
|
||||
# CONFIG_ZRAM_DEF_COMP_842 is not set
|
||||
CONFIG_ZRAM_DEF_COMP="zstd"
|
||||
CONFIG_ZRAM_WRITEBACK=y
|
||||
CONFIG_ZRAM_MEMORY_TRACKING=y
|
||||
# CONFIG_ZRAM_MEMORY_TRACKING is not set
|
||||
CONFIG_ZRAM_MULTI_COMP=y
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_BLK_DEV_LOOP_MIN_COUNT=0
|
||||
@@ -2620,7 +2620,6 @@ CONFIG_BLK_DEV_RNBD_SERVER=m
|
||||
#
|
||||
# NVME Support
|
||||
#
|
||||
CONFIG_NVME_KEYRING=m
|
||||
CONFIG_NVME_AUTH=m
|
||||
CONFIG_NVME_CORE=m
|
||||
CONFIG_BLK_DEV_NVME=m
|
||||
@@ -2631,8 +2630,8 @@ CONFIG_NVME_FABRICS=m
|
||||
CONFIG_NVME_RDMA=m
|
||||
CONFIG_NVME_FC=m
|
||||
CONFIG_NVME_TCP=m
|
||||
CONFIG_NVME_TCP_TLS=y
|
||||
CONFIG_NVME_HOST_AUTH=y
|
||||
# CONFIG_NVME_TCP_TLS is not set
|
||||
# CONFIG_NVME_HOST_AUTH is not set
|
||||
CONFIG_NVME_TARGET=m
|
||||
CONFIG_NVME_TARGET_PASSTHRU=y
|
||||
CONFIG_NVME_TARGET_LOOP=m
|
||||
@@ -2640,7 +2639,7 @@ CONFIG_NVME_TARGET_RDMA=m
|
||||
CONFIG_NVME_TARGET_FC=m
|
||||
CONFIG_NVME_TARGET_FCLOOP=m
|
||||
CONFIG_NVME_TARGET_TCP=m
|
||||
CONFIG_NVME_TARGET_TCP_TLS=y
|
||||
# CONFIG_NVME_TARGET_TCP_TLS is not set
|
||||
CONFIG_NVME_TARGET_AUTH=y
|
||||
# end of NVME Support
|
||||
|
||||
@@ -3121,7 +3120,7 @@ CONFIG_TAP=m
|
||||
CONFIG_VETH=m
|
||||
CONFIG_VIRTIO_NET=m
|
||||
CONFIG_NLMON=m
|
||||
CONFIG_NETKIT=y
|
||||
# CONFIG_NETKIT is not set
|
||||
CONFIG_NET_VRF=m
|
||||
CONFIG_VSOCKMON=m
|
||||
CONFIG_MHI_NET=m
|
||||
@@ -3393,7 +3392,7 @@ CONFIG_MLX5_EN_TLS=y
|
||||
CONFIG_MLX5_SW_STEERING=y
|
||||
CONFIG_MLX5_SF=y
|
||||
CONFIG_MLX5_SF_MANAGER=y
|
||||
CONFIG_MLX5_DPLL=m
|
||||
# CONFIG_MLX5_DPLL is not set
|
||||
CONFIG_MLXSW_CORE=m
|
||||
CONFIG_MLXSW_CORE_HWMON=y
|
||||
CONFIG_MLXSW_CORE_THERMAL=y
|
||||
@@ -3515,6 +3514,7 @@ CONFIG_STMMAC_ETH=m
|
||||
CONFIG_STMMAC_PLATFORM=m
|
||||
CONFIG_DWMAC_GENERIC=m
|
||||
CONFIG_DWMAC_INTEL=m
|
||||
CONFIG_DWMAC_LOONGSON=m
|
||||
CONFIG_STMMAC_PCI=m
|
||||
CONFIG_NET_VENDOR_SUN=y
|
||||
CONFIG_HAPPYMEAL=m
|
||||
@@ -4778,7 +4778,6 @@ CONFIG_I2C_XILINX=m
|
||||
#
|
||||
CONFIG_I2C_DIOLAN_U2C=m
|
||||
CONFIG_I2C_DLN2=m
|
||||
CONFIG_I2C_LJCA=m
|
||||
CONFIG_I2C_CP2615=m
|
||||
CONFIG_I2C_PARPORT=m
|
||||
CONFIG_I2C_PCI1XXXX=m
|
||||
@@ -4831,7 +4830,6 @@ CONFIG_SPI_INTEL=m
|
||||
CONFIG_SPI_INTEL_PCI=m
|
||||
CONFIG_SPI_INTEL_PLATFORM=m
|
||||
CONFIG_SPI_LM70_LLP=m
|
||||
CONFIG_SPI_LJCA=m
|
||||
CONFIG_SPI_MICROCHIP_CORE=m
|
||||
CONFIG_SPI_MICROCHIP_CORE_QSPI=m
|
||||
# CONFIG_SPI_LANTIQ_SSC is not set
|
||||
@@ -5010,7 +5008,6 @@ CONFIG_GPIO_DLN2=m
|
||||
CONFIG_GPIO_ELKHARTLAKE=m
|
||||
CONFIG_GPIO_JANZ_TTL=m
|
||||
CONFIG_GPIO_KEMPLD=m
|
||||
CONFIG_GPIO_LJCA=m
|
||||
CONFIG_GPIO_LP3943=m
|
||||
CONFIG_GPIO_LP873X=m
|
||||
CONFIG_GPIO_MADERA=m
|
||||
@@ -5190,7 +5187,7 @@ CONFIG_CHARGER_WILCO=m
|
||||
CONFIG_BATTERY_SURFACE=m
|
||||
CONFIG_CHARGER_SURFACE=m
|
||||
CONFIG_BATTERY_UG3105=m
|
||||
CONFIG_FUEL_GAUGE_MM8013=m
|
||||
# CONFIG_FUEL_GAUGE_MM8013 is not set
|
||||
CONFIG_HWMON=y
|
||||
CONFIG_HWMON_VID=m
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
@@ -6140,7 +6137,7 @@ CONFIG_MEDIA_PCI_SUPPORT=y
|
||||
#
|
||||
# Media capture support
|
||||
#
|
||||
CONFIG_VIDEO_MGB4=m
|
||||
# CONFIG_VIDEO_MGB4 is not set
|
||||
CONFIG_VIDEO_SOLO6X10=m
|
||||
CONFIG_VIDEO_TW5864=m
|
||||
CONFIG_VIDEO_TW68=m
|
||||
@@ -6412,7 +6409,7 @@ CONFIG_VIDEO_IMX355=m
|
||||
CONFIG_VIDEO_MAX9271_LIB=m
|
||||
CONFIG_VIDEO_MT9M001=m
|
||||
CONFIG_VIDEO_MT9M111=m
|
||||
CONFIG_VIDEO_MT9M114=m
|
||||
# CONFIG_VIDEO_MT9M114 is not set
|
||||
CONFIG_VIDEO_MT9P031=m
|
||||
CONFIG_VIDEO_MT9T112=m
|
||||
CONFIG_VIDEO_MT9V011=m
|
||||
@@ -7321,6 +7318,7 @@ CONFIG_SND_DESIGNWARE_PCM=y
|
||||
# CONFIG_SND_SOC_FSL_ESAI is not set
|
||||
# CONFIG_SND_SOC_FSL_MICFIL is not set
|
||||
CONFIG_SND_SOC_FSL_XCVR=m
|
||||
CONFIG_SND_SOC_FSL_RPMSG=m
|
||||
# CONFIG_SND_SOC_IMX_AUDMUX is not set
|
||||
# end of SoC Audio for Freescale CPUs
|
||||
|
||||
@@ -8221,7 +8219,7 @@ CONFIG_USB_CYTHERM=m
|
||||
CONFIG_USB_IDMOUSE=m
|
||||
CONFIG_USB_APPLEDISPLAY=m
|
||||
CONFIG_APPLE_MFI_FASTCHARGE=m
|
||||
CONFIG_USB_LJCA=m
|
||||
# CONFIG_USB_LJCA is not set
|
||||
CONFIG_USB_SISUSBVGA=m
|
||||
CONFIG_USB_LD=m
|
||||
CONFIG_USB_TRANCEVIBRATOR=m
|
||||
@@ -8393,7 +8391,7 @@ CONFIG_TYPEC_MUX_GPIO_SBU=m
|
||||
CONFIG_TYPEC_MUX_PI3USB30532=m
|
||||
CONFIG_TYPEC_MUX_INTEL_PMC=m
|
||||
CONFIG_TYPEC_MUX_NB7VPQ904M=m
|
||||
CONFIG_TYPEC_MUX_PTN36502=m
|
||||
# CONFIG_TYPEC_MUX_PTN36502 is not set
|
||||
# end of USB Type-C Multiplexer/DeMultiplexer Switch support
|
||||
|
||||
#
|
||||
@@ -8969,7 +8967,7 @@ CONFIG_XEN_PVCALLS_FRONTEND=m
|
||||
CONFIG_XEN_PVCALLS_BACKEND=y
|
||||
CONFIG_XEN_SCSI_BACKEND=m
|
||||
CONFIG_XEN_PRIVCMD=m
|
||||
CONFIG_XEN_PRIVCMD_EVENTFD=y
|
||||
# CONFIG_XEN_PRIVCMD_EVENTFD is not set
|
||||
CONFIG_XEN_ACPI_PROCESSOR=m
|
||||
CONFIG_XEN_MCE_LOG=y
|
||||
CONFIG_XEN_HAVE_PVMMU=y
|
||||
@@ -10378,12 +10376,11 @@ CONFIG_F2FS_IOSTAT=y
|
||||
CONFIG_F2FS_UNFAIR_RWSEM=y
|
||||
CONFIG_BCACHEFS_FS=m
|
||||
CONFIG_BCACHEFS_QUOTA=y
|
||||
# CONFIG_BCACHEFS_ERASURE_CODING is not set
|
||||
CONFIG_BCACHEFS_POSIX_ACL=y
|
||||
# CONFIG_BCACHEFS_DEBUG_TRANSACTIONS is not set
|
||||
# CONFIG_BCACHEFS_DEBUG is not set
|
||||
# CONFIG_BCACHEFS_TESTS is not set
|
||||
CONFIG_BCACHEFS_LOCK_TIME_STATS=y
|
||||
# CONFIG_BCACHEFS_LOCK_TIME_STATS is not set
|
||||
# CONFIG_BCACHEFS_NO_LATENCY_ACCT is not set
|
||||
CONFIG_ZONEFS_FS=m
|
||||
CONFIG_FS_DAX=y
|
||||
@@ -11504,6 +11501,8 @@ CONFIG_DEBUG_LIST=y
|
||||
# CONFIG_DEBUG_MAPLE_TREE is not set
|
||||
# end of Debug kernel data structures
|
||||
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
|
||||
#
|
||||
# RCU Debugging
|
||||
#
|
||||
@@ -11513,14 +11512,13 @@ CONFIG_DEBUG_LIST=y
|
||||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||
CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
|
||||
# CONFIG_RCU_CPU_STALL_CPUTIME is not set
|
||||
# CONFIG_RCU_CPU_STALL_NOTIFIER is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
# CONFIG_RCU_EQS_DEBUG is not set
|
||||
# end of RCU Debugging
|
||||
|
||||
# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
|
||||
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
CONFIG_LATENCYTOP=y
|
||||
# CONFIG_DEBUG_CGROUP_REF is not set
|
||||
CONFIG_USER_STACKTRACE_SUPPORT=y
|
||||
CONFIG_NOP_TRACER=y
|
||||
|
@@ -1,677 +0,0 @@
|
||||
8021q
|
||||
8250_dw
|
||||
842
|
||||
842_compress
|
||||
842_decompress
|
||||
9p
|
||||
9pnet
|
||||
9pnet_virtio
|
||||
ac97_bus
|
||||
acer_wireless
|
||||
acer_wmi
|
||||
acpi_cpufreq
|
||||
acpi_mdio
|
||||
acpi_pad
|
||||
acpi_tad
|
||||
acpi_thermal_rel
|
||||
aesni_intel
|
||||
af_alg
|
||||
af_key
|
||||
af_packet
|
||||
agpgart
|
||||
ahci
|
||||
algif_aead
|
||||
algif_hash
|
||||
algif_skcipher
|
||||
alx
|
||||
amd64_edac
|
||||
amd_pmc
|
||||
amd_pstate
|
||||
amdgpu
|
||||
amdxcp
|
||||
apple_mfi_fastcharge
|
||||
appletalk
|
||||
asn1_encoder
|
||||
asus_atk0110
|
||||
asus_nb_wmi
|
||||
asus_wmi
|
||||
ata_generic
|
||||
ata_piix
|
||||
ath
|
||||
ath9k_common
|
||||
ath9k_htc
|
||||
ath9k_hw
|
||||
atkbd
|
||||
atl1c
|
||||
auth_rpcgss
|
||||
autofs4
|
||||
battery
|
||||
bch
|
||||
binder
|
||||
binfmt_misc
|
||||
blake2b_generic
|
||||
bluetooth
|
||||
bnep
|
||||
bpf
|
||||
bpf_preload
|
||||
br_netfilter
|
||||
bridge
|
||||
btbcm
|
||||
btcoexist
|
||||
btintel
|
||||
btmtk
|
||||
btrfs
|
||||
btrtl
|
||||
btusb
|
||||
button
|
||||
cbc
|
||||
ccm
|
||||
ccp
|
||||
cdc_acm
|
||||
cdc_ether
|
||||
cdc_mbim
|
||||
cdc_ncm
|
||||
cdc_wdm
|
||||
cdrom
|
||||
cec
|
||||
cfbcopyarea
|
||||
cfbfillrect
|
||||
cfbimgblt
|
||||
cfg80211
|
||||
cgroup
|
||||
ch341
|
||||
chacha_x86_64
|
||||
chipreg
|
||||
cifs
|
||||
cifs_arc4
|
||||
cifs_md4
|
||||
cls_cgroup
|
||||
cmac
|
||||
cmdlinepart
|
||||
coretemp
|
||||
cpufreq_ondemand
|
||||
crc16
|
||||
crc32_generic
|
||||
crc32_pclmul
|
||||
crc32c_generic
|
||||
crc32c_intel
|
||||
crc64
|
||||
crc64_rocksoft
|
||||
crc64_rocksoft_generic
|
||||
crc_itu_t
|
||||
crct10dif_pclmul
|
||||
cryptd
|
||||
crypto_null
|
||||
crypto_simd
|
||||
crypto_user
|
||||
curve25519_x86_64
|
||||
cuse
|
||||
dca
|
||||
des_generic
|
||||
dm_crypt
|
||||
dm_log
|
||||
dm_mirror
|
||||
dm_mod
|
||||
dm_multipath
|
||||
dm_region_hash
|
||||
dm_round_robin
|
||||
dmi_sysfs
|
||||
dns_resolver
|
||||
drm
|
||||
drm_buddy
|
||||
drm_display_helper
|
||||
drm_kms_helper
|
||||
drm_panel_orientation_quirks
|
||||
drm_suballoc_helper
|
||||
drm_ttm_helper
|
||||
dvb_core
|
||||
ebtable_filter
|
||||
ebtables
|
||||
ec_sys
|
||||
ecb
|
||||
ecc
|
||||
ecdh_generic
|
||||
edac_mce_amd
|
||||
ee1004
|
||||
eeepc_wmi
|
||||
eeprom
|
||||
efi_pstore
|
||||
efivarfs
|
||||
ehci_hcd
|
||||
ehci_pci
|
||||
enclosure
|
||||
encrypted_keys
|
||||
evdev
|
||||
exfat
|
||||
ext2
|
||||
ext4
|
||||
f2fs
|
||||
fan
|
||||
fat
|
||||
fb_sys_fops
|
||||
ff_memless
|
||||
fixed_phy
|
||||
fjes
|
||||
fscache
|
||||
ftdi_sio
|
||||
fuse
|
||||
fwnode_mdio
|
||||
garp
|
||||
gcm
|
||||
gf128mul
|
||||
ghash_clmulni_intel
|
||||
ghash_generic
|
||||
gigabyte_wmi
|
||||
gpio_amdpt
|
||||
gpio_generic
|
||||
gpu_sched
|
||||
grace
|
||||
hfs
|
||||
hfsplus
|
||||
hid
|
||||
hid_apple
|
||||
hid_asus
|
||||
hid_generic
|
||||
hid_hyperv
|
||||
hid_logitech_dj
|
||||
hid_logitech_hidpp
|
||||
hid_microsoft
|
||||
hid_multitouch
|
||||
hid_nintendo
|
||||
hid_playstation
|
||||
hid_roccat
|
||||
hid_roccat_common
|
||||
hid_roccat_koneplus
|
||||
hid_roccat_ryos
|
||||
hid_sony
|
||||
hid_steam
|
||||
hid_wiimote
|
||||
hidp
|
||||
hp_wmi
|
||||
hv_balloon
|
||||
hv_netvsc
|
||||
hv_storvsc
|
||||
hv_utils
|
||||
hv_vmbus
|
||||
hwmon_vid
|
||||
hyperv_drm
|
||||
hyperv_keyboard
|
||||
i2c_algo_bit
|
||||
i2c_core
|
||||
i2c_dev
|
||||
i2c_hid
|
||||
i2c_hid_acpi
|
||||
i2c_i801
|
||||
i2c_mux
|
||||
i2c_nvidia_gpu
|
||||
i2c_piix4
|
||||
i2c_smbus
|
||||
i8042
|
||||
i915
|
||||
iTCO_vendor_support
|
||||
iTCO_wdt
|
||||
ib_cm
|
||||
ib_core
|
||||
idma64
|
||||
igb
|
||||
igc
|
||||
inet_diag
|
||||
input_leds
|
||||
int3400_thermal
|
||||
int3403_thermal
|
||||
int340x_thermal_zone
|
||||
intel_agp
|
||||
intel_cstate
|
||||
intel_gtt
|
||||
intel_hid
|
||||
intel_lpss
|
||||
intel_lpss_pci
|
||||
intel_pch_thermal
|
||||
intel_pmc_bxt
|
||||
intel_powerclamp
|
||||
intel_rapl_common
|
||||
intel_rapl_msr
|
||||
intel_soc_dts_iosf
|
||||
intel_tcc_cooling
|
||||
intel_uncore
|
||||
intel_vsec
|
||||
intel_wmi_thunderbolt
|
||||
iommu_v2
|
||||
iommufd
|
||||
ip6_tables
|
||||
ip6_udp_tunnel
|
||||
ip6t_REJECT
|
||||
ip6t_rt
|
||||
ip6table_filter
|
||||
ip6table_mangle
|
||||
ip6table_nat
|
||||
ip6table_raw
|
||||
ip6table_security
|
||||
ip_set
|
||||
ip_tables
|
||||
ipmi_devintf
|
||||
ipmi_msghandler
|
||||
ipt_REJECT
|
||||
iptable_filter
|
||||
iptable_mangle
|
||||
iptable_nat
|
||||
iptable_raw
|
||||
iptable_security
|
||||
ipv6
|
||||
ir_kbd_i2c
|
||||
irqbypass
|
||||
isofs
|
||||
it87
|
||||
iw_cm
|
||||
iwlmei
|
||||
iwlmvm
|
||||
iwlwifi
|
||||
jbd2
|
||||
jc42
|
||||
jfs
|
||||
joydev
|
||||
k10temp
|
||||
ksmbd
|
||||
kvm
|
||||
kvm_amd
|
||||
kvm_intel
|
||||
led_class_multicolor
|
||||
ledtrig_audio
|
||||
ledtrig_timer
|
||||
libahci
|
||||
libarc4
|
||||
libata
|
||||
libchacha
|
||||
libchacha20poly1305
|
||||
libcrc32c
|
||||
libcurve25519_generic
|
||||
libdes
|
||||
libphy
|
||||
libps2
|
||||
llc
|
||||
lm75
|
||||
lm83
|
||||
lockd
|
||||
loop
|
||||
lpc_ich
|
||||
lz4
|
||||
lz4_compress
|
||||
lz4hc_compress
|
||||
lzo
|
||||
lzo_rle
|
||||
mac80211
|
||||
mac_hid
|
||||
mbcache
|
||||
mc
|
||||
mc44s803
|
||||
md4
|
||||
md_mod
|
||||
mdio
|
||||
mdio_devres
|
||||
mei
|
||||
mei_gsc
|
||||
mei_hdcp
|
||||
mei_me
|
||||
mei_pxp
|
||||
mii
|
||||
minix
|
||||
mmc_core
|
||||
mousedev
|
||||
mptcp_diag
|
||||
mrp
|
||||
msdos
|
||||
msr
|
||||
mt20xx
|
||||
mt76
|
||||
mt76_connac_lib
|
||||
mt76_usb
|
||||
mt76x02_lib
|
||||
mt76x02_usb
|
||||
mt76x2_common
|
||||
mt76x2u
|
||||
mt7921_common
|
||||
mt7921e
|
||||
mtd
|
||||
mxm_wmi
|
||||
nandcore
|
||||
nbd
|
||||
nct6683
|
||||
nct6775
|
||||
nct6775_core
|
||||
netfs
|
||||
nf_conntrack
|
||||
nf_conntrack_broadcast
|
||||
nf_conntrack_ftp
|
||||
nf_conntrack_h323
|
||||
nf_conntrack_irc
|
||||
nf_conntrack_netbios_ns
|
||||
nf_conntrack_netlink
|
||||
nf_conntrack_pptp
|
||||
nf_conntrack_sip
|
||||
nf_conntrack_tftp
|
||||
nf_defrag_ipv4
|
||||
nf_defrag_ipv6
|
||||
nf_nat
|
||||
nf_nat_ftp
|
||||
nf_nat_h323
|
||||
nf_nat_irc
|
||||
nf_nat_pptp
|
||||
nf_nat_sip
|
||||
nf_nat_tftp
|
||||
nf_reject_ipv4
|
||||
nf_reject_ipv6
|
||||
nf_tables
|
||||
nfnetlink
|
||||
nfnetlink_log
|
||||
nfnetlink_queue
|
||||
nfs
|
||||
nfsv4
|
||||
nft_chain_nat
|
||||
nft_compat
|
||||
nft_ct
|
||||
nft_fib
|
||||
nft_fib_inet
|
||||
nft_fib_ipv4
|
||||
nft_fib_ipv6
|
||||
nft_masq
|
||||
nft_nat
|
||||
nft_reject
|
||||
nft_reject_inet
|
||||
nft_reject_ipv4
|
||||
nft_reject_ipv6
|
||||
nft_xfrm
|
||||
nilfs2
|
||||
nlmon
|
||||
nls_ascii
|
||||
nls_cp437
|
||||
nls_iso8859_1
|
||||
nls_utf8
|
||||
nouveau
|
||||
ntfs
|
||||
ntfs3
|
||||
nvidia_wmi_ec_backlight
|
||||
nvme
|
||||
nvme_common
|
||||
nvme_core
|
||||
nvmem_rave_sp_eeprom
|
||||
nvram
|
||||
overlay
|
||||
p8022
|
||||
parport
|
||||
parport_pc
|
||||
pata_acpi
|
||||
pcc_cpufreq
|
||||
pcspkr
|
||||
pinctrl_alderlake
|
||||
pinctrl_amd
|
||||
pkcs8_key_parser
|
||||
pktcdvd
|
||||
platform_profile
|
||||
pmt_class
|
||||
pmt_telemetry
|
||||
poly1305_x86_64
|
||||
polyval_clmulni
|
||||
polyval_generic
|
||||
ppdev
|
||||
processor_thermal_device
|
||||
processor_thermal_device_pci_legacy
|
||||
processor_thermal_mbox
|
||||
processor_thermal_rapl
|
||||
processor_thermal_rfim
|
||||
psmouse
|
||||
psnap
|
||||
qcserial
|
||||
qrtr
|
||||
r8152
|
||||
r8153_ecm
|
||||
r8169
|
||||
radeon
|
||||
raid1
|
||||
raid6_pq
|
||||
rapl
|
||||
rave_sp
|
||||
raw_diag
|
||||
rc_core
|
||||
realtek
|
||||
rfcomm
|
||||
rfkill
|
||||
rndis_host
|
||||
rndis_wlan
|
||||
rng_core
|
||||
roles
|
||||
rpcsec_gss_krb5
|
||||
rt2800lib
|
||||
rt2800usb
|
||||
rt2x00lib
|
||||
rt2x00usb
|
||||
rtl8192ee
|
||||
rtl8723_common
|
||||
rtl8723ae
|
||||
rtl8723be
|
||||
rtl8821ae
|
||||
rtl_pci
|
||||
rtlwifi
|
||||
rtsx_pci
|
||||
rtsx_pci_sdmmc
|
||||
rtw88_8821c
|
||||
rtw88_8821ce
|
||||
rtw88_core
|
||||
rtw88_pci
|
||||
sch_cake
|
||||
sch_fq_codel
|
||||
sch_ingress
|
||||
scsi_common
|
||||
scsi_mod
|
||||
scsi_transport_fc
|
||||
scsi_transport_sas
|
||||
sd_mod
|
||||
selftests
|
||||
serial_multi_instantiate
|
||||
serio
|
||||
serio_raw
|
||||
ses
|
||||
sg
|
||||
sha512_ssse3
|
||||
snd
|
||||
snd_acp3x_pdm_dma
|
||||
snd_acp3x_rn
|
||||
snd_acp6x_pdm_dma
|
||||
snd_acp_config
|
||||
snd_acp_pci
|
||||
snd_aloop
|
||||
snd_compress
|
||||
snd_ctl_led
|
||||
snd_hda_codec
|
||||
snd_hda_codec_generic
|
||||
snd_hda_codec_hdmi
|
||||
snd_hda_codec_realtek
|
||||
snd_hda_core
|
||||
snd_hda_ext_core
|
||||
snd_hda_intel
|
||||
snd_hrtimer
|
||||
snd_hwdep
|
||||
snd_intel_dspcfg
|
||||
snd_intel_sdw_acpi
|
||||
snd_pci_acp3x
|
||||
snd_pci_acp5x
|
||||
snd_pci_acp6x
|
||||
snd_pci_ps
|
||||
snd_pcm
|
||||
snd_pcm_dmaengine
|
||||
snd_rawmidi
|
||||
snd_rn_pci_acp3x
|
||||
snd_rpl_pci_acp6x
|
||||
snd_seq
|
||||
snd_seq_device
|
||||
snd_seq_dummy
|
||||
snd_seq_midi
|
||||
snd_seq_midi_event
|
||||
snd_seq_oss
|
||||
snd_seq_virmidi
|
||||
snd_soc_acp6x_mach
|
||||
snd_soc_acpi
|
||||
snd_soc_acpi_intel_match
|
||||
snd_soc_core
|
||||
snd_soc_dmic
|
||||
snd_soc_hdac_hda
|
||||
snd_soc_skl
|
||||
snd_soc_sst_dsp
|
||||
snd_soc_sst_ipc
|
||||
snd_sof
|
||||
snd_sof_amd_acp
|
||||
snd_sof_amd_rembrandt
|
||||
snd_sof_amd_renoir
|
||||
snd_sof_intel_hda
|
||||
snd_sof_intel_hda_common
|
||||
snd_sof_intel_hda_mlink
|
||||
snd_sof_pci
|
||||
snd_sof_pci_intel_cnl
|
||||
snd_sof_pci_intel_tgl
|
||||
snd_sof_probes
|
||||
snd_sof_utils
|
||||
snd_sof_xtensa_dsp
|
||||
snd_timer
|
||||
snd_ua101
|
||||
snd_ump
|
||||
snd_usb_audio
|
||||
snd_usb_us122l
|
||||
snd_usb_usx2y
|
||||
snd_usbmidi_lib
|
||||
snd_virmidi
|
||||
soundcore
|
||||
soundwire_bus
|
||||
soundwire_cadence
|
||||
soundwire_generic_allocation
|
||||
soundwire_intel
|
||||
sp5100_tco
|
||||
sparse_keymap
|
||||
spi_intel
|
||||
spi_intel_pci
|
||||
spi_nor
|
||||
squashfs
|
||||
sr_mod
|
||||
st
|
||||
stp
|
||||
sunrpc
|
||||
syscopyarea
|
||||
sysfillrect
|
||||
sysimgblt
|
||||
t10_pi
|
||||
tap
|
||||
tcp_bbr
|
||||
tcp_diag
|
||||
tda18271
|
||||
tda827x
|
||||
tda8290
|
||||
tda9887
|
||||
tea5761
|
||||
tea5767
|
||||
tee
|
||||
tg3
|
||||
thermal
|
||||
thinkpad_acpi
|
||||
thunderbolt
|
||||
tiny_power_button
|
||||
tls
|
||||
tpm
|
||||
tpm_crb
|
||||
tpm_tis
|
||||
tpm_tis_core
|
||||
trusted
|
||||
ttm
|
||||
tun
|
||||
tuner_simple
|
||||
tuner_types
|
||||
tunnel4
|
||||
tunnel6
|
||||
typec
|
||||
typec_ucsi
|
||||
uas
|
||||
ucsi_acpi
|
||||
ucsi_ccg
|
||||
udf
|
||||
udp_diag
|
||||
udp_tunnel
|
||||
ufs
|
||||
uhci_hcd
|
||||
uhid
|
||||
uinput
|
||||
uio
|
||||
uio_pdrv_genirq
|
||||
unix_diag
|
||||
usb_common
|
||||
usb_storage
|
||||
usb_wwan
|
||||
usbcore
|
||||
usbhid
|
||||
usbip_core
|
||||
usbip_host
|
||||
usbmon
|
||||
usbnet
|
||||
uvc
|
||||
uvcvideo
|
||||
uvesafb
|
||||
v4l2_dv_timings
|
||||
veth
|
||||
vfat
|
||||
vfio
|
||||
vfio_iommu_type1
|
||||
vfio_pci
|
||||
vfio_pci_core
|
||||
vhost
|
||||
vhost_iotlb
|
||||
vhost_net
|
||||
video
|
||||
videobuf2_common
|
||||
videobuf2_memops
|
||||
videobuf2_v4l2
|
||||
videobuf2_vmalloc
|
||||
videodev
|
||||
virtio_pci
|
||||
virtio_pci_legacy_dev
|
||||
virtio_pci_modern_dev
|
||||
virtio_scsi
|
||||
vivaldi_fmap
|
||||
vmw_vmci
|
||||
vmw_vsock_virtio_transport_common
|
||||
vmw_vsock_vmci_transport
|
||||
vsock
|
||||
vsock_loopback
|
||||
wacom
|
||||
watchdog
|
||||
wireguard
|
||||
wireless_hotkey
|
||||
wmi
|
||||
wmi_bmof
|
||||
x86_pkg_temp_thermal
|
||||
x_tables
|
||||
xc2028
|
||||
xc4000
|
||||
xc5000
|
||||
xfrm6_tunnel
|
||||
xfrm_interface
|
||||
xfs
|
||||
xhci_hcd
|
||||
xhci_pci
|
||||
xhci_pci_renesas
|
||||
xor
|
||||
xpad
|
||||
xt_CHECKSUM
|
||||
xt_LOG
|
||||
xt_MASQUERADE
|
||||
xt_NFQUEUE
|
||||
xt_REDIRECT
|
||||
xt_addrtype
|
||||
xt_cgroup
|
||||
xt_comment
|
||||
xt_conntrack
|
||||
xt_hl
|
||||
xt_limit
|
||||
xt_mark
|
||||
xt_nat
|
||||
xt_recent
|
||||
xt_state
|
||||
xt_tcpudp
|
||||
xxhash_generic
|
||||
zlib_deflate
|
||||
zram
|
@@ -1,14 +0,0 @@
|
||||
[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
|
||||
|
@@ -1,10 +0,0 @@
|
||||
#!/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:
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,677 +0,0 @@
|
||||
8021q
|
||||
8250_dw
|
||||
842
|
||||
842_compress
|
||||
842_decompress
|
||||
9p
|
||||
9pnet
|
||||
9pnet_virtio
|
||||
ac97_bus
|
||||
acer_wireless
|
||||
acer_wmi
|
||||
acpi_cpufreq
|
||||
acpi_mdio
|
||||
acpi_pad
|
||||
acpi_tad
|
||||
acpi_thermal_rel
|
||||
aesni_intel
|
||||
af_alg
|
||||
af_key
|
||||
af_packet
|
||||
agpgart
|
||||
ahci
|
||||
algif_aead
|
||||
algif_hash
|
||||
algif_skcipher
|
||||
alx
|
||||
amd64_edac
|
||||
amd_pmc
|
||||
amd_pstate
|
||||
amdgpu
|
||||
amdxcp
|
||||
apple_mfi_fastcharge
|
||||
appletalk
|
||||
asn1_encoder
|
||||
asus_atk0110
|
||||
asus_nb_wmi
|
||||
asus_wmi
|
||||
ata_generic
|
||||
ata_piix
|
||||
ath
|
||||
ath9k_common
|
||||
ath9k_htc
|
||||
ath9k_hw
|
||||
atkbd
|
||||
atl1c
|
||||
auth_rpcgss
|
||||
autofs4
|
||||
battery
|
||||
bch
|
||||
binder
|
||||
binfmt_misc
|
||||
blake2b_generic
|
||||
bluetooth
|
||||
bnep
|
||||
bpf
|
||||
bpf_preload
|
||||
br_netfilter
|
||||
bridge
|
||||
btbcm
|
||||
btcoexist
|
||||
btintel
|
||||
btmtk
|
||||
btrfs
|
||||
btrtl
|
||||
btusb
|
||||
button
|
||||
cbc
|
||||
ccm
|
||||
ccp
|
||||
cdc_acm
|
||||
cdc_ether
|
||||
cdc_mbim
|
||||
cdc_ncm
|
||||
cdc_wdm
|
||||
cdrom
|
||||
cec
|
||||
cfbcopyarea
|
||||
cfbfillrect
|
||||
cfbimgblt
|
||||
cfg80211
|
||||
cgroup
|
||||
ch341
|
||||
chacha_x86_64
|
||||
chipreg
|
||||
cifs
|
||||
cifs_arc4
|
||||
cifs_md4
|
||||
cls_cgroup
|
||||
cmac
|
||||
cmdlinepart
|
||||
coretemp
|
||||
cpufreq_ondemand
|
||||
crc16
|
||||
crc32_generic
|
||||
crc32_pclmul
|
||||
crc32c_generic
|
||||
crc32c_intel
|
||||
crc64
|
||||
crc64_rocksoft
|
||||
crc64_rocksoft_generic
|
||||
crc_itu_t
|
||||
crct10dif_pclmul
|
||||
cryptd
|
||||
crypto_null
|
||||
crypto_simd
|
||||
crypto_user
|
||||
curve25519_x86_64
|
||||
cuse
|
||||
dca
|
||||
des_generic
|
||||
dm_crypt
|
||||
dm_log
|
||||
dm_mirror
|
||||
dm_mod
|
||||
dm_multipath
|
||||
dm_region_hash
|
||||
dm_round_robin
|
||||
dmi_sysfs
|
||||
dns_resolver
|
||||
drm
|
||||
drm_buddy
|
||||
drm_display_helper
|
||||
drm_kms_helper
|
||||
drm_panel_orientation_quirks
|
||||
drm_suballoc_helper
|
||||
drm_ttm_helper
|
||||
dvb_core
|
||||
ebtable_filter
|
||||
ebtables
|
||||
ec_sys
|
||||
ecb
|
||||
ecc
|
||||
ecdh_generic
|
||||
edac_mce_amd
|
||||
ee1004
|
||||
eeepc_wmi
|
||||
eeprom
|
||||
efi_pstore
|
||||
efivarfs
|
||||
ehci_hcd
|
||||
ehci_pci
|
||||
enclosure
|
||||
encrypted_keys
|
||||
evdev
|
||||
exfat
|
||||
ext2
|
||||
ext4
|
||||
f2fs
|
||||
fan
|
||||
fat
|
||||
fb_sys_fops
|
||||
ff_memless
|
||||
fixed_phy
|
||||
fjes
|
||||
fscache
|
||||
ftdi_sio
|
||||
fuse
|
||||
fwnode_mdio
|
||||
garp
|
||||
gcm
|
||||
gf128mul
|
||||
ghash_clmulni_intel
|
||||
ghash_generic
|
||||
gigabyte_wmi
|
||||
gpio_amdpt
|
||||
gpio_generic
|
||||
gpu_sched
|
||||
grace
|
||||
hfs
|
||||
hfsplus
|
||||
hid
|
||||
hid_apple
|
||||
hid_asus
|
||||
hid_generic
|
||||
hid_hyperv
|
||||
hid_logitech_dj
|
||||
hid_logitech_hidpp
|
||||
hid_microsoft
|
||||
hid_multitouch
|
||||
hid_nintendo
|
||||
hid_playstation
|
||||
hid_roccat
|
||||
hid_roccat_common
|
||||
hid_roccat_koneplus
|
||||
hid_roccat_ryos
|
||||
hid_sony
|
||||
hid_steam
|
||||
hid_wiimote
|
||||
hidp
|
||||
hp_wmi
|
||||
hv_balloon
|
||||
hv_netvsc
|
||||
hv_storvsc
|
||||
hv_utils
|
||||
hv_vmbus
|
||||
hwmon_vid
|
||||
hyperv_drm
|
||||
hyperv_keyboard
|
||||
i2c_algo_bit
|
||||
i2c_core
|
||||
i2c_dev
|
||||
i2c_hid
|
||||
i2c_hid_acpi
|
||||
i2c_i801
|
||||
i2c_mux
|
||||
i2c_nvidia_gpu
|
||||
i2c_piix4
|
||||
i2c_smbus
|
||||
i8042
|
||||
i915
|
||||
iTCO_vendor_support
|
||||
iTCO_wdt
|
||||
ib_cm
|
||||
ib_core
|
||||
idma64
|
||||
igb
|
||||
igc
|
||||
inet_diag
|
||||
input_leds
|
||||
int3400_thermal
|
||||
int3403_thermal
|
||||
int340x_thermal_zone
|
||||
intel_agp
|
||||
intel_cstate
|
||||
intel_gtt
|
||||
intel_hid
|
||||
intel_lpss
|
||||
intel_lpss_pci
|
||||
intel_pch_thermal
|
||||
intel_pmc_bxt
|
||||
intel_powerclamp
|
||||
intel_rapl_common
|
||||
intel_rapl_msr
|
||||
intel_soc_dts_iosf
|
||||
intel_tcc_cooling
|
||||
intel_uncore
|
||||
intel_vsec
|
||||
intel_wmi_thunderbolt
|
||||
iommu_v2
|
||||
iommufd
|
||||
ip6_tables
|
||||
ip6_udp_tunnel
|
||||
ip6t_REJECT
|
||||
ip6t_rt
|
||||
ip6table_filter
|
||||
ip6table_mangle
|
||||
ip6table_nat
|
||||
ip6table_raw
|
||||
ip6table_security
|
||||
ip_set
|
||||
ip_tables
|
||||
ipmi_devintf
|
||||
ipmi_msghandler
|
||||
ipt_REJECT
|
||||
iptable_filter
|
||||
iptable_mangle
|
||||
iptable_nat
|
||||
iptable_raw
|
||||
iptable_security
|
||||
ipv6
|
||||
ir_kbd_i2c
|
||||
irqbypass
|
||||
isofs
|
||||
it87
|
||||
iw_cm
|
||||
iwlmei
|
||||
iwlmvm
|
||||
iwlwifi
|
||||
jbd2
|
||||
jc42
|
||||
jfs
|
||||
joydev
|
||||
k10temp
|
||||
ksmbd
|
||||
kvm
|
||||
kvm_amd
|
||||
kvm_intel
|
||||
led_class_multicolor
|
||||
ledtrig_audio
|
||||
ledtrig_timer
|
||||
libahci
|
||||
libarc4
|
||||
libata
|
||||
libchacha
|
||||
libchacha20poly1305
|
||||
libcrc32c
|
||||
libcurve25519_generic
|
||||
libdes
|
||||
libphy
|
||||
libps2
|
||||
llc
|
||||
lm75
|
||||
lm83
|
||||
lockd
|
||||
loop
|
||||
lpc_ich
|
||||
lz4
|
||||
lz4_compress
|
||||
lz4hc_compress
|
||||
lzo
|
||||
lzo_rle
|
||||
mac80211
|
||||
mac_hid
|
||||
mbcache
|
||||
mc
|
||||
mc44s803
|
||||
md4
|
||||
md_mod
|
||||
mdio
|
||||
mdio_devres
|
||||
mei
|
||||
mei_gsc
|
||||
mei_hdcp
|
||||
mei_me
|
||||
mei_pxp
|
||||
mii
|
||||
minix
|
||||
mmc_core
|
||||
mousedev
|
||||
mptcp_diag
|
||||
mrp
|
||||
msdos
|
||||
msr
|
||||
mt20xx
|
||||
mt76
|
||||
mt76_connac_lib
|
||||
mt76_usb
|
||||
mt76x02_lib
|
||||
mt76x02_usb
|
||||
mt76x2_common
|
||||
mt76x2u
|
||||
mt7921_common
|
||||
mt7921e
|
||||
mtd
|
||||
mxm_wmi
|
||||
nandcore
|
||||
nbd
|
||||
nct6683
|
||||
nct6775
|
||||
nct6775_core
|
||||
netfs
|
||||
nf_conntrack
|
||||
nf_conntrack_broadcast
|
||||
nf_conntrack_ftp
|
||||
nf_conntrack_h323
|
||||
nf_conntrack_irc
|
||||
nf_conntrack_netbios_ns
|
||||
nf_conntrack_netlink
|
||||
nf_conntrack_pptp
|
||||
nf_conntrack_sip
|
||||
nf_conntrack_tftp
|
||||
nf_defrag_ipv4
|
||||
nf_defrag_ipv6
|
||||
nf_nat
|
||||
nf_nat_ftp
|
||||
nf_nat_h323
|
||||
nf_nat_irc
|
||||
nf_nat_pptp
|
||||
nf_nat_sip
|
||||
nf_nat_tftp
|
||||
nf_reject_ipv4
|
||||
nf_reject_ipv6
|
||||
nf_tables
|
||||
nfnetlink
|
||||
nfnetlink_log
|
||||
nfnetlink_queue
|
||||
nfs
|
||||
nfsv4
|
||||
nft_chain_nat
|
||||
nft_compat
|
||||
nft_ct
|
||||
nft_fib
|
||||
nft_fib_inet
|
||||
nft_fib_ipv4
|
||||
nft_fib_ipv6
|
||||
nft_masq
|
||||
nft_nat
|
||||
nft_reject
|
||||
nft_reject_inet
|
||||
nft_reject_ipv4
|
||||
nft_reject_ipv6
|
||||
nft_xfrm
|
||||
nilfs2
|
||||
nlmon
|
||||
nls_ascii
|
||||
nls_cp437
|
||||
nls_iso8859_1
|
||||
nls_utf8
|
||||
nouveau
|
||||
ntfs
|
||||
ntfs3
|
||||
nvidia_wmi_ec_backlight
|
||||
nvme
|
||||
nvme_common
|
||||
nvme_core
|
||||
nvmem_rave_sp_eeprom
|
||||
nvram
|
||||
overlay
|
||||
p8022
|
||||
parport
|
||||
parport_pc
|
||||
pata_acpi
|
||||
pcc_cpufreq
|
||||
pcspkr
|
||||
pinctrl_alderlake
|
||||
pinctrl_amd
|
||||
pkcs8_key_parser
|
||||
pktcdvd
|
||||
platform_profile
|
||||
pmt_class
|
||||
pmt_telemetry
|
||||
poly1305_x86_64
|
||||
polyval_clmulni
|
||||
polyval_generic
|
||||
ppdev
|
||||
processor_thermal_device
|
||||
processor_thermal_device_pci_legacy
|
||||
processor_thermal_mbox
|
||||
processor_thermal_rapl
|
||||
processor_thermal_rfim
|
||||
psmouse
|
||||
psnap
|
||||
qcserial
|
||||
qrtr
|
||||
r8152
|
||||
r8153_ecm
|
||||
r8169
|
||||
radeon
|
||||
raid1
|
||||
raid6_pq
|
||||
rapl
|
||||
rave_sp
|
||||
raw_diag
|
||||
rc_core
|
||||
realtek
|
||||
rfcomm
|
||||
rfkill
|
||||
rndis_host
|
||||
rndis_wlan
|
||||
rng_core
|
||||
roles
|
||||
rpcsec_gss_krb5
|
||||
rt2800lib
|
||||
rt2800usb
|
||||
rt2x00lib
|
||||
rt2x00usb
|
||||
rtl8192ee
|
||||
rtl8723_common
|
||||
rtl8723ae
|
||||
rtl8723be
|
||||
rtl8821ae
|
||||
rtl_pci
|
||||
rtlwifi
|
||||
rtsx_pci
|
||||
rtsx_pci_sdmmc
|
||||
rtw88_8821c
|
||||
rtw88_8821ce
|
||||
rtw88_core
|
||||
rtw88_pci
|
||||
sch_cake
|
||||
sch_fq_codel
|
||||
sch_ingress
|
||||
scsi_common
|
||||
scsi_mod
|
||||
scsi_transport_fc
|
||||
scsi_transport_sas
|
||||
sd_mod
|
||||
selftests
|
||||
serial_multi_instantiate
|
||||
serio
|
||||
serio_raw
|
||||
ses
|
||||
sg
|
||||
sha512_ssse3
|
||||
snd
|
||||
snd_acp3x_pdm_dma
|
||||
snd_acp3x_rn
|
||||
snd_acp6x_pdm_dma
|
||||
snd_acp_config
|
||||
snd_acp_pci
|
||||
snd_aloop
|
||||
snd_compress
|
||||
snd_ctl_led
|
||||
snd_hda_codec
|
||||
snd_hda_codec_generic
|
||||
snd_hda_codec_hdmi
|
||||
snd_hda_codec_realtek
|
||||
snd_hda_core
|
||||
snd_hda_ext_core
|
||||
snd_hda_intel
|
||||
snd_hrtimer
|
||||
snd_hwdep
|
||||
snd_intel_dspcfg
|
||||
snd_intel_sdw_acpi
|
||||
snd_pci_acp3x
|
||||
snd_pci_acp5x
|
||||
snd_pci_acp6x
|
||||
snd_pci_ps
|
||||
snd_pcm
|
||||
snd_pcm_dmaengine
|
||||
snd_rawmidi
|
||||
snd_rn_pci_acp3x
|
||||
snd_rpl_pci_acp6x
|
||||
snd_seq
|
||||
snd_seq_device
|
||||
snd_seq_dummy
|
||||
snd_seq_midi
|
||||
snd_seq_midi_event
|
||||
snd_seq_oss
|
||||
snd_seq_virmidi
|
||||
snd_soc_acp6x_mach
|
||||
snd_soc_acpi
|
||||
snd_soc_acpi_intel_match
|
||||
snd_soc_core
|
||||
snd_soc_dmic
|
||||
snd_soc_hdac_hda
|
||||
snd_soc_skl
|
||||
snd_soc_sst_dsp
|
||||
snd_soc_sst_ipc
|
||||
snd_sof
|
||||
snd_sof_amd_acp
|
||||
snd_sof_amd_rembrandt
|
||||
snd_sof_amd_renoir
|
||||
snd_sof_intel_hda
|
||||
snd_sof_intel_hda_common
|
||||
snd_sof_intel_hda_mlink
|
||||
snd_sof_pci
|
||||
snd_sof_pci_intel_cnl
|
||||
snd_sof_pci_intel_tgl
|
||||
snd_sof_probes
|
||||
snd_sof_utils
|
||||
snd_sof_xtensa_dsp
|
||||
snd_timer
|
||||
snd_ua101
|
||||
snd_ump
|
||||
snd_usb_audio
|
||||
snd_usb_us122l
|
||||
snd_usb_usx2y
|
||||
snd_usbmidi_lib
|
||||
snd_virmidi
|
||||
soundcore
|
||||
soundwire_bus
|
||||
soundwire_cadence
|
||||
soundwire_generic_allocation
|
||||
soundwire_intel
|
||||
sp5100_tco
|
||||
sparse_keymap
|
||||
spi_intel
|
||||
spi_intel_pci
|
||||
spi_nor
|
||||
squashfs
|
||||
sr_mod
|
||||
st
|
||||
stp
|
||||
sunrpc
|
||||
syscopyarea
|
||||
sysfillrect
|
||||
sysimgblt
|
||||
t10_pi
|
||||
tap
|
||||
tcp_bbr
|
||||
tcp_diag
|
||||
tda18271
|
||||
tda827x
|
||||
tda8290
|
||||
tda9887
|
||||
tea5761
|
||||
tea5767
|
||||
tee
|
||||
tg3
|
||||
thermal
|
||||
thinkpad_acpi
|
||||
thunderbolt
|
||||
tiny_power_button
|
||||
tls
|
||||
tpm
|
||||
tpm_crb
|
||||
tpm_tis
|
||||
tpm_tis_core
|
||||
trusted
|
||||
ttm
|
||||
tun
|
||||
tuner_simple
|
||||
tuner_types
|
||||
tunnel4
|
||||
tunnel6
|
||||
typec
|
||||
typec_ucsi
|
||||
uas
|
||||
ucsi_acpi
|
||||
ucsi_ccg
|
||||
udf
|
||||
udp_diag
|
||||
udp_tunnel
|
||||
ufs
|
||||
uhci_hcd
|
||||
uhid
|
||||
uinput
|
||||
uio
|
||||
uio_pdrv_genirq
|
||||
unix_diag
|
||||
usb_common
|
||||
usb_storage
|
||||
usb_wwan
|
||||
usbcore
|
||||
usbhid
|
||||
usbip_core
|
||||
usbip_host
|
||||
usbmon
|
||||
usbnet
|
||||
uvc
|
||||
uvcvideo
|
||||
uvesafb
|
||||
v4l2_dv_timings
|
||||
veth
|
||||
vfat
|
||||
vfio
|
||||
vfio_iommu_type1
|
||||
vfio_pci
|
||||
vfio_pci_core
|
||||
vhost
|
||||
vhost_iotlb
|
||||
vhost_net
|
||||
video
|
||||
videobuf2_common
|
||||
videobuf2_memops
|
||||
videobuf2_v4l2
|
||||
videobuf2_vmalloc
|
||||
videodev
|
||||
virtio_pci
|
||||
virtio_pci_legacy_dev
|
||||
virtio_pci_modern_dev
|
||||
virtio_scsi
|
||||
vivaldi_fmap
|
||||
vmw_vmci
|
||||
vmw_vsock_virtio_transport_common
|
||||
vmw_vsock_vmci_transport
|
||||
vsock
|
||||
vsock_loopback
|
||||
wacom
|
||||
watchdog
|
||||
wireguard
|
||||
wireless_hotkey
|
||||
wmi
|
||||
wmi_bmof
|
||||
x86_pkg_temp_thermal
|
||||
x_tables
|
||||
xc2028
|
||||
xc4000
|
||||
xc5000
|
||||
xfrm6_tunnel
|
||||
xfrm_interface
|
||||
xfs
|
||||
xhci_hcd
|
||||
xhci_pci
|
||||
xhci_pci_renesas
|
||||
xor
|
||||
xpad
|
||||
xt_CHECKSUM
|
||||
xt_LOG
|
||||
xt_MASQUERADE
|
||||
xt_NFQUEUE
|
||||
xt_REDIRECT
|
||||
xt_addrtype
|
||||
xt_cgroup
|
||||
xt_comment
|
||||
xt_conntrack
|
||||
xt_hl
|
||||
xt_limit
|
||||
xt_mark
|
||||
xt_nat
|
||||
xt_recent
|
||||
xt_state
|
||||
xt_tcpudp
|
||||
xxhash_generic
|
||||
zlib_deflate
|
||||
zram
|
@@ -1,14 +0,0 @@
|
||||
[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
|
||||
|
@@ -1,10 +0,0 @@
|
||||
#!/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:
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,677 +0,0 @@
|
||||
8021q
|
||||
8250_dw
|
||||
842
|
||||
842_compress
|
||||
842_decompress
|
||||
9p
|
||||
9pnet
|
||||
9pnet_virtio
|
||||
ac97_bus
|
||||
acer_wireless
|
||||
acer_wmi
|
||||
acpi_cpufreq
|
||||
acpi_mdio
|
||||
acpi_pad
|
||||
acpi_tad
|
||||
acpi_thermal_rel
|
||||
aesni_intel
|
||||
af_alg
|
||||
af_key
|
||||
af_packet
|
||||
agpgart
|
||||
ahci
|
||||
algif_aead
|
||||
algif_hash
|
||||
algif_skcipher
|
||||
alx
|
||||
amd64_edac
|
||||
amd_pmc
|
||||
amd_pstate
|
||||
amdgpu
|
||||
amdxcp
|
||||
apple_mfi_fastcharge
|
||||
appletalk
|
||||
asn1_encoder
|
||||
asus_atk0110
|
||||
asus_nb_wmi
|
||||
asus_wmi
|
||||
ata_generic
|
||||
ata_piix
|
||||
ath
|
||||
ath9k_common
|
||||
ath9k_htc
|
||||
ath9k_hw
|
||||
atkbd
|
||||
atl1c
|
||||
auth_rpcgss
|
||||
autofs4
|
||||
battery
|
||||
bch
|
||||
binder
|
||||
binfmt_misc
|
||||
blake2b_generic
|
||||
bluetooth
|
||||
bnep
|
||||
bpf
|
||||
bpf_preload
|
||||
br_netfilter
|
||||
bridge
|
||||
btbcm
|
||||
btcoexist
|
||||
btintel
|
||||
btmtk
|
||||
btrfs
|
||||
btrtl
|
||||
btusb
|
||||
button
|
||||
cbc
|
||||
ccm
|
||||
ccp
|
||||
cdc_acm
|
||||
cdc_ether
|
||||
cdc_mbim
|
||||
cdc_ncm
|
||||
cdc_wdm
|
||||
cdrom
|
||||
cec
|
||||
cfbcopyarea
|
||||
cfbfillrect
|
||||
cfbimgblt
|
||||
cfg80211
|
||||
cgroup
|
||||
ch341
|
||||
chacha_x86_64
|
||||
chipreg
|
||||
cifs
|
||||
cifs_arc4
|
||||
cifs_md4
|
||||
cls_cgroup
|
||||
cmac
|
||||
cmdlinepart
|
||||
coretemp
|
||||
cpufreq_ondemand
|
||||
crc16
|
||||
crc32_generic
|
||||
crc32_pclmul
|
||||
crc32c_generic
|
||||
crc32c_intel
|
||||
crc64
|
||||
crc64_rocksoft
|
||||
crc64_rocksoft_generic
|
||||
crc_itu_t
|
||||
crct10dif_pclmul
|
||||
cryptd
|
||||
crypto_null
|
||||
crypto_simd
|
||||
crypto_user
|
||||
curve25519_x86_64
|
||||
cuse
|
||||
dca
|
||||
des_generic
|
||||
dm_crypt
|
||||
dm_log
|
||||
dm_mirror
|
||||
dm_mod
|
||||
dm_multipath
|
||||
dm_region_hash
|
||||
dm_round_robin
|
||||
dmi_sysfs
|
||||
dns_resolver
|
||||
drm
|
||||
drm_buddy
|
||||
drm_display_helper
|
||||
drm_kms_helper
|
||||
drm_panel_orientation_quirks
|
||||
drm_suballoc_helper
|
||||
drm_ttm_helper
|
||||
dvb_core
|
||||
ebtable_filter
|
||||
ebtables
|
||||
ec_sys
|
||||
ecb
|
||||
ecc
|
||||
ecdh_generic
|
||||
edac_mce_amd
|
||||
ee1004
|
||||
eeepc_wmi
|
||||
eeprom
|
||||
efi_pstore
|
||||
efivarfs
|
||||
ehci_hcd
|
||||
ehci_pci
|
||||
enclosure
|
||||
encrypted_keys
|
||||
evdev
|
||||
exfat
|
||||
ext2
|
||||
ext4
|
||||
f2fs
|
||||
fan
|
||||
fat
|
||||
fb_sys_fops
|
||||
ff_memless
|
||||
fixed_phy
|
||||
fjes
|
||||
fscache
|
||||
ftdi_sio
|
||||
fuse
|
||||
fwnode_mdio
|
||||
garp
|
||||
gcm
|
||||
gf128mul
|
||||
ghash_clmulni_intel
|
||||
ghash_generic
|
||||
gigabyte_wmi
|
||||
gpio_amdpt
|
||||
gpio_generic
|
||||
gpu_sched
|
||||
grace
|
||||
hfs
|
||||
hfsplus
|
||||
hid
|
||||
hid_apple
|
||||
hid_asus
|
||||
hid_generic
|
||||
hid_hyperv
|
||||
hid_logitech_dj
|
||||
hid_logitech_hidpp
|
||||
hid_microsoft
|
||||
hid_multitouch
|
||||
hid_nintendo
|
||||
hid_playstation
|
||||
hid_roccat
|
||||
hid_roccat_common
|
||||
hid_roccat_koneplus
|
||||
hid_roccat_ryos
|
||||
hid_sony
|
||||
hid_steam
|
||||
hid_wiimote
|
||||
hidp
|
||||
hp_wmi
|
||||
hv_balloon
|
||||
hv_netvsc
|
||||
hv_storvsc
|
||||
hv_utils
|
||||
hv_vmbus
|
||||
hwmon_vid
|
||||
hyperv_drm
|
||||
hyperv_keyboard
|
||||
i2c_algo_bit
|
||||
i2c_core
|
||||
i2c_dev
|
||||
i2c_hid
|
||||
i2c_hid_acpi
|
||||
i2c_i801
|
||||
i2c_mux
|
||||
i2c_nvidia_gpu
|
||||
i2c_piix4
|
||||
i2c_smbus
|
||||
i8042
|
||||
i915
|
||||
iTCO_vendor_support
|
||||
iTCO_wdt
|
||||
ib_cm
|
||||
ib_core
|
||||
idma64
|
||||
igb
|
||||
igc
|
||||
inet_diag
|
||||
input_leds
|
||||
int3400_thermal
|
||||
int3403_thermal
|
||||
int340x_thermal_zone
|
||||
intel_agp
|
||||
intel_cstate
|
||||
intel_gtt
|
||||
intel_hid
|
||||
intel_lpss
|
||||
intel_lpss_pci
|
||||
intel_pch_thermal
|
||||
intel_pmc_bxt
|
||||
intel_powerclamp
|
||||
intel_rapl_common
|
||||
intel_rapl_msr
|
||||
intel_soc_dts_iosf
|
||||
intel_tcc_cooling
|
||||
intel_uncore
|
||||
intel_vsec
|
||||
intel_wmi_thunderbolt
|
||||
iommu_v2
|
||||
iommufd
|
||||
ip6_tables
|
||||
ip6_udp_tunnel
|
||||
ip6t_REJECT
|
||||
ip6t_rt
|
||||
ip6table_filter
|
||||
ip6table_mangle
|
||||
ip6table_nat
|
||||
ip6table_raw
|
||||
ip6table_security
|
||||
ip_set
|
||||
ip_tables
|
||||
ipmi_devintf
|
||||
ipmi_msghandler
|
||||
ipt_REJECT
|
||||
iptable_filter
|
||||
iptable_mangle
|
||||
iptable_nat
|
||||
iptable_raw
|
||||
iptable_security
|
||||
ipv6
|
||||
ir_kbd_i2c
|
||||
irqbypass
|
||||
isofs
|
||||
it87
|
||||
iw_cm
|
||||
iwlmei
|
||||
iwlmvm
|
||||
iwlwifi
|
||||
jbd2
|
||||
jc42
|
||||
jfs
|
||||
joydev
|
||||
k10temp
|
||||
ksmbd
|
||||
kvm
|
||||
kvm_amd
|
||||
kvm_intel
|
||||
led_class_multicolor
|
||||
ledtrig_audio
|
||||
ledtrig_timer
|
||||
libahci
|
||||
libarc4
|
||||
libata
|
||||
libchacha
|
||||
libchacha20poly1305
|
||||
libcrc32c
|
||||
libcurve25519_generic
|
||||
libdes
|
||||
libphy
|
||||
libps2
|
||||
llc
|
||||
lm75
|
||||
lm83
|
||||
lockd
|
||||
loop
|
||||
lpc_ich
|
||||
lz4
|
||||
lz4_compress
|
||||
lz4hc_compress
|
||||
lzo
|
||||
lzo_rle
|
||||
mac80211
|
||||
mac_hid
|
||||
mbcache
|
||||
mc
|
||||
mc44s803
|
||||
md4
|
||||
md_mod
|
||||
mdio
|
||||
mdio_devres
|
||||
mei
|
||||
mei_gsc
|
||||
mei_hdcp
|
||||
mei_me
|
||||
mei_pxp
|
||||
mii
|
||||
minix
|
||||
mmc_core
|
||||
mousedev
|
||||
mptcp_diag
|
||||
mrp
|
||||
msdos
|
||||
msr
|
||||
mt20xx
|
||||
mt76
|
||||
mt76_connac_lib
|
||||
mt76_usb
|
||||
mt76x02_lib
|
||||
mt76x02_usb
|
||||
mt76x2_common
|
||||
mt76x2u
|
||||
mt7921_common
|
||||
mt7921e
|
||||
mtd
|
||||
mxm_wmi
|
||||
nandcore
|
||||
nbd
|
||||
nct6683
|
||||
nct6775
|
||||
nct6775_core
|
||||
netfs
|
||||
nf_conntrack
|
||||
nf_conntrack_broadcast
|
||||
nf_conntrack_ftp
|
||||
nf_conntrack_h323
|
||||
nf_conntrack_irc
|
||||
nf_conntrack_netbios_ns
|
||||
nf_conntrack_netlink
|
||||
nf_conntrack_pptp
|
||||
nf_conntrack_sip
|
||||
nf_conntrack_tftp
|
||||
nf_defrag_ipv4
|
||||
nf_defrag_ipv6
|
||||
nf_nat
|
||||
nf_nat_ftp
|
||||
nf_nat_h323
|
||||
nf_nat_irc
|
||||
nf_nat_pptp
|
||||
nf_nat_sip
|
||||
nf_nat_tftp
|
||||
nf_reject_ipv4
|
||||
nf_reject_ipv6
|
||||
nf_tables
|
||||
nfnetlink
|
||||
nfnetlink_log
|
||||
nfnetlink_queue
|
||||
nfs
|
||||
nfsv4
|
||||
nft_chain_nat
|
||||
nft_compat
|
||||
nft_ct
|
||||
nft_fib
|
||||
nft_fib_inet
|
||||
nft_fib_ipv4
|
||||
nft_fib_ipv6
|
||||
nft_masq
|
||||
nft_nat
|
||||
nft_reject
|
||||
nft_reject_inet
|
||||
nft_reject_ipv4
|
||||
nft_reject_ipv6
|
||||
nft_xfrm
|
||||
nilfs2
|
||||
nlmon
|
||||
nls_ascii
|
||||
nls_cp437
|
||||
nls_iso8859_1
|
||||
nls_utf8
|
||||
nouveau
|
||||
ntfs
|
||||
ntfs3
|
||||
nvidia_wmi_ec_backlight
|
||||
nvme
|
||||
nvme_common
|
||||
nvme_core
|
||||
nvmem_rave_sp_eeprom
|
||||
nvram
|
||||
overlay
|
||||
p8022
|
||||
parport
|
||||
parport_pc
|
||||
pata_acpi
|
||||
pcc_cpufreq
|
||||
pcspkr
|
||||
pinctrl_alderlake
|
||||
pinctrl_amd
|
||||
pkcs8_key_parser
|
||||
pktcdvd
|
||||
platform_profile
|
||||
pmt_class
|
||||
pmt_telemetry
|
||||
poly1305_x86_64
|
||||
polyval_clmulni
|
||||
polyval_generic
|
||||
ppdev
|
||||
processor_thermal_device
|
||||
processor_thermal_device_pci_legacy
|
||||
processor_thermal_mbox
|
||||
processor_thermal_rapl
|
||||
processor_thermal_rfim
|
||||
psmouse
|
||||
psnap
|
||||
qcserial
|
||||
qrtr
|
||||
r8152
|
||||
r8153_ecm
|
||||
r8169
|
||||
radeon
|
||||
raid1
|
||||
raid6_pq
|
||||
rapl
|
||||
rave_sp
|
||||
raw_diag
|
||||
rc_core
|
||||
realtek
|
||||
rfcomm
|
||||
rfkill
|
||||
rndis_host
|
||||
rndis_wlan
|
||||
rng_core
|
||||
roles
|
||||
rpcsec_gss_krb5
|
||||
rt2800lib
|
||||
rt2800usb
|
||||
rt2x00lib
|
||||
rt2x00usb
|
||||
rtl8192ee
|
||||
rtl8723_common
|
||||
rtl8723ae
|
||||
rtl8723be
|
||||
rtl8821ae
|
||||
rtl_pci
|
||||
rtlwifi
|
||||
rtsx_pci
|
||||
rtsx_pci_sdmmc
|
||||
rtw88_8821c
|
||||
rtw88_8821ce
|
||||
rtw88_core
|
||||
rtw88_pci
|
||||
sch_cake
|
||||
sch_fq_codel
|
||||
sch_ingress
|
||||
scsi_common
|
||||
scsi_mod
|
||||
scsi_transport_fc
|
||||
scsi_transport_sas
|
||||
sd_mod
|
||||
selftests
|
||||
serial_multi_instantiate
|
||||
serio
|
||||
serio_raw
|
||||
ses
|
||||
sg
|
||||
sha512_ssse3
|
||||
snd
|
||||
snd_acp3x_pdm_dma
|
||||
snd_acp3x_rn
|
||||
snd_acp6x_pdm_dma
|
||||
snd_acp_config
|
||||
snd_acp_pci
|
||||
snd_aloop
|
||||
snd_compress
|
||||
snd_ctl_led
|
||||
snd_hda_codec
|
||||
snd_hda_codec_generic
|
||||
snd_hda_codec_hdmi
|
||||
snd_hda_codec_realtek
|
||||
snd_hda_core
|
||||
snd_hda_ext_core
|
||||
snd_hda_intel
|
||||
snd_hrtimer
|
||||
snd_hwdep
|
||||
snd_intel_dspcfg
|
||||
snd_intel_sdw_acpi
|
||||
snd_pci_acp3x
|
||||
snd_pci_acp5x
|
||||
snd_pci_acp6x
|
||||
snd_pci_ps
|
||||
snd_pcm
|
||||
snd_pcm_dmaengine
|
||||
snd_rawmidi
|
||||
snd_rn_pci_acp3x
|
||||
snd_rpl_pci_acp6x
|
||||
snd_seq
|
||||
snd_seq_device
|
||||
snd_seq_dummy
|
||||
snd_seq_midi
|
||||
snd_seq_midi_event
|
||||
snd_seq_oss
|
||||
snd_seq_virmidi
|
||||
snd_soc_acp6x_mach
|
||||
snd_soc_acpi
|
||||
snd_soc_acpi_intel_match
|
||||
snd_soc_core
|
||||
snd_soc_dmic
|
||||
snd_soc_hdac_hda
|
||||
snd_soc_skl
|
||||
snd_soc_sst_dsp
|
||||
snd_soc_sst_ipc
|
||||
snd_sof
|
||||
snd_sof_amd_acp
|
||||
snd_sof_amd_rembrandt
|
||||
snd_sof_amd_renoir
|
||||
snd_sof_intel_hda
|
||||
snd_sof_intel_hda_common
|
||||
snd_sof_intel_hda_mlink
|
||||
snd_sof_pci
|
||||
snd_sof_pci_intel_cnl
|
||||
snd_sof_pci_intel_tgl
|
||||
snd_sof_probes
|
||||
snd_sof_utils
|
||||
snd_sof_xtensa_dsp
|
||||
snd_timer
|
||||
snd_ua101
|
||||
snd_ump
|
||||
snd_usb_audio
|
||||
snd_usb_us122l
|
||||
snd_usb_usx2y
|
||||
snd_usbmidi_lib
|
||||
snd_virmidi
|
||||
soundcore
|
||||
soundwire_bus
|
||||
soundwire_cadence
|
||||
soundwire_generic_allocation
|
||||
soundwire_intel
|
||||
sp5100_tco
|
||||
sparse_keymap
|
||||
spi_intel
|
||||
spi_intel_pci
|
||||
spi_nor
|
||||
squashfs
|
||||
sr_mod
|
||||
st
|
||||
stp
|
||||
sunrpc
|
||||
syscopyarea
|
||||
sysfillrect
|
||||
sysimgblt
|
||||
t10_pi
|
||||
tap
|
||||
tcp_bbr
|
||||
tcp_diag
|
||||
tda18271
|
||||
tda827x
|
||||
tda8290
|
||||
tda9887
|
||||
tea5761
|
||||
tea5767
|
||||
tee
|
||||
tg3
|
||||
thermal
|
||||
thinkpad_acpi
|
||||
thunderbolt
|
||||
tiny_power_button
|
||||
tls
|
||||
tpm
|
||||
tpm_crb
|
||||
tpm_tis
|
||||
tpm_tis_core
|
||||
trusted
|
||||
ttm
|
||||
tun
|
||||
tuner_simple
|
||||
tuner_types
|
||||
tunnel4
|
||||
tunnel6
|
||||
typec
|
||||
typec_ucsi
|
||||
uas
|
||||
ucsi_acpi
|
||||
ucsi_ccg
|
||||
udf
|
||||
udp_diag
|
||||
udp_tunnel
|
||||
ufs
|
||||
uhci_hcd
|
||||
uhid
|
||||
uinput
|
||||
uio
|
||||
uio_pdrv_genirq
|
||||
unix_diag
|
||||
usb_common
|
||||
usb_storage
|
||||
usb_wwan
|
||||
usbcore
|
||||
usbhid
|
||||
usbip_core
|
||||
usbip_host
|
||||
usbmon
|
||||
usbnet
|
||||
uvc
|
||||
uvcvideo
|
||||
uvesafb
|
||||
v4l2_dv_timings
|
||||
veth
|
||||
vfat
|
||||
vfio
|
||||
vfio_iommu_type1
|
||||
vfio_pci
|
||||
vfio_pci_core
|
||||
vhost
|
||||
vhost_iotlb
|
||||
vhost_net
|
||||
video
|
||||
videobuf2_common
|
||||
videobuf2_memops
|
||||
videobuf2_v4l2
|
||||
videobuf2_vmalloc
|
||||
videodev
|
||||
virtio_pci
|
||||
virtio_pci_legacy_dev
|
||||
virtio_pci_modern_dev
|
||||
virtio_scsi
|
||||
vivaldi_fmap
|
||||
vmw_vmci
|
||||
vmw_vsock_virtio_transport_common
|
||||
vmw_vsock_vmci_transport
|
||||
vsock
|
||||
vsock_loopback
|
||||
wacom
|
||||
watchdog
|
||||
wireguard
|
||||
wireless_hotkey
|
||||
wmi
|
||||
wmi_bmof
|
||||
x86_pkg_temp_thermal
|
||||
x_tables
|
||||
xc2028
|
||||
xc4000
|
||||
xc5000
|
||||
xfrm6_tunnel
|
||||
xfrm_interface
|
||||
xfs
|
||||
xhci_hcd
|
||||
xhci_pci
|
||||
xhci_pci_renesas
|
||||
xor
|
||||
xpad
|
||||
xt_CHECKSUM
|
||||
xt_LOG
|
||||
xt_MASQUERADE
|
||||
xt_NFQUEUE
|
||||
xt_REDIRECT
|
||||
xt_addrtype
|
||||
xt_cgroup
|
||||
xt_comment
|
||||
xt_conntrack
|
||||
xt_hl
|
||||
xt_limit
|
||||
xt_mark
|
||||
xt_nat
|
||||
xt_recent
|
||||
xt_state
|
||||
xt_tcpudp
|
||||
xxhash_generic
|
||||
zlib_deflate
|
||||
zram
|
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# List of kernels that are maintained upstream
|
||||
_current_kernels=("6.9" "6.8" "6.7" "6.6" "6.5" "6.4" "6.1" "5.15")
|
||||
_current_kernels=("6.7" "6.6" "6.5" "6.4" "6.1" "5.15")
|
||||
|
||||
# List of kernels that are no longer maintained either upstream or locally
|
||||
_eol_kernels=("6.3" "6.2" "6.0" "5.19" "5.18" "5.17" "5.16" "5.14" "5.13" "5.12" "5.11" "5.9" "5.8" "5.7" "5.4.230" "5.10.135")
|
||||
@@ -23,10 +23,6 @@ fi
|
||||
|
||||
if [[ -z "$_git_mirror" ]]; then
|
||||
_git_mirror="${_git_remote_names[2]}"
|
||||
if $( ! timeout 5 git ls-remote ${_kernel_git_remotes[$_git_mirror]} >/dev/null ) || [[ "$( git ls-remote ${_kernel_git_remotes[$_git_mirror]} | head -n 1 )" = *502* ]]; then
|
||||
warning "kernel.org unreachable or too long to respond"
|
||||
_git_mirror="${_git_remote_names[0]}"
|
||||
fi
|
||||
echo "Defaulting to ${_git_mirror} git mirror"
|
||||
fi
|
||||
|
||||
@@ -43,46 +39,40 @@ done
|
||||
# PREEMPT_RT's supported kernel subversion
|
||||
typeset -Ag _rt_subver_map
|
||||
_rt_subver_map=(
|
||||
["5.4"]="271"
|
||||
["5.4"]="248"
|
||||
["5.9"]="1"
|
||||
["5.10"]="213"
|
||||
["5.10"]="192"
|
||||
["5.11"]="4"
|
||||
["5.14"]="2"
|
||||
["5.15"]="153"
|
||||
["5.15"]="129"
|
||||
["5.16"]="2"
|
||||
["5.17"]="1"
|
||||
["6.0"]="5"
|
||||
["6.1"]="83"
|
||||
["6.1"]="59"
|
||||
["6.3"]="3"
|
||||
["6.4"]="6"
|
||||
["6.5"]="2"
|
||||
["6.6"]="23"
|
||||
["6.7"]="0"
|
||||
["6.8"]="2"
|
||||
["6.9"]="rc2"
|
||||
["6.6"]="rc6"
|
||||
)
|
||||
|
||||
# PREEMPT_RT's patch revision for the kernel
|
||||
# We separated this to allow for forcing the application of the patch when _preempt_rt_force=1 on version mismatch
|
||||
typeset -Ag _rt_rev_map
|
||||
_rt_rev_map=(
|
||||
["5.4"]="89"
|
||||
["5.4"]="83"
|
||||
["5.9"]="20"
|
||||
["5.10"]="105"
|
||||
["5.10"]="92"
|
||||
["5.11"]="11"
|
||||
["5.14"]="21"
|
||||
["5.15"]="75"
|
||||
["5.15"]="67"
|
||||
["5.16"]="19"
|
||||
["5.17"]="17"
|
||||
["6.0"]="14"
|
||||
["6.1"]="28"
|
||||
["6.1"]="16"
|
||||
["6.3"]="15"
|
||||
["6.4"]="8"
|
||||
["6.5"]="8"
|
||||
["6.6"]="28"
|
||||
["6.7"]="6"
|
||||
["6.8"]="11"
|
||||
["6.9"]="1"
|
||||
["6.6"]="10"
|
||||
)
|
||||
|
||||
_undefine() {
|
||||
@@ -276,7 +266,6 @@ _set_cpu_scheduler() {
|
||||
["upds"]="Undead PDS (TkG)"
|
||||
["cacule"]="CacULE"
|
||||
["tt"]="TT (TaskType)"
|
||||
["echo"]="ECHO (Enhanced CPU Handling Orchestrator)"
|
||||
["bore"]="BORE (Burst-Oriented Response Enhancer) CPU Scheduler"
|
||||
["bore-eevdf"]="BORE (Burst-Oriented Response Enhancer - EEVDF variant) CPU Scheduler"
|
||||
)
|
||||
@@ -321,11 +310,7 @@ _set_cpu_scheduler() {
|
||||
elif [ "$_kver" = "605" ]; then
|
||||
_avail_cpu_scheds=("cfs" "eevdf" "pds" "bmq" "tt" "bore" "bore-eevdf")
|
||||
elif [ "$_kver" = "606" ]; then
|
||||
_avail_cpu_scheds=("eevdf" "bore" "pds" "bmq")
|
||||
elif [ "$_kver" = "607" ]; then
|
||||
_avail_cpu_scheds=("eevdf" "bore" "echo" "pds" "bmq")
|
||||
elif [ "$_kver" = "608" ]; then
|
||||
_avail_cpu_scheds=("eevdf" "bore" "echo" "pds" "bmq")
|
||||
_avail_cpu_scheds=("eevdf" "bore")
|
||||
else
|
||||
_avail_cpu_scheds=("$_default_cpu_sched")
|
||||
fi
|
||||
@@ -338,6 +323,12 @@ _set_cpu_scheduler() {
|
||||
if [[ "${_avail_cpu_scheds[*]}" =~ "eevdf" ]] && ! [[ "${_avail_cpu_scheds[*]}" =~ "cfs" ]]; then
|
||||
_avail_cpu_scheds_rt=("eevdf")
|
||||
fi
|
||||
if [[ "${_avail_cpu_scheds[*]}" =~ "bore" ]]; then
|
||||
_avail_cpu_scheds_rt+=("bore")
|
||||
fi
|
||||
if [[ "${_avail_cpu_scheds[*]}" =~ "bore-eevdf" ]] && ! [[ "${_avail_cpu_scheds[*]}" =~ "cfs" ]]; then
|
||||
_avail_cpu_scheds_rt+=("bore-eevdf")
|
||||
fi
|
||||
_avail_cpu_scheds=(${_avail_cpu_scheds_rt[*]})
|
||||
fi
|
||||
|
||||
@@ -675,14 +666,11 @@ _tkg_srcprep() {
|
||||
_patch_name="more-uarches-for-kernel-5.8-5.14"
|
||||
elif [[ "$_kver" =~ ^(515|516)$ ]]; then
|
||||
_patch_name="more-uarches-for-kernel-5.15-5.16"
|
||||
elif ( [ "$_kver" = "601" ] && [ "$_sub" -lt "79" ] ) || ( [ "$_kver" = "606" ] && [ "$_sub" -lt "18" ] ) || ( [ "$_kver" = "607" ] && [ "$_sub" -lt "6" ] ) || [[ "$_kver" =~ ^(517|518|519|600|602|603|604|605)$ ]]; then
|
||||
_patch_name="more-uarches-for-kernel-5.17-6.1.78"
|
||||
elif [[ "$_kver" =~ ^(601|606|607)$ ]]; then
|
||||
_patch_name="more-uarches-for-kernel-6.1.79-6.8-rc3"
|
||||
else
|
||||
_patch_name="more-uarches-for-kernel-6.8-rc4%2B"
|
||||
_patch_name="more-uarches-for-kernel-5.17%2B"
|
||||
fi
|
||||
|
||||
|
||||
curl "https://raw.githubusercontent.com/graysky2/kernel_compiler_patch/master/${_outdated}${_patch_name}.patch" > "$srcdir"/"${_patch_name}".patch || true
|
||||
tkgpatch="${_patch_location}/${_patch_name}.patch"
|
||||
if [ -e "$tkgpatch" ]; then
|
||||
@@ -702,10 +690,6 @@ _tkg_srcprep() {
|
||||
else
|
||||
_separator="."
|
||||
fi
|
||||
if [[ "${preempt_rt_ksubver}" == 0 ]]; then
|
||||
_separator=
|
||||
preempt_rt_ksubver=
|
||||
fi
|
||||
preempt_rt_file_gz="patch-${_basekernel}${_separator}${preempt_rt_ksubver}-rt${_rt_rev_map["$_basekernel"]}.patch.gz"
|
||||
preempt_rt_file=`basename ${preempt_rt_file_gz} .gz`
|
||||
curl "https://cdn.kernel.org/pub/linux/kernel/projects/rt/${_basekernel}/${preempt_rt_file_gz}" > "$srcdir"/"${preempt_rt_file_gz}"
|
||||
@@ -765,14 +749,32 @@ _tkg_srcprep() {
|
||||
tkgpatch="$srcdir/0002-mm-Support-soft-dirty-flag-read-with-reset.patch" && _tkg_patcher
|
||||
|
||||
# prjc/bmq patch rev
|
||||
if [ "$_kver" = "508" ] || [ "$_kver" = "507" ] || [ "$_kver" = "509" ] || [ "$_kver" = "511" ] || [ "$_kver" = "513" ] || [ "$_kver" = "514" ]; then
|
||||
if [ "$_kver" = "508" ] || [ "$_kver" = "507" ]; then
|
||||
rev=3
|
||||
elif [ "$_kver" = "510" ] || [ "$_kver" = "608" ]; then
|
||||
elif [ "$_kver" = "509" ]; then
|
||||
rev=3
|
||||
elif [ "$_kver" = "510" ]; then
|
||||
rev=5
|
||||
elif [ "$_kver" = "512" ] || [ "$_kver" = "515" ] || [ "$_kver" = "516" ] || [ "$_kver" = "601" ] || [ "$_kver" = "603" ] || [ "$_kver" = "608" ]; then
|
||||
elif [ "$_kver" = "511" ]; then
|
||||
rev=3
|
||||
elif [ "$_kver" = "512" ]; then
|
||||
rev=1
|
||||
elif [ "$_kver" = "518" ] || [ "$_kver" = "602" ] || [ "$_kver" = "607" ]; then
|
||||
elif [ "$_kver" = "513" ]; then
|
||||
rev=3
|
||||
elif [ "$_kver" = "514" ]; then
|
||||
rev=3
|
||||
elif [ "$_kver" = "515" ]; then
|
||||
rev=1
|
||||
elif [ "$_kver" = "516" ]; then
|
||||
rev=1
|
||||
elif [ "$_kver" = "518" ]; then
|
||||
rev=2
|
||||
elif [ "$_kver" = "601" ]; then
|
||||
rev=1
|
||||
elif [ "$_kver" = "602" ]; then
|
||||
rev=2
|
||||
elif [ "$_kver" = "603" ]; then
|
||||
rev=1
|
||||
else
|
||||
rev=0
|
||||
fi
|
||||
@@ -852,10 +854,6 @@ _tkg_srcprep() {
|
||||
curl "https://raw.githubusercontent.com/hamadmarri/TT-CPU-Scheduler/master/patches/${_basekernel}/high-hz.patch" > "$srcdir"/tt_high_hz.patch
|
||||
tkgpatch="$srcdir/tt_high_hz.patch" && _tkg_patcher
|
||||
fi
|
||||
elif [ "${_cpusched}" = "echo" ]; then
|
||||
_msg="Applying ECHO patch"
|
||||
curl "https://raw.githubusercontent.com/hamadmarri/ECHO-CPU-Scheduler/main/${_basekernel}.y/linux-${_basekernel}-echo.patch" > "$srcdir"/0001-echo.patch
|
||||
tkgpatch="$srcdir/0001-echo.patch" && _tkg_patcher
|
||||
elif [ "${_cpusched}" = "bore" ]; then
|
||||
_msg="Applying BORE patch"
|
||||
curl "https://raw.githubusercontent.com/CachyOS/kernel-patches/master/${_basekernel}/sched/0001-bore.patch" > "$srcdir"/0001-bore.patch
|
||||
@@ -925,7 +923,7 @@ _tkg_srcprep() {
|
||||
|
||||
# Set some -tkg defaults
|
||||
_disable "DYNAMIC_FAULT" "DEFAULT_FQ_CODEL" "WERROR"
|
||||
_enable "DEFAULT_CAKE" "AMD_PRIVATE_COLOR"
|
||||
_enable "DEFAULT_CAKE"
|
||||
if [ "$_kver" = "504" ]; then
|
||||
_module "TP_SMAPI"
|
||||
_enable "RAID6_USE_PREFER_GEN"
|
||||
@@ -944,10 +942,6 @@ _tkg_srcprep() {
|
||||
_disable "CPU_FREQ_DEFAULT_GOV_ONDEMAND" "CPU_FREQ_DEFAULT_GOV_CONSERVATIVE" "CPU_FREQ_DEFAULT_GOV_PERFORMANCE" "CPU_FREQ_DEFAULT_GOV_PERFORMANCE_NODEF"
|
||||
_module "BLK_DEV_LOOP"
|
||||
|
||||
# Arch tends to set voluntary preemption when moving kernels to LTS, which we don't want as default
|
||||
_disable "PREEMPT_VOLUNTARY"
|
||||
_enable "PREEMPT"
|
||||
|
||||
# This leads to all kinds of issues everytime Arch enables it in defconfig. Let's disable it and be happy.
|
||||
_disable "SYSFB_SIMPLEFB"
|
||||
|
||||
@@ -1002,7 +996,6 @@ _tkg_srcprep() {
|
||||
# Skip dbg package creation on non-Arch
|
||||
if [ "$_distro" != "Arch" ]; then
|
||||
_disable "DEBUG_INFO"
|
||||
_enable "DEBUG_INFO_NONE"
|
||||
fi
|
||||
|
||||
if [ "$_compiler_name" = "-llvm" ]; then
|
||||
@@ -1123,9 +1116,6 @@ _tkg_srcprep() {
|
||||
elif [ "${_cpusched}" = "tt" ]; then
|
||||
_enable "TT_SCHED"
|
||||
_enable "TT_ACCOUNTING_STATS"
|
||||
elif [ "${_cpusched}" = "echo" ]; then
|
||||
_enable "ECHO_SCHED"
|
||||
_disable "FAIR_GROUP_SCHED" "SCHED_AUTOGROUP" "SCHED_CORE"
|
||||
elif [ "${_cpusched}" = "upds" ]; then
|
||||
# PDS default config
|
||||
_enable "SCHED_PDS"
|
||||
@@ -1334,9 +1324,6 @@ _tkg_srcprep() {
|
||||
if [ "$_cpusched" = "cacule" ]; then
|
||||
_avail_timer_frequencies+=("2000")
|
||||
_avail_timer_frequencies_text+=("2000 Hz")
|
||||
elif [ "$_cpusched" = "echo" ]; then
|
||||
_avail_timer_frequencies=("625")
|
||||
_avail_timer_frequencies_text=("625 Hz")
|
||||
fi
|
||||
|
||||
typeset -A _default_timer_frequencies_index
|
||||
@@ -1345,7 +1332,6 @@ _tkg_srcprep() {
|
||||
["muqss"]="1"
|
||||
["cacule"]="6"
|
||||
["tt"]="5"
|
||||
["echo"]="0"
|
||||
["upds"]="5"
|
||||
["cfs"]="5"
|
||||
["eevdf"]="5"
|
||||
@@ -1657,11 +1643,9 @@ CONFIG_DEBUG_INFO_BTF_MODULES=y\r
|
||||
fi
|
||||
|
||||
# OpenRGB support
|
||||
tkgpatch="$srcdir/0014-OpenRGB.patch"
|
||||
if [ -e "$tkgpatch" ]; then
|
||||
if [ "$_openrgb" = "true" ]; then
|
||||
_msg="Import OpenRGB patch" && _tkg_patcher
|
||||
fi
|
||||
if [ "$_openrgb" = "true" ]; then
|
||||
tkgpatch="$srcdir/0014-OpenRGB.patch"
|
||||
_msg="Import OpenRGB patch" && _tkg_patcher
|
||||
fi
|
||||
|
||||
# We're done with tkgpatch
|
||||
@@ -1797,16 +1781,6 @@ CONFIG_DEBUG_INFO_BTF_MODULES=y\r
|
||||
msg2 "Setting config"
|
||||
make ${_config_updating} ${llvm_opt} |& tee -a "$_where"/logs/prepare.log.txt
|
||||
|
||||
# Modify the kernel config file to fit Fedora SELinux configuration
|
||||
if [ "$_distro" = "Fedora" ] ; then
|
||||
msg2 "SELinux activation for Fedora"
|
||||
_enable "AUDIT"
|
||||
_enable "SECURITY_SELINUX"
|
||||
_enable "DEFAULT_SECURITY_SELINUX"
|
||||
_disable "DEFAULT_SECURITY_DAC"
|
||||
scripts/config --set-str "LSM" "lockdown,yama,integrity,selinux,bpf,landlock"
|
||||
fi
|
||||
|
||||
# menuconfig / nconfig
|
||||
if [ -z "$_menunconfig" ]; then
|
||||
plain ""
|
||||
|
@@ -1,248 +0,0 @@
|
||||
From 23d7461352e269625f418ff525de2451fbfaef54 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.
|
||||
|
||||
v2: ported from 6.1 to 6.6
|
||||
|
||||
Signed-off-by: Kai Krakow <kai@kaishome.de>
|
||||
---
|
||||
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 3dd5be96691b4..daa4fc32de9a2 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -1072,6 +1072,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
|
||||
@@ -1163,6 +1165,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) {
|
||||
@@ -1220,9 +1224,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.
|
||||
@@ -1246,10 +1252,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;
|
||||
|
||||
@@ -1258,12 +1266,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)
|
||||
@@ -1276,40 +1306,86 @@ 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, -1UL) & PAGE_MASK;
|
||||
+ end = min(end, -1UL) & 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_each_vma(vmi, vma) {
|
||||
- if (!(vma->vm_flags & VM_SOFTDIRTY))
|
||||
- continue;
|
||||
- vm_flags_clear(vma, VM_SOFTDIRTY);
|
||||
- vma_set_page_prot(vma);
|
||||
+ if (mmap_read_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
}
|
||||
-
|
||||
+ if (!clear_range)
|
||||
+ for_each_vma(vmi, vma) {
|
||||
+ if (!(vma->vm_flags & VM_SOFTDIRTY))
|
||||
+ continue;
|
||||
+ mmap_read_unlock(mm);
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ for_each_vma(vmi, vma) {
|
||||
+ vm_flags_clear(vma, 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, mm, 0, -1UL);
|
||||
+ 0, mm, start, end);
|
||||
mmu_notifier_invalidate_range_start(&range);
|
||||
}
|
||||
- walk_page_range(mm, 0, -1, &clear_refs_walk_ops, &cp);
|
||||
+ else
|
||||
+ {
|
||||
+ if (mmap_write_lock_killable(mm)) {
|
||||
+ count = -EINTR;
|
||||
+ goto out_mm;
|
||||
+ }
|
||||
+ }
|
||||
+ walk_page_range(mm, start, end == -1UL ? -1 : 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);
|
||||
}
|
||||
@@ -1341,6 +1417,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_UFFD_WP BIT_ULL(57)
|
||||
#define PM_FILE BIT_ULL(61)
|
||||
#define PM_SWAP BIT_ULL(62)
|
||||
@@ -1415,13 +1492,13 @@ 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;
|
||||
if (pte_uffd_wp(pte))
|
||||
flags |= PM_UFFD_WP;
|
||||
} 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;
|
||||
if (pte_swp_uffd_wp(pte))
|
||||
flags |= PM_UFFD_WP;
|
||||
entry = pte_to_swp_entry(pte);
|
||||
@@ -1481,7 +1558,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 (pmd_uffd_wp(pmd))
|
||||
flags |= PM_UFFD_WP;
|
||||
if (pm->show_pfn)
|
||||
@@ -1505,7 +1582,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;
|
||||
if (pmd_swp_uffd_wp(pmd))
|
||||
flags |= PM_UFFD_WP;
|
||||
VM_BUG_ON(!is_pmd_migration_entry(pmd));
|
||||
--
|
||||
2.41.0
|
||||
|
@@ -1,353 +0,0 @@
|
||||
From 30aad6be7fa9513c818f33cf1e0e725920619145 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.
|
||||
|
||||
v2: ported from 6.1 to 6.6
|
||||
|
||||
Signed-off-by: Kai Krakow <kai@kaishome.de>
|
||||
---
|
||||
fs/proc/base.c | 3 +
|
||||
fs/proc/internal.h | 1 +
|
||||
fs/proc/task_mmu.c | 139 +++++++++++++++++++++++++++++++++++++++------
|
||||
3 files changed, 127 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/fs/proc/base.c b/fs/proc/base.c
|
||||
index ffd54617c3547..5683da416a891 100644
|
||||
--- a/fs/proc/base.c
|
||||
+++ b/fs/proc/base.c
|
||||
@@ -3284,6 +3284,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 9a8f32f21ff56..f3a16b26dd6e4 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 daa4fc32de9a2..291f530a8cfb2 100644
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -1094,7 +1094,7 @@ 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,
|
||||
+static inline bool clear_soft_dirty(struct vm_area_struct *vma,
|
||||
unsigned long addr, pte_t *pte)
|
||||
{
|
||||
/*
|
||||
@@ -1104,37 +1104,46 @@ static inline void clear_soft_dirty(struct vm_area_struct *vma,
|
||||
* of how soft-dirty works.
|
||||
*/
|
||||
pte_t ptent = ptep_get(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))
|
||||
@@ -1145,14 +1154,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
|
||||
|
||||
@@ -1407,6 +1419,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)
|
||||
@@ -1439,6 +1452,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)
|
||||
{
|
||||
@@ -1446,6 +1467,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);
|
||||
@@ -1550,6 +1574,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;
|
||||
|
||||
@@ -1607,6 +1645,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;
|
||||
}
|
||||
@@ -1622,10 +1661,18 @@ static int pagemap_pmd_range(pmd_t *pmdp, unsigned long addr, unsigned long end,
|
||||
return err;
|
||||
}
|
||||
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, ptep_get(pte));
|
||||
- err = add_to_pagemap(addr, &pme, pm);
|
||||
+ pme = pte_to_pagemap_entry(pm, vma, addr, ptep_get(pte));
|
||||
+ err = add_to_pagemap(addr, &pme, pm);
|
||||
+ }
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
@@ -1724,8 +1771,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;
|
||||
@@ -1734,6 +1781,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;
|
||||
@@ -1749,19 +1798,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)) {
|
||||
unsigned long end;
|
||||
|
||||
@@ -1786,18 +1854,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, 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;
|
||||
@@ -1805,6 +1890,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)
|
||||
@@ -1818,6 +1905,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;
|
||||
@@ -1844,6 +1943,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.41.0
|
||||
|
@@ -1,90 +0,0 @@
|
||||
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)
|
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
||||
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)
|
@@ -1,18 +0,0 @@
|
||||
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)
|
File diff suppressed because it is too large
Load Diff
@@ -821,36 +821,3 @@ index c2308783053c..29e1cada7667 100644
|
||||
--
|
||||
GitLab
|
||||
|
||||
From 3a88b77d3cb9f9cd8a8aee052ab479b73aeb2e80 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
||||
Date: Sat, 13 Jan 2024 15:29:25 +0100
|
||||
Subject: [PATCH] arch/Kconfig: Default to maximum amount of ASLR bits
|
||||
|
||||
To mitigate https://zolutal.github.io/aslrnt/; do this with a patch to
|
||||
avoid having to enable `CONFIG_EXPERT`.
|
||||
---
|
||||
arch/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/Kconfig b/arch/Kconfig
|
||||
index f4b210ab061291..837d0dbb28ea08 100644
|
||||
--- a/arch/Kconfig
|
||||
+++ b/arch/Kconfig
|
||||
@@ -1032,7 +1032,7 @@ config ARCH_MMAP_RND_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address" if EXPERT
|
||||
range ARCH_MMAP_RND_BITS_MIN ARCH_MMAP_RND_BITS_MAX
|
||||
default ARCH_MMAP_RND_BITS_DEFAULT if ARCH_MMAP_RND_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
@@ -1066,7 +1066,7 @@ config ARCH_MMAP_RND_COMPAT_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address for compatible applications" if EXPERT
|
||||
range ARCH_MMAP_RND_COMPAT_BITS_MIN ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
default ARCH_MMAP_RND_COMPAT_BITS_DEFAULT if ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_COMPAT_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_COMPAT_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
|
@@ -1,90 +0,0 @@
|
||||
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)
|
@@ -2176,17 +2176,17 @@ Subject: [PATCH 13/34] selftests: winesync: Add some tests for semaphore
|
||||
create mode 100644 tools/testing/selftests/drivers/winesync/winesync.c
|
||||
|
||||
diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Makefile
|
||||
index 8247a7c69..553c949dc 100644
|
||||
index c852eb40c4f7..a366016d6254 100644
|
||||
--- a/tools/testing/selftests/Makefile
|
||||
+++ b/tools/testing/selftests/Makefile
|
||||
@@ -18,6 +18,7 @@ TARGETS += drivers/dma-buf
|
||||
@@ -14,6 +14,7 @@ TARGETS += drivers/dma-buf
|
||||
TARGETS += drivers/s390x/uvdevice
|
||||
TARGETS += drivers/net/bonding
|
||||
TARGETS += drivers/net/team
|
||||
+TARGETS += drivers/winesync
|
||||
TARGETS += dt
|
||||
TARGETS += efivarfs
|
||||
TARGETS += exec
|
||||
TARGETS += filesystems
|
||||
diff --git a/tools/testing/selftests/drivers/winesync/Makefile b/tools/testing/selftests/drivers/winesync/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..43b39fdeea10
|
||||
|
@@ -1,90 +0,0 @@
|
||||
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)
|
File diff suppressed because it is too large
Load Diff
@@ -64,49 +64,3 @@ index 2c7171e0b0010..85de313ddec29 100644
|
||||
select CPU_FREQ_GOV_PERFORMANCE
|
||||
help
|
||||
|
||||
From 3a88b77d3cb9f9cd8a8aee052ab479b73aeb2e80 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
||||
Date: Sat, 13 Jan 2024 15:29:25 +0100
|
||||
Subject: [PATCH] arch/Kconfig: Default to maximum amount of ASLR bits
|
||||
|
||||
To mitigate https://zolutal.github.io/aslrnt/; do this with a patch to
|
||||
avoid having to enable `CONFIG_EXPERT`.
|
||||
---
|
||||
arch/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/Kconfig b/arch/Kconfig
|
||||
index f4b210ab061291..837d0dbb28ea08 100644
|
||||
--- a/arch/Kconfig
|
||||
+++ b/arch/Kconfig
|
||||
@@ -1032,7 +1032,7 @@ config ARCH_MMAP_RND_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address" if EXPERT
|
||||
range ARCH_MMAP_RND_BITS_MIN ARCH_MMAP_RND_BITS_MAX
|
||||
default ARCH_MMAP_RND_BITS_DEFAULT if ARCH_MMAP_RND_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
@@ -1066,7 +1066,7 @@ config ARCH_MMAP_RND_COMPAT_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address for compatible applications" if EXPERT
|
||||
range ARCH_MMAP_RND_COMPAT_BITS_MIN ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
default ARCH_MMAP_RND_COMPAT_BITS_DEFAULT if ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_COMPAT_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_COMPAT_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
|
||||
index 990d775e4cea..09e3813b71a8 100644
|
||||
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
|
||||
@@ -4498,7 +4498,6 @@ void dc_resource_state_destruct(struct dc_state *context)
|
||||
}
|
||||
context->stream_count = 0;
|
||||
context->stream_mask = 0;
|
||||
- memset(&context->res_ctx, 0, sizeof(context->res_ctx));
|
||||
memset(&context->pp_display_cfg, 0, sizeof(context->pp_display_cfg));
|
||||
memset(&context->dcn_bw_vars, 0, sizeof(context->dcn_bw_vars));
|
||||
context->clk_mgr = NULL;
|
||||
|
@@ -1,151 +0,0 @@
|
||||
From d50977b164e708bf523a35ef53315355528c3ca6 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Mon, 16 Sep 2019 04:53:20 +0200
|
||||
Subject: [PATCH] ZEN: Add sysctl and CONFIG to disallow unprivileged
|
||||
CLONE_NEWUSER
|
||||
|
||||
Our default behavior continues to match the vanilla kernel.
|
||||
---
|
||||
include/linux/user_namespace.h | 4 ++++
|
||||
init/Kconfig | 16 ++++++++++++++++
|
||||
kernel/fork.c | 14 ++++++++++++++
|
||||
kernel/sysctl.c | 12 ++++++++++++
|
||||
kernel/user_namespace.c | 7 +++++++
|
||||
5 files changed, 53 insertions(+)
|
||||
|
||||
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
|
||||
index 45f09bec02c485..87b20e2ee27445 100644
|
||||
--- a/include/linux/user_namespace.h
|
||||
+++ b/include/linux/user_namespace.h
|
||||
@@ -148,6 +148,8 @@ static inline void set_userns_rlimit_max(struct user_namespace *ns,
|
||||
|
||||
#ifdef CONFIG_USER_NS
|
||||
|
||||
+extern int unprivileged_userns_clone;
|
||||
+
|
||||
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
|
||||
{
|
||||
if (ns)
|
||||
@@ -181,6 +183,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
|
||||
struct ns_common *ns_get_owner(struct ns_common *ns);
|
||||
#else
|
||||
|
||||
+#define unprivileged_userns_clone 0
|
||||
+
|
||||
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
|
||||
{
|
||||
return &init_user_ns;
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 94125d3b6893c7..9f7139b536f638 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1247,6 +1247,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/fork.c b/kernel/fork.c
|
||||
index 08969f5aa38d59..ff601cb7a1fae0 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -98,6 +98,10 @@
|
||||
#include <linux/io_uring.h>
|
||||
#include <linux/bpf.h>
|
||||
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+#include <linux/user_namespace.h>
|
||||
+#endif
|
||||
+
|
||||
#include <asm/pgalloc.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/mmu_context.h>
|
||||
@@ -2008,6 +2012,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.
|
||||
@@ -3166,6 +3174,12 @@ int ksys_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 c6d9dec11b749d..9a4514ad481b21 100644
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -81,6 +81,9 @@
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
#include <linux/rtmutex.h>
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+#include <linux/user_namespace.h>
|
||||
+#endif
|
||||
|
||||
/* shared constants to be used in various sysctls */
|
||||
const int sysctl_vals[] = { 0, 1, 2, 3, 4, 100, 200, 1000, 3000, INT_MAX, 65535, -1 };
|
||||
@@ -1659,6 +1662,15 @@ static struct ctl_table kern_table[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
+#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 54211dbd516c57..16ca0c1516298d 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -22,6 +22,13 @@
|
||||
#include <linux/bsearch.h>
|
||||
#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 __ro_after_init;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
||||
|
@@ -1,475 +0,0 @@
|
||||
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,14 +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 depends on char/agp/
|
||||
-obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
-
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-y += base/ block/ misc/ mfd/ nfc/
|
||||
obj-$(CONFIG_LIBNVDIMM) += nvdimm/
|
||||
@@ -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
|
||||
|
||||
From 676c2dc63592f52b716515573a3a825582a371e9 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sat, 8 Dec 2018 18:21:32 +0000
|
||||
Subject: [PATCH 1/9] x86/vdso: Use lfence instead of rep and nop
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
arch/x86/include/asm/vdso/processor.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/vdso/processor.h b/arch/x86/include/asm/vdso/processor.h
|
||||
index 57b1a7034c64..e2c45674f989 100644
|
||||
--- a/arch/x86/include/asm/vdso/processor.h
|
||||
+++ b/arch/x86/include/asm/vdso/processor.h
|
||||
@@ -10,7 +10,7 @@
|
||||
/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
|
||||
static __always_inline void rep_nop(void)
|
||||
{
|
||||
- asm volatile("rep; nop" ::: "memory");
|
||||
+ asm volatile("lfence" ::: "memory");
|
||||
}
|
||||
|
||||
static __always_inline void cpu_relax(void)
|
||||
--
|
||||
2.39.1
|
||||
|
||||
From 48dc9669f8db68adc480ffc2698ed8204440e45b Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Thu, 13 Dec 2018 01:00:49 +0000
|
||||
Subject: [PATCH 2/9] sched/wait: Do accept() in LIFO order for cache
|
||||
efficiency
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/wait.h | 2 ++
|
||||
kernel/sched/wait.c | 24 ++++++++++++++++++++++++
|
||||
net/ipv4/inet_connection_sock.c | 2 +-
|
||||
3 files changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/wait.h b/include/linux/wait.h
|
||||
index a0307b516b09..edc21128f387 100644
|
||||
--- a/include/linux/wait.h
|
||||
+++ b/include/linux/wait.h
|
||||
@@ -165,6 +165,7 @@ static inline bool wq_has_sleeper(struct wait_queue_head *wq_head)
|
||||
|
||||
extern void add_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
extern void add_wait_queue_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
+extern void add_wait_queue_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
extern void add_wait_queue_priority(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
extern void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
|
||||
@@ -1192,6 +1193,7 @@ do { \
|
||||
*/
|
||||
void prepare_to_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
bool prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
+void prepare_to_wait_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
long prepare_to_wait_event(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
void finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout);
|
||||
diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
|
||||
index 133b74730738..1647fb8662eb 100644
|
||||
--- a/kernel/sched/wait.c
|
||||
+++ b/kernel/sched/wait.c
|
||||
@@ -47,6 +47,17 @@ void add_wait_queue_priority(struct wait_queue_head *wq_head, struct wait_queue_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(add_wait_queue_priority);
|
||||
|
||||
+void add_wait_queue_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
|
||||
+{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ wq_entry->flags |= WQ_FLAG_EXCLUSIVE;
|
||||
+ spin_lock_irqsave(&wq_head->lock, flags);
|
||||
+ __add_wait_queue(wq_head, wq_entry);
|
||||
+ spin_unlock_irqrestore(&wq_head->lock, flags);
|
||||
+}
|
||||
+EXPORT_SYMBOL(add_wait_queue_exclusive_lifo);
|
||||
+
|
||||
void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
|
||||
{
|
||||
unsigned long flags;
|
||||
@@ -293,6 +304,19 @@ prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_ent
|
||||
}
|
||||
EXPORT_SYMBOL(prepare_to_wait_exclusive);
|
||||
|
||||
+void prepare_to_wait_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state)
|
||||
+{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ wq_entry->flags |= WQ_FLAG_EXCLUSIVE;
|
||||
+ spin_lock_irqsave(&wq_head->lock, flags);
|
||||
+ if (list_empty(&wq_entry->entry))
|
||||
+ __add_wait_queue(wq_head, wq_entry);
|
||||
+ set_current_state(state);
|
||||
+ spin_unlock_irqrestore(&wq_head->lock, flags);
|
||||
+}
|
||||
+EXPORT_SYMBOL(prepare_to_wait_exclusive_lifo);
|
||||
+
|
||||
void init_wait_entry(struct wait_queue_entry *wq_entry, int flags)
|
||||
{
|
||||
wq_entry->flags = flags;
|
||||
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
|
||||
index f2c43f67187d..9885bfb429a2 100644
|
||||
--- a/net/ipv4/inet_connection_sock.c
|
||||
+++ b/net/ipv4/inet_connection_sock.c
|
||||
@@ -606,7 +606,7 @@ static int inet_csk_wait_for_connect(struct sock *sk, long timeo)
|
||||
* having to remove and re-insert us on the wait queue.
|
||||
*/
|
||||
for (;;) {
|
||||
- prepare_to_wait_exclusive(sk_sleep(sk), &wait,
|
||||
+ prepare_to_wait_exclusive_lifo(sk_sleep(sk), &wait,
|
||||
TASK_INTERRUPTIBLE);
|
||||
release_sock(sk);
|
||||
if (reqsk_queue_empty(&icsk->icsk_accept_queue))
|
||||
--
|
||||
2.39.1
|
@@ -1,822 +0,0 @@
|
||||
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
|
||||
|
||||
---
|
||||
init/Makefile | 2 +-
|
||||
1 file changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/init/Makefile b/init/Makefile
|
||||
index baf3ab8d9d49..854e32e6aec7 100755
|
||||
--- a/init/Makefile
|
||||
+++ b/init/Makefile
|
||||
@@ -19,7 +19,7 @@ else
|
||||
|
||||
# Maximum length of UTS_VERSION is 64 chars
|
||||
filechk_uts_version = \
|
||||
- utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "$(build-timestamp)" | cut -b -64); \
|
||||
+ utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "TKG" "$(build-timestamp)" | cut -b -64); \
|
||||
echo '$(pound)'define UTS_VERSION \""$${utsver}"\"
|
||||
|
||||
#
|
||||
--
|
||||
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
|
||||
|
||||
|
||||
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
|
||||
index f788cd61df21..2bfbb4213707 100644
|
||||
--- a/kernel/sched/rt.c
|
||||
+++ b/kernel/sched/rt.c
|
||||
@@ -15,9 +15,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;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
|
||||
--
|
||||
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 the tagged commit, we pretty print it.
|
||||
--
|
||||
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] Add Zenify option
|
||||
|
||||
---
|
||||
init/Kconfig | 32 ++++++++++++++++++++++++++++++++
|
||||
1 file changed, 32 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
|
||||
|
||||
--
|
||||
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 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 (16777216)
|
||||
|
||||
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,19 +623,19 @@ 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->tag_set && q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
|
||||
return NULL;
|
||||
|
||||
if (q->nr_hw_queues != 1 &&
|
||||
!blk_mq_is_shared_tags(q->tag_set->flags))
|
||||
return NULL;
|
||||
|
||||
- return elevator_find_get(q, "mq-deadline");
|
||||
+ return elevator_find_get(q, "bfq");
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
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
|
||||
|
||||
From 379cbab18b5c75c622b93e2c5abdfac141fe9654 Mon Sep 17 00:00:00 2001
|
||||
From: Kenny Levinsen <kl@kl.wtf>
|
||||
Date: Sun, 27 Dec 2020 14:43:13 +0000
|
||||
Subject: [PATCH] ZEN: Input: evdev - use call_rcu when detaching client
|
||||
|
||||
Significant time was spent on synchronize_rcu in evdev_detach_client
|
||||
when applications closed evdev devices. Switching VT away from a
|
||||
graphical environment commonly leads to mass input device closures,
|
||||
which could lead to noticable delays on systems with many input devices.
|
||||
|
||||
Replace synchronize_rcu with call_rcu, deferring reclaim of the evdev
|
||||
client struct till after the RCU grace period instead of blocking the
|
||||
calling application.
|
||||
|
||||
While this does not solve all slow evdev fd closures, it takes care of a
|
||||
good portion of them, including this simple test:
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int idx, fd;
|
||||
const char *path = "/dev/input/event0";
|
||||
for (idx = 0; idx < 1000; idx++) {
|
||||
if ((fd = open(path, O_RDWR)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Time to completion of above test when run locally:
|
||||
|
||||
Before: 0m27.111s
|
||||
After: 0m0.018s
|
||||
|
||||
Signed-off-by: Kenny Levinsen <kl@kl.wtf>
|
||||
---
|
||||
drivers/input/evdev.c | 19 +++++++++++--------
|
||||
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
|
||||
index 95f90699d2b17b..2b10fe29d2c8d9 100644
|
||||
--- a/drivers/input/evdev.c
|
||||
+++ b/drivers/input/evdev.c
|
||||
@@ -46,6 +46,7 @@ struct evdev_client {
|
||||
struct fasync_struct *fasync;
|
||||
struct evdev *evdev;
|
||||
struct list_head node;
|
||||
+ struct rcu_head rcu;
|
||||
enum input_clock_type clk_type;
|
||||
bool revoked;
|
||||
unsigned long *evmasks[EV_CNT];
|
||||
@@ -377,13 +378,22 @@ static void evdev_attach_client(struct evdev *evdev,
|
||||
spin_unlock(&evdev->client_lock);
|
||||
}
|
||||
|
||||
+static void evdev_reclaim_client(struct rcu_head *rp)
|
||||
+{
|
||||
+ struct evdev_client *client = container_of(rp, struct evdev_client, rcu);
|
||||
+ unsigned int i;
|
||||
+ for (i = 0; i < EV_CNT; ++i)
|
||||
+ bitmap_free(client->evmasks[i]);
|
||||
+ kvfree(client);
|
||||
+}
|
||||
+
|
||||
static void evdev_detach_client(struct evdev *evdev,
|
||||
struct evdev_client *client)
|
||||
{
|
||||
spin_lock(&evdev->client_lock);
|
||||
list_del_rcu(&client->node);
|
||||
spin_unlock(&evdev->client_lock);
|
||||
- synchronize_rcu();
|
||||
+ call_rcu(&client->rcu, evdev_reclaim_client);
|
||||
}
|
||||
|
||||
static int evdev_open_device(struct evdev *evdev)
|
||||
@@ -436,7 +446,6 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct evdev_client *client = file->private_data;
|
||||
struct evdev *evdev = client->evdev;
|
||||
- unsigned int i;
|
||||
|
||||
mutex_lock(&evdev->mutex);
|
||||
|
||||
@@ -448,11 +457,6 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
|
||||
evdev_detach_client(evdev, client);
|
||||
|
||||
- for (i = 0; i < EV_CNT; ++i)
|
||||
- bitmap_free(client->evmasks[i]);
|
||||
-
|
||||
- kvfree(client);
|
||||
-
|
||||
evdev_close_device(evdev);
|
||||
|
||||
return 0;
|
||||
@@ -495,7 +499,6 @@ static int evdev_open(struct inode *inode, struct file *file)
|
||||
|
||||
err_free_client:
|
||||
evdev_detach_client(evdev, client);
|
||||
- kvfree(client);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
From 2aafb56f20e4b63d8c4af172fe9d017c64bc4129 Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Wed, 20 Oct 2021 20:50:11 -0700
|
||||
Subject: [PATCH] ZEN: mm: Lower the non-hugetlbpage pageblock size to reduce
|
||||
scheduling delays
|
||||
|
||||
The page allocator processes free pages in groups of pageblocks, where
|
||||
the size of a pageblock is typically quite large (1024 pages without
|
||||
hugetlbpage support). Pageblocks are processed atomically with the zone
|
||||
lock held, which can cause severe scheduling delays on both the CPU
|
||||
going through the pageblock and any other CPUs waiting to acquire the
|
||||
zone lock. A frequent offender is move_freepages_block(), which is used
|
||||
by rmqueue() for page allocation.
|
||||
|
||||
As it turns out, there's no requirement for pageblocks to be so large,
|
||||
so the pageblock order can simply be reduced to ease the scheduling
|
||||
delays and zone lock contention. PAGE_ALLOC_COSTLY_ORDER is used as a
|
||||
reasonable setting to ensure non-costly page allocation requests can
|
||||
still be serviced without always needing to free up more than one
|
||||
pageblock's worth of pages at a time.
|
||||
|
||||
This has a noticeable effect on overall system latency when memory
|
||||
pressure is elevated. The various mm functions which operate on
|
||||
pageblocks no longer appear in the preemptoff tracer, where previously
|
||||
they would spend up to 100 ms on a mobile arm64 CPU processing a
|
||||
pageblock with preemption disabled and the zone lock held.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
include/linux/pageblock-flags.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
|
||||
index 5f1ae07d724b88..97cda629c9e909 100644
|
||||
--- a/include/linux/pageblock-flags.h
|
||||
+++ b/include/linux/pageblock-flags.h
|
||||
@@ -48,7 +48,7 @@ extern unsigned int pageblock_order;
|
||||
#else /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
/* If huge pages are not used, group by MAX_ORDER_NR_PAGES */
|
||||
-#define pageblock_order MAX_PAGE_ORDER
|
||||
+#define pageblock_order PAGE_ALLOC_COSTLY_ORDER
|
||||
|
||||
#endif /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
|
||||
From f22bc56be85e69c71c8e36041193856bb8b01525 Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Wed, 20 Oct 2021 20:50:32 -0700
|
||||
Subject: [PATCH] ZEN: mm: Don't hog the CPU and zone lock in rmqueue_bulk()
|
||||
|
||||
There is noticeable scheduling latency and heavy zone lock contention
|
||||
stemming from rmqueue_bulk's single hold of the zone lock while doing
|
||||
its work, as seen with the preemptoff tracer. There's no actual need for
|
||||
rmqueue_bulk() to hold the zone lock the entire time; it only does so
|
||||
for supposed efficiency. As such, we can relax the zone lock and even
|
||||
reschedule when IRQs are enabled in order to keep the scheduling delays
|
||||
and zone lock contention at bay. Forward progress is still guaranteed,
|
||||
as the zone lock can only be relaxed after page removal.
|
||||
|
||||
With this change, rmqueue_bulk() no longer appears as a serious offender
|
||||
in the preemptoff tracer, and system latency is noticeably improved.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
mm/page_alloc.c | 23 ++++++++++++++++++-----
|
||||
1 file changed, 18 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index a0b0397e29ee4c..87a983a356530c 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -3118,15 +3119,16 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Obtain a specified number of elements from the buddy allocator, all under
|
||||
- * a single hold of the lock, for efficiency. Add them to the supplied list.
|
||||
- * Returns the number of new pages which were placed at *list.
|
||||
+ * Obtain a specified number of elements from the buddy allocator, and relax the
|
||||
+ * zone lock when needed. Add them to the supplied list. Returns the number of
|
||||
+ * new pages which were placed at *list.
|
||||
*/
|
||||
static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
unsigned long count, struct list_head *list,
|
||||
int migratetype, unsigned int alloc_flags)
|
||||
{
|
||||
unsigned long flags;
|
||||
- int i;
|
||||
+ const bool can_resched = !preempt_count() && !irqs_disabled();
|
||||
+ int i, allocated = 0, last_mod = 0;
|
||||
|
||||
/* Caller must hold IRQ-safe pcp->lock so IRQs are disabled. */
|
||||
spin_lock(&zone->lock);
|
||||
@@ -3137,6 +3138,18 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
if (unlikely(page == NULL))
|
||||
break;
|
||||
|
||||
+ /* Reschedule and ease the contention on the lock if needed */
|
||||
+ if (i + 1 < count && ((can_resched && need_resched()) ||
|
||||
+ spin_needbreak(&zone->lock))) {
|
||||
+ __mod_zone_page_state(zone, NR_FREE_PAGES,
|
||||
+ -((i + 1 - last_mod) << order));
|
||||
+ last_mod = i + 1;
|
||||
+ spin_unlock(&zone->lock);
|
||||
+ if (can_resched)
|
||||
+ cond_resched();
|
||||
+ spin_lock(&zone->lock);
|
||||
+ }
|
||||
+
|
||||
if (unlikely(check_pcp_refill(page, order)))
|
||||
continue;
|
||||
|
||||
@@ -3163,7 +3176,7 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
* on i. Do not confuse with 'allocated' which is the number of
|
||||
* pages added to the pcp list.
|
||||
*/
|
||||
- __mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
|
||||
+ __mod_zone_page_state(zone, NR_FREE_PAGES, -((i - last_mod) << order));
|
||||
spin_unlock(&zone->lock);
|
||||
return allocated;
|
||||
}
|
||||
|
||||
From 6329525a0fa10cd13f39b76948b1296150f75c95 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 29 Aug 2022 16:47:26 +0000
|
||||
Subject: [PATCH 14/16] XANMOD: Makefile: Disable GCC vectorization on trees
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
Makefile | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 3f6628780eb2..35a5ae1ede42 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1069,6 +1069,9 @@ endif
|
||||
KBUILD_CFLAGS-$(call gcc-min-version, 90100) += -Wno-alloc-size-larger-than
|
||||
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
|
||||
|
||||
+# disable GCC vectorization on trees
|
||||
+KBUILD_CFLAGS += $(call cc-option, -fno-tree-vectorize)
|
||||
+
|
||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||
KBUILD_CFLAGS += -fno-strict-overflow
|
||||
|
||||
--
|
||||
2.39.1
|
||||
|
||||
From f997578464b2c4c63e7bd1afbfef56212ee44f2d Mon Sep 17 00:00:00 2001
|
||||
From: Etienne JUVIGNY <ti3nou@gmail.com>
|
||||
Date: Mon, 6 Mar 2023 13:54:09 +0100
|
||||
Subject: Don't add -dirty versioning on unclean trees
|
||||
|
||||
|
||||
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
||||
index ca5795e16..ad0d94477 100755
|
||||
--- a/scripts/setlocalversion
|
||||
+++ b/scripts/setlocalversion
|
||||
@@ -85,12 +85,12 @@ scm_version()
|
||||
# git-diff-index does not refresh the index, so it may give misleading
|
||||
# results.
|
||||
# See git-update-index(1), git-diff-index(1), and git-status(1).
|
||||
- if {
|
||||
- git --no-optional-locks status -uno --porcelain 2>/dev/null ||
|
||||
- git diff-index --name-only HEAD
|
||||
- } | read dummy; then
|
||||
- printf '%s' -dirty
|
||||
- fi
|
||||
+ #if {
|
||||
+ # git --no-optional-locks status -uno --porcelain 2>/dev/null ||
|
||||
+ # git diff-index --name-only HEAD
|
||||
+ #} | read dummy; then
|
||||
+ # printf '%s' -dirty
|
||||
+ #fi
|
||||
}
|
||||
|
||||
collect_files()
|
||||
|
||||
From 1cf70fdd26245554ab30234722338d8160dff394 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Sat, 21 May 2022 15:15:09 -0500
|
||||
Subject: [PATCH] ZEN: INTERACTIVE: dm-crypt: Disable workqueues for crypto ops
|
||||
|
||||
Queueing in dm-crypt for crypto operations reduces performance on modern
|
||||
systems. As discussed in an article from Cloudflare, they discovered
|
||||
that queuing was introduced because the crypto subsystem used to be
|
||||
synchronous. Since it's now asynchronous, we get double queueing when
|
||||
using the subsystem through dm-crypt. This is obviously undesirable and
|
||||
reduces throughput and increases latency.
|
||||
|
||||
Disable queueing when using our Zen Interactive configuration.
|
||||
|
||||
Fixes: https://github.com/zen-kernel/zen-kernel/issues/282
|
||||
|
||||
tkg: Config switch changed to our local "ZENIFY" toggle
|
||||
---
|
||||
drivers/md/dm-crypt.c | 5 +++++
|
||||
init/Kconfig | 1 +
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
|
||||
index 2ae8560b6a14ad..cb49218030c88b 100644
|
||||
--- a/drivers/md/dm-crypt.c
|
||||
+++ b/drivers/md/dm-crypt.c
|
||||
@@ -3242,6 +3242,11 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+ set_bit(DM_CRYPT_NO_READ_WORKQUEUE, &cc->flags);
|
||||
+ set_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags);
|
||||
+#endif
|
||||
+
|
||||
ret = crypt_ctr_cipher(ti, argv[0], argv[1]);
|
||||
if (ret < 0)
|
||||
goto bad;
|
@@ -1,118 +0,0 @@
|
||||
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/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)
|
||||
|
||||
From cba31b19f8c38696b13ba48e0e8b6dbe747d6bae Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 17:31:25 +0000
|
||||
Subject: [PATCH 10/16] XANMOD: mm/vmscan: vm_swappiness = 30 decreases the
|
||||
amount of swapping
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
mm/vmscan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 5b7b8d4f5297..549684b29418 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -190,7 +190,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 30;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
||||
--
|
||||
2.39.1
|
@@ -1,88 +0,0 @@
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/fair.c linux-6.6.1/kernel/sched/fair.c
|
||||
--- vlinux-6.6.1/kernel/sched/fair.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/fair.c 2023-11-11 15:51:09.630279108 +0100
|
||||
@@ -75,10 +75,19 @@
|
||||
*
|
||||
* (default: 0.75 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_base_slice = 400000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_base_slice = 400000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_base_slice = 750000ULL;
|
||||
static unsigned int normalized_sysctl_sched_base_slice = 750000ULL;
|
||||
-
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+const_debug unsigned int sysctl_sched_migration_cost = 250000UL;
|
||||
+#else
|
||||
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)
|
||||
@@ -135,8 +143,12 @@
|
||||
*
|
||||
* (default: 5 msec, units: microseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static unsigned int sysctl_sched_cfs_bandwidth_slice = 3000UL;
|
||||
+#else
|
||||
static unsigned int sysctl_sched_cfs_bandwidth_slice = 5000UL;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#ifdef CONFIG_NUMA_BALANCING
|
||||
/* Restrict the NUMA promotion throughput (MB/s) for each target node. */
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/sched.h linux-6.6.1/kernel/sched/sched.h
|
||||
--- vlinux-6.6.1/kernel/sched/sched.h 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/sched.h 2023-11-11 15:52:03.241725632 +0100
|
||||
@@ -2515,7 +2515,7 @@
|
||||
|
||||
extern void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags);
|
||||
|
||||
-#ifdef CONFIG_PREEMPT_RT
|
||||
+#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_ZENIFY)
|
||||
#define SCHED_NR_MIGRATE_BREAK 8
|
||||
#else
|
||||
#define SCHED_NR_MIGRATE_BREAK 32
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/topology.c linux-6.6.1/kernel/sched/topology.c
|
||||
--- vlinux-6.6.1/kernel/sched/topology.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/topology.c 2023-11-11 15:56:54.602473894 +0100
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
|
||||
DEFINE_STATIC_KEY_FALSE(sched_energy_present);
|
||||
-static unsigned int sysctl_sched_energy_aware = 1;
|
||||
+static unsigned int sysctl_sched_energy_aware = 0;
|
||||
static DEFINE_MUTEX(sched_energy_mutex);
|
||||
static bool sched_energy_update;
|
||||
|
||||
diff -Naur vlinux-6.6.1/mm/page-writeback.c linux-6.6.1/mm/page-writeback.c
|
||||
--- vlinux-6.6.1/mm/page-writeback.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/mm/page-writeback.c 2023-11-11 16:07:22.214222902 +0100
|
||||
@@ -71,7 +71,11 @@
|
||||
/*
|
||||
* Start background writeback (via writeback threads) at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static int dirty_background_ratio = 20;
|
||||
+#else
|
||||
static int dirty_background_ratio = 10;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* dirty_background_bytes starts at 0 (disabled) so that it is a function of
|
||||
@@ -88,7 +92,11 @@
|
||||
/*
|
||||
* The generator of dirty data starts writeback at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static int vm_dirty_ratio = 50;
|
||||
+#else
|
||||
static int vm_dirty_ratio = 20;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
@@ -1,90 +0,0 @@
|
||||
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)
|
@@ -1,193 +0,0 @@
|
||||
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
|
||||
@@ -5102,6 +5102,7 @@
|
||||
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
|
||||
/* Wangxun nics */
|
||||
{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
@@ -1,166 +0,0 @@
|
||||
From b70e738f08403950aa3053c36b98c6b0eeb0eb90 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@collabora.com>
|
||||
Date: Mon, 25 Oct 2021 09:49:42 -0300
|
||||
Subject: [PATCH] futex: Add entry point for FUTEX_WAIT_MULTIPLE (opcode 31)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add an option to wait on multiple futexes using the old interface, that
|
||||
uses opcode 31 through futex() syscall. Do that by just translation the
|
||||
old interface to use the new code. This allows old and stable versions
|
||||
of Proton to still use fsync in new kernel releases.
|
||||
|
||||
Signed-off-by: André Almeida <andrealmeid@collabora.com>
|
||||
---
|
||||
include/uapi/linux/futex.h | 13 +++++++
|
||||
kernel/futex/syscalls.c | 75 +++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 87 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index 71a5df8d2689..d375ab21cbf8 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
#define FUTEX_LOCK_PI2 13
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -68,6 +69,18 @@ struct futex_waitv {
|
||||
__u32 __reserved;
|
||||
};
|
||||
|
||||
+/**
|
||||
+ * 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;
|
||||
+};
|
||||
+
|
||||
/*
|
||||
* Support for robust futexes: the kernel cleans up held futexes at
|
||||
* thread exit time.
|
||||
diff --git a/kernel/futex/syscalls.c b/kernel/futex/syscalls.c
|
||||
index 6f91a07a6a83..2f4d4c04ede2 100644
|
||||
--- a/kernel/futex/syscalls.c
|
||||
+++ b/kernel/futex/syscalls.c
|
||||
@@ -158,6 +158,7 @@ static __always_inline bool futex_cmd_has_timeout(u32 cmd)
|
||||
case FUTEX_LOCK_PI2:
|
||||
case FUTEX_WAIT_BITSET:
|
||||
case FUTEX_WAIT_REQUEUE_PI:
|
||||
+ case FUTEX_WAIT_MULTIPLE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -170,13 +171,79 @@ futex_init_timeout(u32 cmd, u32 op, struct timespec64 *ts, ktime_t *t)
|
||||
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);
|
||||
else if (cmd != FUTEX_LOCK_PI && !(op & FUTEX_CLOCK_REALTIME))
|
||||
*t = timens_ktime_to_host(CLOCK_MONOTONIC, *t);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * 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_vector *futex_read_wait_block(u32 __user *uaddr, u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_vector *futexv;
|
||||
+ struct futex_wait_block fwb;
|
||||
+ struct futex_wait_block __user *entry =
|
||||
+ (struct futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_WAITV_MAX)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ futexv = kcalloc(count, sizeof(*futexv), GFP_KERNEL);
|
||||
+ if (!futexv)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(futexv);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ futexv[i].w.flags = FUTEX_32;
|
||||
+ futexv[i].w.val = fwb.val;
|
||||
+ futexv[i].w.uaddr = (uintptr_t) (fwb.uaddr);
|
||||
+ futexv[i].q = futex_q_init;
|
||||
+ }
|
||||
+
|
||||
+ return futexv;
|
||||
+}
|
||||
+
|
||||
+int futex_wait_multiple(struct futex_vector *vs, unsigned int count,
|
||||
+ struct hrtimer_sleeper *to);
|
||||
+
|
||||
+int futex_opcode_31(ktime_t *abs_time, u32 __user *uaddr, int count)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct futex_vector *vs;
|
||||
+ struct hrtimer_sleeper *to = NULL, timeout;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, 0, 0);
|
||||
+
|
||||
+ vs = futex_read_wait_block(uaddr, count);
|
||||
+
|
||||
+ if (IS_ERR(vs))
|
||||
+ return PTR_ERR(vs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(vs, count, abs_time ? to : NULL);
|
||||
+ kfree(vs);
|
||||
+
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
const struct __kernel_timespec __user *, utime,
|
||||
u32 __user *, uaddr2, u32, val3)
|
||||
@@ -196,6 +263,9 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
tp = &t;
|
||||
}
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE)
|
||||
+ return futex_opcode_31(tp, uaddr, val);
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3);
|
||||
}
|
||||
|
||||
@@ -392,6 +462,9 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
tp = &t;
|
||||
}
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE)
|
||||
+ return futex_opcode_31(tp, uaddr, val);
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3);
|
||||
}
|
||||
#endif /* CONFIG_COMPAT_32BIT_TIME */
|
||||
--
|
||||
2.33.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
||||
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)
|
@@ -1,18 +0,0 @@
|
||||
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)
|
File diff suppressed because it is too large
Load Diff
@@ -1,253 +0,0 @@
|
||||
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 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
|
||||
|
||||
From 3a88b77d3cb9f9cd8a8aee052ab479b73aeb2e80 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
||||
Date: Sat, 13 Jan 2024 15:29:25 +0100
|
||||
Subject: [PATCH] arch/Kconfig: Default to maximum amount of ASLR bits
|
||||
|
||||
To mitigate https://zolutal.github.io/aslrnt/; do this with a patch to
|
||||
avoid having to enable `CONFIG_EXPERT`.
|
||||
---
|
||||
arch/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/Kconfig b/arch/Kconfig
|
||||
index f4b210ab061291..837d0dbb28ea08 100644
|
||||
--- a/arch/Kconfig
|
||||
+++ b/arch/Kconfig
|
||||
@@ -1032,7 +1032,7 @@ config ARCH_MMAP_RND_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address" if EXPERT
|
||||
range ARCH_MMAP_RND_BITS_MIN ARCH_MMAP_RND_BITS_MAX
|
||||
default ARCH_MMAP_RND_BITS_DEFAULT if ARCH_MMAP_RND_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
@@ -1066,7 +1066,7 @@ config ARCH_MMAP_RND_COMPAT_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address for compatible applications" if EXPERT
|
||||
range ARCH_MMAP_RND_COMPAT_BITS_MIN ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
default ARCH_MMAP_RND_COMPAT_BITS_DEFAULT if ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_COMPAT_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_COMPAT_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_state.c b/drivers/gpu/drm/amd/display/dc/core/dc_state.c
|
||||
index 180ac47868c2..42bf097b36b7 100644
|
||||
--- a/drivers/gpu/drm/amd/display/dc/core/dc_state.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_state.c
|
||||
@@ -300,7 +300,6 @@ void dc_state_destruct(struct dc_state *state)
|
||||
state->phantom_plane_count = 0;
|
||||
|
||||
state->stream_mask = 0;
|
||||
- memset(&state->res_ctx, 0, sizeof(state->res_ctx));
|
||||
memset(&state->pp_display_cfg, 0, sizeof(state->pp_display_cfg));
|
||||
memset(&state->dcn_bw_vars, 0, sizeof(state->dcn_bw_vars));
|
||||
state->clk_mgr = NULL;
|
||||
|
||||
From 299b81f3e619aea3ceda77d7c42842a496b34a53 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jung <admin@ptr1337.dev>
|
||||
Date: Thu, 21 Mar 2024 19:00:50 +0100
|
||||
Subject: [PATCH] cachy: move AMD_PRIVATE_COLOR to Kconfig
|
||||
|
||||
Co-authored-by: PedroHLC <root@pedrohlc.com>
|
||||
Signed-off-by: Peter Jung <admin@ptr1337.dev>
|
||||
---
|
||||
drivers/gpu/drm/amd/display/Kconfig | 6 ++++++
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c | 2 +-
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 6 +++---
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 6 +++---
|
||||
5 files changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/Kconfig b/drivers/gpu/drm/amd/display/Kconfig
|
||||
index 901d1961b73927..05c49141f5802f 100644
|
||||
--- a/drivers/gpu/drm/amd/display/Kconfig
|
||||
+++ b/drivers/gpu/drm/amd/display/Kconfig
|
||||
@@ -51,4 +51,10 @@ config DRM_AMD_SECURE_DISPLAY
|
||||
This option enables the calculation of crc of specific region via
|
||||
debugfs. Cooperate with specific DMCU FW.
|
||||
|
||||
+config AMD_PRIVATE_COLOR
|
||||
+ bool "Enable KMS color management by AMD for AMD"
|
||||
+ default n
|
||||
+ help
|
||||
+ This option extends the KMS color management API with AMD driver-specific properties to enhance the color management support on AMD Steam Deck.
|
||||
+
|
||||
endmenu
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||
index 59d2eee72a3297..0a4e75de95c257 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||
@@ -4078,7 +4078,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
|
||||
return r;
|
||||
}
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
if (amdgpu_dm_create_color_properties(adev))
|
||||
return -ENOMEM;
|
||||
#endif
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
|
||||
index c87b64e464ed5c..6fe07243adc3d5 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
|
||||
@@ -97,7 +97,7 @@ static inline struct fixed31_32 amdgpu_dm_fixpt_from_s3132(__u64 x)
|
||||
return val;
|
||||
}
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
/* Pre-defined Transfer Functions (TF)
|
||||
*
|
||||
* AMD driver supports pre-defined mathematical functions for transferring
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
|
||||
index 6e715ef3a5566e..11c7199ec3b348 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
|
||||
@@ -290,7 +290,7 @@ static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
|
||||
}
|
||||
#endif
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
/**
|
||||
* dm_crtc_additional_color_mgmt - enable additional color properties
|
||||
* @crtc: DRM CRTC
|
||||
@@ -372,7 +372,7 @@ static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
.late_register = amdgpu_dm_crtc_late_register,
|
||||
#endif
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
.atomic_set_property = amdgpu_dm_atomic_crtc_set_property,
|
||||
.atomic_get_property = amdgpu_dm_atomic_crtc_get_property,
|
||||
#endif
|
||||
@@ -551,7 +551,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
|
||||
|
||||
drm_mode_crtc_set_gamma_size(&acrtc->base, MAX_COLOR_LEGACY_LUT_ENTRIES);
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
dm_crtc_additional_color_mgmt(&acrtc->base);
|
||||
#endif
|
||||
return 0;
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
|
||||
index 8a4c40b4c27e4f..779880c6457553 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
|
||||
@@ -1468,7 +1468,7 @@ static void amdgpu_dm_plane_drm_plane_destroy_state(struct drm_plane *plane,
|
||||
drm_atomic_helper_plane_destroy_state(plane, state);
|
||||
}
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
static void
|
||||
dm_atomic_plane_attach_color_mgmt_properties(struct amdgpu_display_manager *dm,
|
||||
struct drm_plane *plane)
|
||||
@@ -1659,7 +1659,7 @@ static const struct drm_plane_funcs dm_plane_funcs = {
|
||||
.atomic_duplicate_state = amdgpu_dm_plane_drm_plane_duplicate_state,
|
||||
.atomic_destroy_state = amdgpu_dm_plane_drm_plane_destroy_state,
|
||||
.format_mod_supported = amdgpu_dm_plane_format_mod_supported,
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
.atomic_set_property = dm_atomic_plane_set_property,
|
||||
.atomic_get_property = dm_atomic_plane_get_property,
|
||||
#endif
|
||||
@@ -1742,7 +1742,7 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
|
||||
|
||||
drm_plane_helper_add(plane, &dm_plane_helper_funcs);
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
|
||||
#endif
|
||||
/* Create (reset) the plane state */
|
||||
|
||||
From f1807682de0edbff6c1e46b19642a517d2e15c57 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Sat, 13 Apr 2024 18:25:35 +0530
|
||||
Subject: revert "drm/amd/pm: Fetch current power limit from FW"
|
||||
|
||||
Fetching FW value prevents power limit modification by the user.
|
||||
The "out-of-band ways" are unclear.
|
||||
This fixes 7700/7800 XT custom powercap.
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
|
||||
index a54663f2e2ab9f..7ffad3eb0a0150 100644
|
||||
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
|
||||
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
|
||||
@@ -2703,7 +2703,6 @@ int smu_get_power_limit(void *handle,
|
||||
case SMU_PPT_LIMIT_CURRENT:
|
||||
switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
|
||||
case IP_VERSION(13, 0, 2):
|
||||
- case IP_VERSION(13, 0, 6):
|
||||
case IP_VERSION(11, 0, 7):
|
||||
case IP_VERSION(11, 0, 11):
|
||||
case IP_VERSION(11, 0, 12):
|
@@ -1,50 +0,0 @@
|
||||
diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
|
||||
index 3eee0143e0c5..552177c1dfc5 100644
|
||||
--- a/scripts/package/kernel.spec
|
||||
+++ b/scripts/package/kernel.spec
|
||||
@@ -18,2 +18,3 @@ Source2: diff.patch
|
||||
Provides: kernel-$KERNELRELEASE
|
||||
+Provides: kernel-uname-r = %{version}
|
||||
BuildRequires: bc binutils bison dwarves
|
||||
@@ -27,8 +27,8 @@ The Linux Kernel, the operating system core itself
|
||||
%package headers
|
||||
Summary: Header files for the Linux kernel for use by glibc
|
||||
Group: Development/System
|
||||
-Obsoletes: kernel-headers
|
||||
Provides: kernel-headers = %{version}
|
||||
+Provides: installonlypkg(kernel) = %{version}
|
||||
%description headers
|
||||
Kernel-headers includes the C header files that specify the interface
|
||||
between the Linux kernel and userspace libraries and programs. The
|
||||
@@ -40,12 +40,31 @@ glibc package.
|
||||
%package devel
|
||||
Summary: Development package for building kernel modules to match the %{version} kernel
|
||||
Group: System Environment/Kernel
|
||||
+Provides: kernel-devel = %{version}
|
||||
+Provides: kernel-devel-uname-r = %{version}
|
||||
+Provides: installonlypkg(kernel) = %{version}
|
||||
AutoReqProv: no
|
||||
%description -n kernel-devel
|
||||
This package provides kernel headers and makefiles sufficient to build modules
|
||||
against the %{version} kernel package.
|
||||
%endif
|
||||
|
||||
+# Opt out of a lot of Fedora hardening flags etc...
|
||||
+# See https://src.fedoraproject.org/rpms/redhat-rpm-config//blob/rawhide/f/buildflags.md
|
||||
+%undefine _package_note_file
|
||||
+%undefine _auto_set_build_flags
|
||||
+%undefine _include_frame_pointers
|
||||
+%define _build_id_flags -Wl,--build-id=none
|
||||
+%undefine _annotated_build
|
||||
+%undefine _fortify_level
|
||||
+%undefine _hardened_build
|
||||
+%global _lto_cflags %{nil}
|
||||
+%global _configure_gnuconfig_hack 0
|
||||
+%global _configure_libtool_hardening_hack 0
|
||||
+# Nearly had to go to the deep web to find documentation on this one... Gosh
|
||||
+# See https://github.com/rpm-software-management/rpm/blob/master/macros.in#L471
|
||||
+%define _build_id_links none
|
||||
+
|
||||
%prep
|
||||
%setup -q -n linux
|
||||
cp %{SOURCE1} .config
|
@@ -1,46 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -442,7 +442,7 @@ endif
|
||||
HOSTPKG_CONFIG = pkg-config
|
||||
|
||||
KBUILD_USERHOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
|
||||
- -O2 -fomit-frame-pointer -std=gnu11
|
||||
+ -O3 -fomit-frame-pointer -std=gnu11
|
||||
KBUILD_USERCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(USERCFLAGS)
|
||||
KBUILD_USERLDFLAGS := $(USERLDFLAGS)
|
||||
|
||||
@@ -474,7 +474,7 @@ endif
|
||||
-Wclippy::dbg_macro
|
||||
|
||||
KBUILD_HOSTCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
|
||||
-KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
||||
+KBUILD_HOSTCXXFLAGS := -Wall -O3 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
||||
KBUILD_HOSTRUSTFLAGS := $(rust_common_flags) -O -Cstrip=debuginfo \
|
||||
-Zallow-features= $(HOSTRUSTFLAGS)
|
||||
KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
|
||||
@@ -757,7 +757,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
-KBUILD_CFLAGS += -O2
|
||||
+KBUILD_CFLAGS += -O3
|
||||
KBUILD_RUSTFLAGS += -Copt-level=2
|
||||
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
KBUILD_CFLAGS += -Os
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1401,10 +1401,10 @@ choice
|
||||
default CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
|
||||
config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
- bool "Optimize for performance (-O2)"
|
||||
+ bool "Optimize for performance (-O3)"
|
||||
help
|
||||
This is the default optimization level for the kernel, building
|
||||
- with the "-O2" compiler flag for best performance and most
|
||||
+ with the "-O3" compiler flag for best performance and most
|
||||
helpful compile-time warnings.
|
||||
|
||||
config CC_OPTIMIZE_FOR_SIZE
|
@@ -1,312 +0,0 @@
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Wed, 7 Feb 2018 15:16:04 +0100
|
||||
Subject: Add ksym-provides tool.
|
||||
|
||||
References: bsc#1077692
|
||||
Patch-mainline: no, not needed
|
||||
|
||||
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
|
||||
---
|
||||
scripts/mod/Makefile | 6 +-
|
||||
scripts/mod/ksym-provides.c | 124 ++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 129 insertions(+), 1 deletion(-)
|
||||
create mode 100644 scripts/mod/ksym-provides.c
|
||||
|
||||
--- a/scripts/mod/Makefile
|
||||
+++ b/scripts/mod/Makefile
|
||||
@@ -2,11 +2,15 @@
|
||||
OBJECT_FILES_NON_STANDARD := y
|
||||
CFLAGS_REMOVE_empty.o += $(CC_FLAGS_LTO)
|
||||
|
||||
-hostprogs-always-y += modpost mk_elfconfig
|
||||
+hostprogs-always-y += modpost mk_elfconfig ksym-provides
|
||||
always-y += empty.o
|
||||
|
||||
modpost-objs := modpost.o file2alias.o sumversion.o
|
||||
|
||||
+ksym-provides-objs := ksym-provides.o
|
||||
+
|
||||
+HOSTLDLIBS_ksym-provides := -lelf
|
||||
+
|
||||
devicetable-offsets-file := devicetable-offsets.h
|
||||
|
||||
$(obj)/$(devicetable-offsets-file): $(obj)/devicetable-offsets.s FORCE
|
||||
--- /dev/null
|
||||
+++ b/scripts/mod/ksym-provides.c
|
||||
@@ -0,0 +1,124 @@
|
||||
+#include <stdio.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <gelf.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ int fd;
|
||||
+ Elf *elf;
|
||||
+ Elf_Scn *scn;
|
||||
+ GElf_Shdr shdr;
|
||||
+ size_t strndx;
|
||||
+ int ndx;
|
||||
+ Elf_Data *symdata, *data;
|
||||
+ GElf_Sym sym;
|
||||
+ char *name;
|
||||
+ const char * flavor = argv[1];
|
||||
+ const char * prefix = "__crc_";
|
||||
+ size_t prefixlen = strlen(prefix);
|
||||
+ const char * symformat = "ksym(%s:%s) = %lx\n";
|
||||
+
|
||||
+ if (argc != 3) {
|
||||
+ fprintf(stderr, "Usage: %s <flavor> <filename>\n", argv[0]);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (elf_version(EV_CURRENT) == EV_NONE) {
|
||||
+ fprintf(stderr, "libelf initialization failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ fd = open(argv[2], O_RDONLY);
|
||||
+ if (fd < 0) {
|
||||
+ perror("open failed");
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ elf = elf_begin(fd, ELF_C_READ, NULL);
|
||||
+ if (!elf) {
|
||||
+ fprintf(stderr, "elf_begin failed: %s\n", elf_errmsg(-1));
|
||||
+ goto err_close;
|
||||
+ }
|
||||
+
|
||||
+ scn = NULL;
|
||||
+ while ((scn = elf_nextscn(elf, scn)) != NULL) {
|
||||
+ if (!gelf_getshdr(scn, &shdr)) {
|
||||
+ fprintf(stderr, "gelf_getshdr failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+
|
||||
+ if (shdr.sh_type == SHT_SYMTAB)
|
||||
+ break;
|
||||
+ }
|
||||
+ if (!scn) {
|
||||
+ fputs("symbol table not found\n", stderr);
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ strndx = shdr.sh_link;
|
||||
+
|
||||
+ symdata = elf_getdata(scn, NULL);
|
||||
+ if (!symdata) {
|
||||
+ fprintf(stderr, "elf_getdata failed: %s\n", elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+
|
||||
+ for (ndx = 0; gelf_getsym(symdata, ndx, &sym) != NULL; ++ndx) {
|
||||
+
|
||||
+ name = elf_strptr(elf, strndx, sym.st_name);
|
||||
+ if (!name) {
|
||||
+ fprintf(stderr, "elf_strptr failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ if (strncmp(prefix, name, prefixlen))
|
||||
+ continue;
|
||||
+
|
||||
+ if (sym.st_shndx >= SHN_LORESERVE) {
|
||||
+ printf(symformat, flavor, name + prefixlen,
|
||||
+ sym.st_value);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ scn = elf_getscn(elf, sym.st_shndx);
|
||||
+ if (!scn) {
|
||||
+ fprintf(stderr, "elf_getscn failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ if (!gelf_getshdr(scn, &shdr)) {
|
||||
+ fprintf(stderr, "gelf_getshdr failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+
|
||||
+ if (shdr.sh_type != SHT_PROGBITS)
|
||||
+ continue;
|
||||
+
|
||||
+ data = elf_getdata_rawchunk(
|
||||
+ elf, shdr.sh_offset + sym.st_value - shdr.sh_addr,
|
||||
+ sizeof(GElf_Word), ELF_T_WORD);
|
||||
+ if (!data) {
|
||||
+ fprintf(stderr, "elf_getdata_rawchunk failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ printf(symformat, flavor, name + prefixlen,
|
||||
+ (unsigned long) *(GElf_Word*)data->d_buf);
|
||||
+ }
|
||||
+
|
||||
+ elf_end(elf);
|
||||
+ close(fd);
|
||||
+ return 0;
|
||||
+
|
||||
+ err_end:
|
||||
+ elf_end(elf);
|
||||
+ err_close:
|
||||
+ close(fd);
|
||||
+ return 1;
|
||||
+}
|
||||
|
||||
From bb1a83cf109eee56c8dee26f7910c772f8c246fc Mon Sep 17 00:00:00 2001
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Thu, 29 Jun 2023 17:47:16 +0200
|
||||
Subject: [PATCH] depmod: Handle installing modules under a prefix
|
||||
|
||||
References: bsc#1212835
|
||||
Patch-mainline: Never, upstream rejected
|
||||
|
||||
Some distributions aim at shipping all files in /usr.
|
||||
|
||||
The path under which kernel modules are installed is hardcoded to /lib
|
||||
which conflicts with this goal.
|
||||
|
||||
When kmod provides the config command, use it to determine the correct
|
||||
module installation path.
|
||||
|
||||
With kmod that does not provide the config command /lib/modules is used
|
||||
as before.
|
||||
|
||||
Note: users can use
|
||||
|
||||
make MODLIB='$(INSTALL_MOD_PATH)/usr/lib/modules/$(KERNELRELEASE)'
|
||||
|
||||
to install modules from mainline kernel on usrmerged system.
|
||||
Not great for KMPs, though
|
||||
|
||||
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
|
||||
Nacked-by: Masahiro Yamada <masahiroy@kernel.org>
|
||||
---
|
||||
v2: Avoid error on systems with kmod that does not support config
|
||||
command
|
||||
v3: More verbose commit message
|
||||
v4:
|
||||
- Document jq requirement
|
||||
- fix bashism
|
||||
- Update to getting full module path, not just additional prefix
|
||||
v5: switch to pkgconfig
|
||||
---
|
||||
Makefile | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 658ec2b8aa74..5a1889fc43c7 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1165,7 +1165,9 @@ export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)
|
||||
# makefile but the argument can be passed to make if needed.
|
||||
#
|
||||
|
||||
-MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
|
||||
+export KERNEL_MODULE_DIRECTORY := $(shell pkg-config --print-variables kmod 2>/dev/null | grep '^module_directory$$' >/dev/null && pkg-config --variable=module_directory kmod || echo /lib/modules)
|
||||
+
|
||||
+MODLIB = $(INSTALL_MOD_PATH)$(KERNEL_MODULE_DIRECTORY)/$(KERNELRELEASE)
|
||||
export MODLIB
|
||||
|
||||
PHONY += prepare0
|
||||
--
|
||||
2.41.0
|
||||
|
||||
From 23133fe6745d567db5b93dc9e6aecc32d31354bd Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Mahoney <jeffm@suse.de>
|
||||
Date: Tue, 31 Mar 2009 09:46:30 -0400
|
||||
Subject: [PATCH] - doc/README.KSYMS: Add to repo.
|
||||
|
||||
---
|
||||
doc/README.KSYMS | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
create mode 100644 doc/README.KSYMS
|
||||
|
||||
diff --git a/doc/README.KSYMS b/doc/README.KSYMS
|
||||
new file mode 100644
|
||||
index 00000000000..39fe7878174
|
||||
--- /dev/null
|
||||
+++ b/doc/README.KSYMS
|
||||
@@ -0,0 +1,6 @@
|
||||
+This file is a place holder for the kernel-syms{,-rt} package. It is used
|
||||
+to group build dependencies for all kernel flavors.
|
||||
+
|
||||
+The KMP build process will build KMPs against all installed kernel flavors
|
||||
+automatically. If you don't need to build against other flavors than the
|
||||
+ones you've already installed - it is safe to uninstall this package.
|
||||
|
||||
From 917d74574856a402e5679d8162407af122c9b8db Mon Sep 17 00:00:00 2001
|
||||
From: Etienne JUVIGNY <ti3nou@gmail.com>
|
||||
Date: Tue, 12 Sep 2023 03:42:23 +0200
|
||||
Subject: Suse: Add kernel-syms package and adapt for /usr/lib usage in Suse instead of the standard /lib symlink.
|
||||
|
||||
|
||||
diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
|
||||
index ac3f2ee6d..e96ffc9a7 100644
|
||||
--- a/scripts/package/kernel.spec
|
||||
+++ b/scripts/package/kernel.spec
|
||||
@@ -17,7 +17,7 @@ Source0: linux.tar.gz
|
||||
Source1: config
|
||||
Source2: diff.patch
|
||||
Provides: kernel-%{KERNELRELEASE}
|
||||
-BuildRequires: bc binutils bison dwarves
|
||||
+BuildRequires: bc binutils bison dwarves coreutils
|
||||
BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
|
||||
BuildRequires: gcc make openssl openssl-devel perl python3 rsync
|
||||
|
||||
@@ -36,6 +36,19 @@ header files define structures and constants that are needed for
|
||||
building most standard programs and are also needed for rebuilding the
|
||||
glibc package.
|
||||
|
||||
+%package syms
|
||||
+Summary: Kernel Symbol Versions (modversions) for the $__KERNELRELEASE kernel
|
||||
+Group: Development/Sources
|
||||
+AutoReqProv: no
|
||||
+Provides: kernel-syms = %{version}
|
||||
+Requires: kernel-devel = %{version}
|
||||
+%description -n kernel-syms
|
||||
+Kernel symbols, such as functions and variables, have version
|
||||
+information attached to them. This package contains the symbol versions
|
||||
+for the standard kernels.
|
||||
+This package is needed for compiling kernel module packages with proper
|
||||
+package dependencies.
|
||||
+
|
||||
%if %{with_devel}
|
||||
%package devel
|
||||
Summary: Development package for building kernel modules to match the %{version} kernel
|
||||
@@ -67,7 +80,7 @@ cp $(%{make} %{makeflags} -s image_name) %{buildroot}/boot/vmlinuz-%{KERNELRELEA
|
||||
%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
|
||||
cp System.map %{buildroot}/boot/System.map-%{KERNELRELEASE}
|
||||
cp .config %{buildroot}/boot/config-%{KERNELRELEASE}
|
||||
-ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
|
||||
+ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/usr/lib/modules/%{KERNELRELEASE}/build
|
||||
%if %{with_devel}
|
||||
%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
|
||||
%endif
|
||||
@@ -99,8 +112,8 @@ fi
|
||||
|
||||
%files
|
||||
%defattr (-, root, root)
|
||||
-/lib/modules/%{KERNELRELEASE}
|
||||
-%exclude /lib/modules/%{KERNELRELEASE}/build
|
||||
+/usr/lib/modules/%{KERNELRELEASE}
|
||||
+%exclude /usr/lib/modules/%{KERNELRELEASE}/build
|
||||
/boot/*
|
||||
|
||||
%files headers
|
||||
@@ -112,5 +125,8 @@ fi
|
||||
%files devel
|
||||
%defattr (-, root, root)
|
||||
/usr/src/kernels/%{KERNELRELEASE}
|
||||
-/lib/modules/%{KERNELRELEASE}/build
|
||||
+/usr/lib/modules/%{KERNELRELEASE}/build
|
||||
%endif
|
||||
+
|
||||
+%files syms
|
||||
+%defattr (-, root, root)
|
@@ -1,703 +0,0 @@
|
||||
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
|
||||
index 2ddca08f8a76..72647850f08e 100644
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -217,6 +217,15 @@ config I2C_CHT_WC
|
||||
combined with a FUSB302 Type-C port-controller as such it is advised
|
||||
to also select CONFIG_TYPEC_FUSB302=m.
|
||||
|
||||
+config I2C_NCT6775
|
||||
+ tristate "Nuvoton NCT6775 and compatible SMBus controller"
|
||||
+ help
|
||||
+ If you say yes to this option, support will be included for the
|
||||
+ Nuvoton NCT6775 and compatible SMBus controllers.
|
||||
+
|
||||
+ This driver can also be built as a module. If so, the module
|
||||
+ will be called i2c-nct6775.
|
||||
+
|
||||
config I2C_NFORCE2
|
||||
tristate "Nvidia nForce2, nForce3 and nForce4"
|
||||
depends on PCI
|
||||
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
|
||||
index 25d60889713c..3c2a9b237ac6 100644
|
||||
--- a/drivers/i2c/busses/Makefile
|
||||
+++ b/drivers/i2c/busses/Makefile
|
||||
@@ -17,6 +17,7 @@ obj-$(CONFIG_I2C_CHT_WC) += i2c-cht-wc.o
|
||||
obj-$(CONFIG_I2C_I801) += i2c-i801.o
|
||||
obj-$(CONFIG_I2C_ISCH) += i2c-isch.o
|
||||
obj-$(CONFIG_I2C_ISMT) += i2c-ismt.o
|
||||
+obj-$(CONFIG_I2C_NCT6775) += i2c-nct6775.o
|
||||
obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o
|
||||
obj-$(CONFIG_I2C_NFORCE2_S4985) += i2c-nforce2-s4985.o
|
||||
obj-$(CONFIG_I2C_NVIDIA_GPU) += i2c-nvidia-gpu.o
|
||||
diff --git a/drivers/i2c/busses/i2c-nct6775.c b/drivers/i2c/busses/i2c-nct6775.c
|
||||
new file mode 100644
|
||||
index 000000000000..0462f0952043
|
||||
--- /dev/null
|
||||
+++ b/drivers/i2c/busses/i2c-nct6775.c
|
||||
@@ -0,0 +1,647 @@
|
||||
+/*
|
||||
+ * i2c-nct6775 - Driver for the SMBus master functionality of
|
||||
+ * Nuvoton NCT677x Super-I/O chips
|
||||
+ *
|
||||
+ * Copyright (C) 2019 Adam Honse <calcprogrammer1@gmail.com>
|
||||
+ *
|
||||
+ * Derived from nct6775 hwmon driver
|
||||
+ * Copyright (C) 2012 Guenter Roeck <linux@roeck-us.net>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/jiffies.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/hwmon.h>
|
||||
+#include <linux/hwmon-sysfs.h>
|
||||
+#include <linux/hwmon-vid.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/ioport.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/bitops.h>
|
||||
+#include <linux/dmi.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/nospec.h>
|
||||
+
|
||||
+#define DRVNAME "i2c-nct6775"
|
||||
+
|
||||
+/* Nuvoton SMBus address offsets */
|
||||
+#define SMBHSTDAT (0 + nuvoton_nct6793d_smba)
|
||||
+#define SMBBLKSZ (1 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTCMD (2 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTIDX (3 + nuvoton_nct6793d_smba) //Index field is the Command field on other controllers
|
||||
+#define SMBHSTCTL (4 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTADD (5 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTERR (9 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTSTS (0xE + nuvoton_nct6793d_smba)
|
||||
+
|
||||
+/* Command register */
|
||||
+#define NCT6793D_READ_BYTE 0
|
||||
+#define NCT6793D_READ_WORD 1
|
||||
+#define NCT6793D_READ_BLOCK 2
|
||||
+#define NCT6793D_BLOCK_WRITE_READ_PROC_CALL 3
|
||||
+#define NCT6793D_PROC_CALL 4
|
||||
+#define NCT6793D_WRITE_BYTE 8
|
||||
+#define NCT6793D_WRITE_WORD 9
|
||||
+#define NCT6793D_WRITE_BLOCK 10
|
||||
+
|
||||
+/* Control register */
|
||||
+#define NCT6793D_MANUAL_START 128
|
||||
+#define NCT6793D_SOFT_RESET 64
|
||||
+
|
||||
+/* Error register */
|
||||
+#define NCT6793D_NO_ACK 32
|
||||
+
|
||||
+/* Status register */
|
||||
+#define NCT6793D_FIFO_EMPTY 1
|
||||
+#define NCT6793D_FIFO_FULL 2
|
||||
+#define NCT6793D_MANUAL_ACTIVE 4
|
||||
+
|
||||
+#define NCT6775_LD_SMBUS 0x0B
|
||||
+
|
||||
+/* Other settings */
|
||||
+#define MAX_RETRIES 400
|
||||
+
|
||||
+enum kinds { nct6106, nct6775, nct6776, nct6779, nct6791, nct6792, nct6793,
|
||||
+ nct6795, nct6796, nct6798 };
|
||||
+
|
||||
+struct nct6775_sio_data {
|
||||
+ int sioreg;
|
||||
+ enum kinds kind;
|
||||
+};
|
||||
+
|
||||
+/* used to set data->name = nct6775_device_names[data->sio_kind] */
|
||||
+static const char * const nct6775_device_names[] = {
|
||||
+ "nct6106",
|
||||
+ "nct6775",
|
||||
+ "nct6776",
|
||||
+ "nct6779",
|
||||
+ "nct6791",
|
||||
+ "nct6792",
|
||||
+ "nct6793",
|
||||
+ "nct6795",
|
||||
+ "nct6796",
|
||||
+ "nct6798",
|
||||
+};
|
||||
+
|
||||
+static const char * const nct6775_sio_names[] __initconst = {
|
||||
+ "NCT6106D",
|
||||
+ "NCT6775F",
|
||||
+ "NCT6776D/F",
|
||||
+ "NCT6779D",
|
||||
+ "NCT6791D",
|
||||
+ "NCT6792D",
|
||||
+ "NCT6793D",
|
||||
+ "NCT6795D",
|
||||
+ "NCT6796D",
|
||||
+ "NCT6798D",
|
||||
+};
|
||||
+
|
||||
+#define SIO_REG_LDSEL 0x07 /* Logical device select */
|
||||
+#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
|
||||
+#define SIO_REG_SMBA 0x62 /* SMBus base address register */
|
||||
+
|
||||
+#define SIO_NCT6106_ID 0xc450
|
||||
+#define SIO_NCT6775_ID 0xb470
|
||||
+#define SIO_NCT6776_ID 0xc330
|
||||
+#define SIO_NCT6779_ID 0xc560
|
||||
+#define SIO_NCT6791_ID 0xc800
|
||||
+#define SIO_NCT6792_ID 0xc910
|
||||
+#define SIO_NCT6793_ID 0xd120
|
||||
+#define SIO_NCT6795_ID 0xd350
|
||||
+#define SIO_NCT6796_ID 0xd420
|
||||
+#define SIO_NCT6798_ID 0xd428
|
||||
+#define SIO_ID_MASK 0xFFF0
|
||||
+
|
||||
+static inline void
|
||||
+superio_outb(int ioreg, int reg, int val)
|
||||
+{
|
||||
+ outb(reg, ioreg);
|
||||
+ outb(val, ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+superio_inb(int ioreg, int reg)
|
||||
+{
|
||||
+ outb(reg, ioreg);
|
||||
+ return inb(ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+superio_select(int ioreg, int ld)
|
||||
+{
|
||||
+ outb(SIO_REG_LDSEL, ioreg);
|
||||
+ outb(ld, ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+superio_enter(int ioreg)
|
||||
+{
|
||||
+ /*
|
||||
+ * Try to reserve <ioreg> and <ioreg + 1> for exclusive access.
|
||||
+ */
|
||||
+ if (!request_muxed_region(ioreg, 2, DRVNAME))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
+ outb(0x87, ioreg);
|
||||
+ outb(0x87, ioreg);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+superio_exit(int ioreg)
|
||||
+{
|
||||
+ outb(0xaa, ioreg);
|
||||
+ outb(0x02, ioreg);
|
||||
+ outb(0x02, ioreg + 1);
|
||||
+ release_region(ioreg, 2);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ISA constants
|
||||
+ */
|
||||
+
|
||||
+#define IOREGION_ALIGNMENT (~7)
|
||||
+#define IOREGION_LENGTH 2
|
||||
+#define ADDR_REG_OFFSET 0
|
||||
+#define DATA_REG_OFFSET 1
|
||||
+
|
||||
+#define NCT6775_REG_BANK 0x4E
|
||||
+#define NCT6775_REG_CONFIG 0x40
|
||||
+
|
||||
+static struct i2c_adapter *nct6775_adapter;
|
||||
+
|
||||
+struct i2c_nct6775_adapdata {
|
||||
+ unsigned short smba;
|
||||
+};
|
||||
+
|
||||
+/* Return negative errno on error. */
|
||||
+static s32 nct6775_access(struct i2c_adapter * adap, u16 addr,
|
||||
+ unsigned short flags, char read_write,
|
||||
+ u8 command, int size, union i2c_smbus_data * data)
|
||||
+{
|
||||
+ struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
|
||||
+ unsigned short nuvoton_nct6793d_smba = adapdata->smba;
|
||||
+ int i, len, cnt;
|
||||
+ union i2c_smbus_data tmp_data;
|
||||
+ int timeout = 0;
|
||||
+
|
||||
+ tmp_data.word = 0;
|
||||
+ cnt = 0;
|
||||
+ len = 0;
|
||||
+
|
||||
+ outb_p(NCT6793D_SOFT_RESET, SMBHSTCTL);
|
||||
+
|
||||
+ switch (size) {
|
||||
+ case I2C_SMBUS_QUICK:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ break;
|
||||
+ case I2C_SMBUS_BYTE_DATA:
|
||||
+ tmp_data.byte = data->byte;
|
||||
+ case I2C_SMBUS_BYTE:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ outb_p(tmp_data.byte, SMBHSTDAT);
|
||||
+ outb_p(NCT6793D_WRITE_BYTE, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ outb_p(NCT6793D_READ_BYTE, SMBHSTCMD);
|
||||
+ }
|
||||
+ break;
|
||||
+ case I2C_SMBUS_WORD_DATA:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ outb_p(data->word & 0xff, SMBHSTDAT);
|
||||
+ outb_p((data->word & 0xff00) >> 8, SMBHSTDAT);
|
||||
+ outb_p(NCT6793D_WRITE_WORD, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ outb_p(NCT6793D_READ_WORD, SMBHSTCMD);
|
||||
+ }
|
||||
+ break;
|
||||
+ case I2C_SMBUS_BLOCK_DATA:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ len = data->block[0];
|
||||
+ if (len == 0 || len > I2C_SMBUS_BLOCK_MAX)
|
||||
+ return -EINVAL;
|
||||
+ outb_p(len, SMBBLKSZ);
|
||||
+
|
||||
+ cnt = 1;
|
||||
+ if (len >= 4) {
|
||||
+ for (i = cnt; i <= 4; i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len -= 4;
|
||||
+ cnt += 4;
|
||||
+ }
|
||||
+ else {
|
||||
+ for (i = cnt; i <= len; i++ ) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ }
|
||||
+
|
||||
+ outb_p(NCT6793D_WRITE_BLOCK, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ return -ENOTSUPP;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_warn(&adap->dev, "Unsupported transaction %d\n", size);
|
||||
+ return -EOPNOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ outb_p(NCT6793D_MANUAL_START, SMBHSTCTL);
|
||||
+
|
||||
+ while ((size == I2C_SMBUS_BLOCK_DATA) && (len > 0)) {
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ timeout = 0;
|
||||
+ while ((inb_p(SMBHSTSTS) & NCT6793D_FIFO_EMPTY) == 0)
|
||||
+ {
|
||||
+ if(timeout > MAX_RETRIES)
|
||||
+ {
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+ usleep_range(250, 500);
|
||||
+ timeout++;
|
||||
+ }
|
||||
+
|
||||
+ //Load more bytes into FIFO
|
||||
+ if (len >= 4) {
|
||||
+ for (i = cnt; i <= (cnt + 4); i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len -= 4;
|
||||
+ cnt += 4;
|
||||
+ }
|
||||
+ else {
|
||||
+ for (i = cnt; i <= (cnt + len); i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ return -ENOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ //wait for manual mode to complete
|
||||
+ timeout = 0;
|
||||
+ while ((inb_p(SMBHSTSTS) & NCT6793D_MANUAL_ACTIVE) != 0)
|
||||
+ {
|
||||
+ if(timeout > MAX_RETRIES)
|
||||
+ {
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+ usleep_range(250, 500);
|
||||
+ timeout++;
|
||||
+ }
|
||||
+
|
||||
+ if ((inb_p(SMBHSTERR) & NCT6793D_NO_ACK) != 0) {
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+ else if ((read_write == I2C_SMBUS_WRITE) || (size == I2C_SMBUS_QUICK)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ switch (size) {
|
||||
+ case I2C_SMBUS_QUICK:
|
||||
+ case I2C_SMBUS_BYTE_DATA:
|
||||
+ data->byte = inb_p(SMBHSTDAT);
|
||||
+ break;
|
||||
+ case I2C_SMBUS_WORD_DATA:
|
||||
+ data->word = inb_p(SMBHSTDAT) + (inb_p(SMBHSTDAT) << 8);
|
||||
+ break;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static u32 nct6775_func(struct i2c_adapter *adapter)
|
||||
+{
|
||||
+ return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
|
||||
+ I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
|
||||
+ I2C_FUNC_SMBUS_BLOCK_DATA;
|
||||
+}
|
||||
+
|
||||
+static const struct i2c_algorithm smbus_algorithm = {
|
||||
+ .smbus_xfer = nct6775_access,
|
||||
+ .functionality = nct6775_func,
|
||||
+};
|
||||
+
|
||||
+static int nct6775_add_adapter(unsigned short smba, const char *name, struct i2c_adapter **padap)
|
||||
+{
|
||||
+ struct i2c_adapter *adap;
|
||||
+ struct i2c_nct6775_adapdata *adapdata;
|
||||
+ int retval;
|
||||
+
|
||||
+ adap = kzalloc(sizeof(*adap), GFP_KERNEL);
|
||||
+ if (adap == NULL) {
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ adap->owner = THIS_MODULE;
|
||||
+ adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
|
||||
+ adap->algo = &smbus_algorithm;
|
||||
+
|
||||
+ adapdata = kzalloc(sizeof(*adapdata), GFP_KERNEL);
|
||||
+ if (adapdata == NULL) {
|
||||
+ kfree(adap);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ adapdata->smba = smba;
|
||||
+
|
||||
+ snprintf(adap->name, sizeof(adap->name),
|
||||
+ "SMBus NCT67xx adapter%s at %04x", name, smba);
|
||||
+
|
||||
+ i2c_set_adapdata(adap, adapdata);
|
||||
+
|
||||
+ retval = i2c_add_adapter(adap);
|
||||
+ if (retval) {
|
||||
+ kfree(adapdata);
|
||||
+ kfree(adap);
|
||||
+ return retval;
|
||||
+ }
|
||||
+
|
||||
+ *padap = adap;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void nct6775_remove_adapter(struct i2c_adapter *adap)
|
||||
+{
|
||||
+ struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
|
||||
+
|
||||
+ if (adapdata->smba) {
|
||||
+ i2c_del_adapter(adap);
|
||||
+ kfree(adapdata);
|
||||
+ kfree(adap);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+//static SIMPLE_DEV_PM_OPS(nct6775_dev_pm_ops, nct6775_suspend, nct6775_resume);
|
||||
+
|
||||
+/*
|
||||
+ * when Super-I/O functions move to a separate file, the Super-I/O
|
||||
+ * bus will manage the lifetime of the device and this module will only keep
|
||||
+ * track of the nct6775 driver. But since we use platform_device_alloc(), we
|
||||
+ * must keep track of the device
|
||||
+ */
|
||||
+static struct platform_device *pdev[2];
|
||||
+
|
||||
+static int nct6775_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct nct6775_sio_data *sio_data = dev_get_platdata(dev);
|
||||
+ struct resource *res;
|
||||
+
|
||||
+ res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
+ if (!devm_request_region(&pdev->dev, res->start, IOREGION_LENGTH,
|
||||
+ DRVNAME))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
+ switch (sio_data->kind) {
|
||||
+ case nct6791:
|
||||
+ case nct6792:
|
||||
+ case nct6793:
|
||||
+ case nct6795:
|
||||
+ case nct6796:
|
||||
+ case nct6798:
|
||||
+ nct6775_add_adapter(res->start, "", &nct6775_adapter);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+/*
|
||||
+static void nct6791_enable_io_mapping(int sioaddr)
|
||||
+{
|
||||
+ int val;
|
||||
+
|
||||
+ val = superio_inb(sioaddr, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE);
|
||||
+ if (val & 0x10) {
|
||||
+ pr_info("Enabling hardware monitor logical device mappings.\n");
|
||||
+ superio_outb(sioaddr, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE,
|
||||
+ val & ~0x10);
|
||||
+ }
|
||||
+}*/
|
||||
+
|
||||
+static struct platform_driver i2c_nct6775_driver = {
|
||||
+ .driver = {
|
||||
+ .name = DRVNAME,
|
||||
+// .pm = &nct6775_dev_pm_ops,
|
||||
+ },
|
||||
+ .probe = nct6775_probe,
|
||||
+};
|
||||
+
|
||||
+static void __exit i2c_nct6775_exit(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if(nct6775_adapter)
|
||||
+ nct6775_remove_adapter(nct6775_adapter);
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(pdev); i++) {
|
||||
+ if (pdev[i])
|
||||
+ platform_device_unregister(pdev[i]);
|
||||
+ }
|
||||
+ platform_driver_unregister(&i2c_nct6775_driver);
|
||||
+}
|
||||
+
|
||||
+/* nct6775_find() looks for a '627 in the Super-I/O config space */
|
||||
+static int __init nct6775_find(int sioaddr, struct nct6775_sio_data *sio_data)
|
||||
+{
|
||||
+ u16 val;
|
||||
+ int err;
|
||||
+ int addr;
|
||||
+
|
||||
+ err = superio_enter(sioaddr);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) |
|
||||
+ superio_inb(sioaddr, SIO_REG_DEVID + 1);
|
||||
+
|
||||
+ switch (val & SIO_ID_MASK) {
|
||||
+ case SIO_NCT6106_ID:
|
||||
+ sio_data->kind = nct6106;
|
||||
+ break;
|
||||
+ case SIO_NCT6775_ID:
|
||||
+ sio_data->kind = nct6775;
|
||||
+ break;
|
||||
+ case SIO_NCT6776_ID:
|
||||
+ sio_data->kind = nct6776;
|
||||
+ break;
|
||||
+ case SIO_NCT6779_ID:
|
||||
+ sio_data->kind = nct6779;
|
||||
+ break;
|
||||
+ case SIO_NCT6791_ID:
|
||||
+ sio_data->kind = nct6791;
|
||||
+ break;
|
||||
+ case SIO_NCT6792_ID:
|
||||
+ sio_data->kind = nct6792;
|
||||
+ break;
|
||||
+ case SIO_NCT6793_ID:
|
||||
+ sio_data->kind = nct6793;
|
||||
+ break;
|
||||
+ case SIO_NCT6795_ID:
|
||||
+ sio_data->kind = nct6795;
|
||||
+ break;
|
||||
+ case SIO_NCT6796_ID:
|
||||
+ sio_data->kind = nct6796;
|
||||
+ break;
|
||||
+ case SIO_NCT6798_ID:
|
||||
+ sio_data->kind = nct6798;
|
||||
+ break;
|
||||
+ default:
|
||||
+ if (val != 0xffff)
|
||||
+ pr_debug("unsupported chip ID: 0x%04x\n", val);
|
||||
+ superio_exit(sioaddr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ /* We have a known chip, find the SMBus I/O address */
|
||||
+ superio_select(sioaddr, NCT6775_LD_SMBUS);
|
||||
+ val = (superio_inb(sioaddr, SIO_REG_SMBA) << 8)
|
||||
+ | superio_inb(sioaddr, SIO_REG_SMBA + 1);
|
||||
+ addr = val & IOREGION_ALIGNMENT;
|
||||
+ if (addr == 0) {
|
||||
+ pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
|
||||
+ superio_exit(sioaddr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ //if (sio_data->kind == nct6791 || sio_data->kind == nct6792 ||
|
||||
+ // sio_data->kind == nct6793 || sio_data->kind == nct6795 ||
|
||||
+ // sio_data->kind == nct6796)
|
||||
+ // nct6791_enable_io_mapping(sioaddr);
|
||||
+
|
||||
+ superio_exit(sioaddr);
|
||||
+ pr_info("Found %s or compatible chip at %#x:%#x\n",
|
||||
+ nct6775_sio_names[sio_data->kind], sioaddr, addr);
|
||||
+ sio_data->sioreg = sioaddr;
|
||||
+
|
||||
+ return addr;
|
||||
+}
|
||||
+
|
||||
+static int __init i2c_nct6775_init(void)
|
||||
+{
|
||||
+ int i, err;
|
||||
+ bool found = false;
|
||||
+ int address;
|
||||
+ struct resource res;
|
||||
+ struct nct6775_sio_data sio_data;
|
||||
+ int sioaddr[2] = { 0x2e, 0x4e };
|
||||
+
|
||||
+ err = platform_driver_register(&i2c_nct6775_driver);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ /*
|
||||
+ * initialize sio_data->kind and sio_data->sioreg.
|
||||
+ *
|
||||
+ * when Super-I/O functions move to a separate file, the Super-I/O
|
||||
+ * driver will probe 0x2e and 0x4e and auto-detect the presence of a
|
||||
+ * nct6775 hardware monitor, and call probe()
|
||||
+ */
|
||||
+ for (i = 0; i < ARRAY_SIZE(pdev); i++) {
|
||||
+ address = nct6775_find(sioaddr[i], &sio_data);
|
||||
+ if (address <= 0)
|
||||
+ continue;
|
||||
+
|
||||
+ found = true;
|
||||
+
|
||||
+ pdev[i] = platform_device_alloc(DRVNAME, address);
|
||||
+ if (!pdev[i]) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto exit_device_unregister;
|
||||
+ }
|
||||
+
|
||||
+ err = platform_device_add_data(pdev[i], &sio_data,
|
||||
+ sizeof(struct nct6775_sio_data));
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+
|
||||
+ memset(&res, 0, sizeof(res));
|
||||
+ res.name = DRVNAME;
|
||||
+ res.start = address;
|
||||
+ res.end = address + IOREGION_LENGTH - 1;
|
||||
+ res.flags = IORESOURCE_IO;
|
||||
+
|
||||
+ err = acpi_check_resource_conflict(&res);
|
||||
+ if (err) {
|
||||
+ platform_device_put(pdev[i]);
|
||||
+ pdev[i] = NULL;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ err = platform_device_add_resources(pdev[i], &res, 1);
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+
|
||||
+ /* platform_device_add calls probe() */
|
||||
+ err = platform_device_add(pdev[i]);
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+ }
|
||||
+ if (!found) {
|
||||
+ err = -ENODEV;
|
||||
+ goto exit_unregister;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+exit_device_put:
|
||||
+ platform_device_put(pdev[i]);
|
||||
+exit_device_unregister:
|
||||
+ while (--i >= 0) {
|
||||
+ if (pdev[i])
|
||||
+ platform_device_unregister(pdev[i]);
|
||||
+ }
|
||||
+exit_unregister:
|
||||
+ platform_driver_unregister(&i2c_nct6775_driver);
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+MODULE_AUTHOR("Adam Honse <calcprogrammer1@gmail.com>");
|
||||
+MODULE_DESCRIPTION("SMBus driver for NCT6775F and compatible chips");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+
|
||||
+module_init(i2c_nct6775_init);
|
||||
+module_exit(i2c_nct6775_exit);
|
||||
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
|
||||
index 30ded6422e7b..e25ce84c26af 100644
|
||||
--- a/drivers/i2c/busses/i2c-piix4.c
|
||||
+++ b/drivers/i2c/busses/i2c-piix4.c
|
||||
@@ -467,11 +467,11 @@ static int piix4_transaction(struct i2c_adapter *piix4_adapter)
|
||||
if (srvrworks_csb5_delay) /* Extra delay for SERVERWORKS_CSB5 */
|
||||
usleep_range(2000, 2100);
|
||||
else
|
||||
- usleep_range(250, 500);
|
||||
+ usleep_range(25, 50);
|
||||
|
||||
while ((++timeout < MAX_TIMEOUT) &&
|
||||
((temp = inb_p(SMBHSTSTS)) & 0x01))
|
||||
- usleep_range(250, 500);
|
||||
+ usleep_range(25, 50);
|
||||
|
||||
/* If the SMBus is still busy, we give up */
|
||||
if (timeout == MAX_TIMEOUT) {
|
@@ -1,151 +0,0 @@
|
||||
From d50977b164e708bf523a35ef53315355528c3ca6 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
|
||||
Date: Mon, 16 Sep 2019 04:53:20 +0200
|
||||
Subject: [PATCH] ZEN: Add sysctl and CONFIG to disallow unprivileged
|
||||
CLONE_NEWUSER
|
||||
|
||||
Our default behavior continues to match the vanilla kernel.
|
||||
---
|
||||
include/linux/user_namespace.h | 4 ++++
|
||||
init/Kconfig | 16 ++++++++++++++++
|
||||
kernel/fork.c | 14 ++++++++++++++
|
||||
kernel/sysctl.c | 12 ++++++++++++
|
||||
kernel/user_namespace.c | 7 +++++++
|
||||
5 files changed, 53 insertions(+)
|
||||
|
||||
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
|
||||
index 45f09bec02c485..87b20e2ee27445 100644
|
||||
--- a/include/linux/user_namespace.h
|
||||
+++ b/include/linux/user_namespace.h
|
||||
@@ -148,6 +148,8 @@ static inline void set_userns_rlimit_max(struct user_namespace *ns,
|
||||
|
||||
#ifdef CONFIG_USER_NS
|
||||
|
||||
+extern int unprivileged_userns_clone;
|
||||
+
|
||||
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
|
||||
{
|
||||
if (ns)
|
||||
@@ -181,6 +183,8 @@ extern bool current_in_userns(const struct user_namespace *target_ns);
|
||||
struct ns_common *ns_get_owner(struct ns_common *ns);
|
||||
#else
|
||||
|
||||
+#define unprivileged_userns_clone 0
|
||||
+
|
||||
static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
|
||||
{
|
||||
return &init_user_ns;
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 94125d3b6893c7..9f7139b536f638 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1247,6 +1247,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/fork.c b/kernel/fork.c
|
||||
index 08969f5aa38d59..ff601cb7a1fae0 100644
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -98,6 +98,10 @@
|
||||
#include <linux/io_uring.h>
|
||||
#include <linux/bpf.h>
|
||||
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+#include <linux/user_namespace.h>
|
||||
+#endif
|
||||
+
|
||||
#include <asm/pgalloc.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <asm/mmu_context.h>
|
||||
@@ -2008,6 +2012,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.
|
||||
@@ -3166,6 +3174,12 @@ int ksys_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 c6d9dec11b749d..9a4514ad481b21 100644
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -81,6 +81,9 @@
|
||||
#ifdef CONFIG_RT_MUTEXES
|
||||
#include <linux/rtmutex.h>
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+#include <linux/user_namespace.h>
|
||||
+#endif
|
||||
|
||||
/* shared constants to be used in various sysctls */
|
||||
const int sysctl_vals[] = { 0, 1, 2, 3, 4, 100, 200, 1000, 3000, INT_MAX, 65535, -1 };
|
||||
@@ -1659,6 +1662,15 @@ static struct ctl_table kern_table[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
+#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 54211dbd516c57..16ca0c1516298d 100644
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -22,6 +22,13 @@
|
||||
#include <linux/bsearch.h>
|
||||
#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 __ro_after_init;
|
||||
static DEFINE_MUTEX(userns_state_mutex);
|
||||
|
@@ -1,475 +0,0 @@
|
||||
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,14 +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 depends on char/agp/
|
||||
-obj-$(CONFIG_FB_I810) += video/fbdev/i810/
|
||||
-
|
||||
obj-$(CONFIG_PARPORT) += parport/
|
||||
obj-y += base/ block/ misc/ mfd/ nfc/
|
||||
obj-$(CONFIG_LIBNVDIMM) += nvdimm/
|
||||
@@ -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
|
||||
|
||||
From 676c2dc63592f52b716515573a3a825582a371e9 Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Sat, 8 Dec 2018 18:21:32 +0000
|
||||
Subject: [PATCH 1/9] x86/vdso: Use lfence instead of rep and nop
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
arch/x86/include/asm/vdso/processor.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/vdso/processor.h b/arch/x86/include/asm/vdso/processor.h
|
||||
index 57b1a7034c64..e2c45674f989 100644
|
||||
--- a/arch/x86/include/asm/vdso/processor.h
|
||||
+++ b/arch/x86/include/asm/vdso/processor.h
|
||||
@@ -10,7 +10,7 @@
|
||||
/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
|
||||
static __always_inline void rep_nop(void)
|
||||
{
|
||||
- asm volatile("rep; nop" ::: "memory");
|
||||
+ asm volatile("lfence" ::: "memory");
|
||||
}
|
||||
|
||||
static __always_inline void cpu_relax(void)
|
||||
--
|
||||
2.39.1
|
||||
|
||||
From 48dc9669f8db68adc480ffc2698ed8204440e45b Mon Sep 17 00:00:00 2001
|
||||
From: Arjan van de Ven <arjan@linux.intel.com>
|
||||
Date: Thu, 13 Dec 2018 01:00:49 +0000
|
||||
Subject: [PATCH 2/9] sched/wait: Do accept() in LIFO order for cache
|
||||
efficiency
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/wait.h | 2 ++
|
||||
kernel/sched/wait.c | 24 ++++++++++++++++++++++++
|
||||
net/ipv4/inet_connection_sock.c | 2 +-
|
||||
3 files changed, 27 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/wait.h b/include/linux/wait.h
|
||||
index a0307b516b09..edc21128f387 100644
|
||||
--- a/include/linux/wait.h
|
||||
+++ b/include/linux/wait.h
|
||||
@@ -165,6 +165,7 @@ static inline bool wq_has_sleeper(struct wait_queue_head *wq_head)
|
||||
|
||||
extern void add_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
extern void add_wait_queue_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
+extern void add_wait_queue_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
extern void add_wait_queue_priority(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
extern void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
|
||||
@@ -1192,6 +1193,7 @@ do { \
|
||||
*/
|
||||
void prepare_to_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
bool prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
+void prepare_to_wait_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
long prepare_to_wait_event(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state);
|
||||
void finish_wait(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry);
|
||||
long wait_woken(struct wait_queue_entry *wq_entry, unsigned mode, long timeout);
|
||||
diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
|
||||
index 133b74730738..1647fb8662eb 100644
|
||||
--- a/kernel/sched/wait.c
|
||||
+++ b/kernel/sched/wait.c
|
||||
@@ -47,6 +47,17 @@ void add_wait_queue_priority(struct wait_queue_head *wq_head, struct wait_queue_
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(add_wait_queue_priority);
|
||||
|
||||
+void add_wait_queue_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
|
||||
+{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ wq_entry->flags |= WQ_FLAG_EXCLUSIVE;
|
||||
+ spin_lock_irqsave(&wq_head->lock, flags);
|
||||
+ __add_wait_queue(wq_head, wq_entry);
|
||||
+ spin_unlock_irqrestore(&wq_head->lock, flags);
|
||||
+}
|
||||
+EXPORT_SYMBOL(add_wait_queue_exclusive_lifo);
|
||||
+
|
||||
void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry)
|
||||
{
|
||||
unsigned long flags;
|
||||
@@ -293,6 +304,19 @@ prepare_to_wait_exclusive(struct wait_queue_head *wq_head, struct wait_queue_ent
|
||||
}
|
||||
EXPORT_SYMBOL(prepare_to_wait_exclusive);
|
||||
|
||||
+void prepare_to_wait_exclusive_lifo(struct wait_queue_head *wq_head, struct wait_queue_entry *wq_entry, int state)
|
||||
+{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ wq_entry->flags |= WQ_FLAG_EXCLUSIVE;
|
||||
+ spin_lock_irqsave(&wq_head->lock, flags);
|
||||
+ if (list_empty(&wq_entry->entry))
|
||||
+ __add_wait_queue(wq_head, wq_entry);
|
||||
+ set_current_state(state);
|
||||
+ spin_unlock_irqrestore(&wq_head->lock, flags);
|
||||
+}
|
||||
+EXPORT_SYMBOL(prepare_to_wait_exclusive_lifo);
|
||||
+
|
||||
void init_wait_entry(struct wait_queue_entry *wq_entry, int flags)
|
||||
{
|
||||
wq_entry->flags = flags;
|
||||
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
|
||||
index f2c43f67187d..9885bfb429a2 100644
|
||||
--- a/net/ipv4/inet_connection_sock.c
|
||||
+++ b/net/ipv4/inet_connection_sock.c
|
||||
@@ -606,7 +606,7 @@ static int inet_csk_wait_for_connect(struct sock *sk, long timeo)
|
||||
* having to remove and re-insert us on the wait queue.
|
||||
*/
|
||||
for (;;) {
|
||||
- prepare_to_wait_exclusive(sk_sleep(sk), &wait,
|
||||
+ prepare_to_wait_exclusive_lifo(sk_sleep(sk), &wait,
|
||||
TASK_INTERRUPTIBLE);
|
||||
release_sock(sk);
|
||||
if (reqsk_queue_empty(&icsk->icsk_accept_queue))
|
||||
--
|
||||
2.39.1
|
@@ -1,822 +0,0 @@
|
||||
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
|
||||
|
||||
---
|
||||
init/Makefile | 2 +-
|
||||
1 file changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/init/Makefile b/init/Makefile
|
||||
index baf3ab8d9d49..854e32e6aec7 100755
|
||||
--- a/init/Makefile
|
||||
+++ b/init/Makefile
|
||||
@@ -19,7 +19,7 @@ else
|
||||
|
||||
# Maximum length of UTS_VERSION is 64 chars
|
||||
filechk_uts_version = \
|
||||
- utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "$(build-timestamp)" | cut -b -64); \
|
||||
+ utsver=$$(echo '$(pound)'"$(build-version)" $(smp-flag-y) $(preempt-flag-y) "TKG" "$(build-timestamp)" | cut -b -64); \
|
||||
echo '$(pound)'define UTS_VERSION \""$${utsver}"\"
|
||||
|
||||
#
|
||||
--
|
||||
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
|
||||
|
||||
|
||||
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
|
||||
index f788cd61df21..2bfbb4213707 100644
|
||||
--- a/kernel/sched/rt.c
|
||||
+++ b/kernel/sched/rt.c
|
||||
@@ -15,9 +15,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;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
|
||||
--
|
||||
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 the tagged commit, we pretty print it.
|
||||
--
|
||||
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] Add Zenify option
|
||||
|
||||
---
|
||||
init/Kconfig | 32 ++++++++++++++++++++++++++++++++
|
||||
1 file changed, 32 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
|
||||
|
||||
--
|
||||
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 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 (16777216)
|
||||
|
||||
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,19 +623,19 @@ 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->tag_set && q->tag_set->flags & BLK_MQ_F_NO_SCHED_BY_DEFAULT)
|
||||
return NULL;
|
||||
|
||||
if (q->nr_hw_queues != 1 &&
|
||||
!blk_mq_is_shared_tags(q->tag_set->flags))
|
||||
return NULL;
|
||||
|
||||
- return elevator_find_get(q, "mq-deadline");
|
||||
+ return elevator_find_get(q, "bfq");
|
||||
}
|
||||
|
||||
/*
|
||||
--
|
||||
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
|
||||
|
||||
From 379cbab18b5c75c622b93e2c5abdfac141fe9654 Mon Sep 17 00:00:00 2001
|
||||
From: Kenny Levinsen <kl@kl.wtf>
|
||||
Date: Sun, 27 Dec 2020 14:43:13 +0000
|
||||
Subject: [PATCH] ZEN: Input: evdev - use call_rcu when detaching client
|
||||
|
||||
Significant time was spent on synchronize_rcu in evdev_detach_client
|
||||
when applications closed evdev devices. Switching VT away from a
|
||||
graphical environment commonly leads to mass input device closures,
|
||||
which could lead to noticable delays on systems with many input devices.
|
||||
|
||||
Replace synchronize_rcu with call_rcu, deferring reclaim of the evdev
|
||||
client struct till after the RCU grace period instead of blocking the
|
||||
calling application.
|
||||
|
||||
While this does not solve all slow evdev fd closures, it takes care of a
|
||||
good portion of them, including this simple test:
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int idx, fd;
|
||||
const char *path = "/dev/input/event0";
|
||||
for (idx = 0; idx < 1000; idx++) {
|
||||
if ((fd = open(path, O_RDWR)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
close(fd);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
Time to completion of above test when run locally:
|
||||
|
||||
Before: 0m27.111s
|
||||
After: 0m0.018s
|
||||
|
||||
Signed-off-by: Kenny Levinsen <kl@kl.wtf>
|
||||
---
|
||||
drivers/input/evdev.c | 19 +++++++++++--------
|
||||
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
|
||||
index 95f90699d2b17b..2b10fe29d2c8d9 100644
|
||||
--- a/drivers/input/evdev.c
|
||||
+++ b/drivers/input/evdev.c
|
||||
@@ -46,6 +46,7 @@ struct evdev_client {
|
||||
struct fasync_struct *fasync;
|
||||
struct evdev *evdev;
|
||||
struct list_head node;
|
||||
+ struct rcu_head rcu;
|
||||
enum input_clock_type clk_type;
|
||||
bool revoked;
|
||||
unsigned long *evmasks[EV_CNT];
|
||||
@@ -377,13 +378,22 @@ static void evdev_attach_client(struct evdev *evdev,
|
||||
spin_unlock(&evdev->client_lock);
|
||||
}
|
||||
|
||||
+static void evdev_reclaim_client(struct rcu_head *rp)
|
||||
+{
|
||||
+ struct evdev_client *client = container_of(rp, struct evdev_client, rcu);
|
||||
+ unsigned int i;
|
||||
+ for (i = 0; i < EV_CNT; ++i)
|
||||
+ bitmap_free(client->evmasks[i]);
|
||||
+ kvfree(client);
|
||||
+}
|
||||
+
|
||||
static void evdev_detach_client(struct evdev *evdev,
|
||||
struct evdev_client *client)
|
||||
{
|
||||
spin_lock(&evdev->client_lock);
|
||||
list_del_rcu(&client->node);
|
||||
spin_unlock(&evdev->client_lock);
|
||||
- synchronize_rcu();
|
||||
+ call_rcu(&client->rcu, evdev_reclaim_client);
|
||||
}
|
||||
|
||||
static int evdev_open_device(struct evdev *evdev)
|
||||
@@ -436,7 +446,6 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
struct evdev_client *client = file->private_data;
|
||||
struct evdev *evdev = client->evdev;
|
||||
- unsigned int i;
|
||||
|
||||
mutex_lock(&evdev->mutex);
|
||||
|
||||
@@ -448,11 +457,6 @@ static int evdev_release(struct inode *inode, struct file *file)
|
||||
|
||||
evdev_detach_client(evdev, client);
|
||||
|
||||
- for (i = 0; i < EV_CNT; ++i)
|
||||
- bitmap_free(client->evmasks[i]);
|
||||
-
|
||||
- kvfree(client);
|
||||
-
|
||||
evdev_close_device(evdev);
|
||||
|
||||
return 0;
|
||||
@@ -495,7 +499,6 @@ static int evdev_open(struct inode *inode, struct file *file)
|
||||
|
||||
err_free_client:
|
||||
evdev_detach_client(evdev, client);
|
||||
- kvfree(client);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
||||
From 2aafb56f20e4b63d8c4af172fe9d017c64bc4129 Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Wed, 20 Oct 2021 20:50:11 -0700
|
||||
Subject: [PATCH] ZEN: mm: Lower the non-hugetlbpage pageblock size to reduce
|
||||
scheduling delays
|
||||
|
||||
The page allocator processes free pages in groups of pageblocks, where
|
||||
the size of a pageblock is typically quite large (1024 pages without
|
||||
hugetlbpage support). Pageblocks are processed atomically with the zone
|
||||
lock held, which can cause severe scheduling delays on both the CPU
|
||||
going through the pageblock and any other CPUs waiting to acquire the
|
||||
zone lock. A frequent offender is move_freepages_block(), which is used
|
||||
by rmqueue() for page allocation.
|
||||
|
||||
As it turns out, there's no requirement for pageblocks to be so large,
|
||||
so the pageblock order can simply be reduced to ease the scheduling
|
||||
delays and zone lock contention. PAGE_ALLOC_COSTLY_ORDER is used as a
|
||||
reasonable setting to ensure non-costly page allocation requests can
|
||||
still be serviced without always needing to free up more than one
|
||||
pageblock's worth of pages at a time.
|
||||
|
||||
This has a noticeable effect on overall system latency when memory
|
||||
pressure is elevated. The various mm functions which operate on
|
||||
pageblocks no longer appear in the preemptoff tracer, where previously
|
||||
they would spend up to 100 ms on a mobile arm64 CPU processing a
|
||||
pageblock with preemption disabled and the zone lock held.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
include/linux/pageblock-flags.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h
|
||||
index 5f1ae07d724b88..97cda629c9e909 100644
|
||||
--- a/include/linux/pageblock-flags.h
|
||||
+++ b/include/linux/pageblock-flags.h
|
||||
@@ -48,7 +48,7 @@ extern unsigned int pageblock_order;
|
||||
#else /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
/* If huge pages are not used, group by MAX_ORDER_NR_PAGES */
|
||||
-#define pageblock_order MAX_PAGE_ORDER
|
||||
+#define pageblock_order PAGE_ALLOC_COSTLY_ORDER
|
||||
|
||||
#endif /* CONFIG_HUGETLB_PAGE */
|
||||
|
||||
|
||||
From f22bc56be85e69c71c8e36041193856bb8b01525 Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Wed, 20 Oct 2021 20:50:32 -0700
|
||||
Subject: [PATCH] ZEN: mm: Don't hog the CPU and zone lock in rmqueue_bulk()
|
||||
|
||||
There is noticeable scheduling latency and heavy zone lock contention
|
||||
stemming from rmqueue_bulk's single hold of the zone lock while doing
|
||||
its work, as seen with the preemptoff tracer. There's no actual need for
|
||||
rmqueue_bulk() to hold the zone lock the entire time; it only does so
|
||||
for supposed efficiency. As such, we can relax the zone lock and even
|
||||
reschedule when IRQs are enabled in order to keep the scheduling delays
|
||||
and zone lock contention at bay. Forward progress is still guaranteed,
|
||||
as the zone lock can only be relaxed after page removal.
|
||||
|
||||
With this change, rmqueue_bulk() no longer appears as a serious offender
|
||||
in the preemptoff tracer, and system latency is noticeably improved.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
mm/page_alloc.c | 23 ++++++++++++++++++-----
|
||||
1 file changed, 18 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
|
||||
index a0b0397e29ee4c..87a983a356530c 100644
|
||||
--- a/mm/page_alloc.c
|
||||
+++ b/mm/page_alloc.c
|
||||
@@ -3118,15 +3119,16 @@ __rmqueue(struct zone *zone, unsigned int order, int migratetype,
|
||||
}
|
||||
|
||||
/*
|
||||
- * Obtain a specified number of elements from the buddy allocator, all under
|
||||
- * a single hold of the lock, for efficiency. Add them to the supplied list.
|
||||
- * Returns the number of new pages which were placed at *list.
|
||||
+ * Obtain a specified number of elements from the buddy allocator, and relax the
|
||||
+ * zone lock when needed. Add them to the supplied list. Returns the number of
|
||||
+ * new pages which were placed at *list.
|
||||
*/
|
||||
static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
unsigned long count, struct list_head *list,
|
||||
int migratetype, unsigned int alloc_flags)
|
||||
{
|
||||
unsigned long flags;
|
||||
- int i;
|
||||
+ const bool can_resched = !preempt_count() && !irqs_disabled();
|
||||
+ int i, allocated = 0, last_mod = 0;
|
||||
|
||||
/* Caller must hold IRQ-safe pcp->lock so IRQs are disabled. */
|
||||
spin_lock(&zone->lock);
|
||||
@@ -3137,6 +3138,18 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
if (unlikely(page == NULL))
|
||||
break;
|
||||
|
||||
+ /* Reschedule and ease the contention on the lock if needed */
|
||||
+ if (i + 1 < count && ((can_resched && need_resched()) ||
|
||||
+ spin_needbreak(&zone->lock))) {
|
||||
+ __mod_zone_page_state(zone, NR_FREE_PAGES,
|
||||
+ -((i + 1 - last_mod) << order));
|
||||
+ last_mod = i + 1;
|
||||
+ spin_unlock(&zone->lock);
|
||||
+ if (can_resched)
|
||||
+ cond_resched();
|
||||
+ spin_lock(&zone->lock);
|
||||
+ }
|
||||
+
|
||||
if (unlikely(check_pcp_refill(page, order)))
|
||||
continue;
|
||||
|
||||
@@ -3163,7 +3176,7 @@ static int rmqueue_bulk(struct zone *zone, unsigned int order,
|
||||
* on i. Do not confuse with 'allocated' which is the number of
|
||||
* pages added to the pcp list.
|
||||
*/
|
||||
- __mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
|
||||
+ __mod_zone_page_state(zone, NR_FREE_PAGES, -((i - last_mod) << order));
|
||||
spin_unlock(&zone->lock);
|
||||
return allocated;
|
||||
}
|
||||
|
||||
From 6329525a0fa10cd13f39b76948b1296150f75c95 Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 29 Aug 2022 16:47:26 +0000
|
||||
Subject: [PATCH 14/16] XANMOD: Makefile: Disable GCC vectorization on trees
|
||||
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
Makefile | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 3f6628780eb2..35a5ae1ede42 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1069,6 +1069,9 @@ endif
|
||||
KBUILD_CFLAGS-$(call gcc-min-version, 90100) += -Wno-alloc-size-larger-than
|
||||
KBUILD_CFLAGS += $(KBUILD_CFLAGS-y) $(CONFIG_CC_IMPLICIT_FALLTHROUGH)
|
||||
|
||||
+# disable GCC vectorization on trees
|
||||
+KBUILD_CFLAGS += $(call cc-option, -fno-tree-vectorize)
|
||||
+
|
||||
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||
KBUILD_CFLAGS += -fno-strict-overflow
|
||||
|
||||
--
|
||||
2.39.1
|
||||
|
||||
From f997578464b2c4c63e7bd1afbfef56212ee44f2d Mon Sep 17 00:00:00 2001
|
||||
From: Etienne JUVIGNY <ti3nou@gmail.com>
|
||||
Date: Mon, 6 Mar 2023 13:54:09 +0100
|
||||
Subject: Don't add -dirty versioning on unclean trees
|
||||
|
||||
|
||||
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
|
||||
index ca5795e16..ad0d94477 100755
|
||||
--- a/scripts/setlocalversion
|
||||
+++ b/scripts/setlocalversion
|
||||
@@ -85,12 +85,12 @@ scm_version()
|
||||
# git-diff-index does not refresh the index, so it may give misleading
|
||||
# results.
|
||||
# See git-update-index(1), git-diff-index(1), and git-status(1).
|
||||
- if {
|
||||
- git --no-optional-locks status -uno --porcelain 2>/dev/null ||
|
||||
- git diff-index --name-only HEAD
|
||||
- } | read dummy; then
|
||||
- printf '%s' -dirty
|
||||
- fi
|
||||
+ #if {
|
||||
+ # git --no-optional-locks status -uno --porcelain 2>/dev/null ||
|
||||
+ # git diff-index --name-only HEAD
|
||||
+ #} | read dummy; then
|
||||
+ # printf '%s' -dirty
|
||||
+ #fi
|
||||
}
|
||||
|
||||
collect_files()
|
||||
|
||||
From 1cf70fdd26245554ab30234722338d8160dff394 Mon Sep 17 00:00:00 2001
|
||||
From: Steven Barrett <steven@liquorix.net>
|
||||
Date: Sat, 21 May 2022 15:15:09 -0500
|
||||
Subject: [PATCH] ZEN: INTERACTIVE: dm-crypt: Disable workqueues for crypto ops
|
||||
|
||||
Queueing in dm-crypt for crypto operations reduces performance on modern
|
||||
systems. As discussed in an article from Cloudflare, they discovered
|
||||
that queuing was introduced because the crypto subsystem used to be
|
||||
synchronous. Since it's now asynchronous, we get double queueing when
|
||||
using the subsystem through dm-crypt. This is obviously undesirable and
|
||||
reduces throughput and increases latency.
|
||||
|
||||
Disable queueing when using our Zen Interactive configuration.
|
||||
|
||||
Fixes: https://github.com/zen-kernel/zen-kernel/issues/282
|
||||
|
||||
tkg: Config switch changed to our local "ZENIFY" toggle
|
||||
---
|
||||
drivers/md/dm-crypt.c | 5 +++++
|
||||
init/Kconfig | 1 +
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
|
||||
index 2ae8560b6a14ad..cb49218030c88b 100644
|
||||
--- a/drivers/md/dm-crypt.c
|
||||
+++ b/drivers/md/dm-crypt.c
|
||||
@@ -3242,6 +3242,11 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+ set_bit(DM_CRYPT_NO_READ_WORKQUEUE, &cc->flags);
|
||||
+ set_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags);
|
||||
+#endif
|
||||
+
|
||||
ret = crypt_ctr_cipher(ti, argv[0], argv[1]);
|
||||
if (ret < 0)
|
||||
goto bad;
|
@@ -1,117 +0,0 @@
|
||||
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/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 MIN_FREQUENCY_UP_THRESHOLD (1)
|
||||
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
||||
|
||||
From cba31b19f8c38696b13ba48e0e8b6dbe747d6bae Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <admfrade@gmail.com>
|
||||
Date: Mon, 29 Jan 2018 17:31:25 +0000
|
||||
Subject: [PATCH 10/16] XANMOD: mm/vmscan: vm_swappiness = 30 decreases the
|
||||
amount of swapping
|
||||
|
||||
Signed-off-by: Alexandre Frade <admfrade@gmail.com>
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
mm/vmscan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/mm/vmscan.c b/mm/vmscan.c
|
||||
index 5b7b8d4f5297..549684b29418 100644
|
||||
--- a/mm/vmscan.c
|
||||
+++ b/mm/vmscan.c
|
||||
@@ -190,7 +190,7 @@ struct scan_control {
|
||||
/*
|
||||
* From 0 .. 200. Higher means more swappy.
|
||||
*/
|
||||
-int vm_swappiness = 60;
|
||||
+int vm_swappiness = 30;
|
||||
|
||||
static void set_task_reclaim_state(struct task_struct *task,
|
||||
struct reclaim_state *rs)
|
||||
--
|
||||
2.39.1
|
@@ -1,88 +0,0 @@
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/fair.c linux-6.6.1/kernel/sched/fair.c
|
||||
--- vlinux-6.6.1/kernel/sched/fair.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/fair.c 2023-11-11 15:51:09.630279108 +0100
|
||||
@@ -75,10 +75,19 @@
|
||||
*
|
||||
* (default: 0.75 msec * (1 + ilog(ncpus)), units: nanoseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+unsigned int sysctl_sched_base_slice = 400000ULL;
|
||||
+static unsigned int normalized_sysctl_sched_base_slice = 400000ULL;
|
||||
+#else
|
||||
unsigned int sysctl_sched_base_slice = 750000ULL;
|
||||
static unsigned int normalized_sysctl_sched_base_slice = 750000ULL;
|
||||
-
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+const_debug unsigned int sysctl_sched_migration_cost = 250000UL;
|
||||
+#else
|
||||
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)
|
||||
@@ -135,8 +143,12 @@
|
||||
*
|
||||
* (default: 5 msec, units: microseconds)
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static unsigned int sysctl_sched_cfs_bandwidth_slice = 3000UL;
|
||||
+#else
|
||||
static unsigned int sysctl_sched_cfs_bandwidth_slice = 5000UL;
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#ifdef CONFIG_NUMA_BALANCING
|
||||
/* Restrict the NUMA promotion throughput (MB/s) for each target node. */
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/sched.h linux-6.6.1/kernel/sched/sched.h
|
||||
--- vlinux-6.6.1/kernel/sched/sched.h 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/sched.h 2023-11-11 15:52:03.241725632 +0100
|
||||
@@ -2515,7 +2515,7 @@
|
||||
|
||||
extern void check_preempt_curr(struct rq *rq, struct task_struct *p, int flags);
|
||||
|
||||
-#ifdef CONFIG_PREEMPT_RT
|
||||
+#if defined(CONFIG_PREEMPT_RT) || defined(CONFIG_ZENIFY)
|
||||
#define SCHED_NR_MIGRATE_BREAK 8
|
||||
#else
|
||||
#define SCHED_NR_MIGRATE_BREAK 32
|
||||
diff -Naur vlinux-6.6.1/kernel/sched/topology.c linux-6.6.1/kernel/sched/topology.c
|
||||
--- vlinux-6.6.1/kernel/sched/topology.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/kernel/sched/topology.c 2023-11-11 15:56:54.602473894 +0100
|
||||
@@ -208,7 +208,7 @@
|
||||
|
||||
#if defined(CONFIG_ENERGY_MODEL) && defined(CONFIG_CPU_FREQ_GOV_SCHEDUTIL)
|
||||
DEFINE_STATIC_KEY_FALSE(sched_energy_present);
|
||||
-static unsigned int sysctl_sched_energy_aware = 1;
|
||||
+static unsigned int sysctl_sched_energy_aware = 0;
|
||||
static DEFINE_MUTEX(sched_energy_mutex);
|
||||
static bool sched_energy_update;
|
||||
|
||||
diff -Naur vlinux-6.6.1/mm/page-writeback.c linux-6.6.1/mm/page-writeback.c
|
||||
--- vlinux-6.6.1/mm/page-writeback.c 2023-11-08 11:56:25.000000000 +0100
|
||||
+++ linux-6.6.1/mm/page-writeback.c 2023-11-11 16:07:22.214222902 +0100
|
||||
@@ -71,7 +71,11 @@
|
||||
/*
|
||||
* Start background writeback (via writeback threads) at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static int dirty_background_ratio = 20;
|
||||
+#else
|
||||
static int dirty_background_ratio = 10;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* dirty_background_bytes starts at 0 (disabled) so that it is a function of
|
||||
@@ -88,7 +92,11 @@
|
||||
/*
|
||||
* The generator of dirty data starts writeback at this percentage
|
||||
*/
|
||||
+#ifdef CONFIG_ZENIFY
|
||||
+static int vm_dirty_ratio = 50;
|
||||
+#else
|
||||
static int vm_dirty_ratio = 20;
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
@@ -1,90 +0,0 @@
|
||||
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)
|
@@ -1,193 +0,0 @@
|
||||
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
|
||||
@@ -5102,6 +5102,7 @@
|
||||
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
|
||||
/* Wangxun nics */
|
||||
{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
|
||||
+ { PCI_ANY_ID, PCI_ANY_ID, pcie_acs_overrides },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
|
@@ -1,166 +0,0 @@
|
||||
From b70e738f08403950aa3053c36b98c6b0eeb0eb90 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Andr=C3=A9=20Almeida?= <andrealmeid@collabora.com>
|
||||
Date: Mon, 25 Oct 2021 09:49:42 -0300
|
||||
Subject: [PATCH] futex: Add entry point for FUTEX_WAIT_MULTIPLE (opcode 31)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Add an option to wait on multiple futexes using the old interface, that
|
||||
uses opcode 31 through futex() syscall. Do that by just translation the
|
||||
old interface to use the new code. This allows old and stable versions
|
||||
of Proton to still use fsync in new kernel releases.
|
||||
|
||||
Signed-off-by: André Almeida <andrealmeid@collabora.com>
|
||||
---
|
||||
include/uapi/linux/futex.h | 13 +++++++
|
||||
kernel/futex/syscalls.c | 75 +++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 87 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/uapi/linux/futex.h b/include/uapi/linux/futex.h
|
||||
index 71a5df8d2689..d375ab21cbf8 100644
|
||||
--- a/include/uapi/linux/futex.h
|
||||
+++ b/include/uapi/linux/futex.h
|
||||
@@ -22,6 +22,7 @@
|
||||
#define FUTEX_WAIT_REQUEUE_PI 11
|
||||
#define FUTEX_CMP_REQUEUE_PI 12
|
||||
#define FUTEX_LOCK_PI2 13
|
||||
+#define FUTEX_WAIT_MULTIPLE 31
|
||||
|
||||
#define FUTEX_PRIVATE_FLAG 128
|
||||
#define FUTEX_CLOCK_REALTIME 256
|
||||
@@ -68,6 +69,18 @@ struct futex_waitv {
|
||||
__u32 __reserved;
|
||||
};
|
||||
|
||||
+/**
|
||||
+ * 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;
|
||||
+};
|
||||
+
|
||||
/*
|
||||
* Support for robust futexes: the kernel cleans up held futexes at
|
||||
* thread exit time.
|
||||
diff --git a/kernel/futex/syscalls.c b/kernel/futex/syscalls.c
|
||||
index 6f91a07a6a83..2f4d4c04ede2 100644
|
||||
--- a/kernel/futex/syscalls.c
|
||||
+++ b/kernel/futex/syscalls.c
|
||||
@@ -158,6 +158,7 @@ static __always_inline bool futex_cmd_has_timeout(u32 cmd)
|
||||
case FUTEX_LOCK_PI2:
|
||||
case FUTEX_WAIT_BITSET:
|
||||
case FUTEX_WAIT_REQUEUE_PI:
|
||||
+ case FUTEX_WAIT_MULTIPLE:
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -170,13 +171,79 @@ futex_init_timeout(u32 cmd, u32 op, struct timespec64 *ts, ktime_t *t)
|
||||
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);
|
||||
else if (cmd != FUTEX_LOCK_PI && !(op & FUTEX_CLOCK_REALTIME))
|
||||
*t = timens_ktime_to_host(CLOCK_MONOTONIC, *t);
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * 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_vector *futex_read_wait_block(u32 __user *uaddr, u32 count)
|
||||
+{
|
||||
+ unsigned int i;
|
||||
+ struct futex_vector *futexv;
|
||||
+ struct futex_wait_block fwb;
|
||||
+ struct futex_wait_block __user *entry =
|
||||
+ (struct futex_wait_block __user *)uaddr;
|
||||
+
|
||||
+ if (!count || count > FUTEX_WAITV_MAX)
|
||||
+ return ERR_PTR(-EINVAL);
|
||||
+
|
||||
+ futexv = kcalloc(count, sizeof(*futexv), GFP_KERNEL);
|
||||
+ if (!futexv)
|
||||
+ return ERR_PTR(-ENOMEM);
|
||||
+
|
||||
+ for (i = 0; i < count; i++) {
|
||||
+ if (copy_from_user(&fwb, &entry[i], sizeof(fwb))) {
|
||||
+ kfree(futexv);
|
||||
+ return ERR_PTR(-EFAULT);
|
||||
+ }
|
||||
+
|
||||
+ futexv[i].w.flags = FUTEX_32;
|
||||
+ futexv[i].w.val = fwb.val;
|
||||
+ futexv[i].w.uaddr = (uintptr_t) (fwb.uaddr);
|
||||
+ futexv[i].q = futex_q_init;
|
||||
+ }
|
||||
+
|
||||
+ return futexv;
|
||||
+}
|
||||
+
|
||||
+int futex_wait_multiple(struct futex_vector *vs, unsigned int count,
|
||||
+ struct hrtimer_sleeper *to);
|
||||
+
|
||||
+int futex_opcode_31(ktime_t *abs_time, u32 __user *uaddr, int count)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct futex_vector *vs;
|
||||
+ struct hrtimer_sleeper *to = NULL, timeout;
|
||||
+
|
||||
+ to = futex_setup_timer(abs_time, &timeout, 0, 0);
|
||||
+
|
||||
+ vs = futex_read_wait_block(uaddr, count);
|
||||
+
|
||||
+ if (IS_ERR(vs))
|
||||
+ return PTR_ERR(vs);
|
||||
+
|
||||
+ ret = futex_wait_multiple(vs, count, abs_time ? to : NULL);
|
||||
+ kfree(vs);
|
||||
+
|
||||
+ if (to) {
|
||||
+ hrtimer_cancel(&to->timer);
|
||||
+ destroy_hrtimer_on_stack(&to->timer);
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
const struct __kernel_timespec __user *, utime,
|
||||
u32 __user *, uaddr2, u32, val3)
|
||||
@@ -196,6 +263,9 @@ SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val,
|
||||
tp = &t;
|
||||
}
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE)
|
||||
+ return futex_opcode_31(tp, uaddr, val);
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3);
|
||||
}
|
||||
|
||||
@@ -392,6 +462,9 @@ SYSCALL_DEFINE6(futex_time32, u32 __user *, uaddr, int, op, u32, val,
|
||||
tp = &t;
|
||||
}
|
||||
|
||||
+ if (cmd == FUTEX_WAIT_MULTIPLE)
|
||||
+ return futex_opcode_31(tp, uaddr, val);
|
||||
+
|
||||
return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3);
|
||||
}
|
||||
#endif /* CONFIG_COMPAT_32BIT_TIME */
|
||||
--
|
||||
2.33.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,90 +0,0 @@
|
||||
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)
|
@@ -1,253 +0,0 @@
|
||||
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 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
|
||||
|
||||
From 3a88b77d3cb9f9cd8a8aee052ab479b73aeb2e80 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
||||
Date: Sat, 13 Jan 2024 15:29:25 +0100
|
||||
Subject: [PATCH] arch/Kconfig: Default to maximum amount of ASLR bits
|
||||
|
||||
To mitigate https://zolutal.github.io/aslrnt/; do this with a patch to
|
||||
avoid having to enable `CONFIG_EXPERT`.
|
||||
---
|
||||
arch/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/arch/Kconfig b/arch/Kconfig
|
||||
index f4b210ab061291..837d0dbb28ea08 100644
|
||||
--- a/arch/Kconfig
|
||||
+++ b/arch/Kconfig
|
||||
@@ -1032,7 +1032,7 @@ config ARCH_MMAP_RND_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address" if EXPERT
|
||||
range ARCH_MMAP_RND_BITS_MIN ARCH_MMAP_RND_BITS_MAX
|
||||
default ARCH_MMAP_RND_BITS_DEFAULT if ARCH_MMAP_RND_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
@@ -1066,7 +1066,7 @@ config ARCH_MMAP_RND_COMPAT_BITS
|
||||
int "Number of bits to use for ASLR of mmap base address for compatible applications" if EXPERT
|
||||
range ARCH_MMAP_RND_COMPAT_BITS_MIN ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
default ARCH_MMAP_RND_COMPAT_BITS_DEFAULT if ARCH_MMAP_RND_COMPAT_BITS_DEFAULT
|
||||
- default ARCH_MMAP_RND_COMPAT_BITS_MIN
|
||||
+ default ARCH_MMAP_RND_COMPAT_BITS_MAX
|
||||
depends on HAVE_ARCH_MMAP_RND_COMPAT_BITS
|
||||
help
|
||||
This value can be used to select the number of bits to use to
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_state.c b/drivers/gpu/drm/amd/display/dc/core/dc_state.c
|
||||
index 180ac47868c2..42bf097b36b7 100644
|
||||
--- a/drivers/gpu/drm/amd/display/dc/core/dc_state.c
|
||||
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_state.c
|
||||
@@ -300,7 +300,6 @@ void dc_state_destruct(struct dc_state *state)
|
||||
state->phantom_plane_count = 0;
|
||||
|
||||
state->stream_mask = 0;
|
||||
- memset(&state->res_ctx, 0, sizeof(state->res_ctx));
|
||||
memset(&state->pp_display_cfg, 0, sizeof(state->pp_display_cfg));
|
||||
memset(&state->dcn_bw_vars, 0, sizeof(state->dcn_bw_vars));
|
||||
state->clk_mgr = NULL;
|
||||
|
||||
From 299b81f3e619aea3ceda77d7c42842a496b34a53 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jung <admin@ptr1337.dev>
|
||||
Date: Thu, 21 Mar 2024 19:00:50 +0100
|
||||
Subject: [PATCH] cachy: move AMD_PRIVATE_COLOR to Kconfig
|
||||
|
||||
Co-authored-by: PedroHLC <root@pedrohlc.com>
|
||||
Signed-off-by: Peter Jung <admin@ptr1337.dev>
|
||||
---
|
||||
drivers/gpu/drm/amd/display/Kconfig | 6 ++++++
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c | 2 +-
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c | 6 +++---
|
||||
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 6 +++---
|
||||
5 files changed, 14 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/display/Kconfig b/drivers/gpu/drm/amd/display/Kconfig
|
||||
index 901d1961b73927..05c49141f5802f 100644
|
||||
--- a/drivers/gpu/drm/amd/display/Kconfig
|
||||
+++ b/drivers/gpu/drm/amd/display/Kconfig
|
||||
@@ -51,4 +51,10 @@ config DRM_AMD_SECURE_DISPLAY
|
||||
This option enables the calculation of crc of specific region via
|
||||
debugfs. Cooperate with specific DMCU FW.
|
||||
|
||||
+config AMD_PRIVATE_COLOR
|
||||
+ bool "Enable KMS color management by AMD for AMD"
|
||||
+ default n
|
||||
+ help
|
||||
+ This option extends the KMS color management API with AMD driver-specific properties to enhance the color management support on AMD Steam Deck.
|
||||
+
|
||||
endmenu
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||
index 59d2eee72a3297..0a4e75de95c257 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
|
||||
@@ -4078,7 +4078,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
|
||||
return r;
|
||||
}
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
if (amdgpu_dm_create_color_properties(adev))
|
||||
return -ENOMEM;
|
||||
#endif
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
|
||||
index c87b64e464ed5c..6fe07243adc3d5 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
|
||||
@@ -97,7 +97,7 @@ static inline struct fixed31_32 amdgpu_dm_fixpt_from_s3132(__u64 x)
|
||||
return val;
|
||||
}
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
/* Pre-defined Transfer Functions (TF)
|
||||
*
|
||||
* AMD driver supports pre-defined mathematical functions for transferring
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
|
||||
index 6e715ef3a5566e..11c7199ec3b348 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c
|
||||
@@ -290,7 +290,7 @@ static int amdgpu_dm_crtc_late_register(struct drm_crtc *crtc)
|
||||
}
|
||||
#endif
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
/**
|
||||
* dm_crtc_additional_color_mgmt - enable additional color properties
|
||||
* @crtc: DRM CRTC
|
||||
@@ -372,7 +372,7 @@ static const struct drm_crtc_funcs amdgpu_dm_crtc_funcs = {
|
||||
#if defined(CONFIG_DEBUG_FS)
|
||||
.late_register = amdgpu_dm_crtc_late_register,
|
||||
#endif
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
.atomic_set_property = amdgpu_dm_atomic_crtc_set_property,
|
||||
.atomic_get_property = amdgpu_dm_atomic_crtc_get_property,
|
||||
#endif
|
||||
@@ -551,7 +551,7 @@ int amdgpu_dm_crtc_init(struct amdgpu_display_manager *dm,
|
||||
|
||||
drm_mode_crtc_set_gamma_size(&acrtc->base, MAX_COLOR_LEGACY_LUT_ENTRIES);
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
dm_crtc_additional_color_mgmt(&acrtc->base);
|
||||
#endif
|
||||
return 0;
|
||||
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
|
||||
index 8a4c40b4c27e4f..779880c6457553 100644
|
||||
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
|
||||
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c
|
||||
@@ -1468,7 +1468,7 @@ static void amdgpu_dm_plane_drm_plane_destroy_state(struct drm_plane *plane,
|
||||
drm_atomic_helper_plane_destroy_state(plane, state);
|
||||
}
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
static void
|
||||
dm_atomic_plane_attach_color_mgmt_properties(struct amdgpu_display_manager *dm,
|
||||
struct drm_plane *plane)
|
||||
@@ -1659,7 +1659,7 @@ static const struct drm_plane_funcs dm_plane_funcs = {
|
||||
.atomic_duplicate_state = amdgpu_dm_plane_drm_plane_duplicate_state,
|
||||
.atomic_destroy_state = amdgpu_dm_plane_drm_plane_destroy_state,
|
||||
.format_mod_supported = amdgpu_dm_plane_format_mod_supported,
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
.atomic_set_property = dm_atomic_plane_set_property,
|
||||
.atomic_get_property = dm_atomic_plane_get_property,
|
||||
#endif
|
||||
@@ -1742,7 +1742,7 @@ int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm,
|
||||
|
||||
drm_plane_helper_add(plane, &dm_plane_helper_funcs);
|
||||
|
||||
-#ifdef AMD_PRIVATE_COLOR
|
||||
+#ifdef CONFIG_AMD_PRIVATE_COLOR
|
||||
dm_atomic_plane_attach_color_mgmt_properties(dm, plane);
|
||||
#endif
|
||||
/* Create (reset) the plane state */
|
||||
|
||||
From f1807682de0edbff6c1e46b19642a517d2e15c57 Mon Sep 17 00:00:00 2001
|
||||
From: Tk-Glitch <ti3nou@gmail.com>
|
||||
Date: Sat, 13 Apr 2024 18:25:35 +0530
|
||||
Subject: revert "drm/amd/pm: Fetch current power limit from FW"
|
||||
|
||||
Fetching FW value prevents power limit modification by the user.
|
||||
The "out-of-band ways" are unclear.
|
||||
This fixes 7700/7800 XT custom powercap.
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
|
||||
index a54663f2e2ab9f..7ffad3eb0a0150 100644
|
||||
--- a/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
|
||||
+++ b/drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c
|
||||
@@ -2703,7 +2703,6 @@ int smu_get_power_limit(void *handle,
|
||||
case SMU_PPT_LIMIT_CURRENT:
|
||||
switch (amdgpu_ip_version(adev, MP1_HWIP, 0)) {
|
||||
case IP_VERSION(13, 0, 2):
|
||||
- case IP_VERSION(13, 0, 6):
|
||||
case IP_VERSION(11, 0, 7):
|
||||
case IP_VERSION(11, 0, 11):
|
||||
case IP_VERSION(11, 0, 12):
|
@@ -1,50 +0,0 @@
|
||||
diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
|
||||
index 3eee0143e0c5..552177c1dfc5 100644
|
||||
--- a/scripts/package/kernel.spec
|
||||
+++ b/scripts/package/kernel.spec
|
||||
@@ -18,2 +18,3 @@ Source2: diff.patch
|
||||
Provides: kernel-$KERNELRELEASE
|
||||
+Provides: kernel-uname-r = %{version}
|
||||
BuildRequires: bc binutils bison dwarves
|
||||
@@ -27,8 +27,8 @@ The Linux Kernel, the operating system core itself
|
||||
%package headers
|
||||
Summary: Header files for the Linux kernel for use by glibc
|
||||
Group: Development/System
|
||||
-Obsoletes: kernel-headers
|
||||
Provides: kernel-headers = %{version}
|
||||
+Provides: installonlypkg(kernel) = %{version}
|
||||
%description headers
|
||||
Kernel-headers includes the C header files that specify the interface
|
||||
between the Linux kernel and userspace libraries and programs. The
|
||||
@@ -40,12 +40,31 @@ glibc package.
|
||||
%package devel
|
||||
Summary: Development package for building kernel modules to match the %{version} kernel
|
||||
Group: System Environment/Kernel
|
||||
+Provides: kernel-devel = %{version}
|
||||
+Provides: kernel-devel-uname-r = %{version}
|
||||
+Provides: installonlypkg(kernel) = %{version}
|
||||
AutoReqProv: no
|
||||
%description -n kernel-devel
|
||||
This package provides kernel headers and makefiles sufficient to build modules
|
||||
against the %{version} kernel package.
|
||||
%endif
|
||||
|
||||
+# Opt out of a lot of Fedora hardening flags etc...
|
||||
+# See https://src.fedoraproject.org/rpms/redhat-rpm-config//blob/rawhide/f/buildflags.md
|
||||
+%undefine _package_note_file
|
||||
+%undefine _auto_set_build_flags
|
||||
+%undefine _include_frame_pointers
|
||||
+%define _build_id_flags -Wl,--build-id=none
|
||||
+%undefine _annotated_build
|
||||
+%undefine _fortify_level
|
||||
+%undefine _hardened_build
|
||||
+%global _lto_cflags %{nil}
|
||||
+%global _configure_gnuconfig_hack 0
|
||||
+%global _configure_libtool_hardening_hack 0
|
||||
+# Nearly had to go to the deep web to find documentation on this one... Gosh
|
||||
+# See https://github.com/rpm-software-management/rpm/blob/master/macros.in#L471
|
||||
+%define _build_id_links none
|
||||
+
|
||||
%prep
|
||||
%setup -q -n linux
|
||||
cp %{SOURCE1} .config
|
@@ -1,46 +0,0 @@
|
||||
diff --git a/Makefile b/Makefile
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -442,7 +442,7 @@ endif
|
||||
HOSTPKG_CONFIG = pkg-config
|
||||
|
||||
KBUILD_USERHOSTCFLAGS := -Wall -Wmissing-prototypes -Wstrict-prototypes \
|
||||
- -O2 -fomit-frame-pointer -std=gnu11
|
||||
+ -O3 -fomit-frame-pointer -std=gnu11
|
||||
KBUILD_USERCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(USERCFLAGS)
|
||||
KBUILD_USERLDFLAGS := $(USERLDFLAGS)
|
||||
|
||||
@@ -474,7 +474,7 @@ endif
|
||||
-Wclippy::dbg_macro
|
||||
|
||||
KBUILD_HOSTCFLAGS := $(KBUILD_USERHOSTCFLAGS) $(HOST_LFS_CFLAGS) $(HOSTCFLAGS)
|
||||
-KBUILD_HOSTCXXFLAGS := -Wall -O2 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
||||
+KBUILD_HOSTCXXFLAGS := -Wall -O3 $(HOST_LFS_CFLAGS) $(HOSTCXXFLAGS)
|
||||
KBUILD_HOSTRUSTFLAGS := $(rust_common_flags) -O -Cstrip=debuginfo \
|
||||
-Zallow-features= $(HOSTRUSTFLAGS)
|
||||
KBUILD_HOSTLDFLAGS := $(HOST_LFS_LDFLAGS) $(HOSTLDFLAGS)
|
||||
@@ -757,7 +757,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, format-overflow)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member)
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
-KBUILD_CFLAGS += -O2
|
||||
+KBUILD_CFLAGS += -O3
|
||||
KBUILD_RUSTFLAGS += -Copt-level=2
|
||||
else ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
KBUILD_CFLAGS += -Os
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1401,10 +1401,10 @@ choice
|
||||
default CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
|
||||
config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
- bool "Optimize for performance (-O2)"
|
||||
+ bool "Optimize for performance (-O3)"
|
||||
help
|
||||
This is the default optimization level for the kernel, building
|
||||
- with the "-O2" compiler flag for best performance and most
|
||||
+ with the "-O3" compiler flag for best performance and most
|
||||
helpful compile-time warnings.
|
||||
|
||||
config CC_OPTIMIZE_FOR_SIZE
|
@@ -1,312 +0,0 @@
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Wed, 7 Feb 2018 15:16:04 +0100
|
||||
Subject: Add ksym-provides tool.
|
||||
|
||||
References: bsc#1077692
|
||||
Patch-mainline: no, not needed
|
||||
|
||||
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
|
||||
---
|
||||
scripts/mod/Makefile | 6 +-
|
||||
scripts/mod/ksym-provides.c | 124 ++++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 129 insertions(+), 1 deletion(-)
|
||||
create mode 100644 scripts/mod/ksym-provides.c
|
||||
|
||||
--- a/scripts/mod/Makefile
|
||||
+++ b/scripts/mod/Makefile
|
||||
@@ -2,11 +2,15 @@
|
||||
OBJECT_FILES_NON_STANDARD := y
|
||||
CFLAGS_REMOVE_empty.o += $(CC_FLAGS_LTO)
|
||||
|
||||
-hostprogs-always-y += modpost mk_elfconfig
|
||||
+hostprogs-always-y += modpost mk_elfconfig ksym-provides
|
||||
always-y += empty.o
|
||||
|
||||
modpost-objs := modpost.o file2alias.o sumversion.o
|
||||
|
||||
+ksym-provides-objs := ksym-provides.o
|
||||
+
|
||||
+HOSTLDLIBS_ksym-provides := -lelf
|
||||
+
|
||||
devicetable-offsets-file := devicetable-offsets.h
|
||||
|
||||
$(obj)/$(devicetable-offsets-file): $(obj)/devicetable-offsets.s FORCE
|
||||
--- /dev/null
|
||||
+++ b/scripts/mod/ksym-provides.c
|
||||
@@ -0,0 +1,124 @@
|
||||
+#include <stdio.h>
|
||||
+#include <sys/types.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <fcntl.h>
|
||||
+#include <unistd.h>
|
||||
+#include <gelf.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+int main(int argc, char *argv[])
|
||||
+{
|
||||
+ int fd;
|
||||
+ Elf *elf;
|
||||
+ Elf_Scn *scn;
|
||||
+ GElf_Shdr shdr;
|
||||
+ size_t strndx;
|
||||
+ int ndx;
|
||||
+ Elf_Data *symdata, *data;
|
||||
+ GElf_Sym sym;
|
||||
+ char *name;
|
||||
+ const char * flavor = argv[1];
|
||||
+ const char * prefix = "__crc_";
|
||||
+ size_t prefixlen = strlen(prefix);
|
||||
+ const char * symformat = "ksym(%s:%s) = %lx\n";
|
||||
+
|
||||
+ if (argc != 3) {
|
||||
+ fprintf(stderr, "Usage: %s <flavor> <filename>\n", argv[0]);
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ if (elf_version(EV_CURRENT) == EV_NONE) {
|
||||
+ fprintf(stderr, "libelf initialization failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ fd = open(argv[2], O_RDONLY);
|
||||
+ if (fd < 0) {
|
||||
+ perror("open failed");
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ elf = elf_begin(fd, ELF_C_READ, NULL);
|
||||
+ if (!elf) {
|
||||
+ fprintf(stderr, "elf_begin failed: %s\n", elf_errmsg(-1));
|
||||
+ goto err_close;
|
||||
+ }
|
||||
+
|
||||
+ scn = NULL;
|
||||
+ while ((scn = elf_nextscn(elf, scn)) != NULL) {
|
||||
+ if (!gelf_getshdr(scn, &shdr)) {
|
||||
+ fprintf(stderr, "gelf_getshdr failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+
|
||||
+ if (shdr.sh_type == SHT_SYMTAB)
|
||||
+ break;
|
||||
+ }
|
||||
+ if (!scn) {
|
||||
+ fputs("symbol table not found\n", stderr);
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ strndx = shdr.sh_link;
|
||||
+
|
||||
+ symdata = elf_getdata(scn, NULL);
|
||||
+ if (!symdata) {
|
||||
+ fprintf(stderr, "elf_getdata failed: %s\n", elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+
|
||||
+ for (ndx = 0; gelf_getsym(symdata, ndx, &sym) != NULL; ++ndx) {
|
||||
+
|
||||
+ name = elf_strptr(elf, strndx, sym.st_name);
|
||||
+ if (!name) {
|
||||
+ fprintf(stderr, "elf_strptr failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ if (strncmp(prefix, name, prefixlen))
|
||||
+ continue;
|
||||
+
|
||||
+ if (sym.st_shndx >= SHN_LORESERVE) {
|
||||
+ printf(symformat, flavor, name + prefixlen,
|
||||
+ sym.st_value);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ scn = elf_getscn(elf, sym.st_shndx);
|
||||
+ if (!scn) {
|
||||
+ fprintf(stderr, "elf_getscn failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ if (!gelf_getshdr(scn, &shdr)) {
|
||||
+ fprintf(stderr, "gelf_getshdr failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+
|
||||
+ if (shdr.sh_type != SHT_PROGBITS)
|
||||
+ continue;
|
||||
+
|
||||
+ data = elf_getdata_rawchunk(
|
||||
+ elf, shdr.sh_offset + sym.st_value - shdr.sh_addr,
|
||||
+ sizeof(GElf_Word), ELF_T_WORD);
|
||||
+ if (!data) {
|
||||
+ fprintf(stderr, "elf_getdata_rawchunk failed: %s\n",
|
||||
+ elf_errmsg(-1));
|
||||
+ goto err_end;
|
||||
+ }
|
||||
+ printf(symformat, flavor, name + prefixlen,
|
||||
+ (unsigned long) *(GElf_Word*)data->d_buf);
|
||||
+ }
|
||||
+
|
||||
+ elf_end(elf);
|
||||
+ close(fd);
|
||||
+ return 0;
|
||||
+
|
||||
+ err_end:
|
||||
+ elf_end(elf);
|
||||
+ err_close:
|
||||
+ close(fd);
|
||||
+ return 1;
|
||||
+}
|
||||
|
||||
From bb1a83cf109eee56c8dee26f7910c772f8c246fc Mon Sep 17 00:00:00 2001
|
||||
From: Michal Suchanek <msuchanek@suse.de>
|
||||
Date: Thu, 29 Jun 2023 17:47:16 +0200
|
||||
Subject: [PATCH] depmod: Handle installing modules under a prefix
|
||||
|
||||
References: bsc#1212835
|
||||
Patch-mainline: Never, upstream rejected
|
||||
|
||||
Some distributions aim at shipping all files in /usr.
|
||||
|
||||
The path under which kernel modules are installed is hardcoded to /lib
|
||||
which conflicts with this goal.
|
||||
|
||||
When kmod provides the config command, use it to determine the correct
|
||||
module installation path.
|
||||
|
||||
With kmod that does not provide the config command /lib/modules is used
|
||||
as before.
|
||||
|
||||
Note: users can use
|
||||
|
||||
make MODLIB='$(INSTALL_MOD_PATH)/usr/lib/modules/$(KERNELRELEASE)'
|
||||
|
||||
to install modules from mainline kernel on usrmerged system.
|
||||
Not great for KMPs, though
|
||||
|
||||
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
|
||||
Nacked-by: Masahiro Yamada <masahiroy@kernel.org>
|
||||
---
|
||||
v2: Avoid error on systems with kmod that does not support config
|
||||
command
|
||||
v3: More verbose commit message
|
||||
v4:
|
||||
- Document jq requirement
|
||||
- fix bashism
|
||||
- Update to getting full module path, not just additional prefix
|
||||
v5: switch to pkgconfig
|
||||
---
|
||||
Makefile | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 658ec2b8aa74..5a1889fc43c7 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -1165,7 +1165,9 @@ export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE)
|
||||
# makefile but the argument can be passed to make if needed.
|
||||
#
|
||||
|
||||
-MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
|
||||
+export KERNEL_MODULE_DIRECTORY := $(shell pkg-config --print-variables kmod 2>/dev/null | grep '^module_directory$$' >/dev/null && pkg-config --variable=module_directory kmod || echo /lib/modules)
|
||||
+
|
||||
+MODLIB = $(INSTALL_MOD_PATH)$(KERNEL_MODULE_DIRECTORY)/$(KERNELRELEASE)
|
||||
export MODLIB
|
||||
|
||||
PHONY += prepare0
|
||||
--
|
||||
2.41.0
|
||||
|
||||
From 23133fe6745d567db5b93dc9e6aecc32d31354bd Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Mahoney <jeffm@suse.de>
|
||||
Date: Tue, 31 Mar 2009 09:46:30 -0400
|
||||
Subject: [PATCH] - doc/README.KSYMS: Add to repo.
|
||||
|
||||
---
|
||||
doc/README.KSYMS | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
create mode 100644 doc/README.KSYMS
|
||||
|
||||
diff --git a/doc/README.KSYMS b/doc/README.KSYMS
|
||||
new file mode 100644
|
||||
index 00000000000..39fe7878174
|
||||
--- /dev/null
|
||||
+++ b/doc/README.KSYMS
|
||||
@@ -0,0 +1,6 @@
|
||||
+This file is a place holder for the kernel-syms{,-rt} package. It is used
|
||||
+to group build dependencies for all kernel flavors.
|
||||
+
|
||||
+The KMP build process will build KMPs against all installed kernel flavors
|
||||
+automatically. If you don't need to build against other flavors than the
|
||||
+ones you've already installed - it is safe to uninstall this package.
|
||||
|
||||
From 917d74574856a402e5679d8162407af122c9b8db Mon Sep 17 00:00:00 2001
|
||||
From: Etienne JUVIGNY <ti3nou@gmail.com>
|
||||
Date: Tue, 12 Sep 2023 03:42:23 +0200
|
||||
Subject: Suse: Add kernel-syms package and adapt for /usr/lib usage in Suse instead of the standard /lib symlink.
|
||||
|
||||
|
||||
diff --git a/scripts/package/kernel.spec b/scripts/package/kernel.spec
|
||||
index ac3f2ee6d..e96ffc9a7 100644
|
||||
--- a/scripts/package/kernel.spec
|
||||
+++ b/scripts/package/kernel.spec
|
||||
@@ -17,7 +17,7 @@ Source0: linux.tar.gz
|
||||
Source1: config
|
||||
Source2: diff.patch
|
||||
Provides: kernel-%{KERNELRELEASE}
|
||||
-BuildRequires: bc binutils bison dwarves
|
||||
+BuildRequires: bc binutils bison dwarves coreutils
|
||||
BuildRequires: (elfutils-libelf-devel or libelf-devel) flex
|
||||
BuildRequires: gcc make openssl openssl-devel perl python3 rsync
|
||||
|
||||
@@ -36,6 +36,19 @@ header files define structures and constants that are needed for
|
||||
building most standard programs and are also needed for rebuilding the
|
||||
glibc package.
|
||||
|
||||
+%package syms
|
||||
+Summary: Kernel Symbol Versions (modversions) for the $__KERNELRELEASE kernel
|
||||
+Group: Development/Sources
|
||||
+AutoReqProv: no
|
||||
+Provides: kernel-syms = %{version}
|
||||
+Requires: kernel-devel = %{version}
|
||||
+%description -n kernel-syms
|
||||
+Kernel symbols, such as functions and variables, have version
|
||||
+information attached to them. This package contains the symbol versions
|
||||
+for the standard kernels.
|
||||
+This package is needed for compiling kernel module packages with proper
|
||||
+package dependencies.
|
||||
+
|
||||
%if %{with_devel}
|
||||
%package devel
|
||||
Summary: Development package for building kernel modules to match the %{version} kernel
|
||||
@@ -67,7 +80,7 @@ cp $(%{make} %{makeflags} -s image_name) %{buildroot}/boot/vmlinuz-%{KERNELRELEA
|
||||
%{make} %{makeflags} INSTALL_HDR_PATH=%{buildroot}/usr headers_install
|
||||
cp System.map %{buildroot}/boot/System.map-%{KERNELRELEASE}
|
||||
cp .config %{buildroot}/boot/config-%{KERNELRELEASE}
|
||||
-ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/lib/modules/%{KERNELRELEASE}/build
|
||||
+ln -fns /usr/src/kernels/%{KERNELRELEASE} %{buildroot}/usr/lib/modules/%{KERNELRELEASE}/build
|
||||
%if %{with_devel}
|
||||
%{make} %{makeflags} run-command KBUILD_RUN_COMMAND='${srctree}/scripts/package/install-extmod-build %{buildroot}/usr/src/kernels/%{KERNELRELEASE}'
|
||||
%endif
|
||||
@@ -99,8 +112,8 @@ fi
|
||||
|
||||
%files
|
||||
%defattr (-, root, root)
|
||||
-/lib/modules/%{KERNELRELEASE}
|
||||
-%exclude /lib/modules/%{KERNELRELEASE}/build
|
||||
+/usr/lib/modules/%{KERNELRELEASE}
|
||||
+%exclude /usr/lib/modules/%{KERNELRELEASE}/build
|
||||
/boot/*
|
||||
|
||||
%files headers
|
||||
@@ -112,5 +125,8 @@ fi
|
||||
%files devel
|
||||
%defattr (-, root, root)
|
||||
/usr/src/kernels/%{KERNELRELEASE}
|
||||
-/lib/modules/%{KERNELRELEASE}/build
|
||||
+/usr/lib/modules/%{KERNELRELEASE}/build
|
||||
%endif
|
||||
+
|
||||
+%files syms
|
||||
+%defattr (-, root, root)
|
@@ -1,703 +0,0 @@
|
||||
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
|
||||
index 2ddca08f8a76..72647850f08e 100644
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -217,6 +217,15 @@ config I2C_CHT_WC
|
||||
combined with a FUSB302 Type-C port-controller as such it is advised
|
||||
to also select CONFIG_TYPEC_FUSB302=m.
|
||||
|
||||
+config I2C_NCT6775
|
||||
+ tristate "Nuvoton NCT6775 and compatible SMBus controller"
|
||||
+ help
|
||||
+ If you say yes to this option, support will be included for the
|
||||
+ Nuvoton NCT6775 and compatible SMBus controllers.
|
||||
+
|
||||
+ This driver can also be built as a module. If so, the module
|
||||
+ will be called i2c-nct6775.
|
||||
+
|
||||
config I2C_NFORCE2
|
||||
tristate "Nvidia nForce2, nForce3 and nForce4"
|
||||
depends on PCI
|
||||
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
|
||||
index 25d60889713c..3c2a9b237ac6 100644
|
||||
--- a/drivers/i2c/busses/Makefile
|
||||
+++ b/drivers/i2c/busses/Makefile
|
||||
@@ -17,6 +17,7 @@ obj-$(CONFIG_I2C_CHT_WC) += i2c-cht-wc.o
|
||||
obj-$(CONFIG_I2C_I801) += i2c-i801.o
|
||||
obj-$(CONFIG_I2C_ISCH) += i2c-isch.o
|
||||
obj-$(CONFIG_I2C_ISMT) += i2c-ismt.o
|
||||
+obj-$(CONFIG_I2C_NCT6775) += i2c-nct6775.o
|
||||
obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o
|
||||
obj-$(CONFIG_I2C_NFORCE2_S4985) += i2c-nforce2-s4985.o
|
||||
obj-$(CONFIG_I2C_NVIDIA_GPU) += i2c-nvidia-gpu.o
|
||||
diff --git a/drivers/i2c/busses/i2c-nct6775.c b/drivers/i2c/busses/i2c-nct6775.c
|
||||
new file mode 100644
|
||||
index 000000000000..0462f0952043
|
||||
--- /dev/null
|
||||
+++ b/drivers/i2c/busses/i2c-nct6775.c
|
||||
@@ -0,0 +1,647 @@
|
||||
+/*
|
||||
+ * i2c-nct6775 - Driver for the SMBus master functionality of
|
||||
+ * Nuvoton NCT677x Super-I/O chips
|
||||
+ *
|
||||
+ * Copyright (C) 2019 Adam Honse <calcprogrammer1@gmail.com>
|
||||
+ *
|
||||
+ * Derived from nct6775 hwmon driver
|
||||
+ * Copyright (C) 2012 Guenter Roeck <linux@roeck-us.net>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/jiffies.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/hwmon.h>
|
||||
+#include <linux/hwmon-sysfs.h>
|
||||
+#include <linux/hwmon-vid.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/ioport.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/bitops.h>
|
||||
+#include <linux/dmi.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/nospec.h>
|
||||
+
|
||||
+#define DRVNAME "i2c-nct6775"
|
||||
+
|
||||
+/* Nuvoton SMBus address offsets */
|
||||
+#define SMBHSTDAT (0 + nuvoton_nct6793d_smba)
|
||||
+#define SMBBLKSZ (1 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTCMD (2 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTIDX (3 + nuvoton_nct6793d_smba) //Index field is the Command field on other controllers
|
||||
+#define SMBHSTCTL (4 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTADD (5 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTERR (9 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTSTS (0xE + nuvoton_nct6793d_smba)
|
||||
+
|
||||
+/* Command register */
|
||||
+#define NCT6793D_READ_BYTE 0
|
||||
+#define NCT6793D_READ_WORD 1
|
||||
+#define NCT6793D_READ_BLOCK 2
|
||||
+#define NCT6793D_BLOCK_WRITE_READ_PROC_CALL 3
|
||||
+#define NCT6793D_PROC_CALL 4
|
||||
+#define NCT6793D_WRITE_BYTE 8
|
||||
+#define NCT6793D_WRITE_WORD 9
|
||||
+#define NCT6793D_WRITE_BLOCK 10
|
||||
+
|
||||
+/* Control register */
|
||||
+#define NCT6793D_MANUAL_START 128
|
||||
+#define NCT6793D_SOFT_RESET 64
|
||||
+
|
||||
+/* Error register */
|
||||
+#define NCT6793D_NO_ACK 32
|
||||
+
|
||||
+/* Status register */
|
||||
+#define NCT6793D_FIFO_EMPTY 1
|
||||
+#define NCT6793D_FIFO_FULL 2
|
||||
+#define NCT6793D_MANUAL_ACTIVE 4
|
||||
+
|
||||
+#define NCT6775_LD_SMBUS 0x0B
|
||||
+
|
||||
+/* Other settings */
|
||||
+#define MAX_RETRIES 400
|
||||
+
|
||||
+enum kinds { nct6106, nct6775, nct6776, nct6779, nct6791, nct6792, nct6793,
|
||||
+ nct6795, nct6796, nct6798 };
|
||||
+
|
||||
+struct nct6775_sio_data {
|
||||
+ int sioreg;
|
||||
+ enum kinds kind;
|
||||
+};
|
||||
+
|
||||
+/* used to set data->name = nct6775_device_names[data->sio_kind] */
|
||||
+static const char * const nct6775_device_names[] = {
|
||||
+ "nct6106",
|
||||
+ "nct6775",
|
||||
+ "nct6776",
|
||||
+ "nct6779",
|
||||
+ "nct6791",
|
||||
+ "nct6792",
|
||||
+ "nct6793",
|
||||
+ "nct6795",
|
||||
+ "nct6796",
|
||||
+ "nct6798",
|
||||
+};
|
||||
+
|
||||
+static const char * const nct6775_sio_names[] __initconst = {
|
||||
+ "NCT6106D",
|
||||
+ "NCT6775F",
|
||||
+ "NCT6776D/F",
|
||||
+ "NCT6779D",
|
||||
+ "NCT6791D",
|
||||
+ "NCT6792D",
|
||||
+ "NCT6793D",
|
||||
+ "NCT6795D",
|
||||
+ "NCT6796D",
|
||||
+ "NCT6798D",
|
||||
+};
|
||||
+
|
||||
+#define SIO_REG_LDSEL 0x07 /* Logical device select */
|
||||
+#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
|
||||
+#define SIO_REG_SMBA 0x62 /* SMBus base address register */
|
||||
+
|
||||
+#define SIO_NCT6106_ID 0xc450
|
||||
+#define SIO_NCT6775_ID 0xb470
|
||||
+#define SIO_NCT6776_ID 0xc330
|
||||
+#define SIO_NCT6779_ID 0xc560
|
||||
+#define SIO_NCT6791_ID 0xc800
|
||||
+#define SIO_NCT6792_ID 0xc910
|
||||
+#define SIO_NCT6793_ID 0xd120
|
||||
+#define SIO_NCT6795_ID 0xd350
|
||||
+#define SIO_NCT6796_ID 0xd420
|
||||
+#define SIO_NCT6798_ID 0xd428
|
||||
+#define SIO_ID_MASK 0xFFF0
|
||||
+
|
||||
+static inline void
|
||||
+superio_outb(int ioreg, int reg, int val)
|
||||
+{
|
||||
+ outb(reg, ioreg);
|
||||
+ outb(val, ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+superio_inb(int ioreg, int reg)
|
||||
+{
|
||||
+ outb(reg, ioreg);
|
||||
+ return inb(ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+superio_select(int ioreg, int ld)
|
||||
+{
|
||||
+ outb(SIO_REG_LDSEL, ioreg);
|
||||
+ outb(ld, ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+superio_enter(int ioreg)
|
||||
+{
|
||||
+ /*
|
||||
+ * Try to reserve <ioreg> and <ioreg + 1> for exclusive access.
|
||||
+ */
|
||||
+ if (!request_muxed_region(ioreg, 2, DRVNAME))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
+ outb(0x87, ioreg);
|
||||
+ outb(0x87, ioreg);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+superio_exit(int ioreg)
|
||||
+{
|
||||
+ outb(0xaa, ioreg);
|
||||
+ outb(0x02, ioreg);
|
||||
+ outb(0x02, ioreg + 1);
|
||||
+ release_region(ioreg, 2);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ISA constants
|
||||
+ */
|
||||
+
|
||||
+#define IOREGION_ALIGNMENT (~7)
|
||||
+#define IOREGION_LENGTH 2
|
||||
+#define ADDR_REG_OFFSET 0
|
||||
+#define DATA_REG_OFFSET 1
|
||||
+
|
||||
+#define NCT6775_REG_BANK 0x4E
|
||||
+#define NCT6775_REG_CONFIG 0x40
|
||||
+
|
||||
+static struct i2c_adapter *nct6775_adapter;
|
||||
+
|
||||
+struct i2c_nct6775_adapdata {
|
||||
+ unsigned short smba;
|
||||
+};
|
||||
+
|
||||
+/* Return negative errno on error. */
|
||||
+static s32 nct6775_access(struct i2c_adapter * adap, u16 addr,
|
||||
+ unsigned short flags, char read_write,
|
||||
+ u8 command, int size, union i2c_smbus_data * data)
|
||||
+{
|
||||
+ struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
|
||||
+ unsigned short nuvoton_nct6793d_smba = adapdata->smba;
|
||||
+ int i, len, cnt;
|
||||
+ union i2c_smbus_data tmp_data;
|
||||
+ int timeout = 0;
|
||||
+
|
||||
+ tmp_data.word = 0;
|
||||
+ cnt = 0;
|
||||
+ len = 0;
|
||||
+
|
||||
+ outb_p(NCT6793D_SOFT_RESET, SMBHSTCTL);
|
||||
+
|
||||
+ switch (size) {
|
||||
+ case I2C_SMBUS_QUICK:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ break;
|
||||
+ case I2C_SMBUS_BYTE_DATA:
|
||||
+ tmp_data.byte = data->byte;
|
||||
+ case I2C_SMBUS_BYTE:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ outb_p(tmp_data.byte, SMBHSTDAT);
|
||||
+ outb_p(NCT6793D_WRITE_BYTE, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ outb_p(NCT6793D_READ_BYTE, SMBHSTCMD);
|
||||
+ }
|
||||
+ break;
|
||||
+ case I2C_SMBUS_WORD_DATA:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ outb_p(data->word & 0xff, SMBHSTDAT);
|
||||
+ outb_p((data->word & 0xff00) >> 8, SMBHSTDAT);
|
||||
+ outb_p(NCT6793D_WRITE_WORD, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ outb_p(NCT6793D_READ_WORD, SMBHSTCMD);
|
||||
+ }
|
||||
+ break;
|
||||
+ case I2C_SMBUS_BLOCK_DATA:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ len = data->block[0];
|
||||
+ if (len == 0 || len > I2C_SMBUS_BLOCK_MAX)
|
||||
+ return -EINVAL;
|
||||
+ outb_p(len, SMBBLKSZ);
|
||||
+
|
||||
+ cnt = 1;
|
||||
+ if (len >= 4) {
|
||||
+ for (i = cnt; i <= 4; i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len -= 4;
|
||||
+ cnt += 4;
|
||||
+ }
|
||||
+ else {
|
||||
+ for (i = cnt; i <= len; i++ ) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ }
|
||||
+
|
||||
+ outb_p(NCT6793D_WRITE_BLOCK, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ return -ENOTSUPP;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_warn(&adap->dev, "Unsupported transaction %d\n", size);
|
||||
+ return -EOPNOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ outb_p(NCT6793D_MANUAL_START, SMBHSTCTL);
|
||||
+
|
||||
+ while ((size == I2C_SMBUS_BLOCK_DATA) && (len > 0)) {
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ timeout = 0;
|
||||
+ while ((inb_p(SMBHSTSTS) & NCT6793D_FIFO_EMPTY) == 0)
|
||||
+ {
|
||||
+ if(timeout > MAX_RETRIES)
|
||||
+ {
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+ usleep_range(250, 500);
|
||||
+ timeout++;
|
||||
+ }
|
||||
+
|
||||
+ //Load more bytes into FIFO
|
||||
+ if (len >= 4) {
|
||||
+ for (i = cnt; i <= (cnt + 4); i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len -= 4;
|
||||
+ cnt += 4;
|
||||
+ }
|
||||
+ else {
|
||||
+ for (i = cnt; i <= (cnt + len); i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ return -ENOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ //wait for manual mode to complete
|
||||
+ timeout = 0;
|
||||
+ while ((inb_p(SMBHSTSTS) & NCT6793D_MANUAL_ACTIVE) != 0)
|
||||
+ {
|
||||
+ if(timeout > MAX_RETRIES)
|
||||
+ {
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+ usleep_range(250, 500);
|
||||
+ timeout++;
|
||||
+ }
|
||||
+
|
||||
+ if ((inb_p(SMBHSTERR) & NCT6793D_NO_ACK) != 0) {
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+ else if ((read_write == I2C_SMBUS_WRITE) || (size == I2C_SMBUS_QUICK)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ switch (size) {
|
||||
+ case I2C_SMBUS_QUICK:
|
||||
+ case I2C_SMBUS_BYTE_DATA:
|
||||
+ data->byte = inb_p(SMBHSTDAT);
|
||||
+ break;
|
||||
+ case I2C_SMBUS_WORD_DATA:
|
||||
+ data->word = inb_p(SMBHSTDAT) + (inb_p(SMBHSTDAT) << 8);
|
||||
+ break;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static u32 nct6775_func(struct i2c_adapter *adapter)
|
||||
+{
|
||||
+ return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
|
||||
+ I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
|
||||
+ I2C_FUNC_SMBUS_BLOCK_DATA;
|
||||
+}
|
||||
+
|
||||
+static const struct i2c_algorithm smbus_algorithm = {
|
||||
+ .smbus_xfer = nct6775_access,
|
||||
+ .functionality = nct6775_func,
|
||||
+};
|
||||
+
|
||||
+static int nct6775_add_adapter(unsigned short smba, const char *name, struct i2c_adapter **padap)
|
||||
+{
|
||||
+ struct i2c_adapter *adap;
|
||||
+ struct i2c_nct6775_adapdata *adapdata;
|
||||
+ int retval;
|
||||
+
|
||||
+ adap = kzalloc(sizeof(*adap), GFP_KERNEL);
|
||||
+ if (adap == NULL) {
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ adap->owner = THIS_MODULE;
|
||||
+ adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
|
||||
+ adap->algo = &smbus_algorithm;
|
||||
+
|
||||
+ adapdata = kzalloc(sizeof(*adapdata), GFP_KERNEL);
|
||||
+ if (adapdata == NULL) {
|
||||
+ kfree(adap);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ adapdata->smba = smba;
|
||||
+
|
||||
+ snprintf(adap->name, sizeof(adap->name),
|
||||
+ "SMBus NCT67xx adapter%s at %04x", name, smba);
|
||||
+
|
||||
+ i2c_set_adapdata(adap, adapdata);
|
||||
+
|
||||
+ retval = i2c_add_adapter(adap);
|
||||
+ if (retval) {
|
||||
+ kfree(adapdata);
|
||||
+ kfree(adap);
|
||||
+ return retval;
|
||||
+ }
|
||||
+
|
||||
+ *padap = adap;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void nct6775_remove_adapter(struct i2c_adapter *adap)
|
||||
+{
|
||||
+ struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
|
||||
+
|
||||
+ if (adapdata->smba) {
|
||||
+ i2c_del_adapter(adap);
|
||||
+ kfree(adapdata);
|
||||
+ kfree(adap);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+//static SIMPLE_DEV_PM_OPS(nct6775_dev_pm_ops, nct6775_suspend, nct6775_resume);
|
||||
+
|
||||
+/*
|
||||
+ * when Super-I/O functions move to a separate file, the Super-I/O
|
||||
+ * bus will manage the lifetime of the device and this module will only keep
|
||||
+ * track of the nct6775 driver. But since we use platform_device_alloc(), we
|
||||
+ * must keep track of the device
|
||||
+ */
|
||||
+static struct platform_device *pdev[2];
|
||||
+
|
||||
+static int nct6775_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct nct6775_sio_data *sio_data = dev_get_platdata(dev);
|
||||
+ struct resource *res;
|
||||
+
|
||||
+ res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
+ if (!devm_request_region(&pdev->dev, res->start, IOREGION_LENGTH,
|
||||
+ DRVNAME))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
+ switch (sio_data->kind) {
|
||||
+ case nct6791:
|
||||
+ case nct6792:
|
||||
+ case nct6793:
|
||||
+ case nct6795:
|
||||
+ case nct6796:
|
||||
+ case nct6798:
|
||||
+ nct6775_add_adapter(res->start, "", &nct6775_adapter);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+/*
|
||||
+static void nct6791_enable_io_mapping(int sioaddr)
|
||||
+{
|
||||
+ int val;
|
||||
+
|
||||
+ val = superio_inb(sioaddr, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE);
|
||||
+ if (val & 0x10) {
|
||||
+ pr_info("Enabling hardware monitor logical device mappings.\n");
|
||||
+ superio_outb(sioaddr, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE,
|
||||
+ val & ~0x10);
|
||||
+ }
|
||||
+}*/
|
||||
+
|
||||
+static struct platform_driver i2c_nct6775_driver = {
|
||||
+ .driver = {
|
||||
+ .name = DRVNAME,
|
||||
+// .pm = &nct6775_dev_pm_ops,
|
||||
+ },
|
||||
+ .probe = nct6775_probe,
|
||||
+};
|
||||
+
|
||||
+static void __exit i2c_nct6775_exit(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if(nct6775_adapter)
|
||||
+ nct6775_remove_adapter(nct6775_adapter);
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(pdev); i++) {
|
||||
+ if (pdev[i])
|
||||
+ platform_device_unregister(pdev[i]);
|
||||
+ }
|
||||
+ platform_driver_unregister(&i2c_nct6775_driver);
|
||||
+}
|
||||
+
|
||||
+/* nct6775_find() looks for a '627 in the Super-I/O config space */
|
||||
+static int __init nct6775_find(int sioaddr, struct nct6775_sio_data *sio_data)
|
||||
+{
|
||||
+ u16 val;
|
||||
+ int err;
|
||||
+ int addr;
|
||||
+
|
||||
+ err = superio_enter(sioaddr);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) |
|
||||
+ superio_inb(sioaddr, SIO_REG_DEVID + 1);
|
||||
+
|
||||
+ switch (val & SIO_ID_MASK) {
|
||||
+ case SIO_NCT6106_ID:
|
||||
+ sio_data->kind = nct6106;
|
||||
+ break;
|
||||
+ case SIO_NCT6775_ID:
|
||||
+ sio_data->kind = nct6775;
|
||||
+ break;
|
||||
+ case SIO_NCT6776_ID:
|
||||
+ sio_data->kind = nct6776;
|
||||
+ break;
|
||||
+ case SIO_NCT6779_ID:
|
||||
+ sio_data->kind = nct6779;
|
||||
+ break;
|
||||
+ case SIO_NCT6791_ID:
|
||||
+ sio_data->kind = nct6791;
|
||||
+ break;
|
||||
+ case SIO_NCT6792_ID:
|
||||
+ sio_data->kind = nct6792;
|
||||
+ break;
|
||||
+ case SIO_NCT6793_ID:
|
||||
+ sio_data->kind = nct6793;
|
||||
+ break;
|
||||
+ case SIO_NCT6795_ID:
|
||||
+ sio_data->kind = nct6795;
|
||||
+ break;
|
||||
+ case SIO_NCT6796_ID:
|
||||
+ sio_data->kind = nct6796;
|
||||
+ break;
|
||||
+ case SIO_NCT6798_ID:
|
||||
+ sio_data->kind = nct6798;
|
||||
+ break;
|
||||
+ default:
|
||||
+ if (val != 0xffff)
|
||||
+ pr_debug("unsupported chip ID: 0x%04x\n", val);
|
||||
+ superio_exit(sioaddr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ /* We have a known chip, find the SMBus I/O address */
|
||||
+ superio_select(sioaddr, NCT6775_LD_SMBUS);
|
||||
+ val = (superio_inb(sioaddr, SIO_REG_SMBA) << 8)
|
||||
+ | superio_inb(sioaddr, SIO_REG_SMBA + 1);
|
||||
+ addr = val & IOREGION_ALIGNMENT;
|
||||
+ if (addr == 0) {
|
||||
+ pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
|
||||
+ superio_exit(sioaddr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ //if (sio_data->kind == nct6791 || sio_data->kind == nct6792 ||
|
||||
+ // sio_data->kind == nct6793 || sio_data->kind == nct6795 ||
|
||||
+ // sio_data->kind == nct6796)
|
||||
+ // nct6791_enable_io_mapping(sioaddr);
|
||||
+
|
||||
+ superio_exit(sioaddr);
|
||||
+ pr_info("Found %s or compatible chip at %#x:%#x\n",
|
||||
+ nct6775_sio_names[sio_data->kind], sioaddr, addr);
|
||||
+ sio_data->sioreg = sioaddr;
|
||||
+
|
||||
+ return addr;
|
||||
+}
|
||||
+
|
||||
+static int __init i2c_nct6775_init(void)
|
||||
+{
|
||||
+ int i, err;
|
||||
+ bool found = false;
|
||||
+ int address;
|
||||
+ struct resource res;
|
||||
+ struct nct6775_sio_data sio_data;
|
||||
+ int sioaddr[2] = { 0x2e, 0x4e };
|
||||
+
|
||||
+ err = platform_driver_register(&i2c_nct6775_driver);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ /*
|
||||
+ * initialize sio_data->kind and sio_data->sioreg.
|
||||
+ *
|
||||
+ * when Super-I/O functions move to a separate file, the Super-I/O
|
||||
+ * driver will probe 0x2e and 0x4e and auto-detect the presence of a
|
||||
+ * nct6775 hardware monitor, and call probe()
|
||||
+ */
|
||||
+ for (i = 0; i < ARRAY_SIZE(pdev); i++) {
|
||||
+ address = nct6775_find(sioaddr[i], &sio_data);
|
||||
+ if (address <= 0)
|
||||
+ continue;
|
||||
+
|
||||
+ found = true;
|
||||
+
|
||||
+ pdev[i] = platform_device_alloc(DRVNAME, address);
|
||||
+ if (!pdev[i]) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto exit_device_unregister;
|
||||
+ }
|
||||
+
|
||||
+ err = platform_device_add_data(pdev[i], &sio_data,
|
||||
+ sizeof(struct nct6775_sio_data));
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+
|
||||
+ memset(&res, 0, sizeof(res));
|
||||
+ res.name = DRVNAME;
|
||||
+ res.start = address;
|
||||
+ res.end = address + IOREGION_LENGTH - 1;
|
||||
+ res.flags = IORESOURCE_IO;
|
||||
+
|
||||
+ err = acpi_check_resource_conflict(&res);
|
||||
+ if (err) {
|
||||
+ platform_device_put(pdev[i]);
|
||||
+ pdev[i] = NULL;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ err = platform_device_add_resources(pdev[i], &res, 1);
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+
|
||||
+ /* platform_device_add calls probe() */
|
||||
+ err = platform_device_add(pdev[i]);
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+ }
|
||||
+ if (!found) {
|
||||
+ err = -ENODEV;
|
||||
+ goto exit_unregister;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+exit_device_put:
|
||||
+ platform_device_put(pdev[i]);
|
||||
+exit_device_unregister:
|
||||
+ while (--i >= 0) {
|
||||
+ if (pdev[i])
|
||||
+ platform_device_unregister(pdev[i]);
|
||||
+ }
|
||||
+exit_unregister:
|
||||
+ platform_driver_unregister(&i2c_nct6775_driver);
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+MODULE_AUTHOR("Adam Honse <calcprogrammer1@gmail.com>");
|
||||
+MODULE_DESCRIPTION("SMBus driver for NCT6775F and compatible chips");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+
|
||||
+module_init(i2c_nct6775_init);
|
||||
+module_exit(i2c_nct6775_exit);
|
||||
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
|
||||
index 30ded6422e7b..e25ce84c26af 100644
|
||||
--- a/drivers/i2c/busses/i2c-piix4.c
|
||||
+++ b/drivers/i2c/busses/i2c-piix4.c
|
||||
@@ -467,11 +467,11 @@ static int piix4_transaction(struct i2c_adapter *piix4_adapter)
|
||||
if (srvrworks_csb5_delay) /* Extra delay for SERVERWORKS_CSB5 */
|
||||
usleep_range(2000, 2100);
|
||||
else
|
||||
- usleep_range(250, 500);
|
||||
+ usleep_range(25, 50);
|
||||
|
||||
while ((++timeout < MAX_TIMEOUT) &&
|
||||
((temp = inb_p(SMBHSTSTS)) & 0x01))
|
||||
- usleep_range(250, 500);
|
||||
+ usleep_range(25, 50);
|
||||
|
||||
/* If the SMBus is still busy, we give up */
|
||||
if (timeout == MAX_TIMEOUT) {
|
@@ -1,674 +0,0 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
@@ -1 +0,0 @@
|
||||
All the Project C patches (0009-prjc_vx.x-rx.patch) fall under the GNU GENERAL PUBLIC LICENSE Version 3
|
Reference in New Issue
Block a user