Compare commits
24 Commits
12ad6316be
...
main
Author | SHA1 | Date | |
---|---|---|---|
818a459fa3 | |||
bbfd90d5dc | |||
8a22827345 | |||
44cb6acc9c | |||
86c5c0ef41 | |||
720355d977 | |||
28be96caa2 | |||
4d05ae4de6 | |||
48372baf14 | |||
01b98c3c62 | |||
492ec3ca82 | |||
8df072e89b | |||
4cb7006cd5 | |||
43dc655d2e | |||
4d2691343a | |||
97cfa52990 | |||
245a50c3dd | |||
20c917c71c | |||
a5a8a2798d | |||
5c06d65ded | |||
9d4ee668cc | |||
23be27fbba | |||
f2e779751a | |||
0a221c5ce2 |
1
debian/.gitignore
vendored
1
debian/.gitignore
vendored
@@ -27,6 +27,7 @@
|
|||||||
/rules.gen
|
/rules.gen
|
||||||
!/linux-bpf-dev.*
|
!/linux-bpf-dev.*
|
||||||
!/linux-cpupower.*
|
!/linux-cpupower.*
|
||||||
|
!/linux-misc-tools.*
|
||||||
!/linux-perf.*
|
!/linux-perf.*
|
||||||
|
|
||||||
# Ignore compiled Python files
|
# Ignore compiled Python files
|
||||||
|
11
debian/bin/gencontrol.py
vendored
11
debian/bin/gencontrol.py
vendored
@@ -62,7 +62,7 @@ class Gencontrol(Base):
|
|||||||
super().do_main_setup(config, vars, makeflags)
|
super().do_main_setup(config, vars, makeflags)
|
||||||
makeflags.update({
|
makeflags.update({
|
||||||
'VERSION': self.version.linux_version,
|
'VERSION': self.version.linux_version,
|
||||||
'UPSTREAMVERSION': self.version.linux_upstream,
|
'UPSTREAMVERSION': self.version.linux_upstream_full,
|
||||||
'ABINAME': self.abiname,
|
'ABINAME': self.abiname,
|
||||||
'SOURCEVERSION': self.version.complete,
|
'SOURCEVERSION': self.version.complete,
|
||||||
})
|
})
|
||||||
@@ -350,17 +350,10 @@ class Gencontrol(Base):
|
|||||||
def process_changelog(self) -> None:
|
def process_changelog(self) -> None:
|
||||||
version = self.version = self.changelog[0].version
|
version = self.version = self.changelog[0].version
|
||||||
|
|
||||||
if self.changelog[0].distribution == 'UNRELEASED':
|
|
||||||
self.abiname = f'{version.linux_upstream}+unreleased'
|
|
||||||
elif self.changelog[0].distribution == 'experimental':
|
|
||||||
self.abiname = f'{version.linux_upstream}'
|
|
||||||
elif version.linux_revision_backports:
|
|
||||||
self.abiname = f'{version.linux_upstream_full}+bpo'
|
|
||||||
else:
|
|
||||||
self.abiname = f'{version.linux_upstream_full}'
|
self.abiname = f'{version.linux_upstream_full}'
|
||||||
|
|
||||||
self.vars = {
|
self.vars = {
|
||||||
'upstreamversion': self.version.linux_upstream,
|
'upstreamversion': self.version.linux_upstream_full,
|
||||||
'version': self.version.linux_version,
|
'version': self.version.linux_version,
|
||||||
'version_complete': self.version.complete,
|
'version_complete': self.version.complete,
|
||||||
'source_basename': re.sub(r'-[\d.]+$', '',
|
'source_basename': re.sub(r'-[\d.]+$', '',
|
||||||
|
@@ -5,9 +5,9 @@ export GIT_OPTIONAL_LOCKS=0
|
|||||||
|
|
||||||
w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
||||||
|
|
||||||
dst='debian/patches/pf-tmp'
|
dst='debian/patches/tmp-pf'
|
||||||
src='../linux-extras'
|
src='../linux-extras'
|
||||||
branches='amd-pstate btrfs cpuidle crypto exfat fixes fuse kbuild nfs smb zstd'
|
branches='archlinux bbr3 cpuidle kbuild steady'
|
||||||
|
|
||||||
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
||||||
mkdir -p "${dst}"
|
mkdir -p "${dst}"
|
||||||
@@ -34,19 +34,17 @@ for b in ${branches} ; do
|
|||||||
git switch --detach "${ref}"
|
git switch --detach "${ref}"
|
||||||
git switch -C "$r"
|
git switch -C "$r"
|
||||||
|
|
||||||
|
rm -rf "$w/${dst}/$b" ; mkdir -p "$w/${dst}/$b"
|
||||||
if git rebase "${from}" ; then
|
if git rebase "${from}" ; then
|
||||||
[ -d "$w/${dst}/$b/" ] || mkdir -p "$w/${dst}/$b"
|
|
||||||
|
|
||||||
set +e
|
|
||||||
env -C "$w" git ls-files -z | grep -zF "${dst}/$b/" | grep -zFv '/.' | env -C "$w" -u GIT_OPTIONAL_LOCKS xargs -r -0 git rm -f
|
|
||||||
find "$w/${dst}/$b/" -name '*.patch' -type f -exec rm -f {} +
|
|
||||||
set -e
|
|
||||||
|
|
||||||
git format-patch -N --subject-prefix='' --output-directory "$w/${dst}/$b" "${from}..$r"
|
git format-patch -N --subject-prefix='' --output-directory "$w/${dst}/$b" "${from}..$r"
|
||||||
else
|
else
|
||||||
echo >&2
|
echo >&2
|
||||||
git rebase --abort
|
git rebase --abort
|
||||||
echo >&2
|
|
||||||
|
touch "$w/${dst}/$b/0000-rebase-failed"
|
||||||
|
|
||||||
|
base=$(git merge-base "${from}" "${ref}")
|
||||||
|
git format-patch -N --subject-prefix='' --output-directory "$w/${dst}/$b" "${base}..${ref}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
git switch -q --detach "${ref}"
|
git switch -q --detach "${ref}"
|
||||||
@@ -57,6 +55,6 @@ done
|
|||||||
cd "$w" ; rm -rf "$t"
|
cd "$w" ; rm -rf "$t"
|
||||||
|
|
||||||
echo >&2
|
echo >&2
|
||||||
echo 'put in debian/patches/series' >&2
|
echo 'output:' >&2
|
||||||
echo >&2
|
echo >&2
|
||||||
find "${dst}/" -type f -name '*.patch' | sed -E 's#^debian/patches/##' | sort -V
|
find "${dst}/" -type f -name '*.patch' | sed -E 's#^debian/patches/##' | sort -V
|
60
debian/bin/genpatch-zen
vendored
Executable file
60
debian/bin/genpatch-zen
vendored
Executable file
@@ -0,0 +1,60 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -ef
|
||||||
|
|
||||||
|
export GIT_OPTIONAL_LOCKS=0
|
||||||
|
|
||||||
|
w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
||||||
|
|
||||||
|
dst='debian/patches/tmp-zen'
|
||||||
|
src='../linux-extras'
|
||||||
|
branches='bbr3 fixes zen-sauce'
|
||||||
|
|
||||||
|
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
||||||
|
mkdir -p "${dst}"
|
||||||
|
|
||||||
|
kver=
|
||||||
|
if [ -n "$1" ] ; then
|
||||||
|
kver="$1"
|
||||||
|
else
|
||||||
|
kver=$(dpkg-parsechangelog --show-field=Version | sed -E 's/^[0-9]+://;s/-[^-]*$//' | cut -d. -f1-2)
|
||||||
|
fi
|
||||||
|
from="upstream/linux-${kver}.y"
|
||||||
|
|
||||||
|
t=$(mktemp -d) ; : "${t:?}"
|
||||||
|
|
||||||
|
cp -ar "${src}" "$t/"
|
||||||
|
cd "$t/${src##*/}"
|
||||||
|
|
||||||
|
git config advice.skippedCherryPicks false
|
||||||
|
|
||||||
|
for b in ${branches} ; do
|
||||||
|
ref="zen/${kver}/$b"
|
||||||
|
r="tmp-rebase-$b"
|
||||||
|
|
||||||
|
git switch --detach "${ref}"
|
||||||
|
git switch -C "$r"
|
||||||
|
|
||||||
|
rm -rf "$w/${dst}/$b" ; mkdir -p "$w/${dst}/$b"
|
||||||
|
if git rebase "${from}" ; then
|
||||||
|
git format-patch -N --subject-prefix='' --output-directory "$w/${dst}/$b" "${from}..$r"
|
||||||
|
else
|
||||||
|
echo >&2
|
||||||
|
git rebase --abort
|
||||||
|
|
||||||
|
touch "$w/${dst}/$b/0000-rebase-failed"
|
||||||
|
|
||||||
|
base=$(git merge-base "${from}" "${ref}")
|
||||||
|
git format-patch -N --subject-prefix='' --output-directory "$w/${dst}/$b" "${base}..${ref}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
git switch -q --detach "${ref}"
|
||||||
|
git branch -D "$r"
|
||||||
|
echo >&2
|
||||||
|
done
|
||||||
|
|
||||||
|
cd "$w" ; rm -rf "$t"
|
||||||
|
|
||||||
|
echo >&2
|
||||||
|
echo 'output:' >&2
|
||||||
|
echo >&2
|
||||||
|
find "${dst}/" -type f -name '*.patch' | sed -E 's#^debian/patches/##' | sort -V
|
13
debian/bin/refine-configs
vendored
13
debian/bin/refine-configs
vendored
@@ -11,12 +11,15 @@ dpkg-parsechangelog --show-field Source | grep -Eq '^linux'
|
|||||||
|
|
||||||
ch_ver=$(dpkg-parsechangelog --show-field Version)
|
ch_ver=$(dpkg-parsechangelog --show-field Version)
|
||||||
|
|
||||||
v=$1
|
ktarget=$1
|
||||||
|
[ -n "${ktarget}" ] || ktarget=oldconfig
|
||||||
|
|
||||||
|
v=$2
|
||||||
[ -n "$v" ] || v=$(echo "${ch_ver}" | sed -E 's/^\d+://;s/-[^-]+$//')
|
[ -n "$v" ] || v=$(echo "${ch_ver}" | sed -E 's/^\d+://;s/-[^-]+$//')
|
||||||
[ -n "$v" ]
|
[ -n "$v" ]
|
||||||
|
|
||||||
## should be source tree with patches applied
|
## should be source tree with patches applied
|
||||||
src_dir=$2
|
src_dir=$3
|
||||||
[ -n "${src_dir}" ] || src_dir="/tmp/linux-$v"
|
[ -n "${src_dir}" ] || src_dir="/tmp/linux-$v"
|
||||||
[ -n "${src_dir}" ]
|
[ -n "${src_dir}" ]
|
||||||
[ -d "${src_dir}" ]
|
[ -d "${src_dir}" ]
|
||||||
@@ -25,8 +28,8 @@ src_dir=$(readlink -f "${src_dir}")
|
|||||||
nproc=$(nproc || printf 2)
|
nproc=$(nproc || printf 2)
|
||||||
case "${nproc}" in
|
case "${nproc}" in
|
||||||
[0-1] ) nproc=2 ;;
|
[0-1] ) nproc=2 ;;
|
||||||
[2-9] | 1[0-9] ) ;;
|
[2-8] ) ;;
|
||||||
* ) nproc=20 ;;
|
* ) nproc=8 ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
rm -rf debian/build/
|
rm -rf debian/build/
|
||||||
@@ -44,7 +47,7 @@ for c in ${configs} ; do
|
|||||||
|
|
||||||
f="debian/build/$c"
|
f="debian/build/$c"
|
||||||
cp -f "$f" "${src_dir}/.config"
|
cp -f "$f" "${src_dir}/.config"
|
||||||
env -C "${src_dir}" make "-j${nproc}" oldconfig
|
env -C "${src_dir}" make "-j${nproc}" "${ktarget}"
|
||||||
cp -f "${src_dir}/.config" "$f"
|
cp -f "${src_dir}/.config" "$f"
|
||||||
done
|
done
|
||||||
|
|
||||||
|
34
debian/changelog
vendored
34
debian/changelog
vendored
@@ -1,16 +1,30 @@
|
|||||||
linux (6.14.1-1) sid; urgency=medium
|
linux (6.16.6-1) sid; urgency=medium
|
||||||
|
|
||||||
* New upstream stable update:
|
* New upstream stable update:
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.14.1
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.6
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 07 Apr 2025 12:41:44 +0300
|
-- Konstantin Demin <rockdrilla@gmail.com> Tue, 09 Sep 2025 20:27:56 +0300
|
||||||
|
|
||||||
linux (6.14-1) sid; urgency=medium
|
linux (6.16.5-1) sid; urgency=medium
|
||||||
|
|
||||||
* Sync with Debian.
|
* New upstream stable update:
|
||||||
* Refresh patches.
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.5
|
||||||
* Refine configs.
|
|
||||||
* New upstream release: https://kernelnewbies.org/Linux_6.13
|
|
||||||
* New upstream release: https://kernelnewbies.org/Linux_6.14
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 27 Mar 2025 01:51:03 +0300
|
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 04 Sep 2025 18:03:41 +0300
|
||||||
|
|
||||||
|
linux (6.16.4-1) sid; urgency=medium
|
||||||
|
|
||||||
|
* New upstream stable update:
|
||||||
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.4
|
||||||
|
|
||||||
|
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 28 Aug 2025 22:38:27 +0300
|
||||||
|
|
||||||
|
linux (6.16.3-1) sid; urgency=medium
|
||||||
|
|
||||||
|
* New upstream stable update:
|
||||||
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.1
|
||||||
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.2
|
||||||
|
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.3
|
||||||
|
* New upstream release: https://kernelnewbies.org/Linux_6.16
|
||||||
|
|
||||||
|
-- Konstantin Demin <rockdrilla@gmail.com> Sun, 24 Aug 2025 20:54:35 +0300
|
||||||
|
213
debian/config/amd64/config.cloud
vendored
213
debian/config/amd64/config.cloud
vendored
@@ -12,17 +12,6 @@
|
|||||||
# CONFIG_X86_INTEL_LPSS is not set
|
# CONFIG_X86_INTEL_LPSS is not set
|
||||||
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
||||||
CONFIG_IOSF_MBI=m
|
CONFIG_IOSF_MBI=m
|
||||||
CONFIG_HYPERVISOR_GUEST=y
|
|
||||||
CONFIG_PARAVIRT=y
|
|
||||||
# CONFIG_PARAVIRT_DEBUG is not set
|
|
||||||
CONFIG_PARAVIRT_SPINLOCKS=y
|
|
||||||
CONFIG_KVM_GUEST=y
|
|
||||||
CONFIG_ARCH_CPUIDLE_HALTPOLL=y
|
|
||||||
CONFIG_PVH=y
|
|
||||||
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
|
|
||||||
CONFIG_JAILHOUSE_GUEST=y
|
|
||||||
CONFIG_ACRN_GUEST=y
|
|
||||||
CONFIG_INTEL_TDX_GUEST=y
|
|
||||||
# CONFIG_GART_IOMMU is not set
|
# CONFIG_GART_IOMMU is not set
|
||||||
CONFIG_NR_CPUS=64
|
CONFIG_NR_CPUS=64
|
||||||
# CONFIG_X86_MCE_INJECT is not set
|
# CONFIG_X86_MCE_INJECT is not set
|
||||||
@@ -63,14 +52,7 @@ CONFIG_IO_DELAY_NONE=y
|
|||||||
##
|
##
|
||||||
## file: arch/x86/xen/Kconfig
|
## file: arch/x86/xen/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN=y
|
|
||||||
CONFIG_XEN_PV=y
|
|
||||||
CONFIG_XEN_512GB=y
|
|
||||||
CONFIG_XEN_PVHVM_GUEST=y
|
|
||||||
# CONFIG_XEN_DEBUG_FS is not set
|
|
||||||
CONFIG_XEN_PVH=y
|
|
||||||
# CONFIG_XEN_DOM0 is not set
|
# CONFIG_XEN_DOM0 is not set
|
||||||
CONFIG_XEN_PV_MSR_SAFE=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: block/Kconfig
|
## file: block/Kconfig
|
||||||
@@ -109,9 +91,8 @@ CONFIG_XEN_PV_MSR_SAFE=y
|
|||||||
##
|
##
|
||||||
## file: crypto/Kconfig
|
## file: crypto/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_CRYPTO_BENCHMARK is not set
|
||||||
CONFIG_CRYPTO_ECDH=m
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_CTS=m
|
|
||||||
CONFIG_CRYPTO_XTS=m
|
|
||||||
CONFIG_CRYPTO_DEFLATE=m
|
CONFIG_CRYPTO_DEFLATE=m
|
||||||
CONFIG_CRYPTO_842=m
|
CONFIG_CRYPTO_842=m
|
||||||
CONFIG_CRYPTO_LZ4=m
|
CONFIG_CRYPTO_LZ4=m
|
||||||
@@ -151,7 +132,8 @@ CONFIG_CRYPTO_ZSTD=m
|
|||||||
CONFIG_ATA=m
|
CONFIG_ATA=m
|
||||||
# CONFIG_ATA_ACPI is not set
|
# CONFIG_ATA_ACPI is not set
|
||||||
# CONFIG_SATA_PMP is not set
|
# CONFIG_SATA_PMP is not set
|
||||||
# CONFIG_SATA_AHCI is not set
|
CONFIG_SATA_AHCI=m
|
||||||
|
CONFIG_SATA_MOBILE_LPM_POLICY=0
|
||||||
# CONFIG_SATA_AHCI_PLATFORM is not set
|
# CONFIG_SATA_AHCI_PLATFORM is not set
|
||||||
# CONFIG_AHCI_DWC is not set
|
# CONFIG_AHCI_DWC is not set
|
||||||
# CONFIG_SATA_ACARD_AHCI is not set
|
# CONFIG_SATA_ACARD_AHCI is not set
|
||||||
@@ -220,8 +202,7 @@ CONFIG_ATA=m
|
|||||||
## file: drivers/block/Kconfig
|
## file: drivers/block/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
# CONFIG_BLK_DEV_ZONED_LOOP is not set
|
||||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/block/mtip32xx/Kconfig
|
## file: drivers/block/mtip32xx/Kconfig
|
||||||
@@ -267,7 +248,6 @@ CONFIG_TCG_TIS=m
|
|||||||
# CONFIG_TCG_NSC is not set
|
# CONFIG_TCG_NSC is not set
|
||||||
# CONFIG_TCG_ATMEL is not set
|
# CONFIG_TCG_ATMEL is not set
|
||||||
# CONFIG_TCG_INFINEON is not set
|
# CONFIG_TCG_INFINEON is not set
|
||||||
CONFIG_TCG_XEN=m
|
|
||||||
CONFIG_TCG_CRB=m
|
CONFIG_TCG_CRB=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -293,12 +273,6 @@ CONFIG_TCG_CRB=m
|
|||||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||||
## end choice
|
## end choice
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/cpuidle/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
|
|
||||||
CONFIG_HALTPOLL_CPUIDLE=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/crypto/Kconfig
|
## file: drivers/crypto/Kconfig
|
||||||
##
|
##
|
||||||
@@ -323,6 +297,7 @@ CONFIG_HALTPOLL_CPUIDLE=y
|
|||||||
# CONFIG_CRYPTO_DEV_QAT_C62X is not set
|
# CONFIG_CRYPTO_DEV_QAT_C62X is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
|
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
|
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
|
||||||
|
# CONFIG_CRYPTO_DEV_QAT_6XXX is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set
|
# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
|
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
|
# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
|
||||||
@@ -332,6 +307,7 @@ CONFIG_HALTPOLL_CPUIDLE=y
|
|||||||
##
|
##
|
||||||
CONFIG_CXL_BUS=y
|
CONFIG_CXL_BUS=y
|
||||||
# CONFIG_CXL_MEM_RAW_COMMANDS is not set
|
# CONFIG_CXL_MEM_RAW_COMMANDS is not set
|
||||||
|
# CONFIG_CXL_FEATURES is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/devfreq/Kconfig
|
## file: drivers/devfreq/Kconfig
|
||||||
@@ -424,6 +400,11 @@ CONFIG_GOOGLE_COREBOOT_TABLE=m
|
|||||||
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
|
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
|
||||||
CONFIG_GOOGLE_VPD=m
|
CONFIG_GOOGLE_VPD=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/fwctl/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_FWCTL is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gnss/Kconfig
|
## file: drivers/gnss/Kconfig
|
||||||
##
|
##
|
||||||
@@ -467,10 +448,7 @@ CONFIG_GOOGLE_VPD=m
|
|||||||
##
|
##
|
||||||
## file: drivers/hv/Kconfig
|
## file: drivers/hv/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_HYPERV=m
|
# CONFIG_MSHV_ROOT is not set
|
||||||
# CONFIG_HYPERV_VTL_MODE is not set
|
|
||||||
CONFIG_HYPERV_UTILS=m
|
|
||||||
CONFIG_HYPERV_BALLOON=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/hwmon/Kconfig
|
## file: drivers/hwmon/Kconfig
|
||||||
@@ -499,7 +477,6 @@ CONFIG_HWMON=m
|
|||||||
# CONFIG_SENSORS_NCT6683 is not set
|
# CONFIG_SENSORS_NCT6683 is not set
|
||||||
# CONFIG_SENSORS_NCT6775 is not set
|
# CONFIG_SENSORS_NCT6775 is not set
|
||||||
# CONFIG_SENSORS_NPCM7XX is not set
|
# CONFIG_SENSORS_NPCM7XX is not set
|
||||||
# CONFIG_SENSORS_OXP is not set
|
|
||||||
# CONFIG_SENSORS_SIS5595 is not set
|
# CONFIG_SENSORS_SIS5595 is not set
|
||||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||||
@@ -683,7 +660,6 @@ CONFIG_INFINIBAND_SRPT=m
|
|||||||
# CONFIG_SERIO_ALTERA_PS2 is not set
|
# CONFIG_SERIO_ALTERA_PS2 is not set
|
||||||
# CONFIG_SERIO_PS2MULT is not set
|
# CONFIG_SERIO_PS2MULT is not set
|
||||||
# CONFIG_SERIO_ARC_PS2 is not set
|
# CONFIG_SERIO_ARC_PS2 is not set
|
||||||
CONFIG_HYPERV_KEYBOARD=m
|
|
||||||
# CONFIG_USERIO is not set
|
# CONFIG_USERIO is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -701,12 +677,6 @@ CONFIG_HYPERV_KEYBOARD=m
|
|||||||
##
|
##
|
||||||
# CONFIG_INTERCONNECT is not set
|
# CONFIG_INTERCONNECT is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/iommu/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HYPERV_IOMMU=y
|
|
||||||
CONFIG_VIRTIO_IOMMU=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/iommu/iommufd/Kconfig
|
## file: drivers/iommu/iommufd/Kconfig
|
||||||
##
|
##
|
||||||
@@ -804,7 +774,6 @@ CONFIG_FUSION_FC=m
|
|||||||
# CONFIG_TIFM_CORE is not set
|
# CONFIG_TIFM_CORE is not set
|
||||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||||
# CONFIG_HP_ILO is not set
|
# CONFIG_HP_ILO is not set
|
||||||
CONFIG_VMWARE_BALLOON=m
|
|
||||||
# CONFIG_SRAM is not set
|
# CONFIG_SRAM is not set
|
||||||
# CONFIG_DW_XDATA_PCIE is not set
|
# CONFIG_DW_XDATA_PCIE is not set
|
||||||
# CONFIG_XILINX_SDFEC is not set
|
# CONFIG_XILINX_SDFEC is not set
|
||||||
@@ -859,8 +828,7 @@ CONFIG_VMWARE_BALLOON=m
|
|||||||
##
|
##
|
||||||
## file: drivers/net/Kconfig
|
## file: drivers/net/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
# CONFIG_OVPN is not set
|
||||||
CONFIG_XEN_NETDEV_BACKEND=m
|
|
||||||
# CONFIG_FUJITSU_ES is not set
|
# CONFIG_FUJITSU_ES is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -1078,11 +1046,6 @@ CONFIG_FBNIC=m
|
|||||||
##
|
##
|
||||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/net/ethernet/microsoft/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_MICROSOFT_MANA=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ethernet/mscc/Kconfig
|
## file: drivers/net/ethernet/mscc/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1248,11 +1211,6 @@ CONFIG_MICROSOFT_MANA=m
|
|||||||
##
|
##
|
||||||
# CONFIG_NET_VENDOR_XILINX is not set
|
# CONFIG_NET_VENDOR_XILINX is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/net/hyperv/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HYPERV_NET=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/mdio/Kconfig
|
## file: drivers/net/mdio/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1268,6 +1226,7 @@ CONFIG_HYPERV_NET=m
|
|||||||
##
|
##
|
||||||
## file: drivers/net/phy/Kconfig
|
## file: drivers/net/phy/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_AS21XXX_PHY is not set
|
||||||
# CONFIG_AIR_EN8811H_PHY is not set
|
# CONFIG_AIR_EN8811H_PHY is not set
|
||||||
# CONFIG_AMD_PHY is not set
|
# CONFIG_AMD_PHY is not set
|
||||||
# CONFIG_ADIN_PHY is not set
|
# CONFIG_ADIN_PHY is not set
|
||||||
@@ -1290,6 +1249,7 @@ CONFIG_HYPERV_NET=m
|
|||||||
# CONFIG_MARVELL_88Q2XXX_PHY is not set
|
# CONFIG_MARVELL_88Q2XXX_PHY is not set
|
||||||
# CONFIG_MARVELL_88X2222_PHY is not set
|
# CONFIG_MARVELL_88X2222_PHY is not set
|
||||||
# CONFIG_MAXLINEAR_GPHY is not set
|
# CONFIG_MAXLINEAR_GPHY is not set
|
||||||
|
# CONFIG_MAXLINEAR_86110_PHY is not set
|
||||||
# CONFIG_MICREL_PHY is not set
|
# CONFIG_MICREL_PHY is not set
|
||||||
# CONFIG_MICROCHIP_T1S_PHY is not set
|
# CONFIG_MICROCHIP_T1S_PHY is not set
|
||||||
# CONFIG_MICROCHIP_PHY is not set
|
# CONFIG_MICROCHIP_PHY is not set
|
||||||
@@ -1401,15 +1361,12 @@ CONFIG_NVME_TARGET_FC=m
|
|||||||
##
|
##
|
||||||
## file: drivers/pci/Kconfig
|
## file: drivers/pci/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
|
||||||
# CONFIG_PCIE_TPH is not set
|
# CONFIG_PCIE_TPH is not set
|
||||||
CONFIG_PCI_HYPERV=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pci/controller/Kconfig
|
## file: drivers/pci/controller/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_VMD is not set
|
# CONFIG_VMD is not set
|
||||||
CONFIG_PCI_HYPERV_INTERFACE=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pci/controller/dwc/Kconfig
|
## file: drivers/pci/controller/dwc/Kconfig
|
||||||
@@ -1434,6 +1391,11 @@ CONFIG_PCIEASPM_DEFAULT=y
|
|||||||
# CONFIG_PCIEASPM_POWERSAVE is not set
|
# CONFIG_PCIEASPM_POWERSAVE is not set
|
||||||
## end choice
|
## end choice
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/pci/pwrctrl/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_PCI_PWRCTRL_SLOT is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pci/switch/Kconfig
|
## file: drivers/pci/switch/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1523,13 +1485,16 @@ CONFIG_PCIEASPM_DEFAULT=y
|
|||||||
##
|
##
|
||||||
CONFIG_PPS=m
|
CONFIG_PPS=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/pps/generators/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_PPS_GENERATOR_TIO is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/ptp/Kconfig
|
## file: drivers/ptp/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_DP83640_PHY is not set
|
# CONFIG_DP83640_PHY is not set
|
||||||
# CONFIG_PTP_1588_CLOCK_INES is not set
|
# CONFIG_PTP_1588_CLOCK_INES is not set
|
||||||
CONFIG_PTP_1588_CLOCK_KVM=m
|
|
||||||
CONFIG_PTP_1588_CLOCK_VMW=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pwm/Kconfig
|
## file: drivers/pwm/Kconfig
|
||||||
@@ -1589,8 +1554,6 @@ CONFIG_SCSI_FC_ATTRS=m
|
|||||||
CONFIG_SCSI_SRP_ATTRS=m
|
CONFIG_SCSI_SRP_ATTRS=m
|
||||||
CONFIG_SCSI_BUSLOGIC=m
|
CONFIG_SCSI_BUSLOGIC=m
|
||||||
# CONFIG_SCSI_FLASHPOINT is not set
|
# CONFIG_SCSI_FLASHPOINT is not set
|
||||||
CONFIG_XEN_SCSI_FRONTEND=m
|
|
||||||
CONFIG_HYPERV_STORAGE=m
|
|
||||||
# CONFIG_LIBFC is not set
|
# CONFIG_LIBFC is not set
|
||||||
CONFIG_SCSI_IPR=m
|
CONFIG_SCSI_IPR=m
|
||||||
# CONFIG_SCSI_IPR_TRACE is not set
|
# CONFIG_SCSI_IPR_TRACE is not set
|
||||||
@@ -1694,12 +1657,6 @@ CONFIG_SCSI_MPI3MR=m
|
|||||||
# CONFIG_N_GSM is not set
|
# CONFIG_N_GSM is not set
|
||||||
# CONFIG_NOZOMI is not set
|
# CONFIG_NOZOMI is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/tty/hvc/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HVC_XEN=y
|
|
||||||
CONFIG_HVC_XEN_FRONTEND=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/tty/serial/Kconfig
|
## file: drivers/tty/serial/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1723,6 +1680,7 @@ CONFIG_HVC_XEN_FRONTEND=y
|
|||||||
# CONFIG_SERIAL_8250_RSA is not set
|
# CONFIG_SERIAL_8250_RSA is not set
|
||||||
# CONFIG_SERIAL_8250_RT288X is not set
|
# CONFIG_SERIAL_8250_RT288X is not set
|
||||||
# CONFIG_SERIAL_8250_MID is not set
|
# CONFIG_SERIAL_8250_MID is not set
|
||||||
|
# CONFIG_SERIAL_8250_NI is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/ufs/Kconfig
|
## file: drivers/ufs/Kconfig
|
||||||
@@ -1737,7 +1695,6 @@ CONFIG_HVC_XEN_FRONTEND=y
|
|||||||
# CONFIG_UIO_SERCOS3 is not set
|
# CONFIG_UIO_SERCOS3 is not set
|
||||||
# CONFIG_UIO_NETX is not set
|
# CONFIG_UIO_NETX is not set
|
||||||
# CONFIG_UIO_MF624 is not set
|
# CONFIG_UIO_MF624 is not set
|
||||||
CONFIG_UIO_HV_GENERIC=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/usb/Kconfig
|
## file: drivers/usb/Kconfig
|
||||||
@@ -1766,34 +1723,17 @@ CONFIG_UIO_HV_GENERIC=m
|
|||||||
##
|
##
|
||||||
CONFIG_FB_CIRRUS=m
|
CONFIG_FB_CIRRUS=m
|
||||||
CONFIG_FB_UVESA=m
|
CONFIG_FB_UVESA=m
|
||||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
|
||||||
CONFIG_FB_HYPERV=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/video/fbdev/core/Kconfig
|
## file: drivers/video/fbdev/core/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_FB_DEVICE is not set
|
# CONFIG_FB_DEVICE is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/virt/acrn/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_ACRN_HSM=m
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/virt/coco/tdx-guest/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_TDX_GUEST_DRIVER=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/virt/vboxguest/Kconfig
|
## file: drivers/virt/vboxguest/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_VBOXGUEST is not set
|
# CONFIG_VBOXGUEST is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/virtio/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/w1/Kconfig
|
## file: drivers/w1/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1807,6 +1747,7 @@ CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m
|
|||||||
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
|
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
|
||||||
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
||||||
# CONFIG_LENOVO_SE10_WDT is not set
|
# CONFIG_LENOVO_SE10_WDT is not set
|
||||||
|
# CONFIG_LENOVO_SE30_WDT is not set
|
||||||
# CONFIG_XILINX_WATCHDOG is not set
|
# CONFIG_XILINX_WATCHDOG is not set
|
||||||
# CONFIG_CADENCE_WATCHDOG is not set
|
# CONFIG_CADENCE_WATCHDOG is not set
|
||||||
# CONFIG_DW_WATCHDOG is not set
|
# CONFIG_DW_WATCHDOG is not set
|
||||||
@@ -1826,6 +1767,7 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
|||||||
# CONFIG_IBMASR is not set
|
# CONFIG_IBMASR is not set
|
||||||
# CONFIG_WAFER_WDT is not set
|
# CONFIG_WAFER_WDT is not set
|
||||||
# CONFIG_IE6XX_WDT is not set
|
# CONFIG_IE6XX_WDT is not set
|
||||||
|
# CONFIG_INTEL_OC_WATCHDOG is not set
|
||||||
# CONFIG_IT8712F_WDT is not set
|
# CONFIG_IT8712F_WDT is not set
|
||||||
# CONFIG_IT87_WDT is not set
|
# CONFIG_IT87_WDT is not set
|
||||||
# CONFIG_HP_WATCHDOG is not set
|
# CONFIG_HP_WATCHDOG is not set
|
||||||
@@ -1844,35 +1786,8 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
|||||||
# CONFIG_SBC_EPX_C3_WATCHDOG is not set
|
# CONFIG_SBC_EPX_C3_WATCHDOG is not set
|
||||||
# CONFIG_NI903X_WDT is not set
|
# CONFIG_NI903X_WDT is not set
|
||||||
# CONFIG_NIC7018_WDT is not set
|
# CONFIG_NIC7018_WDT is not set
|
||||||
CONFIG_XEN_WDT=m
|
|
||||||
# CONFIG_PCIPCWATCHDOG is not set
|
# CONFIG_PCIPCWATCHDOG is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/xen/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_XEN_BALLOON=y
|
|
||||||
CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
|
|
||||||
CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512
|
|
||||||
CONFIG_XEN_SCRUB_PAGES_DEFAULT=y
|
|
||||||
CONFIG_XEN_DEV_EVTCHN=m
|
|
||||||
CONFIG_XEN_BACKEND=y
|
|
||||||
CONFIG_XENFS=m
|
|
||||||
CONFIG_XEN_COMPAT_XENFS=y
|
|
||||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
|
||||||
CONFIG_XEN_GNTDEV=m
|
|
||||||
CONFIG_XEN_GNTDEV_DMABUF=y
|
|
||||||
CONFIG_XEN_GRANT_DEV_ALLOC=m
|
|
||||||
CONFIG_XEN_GRANT_DMA_ALLOC=y
|
|
||||||
CONFIG_XEN_PCIDEV_BACKEND=m
|
|
||||||
# CONFIG_XEN_PVCALLS_FRONTEND is not set
|
|
||||||
# CONFIG_XEN_PVCALLS_BACKEND is not set
|
|
||||||
CONFIG_XEN_SCSI_BACKEND=m
|
|
||||||
CONFIG_XEN_PRIVCMD=m
|
|
||||||
CONFIG_XEN_PRIVCMD_EVENTFD=y
|
|
||||||
CONFIG_XEN_UNPOPULATED_ALLOC=y
|
|
||||||
CONFIG_XEN_VIRTIO=y
|
|
||||||
# CONFIG_XEN_VIRTIO_FORCE_GRANT is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/Kconfig
|
## file: fs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1898,11 +1813,6 @@ CONFIG_XEN_VIRTIO=y
|
|||||||
##
|
##
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/btrfs/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_BTRFS_FS is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/coda/Kconfig
|
## file: fs/coda/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1928,6 +1838,11 @@ CONFIG_XEN_VIRTIO=y
|
|||||||
##
|
##
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: fs/erofs/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_EROFS_FS_ZIP_ACCEL is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/f2fs/Kconfig
|
## file: fs/f2fs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1938,12 +1853,6 @@ CONFIG_XEN_VIRTIO=y
|
|||||||
##
|
##
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/fuse/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_FUSE_FS=m
|
|
||||||
CONFIG_VIRTIO_FS=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/gfs2/Kconfig
|
## file: fs/gfs2/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2070,9 +1979,9 @@ CONFIG_PROC_VMCORE=y
|
|||||||
# CONFIG_CIFS is not set
|
# CONFIG_CIFS is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/sysv/Kconfig
|
## file: fs/squashfs/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_SYSV_FS is not set
|
# CONFIG_SQUASHFS_COMP_CACHE_FULL is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/ufs/Kconfig
|
## file: fs/ufs/Kconfig
|
||||||
@@ -2103,6 +2012,7 @@ CONFIG_KEXEC_SIG=y
|
|||||||
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
|
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
|
||||||
CONFIG_KEXEC_JUMP=y
|
CONFIG_KEXEC_JUMP=y
|
||||||
CONFIG_CRASH_DUMP=y
|
CONFIG_CRASH_DUMP=y
|
||||||
|
# CONFIG_CRASH_DM_CRYPT is not set
|
||||||
CONFIG_CRASH_HOTPLUG=y
|
CONFIG_CRASH_HOTPLUG=y
|
||||||
CONFIG_CRASH_MAX_MEMORY_RANGES=8192
|
CONFIG_CRASH_MAX_MEMORY_RANGES=8192
|
||||||
|
|
||||||
@@ -2124,7 +2034,6 @@ CONFIG_PREEMPT_NONE=y
|
|||||||
## file: kernel/power/Kconfig
|
## file: kernel/power/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_PM_DEBUG is not set
|
# CONFIG_PM_DEBUG is not set
|
||||||
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: kernel/rcu/Kconfig
|
## file: kernel/rcu/Kconfig
|
||||||
@@ -2164,7 +2073,6 @@ CONFIG_PANIC_TIMEOUT=5
|
|||||||
# CONFIG_FUNCTION_ERROR_INJECTION is not set
|
# CONFIG_FUNCTION_ERROR_INJECTION is not set
|
||||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||||
# CONFIG_MEMTEST is not set
|
# CONFIG_MEMTEST is not set
|
||||||
# CONFIG_HYPERV_TESTING is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: lib/Kconfig.kfence
|
## file: lib/Kconfig.kfence
|
||||||
@@ -2175,6 +2083,7 @@ CONFIG_PANIC_TIMEOUT=5
|
|||||||
## file: mm/Kconfig
|
## file: mm/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_ZSWAP is not set
|
# CONFIG_ZSWAP is not set
|
||||||
|
CONFIG_ZSMALLOC=m
|
||||||
# CONFIG_HWPOISON_INJECT is not set
|
# CONFIG_HWPOISON_INJECT is not set
|
||||||
# CONFIG_NUMA_EMU is not set
|
# CONFIG_NUMA_EMU is not set
|
||||||
|
|
||||||
@@ -2205,7 +2114,7 @@ CONFIG_MAX_SKB_FRAGS=19
|
|||||||
##
|
##
|
||||||
## file: net/9p/Kconfig
|
## file: net/9p/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_NET_9P is not set
|
CONFIG_NET_9P_RDMA=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/appletalk/Kconfig
|
## file: net/appletalk/Kconfig
|
||||||
@@ -2243,17 +2152,6 @@ CONFIG_MAX_SKB_FRAGS=19
|
|||||||
##
|
##
|
||||||
# CONFIG_CAN is not set
|
# CONFIG_CAN is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: net/dccp/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_IP_DCCP_DEBUG is not set
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: net/dccp/ccids/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
|
|
||||||
# CONFIG_IP_DCCP_CCID3_DEBUG is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/ieee802154/Kconfig
|
## file: net/ieee802154/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2411,11 +2309,6 @@ CONFIG_SUNRPC_XPRT_RDMA=m
|
|||||||
##
|
##
|
||||||
CONFIG_TIPC_MEDIA_IB=y
|
CONFIG_TIPC_MEDIA_IB=y
|
||||||
|
|
||||||
##
|
|
||||||
## file: net/vmw_vsock/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HYPERV_VSOCKETS=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/x25/Kconfig
|
## file: net/x25/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2441,6 +2334,7 @@ CONFIG_IPE_PROP_DM_VERITY_SIGNATURE=y
|
|||||||
## file: security/keys/Kconfig
|
## file: security/keys/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_KEYS_REQUEST_CACHE is not set
|
# CONFIG_KEYS_REQUEST_CACHE is not set
|
||||||
|
# CONFIG_BIG_KEYS is not set
|
||||||
# CONFIG_TRUSTED_KEYS is not set
|
# CONFIG_TRUSTED_KEYS is not set
|
||||||
# CONFIG_USER_DECRYPTED_DATA is not set
|
# CONFIG_USER_DECRYPTED_DATA is not set
|
||||||
|
|
||||||
@@ -2458,11 +2352,14 @@ CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y
|
|||||||
CONFIG_ARCH_SELECTS_KEXEC_FILE=y
|
CONFIG_ARCH_SELECTS_KEXEC_FILE=y
|
||||||
CONFIG_BLK_DEV_RNBD=y
|
CONFIG_BLK_DEV_RNBD=y
|
||||||
CONFIG_CRASH_RESERVE=y
|
CONFIG_CRASH_RESERVE=y
|
||||||
|
CONFIG_CRYPTO_CHACHA20_X86_64=m
|
||||||
CONFIG_CRYPTO_LIB_AESCFB=m
|
CONFIG_CRYPTO_LIB_AESCFB=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
|
||||||
|
CONFIG_CRYPTO_LIB_POLY1305=m
|
||||||
|
CONFIG_CRYPTO_POLY1305_X86_64=m
|
||||||
CONFIG_CXL_PORT=y
|
CONFIG_CXL_PORT=y
|
||||||
CONFIG_FB_IOMEM_HELPERS_DEFERRED=y
|
|
||||||
CONFIG_HVC_IRQ=y
|
|
||||||
CONFIG_HYPERV_TIMER=y
|
|
||||||
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
|
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
|
||||||
CONFIG_INFINIBAND_RTRS=m
|
CONFIG_INFINIBAND_RTRS=m
|
||||||
CONFIG_INFINIBAND_USER_MEM=y
|
CONFIG_INFINIBAND_USER_MEM=y
|
||||||
@@ -2479,30 +2376,12 @@ CONFIG_LZ4_COMPRESS=m
|
|||||||
CONFIG_MFD_CORE=m
|
CONFIG_MFD_CORE=m
|
||||||
CONFIG_ND_BTT=m
|
CONFIG_ND_BTT=m
|
||||||
CONFIG_ND_PFN=m
|
CONFIG_ND_PFN=m
|
||||||
CONFIG_NETFS_SUPPORT=m
|
|
||||||
# CONFIG_NVMEM_LAYOUTS is not set
|
# CONFIG_NVMEM_LAYOUTS is not set
|
||||||
CONFIG_PARAVIRT_CLOCK=y
|
CONFIG_PLDMFW=y
|
||||||
CONFIG_PARAVIRT_XXL=y
|
|
||||||
CONFIG_PCI_XEN=y
|
|
||||||
CONFIG_PREEMPT_NONE_BUILD=y
|
CONFIG_PREEMPT_NONE_BUILD=y
|
||||||
CONFIG_RATIONAL=m
|
CONFIG_RATIONAL=m
|
||||||
CONFIG_SCSI_COMMON=m
|
CONFIG_SCSI_COMMON=m
|
||||||
CONFIG_SCSI_MOD=m
|
CONFIG_SCSI_MOD=m
|
||||||
CONFIG_SCSI_NETLINK=y
|
CONFIG_SCSI_NETLINK=y
|
||||||
CONFIG_SWIOTLB_XEN=y
|
|
||||||
CONFIG_SYS_HYPERVISOR=y
|
|
||||||
CONFIG_TCG_TIS_CORE=m
|
CONFIG_TCG_TIS_CORE=m
|
||||||
CONFIG_X86_HV_CALLBACK_VECTOR=y
|
|
||||||
CONFIG_XEN_ACPI=y
|
|
||||||
CONFIG_XEN_AUTO_XLATE=y
|
|
||||||
CONFIG_XEN_EFI=y
|
|
||||||
CONFIG_XEN_GRANT_DMA_OPS=y
|
|
||||||
CONFIG_XEN_HAVE_PVMMU=y
|
|
||||||
CONFIG_XEN_HAVE_VPMU=y
|
|
||||||
CONFIG_XEN_PCI_STUB=y
|
|
||||||
CONFIG_XEN_PVHVM=y
|
|
||||||
CONFIG_XEN_PVHVM_SMP=y
|
|
||||||
CONFIG_XEN_PV_SMP=y
|
|
||||||
CONFIG_XEN_SAVE_RESTORE=y
|
|
||||||
CONFIG_XEN_XENBUS_FRONTEND=y
|
|
||||||
CONFIG_ZSTD_COMPRESS=m
|
CONFIG_ZSTD_COMPRESS=m
|
||||||
|
378
debian/config/amd64/config.mobile
vendored
378
debian/config/amd64/config.mobile
vendored
File diff suppressed because it is too large
Load Diff
318
debian/config/amd64/config.vm
vendored
318
debian/config/amd64/config.vm
vendored
@@ -11,22 +11,11 @@
|
|||||||
CONFIG_X86_EXTENDED_PLATFORM=y
|
CONFIG_X86_EXTENDED_PLATFORM=y
|
||||||
# CONFIG_X86_NUMACHIP is not set
|
# CONFIG_X86_NUMACHIP is not set
|
||||||
# CONFIG_X86_VSMP is not set
|
# CONFIG_X86_VSMP is not set
|
||||||
CONFIG_X86_GOLDFISH=y
|
|
||||||
# CONFIG_X86_INTEL_MID is not set
|
# CONFIG_X86_INTEL_MID is not set
|
||||||
|
CONFIG_X86_GOLDFISH=y
|
||||||
# CONFIG_X86_INTEL_LPSS is not set
|
# CONFIG_X86_INTEL_LPSS is not set
|
||||||
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
# CONFIG_X86_AMD_PLATFORM_DEVICE is not set
|
||||||
CONFIG_IOSF_MBI=m
|
CONFIG_IOSF_MBI=m
|
||||||
CONFIG_HYPERVISOR_GUEST=y
|
|
||||||
CONFIG_PARAVIRT=y
|
|
||||||
# CONFIG_PARAVIRT_DEBUG is not set
|
|
||||||
CONFIG_PARAVIRT_SPINLOCKS=y
|
|
||||||
CONFIG_KVM_GUEST=y
|
|
||||||
CONFIG_ARCH_CPUIDLE_HALTPOLL=y
|
|
||||||
CONFIG_PVH=y
|
|
||||||
# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set
|
|
||||||
CONFIG_JAILHOUSE_GUEST=y
|
|
||||||
CONFIG_ACRN_GUEST=y
|
|
||||||
CONFIG_INTEL_TDX_GUEST=y
|
|
||||||
# CONFIG_GART_IOMMU is not set
|
# CONFIG_GART_IOMMU is not set
|
||||||
CONFIG_NR_CPUS=256
|
CONFIG_NR_CPUS=256
|
||||||
# CONFIG_X86_MCE_INJECT is not set
|
# CONFIG_X86_MCE_INJECT is not set
|
||||||
@@ -68,14 +57,7 @@ CONFIG_IO_DELAY_NONE=y
|
|||||||
##
|
##
|
||||||
## file: arch/x86/xen/Kconfig
|
## file: arch/x86/xen/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN=y
|
|
||||||
CONFIG_XEN_PV=y
|
|
||||||
CONFIG_XEN_512GB=y
|
|
||||||
CONFIG_XEN_PVHVM_GUEST=y
|
|
||||||
# CONFIG_XEN_DEBUG_FS is not set
|
|
||||||
CONFIG_XEN_PVH=y
|
|
||||||
# CONFIG_XEN_DOM0 is not set
|
# CONFIG_XEN_DOM0 is not set
|
||||||
CONFIG_XEN_PV_MSR_SAFE=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: block/Kconfig
|
## file: block/Kconfig
|
||||||
@@ -114,9 +96,8 @@ CONFIG_XEN_PV_MSR_SAFE=y
|
|||||||
##
|
##
|
||||||
## file: crypto/Kconfig
|
## file: crypto/Kconfig
|
||||||
##
|
##
|
||||||
|
CONFIG_CRYPTO_BENCHMARK=m
|
||||||
CONFIG_CRYPTO_ECDH=m
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_CTS=m
|
|
||||||
CONFIG_CRYPTO_XTS=m
|
|
||||||
CONFIG_CRYPTO_DEFLATE=m
|
CONFIG_CRYPTO_DEFLATE=m
|
||||||
CONFIG_CRYPTO_842=m
|
CONFIG_CRYPTO_842=m
|
||||||
CONFIG_CRYPTO_LZ4=m
|
CONFIG_CRYPTO_LZ4=m
|
||||||
@@ -166,7 +147,8 @@ CONFIG_ANDROID_BINDER_DEVICES="binder"
|
|||||||
CONFIG_ATA=m
|
CONFIG_ATA=m
|
||||||
# CONFIG_ATA_ACPI is not set
|
# CONFIG_ATA_ACPI is not set
|
||||||
# CONFIG_SATA_PMP is not set
|
# CONFIG_SATA_PMP is not set
|
||||||
# CONFIG_SATA_AHCI is not set
|
CONFIG_SATA_AHCI=m
|
||||||
|
CONFIG_SATA_MOBILE_LPM_POLICY=0
|
||||||
# CONFIG_SATA_AHCI_PLATFORM is not set
|
# CONFIG_SATA_AHCI_PLATFORM is not set
|
||||||
# CONFIG_AHCI_DWC is not set
|
# CONFIG_AHCI_DWC is not set
|
||||||
# CONFIG_SATA_ACARD_AHCI is not set
|
# CONFIG_SATA_ACARD_AHCI is not set
|
||||||
@@ -235,8 +217,7 @@ CONFIG_ATA=m
|
|||||||
## file: drivers/block/Kconfig
|
## file: drivers/block/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
CONFIG_BLK_DEV_ZONED_LOOP=m
|
||||||
CONFIG_XEN_BLKDEV_BACKEND=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/block/mtip32xx/Kconfig
|
## file: drivers/block/mtip32xx/Kconfig
|
||||||
@@ -293,7 +274,6 @@ CONFIG_TCG_TIS_I2C=m
|
|||||||
# CONFIG_TCG_NSC is not set
|
# CONFIG_TCG_NSC is not set
|
||||||
# CONFIG_TCG_ATMEL is not set
|
# CONFIG_TCG_ATMEL is not set
|
||||||
# CONFIG_TCG_INFINEON is not set
|
# CONFIG_TCG_INFINEON is not set
|
||||||
CONFIG_TCG_XEN=m
|
|
||||||
CONFIG_TCG_CRB=m
|
CONFIG_TCG_CRB=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -338,12 +318,6 @@ CONFIG_INTERRUPT_CNT=m
|
|||||||
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||||
## end choice
|
## end choice
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/cpuidle/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_CPU_IDLE_GOV_HALTPOLL=y
|
|
||||||
CONFIG_HALTPOLL_CPUIDLE=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/crypto/Kconfig
|
## file: drivers/crypto/Kconfig
|
||||||
##
|
##
|
||||||
@@ -370,6 +344,7 @@ CONFIG_HALTPOLL_CPUIDLE=y
|
|||||||
# CONFIG_CRYPTO_DEV_QAT_C62X is not set
|
# CONFIG_CRYPTO_DEV_QAT_C62X is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
|
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
|
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
|
||||||
|
# CONFIG_CRYPTO_DEV_QAT_6XXX is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set
|
# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
|
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
|
||||||
# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
|
# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
|
||||||
@@ -379,6 +354,7 @@ CONFIG_HALTPOLL_CPUIDLE=y
|
|||||||
##
|
##
|
||||||
CONFIG_CXL_BUS=y
|
CONFIG_CXL_BUS=y
|
||||||
# CONFIG_CXL_MEM_RAW_COMMANDS is not set
|
# CONFIG_CXL_MEM_RAW_COMMANDS is not set
|
||||||
|
# CONFIG_CXL_FEATURES is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/devfreq/Kconfig
|
## file: drivers/devfreq/Kconfig
|
||||||
@@ -454,6 +430,9 @@ CONFIG_EDAC_LEGACY_SYSFS=y
|
|||||||
# CONFIG_EDAC_DEBUG is not set
|
# CONFIG_EDAC_DEBUG is not set
|
||||||
CONFIG_EDAC_DECODE_MCE=y
|
CONFIG_EDAC_DECODE_MCE=y
|
||||||
CONFIG_EDAC_GHES=y
|
CONFIG_EDAC_GHES=y
|
||||||
|
# CONFIG_EDAC_SCRUB is not set
|
||||||
|
# CONFIG_EDAC_ECS is not set
|
||||||
|
# CONFIG_EDAC_MEM_REPAIR is not set
|
||||||
# CONFIG_EDAC_AMD64 is not set
|
# CONFIG_EDAC_AMD64 is not set
|
||||||
# CONFIG_EDAC_E752X is not set
|
# CONFIG_EDAC_E752X is not set
|
||||||
# CONFIG_EDAC_I82975X is not set
|
# CONFIG_EDAC_I82975X is not set
|
||||||
@@ -511,6 +490,11 @@ CONFIG_GOOGLE_COREBOOT_TABLE=m
|
|||||||
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
|
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
|
||||||
CONFIG_GOOGLE_VPD=m
|
CONFIG_GOOGLE_VPD=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/fwctl/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_FWCTL is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gnss/Kconfig
|
## file: drivers/gnss/Kconfig
|
||||||
##
|
##
|
||||||
@@ -570,14 +554,18 @@ CONFIG_GPIO_SIM=m
|
|||||||
## file: drivers/gpu/drm/Kconfig
|
## file: drivers/gpu/drm/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_DRM=y
|
CONFIG_DRM=y
|
||||||
# CONFIG_DRM_DEBUG_MM is not set
|
|
||||||
# CONFIG_DRM_PANIC is not set
|
# CONFIG_DRM_PANIC is not set
|
||||||
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
|
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
|
||||||
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
|
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
|
||||||
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
|
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
|
||||||
CONFIG_DRM_VGEM=m
|
CONFIG_DRM_VGEM=m
|
||||||
CONFIG_DRM_HYPERV=m
|
CONFIG_DRM_HYPERV=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/Kconfig.debug
|
||||||
|
##
|
||||||
# CONFIG_DRM_WERROR is not set
|
# CONFIG_DRM_WERROR is not set
|
||||||
|
# CONFIG_DRM_DEBUG_MM is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/amd/amdgpu/Kconfig
|
## file: drivers/gpu/drm/amd/amdgpu/Kconfig
|
||||||
@@ -589,6 +577,11 @@ CONFIG_DRM_HYPERV=m
|
|||||||
##
|
##
|
||||||
# CONFIG_DRM_AST is not set
|
# CONFIG_DRM_AST is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/bridge/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_DRM_I2C_NXP_TDA998X is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/bridge/analogix/Kconfig
|
## file: drivers/gpu/drm/bridge/analogix/Kconfig
|
||||||
##
|
##
|
||||||
@@ -625,14 +618,6 @@ CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y
|
|||||||
##
|
##
|
||||||
# CONFIG_DRM_HISI_HIBMC is not set
|
# CONFIG_DRM_HISI_HIBMC is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/gpu/drm/i2c/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_DRM_I2C_CH7006 is not set
|
|
||||||
# CONFIG_DRM_I2C_SIL164 is not set
|
|
||||||
# CONFIG_DRM_I2C_NXP_TDA998X is not set
|
|
||||||
# CONFIG_DRM_I2C_NXP_TDA9950 is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/i915/Kconfig
|
## file: drivers/gpu/drm/i915/Kconfig
|
||||||
##
|
##
|
||||||
@@ -658,18 +643,30 @@ CONFIG_DRM_QXL=m
|
|||||||
##
|
##
|
||||||
# CONFIG_DRM_RADEON is not set
|
# CONFIG_DRM_RADEON is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/sitronix/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_DRM_ST7571_I2C is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/solomon/Kconfig
|
## file: drivers/gpu/drm/solomon/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_DRM_SSD130X is not set
|
# CONFIG_DRM_SSD130X is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/sysfb/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_DRM_EFIDRM=m
|
||||||
|
# CONFIG_DRM_SIMPLEDRM is not set
|
||||||
|
CONFIG_DRM_VESADRM=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/tiny/Kconfig
|
## file: drivers/gpu/drm/tiny/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_DRM_APPLETBDRM is not set
|
||||||
CONFIG_DRM_BOCHS=m
|
CONFIG_DRM_BOCHS=m
|
||||||
CONFIG_DRM_CIRRUS_QEMU=m
|
CONFIG_DRM_CIRRUS_QEMU=m
|
||||||
# CONFIG_DRM_GM12U320 is not set
|
# CONFIG_DRM_GM12U320 is not set
|
||||||
# CONFIG_DRM_SIMPLEDRM is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/udl/Kconfig
|
## file: drivers/gpu/drm/udl/Kconfig
|
||||||
@@ -808,6 +805,7 @@ CONFIG_HID_HYPERV_MOUSE=m
|
|||||||
# CONFIG_HID_TOPRE is not set
|
# CONFIG_HID_TOPRE is not set
|
||||||
# CONFIG_HID_THRUSTMASTER is not set
|
# CONFIG_HID_THRUSTMASTER is not set
|
||||||
# CONFIG_HID_UDRAW_PS3 is not set
|
# CONFIG_HID_UDRAW_PS3 is not set
|
||||||
|
# CONFIG_HID_UNIVERSAL_PIDFF is not set
|
||||||
# CONFIG_HID_WACOM is not set
|
# CONFIG_HID_WACOM is not set
|
||||||
# CONFIG_HID_XINMO is not set
|
# CONFIG_HID_XINMO is not set
|
||||||
# CONFIG_HID_ZEROPLUS is not set
|
# CONFIG_HID_ZEROPLUS is not set
|
||||||
@@ -872,10 +870,7 @@ CONFIG_HSI_CHAR=m
|
|||||||
##
|
##
|
||||||
## file: drivers/hv/Kconfig
|
## file: drivers/hv/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_HYPERV=m
|
CONFIG_MSHV_ROOT=m
|
||||||
# CONFIG_HYPERV_VTL_MODE is not set
|
|
||||||
CONFIG_HYPERV_UTILS=m
|
|
||||||
CONFIG_HYPERV_BALLOON=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/hwmon/Kconfig
|
## file: drivers/hwmon/Kconfig
|
||||||
@@ -928,6 +923,7 @@ CONFIG_HWMON=y
|
|||||||
# CONFIG_SENSORS_G762 is not set
|
# CONFIG_SENSORS_G762 is not set
|
||||||
# CONFIG_SENSORS_HIH6130 is not set
|
# CONFIG_SENSORS_HIH6130 is not set
|
||||||
# CONFIG_SENSORS_HS3001 is not set
|
# CONFIG_SENSORS_HS3001 is not set
|
||||||
|
# CONFIG_SENSORS_HTU31 is not set
|
||||||
# CONFIG_SENSORS_I5500 is not set
|
# CONFIG_SENSORS_I5500 is not set
|
||||||
# CONFIG_SENSORS_CORETEMP is not set
|
# CONFIG_SENSORS_CORETEMP is not set
|
||||||
# CONFIG_SENSORS_ISL28022 is not set
|
# CONFIG_SENSORS_ISL28022 is not set
|
||||||
@@ -995,11 +991,9 @@ CONFIG_HWMON=y
|
|||||||
# CONFIG_SENSORS_NZXT_KRAKEN2 is not set
|
# CONFIG_SENSORS_NZXT_KRAKEN2 is not set
|
||||||
# CONFIG_SENSORS_NZXT_KRAKEN3 is not set
|
# CONFIG_SENSORS_NZXT_KRAKEN3 is not set
|
||||||
# CONFIG_SENSORS_NZXT_SMART2 is not set
|
# CONFIG_SENSORS_NZXT_SMART2 is not set
|
||||||
# CONFIG_SENSORS_OXP is not set
|
|
||||||
# CONFIG_SENSORS_PCF8591 is not set
|
# CONFIG_SENSORS_PCF8591 is not set
|
||||||
# CONFIG_SENSORS_PT5161L is not set
|
# CONFIG_SENSORS_PT5161L is not set
|
||||||
# CONFIG_SENSORS_SBTSI is not set
|
# CONFIG_SENSORS_SBTSI is not set
|
||||||
# CONFIG_SENSORS_SBRMI is not set
|
|
||||||
# CONFIG_SENSORS_SHT15 is not set
|
# CONFIG_SENSORS_SHT15 is not set
|
||||||
# CONFIG_SENSORS_SHT21 is not set
|
# CONFIG_SENSORS_SHT21 is not set
|
||||||
# CONFIG_SENSORS_SHT3x is not set
|
# CONFIG_SENSORS_SHT3x is not set
|
||||||
@@ -1073,6 +1067,7 @@ CONFIG_SENSORS_PMBUS=m
|
|||||||
# CONFIG_SENSORS_DELTA_AHE50DC_FAN is not set
|
# CONFIG_SENSORS_DELTA_AHE50DC_FAN is not set
|
||||||
# CONFIG_SENSORS_FSP_3Y is not set
|
# CONFIG_SENSORS_FSP_3Y is not set
|
||||||
# CONFIG_SENSORS_DPS920AB is not set
|
# CONFIG_SENSORS_DPS920AB is not set
|
||||||
|
# CONFIG_SENSORS_INA233 is not set
|
||||||
# CONFIG_SENSORS_INSPUR_IPSPS is not set
|
# CONFIG_SENSORS_INSPUR_IPSPS is not set
|
||||||
# CONFIG_SENSORS_IR35221 is not set
|
# CONFIG_SENSORS_IR35221 is not set
|
||||||
# CONFIG_SENSORS_IR36021 is not set
|
# CONFIG_SENSORS_IR36021 is not set
|
||||||
@@ -1080,6 +1075,7 @@ CONFIG_SENSORS_PMBUS=m
|
|||||||
# CONFIG_SENSORS_IRPS5401 is not set
|
# CONFIG_SENSORS_IRPS5401 is not set
|
||||||
# CONFIG_SENSORS_ISL68137 is not set
|
# CONFIG_SENSORS_ISL68137 is not set
|
||||||
# CONFIG_SENSORS_LM25066 is not set
|
# CONFIG_SENSORS_LM25066 is not set
|
||||||
|
# CONFIG_SENSORS_LT3074 is not set
|
||||||
# CONFIG_SENSORS_LT7182S is not set
|
# CONFIG_SENSORS_LT7182S is not set
|
||||||
# CONFIG_SENSORS_LTC2978 is not set
|
# CONFIG_SENSORS_LTC2978 is not set
|
||||||
# CONFIG_SENSORS_LTC3815 is not set
|
# CONFIG_SENSORS_LTC3815 is not set
|
||||||
@@ -1455,7 +1451,6 @@ CONFIG_SERIO_PCIPS2=m
|
|||||||
# CONFIG_SERIO_ALTERA_PS2 is not set
|
# CONFIG_SERIO_ALTERA_PS2 is not set
|
||||||
# CONFIG_SERIO_PS2MULT is not set
|
# CONFIG_SERIO_PS2MULT is not set
|
||||||
# CONFIG_SERIO_ARC_PS2 is not set
|
# CONFIG_SERIO_ARC_PS2 is not set
|
||||||
CONFIG_HYPERV_KEYBOARD=m
|
|
||||||
CONFIG_SERIO_GPIO_PS2=m
|
CONFIG_SERIO_GPIO_PS2=m
|
||||||
CONFIG_USERIO=m
|
CONFIG_USERIO=m
|
||||||
|
|
||||||
@@ -1560,12 +1555,6 @@ CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
|
|||||||
##
|
##
|
||||||
# CONFIG_INTERCONNECT is not set
|
# CONFIG_INTERCONNECT is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/iommu/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HYPERV_IOMMU=y
|
|
||||||
CONFIG_VIRTIO_IOMMU=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/iommu/iommufd/Kconfig
|
## file: drivers/iommu/iommufd/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1672,6 +1661,7 @@ CONFIG_MFD_INTEL_PMC_BXT=m
|
|||||||
# CONFIG_MFD_MAX14577 is not set
|
# CONFIG_MFD_MAX14577 is not set
|
||||||
# CONFIG_MFD_MAX77541 is not set
|
# CONFIG_MFD_MAX77541 is not set
|
||||||
# CONFIG_MFD_MAX77693 is not set
|
# CONFIG_MFD_MAX77693 is not set
|
||||||
|
# CONFIG_MFD_MAX77705 is not set
|
||||||
# CONFIG_MFD_MAX77843 is not set
|
# CONFIG_MFD_MAX77843 is not set
|
||||||
# CONFIG_MFD_MAX8907 is not set
|
# CONFIG_MFD_MAX8907 is not set
|
||||||
# CONFIG_MFD_MAX8925 is not set
|
# CONFIG_MFD_MAX8925 is not set
|
||||||
@@ -1683,7 +1673,6 @@ CONFIG_MFD_INTEL_PMC_BXT=m
|
|||||||
# CONFIG_MFD_MENF21BMC is not set
|
# CONFIG_MFD_MENF21BMC is not set
|
||||||
# CONFIG_MFD_VIPERBOARD is not set
|
# CONFIG_MFD_VIPERBOARD is not set
|
||||||
# CONFIG_MFD_RETU is not set
|
# CONFIG_MFD_RETU is not set
|
||||||
# CONFIG_MFD_PCF50633 is not set
|
|
||||||
# CONFIG_MFD_SY7636A is not set
|
# CONFIG_MFD_SY7636A is not set
|
||||||
# CONFIG_MFD_RDC321X is not set
|
# CONFIG_MFD_RDC321X is not set
|
||||||
# CONFIG_MFD_RT4831 is not set
|
# CONFIG_MFD_RT4831 is not set
|
||||||
@@ -1732,6 +1721,7 @@ CONFIG_MFD_INTEL_PMC_BXT=m
|
|||||||
# CONFIG_AD525X_DPOT is not set
|
# CONFIG_AD525X_DPOT is not set
|
||||||
# CONFIG_IBM_ASM is not set
|
# CONFIG_IBM_ASM is not set
|
||||||
# CONFIG_PHANTOM is not set
|
# CONFIG_PHANTOM is not set
|
||||||
|
# CONFIG_TI_FPC202 is not set
|
||||||
# CONFIG_TIFM_CORE is not set
|
# CONFIG_TIFM_CORE is not set
|
||||||
# CONFIG_ICS932S401 is not set
|
# CONFIG_ICS932S401 is not set
|
||||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||||
@@ -1744,7 +1734,6 @@ CONFIG_MFD_INTEL_PMC_BXT=m
|
|||||||
# CONFIG_SENSORS_APDS990X is not set
|
# CONFIG_SENSORS_APDS990X is not set
|
||||||
# CONFIG_HMC6352 is not set
|
# CONFIG_HMC6352 is not set
|
||||||
# CONFIG_DS1682 is not set
|
# CONFIG_DS1682 is not set
|
||||||
CONFIG_VMWARE_BALLOON=m
|
|
||||||
# CONFIG_SRAM is not set
|
# CONFIG_SRAM is not set
|
||||||
# CONFIG_DW_XDATA_PCIE is not set
|
# CONFIG_DW_XDATA_PCIE is not set
|
||||||
# CONFIG_XILINX_SDFEC is not set
|
# CONFIG_XILINX_SDFEC is not set
|
||||||
@@ -1755,6 +1744,12 @@ CONFIG_NTSYNC=m
|
|||||||
##
|
##
|
||||||
# CONFIG_ALTERA_STAPL is not set
|
# CONFIG_ALTERA_STAPL is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/misc/amd-sbi/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_AMD_SBRMI_I2C=m
|
||||||
|
CONFIG_AMD_SBRMI_HWMON=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/misc/bcm-vk/Kconfig
|
## file: drivers/misc/bcm-vk/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1824,8 +1819,7 @@ CONFIG_EEPROM_AT24=m
|
|||||||
##
|
##
|
||||||
## file: drivers/net/Kconfig
|
## file: drivers/net/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
CONFIG_OVPN=m
|
||||||
CONFIG_XEN_NETDEV_BACKEND=m
|
|
||||||
# CONFIG_FUJITSU_ES is not set
|
# CONFIG_FUJITSU_ES is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2043,11 +2037,6 @@ CONFIG_FBNIC=m
|
|||||||
##
|
##
|
||||||
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
# CONFIG_NET_VENDOR_MICROCHIP is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/net/ethernet/microsoft/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_MICROSOFT_MANA=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ethernet/mscc/Kconfig
|
## file: drivers/net/ethernet/mscc/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2213,16 +2202,12 @@ CONFIG_MICROSOFT_MANA=m
|
|||||||
##
|
##
|
||||||
# CONFIG_NET_VENDOR_XILINX is not set
|
# CONFIG_NET_VENDOR_XILINX is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/net/hyperv/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HYPERV_NET=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/mctp/Kconfig
|
## file: drivers/net/mctp/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_MCTP_SERIAL=m
|
CONFIG_MCTP_SERIAL=m
|
||||||
CONFIG_MCTP_TRANSPORT_I2C=m
|
CONFIG_MCTP_TRANSPORT_I2C=m
|
||||||
|
CONFIG_MCTP_TRANSPORT_USB=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/mdio/Kconfig
|
## file: drivers/net/mdio/Kconfig
|
||||||
@@ -2241,6 +2226,7 @@ CONFIG_MCTP_TRANSPORT_I2C=m
|
|||||||
## file: drivers/net/phy/Kconfig
|
## file: drivers/net/phy/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_SFP is not set
|
# CONFIG_SFP is not set
|
||||||
|
# CONFIG_AS21XXX_PHY is not set
|
||||||
# CONFIG_AIR_EN8811H_PHY is not set
|
# CONFIG_AIR_EN8811H_PHY is not set
|
||||||
# CONFIG_AMD_PHY is not set
|
# CONFIG_AMD_PHY is not set
|
||||||
# CONFIG_ADIN_PHY is not set
|
# CONFIG_ADIN_PHY is not set
|
||||||
@@ -2263,6 +2249,7 @@ CONFIG_MCTP_TRANSPORT_I2C=m
|
|||||||
# CONFIG_MARVELL_88Q2XXX_PHY is not set
|
# CONFIG_MARVELL_88Q2XXX_PHY is not set
|
||||||
# CONFIG_MARVELL_88X2222_PHY is not set
|
# CONFIG_MARVELL_88X2222_PHY is not set
|
||||||
# CONFIG_MAXLINEAR_GPHY is not set
|
# CONFIG_MAXLINEAR_GPHY is not set
|
||||||
|
# CONFIG_MAXLINEAR_86110_PHY is not set
|
||||||
# CONFIG_MICREL_PHY is not set
|
# CONFIG_MICREL_PHY is not set
|
||||||
# CONFIG_MICROCHIP_T1S_PHY is not set
|
# CONFIG_MICROCHIP_T1S_PHY is not set
|
||||||
# CONFIG_MICROCHIP_PHY is not set
|
# CONFIG_MICROCHIP_PHY is not set
|
||||||
@@ -2400,15 +2387,12 @@ CONFIG_NVME_TARGET_FC=m
|
|||||||
##
|
##
|
||||||
## file: drivers/pci/Kconfig
|
## file: drivers/pci/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
|
||||||
CONFIG_PCIE_TPH=y
|
CONFIG_PCIE_TPH=y
|
||||||
CONFIG_PCI_HYPERV=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pci/controller/Kconfig
|
## file: drivers/pci/controller/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_VMD is not set
|
# CONFIG_VMD is not set
|
||||||
CONFIG_PCI_HYPERV_INTERFACE=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pci/controller/dwc/Kconfig
|
## file: drivers/pci/controller/dwc/Kconfig
|
||||||
@@ -2433,6 +2417,11 @@ CONFIG_PCIEASPM_DEFAULT=y
|
|||||||
# CONFIG_PCIEASPM_POWERSAVE is not set
|
# CONFIG_PCIEASPM_POWERSAVE is not set
|
||||||
## end choice
|
## end choice
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/pci/pwrctrl/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_PCI_PWRCTRL_SLOT=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pci/switch/Kconfig
|
## file: drivers/pci/switch/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2503,11 +2492,13 @@ CONFIG_WMI_BMOF=m
|
|||||||
# CONFIG_GPD_POCKET_FAN is not set
|
# CONFIG_GPD_POCKET_FAN is not set
|
||||||
# CONFIG_WIRELESS_HOTKEY is not set
|
# CONFIG_WIRELESS_HOTKEY is not set
|
||||||
# CONFIG_IBM_RTL is not set
|
# CONFIG_IBM_RTL is not set
|
||||||
|
# CONFIG_LENOVO_WMI_HOTKEY_UTILITIES is not set
|
||||||
# CONFIG_SENSORS_HDAPS is not set
|
# CONFIG_SENSORS_HDAPS is not set
|
||||||
# CONFIG_THINKPAD_LMI is not set
|
# CONFIG_THINKPAD_LMI is not set
|
||||||
CONFIG_ACPI_QUICKSTART=m
|
CONFIG_ACPI_QUICKSTART=m
|
||||||
# CONFIG_MEEGOPAD_ANX7428 is not set
|
# CONFIG_MEEGOPAD_ANX7428 is not set
|
||||||
CONFIG_MSI_WMI_PLATFORM=m
|
CONFIG_MSI_WMI_PLATFORM=m
|
||||||
|
# CONFIG_PORTWELL_EC is not set
|
||||||
# CONFIG_BARCO_P50_GPIO is not set
|
# CONFIG_BARCO_P50_GPIO is not set
|
||||||
# CONFIG_SAMSUNG_Q10 is not set
|
# CONFIG_SAMSUNG_Q10 is not set
|
||||||
# CONFIG_TOSHIBA_BT_RFKILL is not set
|
# CONFIG_TOSHIBA_BT_RFKILL is not set
|
||||||
@@ -2516,9 +2507,9 @@ CONFIG_MSI_WMI_PLATFORM=m
|
|||||||
# CONFIG_ACPI_CMPC is not set
|
# CONFIG_ACPI_CMPC is not set
|
||||||
# CONFIG_TOPSTAR_LAPTOP is not set
|
# CONFIG_TOPSTAR_LAPTOP is not set
|
||||||
CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
||||||
# CONFIG_MLX_PLATFORM is not set
|
|
||||||
# CONFIG_INSPUR_PLATFORM_PROFILE is not set
|
# CONFIG_INSPUR_PLATFORM_PROFILE is not set
|
||||||
# CONFIG_LENOVO_WMI_CAMERA is not set
|
# CONFIG_LENOVO_WMI_CAMERA is not set
|
||||||
|
# CONFIG_DASHARO_ACPI is not set
|
||||||
# CONFIG_INTEL_IPS is not set
|
# CONFIG_INTEL_IPS is not set
|
||||||
# CONFIG_INTEL_SCU_PCI is not set
|
# CONFIG_INTEL_SCU_PCI is not set
|
||||||
# CONFIG_INTEL_SCU_PLATFORM is not set
|
# CONFIG_INTEL_SCU_PLATFORM is not set
|
||||||
@@ -2529,6 +2520,7 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
|||||||
##
|
##
|
||||||
# CONFIG_AMD_3D_VCACHE is not set
|
# CONFIG_AMD_3D_VCACHE is not set
|
||||||
# CONFIG_AMD_WBRF is not set
|
# CONFIG_AMD_WBRF is not set
|
||||||
|
CONFIG_AMD_ISP_PLATFORM=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/platform/x86/amd/hsmp/Kconfig
|
## file: drivers/platform/x86/amd/hsmp/Kconfig
|
||||||
@@ -2599,6 +2591,11 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
|||||||
##
|
##
|
||||||
# CONFIG_SIEMENS_SIMATIC_IPC is not set
|
# CONFIG_SIEMENS_SIMATIC_IPC is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/platform/x86/tuxedo/nb04/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_TUXEDO_NB04_WMI_AB is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pnp/Kconfig
|
## file: drivers/pnp/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2639,6 +2636,7 @@ CONFIG_CHARGER_GPIO=m
|
|||||||
# CONFIG_CHARGER_LT3651 is not set
|
# CONFIG_CHARGER_LT3651 is not set
|
||||||
# CONFIG_CHARGER_LTC4162L is not set
|
# CONFIG_CHARGER_LTC4162L is not set
|
||||||
# CONFIG_CHARGER_MAX77976 is not set
|
# CONFIG_CHARGER_MAX77976 is not set
|
||||||
|
# CONFIG_CHARGER_MAX8971 is not set
|
||||||
# CONFIG_CHARGER_BQ2415X is not set
|
# CONFIG_CHARGER_BQ2415X is not set
|
||||||
# CONFIG_CHARGER_BQ24190 is not set
|
# CONFIG_CHARGER_BQ24190 is not set
|
||||||
# CONFIG_CHARGER_BQ24257 is not set
|
# CONFIG_CHARGER_BQ24257 is not set
|
||||||
@@ -2651,7 +2649,6 @@ CONFIG_CHARGER_GPIO=m
|
|||||||
CONFIG_BATTERY_GOLDFISH=m
|
CONFIG_BATTERY_GOLDFISH=m
|
||||||
# CONFIG_BATTERY_RT5033 is not set
|
# CONFIG_BATTERY_RT5033 is not set
|
||||||
# CONFIG_CHARGER_RT9455 is not set
|
# CONFIG_CHARGER_RT9455 is not set
|
||||||
# CONFIG_FUEL_GAUGE_STC3117 is not set
|
|
||||||
# CONFIG_CHARGER_BD99954 is not set
|
# CONFIG_CHARGER_BD99954 is not set
|
||||||
# CONFIG_BATTERY_UG3105 is not set
|
# CONFIG_BATTERY_UG3105 is not set
|
||||||
# CONFIG_FUEL_GAUGE_MM8013 is not set
|
# CONFIG_FUEL_GAUGE_MM8013 is not set
|
||||||
@@ -2666,16 +2663,19 @@ CONFIG_BATTERY_GOLDFISH=m
|
|||||||
##
|
##
|
||||||
CONFIG_PPS=m
|
CONFIG_PPS=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/pps/generators/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_PPS_GENERATOR_TIO=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/ptp/Kconfig
|
## file: drivers/ptp/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_DP83640_PHY is not set
|
# CONFIG_DP83640_PHY is not set
|
||||||
# CONFIG_PTP_1588_CLOCK_INES is not set
|
# CONFIG_PTP_1588_CLOCK_INES is not set
|
||||||
CONFIG_PTP_1588_CLOCK_KVM=m
|
|
||||||
# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set
|
# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set
|
||||||
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
|
# CONFIG_PTP_1588_CLOCK_IDTCM is not set
|
||||||
# CONFIG_PTP_1588_CLOCK_FC3W is not set
|
# CONFIG_PTP_1588_CLOCK_FC3W is not set
|
||||||
CONFIG_PTP_1588_CLOCK_VMW=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/pwm/Kconfig
|
## file: drivers/pwm/Kconfig
|
||||||
@@ -2770,8 +2770,6 @@ CONFIG_SCSI_FC_ATTRS=m
|
|||||||
CONFIG_SCSI_SRP_ATTRS=m
|
CONFIG_SCSI_SRP_ATTRS=m
|
||||||
CONFIG_SCSI_BUSLOGIC=m
|
CONFIG_SCSI_BUSLOGIC=m
|
||||||
# CONFIG_SCSI_FLASHPOINT is not set
|
# CONFIG_SCSI_FLASHPOINT is not set
|
||||||
CONFIG_XEN_SCSI_FRONTEND=m
|
|
||||||
CONFIG_HYPERV_STORAGE=m
|
|
||||||
# CONFIG_LIBFC is not set
|
# CONFIG_LIBFC is not set
|
||||||
CONFIG_SCSI_IPR=m
|
CONFIG_SCSI_IPR=m
|
||||||
# CONFIG_SCSI_IPR_TRACE is not set
|
# CONFIG_SCSI_IPR_TRACE is not set
|
||||||
@@ -2900,12 +2898,6 @@ CONFIG_GOLDFISH_TTY=m
|
|||||||
# CONFIG_N_GSM is not set
|
# CONFIG_N_GSM is not set
|
||||||
# CONFIG_NOZOMI is not set
|
# CONFIG_NOZOMI is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/tty/hvc/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HVC_XEN=y
|
|
||||||
CONFIG_HVC_XEN_FRONTEND=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/tty/serial/Kconfig
|
## file: drivers/tty/serial/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2931,6 +2923,7 @@ CONFIG_HVC_XEN_FRONTEND=y
|
|||||||
# CONFIG_SERIAL_8250_RSA is not set
|
# CONFIG_SERIAL_8250_RSA is not set
|
||||||
# CONFIG_SERIAL_8250_RT288X is not set
|
# CONFIG_SERIAL_8250_RT288X is not set
|
||||||
# CONFIG_SERIAL_8250_MID is not set
|
# CONFIG_SERIAL_8250_MID is not set
|
||||||
|
# CONFIG_SERIAL_8250_NI is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/ufs/Kconfig
|
## file: drivers/ufs/Kconfig
|
||||||
@@ -2945,7 +2938,6 @@ CONFIG_HVC_XEN_FRONTEND=y
|
|||||||
# CONFIG_UIO_SERCOS3 is not set
|
# CONFIG_UIO_SERCOS3 is not set
|
||||||
# CONFIG_UIO_NETX is not set
|
# CONFIG_UIO_NETX is not set
|
||||||
# CONFIG_UIO_MF624 is not set
|
# CONFIG_UIO_MF624 is not set
|
||||||
CONFIG_UIO_HV_GENERIC=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/usb/Kconfig
|
## file: drivers/usb/Kconfig
|
||||||
@@ -3015,6 +3007,7 @@ CONFIG_USB_XHCI_HCD=m
|
|||||||
# CONFIG_USB_XHCI_DBGCAP is not set
|
# CONFIG_USB_XHCI_DBGCAP is not set
|
||||||
CONFIG_USB_XHCI_PCI_RENESAS=m
|
CONFIG_USB_XHCI_PCI_RENESAS=m
|
||||||
CONFIG_USB_XHCI_PLATFORM=m
|
CONFIG_USB_XHCI_PLATFORM=m
|
||||||
|
# CONFIG_USB_XHCI_SIDEBAND is not set
|
||||||
CONFIG_USB_EHCI_HCD=m
|
CONFIG_USB_EHCI_HCD=m
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
||||||
@@ -3202,34 +3195,17 @@ CONFIG_FB_UVESA=m
|
|||||||
# CONFIG_FB_SMSCUFX is not set
|
# CONFIG_FB_SMSCUFX is not set
|
||||||
# CONFIG_FB_UDL is not set
|
# CONFIG_FB_UDL is not set
|
||||||
CONFIG_FB_GOLDFISH=m
|
CONFIG_FB_GOLDFISH=m
|
||||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
|
||||||
CONFIG_FB_HYPERV=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/video/fbdev/core/Kconfig
|
## file: drivers/video/fbdev/core/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_FB_DEVICE=y
|
CONFIG_FB_DEVICE=y
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/virt/acrn/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_ACRN_HSM=m
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/virt/coco/tdx-guest/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_TDX_GUEST_DRIVER=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/virt/vboxguest/Kconfig
|
## file: drivers/virt/vboxguest/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_VBOXGUEST=m
|
CONFIG_VBOXGUEST=m
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/virtio/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/w1/Kconfig
|
## file: drivers/w1/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3243,6 +3219,7 @@ CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=m
|
|||||||
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
|
CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC=m
|
||||||
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
||||||
# CONFIG_LENOVO_SE10_WDT is not set
|
# CONFIG_LENOVO_SE10_WDT is not set
|
||||||
|
# CONFIG_LENOVO_SE30_WDT is not set
|
||||||
# CONFIG_XILINX_WATCHDOG is not set
|
# CONFIG_XILINX_WATCHDOG is not set
|
||||||
# CONFIG_ZIIRAVE_WATCHDOG is not set
|
# CONFIG_ZIIRAVE_WATCHDOG is not set
|
||||||
# CONFIG_CADENCE_WATCHDOG is not set
|
# CONFIG_CADENCE_WATCHDOG is not set
|
||||||
@@ -3263,6 +3240,7 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
|||||||
# CONFIG_IBMASR is not set
|
# CONFIG_IBMASR is not set
|
||||||
# CONFIG_WAFER_WDT is not set
|
# CONFIG_WAFER_WDT is not set
|
||||||
# CONFIG_IE6XX_WDT is not set
|
# CONFIG_IE6XX_WDT is not set
|
||||||
|
# CONFIG_INTEL_OC_WATCHDOG is not set
|
||||||
# CONFIG_IT8712F_WDT is not set
|
# CONFIG_IT8712F_WDT is not set
|
||||||
# CONFIG_IT87_WDT is not set
|
# CONFIG_IT87_WDT is not set
|
||||||
# CONFIG_HP_WATCHDOG is not set
|
# CONFIG_HP_WATCHDOG is not set
|
||||||
@@ -3282,49 +3260,14 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
|||||||
# CONFIG_NI903X_WDT is not set
|
# CONFIG_NI903X_WDT is not set
|
||||||
# CONFIG_NIC7018_WDT is not set
|
# CONFIG_NIC7018_WDT is not set
|
||||||
# CONFIG_MEN_A21_WDT is not set
|
# CONFIG_MEN_A21_WDT is not set
|
||||||
CONFIG_XEN_WDT=m
|
|
||||||
# CONFIG_PCIPCWATCHDOG is not set
|
# CONFIG_PCIPCWATCHDOG is not set
|
||||||
# CONFIG_USBPCWATCHDOG is not set
|
# CONFIG_USBPCWATCHDOG is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/xen/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_XEN_BALLOON=y
|
|
||||||
CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
|
|
||||||
CONFIG_XEN_MEMORY_HOTPLUG_LIMIT=512
|
|
||||||
CONFIG_XEN_SCRUB_PAGES_DEFAULT=y
|
|
||||||
CONFIG_XEN_DEV_EVTCHN=m
|
|
||||||
CONFIG_XEN_BACKEND=y
|
|
||||||
CONFIG_XENFS=m
|
|
||||||
CONFIG_XEN_COMPAT_XENFS=y
|
|
||||||
CONFIG_XEN_SYS_HYPERVISOR=y
|
|
||||||
CONFIG_XEN_GNTDEV=m
|
|
||||||
CONFIG_XEN_GNTDEV_DMABUF=y
|
|
||||||
CONFIG_XEN_GRANT_DEV_ALLOC=m
|
|
||||||
CONFIG_XEN_GRANT_DMA_ALLOC=y
|
|
||||||
CONFIG_XEN_PCIDEV_BACKEND=m
|
|
||||||
# CONFIG_XEN_PVCALLS_FRONTEND is not set
|
|
||||||
# CONFIG_XEN_PVCALLS_BACKEND is not set
|
|
||||||
CONFIG_XEN_SCSI_BACKEND=m
|
|
||||||
CONFIG_XEN_PRIVCMD=m
|
|
||||||
CONFIG_XEN_PRIVCMD_EVENTFD=y
|
|
||||||
CONFIG_XEN_UNPOPULATED_ALLOC=y
|
|
||||||
CONFIG_XEN_VIRTIO=y
|
|
||||||
# CONFIG_XEN_VIRTIO_FORCE_GRANT is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/Kconfig
|
## file: fs/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_VALIDATE_FS_PARSER is not set
|
# CONFIG_VALIDATE_FS_PARSER is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/9p/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_9P_FS=y
|
|
||||||
CONFIG_9P_FSCACHE=y
|
|
||||||
CONFIG_9P_FS_POSIX_ACL=y
|
|
||||||
CONFIG_9P_FS_SECURITY=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/adfs/Kconfig
|
## file: fs/adfs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3345,17 +3288,6 @@ CONFIG_9P_FS_SECURITY=y
|
|||||||
##
|
##
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/btrfs/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_BTRFS_FS=m
|
|
||||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
|
||||||
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
|
|
||||||
# CONFIG_BTRFS_DEBUG is not set
|
|
||||||
# CONFIG_BTRFS_ASSERT is not set
|
|
||||||
# CONFIG_BTRFS_EXPERIMENTAL is not set
|
|
||||||
# CONFIG_BTRFS_FS_REF_VERIFY is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/coda/Kconfig
|
## file: fs/coda/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3383,6 +3315,11 @@ CONFIG_ECRYPT_FS_MESSAGING=y
|
|||||||
##
|
##
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: fs/erofs/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_EROFS_FS_ZIP_ACCEL=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/f2fs/Kconfig
|
## file: fs/f2fs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3407,12 +3344,6 @@ CONFIG_F2FS_UNFAIR_RWSEM=y
|
|||||||
##
|
##
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/fuse/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_FUSE_FS=m
|
|
||||||
CONFIG_VIRTIO_FS=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/gfs2/Kconfig
|
## file: fs/gfs2/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3552,9 +3483,9 @@ CONFIG_CIFS_FSCACHE=y
|
|||||||
# CONFIG_CIFS_COMPRESSION is not set
|
# CONFIG_CIFS_COMPRESSION is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/sysv/Kconfig
|
## file: fs/squashfs/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_SYSV_FS is not set
|
CONFIG_SQUASHFS_COMP_CACHE_FULL=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/ufs/Kconfig
|
## file: fs/ufs/Kconfig
|
||||||
@@ -3577,8 +3508,11 @@ CONFIG_VBOXSF_FS=m
|
|||||||
CONFIG_DEFAULT_HOSTNAME="debian-vm"
|
CONFIG_DEFAULT_HOSTNAME="debian-vm"
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
|
CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
|
||||||
# CONFIG_UCLAMP_TASK is not set
|
CONFIG_UCLAMP_TASK=y
|
||||||
# CONFIG_RT_GROUP_SCHED is not set
|
CONFIG_UCLAMP_BUCKETS_COUNT=10
|
||||||
|
CONFIG_RT_GROUP_SCHED=y
|
||||||
|
# CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED is not set
|
||||||
|
CONFIG_UCLAMP_TASK_GROUP=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: kernel/Kconfig.kexec
|
## file: kernel/Kconfig.kexec
|
||||||
@@ -3608,7 +3542,6 @@ CONFIG_PM_ADVANCED_DEBUG=y
|
|||||||
# CONFIG_PM_TEST_SUSPEND is not set
|
# CONFIG_PM_TEST_SUSPEND is not set
|
||||||
# CONFIG_DPM_WATCHDOG is not set
|
# CONFIG_DPM_WATCHDOG is not set
|
||||||
# CONFIG_PM_TRACE_RTC is not set
|
# CONFIG_PM_TRACE_RTC is not set
|
||||||
# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: kernel/rcu/Kconfig
|
## file: kernel/rcu/Kconfig
|
||||||
@@ -3662,7 +3595,6 @@ CONFIG_NETDEV_NOTIFIER_ERROR_INJECT=m
|
|||||||
CONFIG_FUNCTION_ERROR_INJECTION=y
|
CONFIG_FUNCTION_ERROR_INJECTION=y
|
||||||
# CONFIG_RUNTIME_TESTING_MENU is not set
|
# CONFIG_RUNTIME_TESTING_MENU is not set
|
||||||
# CONFIG_MEMTEST is not set
|
# CONFIG_MEMTEST is not set
|
||||||
# CONFIG_HYPERV_TESTING is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: lib/Kconfig.kfence
|
## file: lib/Kconfig.kfence
|
||||||
@@ -3689,12 +3621,9 @@ CONFIG_ZSWAP_SHRINKER_DEFAULT_ON=y
|
|||||||
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y
|
CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD=y
|
||||||
## end choice
|
## end choice
|
||||||
## choice: Default allocator
|
## choice: Default allocator
|
||||||
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
|
CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC=y
|
||||||
# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD_DEPRECATED is not set
|
|
||||||
# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC is not set
|
|
||||||
## end choice
|
## end choice
|
||||||
CONFIG_ZBUD=y
|
CONFIG_ZSMALLOC=y
|
||||||
CONFIG_Z3FOLD_DEPRECATED=m
|
|
||||||
# CONFIG_HWPOISON_INJECT is not set
|
# CONFIG_HWPOISON_INJECT is not set
|
||||||
CONFIG_NUMA_EMU=y
|
CONFIG_NUMA_EMU=y
|
||||||
|
|
||||||
@@ -3725,12 +3654,7 @@ CONFIG_NET_PKTGEN=m
|
|||||||
##
|
##
|
||||||
## file: net/9p/Kconfig
|
## file: net/9p/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_NET_9P=y
|
|
||||||
CONFIG_NET_9P_FD=y
|
|
||||||
CONFIG_NET_9P_VIRTIO=y
|
|
||||||
CONFIG_NET_9P_XEN=y
|
|
||||||
CONFIG_NET_9P_RDMA=m
|
CONFIG_NET_9P_RDMA=m
|
||||||
# CONFIG_NET_9P_DEBUG is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/appletalk/Kconfig
|
## file: net/appletalk/Kconfig
|
||||||
@@ -3768,17 +3692,6 @@ CONFIG_NET_9P_RDMA=m
|
|||||||
##
|
##
|
||||||
# CONFIG_CAN is not set
|
# CONFIG_CAN is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: net/dccp/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_IP_DCCP_DEBUG is not set
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: net/dccp/ccids/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_IP_DCCP_CCID2_DEBUG is not set
|
|
||||||
# CONFIG_IP_DCCP_CCID3_DEBUG is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/ieee802154/Kconfig
|
## file: net/ieee802154/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3886,6 +3799,7 @@ CONFIG_AF_RXRPC_IPV6=y
|
|||||||
# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set
|
# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set
|
||||||
# CONFIG_AF_RXRPC_DEBUG is not set
|
# CONFIG_AF_RXRPC_DEBUG is not set
|
||||||
# CONFIG_RXKAD is not set
|
# CONFIG_RXKAD is not set
|
||||||
|
# CONFIG_RXGK is not set
|
||||||
# CONFIG_RXPERF is not set
|
# CONFIG_RXPERF is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -3984,11 +3898,6 @@ CONFIG_SUNRPC_XPRT_RDMA=m
|
|||||||
##
|
##
|
||||||
CONFIG_TIPC_MEDIA_IB=y
|
CONFIG_TIPC_MEDIA_IB=y
|
||||||
|
|
||||||
##
|
|
||||||
## file: net/vmw_vsock/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_HYPERV_VSOCKETS=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/x25/Kconfig
|
## file: net/x25/Kconfig
|
||||||
##
|
##
|
||||||
@@ -4014,6 +3923,7 @@ CONFIG_IPE_PROP_DM_VERITY_SIGNATURE=y
|
|||||||
## file: security/keys/Kconfig
|
## file: security/keys/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_KEYS_REQUEST_CACHE is not set
|
# CONFIG_KEYS_REQUEST_CACHE is not set
|
||||||
|
# CONFIG_BIG_KEYS is not set
|
||||||
# CONFIG_TRUSTED_KEYS is not set
|
# CONFIG_TRUSTED_KEYS is not set
|
||||||
# CONFIG_USER_DECRYPTED_DATA is not set
|
# CONFIG_USER_DECRYPTED_DATA is not set
|
||||||
|
|
||||||
@@ -4030,12 +3940,19 @@ CONFIG_842_DECOMPRESS=m
|
|||||||
CONFIG_ASYNC_MEMCPY=m
|
CONFIG_ASYNC_MEMCPY=m
|
||||||
CONFIG_ASYNC_PQ=m
|
CONFIG_ASYNC_PQ=m
|
||||||
CONFIG_ASYNC_RAID6_RECOV=m
|
CONFIG_ASYNC_RAID6_RECOV=m
|
||||||
CONFIG_BLK_CGROUP_PUNT_BIO=y
|
|
||||||
CONFIG_BLK_DEV_RNBD=y
|
CONFIG_BLK_DEV_RNBD=y
|
||||||
CONFIG_CHECK_SIGNATURE=y
|
CONFIG_CHECK_SIGNATURE=y
|
||||||
|
CONFIG_CRC_CCITT=m
|
||||||
|
CONFIG_CRYPTO_CHACHA20_X86_64=m
|
||||||
CONFIG_CRYPTO_LIB_AESCFB=m
|
CONFIG_CRYPTO_LIB_AESCFB=m
|
||||||
CONFIG_CRYPTO_LIB_ARC4=m
|
CONFIG_CRYPTO_LIB_ARC4=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||||
|
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
|
||||||
|
CONFIG_CRYPTO_LIB_POLY1305=m
|
||||||
|
CONFIG_CRYPTO_POLY1305_X86_64=m
|
||||||
CONFIG_CXL_PORT=y
|
CONFIG_CXL_PORT=y
|
||||||
|
CONFIG_DEV_SYNC_PROBE=m
|
||||||
CONFIG_DRM_BRIDGE=y
|
CONFIG_DRM_BRIDGE=y
|
||||||
CONFIG_DRM_CLIENT=y
|
CONFIG_DRM_CLIENT=y
|
||||||
CONFIG_DRM_CLIENT_DEFAULT="fbdev"
|
CONFIG_DRM_CLIENT_DEFAULT="fbdev"
|
||||||
@@ -4047,11 +3964,11 @@ CONFIG_DRM_GEM_SHMEM_HELPER=m
|
|||||||
CONFIG_DRM_KMS_HELPER=m
|
CONFIG_DRM_KMS_HELPER=m
|
||||||
CONFIG_DRM_PANEL=y
|
CONFIG_DRM_PANEL=y
|
||||||
CONFIG_DRM_PANEL_BRIDGE=y
|
CONFIG_DRM_PANEL_BRIDGE=y
|
||||||
|
CONFIG_DRM_SYSFB_HELPER=m
|
||||||
CONFIG_DRM_TTM=m
|
CONFIG_DRM_TTM=m
|
||||||
CONFIG_DRM_TTM_HELPER=m
|
CONFIG_DRM_TTM_HELPER=m
|
||||||
CONFIG_DRM_VRAM_HELPER=m
|
CONFIG_DRM_VRAM_HELPER=m
|
||||||
CONFIG_DRM_XEN=y
|
CONFIG_DRM_XEN=y
|
||||||
CONFIG_FB_IOMEM_HELPERS_DEFERRED=y
|
|
||||||
CONFIG_GPIOLIB_IRQCHIP=y
|
CONFIG_GPIOLIB_IRQCHIP=y
|
||||||
CONFIG_GPIO_ACPI=y
|
CONFIG_GPIO_ACPI=y
|
||||||
CONFIG_GPIO_GENERIC=m
|
CONFIG_GPIO_GENERIC=m
|
||||||
@@ -4059,8 +3976,6 @@ CONFIG_HAVE_CLK=y
|
|||||||
CONFIG_HAVE_CLK_PREPARE=y
|
CONFIG_HAVE_CLK_PREPARE=y
|
||||||
CONFIG_HDMI=y
|
CONFIG_HDMI=y
|
||||||
CONFIG_HSI_BOARDINFO=y
|
CONFIG_HSI_BOARDINFO=y
|
||||||
CONFIG_HVC_IRQ=y
|
|
||||||
CONFIG_HYPERV_TIMER=y
|
|
||||||
CONFIG_I2C_BOARDINFO=y
|
CONFIG_I2C_BOARDINFO=y
|
||||||
CONFIG_I2C_HID_CORE=m
|
CONFIG_I2C_HID_CORE=m
|
||||||
CONFIG_I2C_I801_MUX=y
|
CONFIG_I2C_I801_MUX=y
|
||||||
@@ -4080,13 +3995,11 @@ CONFIG_MFD_CORE=m
|
|||||||
CONFIG_MOUSE_PS2_SMBUS=y
|
CONFIG_MOUSE_PS2_SMBUS=y
|
||||||
CONFIG_ND_BTT=m
|
CONFIG_ND_BTT=m
|
||||||
CONFIG_ND_PFN=m
|
CONFIG_ND_PFN=m
|
||||||
CONFIG_NETFS_SUPPORT=y
|
|
||||||
CONFIG_NET_CLS=y
|
CONFIG_NET_CLS=y
|
||||||
CONFIG_NLS_UCS2_UTILS=m
|
CONFIG_NLS_UCS2_UTILS=m
|
||||||
# CONFIG_NVMEM_LAYOUTS is not set
|
# CONFIG_NVMEM_LAYOUTS is not set
|
||||||
CONFIG_PARAVIRT_CLOCK=y
|
CONFIG_PCI_PWRCTRL=m
|
||||||
CONFIG_PARAVIRT_XXL=y
|
CONFIG_PLDMFW=y
|
||||||
CONFIG_PCI_XEN=y
|
|
||||||
CONFIG_PM_CLK=y
|
CONFIG_PM_CLK=y
|
||||||
CONFIG_PM_OPP=y
|
CONFIG_PM_OPP=y
|
||||||
CONFIG_PM_SLEEP_DEBUG=y
|
CONFIG_PM_SLEEP_DEBUG=y
|
||||||
@@ -4094,7 +4007,6 @@ CONFIG_PPPOE_HASH_BITS=4
|
|||||||
CONFIG_PREEMPTION=y
|
CONFIG_PREEMPTION=y
|
||||||
CONFIG_PREEMPT_BUILD=y
|
CONFIG_PREEMPT_BUILD=y
|
||||||
CONFIG_PREEMPT_COUNT=y
|
CONFIG_PREEMPT_COUNT=y
|
||||||
CONFIG_PREEMPT_RCU=y
|
|
||||||
CONFIG_RAID6_PQ=m
|
CONFIG_RAID6_PQ=m
|
||||||
CONFIG_RATIONAL=y
|
CONFIG_RATIONAL=y
|
||||||
CONFIG_REGMAP=y
|
CONFIG_REGMAP=y
|
||||||
@@ -4108,8 +4020,6 @@ CONFIG_SCSI_NETLINK=y
|
|||||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||||
CONFIG_SLHC=m
|
CONFIG_SLHC=m
|
||||||
CONFIG_SMBFS=m
|
CONFIG_SMBFS=m
|
||||||
CONFIG_SWIOTLB_XEN=y
|
|
||||||
CONFIG_SYS_HYPERVISOR=y
|
|
||||||
CONFIG_TASKS_RCU=y
|
CONFIG_TASKS_RCU=y
|
||||||
CONFIG_TCG_TIS_CORE=m
|
CONFIG_TCG_TIS_CORE=m
|
||||||
CONFIG_TRACER_MAX_TRACE=y
|
CONFIG_TRACER_MAX_TRACE=y
|
||||||
@@ -4122,22 +4032,8 @@ CONFIG_USB_PHY=y
|
|||||||
CONFIG_USB_XHCI_PCI=m
|
CONFIG_USB_XHCI_PCI=m
|
||||||
CONFIG_VIDEOMODE_HELPERS=y
|
CONFIG_VIDEOMODE_HELPERS=y
|
||||||
CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
|
CONFIG_VIRTIO_DMA_SHARED_BUFFER=m
|
||||||
CONFIG_X86_HV_CALLBACK_VECTOR=y
|
|
||||||
CONFIG_XEN_ACPI=y
|
|
||||||
CONFIG_XEN_AUTO_XLATE=y
|
|
||||||
CONFIG_XEN_EFI=y
|
|
||||||
CONFIG_XEN_FRONT_PGDIR_SHBUF=m
|
CONFIG_XEN_FRONT_PGDIR_SHBUF=m
|
||||||
CONFIG_XEN_GRANT_DMA_OPS=y
|
|
||||||
CONFIG_XEN_HAVE_PVMMU=y
|
|
||||||
CONFIG_XEN_HAVE_VPMU=y
|
|
||||||
CONFIG_XEN_PCI_STUB=y
|
|
||||||
CONFIG_XEN_PVHVM=y
|
|
||||||
CONFIG_XEN_PVHVM_SMP=y
|
|
||||||
CONFIG_XEN_PV_SMP=y
|
|
||||||
CONFIG_XEN_SAVE_RESTORE=y
|
|
||||||
CONFIG_XEN_XENBUS_FRONTEND=y
|
|
||||||
CONFIG_Z3FOLD=m
|
|
||||||
CONFIG_ZPOOL=y
|
CONFIG_ZPOOL=y
|
||||||
CONFIG_ZSTD_COMPRESS=y
|
CONFIG_ZSTD_COMPRESS=y
|
||||||
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd"
|
CONFIG_ZSWAP_COMPRESSOR_DEFAULT="zstd"
|
||||||
CONFIG_ZSWAP_ZPOOL_DEFAULT="zbud"
|
CONFIG_ZSWAP_ZPOOL_DEFAULT="zsmalloc"
|
||||||
|
385
debian/config/config
vendored
385
debian/config/config
vendored
File diff suppressed because it is too large
Load Diff
2
debian/config/defines.toml
vendored
2
debian/config/defines.toml
vendored
@@ -11,7 +11,7 @@ name = 'x86'
|
|||||||
name = 'none'
|
name = 'none'
|
||||||
|
|
||||||
[build]
|
[build]
|
||||||
compiler = 'gcc-14'
|
compiler = 'gcc-15'
|
||||||
|
|
||||||
[relations.image]
|
[relations.image]
|
||||||
depends = [
|
depends = [
|
||||||
|
7
debian/copyright
vendored
7
debian/copyright
vendored
@@ -82,7 +82,7 @@ Files: fs/nls/mac-*
|
|||||||
Copyright: 1991-2012 Unicode, Inc.
|
Copyright: 1991-2012 Unicode, Inc.
|
||||||
License: Unicode-data
|
License: Unicode-data
|
||||||
All rights reserved. Distributed under the Terms of Use in
|
All rights reserved. Distributed under the Terms of Use in
|
||||||
http://www.unicode.org/copyright.html.
|
https://www.unicode.org/copyright.html.
|
||||||
.
|
.
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
copy of the Unicode data files and any associated documentation (the "Data
|
copy of the Unicode data files and any associated documentation (the "Data
|
||||||
@@ -191,8 +191,7 @@ License: GPL-2
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
.
|
.
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this package; if not, write to the Free Software
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
.
|
.
|
||||||
On Debian systems, the complete text of the GNU General Public License version
|
On Debian systems, the complete text of the GNU General Public License version
|
||||||
2 can be found in `/usr/share/common-licenses/GPL-2'.
|
2 can be found in `/usr/share/common-licenses/GPL-2'.
|
||||||
@@ -209,7 +208,7 @@ License: LGPL-2.1
|
|||||||
Lesser General Public License for more details.
|
Lesser General Public License for more details.
|
||||||
.
|
.
|
||||||
You should have received a copy of the GNU Lesser General Public License
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
along with this program; If not, see <http://www.gnu.org/licenses/>.
|
along with this program; If not, see <https://www.gnu.org/licenses/>.
|
||||||
.
|
.
|
||||||
On Debian systems, the complete text of the GNU Lesser General Public
|
On Debian systems, the complete text of the GNU Lesser General Public
|
||||||
License version 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'.
|
License version 2.1 can be found in `/usr/share/common-licenses/LGPL-2.1'.
|
||||||
|
2
debian/hyperv-daemons.postinst
vendored
2
debian/hyperv-daemons.postinst
vendored
@@ -9,7 +9,7 @@ configure )
|
|||||||
if [ ${have_systemd} = 1 ] ; then
|
if [ ${have_systemd} = 1 ] ; then
|
||||||
if [ -z "$2" ] ; then
|
if [ -z "$2" ] ; then
|
||||||
# On initial install make sure udev notifies systemd
|
# On initial install make sure udev notifies systemd
|
||||||
udevadm trigger || true
|
udevadm trigger || :
|
||||||
else
|
else
|
||||||
# On upgrade make sure running daemons are restarted
|
# On upgrade make sure running daemons are restarted
|
||||||
systemctl try-restart hv-kvp-daemon.service hv-vss-daemon.service
|
systemctl try-restart hv-kvp-daemon.service hv-vss-daemon.service
|
||||||
|
8
debian/hyperv-daemons.preinst
vendored
8
debian/hyperv-daemons.preinst
vendored
@@ -14,11 +14,11 @@ upgrade )
|
|||||||
init_service="hyperv-daemons.hv-$i-daemon"
|
init_service="hyperv-daemons.hv-$i-daemon"
|
||||||
systemd_unit="${init_service}.service"
|
systemd_unit="${init_service}.service"
|
||||||
if [ ${have_systemd} = 1 ] ; then
|
if [ ${have_systemd} = 1 ] ; then
|
||||||
systemctl stop "${systemd_unit}" 2>/dev/null || true
|
systemctl stop "${systemd_unit}" 2>/dev/null || :
|
||||||
fi
|
fi
|
||||||
deb-systemd-helper purge "${systemd_unit}" || true
|
deb-systemd-helper purge "${systemd_unit}" || :
|
||||||
invoke-rc.d --skip-systemd-native "${init_service}" stop || true
|
invoke-rc.d --skip-systemd-native "${init_service}" stop || :
|
||||||
update-rc.d "${init_service}" remove || true
|
update-rc.d "${init_service}" remove || :
|
||||||
done ; unset services i init_service systemd_unit
|
done ; unset services i init_service systemd_unit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
35
debian/lib/python/debian_linux/debian.py
vendored
35
debian/lib/python/debian_linux/debian.py
vendored
@@ -175,34 +175,6 @@ class VersionLinux(Version):
|
|||||||
.+?
|
.+?
|
||||||
)
|
)
|
||||||
)?
|
)?
|
||||||
(?:
|
|
||||||
\.dfsg\.
|
|
||||||
(?P<dfsg>
|
|
||||||
\d+
|
|
||||||
)
|
|
||||||
)?
|
|
||||||
$
|
|
||||||
""", re.X)
|
|
||||||
_revision_re = re.compile(r"""
|
|
||||||
\d+
|
|
||||||
(\.\d+)?
|
|
||||||
(?:
|
|
||||||
(?P<revision_experimental>
|
|
||||||
~exp\d+
|
|
||||||
)
|
|
||||||
|
|
|
||||||
(?P<revision_security>
|
|
||||||
(?:[~+]deb\d+u\d+)+
|
|
||||||
)?
|
|
||||||
(?P<revision_backports>
|
|
||||||
~bpo\d+\+\d+
|
|
||||||
)?
|
|
||||||
|
|
|
||||||
(?P<revision_other>
|
|
||||||
.+?
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(?:\+b\d+)?
|
|
||||||
$
|
$
|
||||||
""", re.X)
|
""", re.X)
|
||||||
|
|
||||||
@@ -214,7 +186,6 @@ $
|
|||||||
if up_match is None or rev_match is None:
|
if up_match is None or rev_match is None:
|
||||||
raise RuntimeError(u"Invalid debian linux version")
|
raise RuntimeError(u"Invalid debian linux version")
|
||||||
d = up_match.groupdict()
|
d = up_match.groupdict()
|
||||||
self.linux_modifier = d['modifier']
|
|
||||||
self.linux_version = d['version']
|
self.linux_version = d['version']
|
||||||
if d['modifier'] is not None:
|
if d['modifier'] is not None:
|
||||||
assert not d['update']
|
assert not d['update']
|
||||||
@@ -222,12 +193,6 @@ $
|
|||||||
else:
|
else:
|
||||||
self.linux_upstream = d['version']
|
self.linux_upstream = d['version']
|
||||||
self.linux_upstream_full = self.linux_upstream + d['update']
|
self.linux_upstream_full = self.linux_upstream + d['update']
|
||||||
self.linux_dfsg = d['dfsg']
|
|
||||||
d = rev_match.groupdict()
|
|
||||||
self.linux_revision_experimental = d['revision_experimental'] and True
|
|
||||||
self.linux_revision_security = d['revision_security'] and True
|
|
||||||
self.linux_revision_backports = d['revision_backports'] and True
|
|
||||||
self.linux_revision_other = d['revision_other'] and True
|
|
||||||
|
|
||||||
|
|
||||||
class PackageArchitecture(set[str]):
|
class PackageArchitecture(set[str]):
|
||||||
|
2
debian/libcpupower1.symbols
vendored
2
debian/libcpupower1.symbols
vendored
@@ -6,6 +6,7 @@ libcpupower.so.1 libcpupower1 #MINVER#
|
|||||||
cpufreq_get_available_governors@Base 4.7~rc2-1~exp1
|
cpufreq_get_available_governors@Base 4.7~rc2-1~exp1
|
||||||
cpufreq_get_boost_frequencies@Base 5.5.8-1~exp1
|
cpufreq_get_boost_frequencies@Base 5.5.8-1~exp1
|
||||||
cpufreq_get_driver@Base 4.7~rc2-1~exp1
|
cpufreq_get_driver@Base 4.7~rc2-1~exp1
|
||||||
|
cpufreq_get_energy_performance_preference@Base 6.14~
|
||||||
cpufreq_get_freq_hardware@Base 4.7~rc2-1~exp1
|
cpufreq_get_freq_hardware@Base 4.7~rc2-1~exp1
|
||||||
cpufreq_get_freq_kernel@Base 4.7~rc2-1~exp1
|
cpufreq_get_freq_kernel@Base 4.7~rc2-1~exp1
|
||||||
cpufreq_get_hardware_limits@Base 4.7~rc2-1~exp1
|
cpufreq_get_hardware_limits@Base 4.7~rc2-1~exp1
|
||||||
@@ -23,6 +24,7 @@ libcpupower.so.1 libcpupower1 #MINVER#
|
|||||||
cpufreq_put_available_governors@Base 4.7~rc2-1~exp1
|
cpufreq_put_available_governors@Base 4.7~rc2-1~exp1
|
||||||
cpufreq_put_boost_frequencies@Base 5.5.8-1~exp1
|
cpufreq_put_boost_frequencies@Base 5.5.8-1~exp1
|
||||||
cpufreq_put_driver@Base 4.7~rc2-1~exp1
|
cpufreq_put_driver@Base 4.7~rc2-1~exp1
|
||||||
|
cpufreq_put_energy_performance_preference@Base 6.14~
|
||||||
cpufreq_put_policy@Base 4.7~rc2-1~exp1
|
cpufreq_put_policy@Base 4.7~rc2-1~exp1
|
||||||
cpufreq_put_related_cpus@Base 4.7~rc2-1~exp1
|
cpufreq_put_related_cpus@Base 4.7~rc2-1~exp1
|
||||||
cpufreq_put_stats@Base 4.7~rc2-1~exp1
|
cpufreq_put_stats@Base 4.7~rc2-1~exp1
|
||||||
|
2
debian/linux-misc-tools.manpages
vendored
Normal file
2
debian/linux-misc-tools.manpages
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
tools/thermal/thermometer/thermometer.8
|
||||||
|
tools/thermal/tmon/tmon.8
|
10
debian/linux-perf.lintian-overrides.arm64
vendored
Normal file
10
debian/linux-perf.lintian-overrides.arm64
vendored
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# This is a test program that does not link any libraries, either
|
||||||
|
# statically or dynamically
|
||||||
|
linux-perf: statically-linked-binary [usr/lib/perf-core/tests/shell/coresight/asm_pure_loop/asm_pure_loop]
|
||||||
|
|
||||||
|
# Some of these plugins only need symbols from libtraceevent, which
|
||||||
|
# loads them and should not have a NEEDED entry
|
||||||
|
linux-perf: shared-library-lacks-prerequisites *usr/lib/traceevent/plugins/plugin_*.so*
|
||||||
|
|
||||||
|
# This transition was too complex for dh_installdeb to handle
|
||||||
|
linux-perf: maintainer-script-should-not-use-dpkg-maintscript-helper "dpkg-maintscript-helper" *
|
@@ -1,29 +0,0 @@
|
|||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Date: Wed, 2 Apr 2025 09:42:07 +0200
|
|
||||||
Subject: ALSA: hda/realtek: Fix built-in mic on another ASUS VivoBook model
|
|
||||||
Origin: https://git.kernel.org/linus/8983dc1b66c0e1928a263b8af0bb06f6cb9229c4
|
|
||||||
Bug-Debian: https://bugs.debian.org/1100928
|
|
||||||
|
|
||||||
There is another VivoBook model which built-in mic got broken recently
|
|
||||||
by the fix of the pin sort. Apply the correct quirk
|
|
||||||
ALC256_FIXUP_ASUS_MIC_NO_PRESENCE to this model for addressing the
|
|
||||||
regression, too.
|
|
||||||
|
|
||||||
Fixes: 3b4309546b48 ("ALSA: hda: Fix headset detection failure due to unstable sort")
|
|
||||||
Closes: https://lore.kernel.org/Z95s5T6OXFPjRnKf@eldamar.lan
|
|
||||||
Link: https://patch.msgid.link/20250402074208.7347-1-tiwai@suse.de
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
sound/pci/hda/patch_realtek.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
--- a/sound/pci/hda/patch_realtek.c
|
|
||||||
+++ b/sound/pci/hda/patch_realtek.c
|
|
||||||
@@ -10772,6 +10772,7 @@ static const struct hda_quirk alc269_fix
|
|
||||||
SND_PCI_QUIRK(0x1043, 0x1c43, "ASUS UX8406MA", ALC245_FIXUP_CS35L41_SPI_2),
|
|
||||||
SND_PCI_QUIRK(0x1043, 0x1c62, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
|
|
||||||
SND_PCI_QUIRK(0x1043, 0x1c63, "ASUS GU605M", ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1),
|
|
||||||
+ SND_PCI_QUIRK(0x1043, 0x1c80, "ASUS VivoBook TP401", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
|
|
||||||
SND_PCI_QUIRK(0x1043, 0x1c92, "ASUS ROG Strix G15", ALC285_FIXUP_ASUS_G533Z_PINS),
|
|
||||||
SND_PCI_QUIRK(0x1043, 0x1c9f, "ASUS G614JU/JV/JI", ALC285_FIXUP_ASUS_HEADSET_MIC),
|
|
||||||
SND_PCI_QUIRK(0x1043, 0x1caf, "ASUS G634JY/JZ/JI/JG", ALC285_FIXUP_ASUS_SPI_REAR_SPEAKERS),
|
|
45
debian/patches/bugfix/all/bootconfig-fix-negative-seeks-on-32-bit-with-lfs-ena.patch
vendored
Normal file
45
debian/patches/bugfix/all/bootconfig-fix-negative-seeks-on-32-bit-with-lfs-ena.patch
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
From: Ben Hutchings <benh@debian.org>
|
||||||
|
Date: Sun, 17 Aug 2025 16:06:28 +0200
|
||||||
|
Subject: bootconfig: Fix negative seeks on 32-bit with LFS enabled
|
||||||
|
Forwarded: https://lore.kernel.org/linux-trace-kernel/aKHlevxeg6Y7UQrz@decadent.org.uk/T/
|
||||||
|
|
||||||
|
Commit 26dda5769509 "tools/bootconfig: Cleanup bootconfig footer size
|
||||||
|
calculations" replaced some expressions of type int with the
|
||||||
|
BOOTCONFIG_FOOTER_SIZE macro, which expands to an expression of type
|
||||||
|
size_t, which is unsigned.
|
||||||
|
|
||||||
|
On 32-bit architectures with LFS enabled (i.e. off_t is 64-bit), the
|
||||||
|
seek offset of -BOOTCONFIG_FOOTER_SIZE now turns into a positive
|
||||||
|
value.
|
||||||
|
|
||||||
|
Fix this by casting the size to off_t before negating it.
|
||||||
|
|
||||||
|
Just in case someone changes BOOTCONFIG_MAGIC_LEN to have type size_t
|
||||||
|
later, do the same thing to the seek offset of -BOOTCONFIG_MAGIC_LEN.
|
||||||
|
|
||||||
|
Fixes: 26dda5769509 ("tools/bootconfig: Cleanup bootconfig footer size calculations")
|
||||||
|
Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||||
|
---
|
||||||
|
tools/bootconfig/main.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/tools/bootconfig/main.c
|
||||||
|
+++ b/tools/bootconfig/main.c
|
||||||
|
@@ -193,7 +193,7 @@ static int load_xbc_from_initrd(int fd,
|
||||||
|
if (stat.st_size < BOOTCONFIG_FOOTER_SIZE)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- if (lseek(fd, -BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
|
||||||
|
+ if (lseek(fd, -(off_t)BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
|
||||||
|
return pr_errno("Failed to lseek for magic", -errno);
|
||||||
|
|
||||||
|
if (read(fd, magic, BOOTCONFIG_MAGIC_LEN) < 0)
|
||||||
|
@@ -203,7 +203,7 @@ static int load_xbc_from_initrd(int fd,
|
||||||
|
if (memcmp(magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- if (lseek(fd, -BOOTCONFIG_FOOTER_SIZE, SEEK_END) < 0)
|
||||||
|
+ if (lseek(fd, -(off_t)BOOTCONFIG_FOOTER_SIZE, SEEK_END) < 0)
|
||||||
|
return pr_errno("Failed to lseek for size", -errno);
|
||||||
|
|
||||||
|
if (read(fd, &size, sizeof(uint32_t)) < 0)
|
71
debian/patches/bugfix/all/bootconfig-fix-unaligned-access-when-building-footer.patch
vendored
Normal file
71
debian/patches/bugfix/all/bootconfig-fix-unaligned-access-when-building-footer.patch
vendored
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
From: Ben Hutchings <benh@debian.org>
|
||||||
|
Date: Wed, 23 Jul 2025 12:17:14 +0200
|
||||||
|
Subject: bootconfig: Fix unaligned access when building footer
|
||||||
|
Forwarded: https://lore.kernel.org/linux-trace-kernel/aIC-NTw-cdm9ZGFw@decadent.org.uk/T/
|
||||||
|
|
||||||
|
Currently we add padding between the bootconfig text and footer to
|
||||||
|
ensure that the footer is aligned within the initramfs image.
|
||||||
|
However, because only the bootconfig data is held in memory, not the
|
||||||
|
full initramfs image, the footer may not be naturally aligned in
|
||||||
|
memory.
|
||||||
|
|
||||||
|
This can result in an alignment fault (SIGBUS) when writing the footer
|
||||||
|
on some architectures, such as sparc.
|
||||||
|
|
||||||
|
Build the footer in a struct on the stack before adding it to the
|
||||||
|
buffer.
|
||||||
|
|
||||||
|
References: https://buildd.debian.org/status/fetch.php?pkg=linux&arch=sparc64&ver=6.16%7Erc7-1%7Eexp1&stamp=1753209801&raw=0
|
||||||
|
Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||||
|
---
|
||||||
|
tools/bootconfig/main.c | 24 +++++++++++++-----------
|
||||||
|
1 file changed, 13 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
--- a/tools/bootconfig/main.c
|
||||||
|
+++ b/tools/bootconfig/main.c
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <endian.h>
|
||||||
|
+#include <assert.h>
|
||||||
|
|
||||||
|
#include <linux/bootconfig.h>
|
||||||
|
|
||||||
|
@@ -363,7 +364,12 @@ static int delete_xbc(const char *path)
|
||||||
|
|
||||||
|
static int apply_xbc(const char *path, const char *xbc_path)
|
||||||
|
{
|
||||||
|
- char *buf, *data, *p;
|
||||||
|
+ struct {
|
||||||
|
+ uint32_t size;
|
||||||
|
+ uint32_t csum;
|
||||||
|
+ char magic[BOOTCONFIG_MAGIC_LEN];
|
||||||
|
+ } footer;
|
||||||
|
+ char *buf, *data;
|
||||||
|
size_t total_size;
|
||||||
|
struct stat stat;
|
||||||
|
const char *msg;
|
||||||
|
@@ -433,17 +439,13 @@ static int apply_xbc(const char *path, c
|
||||||
|
size += pad;
|
||||||
|
|
||||||
|
/* Add a footer */
|
||||||
|
- p = data + size;
|
||||||
|
- *(uint32_t *)p = htole32(size);
|
||||||
|
- p += sizeof(uint32_t);
|
||||||
|
+ footer.size = htole32(size);
|
||||||
|
+ footer.csum = htole32(csum);
|
||||||
|
+ memcpy(footer.magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
|
||||||
|
+ static_assert(sizeof(footer) == BOOTCONFIG_FOOTER_SIZE);
|
||||||
|
+ memcpy(data + size, &footer, BOOTCONFIG_FOOTER_SIZE);
|
||||||
|
|
||||||
|
- *(uint32_t *)p = htole32(csum);
|
||||||
|
- p += sizeof(uint32_t);
|
||||||
|
-
|
||||||
|
- memcpy(p, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
|
||||||
|
- p += BOOTCONFIG_MAGIC_LEN;
|
||||||
|
-
|
||||||
|
- total_size = p - data;
|
||||||
|
+ total_size = size + BOOTCONFIG_FOOTER_SIZE;
|
||||||
|
|
||||||
|
ret = write(fd, data, total_size);
|
||||||
|
if (ret < total_size) {
|
@@ -42,7 +42,7 @@ correctness.
|
|||||||
|
|
||||||
static int m88e1540_get_fld(struct phy_device *phydev, u8 *msecs)
|
static int m88e1540_get_fld(struct phy_device *phydev, u8 *msecs)
|
||||||
{
|
{
|
||||||
@@ -3848,6 +3852,7 @@ static struct phy_driver marvell_drivers
|
@@ -3828,6 +3832,7 @@ static struct phy_driver marvell_drivers
|
||||||
.led_hw_control_set = m88e1318_led_hw_control_set,
|
.led_hw_control_set = m88e1318_led_hw_control_set,
|
||||||
.led_hw_control_get = m88e1318_led_hw_control_get,
|
.led_hw_control_get = m88e1318_led_hw_control_get,
|
||||||
},
|
},
|
||||||
@@ -50,7 +50,7 @@ correctness.
|
|||||||
{
|
{
|
||||||
.phy_id = MARVELL_PHY_ID_88E1145,
|
.phy_id = MARVELL_PHY_ID_88E1145,
|
||||||
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
||||||
@@ -3871,6 +3876,8 @@ static struct phy_driver marvell_drivers
|
@@ -3851,6 +3856,8 @@ static struct phy_driver marvell_drivers
|
||||||
.cable_test_start = m88e1111_vct_cable_test_start,
|
.cable_test_start = m88e1111_vct_cable_test_start,
|
||||||
.cable_test_get_status = m88e1111_vct_cable_test_get_status,
|
.cable_test_get_status = m88e1111_vct_cable_test_get_status,
|
||||||
},
|
},
|
||||||
@@ -59,7 +59,7 @@ correctness.
|
|||||||
{
|
{
|
||||||
.phy_id = MARVELL_PHY_ID_88E1149R,
|
.phy_id = MARVELL_PHY_ID_88E1149R,
|
||||||
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
||||||
@@ -3889,6 +3896,8 @@ static struct phy_driver marvell_drivers
|
@@ -3869,6 +3876,8 @@ static struct phy_driver marvell_drivers
|
||||||
.get_strings = marvell_get_strings,
|
.get_strings = marvell_get_strings,
|
||||||
.get_stats = marvell_get_stats,
|
.get_stats = marvell_get_stats,
|
||||||
},
|
},
|
||||||
@@ -68,7 +68,7 @@ correctness.
|
|||||||
{
|
{
|
||||||
.phy_id = MARVELL_PHY_ID_88E1240,
|
.phy_id = MARVELL_PHY_ID_88E1240,
|
||||||
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
||||||
@@ -3909,6 +3918,7 @@ static struct phy_driver marvell_drivers
|
@@ -3889,6 +3898,7 @@ static struct phy_driver marvell_drivers
|
||||||
.get_tunable = m88e1011_get_tunable,
|
.get_tunable = m88e1011_get_tunable,
|
||||||
.set_tunable = m88e1011_set_tunable,
|
.set_tunable = m88e1011_set_tunable,
|
||||||
},
|
},
|
||||||
@@ -76,7 +76,7 @@ correctness.
|
|||||||
{
|
{
|
||||||
.phy_id = MARVELL_PHY_ID_88E1116R,
|
.phy_id = MARVELL_PHY_ID_88E1116R,
|
||||||
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
.phy_id_mask = MARVELL_PHY_ID_MASK,
|
||||||
@@ -4197,9 +4207,9 @@ static const struct mdio_device_id __may
|
@@ -4177,9 +4187,9 @@ static const struct mdio_device_id __may
|
||||||
{ MARVELL_PHY_ID_88E1111_FINISAR, MARVELL_PHY_ID_MASK },
|
{ MARVELL_PHY_ID_88E1111_FINISAR, MARVELL_PHY_ID_MASK },
|
||||||
{ MARVELL_PHY_ID_88E1118, MARVELL_PHY_ID_MASK },
|
{ MARVELL_PHY_ID_88E1118, MARVELL_PHY_ID_MASK },
|
||||||
{ MARVELL_PHY_ID_88E1121R, MARVELL_PHY_ID_MASK },
|
{ MARVELL_PHY_ID_88E1121R, MARVELL_PHY_ID_MASK },
|
||||||
|
@@ -1,32 +0,0 @@
|
|||||||
From: Ben Hutchings <benh@debian.org>
|
|
||||||
Date: Mon, 16 Sep 2024 00:07:04 +0200
|
|
||||||
Subject: Documentation: Use relative source filenames in ABI documentation
|
|
||||||
|
|
||||||
Currently the ABI documentation files contain absolute source
|
|
||||||
filenames, which makes them unreproducible if the build directory can
|
|
||||||
vary.
|
|
||||||
|
|
||||||
Remove the source base directory ($srctree) from the source filenames
|
|
||||||
shown in the documentation.
|
|
||||||
|
|
||||||
Signed-off-by: Ben Hutchings <benh@debian.org>
|
|
||||||
---
|
|
||||||
--- a/Documentation/sphinx/kernel_abi.py
|
|
||||||
+++ b/Documentation/sphinx/kernel_abi.py
|
|
||||||
@@ -103,6 +103,7 @@ class KernelCmd(Directive):
|
|
||||||
lines = code_block + "\n\n"
|
|
||||||
|
|
||||||
line_regex = re.compile(r"^\.\. LINENO (\S+)\#([0-9]+)$")
|
|
||||||
+ srctree = os.path.abspath(os.environ["srctree"])
|
|
||||||
ln = 0
|
|
||||||
n = 0
|
|
||||||
f = fname
|
|
||||||
@@ -127,7 +128,7 @@ class KernelCmd(Directive):
|
|
||||||
# sphinx counts lines from 0
|
|
||||||
ln = int(match.group(2)) - 1
|
|
||||||
else:
|
|
||||||
- content.append(line, f, ln)
|
|
||||||
+ content.append(line, os.path.relpath(f, srctree), ln)
|
|
||||||
|
|
||||||
kernellog.info(self.state.document.settings.env.app, "%s: parsed %i lines" % (fname, n))
|
|
||||||
|
|
@@ -18,7 +18,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/fs/btrfs/super.c
|
--- a/fs/btrfs/super.c
|
||||||
+++ b/fs/btrfs/super.c
|
+++ b/fs/btrfs/super.c
|
||||||
@@ -2627,7 +2627,7 @@ module_exit(exit_btrfs_fs)
|
@@ -2625,7 +2625,7 @@ module_exit(exit_btrfs_fs)
|
||||||
|
|
||||||
MODULE_DESCRIPTION("B-Tree File System (BTRFS)");
|
MODULE_DESCRIPTION("B-Tree File System (BTRFS)");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
@@ -29,7 +29,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
MODULE_SOFTDEP("pre: blake2b-256");
|
MODULE_SOFTDEP("pre: blake2b-256");
|
||||||
--- a/fs/jbd2/journal.c
|
--- a/fs/jbd2/journal.c
|
||||||
+++ b/fs/jbd2/journal.c
|
+++ b/fs/jbd2/journal.c
|
||||||
@@ -3152,6 +3152,7 @@ static void __exit journal_exit(void)
|
@@ -3157,6 +3157,7 @@ static void __exit journal_exit(void)
|
||||||
|
|
||||||
MODULE_DESCRIPTION("Generic filesystem journal-writing module");
|
MODULE_DESCRIPTION("Generic filesystem journal-writing module");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
@@ -39,7 +39,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/fs/nfsd/nfsctl.c
|
--- a/fs/nfsd/nfsctl.c
|
||||||
+++ b/fs/nfsd/nfsctl.c
|
+++ b/fs/nfsd/nfsctl.c
|
||||||
@@ -2344,5 +2344,8 @@ static void __exit exit_nfsd(void)
|
@@ -2353,5 +2353,8 @@ static void __exit exit_nfsd(void)
|
||||||
MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
|
MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
|
||||||
MODULE_DESCRIPTION("In-kernel NFS server");
|
MODULE_DESCRIPTION("In-kernel NFS server");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
@@ -24,7 +24,7 @@ Signed-off-by: Ben Hutchings <benh@debian.org>
|
|||||||
pahole-flags-$(call test-ge, $(pahole-ver), 125) += --skip_encoding_btf_inconsistent_proto --btf_gen_optimized
|
pahole-flags-$(call test-ge, $(pahole-ver), 125) += --skip_encoding_btf_inconsistent_proto --btf_gen_optimized
|
||||||
|
|
||||||
else
|
else
|
||||||
@@ -29,6 +27,18 @@ endif
|
@@ -31,6 +29,18 @@ endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@ sources.
|
|||||||
|
|
||||||
--- a/scripts/Makefile.build
|
--- a/scripts/Makefile.build
|
||||||
+++ b/scripts/Makefile.build
|
+++ b/scripts/Makefile.build
|
||||||
@@ -188,6 +188,11 @@ cmd_record_mcount = $(if $(findstring $(
|
@@ -268,6 +268,11 @@ cmd_record_mcount = $(if $(findstring $(
|
||||||
$(sub_cmd_record_mcount))
|
$(sub_cmd_record_mcount))
|
||||||
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
|
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
|
||||||
|
|
||||||
|
41
debian/patches/bugfix/all/libbpf-use-the-standard-fixdep-build-rule.patch
vendored
Normal file
41
debian/patches/bugfix/all/libbpf-use-the-standard-fixdep-build-rule.patch
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
From: Ben Hutchings <benh@debian.org>
|
||||||
|
Date: Sun, 20 Apr 2025 18:50:44 +0200
|
||||||
|
Subject: libbpf: Use the standard fixdep build rule
|
||||||
|
|
||||||
|
libbpf's all target depends on the fixdep target defined in
|
||||||
|
tools/scripts/Makefile.include. However the $(BPF_IN_SHARED) and
|
||||||
|
$(BPF_IN_STATIC) targets don't use it, but instead rebuild fixdep in
|
||||||
|
the staticobjs or sharedobjs subdirectory using a different command.
|
||||||
|
|
||||||
|
Change the $(BPF_IN_SHARED) and $(BPF_IN_STATIC) targets to depend on
|
||||||
|
fixdep and to symlink the executable into the respective output
|
||||||
|
subdirectory.
|
||||||
|
|
||||||
|
Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||||
|
---
|
||||||
|
--- a/tools/lib/bpf/Makefile
|
||||||
|
+++ b/tools/lib/bpf/Makefile
|
||||||
|
@@ -134,7 +134,7 @@ all_cmd: $(CMD_TARGETS) check
|
||||||
|
$(SHARED_OBJDIR) $(STATIC_OBJDIR):
|
||||||
|
$(Q)mkdir -p $@
|
||||||
|
|
||||||
|
-$(BPF_IN_SHARED): force $(BPF_GENERATED) | $(SHARED_OBJDIR)
|
||||||
|
+$(BPF_IN_SHARED): fixdep force $(BPF_GENERATED) | $(SHARED_OBJDIR)
|
||||||
|
@(test -f ../../include/uapi/linux/bpf.h -a -f ../../../include/uapi/linux/bpf.h && ( \
|
||||||
|
(diff -B ../../include/uapi/linux/bpf.h ../../../include/uapi/linux/bpf.h >/dev/null) || \
|
||||||
|
echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/bpf.h' differs from latest version at 'include/uapi/linux/bpf.h'" >&2 )) || true
|
||||||
|
@@ -144,11 +144,11 @@ $(BPF_IN_SHARED): force $(BPF_GENERATED)
|
||||||
|
@(test -f ../../include/uapi/linux/if_xdp.h -a -f ../../../include/uapi/linux/if_xdp.h && ( \
|
||||||
|
(diff -B ../../include/uapi/linux/if_xdp.h ../../../include/uapi/linux/if_xdp.h >/dev/null) || \
|
||||||
|
echo "Warning: Kernel ABI header at 'tools/include/uapi/linux/if_xdp.h' differs from latest version at 'include/uapi/linux/if_xdp.h'" >&2 )) || true
|
||||||
|
- $(SILENT_MAKE) -C $(srctree)/tools/build CFLAGS= LDFLAGS= OUTPUT=$(SHARED_OBJDIR) $(SHARED_OBJDIR)fixdep
|
||||||
|
+ ln -sf ../fixdep $(SHARED_OBJDIR)/
|
||||||
|
$(Q)$(MAKE) $(build)=libbpf OUTPUT=$(SHARED_OBJDIR) CFLAGS="$(CFLAGS) $(SHLIB_FLAGS)"
|
||||||
|
|
||||||
|
-$(BPF_IN_STATIC): force $(BPF_GENERATED) | $(STATIC_OBJDIR)
|
||||||
|
- $(SILENT_MAKE) -C $(srctree)/tools/build CFLAGS= LDFLAGS= OUTPUT=$(STATIC_OBJDIR) $(STATIC_OBJDIR)fixdep
|
||||||
|
+$(BPF_IN_STATIC): fixdep force $(BPF_GENERATED) | $(STATIC_OBJDIR)
|
||||||
|
+ ln -sf ../fixdep $(STATIC_OBJDIR)/
|
||||||
|
$(Q)$(MAKE) $(build)=libbpf OUTPUT=$(STATIC_OBJDIR)
|
||||||
|
|
||||||
|
$(BPF_HELPER_DEFS): $(srctree)/tools/include/uapi/linux/bpf.h
|
@@ -16,7 +16,7 @@ Signed-off-by: Ben Hutchings <benh@debian.org>
|
|||||||
---
|
---
|
||||||
--- a/tools/perf/Makefile.perf
|
--- a/tools/perf/Makefile.perf
|
||||||
+++ b/tools/perf/Makefile.perf
|
+++ b/tools/perf/Makefile.perf
|
||||||
@@ -945,7 +945,7 @@ $(LIBAPI)-clean:
|
@@ -963,7 +963,7 @@ $(LIBAPI)-clean:
|
||||||
$(LIBBPF): FORCE | $(LIBBPF_OUTPUT)
|
$(LIBBPF): FORCE | $(LIBBPF_OUTPUT)
|
||||||
$(Q)$(MAKE) -C $(LIBBPF_DIR) FEATURES_DUMP=$(FEATURE_DUMP_EXPORT) \
|
$(Q)$(MAKE) -C $(LIBBPF_DIR) FEATURES_DUMP=$(FEATURE_DUMP_EXPORT) \
|
||||||
O= OUTPUT=$(LIBBPF_OUTPUT)/ DESTDIR=$(LIBBPF_DESTDIR) prefix= subdir= \
|
O= OUTPUT=$(LIBBPF_OUTPUT)/ DESTDIR=$(LIBBPF_DESTDIR) prefix= subdir= \
|
||||||
|
90
debian/patches/bugfix/all/tools-bootconfig-cleanup-bootconfig-footer-size-calc.patch
vendored
Normal file
90
debian/patches/bugfix/all/tools-bootconfig-cleanup-bootconfig-footer-size-calc.patch
vendored
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
From: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
|
||||||
|
Date: Thu, 10 Jul 2025 11:24:17 +0900
|
||||||
|
Subject: tools/bootconfig: Cleanup bootconfig footer size calculations
|
||||||
|
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git/commit?id=26dda57695090e05c1a99c3e8f802f862d1ac474
|
||||||
|
|
||||||
|
There are many same pattern of 8 + BOOTCONFIG_MAGIC_LEN for calculating
|
||||||
|
the size of bootconfig footer. Use BOOTCONFIG_FOOTER_SIZE macro to
|
||||||
|
clean up those magic numbers.
|
||||||
|
|
||||||
|
Link: https://lore.kernel.org/all/175211425693.2591046.16029516706923643510.stgit@mhiramat.tok.corp.google.com/
|
||||||
|
|
||||||
|
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
|
||||||
|
---
|
||||||
|
tools/bootconfig/main.c | 19 +++++++++++--------
|
||||||
|
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
--- a/tools/bootconfig/main.c
|
||||||
|
+++ b/tools/bootconfig/main.c
|
||||||
|
@@ -16,6 +16,10 @@
|
||||||
|
|
||||||
|
#define pr_err(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
|
||||||
|
|
||||||
|
+/* Bootconfig footer is [size][csum][BOOTCONFIG_MAGIC]. */
|
||||||
|
+#define BOOTCONFIG_FOOTER_SIZE \
|
||||||
|
+ (sizeof(uint32_t) * 2 + BOOTCONFIG_MAGIC_LEN)
|
||||||
|
+
|
||||||
|
static int xbc_show_value(struct xbc_node *node, bool semicolon)
|
||||||
|
{
|
||||||
|
const char *val, *eol;
|
||||||
|
@@ -185,7 +189,7 @@ static int load_xbc_from_initrd(int fd,
|
||||||
|
if (ret < 0)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
|
- if (stat.st_size < 8 + BOOTCONFIG_MAGIC_LEN)
|
||||||
|
+ if (stat.st_size < BOOTCONFIG_FOOTER_SIZE)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (lseek(fd, -BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
|
||||||
|
@@ -198,7 +202,7 @@ static int load_xbc_from_initrd(int fd,
|
||||||
|
if (memcmp(magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN) != 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- if (lseek(fd, -(8 + BOOTCONFIG_MAGIC_LEN), SEEK_END) < 0)
|
||||||
|
+ if (lseek(fd, -BOOTCONFIG_FOOTER_SIZE, SEEK_END) < 0)
|
||||||
|
return pr_errno("Failed to lseek for size", -errno);
|
||||||
|
|
||||||
|
if (read(fd, &size, sizeof(uint32_t)) < 0)
|
||||||
|
@@ -210,12 +214,12 @@ static int load_xbc_from_initrd(int fd,
|
||||||
|
csum = le32toh(csum);
|
||||||
|
|
||||||
|
/* Wrong size error */
|
||||||
|
- if (stat.st_size < size + 8 + BOOTCONFIG_MAGIC_LEN) {
|
||||||
|
+ if (stat.st_size < size + BOOTCONFIG_FOOTER_SIZE) {
|
||||||
|
pr_err("bootconfig size is too big\n");
|
||||||
|
return -E2BIG;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (lseek(fd, stat.st_size - (size + 8 + BOOTCONFIG_MAGIC_LEN),
|
||||||
|
+ if (lseek(fd, stat.st_size - (size + BOOTCONFIG_FOOTER_SIZE),
|
||||||
|
SEEK_SET) < 0)
|
||||||
|
return pr_errno("Failed to lseek", -errno);
|
||||||
|
|
||||||
|
@@ -346,7 +350,7 @@ static int delete_xbc(const char *path)
|
||||||
|
ret = fstat(fd, &stat);
|
||||||
|
if (!ret)
|
||||||
|
ret = ftruncate(fd, stat.st_size
|
||||||
|
- - size - 8 - BOOTCONFIG_MAGIC_LEN);
|
||||||
|
+ - size - BOOTCONFIG_FOOTER_SIZE);
|
||||||
|
if (ret)
|
||||||
|
ret = -errno;
|
||||||
|
} /* Ignore if there is no boot config in initrd */
|
||||||
|
@@ -376,8 +380,7 @@ static int apply_xbc(const char *path, c
|
||||||
|
csum = xbc_calc_checksum(buf, size);
|
||||||
|
|
||||||
|
/* Backup the bootconfig data */
|
||||||
|
- data = calloc(size + BOOTCONFIG_ALIGN +
|
||||||
|
- sizeof(uint32_t) + sizeof(uint32_t) + BOOTCONFIG_MAGIC_LEN, 1);
|
||||||
|
+ data = calloc(size + BOOTCONFIG_ALIGN + BOOTCONFIG_FOOTER_SIZE, 1);
|
||||||
|
if (!data)
|
||||||
|
return -ENOMEM;
|
||||||
|
memcpy(data, buf, size);
|
||||||
|
@@ -425,7 +428,7 @@ static int apply_xbc(const char *path, c
|
||||||
|
}
|
||||||
|
|
||||||
|
/* To align up the total size to BOOTCONFIG_ALIGN, get padding size */
|
||||||
|
- total_size = stat.st_size + size + sizeof(uint32_t) * 2 + BOOTCONFIG_MAGIC_LEN;
|
||||||
|
+ total_size = stat.st_size + size + BOOTCONFIG_FOOTER_SIZE;
|
||||||
|
pad = ((total_size + BOOTCONFIG_ALIGN - 1) & (~BOOTCONFIG_ALIGN_MASK)) - total_size;
|
||||||
|
size += pad;
|
||||||
|
|
@@ -21,7 +21,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
+ * much older kernel. Do "use" the attr structure here to avoid
|
+ * much older kernel. Do "use" the attr structure here to avoid
|
||||||
+ * a "set but not used" warning.
|
+ * a "set but not used" warning.
|
||||||
*/
|
*/
|
||||||
- return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr));
|
- return syscall(__NR_bpf, BPF_PROG_LOAD, &attr, sizeof(attr)) == 0;
|
||||||
+ (void)&attr;
|
+ (void)&attr;
|
||||||
+ return 0;
|
+ return 0;
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,7 @@ Signed-off-by: Ben Hutchings <benh@debian.org>
|
|||||||
---
|
---
|
||||||
--- a/tools/perf/Makefile.perf
|
--- a/tools/perf/Makefile.perf
|
||||||
+++ b/tools/perf/Makefile.perf
|
+++ b/tools/perf/Makefile.perf
|
||||||
@@ -919,7 +919,7 @@ $(OUTPUT)dlfilters/%.o: dlfilters/%.c in
|
@@ -937,7 +937,7 @@ $(OUTPUT)dlfilters/%.o: dlfilters/%.c in
|
||||||
.SECONDARY: $(DLFILTERS:.so=.o)
|
.SECONDARY: $(DLFILTERS:.so=.o)
|
||||||
|
|
||||||
$(OUTPUT)dlfilters/%.so: $(OUTPUT)dlfilters/%.o
|
$(OUTPUT)dlfilters/%.so: $(OUTPUT)dlfilters/%.o
|
||||||
|
@@ -69,7 +69,7 @@ Signed-off-by: Geoff Levand <geoff@infradead.org>
|
|||||||
* acpi_boot_table_init() called from setup_arch(), always.
|
* acpi_boot_table_init() called from setup_arch(), always.
|
||||||
* 1. find RSDP and get its address, and then find XSDT
|
* 1. find RSDP and get its address, and then find XSDT
|
||||||
* 2. extract all tables and checksums them all
|
* 2. extract all tables and checksums them all
|
||||||
@@ -257,6 +286,8 @@ done:
|
@@ -261,6 +290,8 @@ done:
|
||||||
|
|
||||||
if (IS_ENABLED(CONFIG_ACPI_BGRT))
|
if (IS_ENABLED(CONFIG_ACPI_BGRT))
|
||||||
acpi_table_parse(ACPI_SIG_BGRT, acpi_parse_bgrt);
|
acpi_table_parse(ACPI_SIG_BGRT, acpi_parse_bgrt);
|
||||||
|
@@ -26,7 +26,7 @@ Tested-by: Michal Kubecek <mkubecek@suse.cz>
|
|||||||
|
|
||||||
--- a/arch/powerpc/boot/Makefile
|
--- a/arch/powerpc/boot/Makefile
|
||||||
+++ b/arch/powerpc/boot/Makefile
|
+++ b/arch/powerpc/boot/Makefile
|
||||||
@@ -97,7 +97,7 @@ BOOTCFLAGS += -fno-stack-protector
|
@@ -98,7 +98,7 @@ BOOTCFLAGS += -fno-stack-protector
|
||||||
endif
|
endif
|
||||||
|
|
||||||
BOOTCFLAGS += -include $(srctree)/include/linux/compiler_attributes.h
|
BOOTCFLAGS += -include $(srctree)/include/linux/compiler_attributes.h
|
||||||
|
@@ -1,89 +0,0 @@
|
|||||||
From: Ben Hutchings <ben@decadent.org.uk>
|
|
||||||
Date: Mon, 07 Feb 2022 00:00:26 +0100
|
|
||||||
Subject: sh: Do not use hyphen in exported variable names
|
|
||||||
|
|
||||||
arch/sh/Makefile defines and exports ld-bfd to be used by
|
|
||||||
arch/sh/boot/Makefile and arch/sh/boot/compressed/Makefile. However
|
|
||||||
some shells, including dash, will not pass through environment
|
|
||||||
variables whose name includes a hyphen. Usually GNU make does not use
|
|
||||||
a shell to recurse, but if e.g. $(srctree) contains '~' it will use a
|
|
||||||
shell here.
|
|
||||||
|
|
||||||
Rename the variable to ld_bfd.
|
|
||||||
|
|
||||||
(Another instance of this problem was fixed upstream by commit
|
|
||||||
82977af93a0d "sh: rename suffix-y to suffix_y".)
|
|
||||||
|
|
||||||
References: https://buildd.debian.org/status/fetch.php?pkg=linux&arch=sh4&ver=4.13%7Erc5-1%7Eexp1&stamp=1502943967&raw=0
|
|
||||||
Fixes: ef9b542fce00 ("sh: bzip2/lzma uImage support.")
|
|
||||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
||||||
---
|
|
||||||
arch/sh/Makefile | 10 +++++-----
|
|
||||||
arch/sh/boot/compressed/Makefile | 4 ++--
|
|
||||||
arch/sh/boot/romimage/Makefile | 4 ++--
|
|
||||||
3 files changed, 9 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/sh/Makefile
|
|
||||||
+++ b/arch/sh/Makefile
|
|
||||||
@@ -102,16 +102,16 @@ UTS_MACHINE := sh
|
|
||||||
LDFLAGS_vmlinux += -e _stext
|
|
||||||
|
|
||||||
ifdef CONFIG_CPU_LITTLE_ENDIAN
|
|
||||||
-ld-bfd := elf32-sh-linux
|
|
||||||
-LDFLAGS_vmlinux += --defsym jiffies=jiffies_64 --oformat $(ld-bfd)
|
|
||||||
+ld_bfd := elf32-sh-linux
|
|
||||||
+LDFLAGS_vmlinux += --defsym jiffies=jiffies_64 --oformat $(ld_bfd)
|
|
||||||
KBUILD_LDFLAGS += -EL
|
|
||||||
else
|
|
||||||
-ld-bfd := elf32-shbig-linux
|
|
||||||
-LDFLAGS_vmlinux += --defsym jiffies=jiffies_64+4 --oformat $(ld-bfd)
|
|
||||||
+ld_bfd := elf32-shbig-linux
|
|
||||||
+LDFLAGS_vmlinux += --defsym jiffies=jiffies_64+4 --oformat $(ld_bfd)
|
|
||||||
KBUILD_LDFLAGS += -EB
|
|
||||||
endif
|
|
||||||
|
|
||||||
-export ld-bfd
|
|
||||||
+export ld_bfd
|
|
||||||
|
|
||||||
# Mach groups
|
|
||||||
machdir-$(CONFIG_SOLUTION_ENGINE) += mach-se
|
|
||||||
--- a/arch/sh/boot/compressed/Makefile
|
|
||||||
+++ b/arch/sh/boot/compressed/Makefile
|
|
||||||
@@ -27,7 +27,7 @@ endif
|
|
||||||
|
|
||||||
ccflags-remove-$(CONFIG_MCOUNT) += -pg
|
|
||||||
|
|
||||||
-LDFLAGS_vmlinux := --oformat $(ld-bfd) -Ttext $(IMAGE_OFFSET) -e startup \
|
|
||||||
+LDFLAGS_vmlinux := --oformat $(ld_bfd) -Ttext $(IMAGE_OFFSET) -e startup \
|
|
||||||
-T $(obj)/../../kernel/vmlinux.lds
|
|
||||||
|
|
||||||
KBUILD_CFLAGS += -DDISABLE_BRANCH_PROFILING
|
|
||||||
@@ -51,7 +51,7 @@ $(obj)/vmlinux.bin.lzo: $(obj)/vmlinux.b
|
|
||||||
|
|
||||||
OBJCOPYFLAGS += -R .empty_zero_page
|
|
||||||
|
|
||||||
-LDFLAGS_piggy.o := -r --format binary --oformat $(ld-bfd) -T
|
|
||||||
+LDFLAGS_piggy.o := -r --format binary --oformat $(ld_bfd) -T
|
|
||||||
|
|
||||||
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix_y) FORCE
|
|
||||||
$(call if_changed,ld)
|
|
||||||
--- a/arch/sh/boot/romimage/Makefile
|
|
||||||
+++ b/arch/sh/boot/romimage/Makefile
|
|
||||||
@@ -13,7 +13,7 @@ mmcif-obj-$(CONFIG_CPU_SUBTYPE_SH7724) :
|
|
||||||
load-$(CONFIG_ROMIMAGE_MMCIF) := $(mmcif-load-y)
|
|
||||||
obj-$(CONFIG_ROMIMAGE_MMCIF) := $(mmcif-obj-y)
|
|
||||||
|
|
||||||
-LDFLAGS_vmlinux := --oformat $(ld-bfd) -Ttext $(load-y) -e romstart \
|
|
||||||
+LDFLAGS_vmlinux := --oformat $(ld_bfd) -Ttext $(load-y) -e romstart \
|
|
||||||
-T $(obj)/../../kernel/vmlinux.lds
|
|
||||||
|
|
||||||
$(obj)/vmlinux: $(obj)/head.o $(obj-y) $(obj)/piggy.o FORCE
|
|
||||||
@@ -24,7 +24,7 @@ OBJCOPYFLAGS += -j .empty_zero_page
|
|
||||||
$(obj)/zeropage.bin: vmlinux FORCE
|
|
||||||
$(call if_changed,objcopy)
|
|
||||||
|
|
||||||
-LDFLAGS_piggy.o := -r --format binary --oformat $(ld-bfd) -T
|
|
||||||
+LDFLAGS_piggy.o := -r --format binary --oformat $(ld_bfd) -T
|
|
||||||
|
|
||||||
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/zeropage.bin arch/sh/boot/zImage FORCE
|
|
||||||
$(call if_changed,ld)
|
|
@@ -21,7 +21,7 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
|||||||
|
|
||||||
--- a/kernel/fork.c
|
--- a/kernel/fork.c
|
||||||
+++ b/kernel/fork.c
|
+++ b/kernel/fork.c
|
||||||
@@ -119,6 +119,12 @@
|
@@ -122,6 +122,12 @@
|
||||||
|
|
||||||
#include <kunit/visibility.h>
|
#include <kunit/visibility.h>
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
|||||||
/*
|
/*
|
||||||
* Minimum number of threads to boot the kernel
|
* Minimum number of threads to boot the kernel
|
||||||
*/
|
*/
|
||||||
@@ -2167,6 +2173,10 @@ __latent_entropy struct task_struct *cop
|
@@ -1933,6 +1939,10 @@ __latent_entropy struct task_struct *cop
|
||||||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
||||||
return ERR_PTR(-EINVAL);
|
return ERR_PTR(-EINVAL);
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
|||||||
/*
|
/*
|
||||||
* Thread groups must share signals as well, and detached threads
|
* Thread groups must share signals as well, and detached threads
|
||||||
* can only be started up within the thread group.
|
* can only be started up within the thread group.
|
||||||
@@ -3320,6 +3330,12 @@ int ksys_unshare(unsigned long unshare_f
|
@@ -3099,6 +3109,12 @@ int ksys_unshare(unsigned long unshare_f
|
||||||
if (unshare_flags & CLONE_NEWNS)
|
if (unshare_flags & CLONE_NEWNS)
|
||||||
unshare_flags |= CLONE_FS;
|
unshare_flags |= CLONE_FS;
|
||||||
|
|
||||||
@@ -60,21 +60,21 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
|||||||
goto bad_unshare_out;
|
goto bad_unshare_out;
|
||||||
--- a/kernel/sysctl.c
|
--- a/kernel/sysctl.c
|
||||||
+++ b/kernel/sysctl.c
|
+++ b/kernel/sysctl.c
|
||||||
@@ -135,6 +135,10 @@ static enum sysctl_writes_mode sysctl_wr
|
@@ -77,6 +77,10 @@ EXPORT_SYMBOL_GPL(sysctl_long_vals);
|
||||||
int sysctl_legacy_va_layout;
|
static const int ngroups_max = NGROUPS_MAX;
|
||||||
#endif
|
static const int cap_last_cap = CAP_LAST_CAP;
|
||||||
|
|
||||||
+#ifdef CONFIG_USER_NS
|
+#ifdef CONFIG_USER_NS
|
||||||
+extern int unprivileged_userns_clone;
|
+extern int unprivileged_userns_clone;
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
#endif /* CONFIG_SYSCTL */
|
#ifdef CONFIG_PROC_SYSCTL
|
||||||
|
|
||||||
/*
|
/**
|
||||||
@@ -1617,6 +1621,15 @@ static const struct ctl_table kern_table
|
@@ -1581,6 +1585,15 @@ int proc_do_static_key(const struct ctl_
|
||||||
.mode = 0644,
|
}
|
||||||
.proc_handler = proc_dointvec,
|
|
||||||
},
|
static const struct ctl_table kern_table[] = {
|
||||||
+#ifdef CONFIG_USER_NS
|
+#ifdef CONFIG_USER_NS
|
||||||
+ {
|
+ {
|
||||||
+ .procname = "unprivileged_userns_clone",
|
+ .procname = "unprivileged_userns_clone",
|
||||||
|
@@ -1,24 +1,15 @@
|
|||||||
From: Ben Hutchings <ben@decadent.org.uk>
|
From: Ben Hutchings <ben@decadent.org.uk>
|
||||||
Date: Fri, 22 Jun 2018 17:27:00 +0100
|
Date: Tue, 08 Jul 2025 13:30:55 +0200
|
||||||
Subject: android: Enable building ashmem and binder as modules
|
Subject: android: Enable building binder as module
|
||||||
Bug-Debian: https://bugs.debian.org/901492
|
Bug-Debian: https://bugs.debian.org/901492
|
||||||
|
|
||||||
We want to enable use of the Android ashmem and binder drivers to
|
We want to enable use of the Android binder driver to support
|
||||||
support Anbox, but they should not be built-in as that would waste
|
Waydroid, but it should not be built-in as that would waste resources
|
||||||
resources and increase security attack surface on systems that don't
|
and increase security attack surface on systems that don't need it.
|
||||||
need them.
|
|
||||||
|
|
||||||
- Add a MODULE_LICENSE declaration to ashmem
|
- Change the Makefiles to build the driver as an object with the
|
||||||
- Change the Makefiles to build each driver as an object with the
|
"_linux" suffix (which is what Waydroid expects)
|
||||||
"_linux" suffix (which is what Anbox expects)
|
|
||||||
- Change config symbol types to tristate
|
- Change config symbol types to tristate
|
||||||
|
|
||||||
Update:
|
|
||||||
In upstream commit 721412ed3d titled "staging: remove ashmem" the ashmem
|
|
||||||
driver was removed entirely. Secondary commit message:
|
|
||||||
"The mainline replacement for ashmem is memfd, so remove the legacy
|
|
||||||
code from drivers/staging/"
|
|
||||||
Consequently, the ashmem part of this patch has been removed.
|
|
||||||
---
|
---
|
||||||
drivers/android/Kconfig | 2 +-
|
drivers/android/Kconfig | 2 +-
|
||||||
drivers/android/Makefile | 7 ++++---
|
drivers/android/Makefile | 7 ++++---
|
@@ -22,7 +22,7 @@ implementation went from disk-io.c to super.c; forwarded the issue]
|
|||||||
|
|
||||||
--- a/fs/btrfs/super.c
|
--- a/fs/btrfs/super.c
|
||||||
+++ b/fs/btrfs/super.c
|
+++ b/fs/btrfs/super.c
|
||||||
@@ -765,6 +765,18 @@ static void set_device_specific_options(
|
@@ -761,6 +761,18 @@ static void set_device_specific_options(
|
||||||
btrfs_set_opt(fs_info->mount_opt, SSD);
|
btrfs_set_opt(fs_info->mount_opt, SSD);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1,41 +0,0 @@
|
|||||||
From: Ben Hutchings <ben@decadent.org.uk>
|
|
||||||
Date: Thu, 16 Feb 2017 19:09:17 +0000
|
|
||||||
Subject: dccp: Disable auto-loading as mitigation against local exploits
|
|
||||||
Forwarded: not-needed
|
|
||||||
|
|
||||||
We can mitigate the effect of vulnerabilities in obscure protocols by
|
|
||||||
preventing unprivileged users from loading the modules, so that they
|
|
||||||
are only exploitable on systems where the administrator has chosen to
|
|
||||||
load the protocol.
|
|
||||||
|
|
||||||
The 'dccp' protocol is not actively maintained or widely used.
|
|
||||||
Therefore disable auto-loading.
|
|
||||||
|
|
||||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|
||||||
---
|
|
||||||
--- a/net/dccp/ipv4.c
|
|
||||||
+++ b/net/dccp/ipv4.c
|
|
||||||
@@ -1099,8 +1099,8 @@ module_exit(dccp_v4_exit);
|
|
||||||
* values directly, Also cover the case where the protocol is not specified,
|
|
||||||
* i.e. net-pf-PF_INET-proto-0-type-SOCK_DCCP
|
|
||||||
*/
|
|
||||||
-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 33, 6);
|
|
||||||
-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 0, 6);
|
|
||||||
+/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 33, 6); */
|
|
||||||
+/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET, 0, 6); */
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>");
|
|
||||||
MODULE_DESCRIPTION("DCCP - Datagram Congestion Controlled Protocol");
|
|
||||||
--- a/net/dccp/ipv6.c
|
|
||||||
+++ b/net/dccp/ipv6.c
|
|
||||||
@@ -1174,8 +1174,8 @@ module_exit(dccp_v6_exit);
|
|
||||||
* values directly, Also cover the case where the protocol is not specified,
|
|
||||||
* i.e. net-pf-PF_INET6-proto-0-type-SOCK_DCCP
|
|
||||||
*/
|
|
||||||
-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 33, 6);
|
|
||||||
-MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 0, 6);
|
|
||||||
+/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 33, 6); */
|
|
||||||
+/* MODULE_ALIAS_NET_PF_PROTO_TYPE(PF_INET6, 0, 6); */
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
MODULE_AUTHOR("Arnaldo Carvalho de Melo <acme@mandriva.com>");
|
|
||||||
MODULE_DESCRIPTION("DCCPv6 - Datagram Congestion Controlled Protocol");
|
|
@@ -21,7 +21,7 @@ probably discontinued 10 years ago.
|
|||||||
|
|
||||||
-config FB_NVIDIA
|
-config FB_NVIDIA
|
||||||
- tristate "nVidia Framebuffer Support"
|
- tristate "nVidia Framebuffer Support"
|
||||||
- depends on FB && PCI
|
- depends on FB && PCI && HAS_IOPORT
|
||||||
- select FB_CFB_FILLRECT
|
- select FB_CFB_FILLRECT
|
||||||
- select FB_CFB_COPYAREA
|
- select FB_CFB_COPYAREA
|
||||||
- select FB_CFB_IMAGEBLIT
|
- select FB_CFB_IMAGEBLIT
|
||||||
|
@@ -10,7 +10,7 @@ Forwarded: not-needed
|
|||||||
|
|
||||||
--- a/Documentation/Makefile
|
--- a/Documentation/Makefile
|
||||||
+++ b/Documentation/Makefile
|
+++ b/Documentation/Makefile
|
||||||
@@ -118,7 +118,6 @@ $(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.
|
@@ -119,7 +119,6 @@ $(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.
|
||||||
htmldocs texinfodocs latexdocs epubdocs xmldocs: $(YNL_INDEX)
|
htmldocs texinfodocs latexdocs epubdocs xmldocs: $(YNL_INDEX)
|
||||||
|
|
||||||
htmldocs:
|
htmldocs:
|
||||||
@@ -18,7 +18,7 @@ Forwarded: not-needed
|
|||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,html,$(var),,$(var)))
|
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,html,$(var),,$(var)))
|
||||||
|
|
||||||
# If Rust support is available and .config exists, add rustdoc generated contents.
|
# If Rust support is available and .config exists, add rustdoc generated contents.
|
||||||
@@ -132,7 +131,6 @@ endif
|
@@ -133,7 +132,6 @@ endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
texinfodocs:
|
texinfodocs:
|
||||||
@@ -26,7 +26,7 @@ Forwarded: not-needed
|
|||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,texinfo,$(var),texinfo,$(var)))
|
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,texinfo,$(var),texinfo,$(var)))
|
||||||
|
|
||||||
# Note: the 'info' Make target is generated by sphinx itself when
|
# Note: the 'info' Make target is generated by sphinx itself when
|
||||||
@@ -144,7 +142,6 @@ linkcheckdocs:
|
@@ -145,7 +143,6 @@ linkcheckdocs:
|
||||||
@$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,linkcheck,$(var),,$(var)))
|
@$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,linkcheck,$(var),,$(var)))
|
||||||
|
|
||||||
latexdocs:
|
latexdocs:
|
||||||
@@ -34,7 +34,7 @@ Forwarded: not-needed
|
|||||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,latex,$(var),latex,$(var)))
|
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,latex,$(var),latex,$(var)))
|
||||||
|
|
||||||
ifeq ($(HAVE_PDFLATEX),0)
|
ifeq ($(HAVE_PDFLATEX),0)
|
||||||
@@ -157,7 +154,6 @@ else # HAVE_PDFLATEX
|
@@ -158,7 +155,6 @@ else # HAVE_PDFLATEX
|
||||||
|
|
||||||
pdfdocs: DENY_VF = XDG_CONFIG_HOME=$(FONTS_CONF_DENY_VF)
|
pdfdocs: DENY_VF = XDG_CONFIG_HOME=$(FONTS_CONF_DENY_VF)
|
||||||
pdfdocs: latexdocs
|
pdfdocs: latexdocs
|
||||||
@@ -42,7 +42,7 @@ Forwarded: not-needed
|
|||||||
$(foreach var,$(SPHINXDIRS), \
|
$(foreach var,$(SPHINXDIRS), \
|
||||||
$(MAKE) PDFLATEX="$(PDFLATEX)" LATEXOPTS="$(LATEXOPTS)" $(DENY_VF) -C $(BUILDDIR)/$(var)/latex || sh $(srctree)/scripts/check-variable-fonts.sh || exit; \
|
$(MAKE) PDFLATEX="$(PDFLATEX)" LATEXOPTS="$(LATEXOPTS)" $(DENY_VF) -C $(BUILDDIR)/$(var)/latex || sh $(srctree)/scripts/check-variable-fonts.sh || exit; \
|
||||||
mkdir -p $(BUILDDIR)/$(var)/pdf; \
|
mkdir -p $(BUILDDIR)/$(var)/pdf; \
|
||||||
@@ -167,11 +163,9 @@ pdfdocs: latexdocs
|
@@ -168,11 +164,9 @@ pdfdocs: latexdocs
|
||||||
endif # HAVE_PDFLATEX
|
endif # HAVE_PDFLATEX
|
||||||
|
|
||||||
epubdocs:
|
epubdocs:
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
From: Ben Hutchings <ben@decadent.org.uk>
|
From: Ben Hutchings <ben@decadent.org.uk>
|
||||||
Date: Mon, 05 Aug 2024 03:26:48 +0200
|
Date: Tue, 08 Jul 2025 13:32:21 +0200
|
||||||
Subject: Export symbols needed by binder
|
Subject: Export symbols needed by binder
|
||||||
Bug-Debian: https://bugs.debian.org/901492
|
Bug-Debian: https://bugs.debian.org/901492
|
||||||
|
|
||||||
@@ -16,13 +16,15 @@ Export the currently un-exported symbols it depends on.
|
|||||||
kernel/sched/syscalls.c | 1 +
|
kernel/sched/syscalls.c | 1 +
|
||||||
kernel/sched/wait.c | 1 +
|
kernel/sched/wait.c | 1 +
|
||||||
kernel/task_work.c | 1 +
|
kernel/task_work.c | 1 +
|
||||||
|
mm/list_lru.c | 2 ++
|
||||||
mm/memory.c | 1 +
|
mm/memory.c | 1 +
|
||||||
|
mm/mmap_lock.c | 1 +
|
||||||
security/security.c | 4 ++++
|
security/security.c | 4 ++++
|
||||||
8 files changed, 11 insertions(+)
|
10 files changed, 14 insertions(+)
|
||||||
|
|
||||||
--- a/fs/file.c
|
--- a/fs/file.c
|
||||||
+++ b/fs/file.c
|
+++ b/fs/file.c
|
||||||
@@ -837,6 +837,7 @@ struct file *file_close_fd(unsigned int
|
@@ -858,6 +858,7 @@ struct file *file_close_fd(unsigned int
|
||||||
|
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
@@ -80,16 +82,44 @@ Export the currently un-exported symbols it depends on.
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* task_work_cancel_match - cancel a pending work added by task_work_add()
|
* task_work_cancel_match - cancel a pending work added by task_work_add()
|
||||||
|
--- a/mm/list_lru.c
|
||||||
|
+++ b/mm/list_lru.c
|
||||||
|
@@ -175,6 +175,7 @@ bool list_lru_add(struct list_lru *lru,
|
||||||
|
unlock_list_lru(l, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL_GPL(list_lru_add);
|
||||||
|
|
||||||
|
bool list_lru_add_obj(struct list_lru *lru, struct list_head *item)
|
||||||
|
{
|
||||||
|
@@ -212,6 +213,7 @@ bool list_lru_del(struct list_lru *lru,
|
||||||
|
unlock_list_lru(l, false);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL_GPL(list_lru_del);
|
||||||
|
|
||||||
|
bool list_lru_del_obj(struct list_lru *lru, struct list_head *item)
|
||||||
|
{
|
||||||
--- a/mm/memory.c
|
--- a/mm/memory.c
|
||||||
+++ b/mm/memory.c
|
+++ b/mm/memory.c
|
||||||
@@ -2030,6 +2030,7 @@ void zap_page_range_single(struct vm_are
|
@@ -2050,6 +2050,7 @@ void zap_page_range_single(struct vm_are
|
||||||
|
zap_page_range_single_batched(&tlb, vma, address, size, details);
|
||||||
tlb_finish_mmu(&tlb);
|
tlb_finish_mmu(&tlb);
|
||||||
hugetlb_zap_end(vma, details);
|
|
||||||
}
|
}
|
||||||
+EXPORT_SYMBOL_GPL(zap_page_range_single);
|
+EXPORT_SYMBOL_GPL(zap_page_range_single);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* zap_vma_ptes - remove ptes mapping the vma
|
* zap_vma_ptes - remove ptes mapping the vma
|
||||||
|
--- a/mm/mmap_lock.c
|
||||||
|
+++ b/mm/mmap_lock.c
|
||||||
|
@@ -177,6 +177,7 @@ inval:
|
||||||
|
count_vm_vma_lock_event(VMA_LOCK_ABORT);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL_GPL(lock_vma_under_rcu);
|
||||||
|
#endif /* CONFIG_PER_VMA_LOCK */
|
||||||
|
|
||||||
|
#ifdef CONFIG_LOCK_MM_AND_FIND_VMA
|
||||||
--- a/security/security.c
|
--- a/security/security.c
|
||||||
+++ b/security/security.c
|
+++ b/security/security.c
|
||||||
@@ -996,6 +996,7 @@ int security_binder_set_context_mgr(cons
|
@@ -996,6 +996,7 @@ int security_binder_set_context_mgr(cons
|
@@ -12,7 +12,7 @@ actually used.
|
|||||||
---
|
---
|
||||||
--- a/fs/notify/fanotify/fanotify_user.c
|
--- a/fs/notify/fanotify/fanotify_user.c
|
||||||
+++ b/fs/notify/fanotify/fanotify_user.c
|
+++ b/fs/notify/fanotify/fanotify_user.c
|
||||||
@@ -1838,6 +1838,14 @@ static int do_fanotify_mark(int fanotify
|
@@ -1878,6 +1878,14 @@ static int do_fanotify_mark(int fanotify
|
||||||
umask = FANOTIFY_EVENT_FLAGS;
|
umask = FANOTIFY_EVENT_FLAGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
37
debian/patches/debian/firmware_loader-log-direct-loading-failures-as-info-for-d-i.patch
vendored
Normal file
37
debian/patches/debian/firmware_loader-log-direct-loading-failures-as-info-for-d-i.patch
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
From: Ben Hutchings <benh@debian.org>
|
||||||
|
Subject: firmware_loader: Log direct loading failures as info for d-i
|
||||||
|
Date: Thu, 30 May 2024 13:14:32 +0100
|
||||||
|
Forwarded: not-needed
|
||||||
|
|
||||||
|
On an installed Debian system, firmware packages will normally be
|
||||||
|
installed automatically based on a mapping of device IDs to firmware.
|
||||||
|
Within the Debian installer this has not yet happened and we need a
|
||||||
|
way to detect missing firmware.
|
||||||
|
|
||||||
|
Although many/most drivers log firmware loading failures, they do so
|
||||||
|
using many different formats. This adds a single log message to the
|
||||||
|
firmware loader, which the installer's hw-detect package will look
|
||||||
|
for. The log level is set to "info" because some failures are
|
||||||
|
expected and we do not want to confuse users with bogus error messages
|
||||||
|
(like in bug #966218).
|
||||||
|
|
||||||
|
NOTE: The log message format must not be changed without coordinating
|
||||||
|
this with the check-missing-firmware.sh in hw-detect.
|
||||||
|
---
|
||||||
|
drivers/base/firmware_loader/fallback.c | 2 +-
|
||||||
|
drivers/base/firmware_loader/main.c | 17 ++++++++---------
|
||||||
|
2 files changed, 9 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/base/firmware_loader/main.c
|
||||||
|
+++ b/drivers/base/firmware_loader/main.c
|
||||||
|
@@ -590,6 +590,10 @@ fw_get_filesystem_firmware(struct device
|
||||||
|
}
|
||||||
|
__putname(path);
|
||||||
|
|
||||||
|
+ if (rc)
|
||||||
|
+ dev_info(device, "firmware: failed to load %s (%d)\n",
|
||||||
|
+ fw_priv->fw_name, rc);
|
||||||
|
+
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
@@ -9,7 +9,7 @@ This reverts commit 561ec64ae67ef25cac8d72bb9c4bfc955edfd415
|
|||||||
|
|
||||||
--- a/fs/namei.c
|
--- a/fs/namei.c
|
||||||
+++ b/fs/namei.c
|
+++ b/fs/namei.c
|
||||||
@@ -1094,8 +1094,8 @@ static inline void put_link(struct namei
|
@@ -1095,8 +1095,8 @@ static inline void put_link(struct namei
|
||||||
path_put(&last->link);
|
path_put(&last->link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
---
|
---
|
||||||
--- a/net/ax25/af_ax25.c
|
--- a/net/ax25/af_ax25.c
|
||||||
+++ b/net/ax25/af_ax25.c
|
+++ b/net/ax25/af_ax25.c
|
||||||
@@ -2077,7 +2077,7 @@ module_init(ax25_init);
|
@@ -2067,7 +2067,7 @@ module_init(ax25_init);
|
||||||
MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
|
MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
|
||||||
MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
|
MODULE_DESCRIPTION("The amateur radio AX.25 link layer protocol");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
@@ -37,7 +37,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
{
|
{
|
||||||
--- a/net/rose/af_rose.c
|
--- a/net/rose/af_rose.c
|
||||||
+++ b/net/rose/af_rose.c
|
+++ b/net/rose/af_rose.c
|
||||||
@@ -1638,7 +1638,7 @@ MODULE_PARM_DESC(rose_ndevs, "number of
|
@@ -1639,7 +1639,7 @@ MODULE_PARM_DESC(rose_ndevs, "number of
|
||||||
MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
|
MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
|
||||||
MODULE_DESCRIPTION("The amateur radio ROSE network layer protocol");
|
MODULE_DESCRIPTION("The amateur radio ROSE network layer protocol");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
4
debian/patches/debian/kernelvariables.patch
vendored
4
debian/patches/debian/kernelvariables.patch
vendored
@@ -19,7 +19,7 @@ use of $(ARCH) needs to be moved after this.
|
|||||||
---
|
---
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -405,36 +405,6 @@ include $(srctree)/scripts/subarch.inclu
|
@@ -402,36 +402,6 @@ include $(srctree)/scripts/subarch.inclu
|
||||||
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
|
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
|
||||||
ARCH ?= $(SUBARCH)
|
ARCH ?= $(SUBARCH)
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ use of $(ARCH) needs to be moved after this.
|
|||||||
KCONFIG_CONFIG ?= .config
|
KCONFIG_CONFIG ?= .config
|
||||||
export KCONFIG_CONFIG
|
export KCONFIG_CONFIG
|
||||||
|
|
||||||
@@ -555,6 +525,35 @@ RUSTFLAGS_KERNEL =
|
@@ -556,6 +526,35 @@ RUSTFLAGS_KERNEL =
|
||||||
AFLAGS_KERNEL =
|
AFLAGS_KERNEL =
|
||||||
LDFLAGS_vmlinux =
|
LDFLAGS_vmlinux =
|
||||||
|
|
||||||
|
@@ -15,7 +15,7 @@ to the installed location.
|
|||||||
---
|
---
|
||||||
--- a/tools/perf/builtin-report.c
|
--- a/tools/perf/builtin-report.c
|
||||||
+++ b/tools/perf/builtin-report.c
|
+++ b/tools/perf/builtin-report.c
|
||||||
@@ -660,10 +660,12 @@ static int report__browse_hists(struct r
|
@@ -669,10 +669,12 @@ static int report__browse_hists(struct r
|
||||||
|
|
||||||
path = system_path(TIPDIR);
|
path = system_path(TIPDIR);
|
||||||
if (perf_tip(&help, path) || help == NULL) {
|
if (perf_tip(&help, path) || help == NULL) {
|
||||||
@@ -30,7 +30,7 @@ to the installed location.
|
|||||||
free(path);
|
free(path);
|
||||||
--- a/tools/perf/tests/Build
|
--- a/tools/perf/tests/Build
|
||||||
+++ b/tools/perf/tests/Build
|
+++ b/tools/perf/tests/Build
|
||||||
@@ -73,7 +73,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86
|
@@ -74,7 +74,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86
|
||||||
perf-test-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
perf-test-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@ is non-empty.
|
|||||||
---
|
---
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -1873,7 +1873,7 @@ PHONY += prepare
|
@@ -1882,7 +1882,7 @@ PHONY += prepare
|
||||||
# now expand this into a simple variable to reduce the cost of shell evaluations
|
# now expand this into a simple variable to reduce the cost of shell evaluations
|
||||||
prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT)
|
prepare: CC_VERSION_TEXT := $(CC_VERSION_TEXT)
|
||||||
prepare:
|
prepare:
|
||||||
|
@@ -10,7 +10,7 @@ Forwarded: not-needed
|
|||||||
|
|
||||||
--- a/tools/perf/Makefile.perf
|
--- a/tools/perf/Makefile.perf
|
||||||
+++ b/tools/perf/Makefile.perf
|
+++ b/tools/perf/Makefile.perf
|
||||||
@@ -1139,7 +1139,7 @@ install-bin: install-tools install-tests
|
@@ -1158,7 +1158,7 @@ install-bin: install-tools install-tests
|
||||||
install: install-bin try-install-man
|
install: install-bin try-install-man
|
||||||
|
|
||||||
install-python_ext:
|
install-python_ext:
|
||||||
|
@@ -4,7 +4,7 @@ Subject: linux-tools: Install perf-read-vdso{,x}32 in directory under /usr/lib
|
|||||||
|
|
||||||
--- a/tools/perf/Makefile.perf
|
--- a/tools/perf/Makefile.perf
|
||||||
+++ b/tools/perf/Makefile.perf
|
+++ b/tools/perf/Makefile.perf
|
||||||
@@ -1067,21 +1067,21 @@ install-tools: all install-gtk
|
@@ -1085,21 +1085,21 @@ install-tools: all install-gtk
|
||||||
$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'; \
|
$(LN) '$(DESTDIR_SQ)$(bindir_SQ)/perf' '$(DESTDIR_SQ)$(bindir_SQ)/trace'; \
|
||||||
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(includedir_SQ)/perf'; \
|
$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(includedir_SQ)/perf'; \
|
||||||
$(INSTALL) -m 644 include/perf/perf_dlfilter.h -t '$(DESTDIR_SQ)$(includedir_SQ)/perf'
|
$(INSTALL) -m 644 include/perf/perf_dlfilter.h -t '$(DESTDIR_SQ)$(includedir_SQ)/perf'
|
||||||
|
@@ -13,7 +13,7 @@ $KBUILD_BUILD_TIMESTAMP.
|
|||||||
|
|
||||||
--- a/init/Makefile
|
--- a/init/Makefile
|
||||||
+++ b/init/Makefile
|
+++ b/init/Makefile
|
||||||
@@ -29,7 +29,7 @@ preempt-flag-$(CONFIG_PREEMPT_DYNAMIC) :
|
@@ -30,7 +30,7 @@ preempt-flag-$(CONFIG_PREEMPT_DYNAMIC) :
|
||||||
preempt-flag-$(CONFIG_PREEMPT_RT) := PREEMPT_RT
|
preempt-flag-$(CONFIG_PREEMPT_RT) := PREEMPT_RT
|
||||||
|
|
||||||
build-version = $(or $(KBUILD_BUILD_VERSION), $(build-version-auto))
|
build-version = $(or $(KBUILD_BUILD_VERSION), $(build-version-auto))
|
||||||
|
@@ -19,7 +19,7 @@ Forwarded: not-needed
|
|||||||
|
|
||||||
/* describe a ptrace relationship for potential exception */
|
/* describe a ptrace relationship for potential exception */
|
||||||
struct ptrace_relation {
|
struct ptrace_relation {
|
||||||
@@ -474,7 +474,7 @@ static inline void yama_init_sysctl(void
|
@@ -469,7 +469,7 @@ static inline void yama_init_sysctl(void
|
||||||
|
|
||||||
static int __init yama_init(void)
|
static int __init yama_init(void)
|
||||||
{
|
{
|
||||||
|
153
debian/patches/features/all/lockdown/arm64-add-kernel-config-option-to-lock-down-when.patch
vendored
Normal file
153
debian/patches/features/all/lockdown/arm64-add-kernel-config-option-to-lock-down-when.patch
vendored
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
From: Linn Crosetto <linn@hpe.com>
|
||||||
|
Date: Tue, 30 Aug 2016 11:54:38 -0600
|
||||||
|
Subject: arm64: add kernel config option to lock down when in Secure Boot mode
|
||||||
|
Bug-Debian: https://bugs.debian.org/831827
|
||||||
|
Forwarded: no
|
||||||
|
|
||||||
|
Add a kernel configuration option to lock down the kernel, to restrict
|
||||||
|
userspace's ability to modify the running kernel when UEFI Secure Boot is
|
||||||
|
enabled. Based on the x86 patch by Matthew Garrett.
|
||||||
|
|
||||||
|
Determine the state of Secure Boot in the EFI stub and pass this to the
|
||||||
|
kernel using the FDT.
|
||||||
|
|
||||||
|
Signed-off-by: Linn Crosetto <linn@hpe.com>
|
||||||
|
[bwh: Forward-ported to 4.10: adjust context]
|
||||||
|
[Lukas Wunner: Forward-ported to 4.11: drop parts applied upstream]
|
||||||
|
[bwh: Forward-ported to 4.15 and lockdown patch set:
|
||||||
|
- Pass result of efi_get_secureboot() in stub through to
|
||||||
|
efi_set_secure_boot() in main kernel
|
||||||
|
- Use lockdown API and naming]
|
||||||
|
[bwh: Forward-ported to 4.19.3: adjust context in update_fdt()]
|
||||||
|
[dannf: Moved init_lockdown() call after uefi_init(), fixing SB detection]
|
||||||
|
[bwh: Drop call to init_lockdown(), as efi_set_secure_boot() now calls this]
|
||||||
|
[bwh: Forward-ported to 5.6: efi_get_secureboot() no longer takes a
|
||||||
|
sys_table parameter]
|
||||||
|
[bwh: Forward-ported to 5.7: EFI initialisation from FDT was rewritten, so:
|
||||||
|
- Add Secure Boot mode to the parameter enumeration in fdtparams.c
|
||||||
|
- Add a parameter to efi_get_fdt_params() to return the Secure Boot mode
|
||||||
|
- Since Xen does not have a property name defined for Secure Boot mode,
|
||||||
|
change efi_get_fdt_prop() to handle a missing property name by clearing
|
||||||
|
the output variable]
|
||||||
|
[Salvatore Bonaccorso: Forward-ported to 5.10: f30f242fb131 ("efi: Rename
|
||||||
|
arm-init to efi-init common for all arch") renamed arm-init.c to efi-init.c]
|
||||||
|
---
|
||||||
|
drivers/firmware/efi/efi-init.c | 5 ++++-
|
||||||
|
drivers/firmware/efi/fdtparams.c | 12 +++++++++++-
|
||||||
|
drivers/firmware/efi/libstub/fdt.c | 6 ++++++
|
||||||
|
include/linux/efi.h | 3 ++-
|
||||||
|
4 files changed, 23 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/firmware/efi/efi-init.c
|
||||||
|
+++ b/drivers/firmware/efi/efi-init.c
|
||||||
|
@@ -213,9 +213,10 @@ void __init efi_init(void)
|
||||||
|
{
|
||||||
|
struct efi_memory_map_data data;
|
||||||
|
u64 efi_system_table;
|
||||||
|
+ u32 secure_boot;
|
||||||
|
|
||||||
|
/* Grab UEFI information placed in FDT by stub */
|
||||||
|
- efi_system_table = efi_get_fdt_params(&data);
|
||||||
|
+ efi_system_table = efi_get_fdt_params(&data, &secure_boot);
|
||||||
|
if (!efi_system_table)
|
||||||
|
return;
|
||||||
|
|
||||||
|
@@ -237,6 +238,8 @@ void __init efi_init(void)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ efi_set_secure_boot(secure_boot);
|
||||||
|
+
|
||||||
|
reserve_regions();
|
||||||
|
/*
|
||||||
|
* For memblock manipulation, the cap should come after the memblock_add().
|
||||||
|
--- a/drivers/firmware/efi/fdtparams.c
|
||||||
|
+++ b/drivers/firmware/efi/fdtparams.c
|
||||||
|
@@ -16,6 +16,7 @@ enum {
|
||||||
|
MMSIZE,
|
||||||
|
DCSIZE,
|
||||||
|
DCVERS,
|
||||||
|
+ SBMODE,
|
||||||
|
|
||||||
|
PARAMCOUNT
|
||||||
|
};
|
||||||
|
@@ -26,6 +27,7 @@ static __initconst const char name[][22]
|
||||||
|
[MMSIZE] = "MemMap Size ",
|
||||||
|
[DCSIZE] = "MemMap Desc. Size ",
|
||||||
|
[DCVERS] = "MemMap Desc. Version ",
|
||||||
|
+ [SBMODE] = "Secure Boot Enabled ",
|
||||||
|
};
|
||||||
|
|
||||||
|
static __initconst const struct {
|
||||||
|
@@ -43,6 +45,7 @@ static __initconst const struct {
|
||||||
|
[MMSIZE] = "xen,uefi-mmap-size",
|
||||||
|
[DCSIZE] = "xen,uefi-mmap-desc-size",
|
||||||
|
[DCVERS] = "xen,uefi-mmap-desc-ver",
|
||||||
|
+ [SBMODE] = "",
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
#endif
|
||||||
|
@@ -53,6 +56,7 @@ static __initconst const struct {
|
||||||
|
[MMSIZE] = "linux,uefi-mmap-size",
|
||||||
|
[DCSIZE] = "linux,uefi-mmap-desc-size",
|
||||||
|
[DCVERS] = "linux,uefi-mmap-desc-ver",
|
||||||
|
+ [SBMODE] = "linux,uefi-secure-boot",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@@ -64,6 +68,11 @@ static int __init efi_get_fdt_prop(const
|
||||||
|
int len;
|
||||||
|
u64 val;
|
||||||
|
|
||||||
|
+ if (!pname[0]) {
|
||||||
|
+ memset(var, 0, size);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
prop = fdt_getprop(fdt, node, pname, &len);
|
||||||
|
if (!prop)
|
||||||
|
return 1;
|
||||||
|
@@ -81,7 +90,7 @@ static int __init efi_get_fdt_prop(const
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-u64 __init efi_get_fdt_params(struct efi_memory_map_data *mm)
|
||||||
|
+u64 __init efi_get_fdt_params(struct efi_memory_map_data *mm, u32 *secure_boot)
|
||||||
|
{
|
||||||
|
const void *fdt = initial_boot_params;
|
||||||
|
unsigned long systab;
|
||||||
|
@@ -95,6 +104,7 @@ u64 __init efi_get_fdt_params(struct efi
|
||||||
|
[MMSIZE] = { &mm->size, sizeof(mm->size) },
|
||||||
|
[DCSIZE] = { &mm->desc_size, sizeof(mm->desc_size) },
|
||||||
|
[DCVERS] = { &mm->desc_version, sizeof(mm->desc_version) },
|
||||||
|
+ [SBMODE] = { secure_boot, sizeof(*secure_boot) },
|
||||||
|
};
|
||||||
|
|
||||||
|
BUILD_BUG_ON(ARRAY_SIZE(target) != ARRAY_SIZE(name));
|
||||||
|
--- a/drivers/firmware/efi/libstub/fdt.c
|
||||||
|
+++ b/drivers/firmware/efi/libstub/fdt.c
|
||||||
|
@@ -132,6 +132,12 @@ static efi_status_t update_fdt(void *ori
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ fdt_val32 = cpu_to_fdt32(efi_get_secureboot());
|
||||||
|
+ status = fdt_setprop(fdt, node, "linux,uefi-secure-boot",
|
||||||
|
+ &fdt_val32, sizeof(fdt_val32));
|
||||||
|
+ if (status)
|
||||||
|
+ goto fdt_set_fail;
|
||||||
|
+
|
||||||
|
/* Shrink the FDT back to its minimum size: */
|
||||||
|
fdt_pack(fdt);
|
||||||
|
|
||||||
|
--- a/include/linux/efi.h
|
||||||
|
+++ b/include/linux/efi.h
|
||||||
|
@@ -753,7 +753,8 @@ extern int efi_mem_desc_lookup(u64 phys_
|
||||||
|
extern int __efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md);
|
||||||
|
extern void efi_mem_reserve(phys_addr_t addr, u64 size);
|
||||||
|
extern int efi_mem_reserve_persistent(phys_addr_t addr, u64 size);
|
||||||
|
-extern u64 efi_get_fdt_params(struct efi_memory_map_data *data);
|
||||||
|
+extern u64 efi_get_fdt_params(struct efi_memory_map_data *data,
|
||||||
|
+ u32 *secure_boot);
|
||||||
|
extern struct kobject *efi_kobj;
|
||||||
|
|
||||||
|
extern int efi_reboot_quirk_mode;
|
153
debian/patches/features/all/lockdown/efi-add-an-efi_secure_boot-flag-to-indicate-secure-b.patch
vendored
Normal file
153
debian/patches/features/all/lockdown/efi-add-an-efi_secure_boot-flag-to-indicate-secure-b.patch
vendored
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
From: David Howells <dhowells@redhat.com>
|
||||||
|
Date: Mon, 18 Feb 2019 12:45:03 +0000
|
||||||
|
Subject: [28/30] efi: Add an EFI_SECURE_BOOT flag to indicate secure boot mode
|
||||||
|
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/commit?id=a5d70c55c603233c192b375f72116a395909da28
|
||||||
|
|
||||||
|
UEFI machines can be booted in Secure Boot mode. Add an EFI_SECURE_BOOT
|
||||||
|
flag that can be passed to efi_enabled() to find out whether secure boot is
|
||||||
|
enabled.
|
||||||
|
|
||||||
|
Move the switch-statement in x86's setup_arch() that inteprets the
|
||||||
|
secure_boot boot parameter to generic code and set the bit there.
|
||||||
|
|
||||||
|
Suggested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
|
||||||
|
Signed-off-by: David Howells <dhowells@redhat.com>
|
||||||
|
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
|
||||||
|
cc: linux-efi@vger.kernel.org
|
||||||
|
[rperier: Forward-ported to 5.5:
|
||||||
|
- Use pr_warn()
|
||||||
|
- Adjust context]
|
||||||
|
[bwh: Forward-ported to 5.6: adjust context]
|
||||||
|
[bwh: Forward-ported to 5.7:
|
||||||
|
- Use the next available bit in efi.flags
|
||||||
|
- Adjust context]
|
||||||
|
---
|
||||||
|
arch/x86/kernel/setup.c | 14 +----------
|
||||||
|
drivers/firmware/efi/Makefile | 1 +
|
||||||
|
drivers/firmware/efi/secureboot.c | 39 +++++++++++++++++++++++++++++++
|
||||||
|
include/linux/efi.h | 16 ++++++++-----
|
||||||
|
4 files changed, 51 insertions(+), 19 deletions(-)
|
||||||
|
create mode 100644 drivers/firmware/efi/secureboot.c
|
||||||
|
|
||||||
|
--- a/arch/x86/kernel/setup.c
|
||||||
|
+++ b/arch/x86/kernel/setup.c
|
||||||
|
@@ -1149,19 +1149,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
/* Allocate bigger log buffer */
|
||||||
|
setup_log_buf(1);
|
||||||
|
|
||||||
|
- if (efi_enabled(EFI_BOOT)) {
|
||||||
|
- switch (boot_params.secure_boot) {
|
||||||
|
- case efi_secureboot_mode_disabled:
|
||||||
|
- pr_info("Secure boot disabled\n");
|
||||||
|
- break;
|
||||||
|
- case efi_secureboot_mode_enabled:
|
||||||
|
- pr_info("Secure boot enabled\n");
|
||||||
|
- break;
|
||||||
|
- default:
|
||||||
|
- pr_info("Secure boot could not be determined\n");
|
||||||
|
- break;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+ efi_set_secure_boot(boot_params.secure_boot);
|
||||||
|
|
||||||
|
reserve_initrd();
|
||||||
|
|
||||||
|
--- a/drivers/firmware/efi/Makefile
|
||||||
|
+++ b/drivers/firmware/efi/Makefile
|
||||||
|
@@ -25,6 +25,7 @@ subdir-$(CONFIG_EFI_STUB) += libstub
|
||||||
|
obj-$(CONFIG_EFI_BOOTLOADER_CONTROL) += efibc.o
|
||||||
|
obj-$(CONFIG_EFI_TEST) += test/
|
||||||
|
obj-$(CONFIG_EFI_DEV_PATH_PARSER) += dev-path-parser.o
|
||||||
|
+obj-$(CONFIG_EFI) += secureboot.o
|
||||||
|
obj-$(CONFIG_APPLE_PROPERTIES) += apple-properties.o
|
||||||
|
obj-$(CONFIG_EFI_RCI2_TABLE) += rci2-table.o
|
||||||
|
obj-$(CONFIG_EFI_EMBEDDED_FIRMWARE) += embedded-firmware.o
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/drivers/firmware/efi/secureboot.c
|
||||||
|
@@ -0,0 +1,39 @@
|
||||||
|
+
|
||||||
|
+/* Core kernel secure boot support.
|
||||||
|
+ *
|
||||||
|
+ * Copyright (C) 2017 Red Hat, Inc. All Rights Reserved.
|
||||||
|
+ * Written by David Howells (dhowells@redhat.com)
|
||||||
|
+ *
|
||||||
|
+ * This program is free software; you can redistribute it and/or
|
||||||
|
+ * modify it under the terms of the GNU General Public Licence
|
||||||
|
+ * as published by the Free Software Foundation; either version
|
||||||
|
+ * 2 of the Licence, or (at your option) any later version.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||||
|
+
|
||||||
|
+#include <linux/efi.h>
|
||||||
|
+#include <linux/kernel.h>
|
||||||
|
+#include <linux/printk.h>
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * Decide what to do when UEFI secure boot mode is enabled.
|
||||||
|
+ */
|
||||||
|
+void __init efi_set_secure_boot(enum efi_secureboot_mode mode)
|
||||||
|
+{
|
||||||
|
+ if (efi_enabled(EFI_BOOT)) {
|
||||||
|
+ switch (mode) {
|
||||||
|
+ case efi_secureboot_mode_disabled:
|
||||||
|
+ pr_info("Secure boot disabled\n");
|
||||||
|
+ break;
|
||||||
|
+ case efi_secureboot_mode_enabled:
|
||||||
|
+ set_bit(EFI_SECURE_BOOT, &efi.flags);
|
||||||
|
+ pr_info("Secure boot enabled\n");
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ pr_warn("Secure boot could not be determined (mode %u)\n",
|
||||||
|
+ mode);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
--- a/include/linux/efi.h
|
||||||
|
+++ b/include/linux/efi.h
|
||||||
|
@@ -863,6 +863,14 @@ static inline int efi_range_is_wc(unsign
|
||||||
|
#define EFI_MEM_ATTR 9 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */
|
||||||
|
#define EFI_MEM_NO_SOFT_RESERVE 10 /* Is the kernel configured to ignore soft reservations? */
|
||||||
|
#define EFI_PRESERVE_BS_REGIONS 11 /* Are EFI boot-services memory segments available? */
|
||||||
|
+#define EFI_SECURE_BOOT 12 /* Are we in Secure Boot mode? */
|
||||||
|
+
|
||||||
|
+enum efi_secureboot_mode {
|
||||||
|
+ efi_secureboot_mode_unset,
|
||||||
|
+ efi_secureboot_mode_unknown,
|
||||||
|
+ efi_secureboot_mode_disabled,
|
||||||
|
+ efi_secureboot_mode_enabled,
|
||||||
|
+};
|
||||||
|
|
||||||
|
#ifdef CONFIG_EFI
|
||||||
|
/*
|
||||||
|
@@ -887,6 +895,7 @@ static inline bool efi_rt_services_suppo
|
||||||
|
return (efi.runtime_supported_mask & mask) == mask;
|
||||||
|
}
|
||||||
|
extern void efi_find_mirror(void);
|
||||||
|
+extern void __init efi_set_secure_boot(enum efi_secureboot_mode mode);
|
||||||
|
#else
|
||||||
|
static inline bool efi_enabled(int feature)
|
||||||
|
{
|
||||||
|
@@ -906,6 +915,7 @@ static inline bool efi_rt_services_suppo
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void efi_find_mirror(void) {}
|
||||||
|
+static inline void efi_set_secure_boot(enum efi_secureboot_mode mode) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extern int efi_status_to_err(efi_status_t status);
|
||||||
|
@@ -1124,13 +1134,6 @@ static inline bool efi_runtime_disabled(
|
||||||
|
extern void efi_call_virt_check_flags(unsigned long flags, const void *caller);
|
||||||
|
extern unsigned long efi_call_virt_save_flags(void);
|
||||||
|
|
||||||
|
-enum efi_secureboot_mode {
|
||||||
|
- efi_secureboot_mode_unset,
|
||||||
|
- efi_secureboot_mode_unknown,
|
||||||
|
- efi_secureboot_mode_disabled,
|
||||||
|
- efi_secureboot_mode_enabled,
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
static inline
|
||||||
|
enum efi_secureboot_mode efi_get_secureboot_mode(efi_get_variable_t *get_var)
|
||||||
|
{
|
121
debian/patches/features/all/lockdown/efi-lock-down-the-kernel-if-booted-in-secure-boot-mo.patch
vendored
Normal file
121
debian/patches/features/all/lockdown/efi-lock-down-the-kernel-if-booted-in-secure-boot-mo.patch
vendored
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
From: Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
Date: Tue, 10 Sep 2019 11:54:28 +0100
|
||||||
|
Subject: efi: Lock down the kernel if booted in secure boot mode
|
||||||
|
|
||||||
|
Based on an earlier patch by David Howells, who wrote the following
|
||||||
|
description:
|
||||||
|
|
||||||
|
> UEFI Secure Boot provides a mechanism for ensuring that the firmware will
|
||||||
|
> only load signed bootloaders and kernels. Certain use cases may also
|
||||||
|
> require that all kernel modules also be signed. Add a configuration option
|
||||||
|
> that to lock down the kernel - which includes requiring validly signed
|
||||||
|
> modules - if the kernel is secure-booted.
|
||||||
|
|
||||||
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
[Salvatore Bonaccorso: After fixing https://bugs.debian.org/956197 the
|
||||||
|
help text for LOCK_DOWN_IN_EFI_SECURE_BOOT was adjusted to mention that
|
||||||
|
lockdown is triggered in integrity mode (https://bugs.debian.org/1025417)]
|
||||||
|
Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
|
||||||
|
---
|
||||||
|
arch/x86/kernel/setup.c | 4 ++--
|
||||||
|
drivers/firmware/efi/secureboot.c | 3 +++
|
||||||
|
include/linux/security.h | 6 ++++++
|
||||||
|
security/lockdown/Kconfig | 15 +++++++++++++++
|
||||||
|
security/lockdown/lockdown.c | 2 +-
|
||||||
|
5 files changed, 27 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
--- a/arch/x86/kernel/setup.c
|
||||||
|
+++ b/arch/x86/kernel/setup.c
|
||||||
|
@@ -986,6 +986,8 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
if (efi_enabled(EFI_BOOT))
|
||||||
|
efi_init();
|
||||||
|
|
||||||
|
+ efi_set_secure_boot(boot_params.secure_boot);
|
||||||
|
+
|
||||||
|
reserve_ibft_region();
|
||||||
|
x86_init.resources.dmi_setup();
|
||||||
|
|
||||||
|
@@ -1149,8 +1151,6 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
/* Allocate bigger log buffer */
|
||||||
|
setup_log_buf(1);
|
||||||
|
|
||||||
|
- efi_set_secure_boot(boot_params.secure_boot);
|
||||||
|
-
|
||||||
|
reserve_initrd();
|
||||||
|
|
||||||
|
acpi_table_upgrade();
|
||||||
|
--- a/drivers/firmware/efi/secureboot.c
|
||||||
|
+++ b/drivers/firmware/efi/secureboot.c
|
||||||
|
@@ -15,6 +15,7 @@
|
||||||
|
#include <linux/efi.h>
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/printk.h>
|
||||||
|
+#include <linux/security.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decide what to do when UEFI secure boot mode is enabled.
|
||||||
|
@@ -28,6 +29,10 @@ void __init efi_set_secure_boot(enum efi
|
||||||
|
break;
|
||||||
|
case efi_secureboot_mode_enabled:
|
||||||
|
set_bit(EFI_SECURE_BOOT, &efi.flags);
|
||||||
|
+#ifdef CONFIG_LOCK_DOWN_IN_EFI_SECURE_BOOT
|
||||||
|
+ lock_kernel_down("EFI Secure Boot",
|
||||||
|
+ LOCKDOWN_INTEGRITY_MAX);
|
||||||
|
+#endif
|
||||||
|
pr_info("Secure boot enabled\n");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
--- a/include/linux/security.h
|
||||||
|
+++ b/include/linux/security.h
|
||||||
|
@@ -573,6 +573,7 @@ int security_inode_notifysecctx(struct i
|
||||||
|
int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen);
|
||||||
|
int security_inode_getsecctx(struct inode *inode, struct lsm_context *cp);
|
||||||
|
int security_locked_down(enum lockdown_reason what);
|
||||||
|
+int lock_kernel_down(const char *where, enum lockdown_reason level);
|
||||||
|
int lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len,
|
||||||
|
void *val, size_t val_len, u64 id, u64 flags);
|
||||||
|
int security_bdev_alloc(struct block_device *bdev);
|
||||||
|
@@ -1574,6 +1575,11 @@ static inline int security_locked_down(e
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
+static inline int
|
||||||
|
+lock_kernel_down(const char *where, enum lockdown_reason level)
|
||||||
|
+{
|
||||||
|
+ return -EOPNOTSUPP;
|
||||||
|
+}
|
||||||
|
static inline int lsm_fill_user_ctx(struct lsm_ctx __user *uctx,
|
||||||
|
u32 *uctx_len, void *val, size_t val_len,
|
||||||
|
u64 id, u64 flags)
|
||||||
|
--- a/security/lockdown/Kconfig
|
||||||
|
+++ b/security/lockdown/Kconfig
|
||||||
|
@@ -45,3 +45,18 @@ config LOCK_DOWN_KERNEL_FORCE_CONFIDENTI
|
||||||
|
disabled.
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
+
|
||||||
|
+config LOCK_DOWN_IN_EFI_SECURE_BOOT
|
||||||
|
+ bool "Lock down the kernel in EFI Secure Boot mode"
|
||||||
|
+ default n
|
||||||
|
+ depends on SECURITY_LOCKDOWN_LSM
|
||||||
|
+ depends on EFI
|
||||||
|
+ select SECURITY_LOCKDOWN_LSM_EARLY
|
||||||
|
+ help
|
||||||
|
+ UEFI Secure Boot provides a mechanism for ensuring that the firmware
|
||||||
|
+ will only load signed bootloaders and kernels. Secure boot mode may
|
||||||
|
+ be determined from EFI variables provided by the system firmware if
|
||||||
|
+ not indicated by the boot parameters.
|
||||||
|
+
|
||||||
|
+ Enabling this option results in kernel lockdown being
|
||||||
|
+ triggered in integrity mode if EFI Secure Boot is set.
|
||||||
|
--- a/security/lockdown/lockdown.c
|
||||||
|
+++ b/security/lockdown/lockdown.c
|
||||||
|
@@ -24,7 +24,7 @@ static const enum lockdown_reason lockdo
|
||||||
|
/*
|
||||||
|
* Put the kernel into lock-down mode.
|
||||||
|
*/
|
||||||
|
-static int lock_kernel_down(const char *where, enum lockdown_reason level)
|
||||||
|
+int lock_kernel_down(const char *where, enum lockdown_reason level)
|
||||||
|
{
|
||||||
|
if (kernel_locked_down >= level)
|
||||||
|
return -EPERM;
|
75
debian/patches/features/all/lockdown/mtd-disable-slram-and-phram-when-locked-down.patch
vendored
Normal file
75
debian/patches/features/all/lockdown/mtd-disable-slram-and-phram-when-locked-down.patch
vendored
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
From: Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
Date: Fri, 30 Aug 2019 15:54:24 +0100
|
||||||
|
Subject: mtd: phram,slram: Disable when the kernel is locked down
|
||||||
|
Forwarded: https://lore.kernel.org/linux-security-module/20190830154720.eekfjt6c4jzvlbfz@decadent.org.uk/
|
||||||
|
|
||||||
|
These drivers allow mapping arbitrary memory ranges as MTD devices.
|
||||||
|
This should be disabled to preserve the kernel's integrity when it is
|
||||||
|
locked down.
|
||||||
|
|
||||||
|
* Add the HWPARAM flag to the module parameters
|
||||||
|
* When slram is built-in, it uses __setup() to read kernel parameters,
|
||||||
|
so add an explicit check security_locked_down() check
|
||||||
|
|
||||||
|
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||||
|
Cc: Matthew Garrett <mjg59@google.com>
|
||||||
|
Cc: David Howells <dhowells@redhat.com>
|
||||||
|
Cc: Joern Engel <joern@lazybastard.org>
|
||||||
|
Cc: linux-mtd@lists.infradead.org
|
||||||
|
---
|
||||||
|
drivers/mtd/devices/phram.c | 6 +++++-
|
||||||
|
drivers/mtd/devices/slram.c | 9 ++++++++-
|
||||||
|
2 files changed, 13 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/mtd/devices/phram.c
|
||||||
|
+++ b/drivers/mtd/devices/phram.c
|
||||||
|
@@ -365,7 +365,11 @@ static int phram_param_call(const char *
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-module_param_call(phram, phram_param_call, NULL, NULL, 0200);
|
||||||
|
+static const struct kernel_param_ops phram_param_ops = {
|
||||||
|
+ .set = phram_param_call
|
||||||
|
+};
|
||||||
|
+__module_param_call(MODULE_PARAM_PREFIX, phram, &phram_param_ops, NULL,
|
||||||
|
+ 0200, -1, KERNEL_PARAM_FL_HWPARAM | hwparam_iomem);
|
||||||
|
MODULE_PARM_DESC(phram, "Memory region to map. \"phram=<name>,<start>,<length>[,<erasesize>]\"");
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
--- a/drivers/mtd/devices/slram.c
|
||||||
|
+++ b/drivers/mtd/devices/slram.c
|
||||||
|
@@ -43,6 +43,7 @@
|
||||||
|
#include <linux/ioctl.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
+#include <linux/security.h>
|
||||||
|
|
||||||
|
#include <linux/mtd/mtd.h>
|
||||||
|
|
||||||
|
@@ -65,7 +66,7 @@ typedef struct slram_mtd_list {
|
||||||
|
#ifdef MODULE
|
||||||
|
static char *map[SLRAM_MAX_DEVICES_PARAMS];
|
||||||
|
|
||||||
|
-module_param_array(map, charp, NULL, 0);
|
||||||
|
+module_param_hw_array(map, charp, iomem, NULL, 0);
|
||||||
|
MODULE_PARM_DESC(map, "List of memory regions to map. \"map=<name>, <start>, <length / end>\"");
|
||||||
|
#else
|
||||||
|
static char *map;
|
||||||
|
@@ -281,11 +282,17 @@ static int __init init_slram(void)
|
||||||
|
#ifndef MODULE
|
||||||
|
char *devstart;
|
||||||
|
char *devlength;
|
||||||
|
+ int ret;
|
||||||
|
|
||||||
|
if (!map) {
|
||||||
|
E("slram: not enough parameters.\n");
|
||||||
|
return(-EINVAL);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ ret = security_locked_down(LOCKDOWN_MODULE_PARAMETERS);
|
||||||
|
+ if (ret)
|
||||||
|
+ return ret;
|
||||||
|
+
|
||||||
|
while (map) {
|
||||||
|
devname = devstart = devlength = NULL;
|
||||||
|
|
@@ -22,9 +22,9 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/include/linux/perf_event.h
|
--- a/include/linux/perf_event.h
|
||||||
+++ b/include/linux/perf_event.h
|
+++ b/include/linux/perf_event.h
|
||||||
@@ -1659,6 +1659,11 @@ int perf_cpu_time_max_percent_handler(co
|
@@ -1761,6 +1761,11 @@ extern int sysctl_perf_event_sample_rate
|
||||||
int perf_event_max_stack_handler(const struct ctl_table *table, int write,
|
|
||||||
void *buffer, size_t *lenp, loff_t *ppos);
|
extern void perf_sample_event_took(u64 sample_len_ns);
|
||||||
|
|
||||||
+static inline bool perf_paranoid_any(void)
|
+static inline bool perf_paranoid_any(void)
|
||||||
+{
|
+{
|
||||||
@@ -36,7 +36,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/kernel/events/core.c
|
--- a/kernel/events/core.c
|
||||||
+++ b/kernel/events/core.c
|
+++ b/kernel/events/core.c
|
||||||
@@ -449,8 +449,13 @@ static struct kmem_cache *perf_event_cac
|
@@ -463,8 +463,13 @@ static struct kmem_cache *perf_event_cac
|
||||||
* 0 - disallow raw tracepoint access for unpriv
|
* 0 - disallow raw tracepoint access for unpriv
|
||||||
* 1 - disallow cpu events for unpriv
|
* 1 - disallow cpu events for unpriv
|
||||||
* 2 - disallow kernel profiling for unpriv
|
* 2 - disallow kernel profiling for unpriv
|
||||||
@@ -48,9 +48,9 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
int sysctl_perf_event_paranoid __read_mostly = 2;
|
int sysctl_perf_event_paranoid __read_mostly = 2;
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
/* Minimum for 512 kiB + 1 user control page */
|
/* Minimum for 512 kiB + 1 user control page. 'free' kiB per user. */
|
||||||
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
|
static int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024);
|
||||||
@@ -12821,6 +12826,9 @@ SYSCALL_DEFINE5(perf_event_open,
|
@@ -13382,6 +13387,9 @@ SYSCALL_DEFINE5(perf_event_open,
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@@ -58,13 +58,13 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
+ return -EACCES;
|
+ return -EACCES;
|
||||||
+
|
+
|
||||||
/* Do we allow access to perf_event_open(2) ? */
|
/* Do we allow access to perf_event_open(2) ? */
|
||||||
err = security_perf_event_open(&attr, PERF_SECURITY_OPEN);
|
err = security_perf_event_open(PERF_SECURITY_OPEN);
|
||||||
if (err)
|
if (err)
|
||||||
--- a/security/Kconfig
|
--- a/security/Kconfig
|
||||||
+++ b/security/Kconfig
|
+++ b/security/Kconfig
|
||||||
@@ -51,6 +51,15 @@ config PROC_MEM_NO_FORCE
|
@@ -72,6 +72,15 @@ config MSEAL_SYSTEM_MAPPINGS
|
||||||
|
For complete descriptions of memory sealing, please see
|
||||||
endchoice
|
Documentation/userspace-api/mseal.rst
|
||||||
|
|
||||||
+config SECURITY_PERF_EVENTS_RESTRICT
|
+config SECURITY_PERF_EVENTS_RESTRICT
|
||||||
+ bool "Restrict unprivileged use of performance events"
|
+ bool "Restrict unprivileged use of performance events"
|
||||||
|
@@ -22,7 +22,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -2247,6 +2247,8 @@
|
@@ -2306,6 +2306,8 @@
|
||||||
bypassed by not enabling DMAR with this option. In
|
bypassed by not enabling DMAR with this option. In
|
||||||
this case, gfx device will use physical address for
|
this case, gfx device will use physical address for
|
||||||
DMA.
|
DMA.
|
||||||
@@ -68,7 +68,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
} else if (!strncmp(str, "forcedac", 8)) {
|
} else if (!strncmp(str, "forcedac", 8)) {
|
||||||
pr_warn("intel_iommu=forcedac deprecated; use iommu.forcedac instead\n");
|
pr_warn("intel_iommu=forcedac deprecated; use iommu.forcedac instead\n");
|
||||||
iommu_dma_forcedac = true;
|
iommu_dma_forcedac = true;
|
||||||
@@ -1902,6 +1910,9 @@ static int device_def_domain_type(struct
|
@@ -1899,6 +1907,9 @@ static int device_def_domain_type(struct
|
||||||
|
|
||||||
if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
|
if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
|
||||||
return IOMMU_DOMAIN_IDENTITY;
|
return IOMMU_DOMAIN_IDENTITY;
|
||||||
@@ -78,7 +78,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2196,6 +2207,9 @@ static int __init init_dmars(void)
|
@@ -2189,6 +2200,9 @@ static int __init init_dmars(void)
|
||||||
iommu_set_root_entry(iommu);
|
iommu_set_root_entry(iommu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,7 +29,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||||
@@ -6982,6 +6982,10 @@
|
@@ -7117,6 +7117,10 @@
|
||||||
later by a loaded module cannot be set this way.
|
later by a loaded module cannot be set this way.
|
||||||
Example: sysctl.vm.swappiness=40
|
Example: sysctl.vm.swappiness=40
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
Ignore sysrq setting - this boot parameter will
|
Ignore sysrq setting - this boot parameter will
|
||||||
--- a/arch/x86/Kconfig
|
--- a/arch/x86/Kconfig
|
||||||
+++ b/arch/x86/Kconfig
|
+++ b/arch/x86/Kconfig
|
||||||
@@ -3186,6 +3186,14 @@ config COMPAT_32
|
@@ -3150,6 +3150,14 @@ config COMPAT_32
|
||||||
select HAVE_UID16
|
select HAVE_UID16
|
||||||
select OLD_SIGSUSPEND3
|
select OLD_SIGSUSPEND3
|
||||||
|
|
||||||
@@ -57,9 +57,70 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
config COMPAT
|
config COMPAT
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on IA32_EMULATION || X86_X32_ABI
|
depends on IA32_EMULATION || X86_X32_ABI
|
||||||
--- a/arch/x86/entry/common.c
|
--- a/arch/x86/include/asm/elf.h
|
||||||
+++ b/arch/x86/entry/common.c
|
+++ b/arch/x86/include/asm/elf.h
|
||||||
@@ -64,7 +64,7 @@ static __always_inline bool do_syscall_x
|
@@ -12,6 +12,9 @@
|
||||||
|
#include <asm/user.h>
|
||||||
|
#include <asm/auxvec.h>
|
||||||
|
#include <asm/fsgsbase.h>
|
||||||
|
+#ifndef COMPILE_OFFSETS /* avoid a circular dependency on asm-offsets.h */
|
||||||
|
+#include <asm/syscall.h>
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
typedef unsigned long elf_greg_t;
|
||||||
|
|
||||||
|
@@ -148,7 +151,8 @@ do { \
|
||||||
|
|
||||||
|
#define compat_elf_check_arch(x) \
|
||||||
|
((elf_check_arch_ia32(x) && ia32_enabled_verbose()) || \
|
||||||
|
- (IS_ENABLED(CONFIG_X86_X32_ABI) && (x)->e_machine == EM_X86_64))
|
||||||
|
+ (IS_ENABLED(CONFIG_X86_X32_ABI) && x32_enabled && \
|
||||||
|
+ (x)->e_machine == EM_X86_64))
|
||||||
|
|
||||||
|
static inline void elf_common_init(struct thread_struct *t,
|
||||||
|
struct pt_regs *regs, const u16 ds)
|
||||||
|
--- a/arch/x86/include/asm/syscall.h
|
||||||
|
+++ b/arch/x86/include/asm/syscall.h
|
||||||
|
@@ -13,6 +13,7 @@
|
||||||
|
#include <uapi/linux/audit.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
|
#include <linux/err.h>
|
||||||
|
+#include <linux/jump_label.h>
|
||||||
|
#include <asm/thread_info.h> /* for TS_COMPAT */
|
||||||
|
#include <asm/unistd.h>
|
||||||
|
|
||||||
|
@@ -28,6 +29,18 @@ extern long ia32_sys_call(const struct p
|
||||||
|
extern long x32_sys_call(const struct pt_regs *, unsigned int nr);
|
||||||
|
extern long x64_sys_call(const struct pt_regs *, unsigned int nr);
|
||||||
|
|
||||||
|
+#if defined(CONFIG_X86_X32_ABI)
|
||||||
|
+#if defined(CONFIG_X86_X32_DISABLED)
|
||||||
|
+DECLARE_STATIC_KEY_FALSE(x32_enabled_skey);
|
||||||
|
+#define x32_enabled static_branch_unlikely(&x32_enabled_skey)
|
||||||
|
+#else
|
||||||
|
+DECLARE_STATIC_KEY_TRUE(x32_enabled_skey);
|
||||||
|
+#define x32_enabled static_branch_likely(&x32_enabled_skey)
|
||||||
|
+#endif
|
||||||
|
+#else
|
||||||
|
+#define x32_enabled 0
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* Only the low 32 bits of orig_ax are meaningful, so we return int.
|
||||||
|
* This importantly ignores the high bits on 64-bit, so comparisons
|
||||||
|
--- a/arch/x86/entry/syscall_64.c
|
||||||
|
+++ b/arch/x86/entry/syscall_64.c
|
||||||
|
@@ -7,6 +7,9 @@
|
||||||
|
#include <linux/syscalls.h>
|
||||||
|
#include <linux/entry-common.h>
|
||||||
|
#include <linux/nospec.h>
|
||||||
|
+#include <linux/moduleparam.h>
|
||||||
|
+#undef MODULE_PARAM_PREFIX
|
||||||
|
+#define MODULE_PARAM_PREFIX "syscall."
|
||||||
|
#include <asm/syscall.h>
|
||||||
|
|
||||||
|
#define __SYSCALL(nr, sym) extern long __x64_##sym(const struct pt_regs *);
|
||||||
|
@@ -75,7 +78,7 @@ static __always_inline bool do_syscall_x
|
||||||
*/
|
*/
|
||||||
unsigned int xnr = nr - __X32_SYSCALL_BIT;
|
unsigned int xnr = nr - __X32_SYSCALL_BIT;
|
||||||
|
|
||||||
@@ -68,23 +129,12 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
xnr = array_index_nospec(xnr, X32_NR_syscalls);
|
xnr = array_index_nospec(xnr, X32_NR_syscalls);
|
||||||
regs->ax = x32_sys_call(regs, xnr);
|
regs->ax = x32_sys_call(regs, xnr);
|
||||||
return true;
|
return true;
|
||||||
--- a/arch/x86/entry/syscall_x32.c
|
@@ -139,3 +142,48 @@ __visible noinstr bool do_syscall_64(str
|
||||||
+++ b/arch/x86/entry/syscall_x32.c
|
/* Use SYSRET to exit to userspace */
|
||||||
@@ -4,6 +4,9 @@
|
return true;
|
||||||
#include <linux/linkage.h>
|
|
||||||
#include <linux/sys.h>
|
|
||||||
#include <linux/cache.h>
|
|
||||||
+#include <linux/moduleparam.h>
|
|
||||||
+#undef MODULE_PARAM_PREFIX
|
|
||||||
+#define MODULE_PARAM_PREFIX "syscall."
|
|
||||||
#include <linux/syscalls.h>
|
|
||||||
#include <asm/syscall.h>
|
|
||||||
|
|
||||||
@@ -23,3 +26,46 @@ long x32_sys_call(const struct pt_regs *
|
|
||||||
default: return __x64_sys_ni_syscall(regs);
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
+
|
+
|
||||||
|
+#ifdef CONFIG_X86_X32_ABI
|
||||||
+/* Maybe enable x32 syscalls */
|
+/* Maybe enable x32 syscalls */
|
||||||
+
|
+
|
||||||
+#if defined(CONFIG_X86_X32_DISABLED)
|
+#if defined(CONFIG_X86_X32_DISABLED)
|
||||||
@@ -127,54 +177,4 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
+arch_param_cb(x32, &x32_param_ops, NULL, 0444);
|
+arch_param_cb(x32, &x32_param_ops, NULL, 0444);
|
||||||
--- a/arch/x86/include/asm/elf.h
|
|
||||||
+++ b/arch/x86/include/asm/elf.h
|
|
||||||
@@ -12,6 +12,9 @@
|
|
||||||
#include <asm/user.h>
|
|
||||||
#include <asm/auxvec.h>
|
|
||||||
#include <asm/fsgsbase.h>
|
|
||||||
+#ifndef COMPILE_OFFSETS /* avoid a circular dependency on asm-offsets.h */
|
|
||||||
+#include <asm/syscall.h>
|
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
typedef unsigned long elf_greg_t;
|
|
||||||
|
|
||||||
@@ -151,7 +154,8 @@ do { \
|
|
||||||
|
|
||||||
#define compat_elf_check_arch(x) \
|
|
||||||
((elf_check_arch_ia32(x) && ia32_enabled_verbose()) || \
|
|
||||||
- (IS_ENABLED(CONFIG_X86_X32_ABI) && (x)->e_machine == EM_X86_64))
|
|
||||||
+ (IS_ENABLED(CONFIG_X86_X32_ABI) && x32_enabled && \
|
|
||||||
+ (x)->e_machine == EM_X86_64))
|
|
||||||
|
|
||||||
static inline void elf_common_init(struct thread_struct *t,
|
|
||||||
struct pt_regs *regs, const u16 ds)
|
|
||||||
--- a/arch/x86/include/asm/syscall.h
|
|
||||||
+++ b/arch/x86/include/asm/syscall.h
|
|
||||||
@@ -13,6 +13,7 @@
|
|
||||||
#include <uapi/linux/audit.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/err.h>
|
|
||||||
+#include <linux/jump_label.h>
|
|
||||||
#include <asm/thread_info.h> /* for TS_COMPAT */
|
|
||||||
#include <asm/unistd.h>
|
|
||||||
|
|
||||||
@@ -28,6 +29,18 @@ extern long ia32_sys_call(const struct p
|
|
||||||
extern long x32_sys_call(const struct pt_regs *, unsigned int nr);
|
|
||||||
extern long x64_sys_call(const struct pt_regs *, unsigned int nr);
|
|
||||||
|
|
||||||
+#if defined(CONFIG_X86_X32_ABI)
|
|
||||||
+#if defined(CONFIG_X86_X32_DISABLED)
|
|
||||||
+DECLARE_STATIC_KEY_FALSE(x32_enabled_skey);
|
|
||||||
+#define x32_enabled static_branch_unlikely(&x32_enabled_skey)
|
|
||||||
+#else
|
|
||||||
+DECLARE_STATIC_KEY_TRUE(x32_enabled_skey);
|
|
||||||
+#define x32_enabled static_branch_likely(&x32_enabled_skey)
|
|
||||||
+#endif
|
|
||||||
+#else
|
|
||||||
+#define x32_enabled 0
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Only the low 32 bits of orig_ax are meaningful, so we return int.
|
|
||||||
* This importantly ignores the high bits on 64-bit, so comparisons
|
|
||||||
|
@@ -1,52 +0,0 @@
|
|||||||
this reverts following commit:
|
|
||||||
|
|
||||||
From: Josh Poimboeuf <jpoimboe@redhat.com>
|
|
||||||
Date: Thu, 14 Jan 2021 16:32:42 -0600
|
|
||||||
Subject: objtool: Don't fail the kernel build on fatal errors
|
|
||||||
|
|
||||||
[ Upstream commit 655cf86548a3938538642a6df27dd359e13c86bd ]
|
|
||||||
|
|
||||||
This is basically a revert of commit 644592d32837 ("objtool: Fail the
|
|
||||||
kernel build on fatal errors").
|
|
||||||
|
|
||||||
That change turned out to be more trouble than it's worth. Failing the
|
|
||||||
build is an extreme measure which sometimes gets too much attention and
|
|
||||||
blocks CI build testing.
|
|
||||||
|
|
||||||
These fatal-type warnings aren't yet as rare as we'd hope, due to the
|
|
||||||
ever-increasing matrix of supported toolchains/plugins and their
|
|
||||||
fast-changing nature as of late.
|
|
||||||
|
|
||||||
Also, there are more people (and bots) looking for objtool warnings than
|
|
||||||
ever before, so even non-fatal warnings aren't likely to be ignored for
|
|
||||||
long.
|
|
||||||
|
|
||||||
Suggested-by: Nick Desaulniers <ndesaulniers@google.com>
|
|
||||||
Reviewed-by: Miroslav Benes <mbenes@suse.cz>
|
|
||||||
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
|
|
||||||
Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
|
|
||||||
Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
|
|
||||||
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
||||||
|
|
||||||
--- a/tools/objtool/check.c
|
|
||||||
+++ b/tools/objtool/check.c
|
|
||||||
@@ -4771,10 +4771,14 @@ int check(struct objtool_file *file)
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
- /*
|
|
||||||
- * For now, don't fail the kernel build on fatal warnings. These
|
|
||||||
- * errors are still fairly common due to the growing matrix of
|
|
||||||
- * supported toolchains and their recent pace of change.
|
|
||||||
- */
|
|
||||||
+ if (ret < 0) {
|
|
||||||
+ /*
|
|
||||||
+ * Fatal error. The binary is corrupt or otherwise broken in
|
|
||||||
+ * some way, or objtool itself is broken. Fail the kernel
|
|
||||||
+ * build.
|
|
||||||
+ */
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/ipv4/af_inet.c
|
--- a/net/ipv4/af_inet.c
|
||||||
+++ b/net/ipv4/af_inet.c
|
+++ b/net/ipv4/af_inet.c
|
||||||
@@ -1790,7 +1790,7 @@ static __net_init int inet_init_net(stru
|
@@ -1787,7 +1787,7 @@ static __net_init int inet_init_net(stru
|
||||||
/*
|
/*
|
||||||
* Set defaults for local port range
|
* Set defaults for local port range
|
||||||
*/
|
*/
|
@@ -1,6 +1,6 @@
|
|||||||
--- a/net/bridge/br_input.c
|
--- a/net/bridge/br_input.c
|
||||||
+++ b/net/bridge/br_input.c
|
+++ b/net/bridge/br_input.c
|
||||||
@@ -383,7 +383,11 @@ static rx_handler_result_t br_handle_fra
|
@@ -384,7 +384,11 @@ static rx_handler_result_t br_handle_fra
|
||||||
|
|
||||||
case 0x01: /* IEEE MAC (Pause) */
|
case 0x01: /* IEEE MAC (Pause) */
|
||||||
reason = SKB_DROP_REASON_MAC_IEEE_MAC_CONTROL;
|
reason = SKB_DROP_REASON_MAC_IEEE_MAC_CONTROL;
|
34
debian/patches/misc-openwrt/0102-mac80211-avoid-crashing-missing-band.patch
vendored
Normal file
34
debian/patches/misc-openwrt/0102-mac80211-avoid-crashing-missing-band.patch
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
From: David Bauer <mail@david-bauer.net>
|
||||||
|
Date: Thu, 30 Nov 2023 07:32:52 +0100
|
||||||
|
Subject: [PATCH] mac80211: avoid crashing on invalid band info
|
||||||
|
|
||||||
|
Frequent crashes have been observed on MT7916 based platforms. While the
|
||||||
|
root of these crashes are currently unknown, they happen when decoding
|
||||||
|
rate information of connected STAs in AP mode. The rate-information is
|
||||||
|
associated with a band which is not available on the PHY.
|
||||||
|
|
||||||
|
Check for this condition in order to avoid crashing the whole system.
|
||||||
|
This patch should be removed once the roout cause has been found and
|
||||||
|
fixed.
|
||||||
|
|
||||||
|
Link: https://github.com/freifunk-gluon/gluon/issues/2980
|
||||||
|
|
||||||
|
Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/sta_info.c
|
||||||
|
+++ b/net/mac80211/sta_info.c
|
||||||
|
@@ -2468,6 +2468,13 @@ static void sta_stats_decode_rate(struct
|
||||||
|
|
||||||
|
sband = local->hw.wiphy->bands[band];
|
||||||
|
|
||||||
|
+ if (!sband) {
|
||||||
|
+ wiphy_warn(local->hw.wiphy,
|
||||||
|
+ "Invalid band %d\n",
|
||||||
|
+ band);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (WARN_ON_ONCE(!sband->bitrates))
|
||||||
|
break;
|
||||||
|
|
38
debian/patches/misc-openwrt/0103-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch
vendored
Normal file
38
debian/patches/misc-openwrt/0103-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
From b478e06a16a8baa00c5ecc87c1d636981f2206d5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
Date: Tue, 29 Oct 2019 10:25:25 +0100
|
||||||
|
Subject: [PATCH] mac80211: sta: randomize BA session dialog token allocator
|
||||||
|
|
||||||
|
We currently always start the dialog token generator at zero,
|
||||||
|
so the first dialog token we use is always 1. This would be
|
||||||
|
OK if we had a perfect guarantee that we always do a proper
|
||||||
|
deauth/re-auth handshake, but in IBSS mode this doesn't always
|
||||||
|
happen properly.
|
||||||
|
|
||||||
|
To make problems with block ack (aggregation) sessions getting
|
||||||
|
stuck less likely, randomize the dialog token so if we start a
|
||||||
|
new session but the peer still has old state for us, it can
|
||||||
|
better detect this.
|
||||||
|
|
||||||
|
This is really just a workaround to make things a bit more
|
||||||
|
robust than they are now - a better fix would be to do a full
|
||||||
|
authentication handshake in IBSS mode upon having discovered a
|
||||||
|
new station, and on the receiver resetting the state (removing
|
||||||
|
and re-adding the station) on receiving the authentication
|
||||||
|
packet.
|
||||||
|
|
||||||
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
---
|
||||||
|
net/mac80211/sta_info.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
--- a/net/mac80211/sta_info.c
|
||||||
|
+++ b/net/mac80211/sta_info.c
|
||||||
|
@@ -582,6 +582,7 @@ __sta_info_alloc(struct ieee80211_sub_if
|
||||||
|
spin_lock_init(&sta->ps_lock);
|
||||||
|
INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames);
|
||||||
|
wiphy_work_init(&sta->ampdu_mlme.work, ieee80211_ba_session_work);
|
||||||
|
+ sta->ampdu_mlme.dialog_token_allocator = get_random_u32_below(U8_MAX);
|
||||||
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
|
if (ieee80211_vif_is_mesh(&sdata->vif)) {
|
||||||
|
sta->mesh = kzalloc(sizeof(*sta->mesh), gfp);
|
21
debian/patches/misc-openwrt/0104-mac80211-minstrel_ht-fix-MINSTREL_FRAC-macro.patch
vendored
Normal file
21
debian/patches/misc-openwrt/0104-mac80211-minstrel_ht-fix-MINSTREL_FRAC-macro.patch
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Wed, 28 Apr 2021 21:03:13 +0200
|
||||||
|
Subject: [PATCH] mac80211: minstrel_ht: fix MINSTREL_FRAC macro
|
||||||
|
|
||||||
|
Add missing braces to avoid issues with e.g. using additions in the
|
||||||
|
div expression
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/rc80211_minstrel_ht.h
|
||||||
|
+++ b/net/mac80211/rc80211_minstrel_ht.h
|
||||||
|
@@ -14,7 +14,7 @@
|
||||||
|
|
||||||
|
/* scaled fraction values */
|
||||||
|
#define MINSTREL_SCALE 12
|
||||||
|
-#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / div)
|
||||||
|
+#define MINSTREL_FRAC(val, div) (((val) << MINSTREL_SCALE) / (div))
|
||||||
|
#define MINSTREL_TRUNC(val) ((val) >> MINSTREL_SCALE)
|
||||||
|
|
||||||
|
#define EWMA_LEVEL 96 /* ewma weighting factor [/EWMA_DIV] */
|
30
debian/patches/misc-openwrt/0105-mac80211-minstrel_ht-reduce-fluctuations-in-rate-pro.patch
vendored
Normal file
30
debian/patches/misc-openwrt/0105-mac80211-minstrel_ht-reduce-fluctuations-in-rate-pro.patch
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Sat, 6 Feb 2021 16:08:01 +0100
|
||||||
|
Subject: [PATCH] mac80211: minstrel_ht: reduce fluctuations in rate
|
||||||
|
probability stats
|
||||||
|
|
||||||
|
In some scenarios when there is a lot of fluctuation in packet error rates,
|
||||||
|
rate switching can be amplified when the statistics get skewed by time slots
|
||||||
|
with very few tries.
|
||||||
|
Make the input data to the moving average more smooth by adding the
|
||||||
|
success/attempts count from the last stats window as well. This has the
|
||||||
|
advantage of smoothing the data without introducing any extra lag to sampling
|
||||||
|
rates.
|
||||||
|
This significantly improves rate stability on a strong test link subjected to
|
||||||
|
periodic noise bursts generated with a SDR
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||||
|
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||||
|
@@ -769,7 +769,8 @@ minstrel_ht_calc_rate_stats(struct minst
|
||||||
|
unsigned int cur_prob;
|
||||||
|
|
||||||
|
if (unlikely(mrs->attempts > 0)) {
|
||||||
|
- cur_prob = MINSTREL_FRAC(mrs->success, mrs->attempts);
|
||||||
|
+ cur_prob = MINSTREL_FRAC(mrs->success + mrs->last_success,
|
||||||
|
+ mrs->attempts + mrs->last_attempts);
|
||||||
|
minstrel_filter_avg_add(&mrs->prob_avg,
|
||||||
|
&mrs->prob_avg_1, cur_prob);
|
||||||
|
mrs->att_hist += mrs->attempts;
|
151
debian/patches/misc-openwrt/0106-mac80211-minstrel_ht-rework-rate-downgrade-code-and-.patch
vendored
Normal file
151
debian/patches/misc-openwrt/0106-mac80211-minstrel_ht-rework-rate-downgrade-code-and-.patch
vendored
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Sat, 6 Feb 2021 16:33:14 +0100
|
||||||
|
Subject: [PATCH] mac80211: minstrel_ht: rework rate downgrade code and
|
||||||
|
max_prob rate selection
|
||||||
|
|
||||||
|
The current fallback code for fast rate switching on potentially failing rates
|
||||||
|
is triggering too often if there is some strong noise on the channel. This can
|
||||||
|
lead to wild fluctuations in the rate selection.
|
||||||
|
Additionally, switching down to max_prob_rate can create a significant gap down
|
||||||
|
in throughput, especially when using only 2 spatial streams, because max_prob_rate
|
||||||
|
is limited to using fewer streams than the max_tp rates.
|
||||||
|
In order to improve throughput without reducing reliability too much, use the
|
||||||
|
rate downgrade code for the max_prob_rate only, and allow the non-downgraded
|
||||||
|
max_prob_rate to use as many spatial streams as the max_tp rates
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/rc80211_minstrel_ht.c
|
||||||
|
+++ b/net/mac80211/rc80211_minstrel_ht.c
|
||||||
|
@@ -580,6 +580,14 @@ minstrel_ht_set_best_prob_rate(struct mi
|
||||||
|
int cur_tp_avg, cur_group, cur_idx;
|
||||||
|
int max_gpr_group, max_gpr_idx;
|
||||||
|
int max_gpr_tp_avg, max_gpr_prob;
|
||||||
|
+ int min_dur;
|
||||||
|
+
|
||||||
|
+ min_dur = max(minstrel_get_duration(mi->max_tp_rate[0]),
|
||||||
|
+ minstrel_get_duration(mi->max_tp_rate[1]));
|
||||||
|
+
|
||||||
|
+ /* make the rate at least 18% slower than max tp rates */
|
||||||
|
+ if (minstrel_get_duration(index) <= min_dur * 19 / 16)
|
||||||
|
+ return;
|
||||||
|
|
||||||
|
cur_group = MI_RATE_GROUP(index);
|
||||||
|
cur_idx = MI_RATE_IDX(index);
|
||||||
|
@@ -601,11 +609,6 @@ minstrel_ht_set_best_prob_rate(struct mi
|
||||||
|
!minstrel_ht_is_legacy_group(max_tp_group))
|
||||||
|
return;
|
||||||
|
|
||||||
|
- /* skip rates faster than max tp rate with lower prob */
|
||||||
|
- if (minstrel_get_duration(mi->max_tp_rate[0]) > minstrel_get_duration(index) &&
|
||||||
|
- mrs->prob_avg < max_tp_prob)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
max_gpr_group = MI_RATE_GROUP(mg->max_group_prob_rate);
|
||||||
|
max_gpr_idx = MI_RATE_IDX(mg->max_group_prob_rate);
|
||||||
|
max_gpr_prob = mi->groups[max_gpr_group].rates[max_gpr_idx].prob_avg;
|
||||||
|
@@ -663,40 +666,6 @@ minstrel_ht_assign_best_tp_rates(struct
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Try to increase robustness of max_prob rate by decrease number of
|
||||||
|
- * streams if possible.
|
||||||
|
- */
|
||||||
|
-static inline void
|
||||||
|
-minstrel_ht_prob_rate_reduce_streams(struct minstrel_ht_sta *mi)
|
||||||
|
-{
|
||||||
|
- struct minstrel_mcs_group_data *mg;
|
||||||
|
- int tmp_max_streams, group, tmp_idx, tmp_prob;
|
||||||
|
- int tmp_tp = 0;
|
||||||
|
-
|
||||||
|
- if (!mi->sta->deflink.ht_cap.ht_supported)
|
||||||
|
- return;
|
||||||
|
-
|
||||||
|
- group = MI_RATE_GROUP(mi->max_tp_rate[0]);
|
||||||
|
- tmp_max_streams = minstrel_mcs_groups[group].streams;
|
||||||
|
- for (group = 0; group < ARRAY_SIZE(minstrel_mcs_groups); group++) {
|
||||||
|
- mg = &mi->groups[group];
|
||||||
|
- if (!mi->supported[group] || group == MINSTREL_CCK_GROUP)
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
- tmp_idx = MI_RATE_IDX(mg->max_group_prob_rate);
|
||||||
|
- tmp_prob = mi->groups[group].rates[tmp_idx].prob_avg;
|
||||||
|
-
|
||||||
|
- if (tmp_tp < minstrel_ht_get_tp_avg(mi, group, tmp_idx, tmp_prob) &&
|
||||||
|
- (minstrel_mcs_groups[group].streams < tmp_max_streams)) {
|
||||||
|
- mi->max_prob_rate = mg->max_group_prob_rate;
|
||||||
|
- tmp_tp = minstrel_ht_get_tp_avg(mi, group,
|
||||||
|
- tmp_idx,
|
||||||
|
- tmp_prob);
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
static u16
|
||||||
|
__minstrel_ht_get_sample_rate(struct minstrel_ht_sta *mi,
|
||||||
|
enum minstrel_sample_type type)
|
||||||
|
@@ -1176,8 +1145,6 @@ minstrel_ht_update_stats(struct minstrel
|
||||||
|
|
||||||
|
mi->max_prob_rate = tmp_max_prob_rate;
|
||||||
|
|
||||||
|
- /* Try to increase robustness of max_prob_rate*/
|
||||||
|
- minstrel_ht_prob_rate_reduce_streams(mi);
|
||||||
|
minstrel_ht_refill_sample_rates(mi);
|
||||||
|
|
||||||
|
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||||
|
@@ -1256,7 +1223,7 @@ minstrel_ht_ri_txstat_valid(struct minst
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
-minstrel_downgrade_rate(struct minstrel_ht_sta *mi, u16 *idx, bool primary)
|
||||||
|
+minstrel_downgrade_prob_rate(struct minstrel_ht_sta *mi, u16 *idx)
|
||||||
|
{
|
||||||
|
int group, orig_group;
|
||||||
|
|
||||||
|
@@ -1271,11 +1238,7 @@ minstrel_downgrade_rate(struct minstrel_
|
||||||
|
minstrel_mcs_groups[orig_group].streams)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
- if (primary)
|
||||||
|
- *idx = mi->groups[group].max_group_tp_rate[0];
|
||||||
|
- else
|
||||||
|
- *idx = mi->groups[group].max_group_tp_rate[1];
|
||||||
|
- break;
|
||||||
|
+ *idx = mi->groups[group].max_group_prob_rate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1286,7 +1249,7 @@ minstrel_ht_tx_status(void *priv, struct
|
||||||
|
struct ieee80211_tx_info *info = st->info;
|
||||||
|
struct minstrel_ht_sta *mi = priv_sta;
|
||||||
|
struct ieee80211_tx_rate *ar = info->status.rates;
|
||||||
|
- struct minstrel_rate_stats *rate, *rate2;
|
||||||
|
+ struct minstrel_rate_stats *rate;
|
||||||
|
struct minstrel_priv *mp = priv;
|
||||||
|
u32 update_interval = mp->update_interval;
|
||||||
|
bool last, update = false;
|
||||||
|
@@ -1354,18 +1317,13 @@ minstrel_ht_tx_status(void *priv, struct
|
||||||
|
/*
|
||||||
|
* check for sudden death of spatial multiplexing,
|
||||||
|
* downgrade to a lower number of streams if necessary.
|
||||||
|
+ * only do this for the max_prob_rate to prevent spurious
|
||||||
|
+ * rate fluctuations when the link changes suddenly
|
||||||
|
*/
|
||||||
|
- rate = minstrel_get_ratestats(mi, mi->max_tp_rate[0]);
|
||||||
|
+ rate = minstrel_get_ratestats(mi, mi->max_prob_rate);
|
||||||
|
if (rate->attempts > 30 &&
|
||||||
|
rate->success < rate->attempts / 4) {
|
||||||
|
- minstrel_downgrade_rate(mi, &mi->max_tp_rate[0], true);
|
||||||
|
- update = true;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- rate2 = minstrel_get_ratestats(mi, mi->max_tp_rate[1]);
|
||||||
|
- if (rate2->attempts > 30 &&
|
||||||
|
- rate2->success < rate2->attempts / 4) {
|
||||||
|
- minstrel_downgrade_rate(mi, &mi->max_tp_rate[1], false);
|
||||||
|
+ minstrel_downgrade_prob_rate(mi, &mi->max_prob_rate);
|
||||||
|
update = true;
|
||||||
|
}
|
||||||
|
}
|
53
debian/patches/misc-openwrt/0107-mac80211-increase-quantum-for-airtime-scheduler.patch
vendored
Normal file
53
debian/patches/misc-openwrt/0107-mac80211-increase-quantum-for-airtime-scheduler.patch
vendored
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Sun, 26 Jun 2022 11:43:25 +0200
|
||||||
|
Subject: [PATCH] mac80211: increase quantum for airtime scheduler
|
||||||
|
|
||||||
|
Given the typical AQL budget and queue length, a quantum of 256 with the
|
||||||
|
default station weight often requires iterating over all queues frequently,
|
||||||
|
until one of them becomes eligible.
|
||||||
|
Improve performance by using 8 times station weight as scheduler quantum
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
|
@@ -103,6 +103,8 @@ ieee80211_sta_keep_active(struct sta_inf
|
||||||
|
return time_before_eq(jiffies, sta->airtime[ac].last_active + HZ / 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#define AIRTIME_QUANTUM_SHIFT 3
|
||||||
|
+
|
||||||
|
struct ieee80211_bss {
|
||||||
|
u32 device_ts_beacon, device_ts_presp;
|
||||||
|
|
||||||
|
--- a/net/mac80211/tx.c
|
||||||
|
+++ b/net/mac80211/tx.c
|
||||||
|
@@ -4074,7 +4074,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||||
|
|
||||||
|
if (deficit < 0)
|
||||||
|
sta->airtime[txqi->txq.ac].deficit +=
|
||||||
|
- sta->airtime_weight;
|
||||||
|
+ sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
|
||||||
|
|
||||||
|
if (deficit < 0 || !aql_check) {
|
||||||
|
list_move_tail(&txqi->schedule_order,
|
||||||
|
@@ -4219,7 +4219,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
|
}
|
||||||
|
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||||
|
if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||||
|
- sta->airtime[ac].deficit += sta->airtime_weight;
|
||||||
|
+ sta->airtime[ac].deficit += sta->airtime_weight <<
|
||||||
|
+ AIRTIME_QUANTUM_SHIFT;
|
||||||
|
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -4227,7 +4228,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
|
if (sta->airtime[ac].deficit >= 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
- sta->airtime[ac].deficit += sta->airtime_weight;
|
||||||
|
+ sta->airtime[ac].deficit += sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
|
||||||
|
list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
|
||||||
|
spin_unlock_bh(&local->active_txq_lock[ac]);
|
||||||
|
|
293
debian/patches/misc-openwrt/0108-mac80211-add-AQL-support-for-broadcast-packets.patch
vendored
Normal file
293
debian/patches/misc-openwrt/0108-mac80211-add-AQL-support-for-broadcast-packets.patch
vendored
Normal file
@@ -0,0 +1,293 @@
|
|||||||
|
From: Felix Fietkau <nbd@nbd.name>
|
||||||
|
Date: Fri, 9 Feb 2024 19:43:40 +0100
|
||||||
|
Subject: [PATCH] mac80211: add AQL support for broadcast packets
|
||||||
|
|
||||||
|
Excessive broadcast traffic with little competing unicast traffic can easily
|
||||||
|
flood hardware queues, leading to throughput issues. Additionally, filling
|
||||||
|
the hardware queues with too many packets breaks FQ for broadcast data.
|
||||||
|
Fix this by enabling AQL for broadcast packets.
|
||||||
|
|
||||||
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
---
|
||||||
|
|
||||||
|
--- a/include/net/cfg80211.h
|
||||||
|
+++ b/include/net/cfg80211.h
|
||||||
|
@@ -3434,6 +3434,7 @@ enum wiphy_params_flags {
|
||||||
|
/* The per TXQ device queue limit in airtime */
|
||||||
|
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 5000
|
||||||
|
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 12000
|
||||||
|
+#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC 50000
|
||||||
|
|
||||||
|
/* The per interface airtime threshold to switch to lower queue limit */
|
||||||
|
#define IEEE80211_AQL_THRESHOLD 24000
|
||||||
|
--- a/net/mac80211/debugfs.c
|
||||||
|
+++ b/net/mac80211/debugfs.c
|
||||||
|
@@ -212,11 +212,13 @@ static ssize_t aql_pending_read(struct f
|
||||||
|
"VI %u us\n"
|
||||||
|
"BE %u us\n"
|
||||||
|
"BK %u us\n"
|
||||||
|
+ "BC/MC %u us\n"
|
||||||
|
"total %u us\n",
|
||||||
|
atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VO]),
|
||||||
|
atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_VI]),
|
||||||
|
atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BE]),
|
||||||
|
atomic_read(&local->aql_ac_pending_airtime[IEEE80211_AC_BK]),
|
||||||
|
+ atomic_read(&local->aql_bc_pending_airtime),
|
||||||
|
atomic_read(&local->aql_total_pending_airtime));
|
||||||
|
return simple_read_from_buffer(user_buf, count, ppos,
|
||||||
|
buf, len);
|
||||||
|
@@ -241,7 +243,8 @@ static ssize_t aql_txq_limit_read(struct
|
||||||
|
"VO %u %u\n"
|
||||||
|
"VI %u %u\n"
|
||||||
|
"BE %u %u\n"
|
||||||
|
- "BK %u %u\n",
|
||||||
|
+ "BK %u %u\n"
|
||||||
|
+ "BC/MC %u\n",
|
||||||
|
local->aql_txq_limit_low[IEEE80211_AC_VO],
|
||||||
|
local->aql_txq_limit_high[IEEE80211_AC_VO],
|
||||||
|
local->aql_txq_limit_low[IEEE80211_AC_VI],
|
||||||
|
@@ -249,7 +252,8 @@ static ssize_t aql_txq_limit_read(struct
|
||||||
|
local->aql_txq_limit_low[IEEE80211_AC_BE],
|
||||||
|
local->aql_txq_limit_high[IEEE80211_AC_BE],
|
||||||
|
local->aql_txq_limit_low[IEEE80211_AC_BK],
|
||||||
|
- local->aql_txq_limit_high[IEEE80211_AC_BK]);
|
||||||
|
+ local->aql_txq_limit_high[IEEE80211_AC_BK],
|
||||||
|
+ local->aql_txq_limit_bc);
|
||||||
|
return simple_read_from_buffer(user_buf, count, ppos,
|
||||||
|
buf, len);
|
||||||
|
}
|
||||||
|
@@ -275,6 +279,11 @@ static ssize_t aql_txq_limit_write(struc
|
||||||
|
else
|
||||||
|
buf[count] = '\0';
|
||||||
|
|
||||||
|
+ if (sscanf(buf, "mcast %u", &q_limit_low) == 1) {
|
||||||
|
+ local->aql_txq_limit_bc = q_limit_low;
|
||||||
|
+ return count;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (sscanf(buf, "%u %u %u", &ac, &q_limit_low, &q_limit_high) != 3)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
|
@@ -1392,10 +1392,12 @@ struct ieee80211_local {
|
||||||
|
spinlock_t handle_wake_tx_queue_lock;
|
||||||
|
|
||||||
|
u16 airtime_flags;
|
||||||
|
+ u32 aql_txq_limit_bc;
|
||||||
|
u32 aql_txq_limit_low[IEEE80211_NUM_ACS];
|
||||||
|
u32 aql_txq_limit_high[IEEE80211_NUM_ACS];
|
||||||
|
u32 aql_threshold;
|
||||||
|
atomic_t aql_total_pending_airtime;
|
||||||
|
+ atomic_t aql_bc_pending_airtime;
|
||||||
|
atomic_t aql_ac_pending_airtime[IEEE80211_NUM_ACS];
|
||||||
|
|
||||||
|
const struct ieee80211_ops *ops;
|
||||||
|
--- a/net/mac80211/main.c
|
||||||
|
+++ b/net/mac80211/main.c
|
||||||
|
@@ -970,6 +970,7 @@ struct ieee80211_hw *ieee80211_alloc_hw_
|
||||||
|
spin_lock_init(&local->rx_path_lock);
|
||||||
|
spin_lock_init(&local->queue_stop_reason_lock);
|
||||||
|
|
||||||
|
+ local->aql_txq_limit_bc = IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC;
|
||||||
|
for (i = 0; i < IEEE80211_NUM_ACS; i++) {
|
||||||
|
INIT_LIST_HEAD(&local->active_txqs[i]);
|
||||||
|
spin_lock_init(&local->active_txq_lock[i]);
|
||||||
|
--- a/net/mac80211/sta_info.c
|
||||||
|
+++ b/net/mac80211/sta_info.c
|
||||||
|
@@ -2382,13 +2382,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||||
|
|
||||||
|
void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
|
||||||
|
struct sta_info *sta, u8 ac,
|
||||||
|
- u16 tx_airtime, bool tx_completed)
|
||||||
|
+ u16 tx_airtime, bool tx_completed,
|
||||||
|
+ bool mcast)
|
||||||
|
{
|
||||||
|
int tx_pending;
|
||||||
|
|
||||||
|
if (!wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL))
|
||||||
|
return;
|
||||||
|
|
||||||
|
+ if (mcast) {
|
||||||
|
+ if (!tx_completed) {
|
||||||
|
+ atomic_add(tx_airtime, &local->aql_bc_pending_airtime);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ tx_pending = atomic_sub_return(tx_airtime,
|
||||||
|
+ &local->aql_bc_pending_airtime);
|
||||||
|
+ if (tx_pending < 0)
|
||||||
|
+ atomic_cmpxchg(&local->aql_bc_pending_airtime,
|
||||||
|
+ tx_pending, 0);
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!tx_completed) {
|
||||||
|
if (sta)
|
||||||
|
atomic_add(tx_airtime,
|
||||||
|
--- a/net/mac80211/tx.c
|
||||||
|
+++ b/net/mac80211/tx.c
|
||||||
|
@@ -2546,7 +2546,7 @@ static u16 ieee80211_store_ack_skb(struc
|
||||||
|
|
||||||
|
spin_lock_irqsave(&local->ack_status_lock, flags);
|
||||||
|
id = idr_alloc(&local->ack_status_frames, ack_skb,
|
||||||
|
- 1, 0x2000, GFP_ATOMIC);
|
||||||
|
+ 1, 0x1000, GFP_ATOMIC);
|
||||||
|
spin_unlock_irqrestore(&local->ack_status_lock, flags);
|
||||||
|
|
||||||
|
if (id >= 0) {
|
||||||
|
@@ -3975,20 +3975,20 @@ begin:
|
||||||
|
encap_out:
|
||||||
|
info->control.vif = vif;
|
||||||
|
|
||||||
|
- if (tx.sta &&
|
||||||
|
- wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
|
||||||
|
- bool ampdu = txq->ac != IEEE80211_AC_VO;
|
||||||
|
+ if (wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) {
|
||||||
|
+ bool ampdu = txq->sta && txq->ac != IEEE80211_AC_VO;
|
||||||
|
u32 airtime;
|
||||||
|
|
||||||
|
airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta,
|
||||||
|
skb->len, ampdu);
|
||||||
|
- if (airtime) {
|
||||||
|
- airtime = ieee80211_info_set_tx_time_est(info, airtime);
|
||||||
|
- ieee80211_sta_update_pending_airtime(local, tx.sta,
|
||||||
|
- txq->ac,
|
||||||
|
- airtime,
|
||||||
|
- false);
|
||||||
|
- }
|
||||||
|
+ if (!airtime)
|
||||||
|
+ return skb;
|
||||||
|
+
|
||||||
|
+ airtime = ieee80211_info_set_tx_time_est(info, airtime);
|
||||||
|
+ info->tx_time_mc = !tx.sta;
|
||||||
|
+ ieee80211_sta_update_pending_airtime(local, tx.sta, txq->ac,
|
||||||
|
+ airtime, false,
|
||||||
|
+ info->tx_time_mc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return skb;
|
||||||
|
@@ -4040,6 +4040,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||||
|
struct ieee80211_txq *ret = NULL;
|
||||||
|
struct txq_info *txqi = NULL, *head = NULL;
|
||||||
|
bool found_eligible_txq = false;
|
||||||
|
+ bool aql_check;
|
||||||
|
|
||||||
|
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||||
|
|
||||||
|
@@ -4063,26 +4064,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||||
|
if (!head)
|
||||||
|
head = txqi;
|
||||||
|
|
||||||
|
+ aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
|
||||||
|
+ if (aql_check)
|
||||||
|
+ found_eligible_txq = true;
|
||||||
|
+
|
||||||
|
if (txqi->txq.sta) {
|
||||||
|
struct sta_info *sta = container_of(txqi->txq.sta,
|
||||||
|
struct sta_info, sta);
|
||||||
|
- bool aql_check = ieee80211_txq_airtime_check(hw, &txqi->txq);
|
||||||
|
- s32 deficit = ieee80211_sta_deficit(sta, txqi->txq.ac);
|
||||||
|
-
|
||||||
|
- if (aql_check)
|
||||||
|
- found_eligible_txq = true;
|
||||||
|
-
|
||||||
|
- if (deficit < 0)
|
||||||
|
+ if (ieee80211_sta_deficit(sta, txqi->txq.ac) < 0) {
|
||||||
|
sta->airtime[txqi->txq.ac].deficit +=
|
||||||
|
sta->airtime_weight << AIRTIME_QUANTUM_SHIFT;
|
||||||
|
-
|
||||||
|
- if (deficit < 0 || !aql_check) {
|
||||||
|
- list_move_tail(&txqi->schedule_order,
|
||||||
|
- &local->active_txqs[txqi->txq.ac]);
|
||||||
|
- goto begin;
|
||||||
|
+ aql_check = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (!aql_check) {
|
||||||
|
+ list_move_tail(&txqi->schedule_order,
|
||||||
|
+ &local->active_txqs[txqi->txq.ac]);
|
||||||
|
+ goto begin;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (txqi->schedule_round == local->schedule_round[ac])
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
@@ -4149,7 +4150,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (!txq->sta)
|
||||||
|
- return true;
|
||||||
|
+ return atomic_read(&local->aql_bc_pending_airtime) <
|
||||||
|
+ local->aql_txq_limit_bc;
|
||||||
|
|
||||||
|
if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
|
||||||
|
return true;
|
||||||
|
@@ -4198,15 +4200,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
|
|
||||||
|
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||||
|
|
||||||
|
- if (!txqi->txq.sta)
|
||||||
|
- goto out;
|
||||||
|
-
|
||||||
|
if (list_empty(&txqi->schedule_order))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
if (!ieee80211_txq_schedule_airtime_check(local, ac))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
+ if (!txqi->txq.sta)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
list_for_each_entry_safe(iter, tmp, &local->active_txqs[ac],
|
||||||
|
schedule_order) {
|
||||||
|
if (iter == txqi)
|
||||||
|
--- a/include/net/mac80211.h
|
||||||
|
+++ b/include/net/mac80211.h
|
||||||
|
@@ -1245,8 +1245,8 @@ struct ieee80211_tx_info {
|
||||||
|
status_data_idr:1,
|
||||||
|
status_data:13,
|
||||||
|
hw_queue:4,
|
||||||
|
+ tx_time_mc:1,
|
||||||
|
tx_time_est:10;
|
||||||
|
- /* 1 free bit */
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
--- a/net/mac80211/sta_info.h
|
||||||
|
+++ b/net/mac80211/sta_info.h
|
||||||
|
@@ -147,7 +147,8 @@ struct airtime_info {
|
||||||
|
|
||||||
|
void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
|
||||||
|
struct sta_info *sta, u8 ac,
|
||||||
|
- u16 tx_airtime, bool tx_completed);
|
||||||
|
+ u16 tx_airtime, bool tx_completed,
|
||||||
|
+ bool mcast);
|
||||||
|
|
||||||
|
struct sta_info;
|
||||||
|
|
||||||
|
--- a/net/mac80211/status.c
|
||||||
|
+++ b/net/mac80211/status.c
|
||||||
|
@@ -734,7 +734,7 @@ static void ieee80211_report_used_skb(st
|
||||||
|
ieee80211_sta_update_pending_airtime(local, sta,
|
||||||
|
skb_get_queue_mapping(skb),
|
||||||
|
tx_time_est,
|
||||||
|
- true);
|
||||||
|
+ true, info->tx_time_mc);
|
||||||
|
rcu_read_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1143,10 +1143,11 @@ void ieee80211_tx_status_ext(struct ieee
|
||||||
|
/* Do this here to avoid the expensive lookup of the sta
|
||||||
|
* in ieee80211_report_used_skb().
|
||||||
|
*/
|
||||||
|
+ bool mcast = IEEE80211_SKB_CB(skb)->tx_time_mc;
|
||||||
|
ieee80211_sta_update_pending_airtime(local, sta,
|
||||||
|
skb_get_queue_mapping(skb),
|
||||||
|
tx_time_est,
|
||||||
|
- true);
|
||||||
|
+ true, mcast);
|
||||||
|
ieee80211_info_set_tx_time_est(IEEE80211_SKB_CB(skb), 0);
|
||||||
|
}
|
||||||
|
|
13
debian/patches/misc-openwrt/0109-mac80211-txq-tune.patch
vendored
Normal file
13
debian/patches/misc-openwrt/0109-mac80211-txq-tune.patch
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
--- a/net/mac80211/tx.c
|
||||||
|
+++ b/net/mac80211/tx.c
|
||||||
|
@@ -1596,8 +1596,8 @@ int ieee80211_txq_setup_flows(struct iee
|
||||||
|
fq->memory_limit = 4 << 20; /* 4 Mbytes */
|
||||||
|
|
||||||
|
codel_params_init(&local->cparams);
|
||||||
|
- local->cparams.interval = MS2TIME(100);
|
||||||
|
- local->cparams.target = MS2TIME(20);
|
||||||
|
+ local->cparams.interval = MS2TIME(50);
|
||||||
|
+ local->cparams.target = MS2TIME(10);
|
||||||
|
local->cparams.ecn = true;
|
||||||
|
|
||||||
|
local->cvars = kvcalloc(fq->flows_cnt, sizeof(local->cvars[0]),
|
18
debian/patches/misc-openwrt/0110-cfg80211-aql-txq-limit.patch
vendored
Normal file
18
debian/patches/misc-openwrt/0110-cfg80211-aql-txq-limit.patch
vendored
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
--- a/include/net/cfg80211.h
|
||||||
|
+++ b/include/net/cfg80211.h
|
||||||
|
@@ -3432,12 +3432,12 @@ enum wiphy_params_flags {
|
||||||
|
#define IEEE80211_DEFAULT_AIRTIME_WEIGHT 256
|
||||||
|
|
||||||
|
/* The per TXQ device queue limit in airtime */
|
||||||
|
-#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 5000
|
||||||
|
-#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 12000
|
||||||
|
+#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 1500
|
||||||
|
+#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 5000
|
||||||
|
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_BC 50000
|
||||||
|
|
||||||
|
/* The per interface airtime threshold to switch to lower queue limit */
|
||||||
|
-#define IEEE80211_AQL_THRESHOLD 24000
|
||||||
|
+#define IEEE80211_AQL_THRESHOLD 12000
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct cfg80211_pmksa - PMK Security Association
|
72
debian/patches/misc-openwrt/0201-sched-sch_cake-fix-bulk-flow-accounting-logic-for-host.patch
vendored
Normal file
72
debian/patches/misc-openwrt/0201-sched-sch_cake-fix-bulk-flow-accounting-logic-for-host.patch
vendored
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
From 546ea84d07e3e324644025e2aae2d12ea4c5896e Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Toke=20H=C3=B8iland-J=C3=B8rgensen?= <toke@redhat.com>
|
||||||
|
Date: Tue, 3 Sep 2024 18:08:45 +0200
|
||||||
|
Subject: [PATCH] sched: sch_cake: fix bulk flow accounting logic for host
|
||||||
|
fairness
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
In sch_cake, we keep track of the count of active bulk flows per host,
|
||||||
|
when running in dst/src host fairness mode, which is used as the
|
||||||
|
round-robin weight when iterating through flows. The count of active
|
||||||
|
bulk flows is updated whenever a flow changes state.
|
||||||
|
|
||||||
|
This has a peculiar interaction with the hash collision handling: when a
|
||||||
|
hash collision occurs (after the set-associative hashing), the state of
|
||||||
|
the hash bucket is simply updated to match the new packet that collided,
|
||||||
|
and if host fairness is enabled, that also means assigning new per-host
|
||||||
|
state to the flow. For this reason, the bulk flow counters of the
|
||||||
|
host(s) assigned to the flow are decremented, before new state is
|
||||||
|
assigned (and the counters, which may not belong to the same host
|
||||||
|
anymore, are incremented again).
|
||||||
|
|
||||||
|
Back when this code was introduced, the host fairness mode was always
|
||||||
|
enabled, so the decrement was unconditional. When the configuration
|
||||||
|
flags were introduced the *increment* was made conditional, but
|
||||||
|
the *decrement* was not. Which of course can lead to a spurious
|
||||||
|
decrement (and associated wrap-around to U16_MAX).
|
||||||
|
|
||||||
|
AFAICT, when host fairness is disabled, the decrement and wrap-around
|
||||||
|
happens as soon as a hash collision occurs (which is not that common in
|
||||||
|
itself, due to the set-associative hashing). However, in most cases this
|
||||||
|
is harmless, as the value is only used when host fairness mode is
|
||||||
|
enabled. So in order to trigger an array overflow, sch_cake has to first
|
||||||
|
be configured with host fairness disabled, and while running in this
|
||||||
|
mode, a hash collision has to occur to cause the overflow. Then, the
|
||||||
|
qdisc has to be reconfigured to enable host fairness, which leads to the
|
||||||
|
array out-of-bounds because the wrapped-around value is retained and
|
||||||
|
used as an array index. It seems that syzbot managed to trigger this,
|
||||||
|
which is quite impressive in its own right.
|
||||||
|
|
||||||
|
This patch fixes the issue by introducing the same conditional check on
|
||||||
|
decrement as is used on increment.
|
||||||
|
|
||||||
|
The original bug predates the upstreaming of cake, but the commit listed
|
||||||
|
in the Fixes tag touched that code, meaning that this patch won't apply
|
||||||
|
before that.
|
||||||
|
|
||||||
|
Fixes: 712639929912 ("sch_cake: Make the dual modes fairer")
|
||||||
|
Reported-by: syzbot+7fe7b81d602cc1e6b94d@syzkaller.appspotmail.com
|
||||||
|
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
|
||||||
|
Link: https://patch.msgid.link/20240903160846.20909-1-toke@redhat.com
|
||||||
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
||||||
|
---
|
||||||
|
net/sched/sch_cake.c | 11 +++++++----
|
||||||
|
1 file changed, 7 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
--- a/net/sched/sch_cake.c
|
||||||
|
+++ b/net/sched/sch_cake.c
|
||||||
|
@@ -833,8 +833,10 @@ skip_hash:
|
||||||
|
allocate_dst = cake_ddst(flow_mode);
|
||||||
|
|
||||||
|
if (q->flows[outer_hash + k].set == CAKE_SET_BULK) {
|
||||||
|
- cake_dec_srchost_bulk_flow_count(q, &q->flows[outer_hash + k], flow_mode);
|
||||||
|
- cake_dec_dsthost_bulk_flow_count(q, &q->flows[outer_hash + k], flow_mode);
|
||||||
|
+ if (allocate_src)
|
||||||
|
+ q->hosts[q->flows[reduced_hash].srchost].srchost_bulk_flow_count--;
|
||||||
|
+ if (allocate_dst)
|
||||||
|
+ q->hosts[q->flows[reduced_hash].dsthost].dsthost_bulk_flow_count--;
|
||||||
|
}
|
||||||
|
found:
|
||||||
|
/* reserve queue for future packets in same flow */
|
11
debian/patches/misc-openwrt/0301-fq-adjust-memory-size.patch
vendored
Normal file
11
debian/patches/misc-openwrt/0301-fq-adjust-memory-size.patch
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
--- a/include/net/fq_impl.h
|
||||||
|
+++ b/include/net/fq_impl.h
|
||||||
|
@@ -356,7 +356,7 @@ static int fq_init(struct fq *fq, int fl
|
||||||
|
fq->flows_cnt = max_t(u32, flows_cnt, 1);
|
||||||
|
fq->quantum = 300;
|
||||||
|
fq->limit = 8192;
|
||||||
|
- fq->memory_limit = 16 << 20; /* 16 MBytes */
|
||||||
|
+ fq->memory_limit = 32 << 20; /* 32 MBytes */
|
||||||
|
|
||||||
|
fq->flows = kvcalloc(fq->flows_cnt, sizeof(fq->flows[0]), GFP_KERNEL);
|
||||||
|
if (!fq->flows)
|
@@ -1,18 +1,6 @@
|
|||||||
From 90b69178f6a866c7f3330c2006f6b5396146192c Mon Sep 17 00:00:00 2001
|
From 6b1d270f55e3143bcb3ad914adf920774351a6b9 Mon Sep 17 00:00:00 2001
|
||||||
From: graysky <therealgraysky AT proton DOT me>
|
From: graysky <therealgraysky AT proton DOT me>
|
||||||
Date: Mon, 16 Sep 2024 05:55:58 -0400
|
Date: Mon, 18 Aug 2025 04:14:48 -0400
|
||||||
Subject: ZEN: Add graysky's more-uarches
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
From https://github.com/graysky2/kernel_compiler_patch
|
|
||||||
|
|
||||||
more-ISA-levels-and-uarches-for-kernel-6.1.79+.patch
|
|
||||||
|
|
||||||
FEATURES
|
|
||||||
This patch adds additional tunings via new x86-64 ISA levels and
|
|
||||||
more micro-architecture options to the Linux kernel in three classes.
|
|
||||||
|
|
||||||
1. New generic x86-64 ISA levels
|
1. New generic x86-64 ISA levels
|
||||||
|
|
||||||
@@ -111,7 +99,7 @@ See the following experimental evidence supporting this statement:
|
|||||||
https://github.com/graysky2/kernel_compiler_patch?tab=readme-ov-file#benchmarks
|
https://github.com/graysky2/kernel_compiler_patch?tab=readme-ov-file#benchmarks
|
||||||
|
|
||||||
REQUIREMENTS
|
REQUIREMENTS
|
||||||
linux version 6.1.79+
|
linux version 6.16+
|
||||||
gcc version >=9.0 or clang version >=9.0
|
gcc version >=9.0 or clang version >=9.0
|
||||||
|
|
||||||
ACKNOWLEDGMENTS
|
ACKNOWLEDGMENTS
|
||||||
@@ -122,45 +110,78 @@ REFERENCES
|
|||||||
2. https://bugzilla.kernel.org/show_bug.cgi?id=77461
|
2. https://bugzilla.kernel.org/show_bug.cgi?id=77461
|
||||||
3. https://github.com/graysky2/kernel_gcc_patch/issues/15
|
3. https://github.com/graysky2/kernel_gcc_patch/issues/15
|
||||||
4. http://www.linuxforge.net/docs/linux/linux-gcc.php
|
4. http://www.linuxforge.net/docs/linux/linux-gcc.php
|
||||||
|
|
||||||
---
|
---
|
||||||
arch/x86/Kconfig.cpu | 367 ++++++++++++++++++++++++++++++--
|
arch/x86/Kconfig.cpu | 427 ++++++++++++++++++++++++++++++++++++++++++-
|
||||||
arch/x86/Makefile | 89 +++++++-
|
arch/x86/Makefile | 213 ++++++++++++++++++++-
|
||||||
arch/x86/include/asm/vermagic.h | 72 +++++++
|
2 files changed, 631 insertions(+), 9 deletions(-)
|
||||||
3 files changed, 511 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/x86/Kconfig.cpu
|
--- a/arch/x86/Kconfig.cpu
|
||||||
+++ b/arch/x86/Kconfig.cpu
|
+++ b/arch/x86/Kconfig.cpu
|
||||||
@@ -155,9 +155,8 @@ config MPENTIUM4
|
@@ -31,6 +31,7 @@ choice
|
||||||
-Paxville
|
- "Pentium-4" for the Intel Pentium 4 or P4-based Celeron.
|
||||||
-Dempsey
|
- "K6" for the AMD K6, K6-II and K6-III (aka K6-3D).
|
||||||
|
- "Athlon" for the AMD K7 family (Athlon/Duron/Thunderbird).
|
||||||
|
+ - "Opteron/Athlon64/Hammer/K8" for all K8 and newer AMD CPUs.
|
||||||
|
- "Crusoe" for the Transmeta Crusoe series.
|
||||||
|
- "Efficeon" for the Transmeta Efficeon series.
|
||||||
|
- "Winchip-C6" for original IDT Winchip.
|
||||||
|
@@ -41,7 +42,10 @@ choice
|
||||||
|
- "CyrixIII/VIA C3" for VIA Cyrix III or VIA C3.
|
||||||
|
- "VIA C3-2" for VIA C3-2 "Nehemiah" (model 9 and above).
|
||||||
|
- "VIA C7" for VIA C7.
|
||||||
|
+ - "Intel P4" for the Pentium 4/Netburst microarchitecture.
|
||||||
|
+ - "Core 2/newer Xeon" for all core2 and newer Intel CPUs.
|
||||||
|
- "Intel Atom" for the Atom-microarchitecture CPUs.
|
||||||
|
+ - "Generic-x86-64" for a kernel which runs on any x86-64 CPU.
|
||||||
|
|
||||||
|
See each option's help text for additional details. If you don't know
|
||||||
|
what to do, choose "Pentium-Pro".
|
||||||
|
@@ -135,10 +139,21 @@ config MPENTIUM4
|
||||||
|
-Mobile Pentium 4
|
||||||
|
-Mobile Pentium 4 M
|
||||||
|
-Extreme Edition (Gallatin)
|
||||||
|
+ -Prescott
|
||||||
|
+ -Prescott 2M
|
||||||
|
+ -Cedar Mill
|
||||||
|
+ -Presler
|
||||||
|
+ -Smithfiled
|
||||||
|
Xeons (Intel Xeon, Xeon MP, Xeon LV, Xeon MV) corename:
|
||||||
|
-Foster
|
||||||
|
-Prestonia
|
||||||
|
-Gallatin
|
||||||
|
+ -Nocona
|
||||||
|
+ -Irwindale
|
||||||
|
+ -Cranford
|
||||||
|
+ -Potomac
|
||||||
|
+ -Paxville
|
||||||
|
+ -Dempsey
|
||||||
|
|
||||||
-
|
|
||||||
config MK6
|
config MK6
|
||||||
- bool "K6/K6-II/K6-III"
|
bool "K6/K6-II/K6-III"
|
||||||
+ bool "AMD K6/K6-II/K6-III"
|
@@ -281,6 +296,402 @@ config X86_GENERIC
|
||||||
depends on X86_32
|
This is really intended for distributors who need more
|
||||||
help
|
generic optimizations.
|
||||||
Select this for an AMD K6-family processor. Enables use of
|
|
||||||
@@ -165,7 +164,7 @@ config MK6
|
|
||||||
flags to GCC.
|
|
||||||
|
|
||||||
config MK7
|
+choice
|
||||||
- bool "Athlon/Duron/K7"
|
+ prompt "x86_64 Compiler Build Optimization"
|
||||||
+ bool "AMD Athlon/Duron/K7"
|
+ depends on !X86_NATIVE_CPU
|
||||||
depends on X86_32
|
+ default GENERIC_CPU
|
||||||
help
|
+
|
||||||
Select this for an AMD Athlon K7-family processor. Enables use of
|
+config GENERIC_CPU
|
||||||
@@ -173,12 +172,114 @@ config MK7
|
+ bool "Generic-x86-64"
|
||||||
flags to GCC.
|
+ depends on X86_64
|
||||||
|
+ help
|
||||||
config MK8
|
+ Generic x86-64 CPU.
|
||||||
- bool "Opteron/Athlon64/Hammer/K8"
|
+ Runs equally well on all x86-64 CPUs.
|
||||||
|
+
|
||||||
|
+config MK8
|
||||||
+ bool "AMD Opteron/Athlon64/Hammer/K8"
|
+ bool "AMD Opteron/Athlon64/Hammer/K8"
|
||||||
help
|
+ help
|
||||||
Select this for an AMD Opteron or Athlon64 Hammer-family processor.
|
+ Select this for an AMD Opteron or Athlon64 Hammer-family processor.
|
||||||
Enables use of some extended instructions, and passes appropriate
|
+ Enables use of some extended instructions, and passes appropriate
|
||||||
optimization flags to GCC.
|
+ optimization flags to GCC.
|
||||||
|
+
|
||||||
+config MK8SSE3
|
+config MK8SSE3
|
||||||
+ bool "AMD Opteron/Athlon64/Hammer/K8 with SSE3"
|
+ bool "AMD Opteron/Athlon64/Hammer/K8 with SSE3"
|
||||||
+ help
|
+ help
|
||||||
@@ -226,21 +247,21 @@ REFERENCES
|
|||||||
+ Enables -march=bdver4
|
+ Enables -march=bdver4
|
||||||
+
|
+
|
||||||
+config MZEN
|
+config MZEN
|
||||||
+ bool "AMD Zen"
|
+ bool "AMD Ryzen"
|
||||||
+ help
|
+ help
|
||||||
+ Select this for AMD Family 17h Zen processors.
|
+ Select this for AMD Family 17h Zen processors.
|
||||||
+
|
+
|
||||||
+ Enables -march=znver1
|
+ Enables -march=znver1
|
||||||
+
|
+
|
||||||
+config MZEN2
|
+config MZEN2
|
||||||
+ bool "AMD Zen 2"
|
+ bool "AMD Ryzen 2"
|
||||||
+ help
|
+ help
|
||||||
+ Select this for AMD Family 17h Zen 2 processors.
|
+ Select this for AMD Family 17h Zen 2 processors.
|
||||||
+
|
+
|
||||||
+ Enables -march=znver2
|
+ Enables -march=znver2
|
||||||
+
|
+
|
||||||
+config MZEN3
|
+config MZEN3
|
||||||
+ bool "AMD Zen 3"
|
+ bool "AMD Ryzen 3"
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION >= 100300) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
+ depends on (CC_IS_GCC && GCC_VERSION >= 100300) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
||||||
+ help
|
+ help
|
||||||
+ Select this for AMD Family 19h Zen 3 processors.
|
+ Select this for AMD Family 19h Zen 3 processors.
|
||||||
@@ -248,7 +269,7 @@ REFERENCES
|
|||||||
+ Enables -march=znver3
|
+ Enables -march=znver3
|
||||||
+
|
+
|
||||||
+config MZEN4
|
+config MZEN4
|
||||||
+ bool "AMD Zen 4"
|
+ bool "AMD Ryzen 4"
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 160000)
|
+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 160000)
|
||||||
+ help
|
+ help
|
||||||
+ Select this for AMD Family 19h Zen 4 processors.
|
+ Select this for AMD Family 19h Zen 4 processors.
|
||||||
@@ -256,57 +277,48 @@ REFERENCES
|
|||||||
+ Enables -march=znver4
|
+ Enables -march=znver4
|
||||||
+
|
+
|
||||||
+config MZEN5
|
+config MZEN5
|
||||||
+ bool "AMD Zen 5"
|
+ bool "AMD Ryzen 5"
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 140000) || (CC_IS_CLANG && CLANG_VERSION >= 190100)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 140000) || (CC_IS_CLANG && CLANG_VERSION >= 190100)
|
||||||
+ help
|
+ help
|
||||||
+ Select this for AMD Family 19h Zen 5 processors.
|
+ Select this for AMD Family 19h Zen 5 processors.
|
||||||
+
|
+
|
||||||
+ Enables -march=znver5
|
+ Enables -march=znver5
|
||||||
+
|
+
|
||||||
config MCRUSOE
|
+config MPSC
|
||||||
bool "Crusoe"
|
+ bool "Intel P4 / older Netburst based Xeon"
|
||||||
depends on X86_32
|
+ depends on X86_64
|
||||||
@@ -269,8 +370,17 @@ config MPSC
|
+ help
|
||||||
using the cpu family field
|
+ Optimize for Intel Pentium 4, Pentium D and older Nocona/Dempsey
|
||||||
in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one.
|
+ Xeon CPUs with Intel 64bit which is compatible with x86-64.
|
||||||
|
+ Note that the latest Xeons (Xeon 51xx and 53xx) are not based on the
|
||||||
+config MATOM
|
+ Netburst core and shouldn't use this option. You can distinguish them
|
||||||
+ bool "Intel Atom"
|
+ using the cpu family field
|
||||||
|
+ in /proc/cpuinfo. Family 15 is an older Xeon, Family 6 a newer one.
|
||||||
|
+
|
||||||
|
+config MCORE2
|
||||||
|
+ bool "Intel Core 2"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for the Intel Atom platform. Intel Atom CPUs have an
|
+ Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
||||||
+ in-order pipelining architecture and thus can benefit from
|
+ 53xx) CPUs. You can distinguish newer from older Xeons by the CPU
|
||||||
+ accordingly optimized code. Use a recent GCC with specific Atom
|
+ family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
||||||
+ support in order to fully benefit from selecting this option.
|
+ (not a typo)
|
||||||
+
|
+
|
||||||
config MCORE2
|
|
||||||
- bool "Core 2/newer Xeon"
|
|
||||||
+ bool "Intel Core 2"
|
|
||||||
help
|
|
||||||
|
|
||||||
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
|
||||||
@@ -278,14 +388,199 @@ config MCORE2
|
|
||||||
family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
|
||||||
(not a typo)
|
|
||||||
|
|
||||||
-config MATOM
|
|
||||||
- bool "Intel Atom"
|
|
||||||
+ Enables -march=core2
|
+ Enables -march=core2
|
||||||
+
|
+
|
||||||
+config MNEHALEM
|
+config MNEHALEM
|
||||||
+ bool "Intel Nehalem"
|
+ bool "Intel Nehalem"
|
||||||
help
|
+ depends on X86_64
|
||||||
|
+ help
|
||||||
- Select this for the Intel Atom platform. Intel Atom CPUs have an
|
+
|
||||||
- in-order pipelining architecture and thus can benefit from
|
|
||||||
- accordingly optimized code. Use a recent GCC with specific Atom
|
|
||||||
- support in order to fully benefit from selecting this option.
|
|
||||||
+ Select this for 1st Gen Core processors in the Nehalem family.
|
+ Select this for 1st Gen Core processors in the Nehalem family.
|
||||||
+
|
+
|
||||||
+ Enables -march=nehalem
|
+ Enables -march=nehalem
|
||||||
+
|
+
|
||||||
+config MWESTMERE
|
+config MWESTMERE
|
||||||
+ bool "Intel Westmere"
|
+ bool "Intel Westmere"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for the Intel Westmere formerly Nehalem-C family.
|
+ Select this for the Intel Westmere formerly Nehalem-C family.
|
||||||
@@ -315,6 +327,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MSILVERMONT
|
+config MSILVERMONT
|
||||||
+ bool "Intel Silvermont"
|
+ bool "Intel Silvermont"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for the Intel Silvermont platform.
|
+ Select this for the Intel Silvermont platform.
|
||||||
@@ -323,6 +336,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MGOLDMONT
|
+config MGOLDMONT
|
||||||
+ bool "Intel Goldmont"
|
+ bool "Intel Goldmont"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for the Intel Goldmont platform including Apollo Lake and Denverton.
|
+ Select this for the Intel Goldmont platform including Apollo Lake and Denverton.
|
||||||
@@ -331,6 +345,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MGOLDMONTPLUS
|
+config MGOLDMONTPLUS
|
||||||
+ bool "Intel Goldmont Plus"
|
+ bool "Intel Goldmont Plus"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for the Intel Goldmont Plus platform including Gemini Lake.
|
+ Select this for the Intel Goldmont Plus platform including Gemini Lake.
|
||||||
@@ -339,6 +354,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MSANDYBRIDGE
|
+config MSANDYBRIDGE
|
||||||
+ bool "Intel Sandy Bridge"
|
+ bool "Intel Sandy Bridge"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 2nd Gen Core processors in the Sandy Bridge family.
|
+ Select this for 2nd Gen Core processors in the Sandy Bridge family.
|
||||||
@@ -347,6 +363,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MIVYBRIDGE
|
+config MIVYBRIDGE
|
||||||
+ bool "Intel Ivy Bridge"
|
+ bool "Intel Ivy Bridge"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 3rd Gen Core processors in the Ivy Bridge family.
|
+ Select this for 3rd Gen Core processors in the Ivy Bridge family.
|
||||||
@@ -355,6 +372,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MHASWELL
|
+config MHASWELL
|
||||||
+ bool "Intel Haswell"
|
+ bool "Intel Haswell"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 4th Gen Core processors in the Haswell family.
|
+ Select this for 4th Gen Core processors in the Haswell family.
|
||||||
@@ -363,6 +381,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MBROADWELL
|
+config MBROADWELL
|
||||||
+ bool "Intel Broadwell"
|
+ bool "Intel Broadwell"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 5th Gen Core processors in the Broadwell family.
|
+ Select this for 5th Gen Core processors in the Broadwell family.
|
||||||
@@ -371,6 +390,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MSKYLAKE
|
+config MSKYLAKE
|
||||||
+ bool "Intel Skylake"
|
+ bool "Intel Skylake"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 6th Gen Core processors in the Skylake family.
|
+ Select this for 6th Gen Core processors in the Skylake family.
|
||||||
@@ -378,23 +398,26 @@ REFERENCES
|
|||||||
+ Enables -march=skylake
|
+ Enables -march=skylake
|
||||||
+
|
+
|
||||||
+config MSKYLAKEX
|
+config MSKYLAKEX
|
||||||
+ bool "Intel Skylake X"
|
+ bool "Intel Skylake-X (7th Gen Core i7/i9)"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 6th Gen Core processors in the Skylake X family.
|
+ Select this for 7th Gen Core i7/i9 processors in the Skylake-X family.
|
||||||
+
|
+
|
||||||
+ Enables -march=skylake-avx512
|
+ Enables -march=skylake-avx512
|
||||||
+
|
+
|
||||||
+config MCANNONLAKE
|
+config MCANNONLAKE
|
||||||
+ bool "Intel Cannon Lake"
|
+ bool "Intel Coffee Lake/Kaby Lake Refresh (8th Gen Core i3/i5/i7)"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 8th Gen Core processors
|
+ Select this for 8th Gen Core i3/i5/i7 processors in the Coffee Lake or Kaby Lake Refresh families.
|
||||||
+
|
+
|
||||||
+ Enables -march=cannonlake
|
+ Enables -march=cannonlake
|
||||||
+
|
+
|
||||||
+config MICELAKE_CLIENT
|
+config MICELAKE_CLIENT
|
||||||
+ bool "Intel Ice Lake"
|
+ bool "Intel Ice Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 10th Gen Core client processors in the Ice Lake family.
|
+ Select this for 10th Gen Core client processors in the Ice Lake family.
|
||||||
@@ -402,23 +425,17 @@ REFERENCES
|
|||||||
+ Enables -march=icelake-client
|
+ Enables -march=icelake-client
|
||||||
+
|
+
|
||||||
+config MICELAKE_SERVER
|
+config MICELAKE_SERVER
|
||||||
+ bool "Intel Ice Lake Server"
|
+ bool "Intel Ice Lake-SP (3rd Gen Xeon Scalable)"
|
||||||
|
+ depends on X86_64
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 10th Gen Core server processors in the Ice Lake family.
|
+ Select this for 3rd Gen Xeon Scalable processors in the Ice Lake-SP family.
|
||||||
+
|
+
|
||||||
+ Enables -march=icelake-server
|
+ Enables -march=icelake-server
|
||||||
+
|
+
|
||||||
+config MCASCADELAKE
|
|
||||||
+ bool "Intel Cascade Lake"
|
|
||||||
+ help
|
|
||||||
+
|
|
||||||
+ Select this for Xeon processors in the Cascade Lake family.
|
|
||||||
+
|
|
||||||
+ Enables -march=cascadelake
|
|
||||||
+
|
|
||||||
+config MCOOPERLAKE
|
+config MCOOPERLAKE
|
||||||
+ bool "Intel Cooper Lake"
|
+ bool "Intel Cooper Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -426,8 +443,19 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+ Enables -march=cooperlake
|
+ Enables -march=cooperlake
|
||||||
+
|
+
|
||||||
|
+config MCASCADELAKE
|
||||||
|
+ bool "Intel Cascade Lake"
|
||||||
|
+ depends on X86_64
|
||||||
|
+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000)
|
||||||
|
+ help
|
||||||
|
+
|
||||||
|
+ Select this for Xeon processors in the Cascade Lake family.
|
||||||
|
+
|
||||||
|
+ Enables -march=cascadelake
|
||||||
|
+
|
||||||
+config MTIGERLAKE
|
+config MTIGERLAKE
|
||||||
+ bool "Intel Tiger Lake"
|
+ bool "Intel Tiger Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 100100) || (CC_IS_CLANG && CLANG_VERSION >= 100000)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -437,6 +465,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MSAPPHIRERAPIDS
|
+config MSAPPHIRERAPIDS
|
||||||
+ bool "Intel Sapphire Rapids"
|
+ bool "Intel Sapphire Rapids"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -446,6 +475,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MROCKETLAKE
|
+config MROCKETLAKE
|
||||||
+ bool "Intel Rocket Lake"
|
+ bool "Intel Rocket Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -455,6 +485,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MALDERLAKE
|
+config MALDERLAKE
|
||||||
+ bool "Intel Alder Lake"
|
+ bool "Intel Alder Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 110000) || (CC_IS_CLANG && CLANG_VERSION >= 120000)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -464,6 +495,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MRAPTORLAKE
|
+config MRAPTORLAKE
|
||||||
+ bool "Intel Raptor Lake"
|
+ bool "Intel Raptor Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -473,6 +505,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MMETEORLAKE
|
+config MMETEORLAKE
|
||||||
+ bool "Intel Meteor Lake"
|
+ bool "Intel Meteor Lake"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
+ depends on (CC_IS_GCC && GCC_VERSION >= 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
@@ -482,46 +515,26 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MEMERALDRAPIDS
|
+config MEMERALDRAPIDS
|
||||||
+ bool "Intel Emerald Rapids"
|
+ bool "Intel Emerald Rapids"
|
||||||
|
+ depends on X86_64
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
+ depends on (CC_IS_GCC && GCC_VERSION > 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for fifth-generation 10 nm process processors in the Emerald Rapids family.
|
+ Select this for fifth-generation Xeon Scalable processors in the Emerald Rapids family.
|
||||||
+
|
+
|
||||||
+ Enables -march=emeraldrapids
|
+ Enables -march=emeraldrapids
|
||||||
|
+
|
||||||
config GENERIC_CPU
|
+config MDIAMONDRAPIDS
|
||||||
bool "Generic-x86-64"
|
+ bool "Intel Diamond Rapids (7th Gen Xeon Scalable)"
|
||||||
@@ -294,6 +589,26 @@ config GENERIC_CPU
|
+ depends on X86_64
|
||||||
Generic x86-64 CPU.
|
+ depends on (CC_IS_GCC && GCC_VERSION > 150000) || (CC_IS_CLANG && CLANG_VERSION >= 200000)
|
||||||
Run equally well on all x86-64 CPUs.
|
|
||||||
|
|
||||||
+config MNATIVE_INTEL
|
|
||||||
+ bool "Intel-Native optimizations autodetected by the compiler"
|
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Clang 3.8, GCC 4.2 and above support -march=native, which automatically detects
|
+ Select this for seventh-generation Xeon Scalable processors in the Diamond Rapids family.
|
||||||
+ the optimum settings to use based on your processor. Do NOT use this
|
|
||||||
+ for AMD CPUs. Intel Only!
|
|
||||||
+
|
+
|
||||||
+ Enables -march=native
|
+ Enables -march=diamondrapids
|
||||||
+
|
+
|
||||||
+config MNATIVE_AMD
|
+endchoice
|
||||||
+ bool "AMD-Native optimizations autodetected by the compiler"
|
|
||||||
+ help
|
|
||||||
+
|
+
|
||||||
+ Clang 3.8, GCC 4.2 and above support -march=native, which automatically detects
|
|
||||||
+ the optimum settings to use based on your processor. Do NOT use this
|
|
||||||
+ for Intel CPUs. AMD Only!
|
|
||||||
+
|
|
||||||
+ Enables -march=native
|
|
||||||
+
|
|
||||||
endchoice
|
|
||||||
|
|
||||||
config X86_GENERIC
|
|
||||||
@@ -308,6 +623,30 @@ config X86_GENERIC
|
|
||||||
This is really intended for distributors who need more
|
|
||||||
generic optimizations.
|
|
||||||
|
|
||||||
+config X86_64_VERSION
|
+config X86_64_VERSION
|
||||||
+ int "x86-64 compiler ISA level"
|
+ int "x86-64 compiler ISA level"
|
||||||
+ range 1 3
|
+ range 1 3
|
||||||
@@ -531,7 +544,7 @@ REFERENCES
|
|||||||
+ Specify a specific x86-64 compiler ISA level.
|
+ Specify a specific x86-64 compiler ISA level.
|
||||||
+
|
+
|
||||||
+ There are three x86-64 ISA levels that work on top of
|
+ There are three x86-64 ISA levels that work on top of
|
||||||
+ the x86-64 baseline, namely: x86-64-v2, x86-64-v3, and x86-64-v4.
|
+ the x86-64 baseline, namely: x86-64-v2 and x86-64-v3.
|
||||||
+
|
+
|
||||||
+ x86-64-v2 brings support for vector instructions up to Streaming SIMD
|
+ x86-64-v2 brings support for vector instructions up to Streaming SIMD
|
||||||
+ Extensions 4.2 (SSE4.2) and Supplemental Streaming SIMD Extensions 3
|
+ Extensions 4.2 (SSE4.2) and Supplemental Streaming SIMD Extensions 3
|
||||||
@@ -549,218 +562,278 @@ REFERENCES
|
|||||||
#
|
#
|
||||||
# Define implied options from the CPU selection here
|
# Define implied options from the CPU selection here
|
||||||
config X86_INTERNODE_CACHE_SHIFT
|
config X86_INTERNODE_CACHE_SHIFT
|
||||||
@@ -318,7 +657,7 @@ config X86_INTERNODE_CACHE_SHIFT
|
@@ -290,8 +701,8 @@ config X86_INTERNODE_CACHE_SHIFT
|
||||||
|
|
||||||
config X86_L1_CACHE_SHIFT
|
config X86_L1_CACHE_SHIFT
|
||||||
int
|
int
|
||||||
default "7" if MPENTIUM4 || MPSC
|
- default "7" if MPENTIUM4
|
||||||
- default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
- default "6" if MK7 || MPENTIUMM || MATOM || MVIAC7 || X86_GENERIC || X86_64
|
||||||
+ default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MNATIVE_INTEL || MNATIVE_AMD
|
+ default "7" if MPENTIUM4 || MPSC
|
||||||
|
+ default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS || X86_NATIVE_CPU
|
||||||
default "4" if MELAN || M486SX || M486 || MGEODEGX1
|
default "4" if MELAN || M486SX || M486 || MGEODEGX1
|
||||||
default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX
|
default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX
|
||||||
|
|
||||||
@@ -336,11 +675,11 @@ config X86_ALIGNMENT_16
|
@@ -309,19 +720,19 @@ config X86_ALIGNMENT_16
|
||||||
|
|
||||||
config X86_INTEL_USERCOPY
|
config X86_INTEL_USERCOPY
|
||||||
def_bool y
|
def_bool y
|
||||||
- depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2
|
- depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK7 || MEFFICEON
|
||||||
+ depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MNATIVE_INTEL
|
+ depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS
|
||||||
|
|
||||||
config X86_USE_PPRO_CHECKSUM
|
config X86_USE_PPRO_CHECKSUM
|
||||||
def_bool y
|
def_bool y
|
||||||
- depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM
|
- depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MATOM
|
||||||
+ depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MNATIVE_INTEL || MNATIVE_AMD
|
+ depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS
|
||||||
|
|
||||||
|
config X86_TSC
|
||||||
|
def_bool y
|
||||||
|
- depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MATOM) || X86_64
|
||||||
|
+ depends on (MWINCHIP3D || MCRUSOE || MEFFICEON || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || MK8 || MVIAC3_2 || MVIAC7 || MGEODEGX1 || MGEODE_LX || MCORE2 || MATOM) || X86_64
|
||||||
|
|
||||||
|
config X86_HAVE_PAE
|
||||||
|
def_bool y
|
||||||
|
- depends on MCRUSOE || MEFFICEON || MCYRIXIII || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC7 || MATOM || X86_64
|
||||||
|
+ depends on MCRUSOE || MEFFICEON || MCYRIXIII || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC7 || MCORE2 || MATOM || X86_64
|
||||||
|
|
||||||
|
config X86_CX8
|
||||||
|
def_bool y
|
||||||
|
@@ -331,12 +742,12 @@ config X86_CX8
|
||||||
|
# generates cmov.
|
||||||
|
config X86_CMOV
|
||||||
|
def_bool y
|
||||||
|
- depends on (MK7 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || MATOM || MGEODE_LX || X86_64)
|
||||||
|
+ depends on (MK8 || MK7 || MCORE2 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MCRUSOE || MEFFICEON || X86_64 || MATOM || MGEODE_LX)
|
||||||
|
|
||||||
|
config X86_MINIMUM_CPU_FAMILY
|
||||||
|
int
|
||||||
|
default "64" if X86_64
|
||||||
|
- default "6" if X86_32 && (MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MATOM || MK7)
|
||||||
|
+ default "6" if X86_32 && (MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MATOM || MCORE2 || MK7 || MK8)
|
||||||
|
default "5" if X86_32 && X86_CX8
|
||||||
|
default "4"
|
||||||
|
|
||||||
#
|
|
||||||
# P6_NOPs are a relatively minor optimization that require a family >=
|
|
||||||
--- a/arch/x86/Makefile
|
--- a/arch/x86/Makefile
|
||||||
+++ b/arch/x86/Makefile
|
+++ b/arch/x86/Makefile
|
||||||
@@ -182,15 +182,98 @@ else
|
@@ -177,10 +177,221 @@ ifdef CONFIG_X86_NATIVE_CPU
|
||||||
cflags-$(CONFIG_MK8) += -march=k8
|
KBUILD_CFLAGS += -march=native
|
||||||
cflags-$(CONFIG_MPSC) += -march=nocona
|
KBUILD_RUSTFLAGS += -Ctarget-cpu=native
|
||||||
cflags-$(CONFIG_MCORE2) += -march=core2
|
else
|
||||||
- cflags-$(CONFIG_MATOM) += -march=atom
|
+ifdef CONFIG_MK8
|
||||||
- cflags-$(CONFIG_GENERIC_CPU) += -mtune=generic
|
+ KBUILD_CFLAGS += -march=k8
|
||||||
+ cflags-$(CONFIG_MATOM) += -march=bonnell
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=k8
|
||||||
+ ifeq ($(CONFIG_X86_64_VERSION),1)
|
|
||||||
+ cflags-$(CONFIG_GENERIC_CPU) += -mtune=generic
|
|
||||||
+ rustflags-$(CONFIG_GENERIC_CPU) += -Ztune-cpu=generic
|
|
||||||
+ else
|
|
||||||
+ cflags-$(CONFIG_GENERIC_CPU) += -march=x86-64-v$(CONFIG_X86_64_VERSION)
|
|
||||||
+ rustflags-$(CONFIG_GENERIC_CPU) += -Ctarget-cpu=x86-64-v$(CONFIG_X86_64_VERSION)
|
|
||||||
+endif
|
+endif
|
||||||
+ cflags-$(CONFIG_MK8SSE3) += -march=k8-sse3
|
+
|
||||||
+ cflags-$(CONFIG_MK10) += -march=amdfam10
|
+ifdef CONFIG_MK8SSE3
|
||||||
+ cflags-$(CONFIG_MBARCELONA) += -march=barcelona
|
+ KBUILD_CFLAGS += -march=k8-sse3
|
||||||
+ cflags-$(CONFIG_MBOBCAT) += -march=btver1
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=k8-sse3
|
||||||
+ cflags-$(CONFIG_MJAGUAR) += -march=btver2
|
+endif
|
||||||
+ cflags-$(CONFIG_MBULLDOZER) += -march=bdver1
|
+
|
||||||
+ cflags-$(CONFIG_MPILEDRIVER) += -march=bdver2 -mno-tbm
|
+ifdef CONFIG_MK10
|
||||||
+ cflags-$(CONFIG_MSTEAMROLLER) += -march=bdver3 -mno-tbm
|
+ KBUILD_CFLAGS += -march=amdfam10
|
||||||
+ cflags-$(CONFIG_MEXCAVATOR) += -march=bdver4 -mno-tbm
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=amdfam10
|
||||||
+ cflags-$(CONFIG_MZEN) += -march=znver1
|
+endif
|
||||||
+ cflags-$(CONFIG_MZEN2) += -march=znver2
|
+
|
||||||
+ cflags-$(CONFIG_MZEN3) += -march=znver3
|
+ifdef CONFIG_MBARCELONA
|
||||||
+ cflags-$(CONFIG_MZEN4) += -march=znver4
|
+ KBUILD_CFLAGS += -march=barcelona
|
||||||
+ cflags-$(CONFIG_MZEN5) += -march=znver5
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=barcelona
|
||||||
+ cflags-$(CONFIG_MNATIVE_INTEL) += -march=native
|
+endif
|
||||||
+ cflags-$(CONFIG_MNATIVE_AMD) += -march=native -mno-tbm
|
+
|
||||||
+ cflags-$(CONFIG_MNEHALEM) += -march=nehalem
|
+ifdef CONFIG_MBOBCAT
|
||||||
+ cflags-$(CONFIG_MWESTMERE) += -march=westmere
|
+ KBUILD_CFLAGS += -march=btver1
|
||||||
+ cflags-$(CONFIG_MSILVERMONT) += -march=silvermont
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=btver1
|
||||||
+ cflags-$(CONFIG_MGOLDMONT) += -march=goldmont
|
+endif
|
||||||
+ cflags-$(CONFIG_MGOLDMONTPLUS) += -march=goldmont-plus
|
+
|
||||||
+ cflags-$(CONFIG_MSANDYBRIDGE) += -march=sandybridge
|
+ifdef CONFIG_MJAGUAR
|
||||||
+ cflags-$(CONFIG_MIVYBRIDGE) += -march=ivybridge
|
+ KBUILD_CFLAGS += -march=btver2
|
||||||
+ cflags-$(CONFIG_MHASWELL) += -march=haswell
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=btver2
|
||||||
+ cflags-$(CONFIG_MBROADWELL) += -march=broadwell
|
+endif
|
||||||
+ cflags-$(CONFIG_MSKYLAKE) += -march=skylake
|
+
|
||||||
+ cflags-$(CONFIG_MSKYLAKEX) += -march=skylake-avx512
|
+ifdef CONFIG_MBULLDOZER
|
||||||
+ cflags-$(CONFIG_MCANNONLAKE) += -march=cannonlake
|
+ KBUILD_CFLAGS += -march=bdver1
|
||||||
+ cflags-$(CONFIG_MICELAKE_CLIENT) += -march=icelake-client
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver1
|
||||||
+ cflags-$(CONFIG_MICELAKE_SERVER) += -march=icelake-server
|
+endif
|
||||||
+ cflags-$(CONFIG_MCASCADELAKE) += -march=cascadelake
|
+
|
||||||
+ cflags-$(CONFIG_MCOOPERLAKE) += -march=cooperlake
|
+ifdef CONFIG_MPILEDRIVER
|
||||||
+ cflags-$(CONFIG_MTIGERLAKE) += -march=tigerlake
|
+ KBUILD_CFLAGS += -march=bdver2 -mno-tbm
|
||||||
+ cflags-$(CONFIG_MSAPPHIRERAPIDS) += -march=sapphirerapids
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver2 -mno-tbm
|
||||||
+ cflags-$(CONFIG_MROCKETLAKE) += -march=rocketlake
|
+endif
|
||||||
+ cflags-$(CONFIG_MALDERLAKE) += -march=alderlake
|
+
|
||||||
+ cflags-$(CONFIG_MRAPTORLAKE) += -march=raptorlake
|
+ifdef CONFIG_MSTEAMROLLER
|
||||||
+ cflags-$(CONFIG_MMETEORLAKE) += -march=meteorlake
|
+ KBUILD_CFLAGS += -march=bdver3 -mno-tbm
|
||||||
+ cflags-$(CONFIG_MEMERALDRAPIDS) += -march=emeraldrapids
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver3 -mno-tbm
|
||||||
KBUILD_CFLAGS += $(cflags-y)
|
+endif
|
||||||
|
+
|
||||||
rustflags-$(CONFIG_MK8) += -Ctarget-cpu=k8
|
+ifdef CONFIG_MEXCAVATOR
|
||||||
rustflags-$(CONFIG_MPSC) += -Ctarget-cpu=nocona
|
+ KBUILD_CFLAGS += -march=bdver4 -mno-tbm
|
||||||
rustflags-$(CONFIG_MCORE2) += -Ctarget-cpu=core2
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=bdver4 -mno-tbm
|
||||||
rustflags-$(CONFIG_MATOM) += -Ctarget-cpu=atom
|
+endif
|
||||||
- rustflags-$(CONFIG_GENERIC_CPU) += -Ztune-cpu=generic
|
+
|
||||||
+ rustflags-$(CONFIG_MK8SSE3) += -Ctarget-cpu=k8-sse3
|
+ifdef CONFIG_MZEN
|
||||||
+ rustflags-$(CONFIG_MK10) += -Ctarget-cpu=amdfam10
|
+ KBUILD_CFLAGS += -march=znver1
|
||||||
+ rustflags-$(CONFIG_MBARCELONA) += -Ctarget-cpu=barcelona
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver1
|
||||||
+ rustflags-$(CONFIG_MBOBCAT) += -Ctarget-cpu=btver1
|
+endif
|
||||||
+ rustflags-$(CONFIG_MJAGUAR) += -Ctarget-cpu=btver2
|
+
|
||||||
+ rustflags-$(CONFIG_MBULLDOZER) += -Ctarget-cpu=bdver1
|
+ifdef CONFIG_MZEN2
|
||||||
+ rustflags-$(CONFIG_MPILEDRIVER) += -Ctarget-cpu=bdver2
|
+ KBUILD_CFLAGS += -march=znver2
|
||||||
+ rustflags-$(CONFIG_MSTEAMROLLER) += -Ctarget-cpu=bdver3
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver2
|
||||||
+ rustflags-$(CONFIG_MEXCAVATOR) += -Ctarget-cpu=bdver4
|
+endif
|
||||||
+ rustflags-$(CONFIG_MZEN) += -Ctarget-cpu=znver1
|
+
|
||||||
+ rustflags-$(CONFIG_MZEN2) += -Ctarget-cpu=znver2
|
+ifdef CONFIG_MZEN3
|
||||||
+ rustflags-$(CONFIG_MZEN3) += -Ctarget-cpu=znver3
|
+ KBUILD_CFLAGS += -march=znver3
|
||||||
+ rustflags-$(CONFIG_MZEN4) += -Ctarget-cpu=znver4
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver3
|
||||||
+ rustflags-$(CONFIG_MZEN5) += -Ctarget-cpu=znver5
|
+endif
|
||||||
+ rustflags-$(CONFIG_MNATIVE_INTEL) += -Ctarget-cpu=native
|
+
|
||||||
+ rustflags-$(CONFIG_MNATIVE_AMD) += -Ctarget-cpu=native
|
+ifdef CONFIG_MZEN4
|
||||||
+ rustflags-$(CONFIG_MNEHALEM) += -Ctarget-cpu=nehalem
|
+ KBUILD_CFLAGS += -march=znver4
|
||||||
+ rustflags-$(CONFIG_MWESTMERE) += -Ctarget-cpu=westmere
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver4
|
||||||
+ rustflags-$(CONFIG_MSILVERMONT) += -Ctarget-cpu=silvermont
|
+endif
|
||||||
+ rustflags-$(CONFIG_MGOLDMONT) += -Ctarget-cpu=goldmont
|
+
|
||||||
+ rustflags-$(CONFIG_MGOLDMONTPLUS) += -Ctarget-cpu=goldmont-plus
|
+ifdef CONFIG_MZEN5
|
||||||
+ rustflags-$(CONFIG_MSANDYBRIDGE) += -Ctarget-cpu=sandybridge
|
+ KBUILD_CFLAGS += -march=znver5
|
||||||
+ rustflags-$(CONFIG_MIVYBRIDGE) += -Ctarget-cpu=ivybridge
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=znver5
|
||||||
+ rustflags-$(CONFIG_MHASWELL) += -Ctarget-cpu=haswell
|
+endif
|
||||||
+ rustflags-$(CONFIG_MBROADWELL) += -Ctarget-cpu=broadwell
|
+
|
||||||
+ rustflags-$(CONFIG_MSKYLAKE) += -Ctarget-cpu=skylake
|
+ifdef CONFIG_MPSC
|
||||||
+ rustflags-$(CONFIG_MSKYLAKEX) += -Ctarget-cpu=skylake-avx512
|
+ KBUILD_CFLAGS += -march=nocona
|
||||||
+ rustflags-$(CONFIG_MCANNONLAKE) += -Ctarget-cpu=cannonlake
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=nocona
|
||||||
+ rustflags-$(CONFIG_MICELAKE_CLIENT) += -Ctarget-cpu=icelake-client
|
+endif
|
||||||
+ rustflags-$(CONFIG_MICELAKE_SERVER) += -Ctarget-cpu=icelake-server
|
+
|
||||||
+ rustflags-$(CONFIG_MCASCADELAKE) += -Ctarget-cpu=cascadelake
|
+ifdef CONFIG_MCORE2
|
||||||
+ rustflags-$(CONFIG_MCOOPERLAKE) += -Ctarget-cpu=cooperlake
|
+ KBUILD_CFLAGS += -march=core2
|
||||||
+ rustflags-$(CONFIG_MTIGERLAKE) += -Ctarget-cpu=tigerlake
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=core2
|
||||||
+ rustflags-$(CONFIG_MSAPPHIRERAPIDS) += -Ctarget-cpu=sapphirerapids
|
+endif
|
||||||
+ rustflags-$(CONFIG_MROCKETLAKE) += -Ctarget-cpu=rocketlake
|
+
|
||||||
+ rustflags-$(CONFIG_MALDERLAKE) += -Ctarget-cpu=alderlake
|
+ifdef CONFIG_MNEHALEM
|
||||||
+ rustflags-$(CONFIG_MRAPTORLAKE) += -Ctarget-cpu=raptorlake
|
+ KBUILD_CFLAGS += -march=nehalem
|
||||||
+ rustflags-$(CONFIG_MMETEORLAKE) += -Ctarget-cpu=meteorlake
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=nehalem
|
||||||
+ rustflags-$(CONFIG_MEMERALDRAPIDS) += -Ctarget-cpu=emeraldrapids
|
+endif
|
||||||
KBUILD_RUSTFLAGS += $(rustflags-y)
|
+
|
||||||
|
+ifdef CONFIG_MWESTMERE
|
||||||
|
+ KBUILD_CFLAGS += -march=westmere
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=westmere
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MSILVERMONT
|
||||||
|
+ KBUILD_CFLAGS += -march=silvermont
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=silvermont
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MGOLDMONT
|
||||||
|
+ KBUILD_CFLAGS += -march=goldmont
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=goldmont
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MGOLDMONTPLUS
|
||||||
|
+ KBUILD_CFLAGS += -march=goldmont-plus
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=goldmont-plus
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MSANDYBRIDGE
|
||||||
|
+ KBUILD_CFLAGS += -march=sandybridge
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=sandybridge
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MIVYBRIDGE
|
||||||
|
+ KBUILD_CFLAGS += -march=ivybridge
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=ivybridge
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MHASWELL
|
||||||
|
+ KBUILD_CFLAGS += -march=haswell
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=haswell
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MBROADWELL
|
||||||
|
+ KBUILD_CFLAGS += -march=broadwell
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=broadwell
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MSKYLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=skylake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=skylake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MSKYLAKEX
|
||||||
|
+ KBUILD_CFLAGS += -march=skylake-avx512
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=skylake-avx512
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MCANNONLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=cannonlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=cannonlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MICELAKE_CLIENT
|
||||||
|
+ KBUILD_CFLAGS += -march=icelake-client
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=icelake-client
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MICELAKE_SERVER
|
||||||
|
+ KBUILD_CFLAGS += -march=icelake-server
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=icelake-server
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MCOOPERLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=cooperlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=cooperlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MCASCADELAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=cascadelake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=cascadelake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MTIGERLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=tigerlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=tigerlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MSAPPHIRERAPIDS
|
||||||
|
+ KBUILD_CFLAGS += -march=sapphirerapids
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=sapphirerapids
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MROCKETLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=rocketlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=rocketlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MALDERLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=alderlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=alderlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MRAPTORLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=raptorlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=raptorlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MMETEORLAKE
|
||||||
|
+ KBUILD_CFLAGS += -march=meteorlake
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=meteorlake
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MEMERALDRAPIDS
|
||||||
|
+ KBUILD_CFLAGS += -march=emeraldrapids
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=emeraldrapids
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_MDIAMONDRAPIDS
|
||||||
|
+ KBUILD_CFLAGS += -march=diamondrapids
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=diamondrapids
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
+ifdef CONFIG_GENERIC_CPU
|
||||||
|
+ifeq ($(CONFIG_X86_64_VERSION),1)
|
||||||
|
KBUILD_CFLAGS += -march=x86-64 -mtune=generic
|
||||||
|
KBUILD_RUSTFLAGS += -Ctarget-cpu=x86-64 -Ztune-cpu=generic
|
||||||
|
+else
|
||||||
|
+ KBUILD_CFLAGS +=-march=x86-64-v$(CONFIG_X86_64_VERSION)
|
||||||
|
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=x86-64-v$(CONFIG_X86_64_VERSION)
|
||||||
|
+endif
|
||||||
|
+endif
|
||||||
|
endif
|
||||||
|
-
|
||||||
KBUILD_CFLAGS += -mno-red-zone
|
KBUILD_CFLAGS += -mno-red-zone
|
||||||
--- a/arch/x86/include/asm/vermagic.h
|
KBUILD_CFLAGS += -mcmodel=kernel
|
||||||
+++ b/arch/x86/include/asm/vermagic.h
|
KBUILD_RUSTFLAGS += -Cno-redzone=y
|
||||||
@@ -17,6 +17,56 @@
|
|
||||||
#define MODULE_PROC_FAMILY "586MMX "
|
|
||||||
#elif defined CONFIG_MCORE2
|
|
||||||
#define MODULE_PROC_FAMILY "CORE2 "
|
|
||||||
+#elif defined CONFIG_MNATIVE_INTEL
|
|
||||||
+#define MODULE_PROC_FAMILY "NATIVE_INTEL "
|
|
||||||
+#elif defined CONFIG_MNATIVE_AMD
|
|
||||||
+#define MODULE_PROC_FAMILY "NATIVE_AMD "
|
|
||||||
+#elif defined CONFIG_MNEHALEM
|
|
||||||
+#define MODULE_PROC_FAMILY "NEHALEM "
|
|
||||||
+#elif defined CONFIG_MWESTMERE
|
|
||||||
+#define MODULE_PROC_FAMILY "WESTMERE "
|
|
||||||
+#elif defined CONFIG_MSILVERMONT
|
|
||||||
+#define MODULE_PROC_FAMILY "SILVERMONT "
|
|
||||||
+#elif defined CONFIG_MGOLDMONT
|
|
||||||
+#define MODULE_PROC_FAMILY "GOLDMONT "
|
|
||||||
+#elif defined CONFIG_MGOLDMONTPLUS
|
|
||||||
+#define MODULE_PROC_FAMILY "GOLDMONTPLUS "
|
|
||||||
+#elif defined CONFIG_MSANDYBRIDGE
|
|
||||||
+#define MODULE_PROC_FAMILY "SANDYBRIDGE "
|
|
||||||
+#elif defined CONFIG_MIVYBRIDGE
|
|
||||||
+#define MODULE_PROC_FAMILY "IVYBRIDGE "
|
|
||||||
+#elif defined CONFIG_MHASWELL
|
|
||||||
+#define MODULE_PROC_FAMILY "HASWELL "
|
|
||||||
+#elif defined CONFIG_MBROADWELL
|
|
||||||
+#define MODULE_PROC_FAMILY "BROADWELL "
|
|
||||||
+#elif defined CONFIG_MSKYLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "SKYLAKE "
|
|
||||||
+#elif defined CONFIG_MSKYLAKEX
|
|
||||||
+#define MODULE_PROC_FAMILY "SKYLAKEX "
|
|
||||||
+#elif defined CONFIG_MCANNONLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "CANNONLAKE "
|
|
||||||
+#elif defined CONFIG_MICELAKE_CLIENT
|
|
||||||
+#define MODULE_PROC_FAMILY "ICELAKE_CLIENT "
|
|
||||||
+#elif defined CONFIG_MICELAKE_SERVER
|
|
||||||
+#define MODULE_PROC_FAMILY "ICELAKE_SERVER "
|
|
||||||
+#elif defined CONFIG_MCASCADELAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "CASCADELAKE "
|
|
||||||
+#elif defined CONFIG_MCOOPERLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "COOPERLAKE "
|
|
||||||
+#elif defined CONFIG_MTIGERLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "TIGERLAKE "
|
|
||||||
+#elif defined CONFIG_MSAPPHIRERAPIDS
|
|
||||||
+#define MODULE_PROC_FAMILY "SAPPHIRERAPIDS "
|
|
||||||
+#elif defined CONFIG_ROCKETLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "ROCKETLAKE "
|
|
||||||
+#elif defined CONFIG_MALDERLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "ALDERLAKE "
|
|
||||||
+#elif defined CONFIG_MRAPTORLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "RAPTORLAKE "
|
|
||||||
+#elif defined CONFIG_MMETEORLAKE
|
|
||||||
+#define MODULE_PROC_FAMILY "METEORLAKE "
|
|
||||||
+#elif defined CONFIG_MEMERALDRAPIDS
|
|
||||||
+#define MODULE_PROC_FAMILY "EMERALDRAPIDS "
|
|
||||||
#elif defined CONFIG_MATOM
|
|
||||||
#define MODULE_PROC_FAMILY "ATOM "
|
|
||||||
#elif defined CONFIG_M686
|
|
||||||
@@ -35,6 +85,28 @@
|
|
||||||
#define MODULE_PROC_FAMILY "K7 "
|
|
||||||
#elif defined CONFIG_MK8
|
|
||||||
#define MODULE_PROC_FAMILY "K8 "
|
|
||||||
+#elif defined CONFIG_MK8SSE3
|
|
||||||
+#define MODULE_PROC_FAMILY "K8SSE3 "
|
|
||||||
+#elif defined CONFIG_MK10
|
|
||||||
+#define MODULE_PROC_FAMILY "K10 "
|
|
||||||
+#elif defined CONFIG_MBARCELONA
|
|
||||||
+#define MODULE_PROC_FAMILY "BARCELONA "
|
|
||||||
+#elif defined CONFIG_MBOBCAT
|
|
||||||
+#define MODULE_PROC_FAMILY "BOBCAT "
|
|
||||||
+#elif defined CONFIG_MBULLDOZER
|
|
||||||
+#define MODULE_PROC_FAMILY "BULLDOZER "
|
|
||||||
+#elif defined CONFIG_MPILEDRIVER
|
|
||||||
+#define MODULE_PROC_FAMILY "PILEDRIVER "
|
|
||||||
+#elif defined CONFIG_MSTEAMROLLER
|
|
||||||
+#define MODULE_PROC_FAMILY "STEAMROLLER "
|
|
||||||
+#elif defined CONFIG_MJAGUAR
|
|
||||||
+#define MODULE_PROC_FAMILY "JAGUAR "
|
|
||||||
+#elif defined CONFIG_MEXCAVATOR
|
|
||||||
+#define MODULE_PROC_FAMILY "EXCAVATOR "
|
|
||||||
+#elif defined CONFIG_MZEN
|
|
||||||
+#define MODULE_PROC_FAMILY "ZEN "
|
|
||||||
+#elif defined CONFIG_MZEN2
|
|
||||||
+#define MODULE_PROC_FAMILY "ZEN2 "
|
|
||||||
#elif defined CONFIG_MELAN
|
|
||||||
#define MODULE_PROC_FAMILY "ELAN "
|
|
||||||
#elif defined CONFIG_MCRUSOE
|
|
@@ -1,4 +1,4 @@
|
|||||||
From f4f448a305e9d705b9a0da102ddfd58bfaac5cc0 Mon Sep 17 00:00:00 2001
|
From 15db9c3419fd147812151d95fb34bbd70f2f9715 Mon Sep 17 00:00:00 2001
|
||||||
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
||||||
Date: Sun, 11 Dec 2022 23:51:16 +0100
|
Date: Sun, 11 Dec 2022 23:51:16 +0100
|
||||||
Subject: ZEN: Restore CONFIG_OPTIMIZE_FOR_PERFORMANCE_O3
|
Subject: ZEN: Restore CONFIG_OPTIMIZE_FOR_PERFORMANCE_O3
|
||||||
@@ -13,7 +13,7 @@ dependency on CONFIG_ARC and adds RUSTFLAGS.
|
|||||||
|
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -872,6 +872,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
|
@@ -873,6 +873,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
|
||||||
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||||
KBUILD_CFLAGS += -O2
|
KBUILD_CFLAGS += -O2
|
||||||
KBUILD_RUSTFLAGS += -Copt-level=2
|
KBUILD_RUSTFLAGS += -Copt-level=2
|
||||||
@@ -25,7 +25,7 @@ dependency on CONFIG_ARC and adds RUSTFLAGS.
|
|||||||
KBUILD_RUSTFLAGS += -Copt-level=s
|
KBUILD_RUSTFLAGS += -Copt-level=s
|
||||||
--- a/init/Kconfig
|
--- a/init/Kconfig
|
||||||
+++ b/init/Kconfig
|
+++ b/init/Kconfig
|
||||||
@@ -1465,6 +1465,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
@@ -1498,6 +1498,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||||
with the "-O2" compiler flag for best performance and most
|
with the "-O2" compiler flag for best performance and most
|
||||||
helpful compile-time warnings.
|
helpful compile-time warnings.
|
||||||
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -880,6 +880,10 @@ KBUILD_CFLAGS += -Os
|
@@ -881,6 +881,10 @@ KBUILD_CFLAGS += -Os
|
||||||
KBUILD_RUSTFLAGS += -Copt-level=s
|
KBUILD_RUSTFLAGS += -Copt-level=s
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
From 3ebc1fdf3e0ee9bff1efe20eb5791eba5c84a810 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexandre Frade <kernel@xanmod.org>
|
|
||||||
Date: Thu, 3 Aug 2023 13:53:49 +0000
|
|
||||||
Subject: XANMOD: x86/build: Prevent generating avx2 and avx512 floating-point code
|
|
||||||
|
|
||||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|
||||||
---
|
|
||||||
arch/x86/Makefile | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/x86/Makefile
|
|
||||||
+++ b/arch/x86/Makefile
|
|
||||||
@@ -74,9 +74,9 @@ export BITS
|
|
||||||
#
|
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
|
|
||||||
#
|
|
||||||
-KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx
|
|
||||||
+KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-avx2 -mno-avx512f
|
|
||||||
KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json
|
|
||||||
-KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2
|
|
||||||
+KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,-avx512f
|
|
||||||
|
|
||||||
#
|
|
||||||
# CFLAGS for compiling floating point code inside the kernel.
|
|
@@ -0,0 +1,22 @@
|
|||||||
|
From 40f9fa82bb21a5e3f17f539897128a69824ad8ef Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexandre Frade <kernel@xanmod.org>
|
||||||
|
Date: Mon, 18 Nov 2024 20:17:44 +0000
|
||||||
|
Subject: [PATCH 1/4] XANMOD: x86/build: Prevent generating avx2 floating-point
|
||||||
|
code
|
||||||
|
|
||||||
|
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||||
|
---
|
||||||
|
arch/x86/Makefile | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/arch/x86/Makefile
|
||||||
|
+++ b/arch/x86/Makefile
|
||||||
|
@@ -74,7 +74,7 @@ export BITS
|
||||||
|
#
|
||||||
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
|
||||||
|
#
|
||||||
|
-KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx
|
||||||
|
+KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-avx2
|
||||||
|
KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json
|
||||||
|
KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2
|
||||||
|
|
@@ -4,8 +4,8 @@
|
|||||||
#
|
#
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53383
|
||||||
#
|
#
|
||||||
-KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-avx2 -mno-avx512f
|
-KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-avx2
|
||||||
+KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-avx2 -mno-avx512f -fno-tree-vectorize
|
+KBUILD_CFLAGS += -mno-sse -mno-mmx -mno-sse2 -mno-3dnow -mno-avx -mno-avx2 -fno-tree-vectorize
|
||||||
KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json
|
KBUILD_RUSTFLAGS += --target=$(objtree)/scripts/target.json
|
||||||
KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,-avx512f
|
KBUILD_RUSTFLAGS += -Ctarget-feature=-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2
|
||||||
|
|
||||||
|
@@ -1,7 +1,8 @@
|
|||||||
From b1a99a2a9675f80b7c04a239a6b047373ccf3a17 Mon Sep 17 00:00:00 2001
|
From 7e45fca50a3151248266bca7058e1efa9b5233ca Mon Sep 17 00:00:00 2001
|
||||||
From: Alexandre Frade <kernel@xanmod.org>
|
From: Alexandre Frade <kernel@xanmod.org>
|
||||||
Date: Mon, 16 Sep 2024 00:55:35 +0000
|
Date: Mon, 16 Sep 2024 00:55:35 +0000
|
||||||
Subject: XANMOD: kbuild: Add GCC SMS-based modulo scheduling flags
|
Subject: [PATCH 02/19] XANMOD: kbuild: Add GCC SMS-based modulo scheduling
|
||||||
|
flags
|
||||||
|
|
||||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||||
---
|
---
|
||||||
@@ -10,7 +11,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|||||||
|
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -884,6 +884,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
@@ -885,6 +885,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fivopts)
|
KBUILD_CFLAGS += $(call cc-option,-fivopts)
|
||||||
endif
|
endif
|
||||||
|
|
@@ -1,59 +0,0 @@
|
|||||||
From c8c9ab8ff5cc5c0809cd958679614ade200a6ab3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:14 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Modify the min_perf calculation in adjust_perf
|
|
||||||
callback
|
|
||||||
|
|
||||||
Instead of setting a fixed floor at lowest_nonlinear_perf, use the
|
|
||||||
min_limit_perf value, so that it gives the user the freedom to lower the
|
|
||||||
floor further.
|
|
||||||
|
|
||||||
There are two minimum frequency/perf limits that we need to consider in
|
|
||||||
the adjust_perf callback. One provided by schedutil i.e. the sg_cpu->bw_min
|
|
||||||
value passed in _min_perf arg, another is the effective value of
|
|
||||||
min_freq_qos request that is updated in cpudata->min_limit_perf. Modify the
|
|
||||||
code to use the bigger of these two values.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 12 ++++++------
|
|
||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -672,7 +672,7 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
unsigned long capacity)
|
|
||||||
{
|
|
||||||
unsigned long max_perf, min_perf, des_perf,
|
|
||||||
- cap_perf, lowest_nonlinear_perf;
|
|
||||||
+ cap_perf, min_limit_perf;
|
|
||||||
struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
|
|
||||||
@@ -684,20 +684,20 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
|
|
||||||
amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
-
|
|
||||||
cap_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
- lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf);
|
|
||||||
+ min_limit_perf = READ_ONCE(cpudata->min_limit_perf);
|
|
||||||
|
|
||||||
des_perf = cap_perf;
|
|
||||||
if (target_perf < capacity)
|
|
||||||
des_perf = DIV_ROUND_UP(cap_perf * target_perf, capacity);
|
|
||||||
|
|
||||||
- min_perf = READ_ONCE(cpudata->lowest_perf);
|
|
||||||
if (_min_perf < capacity)
|
|
||||||
min_perf = DIV_ROUND_UP(cap_perf * _min_perf, capacity);
|
|
||||||
+ else
|
|
||||||
+ min_perf = cap_perf;
|
|
||||||
|
|
||||||
- if (min_perf < lowest_nonlinear_perf)
|
|
||||||
- min_perf = lowest_nonlinear_perf;
|
|
||||||
+ if (min_perf < min_limit_perf)
|
|
||||||
+ min_perf = min_limit_perf;
|
|
||||||
|
|
||||||
max_perf = cpudata->max_limit_perf;
|
|
||||||
if (max_perf < min_perf)
|
|
@@ -1,27 +0,0 @@
|
|||||||
From 16466d169a187b4c650771234de119279346f523 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:15 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Remove the redundant des_perf clamping in
|
|
||||||
adjust_perf
|
|
||||||
|
|
||||||
des_perf is later on clamped between min_perf and max_perf in
|
|
||||||
amd_pstate_update. So, remove the redundant clamping from
|
|
||||||
amd_pstate_adjust_perf.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 2 --
|
|
||||||
1 file changed, 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -703,8 +703,6 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
if (max_perf < min_perf)
|
|
||||||
max_perf = min_perf;
|
|
||||||
|
|
||||||
- des_perf = clamp_t(unsigned long, des_perf, min_perf, max_perf);
|
|
||||||
-
|
|
||||||
amd_pstate_update(cpudata, min_perf, des_perf, max_perf, true,
|
|
||||||
policy->governor->flags);
|
|
||||||
cpufreq_cpu_put(policy);
|
|
@@ -1,51 +0,0 @@
|
|||||||
From 0dfebf0094ea7c512cf3db1013cf82124d4bbc3a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:16 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Pass min/max_limit_perf as min/max_perf to
|
|
||||||
amd_pstate_update
|
|
||||||
|
|
||||||
Currently, amd_pstate_update_freq passes the hardware perf limits as
|
|
||||||
min/max_perf to amd_pstate_update, which eventually gets programmed into
|
|
||||||
the min/max_perf fields of the CPPC_REQ register.
|
|
||||||
|
|
||||||
Instead pass the effective perf limits i.e. min/max_limit_perf values to
|
|
||||||
amd_pstate_update as min/max_perf.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 9 ++++-----
|
|
||||||
1 file changed, 4 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -615,7 +615,7 @@ static int amd_pstate_update_freq(struct
|
|
||||||
{
|
|
||||||
struct cpufreq_freqs freqs;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- unsigned long max_perf, min_perf, des_perf, cap_perf;
|
|
||||||
+ unsigned long des_perf, cap_perf;
|
|
||||||
|
|
||||||
if (!cpudata->max_freq)
|
|
||||||
return -ENODEV;
|
|
||||||
@@ -624,8 +624,6 @@ static int amd_pstate_update_freq(struct
|
|
||||||
amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
cap_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
- min_perf = READ_ONCE(cpudata->lowest_perf);
|
|
||||||
- max_perf = cap_perf;
|
|
||||||
|
|
||||||
freqs.old = policy->cur;
|
|
||||||
freqs.new = target_freq;
|
|
||||||
@@ -642,8 +640,9 @@ static int amd_pstate_update_freq(struct
|
|
||||||
if (!fast_switch)
|
|
||||||
cpufreq_freq_transition_begin(policy, &freqs);
|
|
||||||
|
|
||||||
- amd_pstate_update(cpudata, min_perf, des_perf,
|
|
||||||
- max_perf, fast_switch, policy->governor->flags);
|
|
||||||
+ amd_pstate_update(cpudata, cpudata->min_limit_perf, des_perf,
|
|
||||||
+ cpudata->max_limit_perf, fast_switch,
|
|
||||||
+ policy->governor->flags);
|
|
||||||
|
|
||||||
if (!fast_switch)
|
|
||||||
cpufreq_freq_transition_end(policy, &freqs, false);
|
|
@@ -1,355 +0,0 @@
|
|||||||
From 3daf64b383bc41feb0bf23790939b4512ba9170d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:17 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Convert all perf values to u8
|
|
||||||
|
|
||||||
All perf values are always within 0-255 range, hence convert their
|
|
||||||
datatype to u8 everywhere.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate-trace.h | 46 +++++++++++------------
|
|
||||||
drivers/cpufreq/amd-pstate.c | 60 +++++++++++++++---------------
|
|
||||||
drivers/cpufreq/amd-pstate.h | 18 ++++-----
|
|
||||||
3 files changed, 62 insertions(+), 62 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate-trace.h
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate-trace.h
|
|
||||||
@@ -24,9 +24,9 @@
|
|
||||||
|
|
||||||
TRACE_EVENT(amd_pstate_perf,
|
|
||||||
|
|
||||||
- TP_PROTO(unsigned long min_perf,
|
|
||||||
- unsigned long target_perf,
|
|
||||||
- unsigned long capacity,
|
|
||||||
+ TP_PROTO(u8 min_perf,
|
|
||||||
+ u8 target_perf,
|
|
||||||
+ u8 capacity,
|
|
||||||
u64 freq,
|
|
||||||
u64 mperf,
|
|
||||||
u64 aperf,
|
|
||||||
@@ -47,9 +47,9 @@ TRACE_EVENT(amd_pstate_perf,
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
|
||||||
- __field(unsigned long, min_perf)
|
|
||||||
- __field(unsigned long, target_perf)
|
|
||||||
- __field(unsigned long, capacity)
|
|
||||||
+ __field(u8, min_perf)
|
|
||||||
+ __field(u8, target_perf)
|
|
||||||
+ __field(u8, capacity)
|
|
||||||
__field(unsigned long long, freq)
|
|
||||||
__field(unsigned long long, mperf)
|
|
||||||
__field(unsigned long long, aperf)
|
|
||||||
@@ -70,10 +70,10 @@ TRACE_EVENT(amd_pstate_perf,
|
|
||||||
__entry->fast_switch = fast_switch;
|
|
||||||
),
|
|
||||||
|
|
||||||
- TP_printk("amd_min_perf=%lu amd_des_perf=%lu amd_max_perf=%lu freq=%llu mperf=%llu aperf=%llu tsc=%llu cpu_id=%u fast_switch=%s",
|
|
||||||
- (unsigned long)__entry->min_perf,
|
|
||||||
- (unsigned long)__entry->target_perf,
|
|
||||||
- (unsigned long)__entry->capacity,
|
|
||||||
+ TP_printk("amd_min_perf=%hhu amd_des_perf=%hhu amd_max_perf=%hhu freq=%llu mperf=%llu aperf=%llu tsc=%llu cpu_id=%u fast_switch=%s",
|
|
||||||
+ (u8)__entry->min_perf,
|
|
||||||
+ (u8)__entry->target_perf,
|
|
||||||
+ (u8)__entry->capacity,
|
|
||||||
(unsigned long long)__entry->freq,
|
|
||||||
(unsigned long long)__entry->mperf,
|
|
||||||
(unsigned long long)__entry->aperf,
|
|
||||||
@@ -86,10 +86,10 @@ TRACE_EVENT(amd_pstate_perf,
|
|
||||||
TRACE_EVENT(amd_pstate_epp_perf,
|
|
||||||
|
|
||||||
TP_PROTO(unsigned int cpu_id,
|
|
||||||
- unsigned int highest_perf,
|
|
||||||
- unsigned int epp,
|
|
||||||
- unsigned int min_perf,
|
|
||||||
- unsigned int max_perf,
|
|
||||||
+ u8 highest_perf,
|
|
||||||
+ u8 epp,
|
|
||||||
+ u8 min_perf,
|
|
||||||
+ u8 max_perf,
|
|
||||||
bool boost
|
|
||||||
),
|
|
||||||
|
|
||||||
@@ -102,10 +102,10 @@ TRACE_EVENT(amd_pstate_epp_perf,
|
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
|
||||||
__field(unsigned int, cpu_id)
|
|
||||||
- __field(unsigned int, highest_perf)
|
|
||||||
- __field(unsigned int, epp)
|
|
||||||
- __field(unsigned int, min_perf)
|
|
||||||
- __field(unsigned int, max_perf)
|
|
||||||
+ __field(u8, highest_perf)
|
|
||||||
+ __field(u8, epp)
|
|
||||||
+ __field(u8, min_perf)
|
|
||||||
+ __field(u8, max_perf)
|
|
||||||
__field(bool, boost)
|
|
||||||
),
|
|
||||||
|
|
||||||
@@ -118,12 +118,12 @@ TRACE_EVENT(amd_pstate_epp_perf,
|
|
||||||
__entry->boost = boost;
|
|
||||||
),
|
|
||||||
|
|
||||||
- TP_printk("cpu%u: [%u<->%u]/%u, epp=%u, boost=%u",
|
|
||||||
+ TP_printk("cpu%u: [%hhu<->%hhu]/%hhu, epp=%hhu, boost=%u",
|
|
||||||
(unsigned int)__entry->cpu_id,
|
|
||||||
- (unsigned int)__entry->min_perf,
|
|
||||||
- (unsigned int)__entry->max_perf,
|
|
||||||
- (unsigned int)__entry->highest_perf,
|
|
||||||
- (unsigned int)__entry->epp,
|
|
||||||
+ (u8)__entry->min_perf,
|
|
||||||
+ (u8)__entry->max_perf,
|
|
||||||
+ (u8)__entry->highest_perf,
|
|
||||||
+ (u8)__entry->epp,
|
|
||||||
(bool)__entry->boost
|
|
||||||
)
|
|
||||||
);
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -186,7 +186,7 @@ static inline int get_mode_idx_from_str(
|
|
||||||
static DEFINE_MUTEX(amd_pstate_limits_lock);
|
|
||||||
static DEFINE_MUTEX(amd_pstate_driver_lock);
|
|
||||||
|
|
||||||
-static s16 msr_get_epp(struct amd_cpudata *cpudata)
|
|
||||||
+static u8 msr_get_epp(struct amd_cpudata *cpudata)
|
|
||||||
{
|
|
||||||
u64 value;
|
|
||||||
int ret;
|
|
||||||
@@ -207,7 +207,7 @@ static inline s16 amd_pstate_get_epp(str
|
|
||||||
return static_call(amd_pstate_get_epp)(cpudata);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static s16 shmem_get_epp(struct amd_cpudata *cpudata)
|
|
||||||
+static u8 shmem_get_epp(struct amd_cpudata *cpudata)
|
|
||||||
{
|
|
||||||
u64 epp;
|
|
||||||
int ret;
|
|
||||||
@@ -218,11 +218,11 @@ static s16 shmem_get_epp(struct amd_cpud
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return (s16)(epp & 0xff);
|
|
||||||
+ return FIELD_GET(AMD_CPPC_EPP_PERF_MASK, epp);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int msr_update_perf(struct amd_cpudata *cpudata, u32 min_perf,
|
|
||||||
- u32 des_perf, u32 max_perf, u32 epp, bool fast_switch)
|
|
||||||
+static int msr_update_perf(struct amd_cpudata *cpudata, u8 min_perf,
|
|
||||||
+ u8 des_perf, u8 max_perf, u8 epp, bool fast_switch)
|
|
||||||
{
|
|
||||||
u64 value, prev;
|
|
||||||
|
|
||||||
@@ -257,15 +257,15 @@ static int msr_update_perf(struct amd_cp
|
|
||||||
DEFINE_STATIC_CALL(amd_pstate_update_perf, msr_update_perf);
|
|
||||||
|
|
||||||
static inline int amd_pstate_update_perf(struct amd_cpudata *cpudata,
|
|
||||||
- u32 min_perf, u32 des_perf,
|
|
||||||
- u32 max_perf, u32 epp,
|
|
||||||
+ u8 min_perf, u8 des_perf,
|
|
||||||
+ u8 max_perf, u8 epp,
|
|
||||||
bool fast_switch)
|
|
||||||
{
|
|
||||||
return static_call(amd_pstate_update_perf)(cpudata, min_perf, des_perf,
|
|
||||||
max_perf, epp, fast_switch);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int msr_set_epp(struct amd_cpudata *cpudata, u32 epp)
|
|
||||||
+static int msr_set_epp(struct amd_cpudata *cpudata, u8 epp)
|
|
||||||
{
|
|
||||||
u64 value, prev;
|
|
||||||
int ret;
|
|
||||||
@@ -292,12 +292,12 @@ static int msr_set_epp(struct amd_cpudat
|
|
||||||
|
|
||||||
DEFINE_STATIC_CALL(amd_pstate_set_epp, msr_set_epp);
|
|
||||||
|
|
||||||
-static inline int amd_pstate_set_epp(struct amd_cpudata *cpudata, u32 epp)
|
|
||||||
+static inline int amd_pstate_set_epp(struct amd_cpudata *cpudata, u8 epp)
|
|
||||||
{
|
|
||||||
return static_call(amd_pstate_set_epp)(cpudata, epp);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int shmem_set_epp(struct amd_cpudata *cpudata, u32 epp)
|
|
||||||
+static int shmem_set_epp(struct amd_cpudata *cpudata, u8 epp)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct cppc_perf_ctrls perf_ctrls;
|
|
||||||
@@ -320,7 +320,7 @@ static int amd_pstate_set_energy_pref_in
|
|
||||||
int pref_index)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- int epp;
|
|
||||||
+ u8 epp;
|
|
||||||
|
|
||||||
if (!pref_index)
|
|
||||||
epp = cpudata->epp_default;
|
|
||||||
@@ -479,8 +479,8 @@ static inline int amd_pstate_init_perf(s
|
|
||||||
return static_call(amd_pstate_init_perf)(cpudata);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int shmem_update_perf(struct amd_cpudata *cpudata, u32 min_perf,
|
|
||||||
- u32 des_perf, u32 max_perf, u32 epp, bool fast_switch)
|
|
||||||
+static int shmem_update_perf(struct amd_cpudata *cpudata, u8 min_perf,
|
|
||||||
+ u8 des_perf, u8 max_perf, u8 epp, bool fast_switch)
|
|
||||||
{
|
|
||||||
struct cppc_perf_ctrls perf_ctrls;
|
|
||||||
|
|
||||||
@@ -531,14 +531,14 @@ static inline bool amd_pstate_sample(str
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void amd_pstate_update(struct amd_cpudata *cpudata, u32 min_perf,
|
|
||||||
- u32 des_perf, u32 max_perf, bool fast_switch, int gov_flags)
|
|
||||||
+static void amd_pstate_update(struct amd_cpudata *cpudata, u8 min_perf,
|
|
||||||
+ u8 des_perf, u8 max_perf, bool fast_switch, int gov_flags)
|
|
||||||
{
|
|
||||||
unsigned long max_freq;
|
|
||||||
struct cpufreq_policy *policy = cpufreq_cpu_get(cpudata->cpu);
|
|
||||||
- u32 nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
+ u8 nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
|
|
||||||
- des_perf = clamp_t(unsigned long, des_perf, min_perf, max_perf);
|
|
||||||
+ des_perf = clamp_t(u8, des_perf, min_perf, max_perf);
|
|
||||||
|
|
||||||
max_freq = READ_ONCE(cpudata->max_limit_freq);
|
|
||||||
policy->cur = div_u64(des_perf * max_freq, max_perf);
|
|
||||||
@@ -550,7 +550,7 @@ static void amd_pstate_update(struct amd
|
|
||||||
|
|
||||||
/* limit the max perf when core performance boost feature is disabled */
|
|
||||||
if (!cpudata->boost_supported)
|
|
||||||
- max_perf = min_t(unsigned long, nominal_perf, max_perf);
|
|
||||||
+ max_perf = min_t(u8, nominal_perf, max_perf);
|
|
||||||
|
|
||||||
if (trace_amd_pstate_perf_enabled() && amd_pstate_sample(cpudata)) {
|
|
||||||
trace_amd_pstate_perf(min_perf, des_perf, max_perf, cpudata->freq,
|
|
||||||
@@ -591,7 +591,8 @@ static int amd_pstate_verify(struct cpuf
|
|
||||||
|
|
||||||
static int amd_pstate_update_min_max_limit(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
- u32 max_limit_perf, min_limit_perf, max_perf, max_freq;
|
|
||||||
+ u8 max_limit_perf, min_limit_perf, max_perf;
|
|
||||||
+ u32 max_freq;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
max_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
@@ -615,7 +616,7 @@ static int amd_pstate_update_freq(struct
|
|
||||||
{
|
|
||||||
struct cpufreq_freqs freqs;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- unsigned long des_perf, cap_perf;
|
|
||||||
+ u8 des_perf, cap_perf;
|
|
||||||
|
|
||||||
if (!cpudata->max_freq)
|
|
||||||
return -ENODEV;
|
|
||||||
@@ -670,8 +671,7 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
unsigned long target_perf,
|
|
||||||
unsigned long capacity)
|
|
||||||
{
|
|
||||||
- unsigned long max_perf, min_perf, des_perf,
|
|
||||||
- cap_perf, min_limit_perf;
|
|
||||||
+ u8 max_perf, min_perf, des_perf, cap_perf, min_limit_perf;
|
|
||||||
struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
|
|
||||||
@@ -905,8 +905,8 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
u32 min_freq, max_freq;
|
|
||||||
- u32 highest_perf, nominal_perf, nominal_freq;
|
|
||||||
- u32 lowest_nonlinear_perf, lowest_nonlinear_freq;
|
|
||||||
+ u8 highest_perf, nominal_perf, lowest_nonlinear_perf;
|
|
||||||
+ u32 nominal_freq, lowest_nonlinear_freq;
|
|
||||||
struct cppc_perf_caps cppc_perf;
|
|
||||||
|
|
||||||
ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
|
|
||||||
@@ -1113,7 +1113,7 @@ static ssize_t show_amd_pstate_lowest_no
|
|
||||||
static ssize_t show_amd_pstate_highest_perf(struct cpufreq_policy *policy,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
- u32 perf;
|
|
||||||
+ u8 perf;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
@@ -1124,7 +1124,7 @@ static ssize_t show_amd_pstate_highest_p
|
|
||||||
static ssize_t show_amd_pstate_prefcore_ranking(struct cpufreq_policy *policy,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
- u32 perf;
|
|
||||||
+ u8 perf;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
perf = READ_ONCE(cpudata->prefcore_ranking);
|
|
||||||
@@ -1187,7 +1187,7 @@ static ssize_t show_energy_performance_p
|
|
||||||
struct cpufreq_policy *policy, char *buf)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- int preference;
|
|
||||||
+ u8 preference;
|
|
||||||
|
|
||||||
switch (cpudata->epp_cached) {
|
|
||||||
case AMD_CPPC_EPP_PERFORMANCE:
|
|
||||||
@@ -1549,7 +1549,7 @@ static void amd_pstate_epp_cpu_exit(stru
|
|
||||||
static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- u32 epp;
|
|
||||||
+ u8 epp;
|
|
||||||
|
|
||||||
amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
@@ -1598,7 +1598,7 @@ static int amd_pstate_epp_set_policy(str
|
|
||||||
static int amd_pstate_epp_reenable(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- u64 max_perf;
|
|
||||||
+ u8 max_perf;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = amd_pstate_cppc_enable(true);
|
|
||||||
@@ -1635,7 +1635,7 @@ static int amd_pstate_epp_cpu_online(str
|
|
||||||
static int amd_pstate_epp_cpu_offline(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- int min_perf;
|
|
||||||
+ u8 min_perf;
|
|
||||||
|
|
||||||
if (cpudata->suspended)
|
|
||||||
return 0;
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.h
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.h
|
|
||||||
@@ -70,13 +70,13 @@ struct amd_cpudata {
|
|
||||||
struct freq_qos_request req[2];
|
|
||||||
u64 cppc_req_cached;
|
|
||||||
|
|
||||||
- u32 highest_perf;
|
|
||||||
- u32 nominal_perf;
|
|
||||||
- u32 lowest_nonlinear_perf;
|
|
||||||
- u32 lowest_perf;
|
|
||||||
- u32 prefcore_ranking;
|
|
||||||
- u32 min_limit_perf;
|
|
||||||
- u32 max_limit_perf;
|
|
||||||
+ u8 highest_perf;
|
|
||||||
+ u8 nominal_perf;
|
|
||||||
+ u8 lowest_nonlinear_perf;
|
|
||||||
+ u8 lowest_perf;
|
|
||||||
+ u8 prefcore_ranking;
|
|
||||||
+ u8 min_limit_perf;
|
|
||||||
+ u8 max_limit_perf;
|
|
||||||
u32 min_limit_freq;
|
|
||||||
u32 max_limit_freq;
|
|
||||||
|
|
||||||
@@ -93,11 +93,11 @@ struct amd_cpudata {
|
|
||||||
bool hw_prefcore;
|
|
||||||
|
|
||||||
/* EPP feature related attributes*/
|
|
||||||
- s16 epp_cached;
|
|
||||||
+ u8 epp_cached;
|
|
||||||
u32 policy;
|
|
||||||
u64 cppc_cap1_cached;
|
|
||||||
bool suspended;
|
|
||||||
- s16 epp_default;
|
|
||||||
+ u8 epp_default;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
@@ -1,131 +0,0 @@
|
|||||||
From b132b889dc7aa398a789e02dd6fbd5a512b4a9e0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:18 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Modularize perf<->freq conversion
|
|
||||||
|
|
||||||
Delegate the perf<->frequency conversion to helper functions to reduce
|
|
||||||
code duplication, and improve readability.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 57 +++++++++++++++++++-----------------
|
|
||||||
1 file changed, 30 insertions(+), 27 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -142,6 +142,20 @@ static struct quirk_entry quirk_amd_7k62
|
|
||||||
.lowest_freq = 550,
|
|
||||||
};
|
|
||||||
|
|
||||||
+static inline u8 freq_to_perf(struct amd_cpudata *cpudata, unsigned int freq_val)
|
|
||||||
+{
|
|
||||||
+ u8 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * cpudata->nominal_perf,
|
|
||||||
+ cpudata->nominal_freq);
|
|
||||||
+
|
|
||||||
+ return clamp_t(u8, perf_val, cpudata->lowest_perf, cpudata->highest_perf);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static inline u32 perf_to_freq(struct amd_cpudata *cpudata, u8 perf_val)
|
|
||||||
+{
|
|
||||||
+ return DIV_ROUND_UP_ULL((u64)cpudata->nominal_freq * perf_val,
|
|
||||||
+ cpudata->nominal_perf);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
@@ -534,14 +548,12 @@ static inline bool amd_pstate_sample(str
|
|
||||||
static void amd_pstate_update(struct amd_cpudata *cpudata, u8 min_perf,
|
|
||||||
u8 des_perf, u8 max_perf, bool fast_switch, int gov_flags)
|
|
||||||
{
|
|
||||||
- unsigned long max_freq;
|
|
||||||
struct cpufreq_policy *policy = cpufreq_cpu_get(cpudata->cpu);
|
|
||||||
u8 nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
|
|
||||||
des_perf = clamp_t(u8, des_perf, min_perf, max_perf);
|
|
||||||
|
|
||||||
- max_freq = READ_ONCE(cpudata->max_limit_freq);
|
|
||||||
- policy->cur = div_u64(des_perf * max_freq, max_perf);
|
|
||||||
+ policy->cur = perf_to_freq(cpudata, des_perf);
|
|
||||||
|
|
||||||
if ((cppc_state == AMD_PSTATE_GUIDED) && (gov_flags & CPUFREQ_GOV_DYNAMIC_SWITCHING)) {
|
|
||||||
min_perf = des_perf;
|
|
||||||
@@ -591,14 +603,11 @@ static int amd_pstate_verify(struct cpuf
|
|
||||||
|
|
||||||
static int amd_pstate_update_min_max_limit(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
- u8 max_limit_perf, min_limit_perf, max_perf;
|
|
||||||
- u32 max_freq;
|
|
||||||
+ u8 max_limit_perf, min_limit_perf;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
- max_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
- max_freq = READ_ONCE(cpudata->max_freq);
|
|
||||||
- max_limit_perf = div_u64(policy->max * max_perf, max_freq);
|
|
||||||
- min_limit_perf = div_u64(policy->min * max_perf, max_freq);
|
|
||||||
+ max_limit_perf = freq_to_perf(cpudata, policy->max);
|
|
||||||
+ min_limit_perf = freq_to_perf(cpudata, policy->min);
|
|
||||||
|
|
||||||
if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
|
|
||||||
min_limit_perf = min(cpudata->nominal_perf, max_limit_perf);
|
|
||||||
@@ -616,21 +625,15 @@ static int amd_pstate_update_freq(struct
|
|
||||||
{
|
|
||||||
struct cpufreq_freqs freqs;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- u8 des_perf, cap_perf;
|
|
||||||
-
|
|
||||||
- if (!cpudata->max_freq)
|
|
||||||
- return -ENODEV;
|
|
||||||
+ u8 des_perf;
|
|
||||||
|
|
||||||
if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
|
|
||||||
amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
- cap_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
-
|
|
||||||
freqs.old = policy->cur;
|
|
||||||
freqs.new = target_freq;
|
|
||||||
|
|
||||||
- des_perf = DIV_ROUND_CLOSEST(target_freq * cap_perf,
|
|
||||||
- cpudata->max_freq);
|
|
||||||
+ des_perf = freq_to_perf(cpudata, target_freq);
|
|
||||||
|
|
||||||
WARN_ON(fast_switch && !policy->fast_switch_enabled);
|
|
||||||
/*
|
|
||||||
@@ -905,7 +908,6 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
u32 min_freq, max_freq;
|
|
||||||
- u8 highest_perf, nominal_perf, lowest_nonlinear_perf;
|
|
||||||
u32 nominal_freq, lowest_nonlinear_freq;
|
|
||||||
struct cppc_perf_caps cppc_perf;
|
|
||||||
|
|
||||||
@@ -923,16 +925,17 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
else
|
|
||||||
nominal_freq = cppc_perf.nominal_freq;
|
|
||||||
|
|
||||||
- highest_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
- nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
- max_freq = div_u64((u64)highest_perf * nominal_freq, nominal_perf);
|
|
||||||
-
|
|
||||||
- lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf);
|
|
||||||
- lowest_nonlinear_freq = div_u64((u64)nominal_freq * lowest_nonlinear_perf, nominal_perf);
|
|
||||||
- WRITE_ONCE(cpudata->min_freq, min_freq * 1000);
|
|
||||||
- WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq * 1000);
|
|
||||||
- WRITE_ONCE(cpudata->nominal_freq, nominal_freq * 1000);
|
|
||||||
- WRITE_ONCE(cpudata->max_freq, max_freq * 1000);
|
|
||||||
+ min_freq *= 1000;
|
|
||||||
+ nominal_freq *= 1000;
|
|
||||||
+
|
|
||||||
+ WRITE_ONCE(cpudata->nominal_freq, nominal_freq);
|
|
||||||
+ WRITE_ONCE(cpudata->min_freq, min_freq);
|
|
||||||
+
|
|
||||||
+ max_freq = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
+ lowest_nonlinear_freq = perf_to_freq(cpudata, cpudata->lowest_nonlinear_perf);
|
|
||||||
+
|
|
||||||
+ WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq);
|
|
||||||
+ WRITE_ONCE(cpudata->max_freq, max_freq);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Below values need to be initialized correctly, otherwise driver will fail to load
|
|
@@ -1,37 +0,0 @@
|
|||||||
From 6c284985cc268da10f0e38f1f3b9af62ecfc3998 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:19 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Remove the unnecessary cpufreq_update_policy call
|
|
||||||
|
|
||||||
The update_limits callback is only called in two conditions.
|
|
||||||
|
|
||||||
* When the preferred core rankings change. In which case, we just need to
|
|
||||||
change the prefcore ranking in the cpudata struct. As there are no changes
|
|
||||||
to any of the perf values, there is no need to call cpufreq_update_policy()
|
|
||||||
|
|
||||||
* When the _PPC ACPI object changes, i.e. the highest allowed Pstate
|
|
||||||
changes. The _PPC object is only used for a table based cpufreq driver
|
|
||||||
like acpi-cpufreq, hence is irrelevant for CPPC based amd-pstate.
|
|
||||||
|
|
||||||
Hence, the cpufreq_update_policy() call becomes unnecessary and can be
|
|
||||||
removed.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 4 ----
|
|
||||||
1 file changed, 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -853,10 +853,6 @@ static void amd_pstate_update_limits(uns
|
|
||||||
sched_set_itmt_core_prio((int)cur_high, cpu);
|
|
||||||
}
|
|
||||||
cpufreq_cpu_put(policy);
|
|
||||||
-
|
|
||||||
- if (!highest_perf_changed)
|
|
||||||
- cpufreq_update_policy(cpu);
|
|
||||||
-
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
@@ -1,26 +0,0 @@
|
|||||||
From f50ac94149bc07092ecf5b68558f02920436f77c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:21 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Add missing NULL ptr check in amd_pstate_update
|
|
||||||
|
|
||||||
Check if policy is NULL before dereferencing it in amd_pstate_update.
|
|
||||||
|
|
||||||
Fixes: e8f555daacd3 ("cpufreq/amd-pstate: fix setting policy current frequency value")
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -551,6 +551,9 @@ static void amd_pstate_update(struct amd
|
|
||||||
struct cpufreq_policy *policy = cpufreq_cpu_get(cpudata->cpu);
|
|
||||||
u8 nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
|
|
||||||
+ if (!policy)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
des_perf = clamp_t(u8, des_perf, min_perf, max_perf);
|
|
||||||
|
|
||||||
policy->cur = perf_to_freq(cpudata, des_perf);
|
|
@@ -1,124 +0,0 @@
|
|||||||
From b5b334f66595052e69ecaa501b8a6ebdb0fd6eed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:22 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Use scope based cleanup for cpufreq_policy refs
|
|
||||||
|
|
||||||
There have been instances in past where refcount decrementing is missed
|
|
||||||
while exiting a function. Use automatic scope based cleanup to avoid
|
|
||||||
such errors.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 25 ++++++++-----------------
|
|
||||||
include/linux/cpufreq.h | 3 +++
|
|
||||||
2 files changed, 11 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -548,7 +548,7 @@ static inline bool amd_pstate_sample(str
|
|
||||||
static void amd_pstate_update(struct amd_cpudata *cpudata, u8 min_perf,
|
|
||||||
u8 des_perf, u8 max_perf, bool fast_switch, int gov_flags)
|
|
||||||
{
|
|
||||||
- struct cpufreq_policy *policy = cpufreq_cpu_get(cpudata->cpu);
|
|
||||||
+ struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpudata->cpu);
|
|
||||||
u8 nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
|
|
||||||
if (!policy)
|
|
||||||
@@ -574,8 +574,6 @@ static void amd_pstate_update(struct amd
|
|
||||||
}
|
|
||||||
|
|
||||||
amd_pstate_update_perf(cpudata, min_perf, des_perf, max_perf, 0, fast_switch);
|
|
||||||
-
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amd_pstate_verify(struct cpufreq_policy_data *policy_data)
|
|
||||||
@@ -587,7 +585,8 @@ static int amd_pstate_verify(struct cpuf
|
|
||||||
* amd-pstate qos_requests.
|
|
||||||
*/
|
|
||||||
if (policy_data->min == FREQ_QOS_MIN_DEFAULT_VALUE) {
|
|
||||||
- struct cpufreq_policy *policy = cpufreq_cpu_get(policy_data->cpu);
|
|
||||||
+ struct cpufreq_policy *policy __free(put_cpufreq_policy) =
|
|
||||||
+ cpufreq_cpu_get(policy_data->cpu);
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
|
|
||||||
if (!policy)
|
|
||||||
@@ -595,7 +594,6 @@ static int amd_pstate_verify(struct cpuf
|
|
||||||
|
|
||||||
cpudata = policy->driver_data;
|
|
||||||
policy_data->min = cpudata->lowest_nonlinear_freq;
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
cpufreq_verify_within_cpu_limits(policy_data);
|
|
||||||
@@ -678,7 +676,7 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
unsigned long capacity)
|
|
||||||
{
|
|
||||||
u8 max_perf, min_perf, des_perf, cap_perf, min_limit_perf;
|
|
||||||
- struct cpufreq_policy *policy = cpufreq_cpu_get(cpu);
|
|
||||||
+ struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpu);
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
|
|
||||||
if (!policy)
|
|
||||||
@@ -710,7 +708,6 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
|
|
||||||
amd_pstate_update(cpudata, min_perf, des_perf, max_perf, true,
|
|
||||||
policy->governor->flags);
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy, bool on)
|
|
||||||
@@ -824,28 +821,23 @@ static void amd_pstate_init_prefcore(str
|
|
||||||
|
|
||||||
static void amd_pstate_update_limits(unsigned int cpu)
|
|
||||||
{
|
|
||||||
- struct cpufreq_policy *policy = NULL;
|
|
||||||
+ struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpu);
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
u32 prev_high = 0, cur_high = 0;
|
|
||||||
- int ret;
|
|
||||||
bool highest_perf_changed = false;
|
|
||||||
|
|
||||||
if (!amd_pstate_prefcore)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- policy = cpufreq_cpu_get(cpu);
|
|
||||||
if (!policy)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- cpudata = policy->driver_data;
|
|
||||||
-
|
|
||||||
guard(mutex)(&amd_pstate_driver_lock);
|
|
||||||
|
|
||||||
- ret = amd_get_highest_perf(cpu, &cur_high);
|
|
||||||
- if (ret) {
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
+ if (amd_get_highest_perf(cpu, &cur_high))
|
|
||||||
return;
|
|
||||||
- }
|
|
||||||
+
|
|
||||||
+ cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
prev_high = READ_ONCE(cpudata->prefcore_ranking);
|
|
||||||
highest_perf_changed = (prev_high != cur_high);
|
|
||||||
@@ -855,7 +847,6 @@ static void amd_pstate_update_limits(uns
|
|
||||||
if (cur_high < CPPC_MAX_PERF)
|
|
||||||
sched_set_itmt_core_prio((int)cur_high, cpu);
|
|
||||||
}
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
--- a/include/linux/cpufreq.h
|
|
||||||
+++ b/include/linux/cpufreq.h
|
|
||||||
@@ -210,6 +210,9 @@ static inline struct cpufreq_policy *cpu
|
|
||||||
static inline void cpufreq_cpu_put(struct cpufreq_policy *policy) { }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* Scope based cleanup macro for cpufreq_policy kobject reference counting */
|
|
||||||
+DEFINE_FREE(put_cpufreq_policy, struct cpufreq_policy *, if (_T) cpufreq_cpu_put(_T))
|
|
||||||
+
|
|
||||||
static inline bool policy_is_inactive(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
return cpumask_empty(policy->cpus);
|
|
@@ -1,26 +0,0 @@
|
|||||||
From eff2c5a3f292e822968919a9792010de65b417b5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Wed, 5 Feb 2025 11:25:23 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Remove the unncecessary driver_lock in
|
|
||||||
amd_pstate_update_limits
|
|
||||||
|
|
||||||
There is no need to take a driver wide lock while updating the
|
|
||||||
highest_perf value in the percpu cpudata struct. Hence remove it.
|
|
||||||
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 2 --
|
|
||||||
1 file changed, 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -832,8 +832,6 @@ static void amd_pstate_update_limits(uns
|
|
||||||
if (!policy)
|
|
||||||
return;
|
|
||||||
|
|
||||||
- guard(mutex)(&amd_pstate_driver_lock);
|
|
||||||
-
|
|
||||||
if (amd_get_highest_perf(cpu, &cur_high))
|
|
||||||
return;
|
|
||||||
|
|
@@ -1,35 +0,0 @@
|
|||||||
From e836285ca35390d656adffee520d48cd7bedd5b3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Date: Sat, 22 Feb 2025 03:32:22 +0000
|
|
||||||
Subject: cpufreq/amd-pstate: Fix the clamping of perf values
|
|
||||||
|
|
||||||
The clamping in freq_to_perf() is broken right now, as we first typecast
|
|
||||||
(read wraparound) the overflowing value into a u8 and then clamp it down.
|
|
||||||
So, use a u32 to store the >255 value in certain edge cases and then clamp
|
|
||||||
it down into a u8.
|
|
||||||
|
|
||||||
Also, use a "explicit typecast + clamp" instead of just a "clamp_t" as the
|
|
||||||
latter typecasts first and then clamps between the limits, which defeats
|
|
||||||
our purpose.
|
|
||||||
|
|
||||||
Fixes: 305621eb6a8b ("cpufreq/amd-pstate: Modularize perf<->freq conversion")
|
|
||||||
Signed-off-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -144,10 +144,10 @@ static struct quirk_entry quirk_amd_7k62
|
|
||||||
|
|
||||||
static inline u8 freq_to_perf(struct amd_cpudata *cpudata, unsigned int freq_val)
|
|
||||||
{
|
|
||||||
- u8 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * cpudata->nominal_perf,
|
|
||||||
+ u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * cpudata->nominal_perf,
|
|
||||||
cpudata->nominal_freq);
|
|
||||||
|
|
||||||
- return clamp_t(u8, perf_val, cpudata->lowest_perf, cpudata->highest_perf);
|
|
||||||
+ return (u8)clamp(perf_val, cpudata->lowest_perf, cpudata->highest_perf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline u32 perf_to_freq(struct amd_cpudata *cpudata, u8 perf_val)
|
|
@@ -1,42 +0,0 @@
|
|||||||
From 0a417434299b27aebbb444e7545a7d668c40d288 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:16 -0600
|
|
||||||
Subject: cpufreq/amd-pstate: Invalidate cppc_req_cached during suspend
|
|
||||||
|
|
||||||
During resume it's possible the firmware didn't restore the CPPC request
|
|
||||||
MSR but the kernel thinks the values line up. This leads to incorrect
|
|
||||||
performance after resume from suspend.
|
|
||||||
|
|
||||||
To fix the issue invalidate the cached value at suspend. During resume use
|
|
||||||
the saved values programmed as cached limits.
|
|
||||||
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reported-by: Miroslav Pavleski <miroslav@pavleski.net>
|
|
||||||
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217931
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -1605,7 +1605,7 @@ static int amd_pstate_epp_reenable(struc
|
|
||||||
max_perf, policy->boost_enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
- return amd_pstate_update_perf(cpudata, 0, 0, max_perf, cpudata->epp_cached, false);
|
|
||||||
+ return amd_pstate_epp_update_limit(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amd_pstate_epp_cpu_online(struct cpufreq_policy *policy)
|
|
||||||
@@ -1654,6 +1654,9 @@ static int amd_pstate_epp_suspend(struct
|
|
||||||
if (cppc_state != AMD_PSTATE_ACTIVE)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
+ /* invalidate to ensure it's rewritten during resume */
|
|
||||||
+ cpudata->cppc_req_cached = 0;
|
|
||||||
+
|
|
||||||
/* set this flag to avoid setting core offline*/
|
|
||||||
cpudata->suspended = true;
|
|
||||||
|
|
@@ -1,35 +0,0 @@
|
|||||||
From ea1821eae465dfff9a9ef90662c2ce79e5abfe6e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:17 -0600
|
|
||||||
Subject: cpufreq/amd-pstate: Show a warning when a CPU fails to setup
|
|
||||||
|
|
||||||
I came across a system that MSR_AMD_CPPC_CAP1 for some CPUs isn't
|
|
||||||
populated. This is an unexpected behavior that is most likely a
|
|
||||||
BIOS bug. In the event it happens I'd like users to report bugs
|
|
||||||
to properly root cause and get this fixed.
|
|
||||||
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -1028,6 +1028,7 @@ static int amd_pstate_cpu_init(struct cp
|
|
||||||
free_cpudata2:
|
|
||||||
freq_qos_remove_request(&cpudata->req[0]);
|
|
||||||
free_cpudata1:
|
|
||||||
+ pr_warn("Failed to initialize CPU %d: %d\n", policy->cpu, ret);
|
|
||||||
kfree(cpudata);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
@@ -1521,6 +1522,7 @@ static int amd_pstate_epp_cpu_init(struc
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
free_cpudata1:
|
|
||||||
+ pr_warn("Failed to initialize CPU %d: %d\n", policy->cpu, ret);
|
|
||||||
kfree(cpudata);
|
|
||||||
return ret;
|
|
||||||
}
|
|
@@ -1,209 +0,0 @@
|
|||||||
From 72016df62985637e59f075e25233d8ca942eb391 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:18 -0600
|
|
||||||
Subject: cpufreq/amd-pstate: Drop min and max cached frequencies
|
|
||||||
|
|
||||||
Use the perf_to_freq helpers to calculate this on the fly.
|
|
||||||
As the members are no longer cached add an extra check into
|
|
||||||
amd_pstate_epp_update_limit() to avoid unnecessary calls in
|
|
||||||
amd_pstate_update_min_max_limit().
|
|
||||||
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate-ut.c | 14 +++++------
|
|
||||||
drivers/cpufreq/amd-pstate.c | 43 +++++++++------------------------
|
|
||||||
drivers/cpufreq/amd-pstate.h | 9 ++-----
|
|
||||||
3 files changed, 20 insertions(+), 46 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate-ut.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate-ut.c
|
|
||||||
@@ -214,14 +214,14 @@ static void amd_pstate_ut_check_freq(u32
|
|
||||||
break;
|
|
||||||
cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
- if (!((cpudata->max_freq >= cpudata->nominal_freq) &&
|
|
||||||
+ if (!((policy->cpuinfo.max_freq >= cpudata->nominal_freq) &&
|
|
||||||
(cpudata->nominal_freq > cpudata->lowest_nonlinear_freq) &&
|
|
||||||
- (cpudata->lowest_nonlinear_freq > cpudata->min_freq) &&
|
|
||||||
- (cpudata->min_freq > 0))) {
|
|
||||||
+ (cpudata->lowest_nonlinear_freq > policy->cpuinfo.min_freq) &&
|
|
||||||
+ (policy->cpuinfo.min_freq > 0))) {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s cpu%d max=%d >= nominal=%d > lowest_nonlinear=%d > min=%d > 0, the formula is incorrect!\n",
|
|
||||||
- __func__, cpu, cpudata->max_freq, cpudata->nominal_freq,
|
|
||||||
- cpudata->lowest_nonlinear_freq, cpudata->min_freq);
|
|
||||||
+ __func__, cpu, policy->cpuinfo.max_freq, cpudata->nominal_freq,
|
|
||||||
+ cpudata->lowest_nonlinear_freq, policy->cpuinfo.min_freq);
|
|
||||||
goto skip_test;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -233,13 +233,13 @@ static void amd_pstate_ut_check_freq(u32
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cpudata->boost_supported) {
|
|
||||||
- if ((policy->max == cpudata->max_freq) ||
|
|
||||||
+ if ((policy->max == policy->cpuinfo.max_freq) ||
|
|
||||||
(policy->max == cpudata->nominal_freq))
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_PASS;
|
|
||||||
else {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s cpu%d policy_max=%d should be equal cpu_max=%d or cpu_nominal=%d !\n",
|
|
||||||
- __func__, cpu, policy->max, cpudata->max_freq,
|
|
||||||
+ __func__, cpu, policy->max, policy->cpuinfo.max_freq,
|
|
||||||
cpudata->nominal_freq);
|
|
||||||
goto skip_test;
|
|
||||||
}
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -717,7 +717,7 @@ static int amd_pstate_cpu_boost_update(s
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
nominal_freq = READ_ONCE(cpudata->nominal_freq);
|
|
||||||
- max_freq = READ_ONCE(cpudata->max_freq);
|
|
||||||
+ max_freq = perf_to_freq(cpudata, READ_ONCE(cpudata->highest_perf));
|
|
||||||
|
|
||||||
if (on)
|
|
||||||
policy->cpuinfo.max_freq = max_freq;
|
|
||||||
@@ -917,13 +917,10 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
nominal_freq *= 1000;
|
|
||||||
|
|
||||||
WRITE_ONCE(cpudata->nominal_freq, nominal_freq);
|
|
||||||
- WRITE_ONCE(cpudata->min_freq, min_freq);
|
|
||||||
|
|
||||||
max_freq = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
lowest_nonlinear_freq = perf_to_freq(cpudata, cpudata->lowest_nonlinear_perf);
|
|
||||||
-
|
|
||||||
WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq);
|
|
||||||
- WRITE_ONCE(cpudata->max_freq, max_freq);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Below values need to be initialized correctly, otherwise driver will fail to load
|
|
||||||
@@ -948,9 +945,9 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
|
|
||||||
static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
- int min_freq, max_freq, ret;
|
|
||||||
- struct device *dev;
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
+ struct device *dev;
|
|
||||||
+ int ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Resetting PERF_CTL_MSR will put the CPU in P0 frequency,
|
|
||||||
@@ -981,17 +978,11 @@ static int amd_pstate_cpu_init(struct cp
|
|
||||||
if (ret)
|
|
||||||
goto free_cpudata1;
|
|
||||||
|
|
||||||
- min_freq = READ_ONCE(cpudata->min_freq);
|
|
||||||
- max_freq = READ_ONCE(cpudata->max_freq);
|
|
||||||
-
|
|
||||||
policy->cpuinfo.transition_latency = amd_pstate_get_transition_latency(policy->cpu);
|
|
||||||
policy->transition_delay_us = amd_pstate_get_transition_delay_us(policy->cpu);
|
|
||||||
|
|
||||||
- policy->min = min_freq;
|
|
||||||
- policy->max = max_freq;
|
|
||||||
-
|
|
||||||
- policy->cpuinfo.min_freq = min_freq;
|
|
||||||
- policy->cpuinfo.max_freq = max_freq;
|
|
||||||
+ policy->cpuinfo.min_freq = policy->min = perf_to_freq(cpudata, cpudata->lowest_perf);
|
|
||||||
+ policy->cpuinfo.max_freq = policy->max = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
|
|
||||||
policy->boost_enabled = READ_ONCE(cpudata->boost_supported);
|
|
||||||
|
|
||||||
@@ -1015,9 +1006,6 @@ static int amd_pstate_cpu_init(struct cp
|
|
||||||
goto free_cpudata2;
|
|
||||||
}
|
|
||||||
|
|
||||||
- cpudata->max_limit_freq = max_freq;
|
|
||||||
- cpudata->min_limit_freq = min_freq;
|
|
||||||
-
|
|
||||||
policy->driver_data = cpudata;
|
|
||||||
|
|
||||||
if (!current_pstate_driver->adjust_perf)
|
|
||||||
@@ -1075,14 +1063,10 @@ static int amd_pstate_cpu_suspend(struct
|
|
||||||
static ssize_t show_amd_pstate_max_freq(struct cpufreq_policy *policy,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
- int max_freq;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
- max_freq = READ_ONCE(cpudata->max_freq);
|
|
||||||
- if (max_freq < 0)
|
|
||||||
- return max_freq;
|
|
||||||
|
|
||||||
- return sysfs_emit(buf, "%u\n", max_freq);
|
|
||||||
+ return sysfs_emit(buf, "%u\n", perf_to_freq(cpudata, READ_ONCE(cpudata->highest_perf)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t show_amd_pstate_lowest_nonlinear_freq(struct cpufreq_policy *policy,
|
|
||||||
@@ -1440,10 +1424,10 @@ static bool amd_pstate_acpi_pm_profile_u
|
|
||||||
|
|
||||||
static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
- int min_freq, max_freq, ret;
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
struct device *dev;
|
|
||||||
u64 value;
|
|
||||||
+ int ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Resetting PERF_CTL_MSR will put the CPU in P0 frequency,
|
|
||||||
@@ -1474,19 +1458,13 @@ static int amd_pstate_epp_cpu_init(struc
|
|
||||||
if (ret)
|
|
||||||
goto free_cpudata1;
|
|
||||||
|
|
||||||
- min_freq = READ_ONCE(cpudata->min_freq);
|
|
||||||
- max_freq = READ_ONCE(cpudata->max_freq);
|
|
||||||
-
|
|
||||||
- policy->cpuinfo.min_freq = min_freq;
|
|
||||||
- policy->cpuinfo.max_freq = max_freq;
|
|
||||||
+ policy->cpuinfo.min_freq = policy->min = perf_to_freq(cpudata, cpudata->lowest_perf);
|
|
||||||
+ policy->cpuinfo.max_freq = policy->max = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
/* It will be updated by governor */
|
|
||||||
policy->cur = policy->cpuinfo.min_freq;
|
|
||||||
|
|
||||||
policy->driver_data = cpudata;
|
|
||||||
|
|
||||||
- policy->min = policy->cpuinfo.min_freq;
|
|
||||||
- policy->max = policy->cpuinfo.max_freq;
|
|
||||||
-
|
|
||||||
policy->boost_enabled = READ_ONCE(cpudata->boost_supported);
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1544,7 +1522,8 @@ static int amd_pstate_epp_update_limit(s
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
u8 epp;
|
|
||||||
|
|
||||||
- amd_pstate_update_min_max_limit(policy);
|
|
||||||
+ if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
|
|
||||||
+ amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
|
|
||||||
epp = 0;
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.h
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.h
|
|
||||||
@@ -46,8 +46,6 @@ struct amd_aperf_mperf {
|
|
||||||
* @max_limit_perf: Cached value of the performance corresponding to policy->max
|
|
||||||
* @min_limit_freq: Cached value of policy->min (in khz)
|
|
||||||
* @max_limit_freq: Cached value of policy->max (in khz)
|
|
||||||
- * @max_freq: the frequency (in khz) that mapped to highest_perf
|
|
||||||
- * @min_freq: the frequency (in khz) that mapped to lowest_perf
|
|
||||||
* @nominal_freq: the frequency (in khz) that mapped to nominal_perf
|
|
||||||
* @lowest_nonlinear_freq: the frequency (in khz) that mapped to lowest_nonlinear_perf
|
|
||||||
* @cur: Difference of Aperf/Mperf/tsc count between last and current sample
|
|
||||||
@@ -77,11 +75,8 @@ struct amd_cpudata {
|
|
||||||
u8 prefcore_ranking;
|
|
||||||
u8 min_limit_perf;
|
|
||||||
u8 max_limit_perf;
|
|
||||||
- u32 min_limit_freq;
|
|
||||||
- u32 max_limit_freq;
|
|
||||||
-
|
|
||||||
- u32 max_freq;
|
|
||||||
- u32 min_freq;
|
|
||||||
+ u32 min_limit_freq;
|
|
||||||
+ u32 max_limit_freq;
|
|
||||||
u32 nominal_freq;
|
|
||||||
u32 lowest_nonlinear_freq;
|
|
||||||
|
|
@@ -1,611 +0,0 @@
|
|||||||
From 289c4432443c54497bfe75410a516ca24475504d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:19 -0600
|
|
||||||
Subject: cpufreq/amd-pstate: Move perf values into a union
|
|
||||||
|
|
||||||
By storing perf values in a union all the writes and reads can
|
|
||||||
be done atomically, removing the need for some concurrency protections.
|
|
||||||
|
|
||||||
While making this change, also drop the cached frequency values,
|
|
||||||
using inline helpers to calculate them on demand from perf value.
|
|
||||||
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate-ut.c | 18 +--
|
|
||||||
drivers/cpufreq/amd-pstate.c | 205 ++++++++++++++++++--------------
|
|
||||||
drivers/cpufreq/amd-pstate.h | 51 +++++---
|
|
||||||
3 files changed, 158 insertions(+), 116 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate-ut.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate-ut.c
|
|
||||||
@@ -129,6 +129,7 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
struct cppc_perf_caps cppc_perf;
|
|
||||||
struct cpufreq_policy *policy = NULL;
|
|
||||||
struct amd_cpudata *cpudata = NULL;
|
|
||||||
+ union perf_cached cur_perf;
|
|
||||||
|
|
||||||
for_each_possible_cpu(cpu) {
|
|
||||||
policy = cpufreq_cpu_get(cpu);
|
|
||||||
@@ -162,19 +163,20 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
lowest_perf = AMD_CPPC_LOWEST_PERF(cap1);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (highest_perf != READ_ONCE(cpudata->highest_perf) && !cpudata->hw_prefcore) {
|
|
||||||
+ cur_perf = READ_ONCE(cpudata->perf);
|
|
||||||
+ if (highest_perf != cur_perf.highest_perf && !cpudata->hw_prefcore) {
|
|
||||||
pr_err("%s cpu%d highest=%d %d highest perf doesn't match\n",
|
|
||||||
- __func__, cpu, highest_perf, cpudata->highest_perf);
|
|
||||||
+ __func__, cpu, highest_perf, cur_perf.highest_perf);
|
|
||||||
goto skip_test;
|
|
||||||
}
|
|
||||||
- if ((nominal_perf != READ_ONCE(cpudata->nominal_perf)) ||
|
|
||||||
- (lowest_nonlinear_perf != READ_ONCE(cpudata->lowest_nonlinear_perf)) ||
|
|
||||||
- (lowest_perf != READ_ONCE(cpudata->lowest_perf))) {
|
|
||||||
+ if (nominal_perf != cur_perf.nominal_perf ||
|
|
||||||
+ (lowest_nonlinear_perf != cur_perf.lowest_nonlinear_perf) ||
|
|
||||||
+ (lowest_perf != cur_perf.lowest_perf)) {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s cpu%d nominal=%d %d lowest_nonlinear=%d %d lowest=%d %d, they should be equal!\n",
|
|
||||||
- __func__, cpu, nominal_perf, cpudata->nominal_perf,
|
|
||||||
- lowest_nonlinear_perf, cpudata->lowest_nonlinear_perf,
|
|
||||||
- lowest_perf, cpudata->lowest_perf);
|
|
||||||
+ __func__, cpu, nominal_perf, cur_perf.nominal_perf,
|
|
||||||
+ lowest_nonlinear_perf, cur_perf.lowest_nonlinear_perf,
|
|
||||||
+ lowest_perf, cur_perf.lowest_perf);
|
|
||||||
goto skip_test;
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -142,18 +142,17 @@ static struct quirk_entry quirk_amd_7k62
|
|
||||||
.lowest_freq = 550,
|
|
||||||
};
|
|
||||||
|
|
||||||
-static inline u8 freq_to_perf(struct amd_cpudata *cpudata, unsigned int freq_val)
|
|
||||||
+static inline u8 freq_to_perf(union perf_cached perf, u32 nominal_freq, unsigned int freq_val)
|
|
||||||
{
|
|
||||||
- u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * cpudata->nominal_perf,
|
|
||||||
- cpudata->nominal_freq);
|
|
||||||
+ u32 perf_val = DIV_ROUND_UP_ULL((u64)freq_val * perf.nominal_perf, nominal_freq);
|
|
||||||
|
|
||||||
- return (u8)clamp(perf_val, cpudata->lowest_perf, cpudata->highest_perf);
|
|
||||||
+ return (u8)clamp(perf_val, perf.lowest_perf, perf.highest_perf);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static inline u32 perf_to_freq(struct amd_cpudata *cpudata, u8 perf_val)
|
|
||||||
+static inline u32 perf_to_freq(union perf_cached perf, u32 nominal_freq, u8 perf_val)
|
|
||||||
{
|
|
||||||
- return DIV_ROUND_UP_ULL((u64)cpudata->nominal_freq * perf_val,
|
|
||||||
- cpudata->nominal_perf);
|
|
||||||
+ return DIV_ROUND_UP_ULL((u64)nominal_freq * perf_val,
|
|
||||||
+ perf.nominal_perf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int __init dmi_matched_7k62_bios_bug(const struct dmi_system_id *dmi)
|
|
||||||
@@ -347,7 +346,9 @@ static int amd_pstate_set_energy_pref_in
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trace_amd_pstate_epp_perf_enabled()) {
|
|
||||||
- trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf,
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
+
|
|
||||||
+ trace_amd_pstate_epp_perf(cpudata->cpu, perf.highest_perf,
|
|
||||||
epp,
|
|
||||||
FIELD_GET(AMD_CPPC_MIN_PERF_MASK, cpudata->cppc_req_cached),
|
|
||||||
FIELD_GET(AMD_CPPC_MAX_PERF_MASK, cpudata->cppc_req_cached),
|
|
||||||
@@ -425,6 +426,7 @@ static inline int amd_pstate_cppc_enable
|
|
||||||
|
|
||||||
static int msr_init_perf(struct amd_cpudata *cpudata)
|
|
||||||
{
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
u64 cap1, numerator;
|
|
||||||
|
|
||||||
int ret = rdmsrl_safe_on_cpu(cpudata->cpu, MSR_AMD_CPPC_CAP1,
|
|
||||||
@@ -436,19 +438,21 @@ static int msr_init_perf(struct amd_cpud
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
- WRITE_ONCE(cpudata->highest_perf, numerator);
|
|
||||||
- WRITE_ONCE(cpudata->max_limit_perf, numerator);
|
|
||||||
- WRITE_ONCE(cpudata->nominal_perf, AMD_CPPC_NOMINAL_PERF(cap1));
|
|
||||||
- WRITE_ONCE(cpudata->lowest_nonlinear_perf, AMD_CPPC_LOWNONLIN_PERF(cap1));
|
|
||||||
- WRITE_ONCE(cpudata->lowest_perf, AMD_CPPC_LOWEST_PERF(cap1));
|
|
||||||
+ perf.highest_perf = numerator;
|
|
||||||
+ perf.max_limit_perf = numerator;
|
|
||||||
+ perf.min_limit_perf = AMD_CPPC_LOWEST_PERF(cap1);
|
|
||||||
+ perf.nominal_perf = AMD_CPPC_NOMINAL_PERF(cap1);
|
|
||||||
+ perf.lowest_nonlinear_perf = AMD_CPPC_LOWNONLIN_PERF(cap1);
|
|
||||||
+ perf.lowest_perf = AMD_CPPC_LOWEST_PERF(cap1);
|
|
||||||
+ WRITE_ONCE(cpudata->perf, perf);
|
|
||||||
WRITE_ONCE(cpudata->prefcore_ranking, AMD_CPPC_HIGHEST_PERF(cap1));
|
|
||||||
- WRITE_ONCE(cpudata->min_limit_perf, AMD_CPPC_LOWEST_PERF(cap1));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int shmem_init_perf(struct amd_cpudata *cpudata)
|
|
||||||
{
|
|
||||||
struct cppc_perf_caps cppc_perf;
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
u64 numerator;
|
|
||||||
|
|
||||||
int ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
|
|
||||||
@@ -459,14 +463,14 @@ static int shmem_init_perf(struct amd_cp
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
- WRITE_ONCE(cpudata->highest_perf, numerator);
|
|
||||||
- WRITE_ONCE(cpudata->max_limit_perf, numerator);
|
|
||||||
- WRITE_ONCE(cpudata->nominal_perf, cppc_perf.nominal_perf);
|
|
||||||
- WRITE_ONCE(cpudata->lowest_nonlinear_perf,
|
|
||||||
- cppc_perf.lowest_nonlinear_perf);
|
|
||||||
- WRITE_ONCE(cpudata->lowest_perf, cppc_perf.lowest_perf);
|
|
||||||
+ perf.highest_perf = numerator;
|
|
||||||
+ perf.max_limit_perf = numerator;
|
|
||||||
+ perf.min_limit_perf = cppc_perf.lowest_perf;
|
|
||||||
+ perf.nominal_perf = cppc_perf.nominal_perf;
|
|
||||||
+ perf.lowest_nonlinear_perf = cppc_perf.lowest_nonlinear_perf;
|
|
||||||
+ perf.lowest_perf = cppc_perf.lowest_perf;
|
|
||||||
+ WRITE_ONCE(cpudata->perf, perf);
|
|
||||||
WRITE_ONCE(cpudata->prefcore_ranking, cppc_perf.highest_perf);
|
|
||||||
- WRITE_ONCE(cpudata->min_limit_perf, cppc_perf.lowest_perf);
|
|
||||||
|
|
||||||
if (cppc_state == AMD_PSTATE_ACTIVE)
|
|
||||||
return 0;
|
|
||||||
@@ -549,14 +553,14 @@ static void amd_pstate_update(struct amd
|
|
||||||
u8 des_perf, u8 max_perf, bool fast_switch, int gov_flags)
|
|
||||||
{
|
|
||||||
struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpudata->cpu);
|
|
||||||
- u8 nominal_perf = READ_ONCE(cpudata->nominal_perf);
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
|
|
||||||
if (!policy)
|
|
||||||
return;
|
|
||||||
|
|
||||||
des_perf = clamp_t(u8, des_perf, min_perf, max_perf);
|
|
||||||
|
|
||||||
- policy->cur = perf_to_freq(cpudata, des_perf);
|
|
||||||
+ policy->cur = perf_to_freq(perf, cpudata->nominal_freq, des_perf);
|
|
||||||
|
|
||||||
if ((cppc_state == AMD_PSTATE_GUIDED) && (gov_flags & CPUFREQ_GOV_DYNAMIC_SWITCHING)) {
|
|
||||||
min_perf = des_perf;
|
|
||||||
@@ -565,7 +569,7 @@ static void amd_pstate_update(struct amd
|
|
||||||
|
|
||||||
/* limit the max perf when core performance boost feature is disabled */
|
|
||||||
if (!cpudata->boost_supported)
|
|
||||||
- max_perf = min_t(u8, nominal_perf, max_perf);
|
|
||||||
+ max_perf = min_t(u8, perf.nominal_perf, max_perf);
|
|
||||||
|
|
||||||
if (trace_amd_pstate_perf_enabled() && amd_pstate_sample(cpudata)) {
|
|
||||||
trace_amd_pstate_perf(min_perf, des_perf, max_perf, cpudata->freq,
|
|
||||||
@@ -602,39 +606,41 @@ static int amd_pstate_verify(struct cpuf
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int amd_pstate_update_min_max_limit(struct cpufreq_policy *policy)
|
|
||||||
+static void amd_pstate_update_min_max_limit(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
- u8 max_limit_perf, min_limit_perf;
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
|
|
||||||
- max_limit_perf = freq_to_perf(cpudata, policy->max);
|
|
||||||
- min_limit_perf = freq_to_perf(cpudata, policy->min);
|
|
||||||
+ perf.max_limit_perf = freq_to_perf(perf, cpudata->nominal_freq, policy->max);
|
|
||||||
+ perf.min_limit_perf = freq_to_perf(perf, cpudata->nominal_freq, policy->min);
|
|
||||||
|
|
||||||
if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE)
|
|
||||||
- min_limit_perf = min(cpudata->nominal_perf, max_limit_perf);
|
|
||||||
+ perf.min_limit_perf = min(perf.nominal_perf, perf.max_limit_perf);
|
|
||||||
|
|
||||||
- WRITE_ONCE(cpudata->max_limit_perf, max_limit_perf);
|
|
||||||
- WRITE_ONCE(cpudata->min_limit_perf, min_limit_perf);
|
|
||||||
WRITE_ONCE(cpudata->max_limit_freq, policy->max);
|
|
||||||
WRITE_ONCE(cpudata->min_limit_freq, policy->min);
|
|
||||||
-
|
|
||||||
- return 0;
|
|
||||||
+ WRITE_ONCE(cpudata->perf, perf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amd_pstate_update_freq(struct cpufreq_policy *policy,
|
|
||||||
unsigned int target_freq, bool fast_switch)
|
|
||||||
{
|
|
||||||
struct cpufreq_freqs freqs;
|
|
||||||
- struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ struct amd_cpudata *cpudata;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
u8 des_perf;
|
|
||||||
|
|
||||||
+ cpudata = policy->driver_data;
|
|
||||||
+
|
|
||||||
if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
|
|
||||||
amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
+
|
|
||||||
freqs.old = policy->cur;
|
|
||||||
freqs.new = target_freq;
|
|
||||||
|
|
||||||
- des_perf = freq_to_perf(cpudata, target_freq);
|
|
||||||
+ des_perf = freq_to_perf(perf, cpudata->nominal_freq, target_freq);
|
|
||||||
|
|
||||||
WARN_ON(fast_switch && !policy->fast_switch_enabled);
|
|
||||||
/*
|
|
||||||
@@ -645,8 +651,8 @@ static int amd_pstate_update_freq(struct
|
|
||||||
if (!fast_switch)
|
|
||||||
cpufreq_freq_transition_begin(policy, &freqs);
|
|
||||||
|
|
||||||
- amd_pstate_update(cpudata, cpudata->min_limit_perf, des_perf,
|
|
||||||
- cpudata->max_limit_perf, fast_switch,
|
|
||||||
+ amd_pstate_update(cpudata, perf.min_limit_perf, des_perf,
|
|
||||||
+ perf.max_limit_perf, fast_switch,
|
|
||||||
policy->governor->flags);
|
|
||||||
|
|
||||||
if (!fast_switch)
|
|
||||||
@@ -675,9 +681,10 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
unsigned long target_perf,
|
|
||||||
unsigned long capacity)
|
|
||||||
{
|
|
||||||
- u8 max_perf, min_perf, des_perf, cap_perf, min_limit_perf;
|
|
||||||
+ u8 max_perf, min_perf, des_perf, cap_perf;
|
|
||||||
struct cpufreq_policy *policy __free(put_cpufreq_policy) = cpufreq_cpu_get(cpu);
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
|
|
||||||
if (!policy)
|
|
||||||
return;
|
|
||||||
@@ -687,8 +694,8 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
|
|
||||||
amd_pstate_update_min_max_limit(policy);
|
|
||||||
|
|
||||||
- cap_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
- min_limit_perf = READ_ONCE(cpudata->min_limit_perf);
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
+ cap_perf = perf.highest_perf;
|
|
||||||
|
|
||||||
des_perf = cap_perf;
|
|
||||||
if (target_perf < capacity)
|
|
||||||
@@ -699,10 +706,10 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
else
|
|
||||||
min_perf = cap_perf;
|
|
||||||
|
|
||||||
- if (min_perf < min_limit_perf)
|
|
||||||
- min_perf = min_limit_perf;
|
|
||||||
+ if (min_perf < perf.min_limit_perf)
|
|
||||||
+ min_perf = perf.min_limit_perf;
|
|
||||||
|
|
||||||
- max_perf = cpudata->max_limit_perf;
|
|
||||||
+ max_perf = perf.max_limit_perf;
|
|
||||||
if (max_perf < min_perf)
|
|
||||||
max_perf = min_perf;
|
|
||||||
|
|
||||||
@@ -713,11 +720,12 @@ static void amd_pstate_adjust_perf(unsig
|
|
||||||
static int amd_pstate_cpu_boost_update(struct cpufreq_policy *policy, bool on)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
u32 nominal_freq, max_freq;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
nominal_freq = READ_ONCE(cpudata->nominal_freq);
|
|
||||||
- max_freq = perf_to_freq(cpudata, READ_ONCE(cpudata->highest_perf));
|
|
||||||
+ max_freq = perf_to_freq(perf, cpudata->nominal_freq, perf.highest_perf);
|
|
||||||
|
|
||||||
if (on)
|
|
||||||
policy->cpuinfo.max_freq = max_freq;
|
|
||||||
@@ -882,30 +890,30 @@ static u32 amd_pstate_get_transition_lat
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
- * amd_pstate_init_freq: Initialize the max_freq, min_freq,
|
|
||||||
- * nominal_freq and lowest_nonlinear_freq for
|
|
||||||
- * the @cpudata object.
|
|
||||||
+ * amd_pstate_init_freq: Initialize the nominal_freq and lowest_nonlinear_freq
|
|
||||||
+ * for the @cpudata object.
|
|
||||||
*
|
|
||||||
- * Requires: highest_perf, lowest_perf, nominal_perf and
|
|
||||||
- * lowest_nonlinear_perf members of @cpudata to be
|
|
||||||
- * initialized.
|
|
||||||
+ * Requires: all perf members of @cpudata to be initialized.
|
|
||||||
*
|
|
||||||
- * Returns 0 on success, non-zero value on failure.
|
|
||||||
+ * Returns 0 on success, non-zero value on failure.
|
|
||||||
*/
|
|
||||||
static int amd_pstate_init_freq(struct amd_cpudata *cpudata)
|
|
||||||
{
|
|
||||||
- int ret;
|
|
||||||
- u32 min_freq, max_freq;
|
|
||||||
- u32 nominal_freq, lowest_nonlinear_freq;
|
|
||||||
+ u32 min_freq, max_freq, nominal_freq, lowest_nonlinear_freq;
|
|
||||||
struct cppc_perf_caps cppc_perf;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
+ int ret;
|
|
||||||
|
|
||||||
ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
|
|
||||||
- if (quirks && quirks->lowest_freq)
|
|
||||||
+ if (quirks && quirks->lowest_freq) {
|
|
||||||
min_freq = quirks->lowest_freq;
|
|
||||||
- else
|
|
||||||
+ perf.lowest_perf = freq_to_perf(perf, nominal_freq, min_freq);
|
|
||||||
+ WRITE_ONCE(cpudata->perf, perf);
|
|
||||||
+ } else
|
|
||||||
min_freq = cppc_perf.lowest_freq;
|
|
||||||
|
|
||||||
if (quirks && quirks->nominal_freq)
|
|
||||||
@@ -918,8 +926,8 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
|
|
||||||
WRITE_ONCE(cpudata->nominal_freq, nominal_freq);
|
|
||||||
|
|
||||||
- max_freq = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
- lowest_nonlinear_freq = perf_to_freq(cpudata, cpudata->lowest_nonlinear_perf);
|
|
||||||
+ max_freq = perf_to_freq(perf, nominal_freq, perf.highest_perf);
|
|
||||||
+ lowest_nonlinear_freq = perf_to_freq(perf, nominal_freq, perf.lowest_nonlinear_perf);
|
|
||||||
WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq);
|
|
||||||
|
|
||||||
/**
|
|
||||||
@@ -946,6 +954,7 @@ static int amd_pstate_init_freq(struct a
|
|
||||||
static int amd_pstate_cpu_init(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
struct device *dev;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
@@ -981,8 +990,14 @@ static int amd_pstate_cpu_init(struct cp
|
|
||||||
policy->cpuinfo.transition_latency = amd_pstate_get_transition_latency(policy->cpu);
|
|
||||||
policy->transition_delay_us = amd_pstate_get_transition_delay_us(policy->cpu);
|
|
||||||
|
|
||||||
- policy->cpuinfo.min_freq = policy->min = perf_to_freq(cpudata, cpudata->lowest_perf);
|
|
||||||
- policy->cpuinfo.max_freq = policy->max = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
+
|
|
||||||
+ policy->cpuinfo.min_freq = policy->min = perf_to_freq(perf,
|
|
||||||
+ cpudata->nominal_freq,
|
|
||||||
+ perf.lowest_perf);
|
|
||||||
+ policy->cpuinfo.max_freq = policy->max = perf_to_freq(perf,
|
|
||||||
+ cpudata->nominal_freq,
|
|
||||||
+ perf.highest_perf);
|
|
||||||
|
|
||||||
policy->boost_enabled = READ_ONCE(cpudata->boost_supported);
|
|
||||||
|
|
||||||
@@ -1063,23 +1078,27 @@ static int amd_pstate_cpu_suspend(struct
|
|
||||||
static ssize_t show_amd_pstate_max_freq(struct cpufreq_policy *policy,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
- struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ struct amd_cpudata *cpudata;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
|
|
||||||
+ cpudata = policy->driver_data;
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
|
|
||||||
- return sysfs_emit(buf, "%u\n", perf_to_freq(cpudata, READ_ONCE(cpudata->highest_perf)));
|
|
||||||
+ return sysfs_emit(buf, "%u\n",
|
|
||||||
+ perf_to_freq(perf, cpudata->nominal_freq, perf.highest_perf));
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t show_amd_pstate_lowest_nonlinear_freq(struct cpufreq_policy *policy,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
- int freq;
|
|
||||||
- struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ struct amd_cpudata *cpudata;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
|
|
||||||
- freq = READ_ONCE(cpudata->lowest_nonlinear_freq);
|
|
||||||
- if (freq < 0)
|
|
||||||
- return freq;
|
|
||||||
+ cpudata = policy->driver_data;
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
|
|
||||||
- return sysfs_emit(buf, "%u\n", freq);
|
|
||||||
+ return sysfs_emit(buf, "%u\n",
|
|
||||||
+ perf_to_freq(perf, cpudata->nominal_freq, perf.lowest_nonlinear_perf));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -1089,12 +1108,11 @@ static ssize_t show_amd_pstate_lowest_no
|
|
||||||
static ssize_t show_amd_pstate_highest_perf(struct cpufreq_policy *policy,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
- u8 perf;
|
|
||||||
- struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ struct amd_cpudata *cpudata;
|
|
||||||
|
|
||||||
- perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
+ cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
- return sysfs_emit(buf, "%u\n", perf);
|
|
||||||
+ return sysfs_emit(buf, "%u\n", cpudata->perf.highest_perf);
|
|
||||||
}
|
|
||||||
|
|
||||||
static ssize_t show_amd_pstate_prefcore_ranking(struct cpufreq_policy *policy,
|
|
||||||
@@ -1425,6 +1443,7 @@ static bool amd_pstate_acpi_pm_profile_u
|
|
||||||
static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
struct device *dev;
|
|
||||||
u64 value;
|
|
||||||
int ret;
|
|
||||||
@@ -1458,8 +1477,15 @@ static int amd_pstate_epp_cpu_init(struc
|
|
||||||
if (ret)
|
|
||||||
goto free_cpudata1;
|
|
||||||
|
|
||||||
- policy->cpuinfo.min_freq = policy->min = perf_to_freq(cpudata, cpudata->lowest_perf);
|
|
||||||
- policy->cpuinfo.max_freq = policy->max = perf_to_freq(cpudata, cpudata->highest_perf);
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
+
|
|
||||||
+ policy->cpuinfo.min_freq = policy->min = perf_to_freq(perf,
|
|
||||||
+ cpudata->nominal_freq,
|
|
||||||
+ perf.lowest_perf);
|
|
||||||
+ policy->cpuinfo.max_freq = policy->max = perf_to_freq(perf,
|
|
||||||
+ cpudata->nominal_freq,
|
|
||||||
+ perf.highest_perf);
|
|
||||||
+
|
|
||||||
/* It will be updated by governor */
|
|
||||||
policy->cur = policy->cpuinfo.min_freq;
|
|
||||||
|
|
||||||
@@ -1520,6 +1546,7 @@ static void amd_pstate_epp_cpu_exit(stru
|
|
||||||
static int amd_pstate_epp_update_limit(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
u8 epp;
|
|
||||||
|
|
||||||
if (policy->min != cpudata->min_limit_freq || policy->max != cpudata->max_limit_freq)
|
|
||||||
@@ -1530,15 +1557,16 @@ static int amd_pstate_epp_update_limit(s
|
|
||||||
else
|
|
||||||
epp = READ_ONCE(cpudata->epp_cached);
|
|
||||||
|
|
||||||
+ perf = READ_ONCE(cpudata->perf);
|
|
||||||
if (trace_amd_pstate_epp_perf_enabled()) {
|
|
||||||
- trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf, epp,
|
|
||||||
- cpudata->min_limit_perf,
|
|
||||||
- cpudata->max_limit_perf,
|
|
||||||
+ trace_amd_pstate_epp_perf(cpudata->cpu, perf.highest_perf, epp,
|
|
||||||
+ perf.min_limit_perf,
|
|
||||||
+ perf.max_limit_perf,
|
|
||||||
policy->boost_enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
- return amd_pstate_update_perf(cpudata, cpudata->min_limit_perf, 0U,
|
|
||||||
- cpudata->max_limit_perf, epp, false);
|
|
||||||
+ return amd_pstate_update_perf(cpudata, perf.min_limit_perf, 0U,
|
|
||||||
+ perf.max_limit_perf, epp, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amd_pstate_epp_set_policy(struct cpufreq_policy *policy)
|
|
||||||
@@ -1570,20 +1598,18 @@ static int amd_pstate_epp_set_policy(str
|
|
||||||
static int amd_pstate_epp_reenable(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- u8 max_perf;
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = amd_pstate_cppc_enable(true);
|
|
||||||
if (ret)
|
|
||||||
pr_err("failed to enable amd pstate during resume, return %d\n", ret);
|
|
||||||
|
|
||||||
- max_perf = READ_ONCE(cpudata->highest_perf);
|
|
||||||
-
|
|
||||||
if (trace_amd_pstate_epp_perf_enabled()) {
|
|
||||||
- trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf,
|
|
||||||
+ trace_amd_pstate_epp_perf(cpudata->cpu, perf.highest_perf,
|
|
||||||
cpudata->epp_cached,
|
|
||||||
FIELD_GET(AMD_CPPC_MIN_PERF_MASK, cpudata->cppc_req_cached),
|
|
||||||
- max_perf, policy->boost_enabled);
|
|
||||||
+ perf.highest_perf, policy->boost_enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
return amd_pstate_epp_update_limit(policy);
|
|
||||||
@@ -1607,22 +1633,21 @@ static int amd_pstate_epp_cpu_online(str
|
|
||||||
static int amd_pstate_epp_cpu_offline(struct cpufreq_policy *policy)
|
|
||||||
{
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
- u8 min_perf;
|
|
||||||
+ union perf_cached perf = READ_ONCE(cpudata->perf);
|
|
||||||
|
|
||||||
if (cpudata->suspended)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- min_perf = READ_ONCE(cpudata->lowest_perf);
|
|
||||||
-
|
|
||||||
guard(mutex)(&amd_pstate_limits_lock);
|
|
||||||
|
|
||||||
if (trace_amd_pstate_epp_perf_enabled()) {
|
|
||||||
- trace_amd_pstate_epp_perf(cpudata->cpu, cpudata->highest_perf,
|
|
||||||
+ trace_amd_pstate_epp_perf(cpudata->cpu, perf.highest_perf,
|
|
||||||
AMD_CPPC_EPP_BALANCE_POWERSAVE,
|
|
||||||
- min_perf, min_perf, policy->boost_enabled);
|
|
||||||
+ perf.lowest_perf, perf.lowest_perf,
|
|
||||||
+ policy->boost_enabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
- return amd_pstate_update_perf(cpudata, min_perf, 0, min_perf,
|
|
||||||
+ return amd_pstate_update_perf(cpudata, perf.lowest_perf, 0, perf.lowest_perf,
|
|
||||||
AMD_CPPC_EPP_BALANCE_POWERSAVE, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.h
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.h
|
|
||||||
@@ -13,6 +13,36 @@
|
|
||||||
/*********************************************************************
|
|
||||||
* AMD P-state INTERFACE *
|
|
||||||
*********************************************************************/
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
+ * union perf_cached - A union to cache performance-related data.
|
|
||||||
+ * @highest_perf: the maximum performance an individual processor may reach,
|
|
||||||
+ * assuming ideal conditions
|
|
||||||
+ * For platforms that support the preferred core feature, the highest_perf value maybe
|
|
||||||
+ * configured to any value in the range 166-255 by the firmware (because the preferred
|
|
||||||
+ * core ranking is encoded in the highest_perf value). To maintain consistency across
|
|
||||||
+ * all platforms, we split the highest_perf and preferred core ranking values into
|
|
||||||
+ * cpudata->perf.highest_perf and cpudata->prefcore_ranking.
|
|
||||||
+ * @nominal_perf: the maximum sustained performance level of the processor,
|
|
||||||
+ * assuming ideal operating conditions
|
|
||||||
+ * @lowest_nonlinear_perf: the lowest performance level at which nonlinear power
|
|
||||||
+ * savings are achieved
|
|
||||||
+ * @lowest_perf: the absolute lowest performance level of the processor
|
|
||||||
+ * @min_limit_perf: Cached value of the performance corresponding to policy->min
|
|
||||||
+ * @max_limit_perf: Cached value of the performance corresponding to policy->max
|
|
||||||
+ */
|
|
||||||
+union perf_cached {
|
|
||||||
+ struct {
|
|
||||||
+ u8 highest_perf;
|
|
||||||
+ u8 nominal_perf;
|
|
||||||
+ u8 lowest_nonlinear_perf;
|
|
||||||
+ u8 lowest_perf;
|
|
||||||
+ u8 min_limit_perf;
|
|
||||||
+ u8 max_limit_perf;
|
|
||||||
+ };
|
|
||||||
+ u64 val;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* struct amd_aperf_mperf
|
|
||||||
* @aperf: actual performance frequency clock count
|
|
||||||
@@ -30,20 +60,9 @@ struct amd_aperf_mperf {
|
|
||||||
* @cpu: CPU number
|
|
||||||
* @req: constraint request to apply
|
|
||||||
* @cppc_req_cached: cached performance request hints
|
|
||||||
- * @highest_perf: the maximum performance an individual processor may reach,
|
|
||||||
- * assuming ideal conditions
|
|
||||||
- * For platforms that do not support the preferred core feature, the
|
|
||||||
- * highest_pef may be configured with 166 or 255, to avoid max frequency
|
|
||||||
- * calculated wrongly. we take the fixed value as the highest_perf.
|
|
||||||
- * @nominal_perf: the maximum sustained performance level of the processor,
|
|
||||||
- * assuming ideal operating conditions
|
|
||||||
- * @lowest_nonlinear_perf: the lowest performance level at which nonlinear power
|
|
||||||
- * savings are achieved
|
|
||||||
- * @lowest_perf: the absolute lowest performance level of the processor
|
|
||||||
+ * @perf: cached performance-related data
|
|
||||||
* @prefcore_ranking: the preferred core ranking, the higher value indicates a higher
|
|
||||||
* priority.
|
|
||||||
- * @min_limit_perf: Cached value of the performance corresponding to policy->min
|
|
||||||
- * @max_limit_perf: Cached value of the performance corresponding to policy->max
|
|
||||||
* @min_limit_freq: Cached value of policy->min (in khz)
|
|
||||||
* @max_limit_freq: Cached value of policy->max (in khz)
|
|
||||||
* @nominal_freq: the frequency (in khz) that mapped to nominal_perf
|
|
||||||
@@ -68,13 +87,9 @@ struct amd_cpudata {
|
|
||||||
struct freq_qos_request req[2];
|
|
||||||
u64 cppc_req_cached;
|
|
||||||
|
|
||||||
- u8 highest_perf;
|
|
||||||
- u8 nominal_perf;
|
|
||||||
- u8 lowest_nonlinear_perf;
|
|
||||||
- u8 lowest_perf;
|
|
||||||
+ union perf_cached perf;
|
|
||||||
+
|
|
||||||
u8 prefcore_ranking;
|
|
||||||
- u8 min_limit_perf;
|
|
||||||
- u8 max_limit_perf;
|
|
||||||
u32 min_limit_freq;
|
|
||||||
u32 max_limit_freq;
|
|
||||||
u32 nominal_freq;
|
|
@@ -1,89 +0,0 @@
|
|||||||
From 34925ac1038d19197f0a2ac8574496e77645fdf5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:20 -0600
|
|
||||||
Subject: cpufreq/amd-pstate: Overhaul locking
|
|
||||||
|
|
||||||
amd_pstate_cpu_boost_update() and refresh_frequency_limits() both
|
|
||||||
update the policy state and have nothing to do with the amd-pstate
|
|
||||||
driver itself.
|
|
||||||
|
|
||||||
A global "limits" lock doesn't make sense because each CPU can have
|
|
||||||
policies changed independently. Each time a CPU changes values they
|
|
||||||
will atomically be written to the per-CPU perf member. Drop per CPU
|
|
||||||
locking cases.
|
|
||||||
|
|
||||||
The remaining "global" driver lock is used to ensure that only one
|
|
||||||
entity can change driver modes at a given time.
|
|
||||||
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 13 +++----------
|
|
||||||
1 file changed, 3 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -196,7 +196,6 @@ static inline int get_mode_idx_from_str(
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static DEFINE_MUTEX(amd_pstate_limits_lock);
|
|
||||||
static DEFINE_MUTEX(amd_pstate_driver_lock);
|
|
||||||
|
|
||||||
static u8 msr_get_epp(struct amd_cpudata *cpudata)
|
|
||||||
@@ -752,7 +751,6 @@ static int amd_pstate_set_boost(struct c
|
|
||||||
pr_err("Boost mode is not supported by this processor or SBIOS\n");
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
}
|
|
||||||
- guard(mutex)(&amd_pstate_driver_lock);
|
|
||||||
|
|
||||||
ret = amd_pstate_cpu_boost_update(policy, state);
|
|
||||||
refresh_frequency_limits(policy);
|
|
||||||
@@ -1170,8 +1168,6 @@ static ssize_t store_energy_performance_
|
|
||||||
if (ret < 0)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- guard(mutex)(&amd_pstate_limits_lock);
|
|
||||||
-
|
|
||||||
ret = amd_pstate_set_energy_pref_index(policy, ret);
|
|
||||||
|
|
||||||
return ret ? ret : count;
|
|
||||||
@@ -1344,8 +1340,10 @@ int amd_pstate_update_status(const char
|
|
||||||
if (mode_idx < 0 || mode_idx >= AMD_PSTATE_MAX)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- if (mode_state_machine[cppc_state][mode_idx])
|
|
||||||
+ if (mode_state_machine[cppc_state][mode_idx]) {
|
|
||||||
+ guard(mutex)(&amd_pstate_driver_lock);
|
|
||||||
return mode_state_machine[cppc_state][mode_idx](mode_idx);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1366,7 +1364,6 @@ static ssize_t status_store(struct devic
|
|
||||||
char *p = memchr(buf, '\n', count);
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
- guard(mutex)(&amd_pstate_driver_lock);
|
|
||||||
ret = amd_pstate_update_status(buf, p ? p - buf : count);
|
|
||||||
|
|
||||||
return ret < 0 ? ret : count;
|
|
||||||
@@ -1638,8 +1635,6 @@ static int amd_pstate_epp_cpu_offline(st
|
|
||||||
if (cpudata->suspended)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- guard(mutex)(&amd_pstate_limits_lock);
|
|
||||||
-
|
|
||||||
if (trace_amd_pstate_epp_perf_enabled()) {
|
|
||||||
trace_amd_pstate_epp_perf(cpudata->cpu, perf.highest_perf,
|
|
||||||
AMD_CPPC_EPP_BALANCE_POWERSAVE,
|
|
||||||
@@ -1679,8 +1674,6 @@ static int amd_pstate_epp_resume(struct
|
|
||||||
struct amd_cpudata *cpudata = policy->driver_data;
|
|
||||||
|
|
||||||
if (cpudata->suspended) {
|
|
||||||
- guard(mutex)(&amd_pstate_limits_lock);
|
|
||||||
-
|
|
||||||
/* enable amd pstate from suspend state*/
|
|
||||||
amd_pstate_epp_reenable(policy);
|
|
||||||
|
|
@@ -1,48 +0,0 @@
|
|||||||
From 33c2b6f10f140e35f44d2be9bd8dc9eb459fb29a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:21 -0600
|
|
||||||
Subject: cpufreq/amd-pstate: Drop `cppc_cap1_cached`
|
|
||||||
|
|
||||||
The `cppc_cap1_cached` variable isn't used at all, there is no
|
|
||||||
need to read it at initialization for each CPU.
|
|
||||||
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate.c | 5 -----
|
|
||||||
drivers/cpufreq/amd-pstate.h | 2 --
|
|
||||||
2 files changed, 7 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.c
|
|
||||||
@@ -1508,11 +1508,6 @@ static int amd_pstate_epp_cpu_init(struc
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
WRITE_ONCE(cpudata->cppc_req_cached, value);
|
|
||||||
-
|
|
||||||
- ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_CAP1, &value);
|
|
||||||
- if (ret)
|
|
||||||
- return ret;
|
|
||||||
- WRITE_ONCE(cpudata->cppc_cap1_cached, value);
|
|
||||||
}
|
|
||||||
ret = amd_pstate_set_epp(cpudata, cpudata->epp_default);
|
|
||||||
if (ret)
|
|
||||||
--- a/drivers/cpufreq/amd-pstate.h
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate.h
|
|
||||||
@@ -76,7 +76,6 @@ struct amd_aperf_mperf {
|
|
||||||
* AMD P-State driver supports preferred core featue.
|
|
||||||
* @epp_cached: Cached CPPC energy-performance preference value
|
|
||||||
* @policy: Cpufreq policy value
|
|
||||||
- * @cppc_cap1_cached Cached MSR_AMD_CPPC_CAP1 register value
|
|
||||||
*
|
|
||||||
* The amd_cpudata is key private data for each CPU thread in AMD P-State, and
|
|
||||||
* represents all the attributes and goals that AMD P-State requests at runtime.
|
|
||||||
@@ -105,7 +104,6 @@ struct amd_cpudata {
|
|
||||||
/* EPP feature related attributes*/
|
|
||||||
u8 epp_cached;
|
|
||||||
u32 policy;
|
|
||||||
- u64 cppc_cap1_cached;
|
|
||||||
bool suspended;
|
|
||||||
u8 epp_default;
|
|
||||||
};
|
|
@@ -1,144 +0,0 @@
|
|||||||
From 22a3d411de53a42057ab0dc45bb00306fd855807 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
Date: Wed, 26 Feb 2025 01:49:22 -0600
|
|
||||||
Subject: cpufreq/amd-pstate-ut: Use _free macro to free put policy
|
|
||||||
|
|
||||||
Using a scoped cleanup macro simplifies cleanup code.
|
|
||||||
|
|
||||||
Reviewed-by: Dhananjay Ugwekar <dhananjay.ugwekar@amd.com>
|
|
||||||
Reviewed-by: Gautham R. Shenoy <gautham.shenoy@amd.com>
|
|
||||||
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
|
|
||||||
---
|
|
||||||
drivers/cpufreq/amd-pstate-ut.c | 33 ++++++++++++++-------------------
|
|
||||||
1 file changed, 14 insertions(+), 19 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/cpufreq/amd-pstate-ut.c
|
|
||||||
+++ b/drivers/cpufreq/amd-pstate-ut.c
|
|
||||||
@@ -26,6 +26,7 @@
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/moduleparam.h>
|
|
||||||
#include <linux/fs.h>
|
|
||||||
+#include <linux/cleanup.h>
|
|
||||||
|
|
||||||
#include <acpi/cppc_acpi.h>
|
|
||||||
|
|
||||||
@@ -127,11 +128,12 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
u32 highest_perf = 0, nominal_perf = 0, lowest_nonlinear_perf = 0, lowest_perf = 0;
|
|
||||||
u64 cap1 = 0;
|
|
||||||
struct cppc_perf_caps cppc_perf;
|
|
||||||
- struct cpufreq_policy *policy = NULL;
|
|
||||||
struct amd_cpudata *cpudata = NULL;
|
|
||||||
union perf_cached cur_perf;
|
|
||||||
|
|
||||||
for_each_possible_cpu(cpu) {
|
|
||||||
+ struct cpufreq_policy *policy __free(put_cpufreq_policy) = NULL;
|
|
||||||
+
|
|
||||||
policy = cpufreq_cpu_get(cpu);
|
|
||||||
if (!policy)
|
|
||||||
break;
|
|
||||||
@@ -142,7 +144,7 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
if (ret) {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s cppc_get_perf_caps ret=%d error!\n", __func__, ret);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
highest_perf = cppc_perf.highest_perf;
|
|
||||||
@@ -154,7 +156,7 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
if (ret) {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s read CPPC_CAP1 ret=%d error!\n", __func__, ret);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
highest_perf = AMD_CPPC_HIGHEST_PERF(cap1);
|
|
||||||
@@ -167,7 +169,7 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
if (highest_perf != cur_perf.highest_perf && !cpudata->hw_prefcore) {
|
|
||||||
pr_err("%s cpu%d highest=%d %d highest perf doesn't match\n",
|
|
||||||
__func__, cpu, highest_perf, cur_perf.highest_perf);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
if (nominal_perf != cur_perf.nominal_perf ||
|
|
||||||
(lowest_nonlinear_perf != cur_perf.lowest_nonlinear_perf) ||
|
|
||||||
@@ -177,7 +179,7 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
__func__, cpu, nominal_perf, cur_perf.nominal_perf,
|
|
||||||
lowest_nonlinear_perf, cur_perf.lowest_nonlinear_perf,
|
|
||||||
lowest_perf, cur_perf.lowest_perf);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!((highest_perf >= nominal_perf) &&
|
|
||||||
@@ -188,15 +190,11 @@ static void amd_pstate_ut_check_perf(u32
|
|
||||||
pr_err("%s cpu%d highest=%d >= nominal=%d > lowest_nonlinear=%d > lowest=%d > 0, the formula is incorrect!\n",
|
|
||||||
__func__, cpu, highest_perf, nominal_perf,
|
|
||||||
lowest_nonlinear_perf, lowest_perf);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_PASS;
|
|
||||||
- return;
|
|
||||||
-skip_test:
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -207,10 +205,11 @@ skip_test:
|
|
||||||
static void amd_pstate_ut_check_freq(u32 index)
|
|
||||||
{
|
|
||||||
int cpu = 0;
|
|
||||||
- struct cpufreq_policy *policy = NULL;
|
|
||||||
struct amd_cpudata *cpudata = NULL;
|
|
||||||
|
|
||||||
for_each_possible_cpu(cpu) {
|
|
||||||
+ struct cpufreq_policy *policy __free(put_cpufreq_policy) = NULL;
|
|
||||||
+
|
|
||||||
policy = cpufreq_cpu_get(cpu);
|
|
||||||
if (!policy)
|
|
||||||
break;
|
|
||||||
@@ -224,14 +223,14 @@ static void amd_pstate_ut_check_freq(u32
|
|
||||||
pr_err("%s cpu%d max=%d >= nominal=%d > lowest_nonlinear=%d > min=%d > 0, the formula is incorrect!\n",
|
|
||||||
__func__, cpu, policy->cpuinfo.max_freq, cpudata->nominal_freq,
|
|
||||||
cpudata->lowest_nonlinear_freq, policy->cpuinfo.min_freq);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cpudata->lowest_nonlinear_freq != policy->min) {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s cpu%d cpudata_lowest_nonlinear_freq=%d policy_min=%d, they should be equal!\n",
|
|
||||||
__func__, cpu, cpudata->lowest_nonlinear_freq, policy->min);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cpudata->boost_supported) {
|
|
||||||
@@ -243,20 +242,16 @@ static void amd_pstate_ut_check_freq(u32
|
|
||||||
pr_err("%s cpu%d policy_max=%d should be equal cpu_max=%d or cpu_nominal=%d !\n",
|
|
||||||
__func__, cpu, policy->max, policy->cpuinfo.max_freq,
|
|
||||||
cpudata->nominal_freq);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
|
||||||
pr_err("%s cpu%d must support boost!\n", __func__, cpu);
|
|
||||||
- goto skip_test;
|
|
||||||
+ return;
|
|
||||||
}
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_PASS;
|
|
||||||
- return;
|
|
||||||
-skip_test:
|
|
||||||
- cpufreq_cpu_put(policy);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int amd_pstate_set_mode(enum amd_pstate_mode mode)
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user