Compare commits
4 Commits
06a5da3214
...
5205e81720
Author | SHA1 | Date | |
---|---|---|---|
5205e81720 | |||
8083f6cf32 | |||
b65c570ac2 | |||
3d597650a9 |
2
debian/bin/gencontrol.py
vendored
2
debian/bin/gencontrol.py
vendored
@@ -349,7 +349,7 @@ class Gencontrol(Base):
|
|||||||
makeflags['KCONFIG_OPTIONS'] = ''
|
makeflags['KCONFIG_OPTIONS'] = ''
|
||||||
# Add "salt" to fix #872263
|
# Add "salt" to fix #872263
|
||||||
makeflags['KCONFIG_OPTIONS'] += \
|
makeflags['KCONFIG_OPTIONS'] += \
|
||||||
' -o "BUILD_SALT=\\"%(source_basename)s%(abiname)s%(localversion)s\\""' % vars
|
' -o "BUILD_SALT=\\"krd-%(source_basename)s-%(abiname)s%(localversion)s\\""' % vars
|
||||||
|
|
||||||
merged_config = ('debian/build/config.%s_%s_%s' %
|
merged_config = ('debian/build/config.%s_%s_%s' %
|
||||||
(config.name_debianarch, config.name_featureset, config.name_flavour))
|
(config.name_debianarch, config.name_featureset, config.name_flavour))
|
||||||
|
2
debian/bin/genpatch-pfkernel
vendored
2
debian/bin/genpatch-pfkernel
vendored
@@ -7,7 +7,7 @@ w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
|||||||
|
|
||||||
dst='debian/patches/pf-tmp'
|
dst='debian/patches/pf-tmp'
|
||||||
src='../linux-extras'
|
src='../linux-extras'
|
||||||
branches='btrfs cpuidle crypto fixes kbuild pksm xfs zstd'
|
branches='amd-pstate cpuidle crypto fixes kbuild zstd'
|
||||||
|
|
||||||
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
||||||
mkdir -p "${dst}"
|
mkdir -p "${dst}"
|
||||||
|
1
debian/bin/refine-configs
vendored
1
debian/bin/refine-configs
vendored
@@ -52,6 +52,7 @@ done
|
|||||||
find debian/build/ -name 'config.*' -type f -exec \
|
find debian/build/ -name 'config.*' -type f -exec \
|
||||||
sed -i -E \
|
sed -i -E \
|
||||||
-e '/CONFIG_BUILD_SALT/d' \
|
-e '/CONFIG_BUILD_SALT/d' \
|
||||||
|
-e '/CONFIG_MODULE_SIG_KEY( |=)/d' \
|
||||||
-e '/CONFIG_(AS|CC|PAHOLE)_((CAN|HAS)_)/d' \
|
-e '/CONFIG_(AS|CC|PAHOLE)_((CAN|HAS)_)/d' \
|
||||||
-e '/CONFIG_(AS|BINDGEN|CC|CLANG|GCC|LD|LLD|PAHOLE|RUSTC)_VERSION/d' \
|
-e '/CONFIG_(AS|BINDGEN|CC|CLANG|GCC|LD|LLD|PAHOLE|RUSTC)_VERSION/d' \
|
||||||
-e '/CONFIG_RUSTC_LLVM_VERSION/d' \
|
-e '/CONFIG_RUSTC_LLVM_VERSION/d' \
|
||||||
|
201
debian/changelog
vendored
201
debian/changelog
vendored
@@ -1,198 +1,9 @@
|
|||||||
linux (6.12.20-1) sid; urgency=medium
|
linux (6.14-1) sid; urgency=medium
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.20
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Sun, 23 Mar 2025 03:14:29 +0300
|
|
||||||
|
|
||||||
linux (6.12.19-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.19
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 13 Mar 2025 20:47:49 +0300
|
|
||||||
|
|
||||||
linux (6.12.18-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.18
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Sat, 08 Mar 2025 06:44:24 +0300
|
|
||||||
|
|
||||||
linux (6.12.17-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.17
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 27 Feb 2025 16:35:33 +0300
|
|
||||||
|
|
||||||
linux (6.12.16-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.15
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.16
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 21 Feb 2025 17:46:41 +0300
|
|
||||||
|
|
||||||
linux (6.12.14-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.14
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 17 Feb 2025 17:43:08 +0300
|
|
||||||
|
|
||||||
linux (6.12.13-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.13
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Sun, 09 Feb 2025 19:34:35 +0300
|
|
||||||
|
|
||||||
linux (6.12.12-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.12
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Sun, 02 Feb 2025 13:07:44 +0300
|
|
||||||
|
|
||||||
linux (6.12.11-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.11
|
|
||||||
* Compress vmlinux with xz for all flavours.
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Tue, 28 Jan 2025 09:10:17 +0300
|
|
||||||
|
|
||||||
linux (6.12.10-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.10
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Sat, 18 Jan 2025 01:39:50 +0300
|
|
||||||
|
|
||||||
linux (6.12.9-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.9
|
|
||||||
* Drop "pf/amd-pstate" and "pf/amd-rapl" patchsets.
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 09 Jan 2025 23:12:22 +0300
|
|
||||||
|
|
||||||
linux (6.12.8-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.8
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 02 Jan 2025 19:34:34 +0300
|
|
||||||
|
|
||||||
linux (6.12.7-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.7
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 27 Dec 2024 16:28:43 +0300
|
|
||||||
|
|
||||||
linux (6.12.6-2) sid; urgency=medium
|
|
||||||
|
|
||||||
* Cherry-pick some patches.
|
|
||||||
* Refine/adjust configs.
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 27 Dec 2024 00:47:14 +0300
|
|
||||||
|
|
||||||
linux (6.12.6-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.6
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 19 Dec 2024 21:00:52 +0300
|
|
||||||
|
|
||||||
linux (6.12.5-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.5
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 16 Dec 2024 06:43:43 +0300
|
|
||||||
|
|
||||||
linux (6.12.4-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* Sync with Debian.
|
* Sync with Debian.
|
||||||
* New upstream release: https://kernelnewbies.org/Linux_6.12
|
* Refresh patches.
|
||||||
* New upstream stable update:
|
* Refine configs.
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.1
|
* New upstream release: https://kernelnewbies.org/Linux_6.13
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.2
|
* New upstream release: https://kernelnewbies.org/Linux_6.14
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.3
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.4
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 09 Dec 2024 22:08:34 +0300
|
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 27 Mar 2025 01:51:03 +0300
|
||||||
|
|
||||||
linux (6.11.11-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.11
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 05 Dec 2024 18:41:08 +0300
|
|
||||||
|
|
||||||
linux (6.11.10-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.10
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 22 Nov 2024 19:59:35 +0300
|
|
||||||
|
|
||||||
linux (6.11.9-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.9
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 18 Nov 2024 00:21:44 +0300
|
|
||||||
|
|
||||||
linux (6.11.8-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.8
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 15 Nov 2024 10:17:08 +0300
|
|
||||||
|
|
||||||
linux (6.11.7-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.7
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 08 Nov 2024 22:31:17 +0300
|
|
||||||
|
|
||||||
linux (6.11.6-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.6
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 01 Nov 2024 10:54:09 +0300
|
|
||||||
|
|
||||||
linux (6.11.5-1) sid; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.5
|
|
||||||
|
|
||||||
[ Aurelien Jarno ]
|
|
||||||
* Revert upstream commit causing data corrution (Closes: #1085425)
|
|
||||||
- Revert "mmc: dw_mmc: Fix IDMAC operation with pages bigger than 4K"
|
|
||||||
|
|
||||||
[ Salvatore Bonaccorso ]
|
|
||||||
* netfilter: xtables: fix typo causing some targets not to load on IPv6
|
|
||||||
(Closes: #1085953)
|
|
||||||
|
|
||||||
[ Konstantin Demin ]
|
|
||||||
* Initial package release.
|
|
||||||
|
|
||||||
-- Konstantin Demin <rockdrilla@gmail.com> Tue, 29 Oct 2024 05:14:58 +0300
|
|
||||||
|
|
||||||
linux (6.11.4-1) unstable; urgency=medium
|
|
||||||
|
|
||||||
* New upstream stable update:
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.3
|
|
||||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.11.4
|
|
||||||
|
|
||||||
[ Salvatore Bonaccorso ]
|
|
||||||
* d/config: Update with the help of kconfigeditor2
|
|
||||||
- mm: Enable Z3FOLD_DEPRECATED instead of Z3FOLD
|
|
||||||
|
|
||||||
-- Salvatore Bonaccorso <carnil@debian.org> Sun, 20 Oct 2024 20:51:13 +0200
|
|
||||||
|
56
debian/config/amd64/config.cloud
vendored
56
debian/config/amd64/config.cloud
vendored
@@ -110,7 +110,6 @@ CONFIG_XEN_PV_MSR_SAFE=y
|
|||||||
## file: crypto/Kconfig
|
## file: crypto/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_CRYPTO_ECDH=m
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_ECDSA=m
|
|
||||||
CONFIG_CRYPTO_CTS=m
|
CONFIG_CRYPTO_CTS=m
|
||||||
CONFIG_CRYPTO_XTS=m
|
CONFIG_CRYPTO_XTS=m
|
||||||
CONFIG_CRYPTO_DEFLATE=m
|
CONFIG_CRYPTO_DEFLATE=m
|
||||||
@@ -353,6 +352,7 @@ CONFIG_CXL_BUS=y
|
|||||||
##
|
##
|
||||||
## file: drivers/dma/amd/Kconfig
|
## file: drivers/dma/amd/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_AMD_PTDMA is not set
|
||||||
# CONFIG_AMD_QDMA is not set
|
# CONFIG_AMD_QDMA is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -371,11 +371,6 @@ CONFIG_CXL_BUS=y
|
|||||||
##
|
##
|
||||||
# CONFIG_INTEL_LDMA is not set
|
# CONFIG_INTEL_LDMA is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/dma/ptdma/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_AMD_PTDMA is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/dma/qcom/Kconfig
|
## file: drivers/dma/qcom/Kconfig
|
||||||
##
|
##
|
||||||
@@ -784,6 +779,7 @@ CONFIG_FUSION_FC=m
|
|||||||
##
|
##
|
||||||
## file: drivers/mfd/Kconfig
|
## file: drivers/mfd/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_MFD_CGBC is not set
|
||||||
# CONFIG_MFD_MADERA is not set
|
# CONFIG_MFD_MADERA is not set
|
||||||
# CONFIG_MFD_INTEL_LPSS_ACPI is not set
|
# CONFIG_MFD_INTEL_LPSS_ACPI is not set
|
||||||
# CONFIG_MFD_INTEL_LPSS_PCI is not set
|
# CONFIG_MFD_INTEL_LPSS_PCI is not set
|
||||||
@@ -796,6 +792,8 @@ CONFIG_FUSION_FC=m
|
|||||||
# CONFIG_MFD_TQMX86 is not set
|
# CONFIG_MFD_TQMX86 is not set
|
||||||
# CONFIG_MFD_VX855 is not set
|
# CONFIG_MFD_VX855 is not set
|
||||||
# CONFIG_RAVE_SP_CORE is not set
|
# CONFIG_RAVE_SP_CORE is not set
|
||||||
|
# CONFIG_MFD_QNAP_MCU is not set
|
||||||
|
# CONFIG_MFD_UPBOARD_FPGA is not set
|
||||||
# CONFIG_MFD_STEAMDECK is not set
|
# CONFIG_MFD_STEAMDECK is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -838,11 +836,6 @@ CONFIG_VMWARE_BALLOON=m
|
|||||||
##
|
##
|
||||||
# CONFIG_EEPROM_93CX6 is not set
|
# CONFIG_EEPROM_93CX6 is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/misc/keba/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_KEBA_CP500 is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/misc/mei/Kconfig
|
## file: drivers/misc/mei/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1010,6 +1003,11 @@ CONFIG_BE2NET_SKYHAWK=y
|
|||||||
##
|
##
|
||||||
# CONFIG_NET_VENDOR_FUNGIBLE is not set
|
# CONFIG_NET_VENDOR_FUNGIBLE is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/ethernet/hisilicon/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_NET_VENDOR_HISILICON is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ethernet/huawei/Kconfig
|
## file: drivers/net/ethernet/huawei/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1292,7 +1290,6 @@ 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_MEDIATEK_GE_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
|
||||||
@@ -1305,7 +1302,6 @@ CONFIG_HYPERV_NET=m
|
|||||||
# CONFIG_NXP_TJA11XX_PHY is not set
|
# CONFIG_NXP_TJA11XX_PHY is not set
|
||||||
# CONFIG_NCN26000_PHY is not set
|
# CONFIG_NCN26000_PHY is not set
|
||||||
# CONFIG_QSEMI_PHY is not set
|
# CONFIG_QSEMI_PHY is not set
|
||||||
# CONFIG_REALTEK_PHY is not set
|
|
||||||
# CONFIG_RENESAS_PHY is not set
|
# CONFIG_RENESAS_PHY is not set
|
||||||
# CONFIG_ROCKCHIP_PHY is not set
|
# CONFIG_ROCKCHIP_PHY is not set
|
||||||
# CONFIG_SMSC_PHY is not set
|
# CONFIG_SMSC_PHY is not set
|
||||||
@@ -1326,12 +1322,22 @@ CONFIG_HYPERV_NET=m
|
|||||||
##
|
##
|
||||||
# CONFIG_AQUANTIA_PHY is not set
|
# CONFIG_AQUANTIA_PHY is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/phy/mediatek/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_MEDIATEK_GE_PHY is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/phy/qcom/Kconfig
|
## file: drivers/net/phy/qcom/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_QCA83XX_PHY is not set
|
# CONFIG_QCA83XX_PHY is not set
|
||||||
# CONFIG_QCA808X_PHY is not set
|
# CONFIG_QCA808X_PHY is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/phy/realtek/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_REALTEK_PHY is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ppp/Kconfig
|
## file: drivers/net/ppp/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1396,7 +1402,7 @@ CONFIG_NVME_TARGET_FC=m
|
|||||||
## file: drivers/pci/Kconfig
|
## file: drivers/pci/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
CONFIG_XEN_PCIDEV_FRONTEND=m
|
||||||
# CONFIG_PCI_P2PDMA is not set
|
# CONFIG_PCIE_TPH is not set
|
||||||
CONFIG_PCI_HYPERV=m
|
CONFIG_PCI_HYPERV=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -1416,6 +1422,7 @@ CONFIG_PCI_HYPERV_INTERFACE=m
|
|||||||
##
|
##
|
||||||
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
|
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
|
||||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||||
|
# CONFIG_HOTPLUG_PCI_OCTEONEP is not set
|
||||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -1636,11 +1643,6 @@ CONFIG_SCSI_MPI3MR=m
|
|||||||
##
|
##
|
||||||
# CONFIG_SOC_TI is not set
|
# CONFIG_SOC_TI is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/soundwire/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_SOUNDWIRE is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/spi/Kconfig
|
## file: drivers/spi/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1678,6 +1680,7 @@ CONFIG_SCSI_MPI3MR=m
|
|||||||
# CONFIG_THERMAL_DEBUGFS is not set
|
# CONFIG_THERMAL_DEBUGFS is not set
|
||||||
# CONFIG_THERMAL_CORE_TESTING is not set
|
# CONFIG_THERMAL_CORE_TESTING is not set
|
||||||
# CONFIG_THERMAL_GOV_BANG_BANG is not set
|
# CONFIG_THERMAL_GOV_BANG_BANG is not set
|
||||||
|
# CONFIG_PCIE_THERMAL is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/thunderbolt/Kconfig
|
## file: drivers/thunderbolt/Kconfig
|
||||||
@@ -1830,7 +1833,6 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
|||||||
# CONFIG_PC87413_WDT is not set
|
# CONFIG_PC87413_WDT is not set
|
||||||
# CONFIG_NV_TCO is not set
|
# CONFIG_NV_TCO is not set
|
||||||
# CONFIG_60XX_WDT is not set
|
# CONFIG_60XX_WDT is not set
|
||||||
# CONFIG_CPU5_WDT is not set
|
|
||||||
# CONFIG_SMSC_SCH311X_WDT is not set
|
# CONFIG_SMSC_SCH311X_WDT is not set
|
||||||
# CONFIG_SMSC37B787_WDT is not set
|
# CONFIG_SMSC37B787_WDT is not set
|
||||||
# CONFIG_TQMX86_WDT is not set
|
# CONFIG_TQMX86_WDT is not set
|
||||||
@@ -2057,11 +2059,6 @@ CONFIG_PROC_VMCORE=y
|
|||||||
##
|
##
|
||||||
# CONFIG_QNX6FS_FS is not set
|
# CONFIG_QNX6FS_FS is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/reiserfs/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_REISERFS_FS is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/romfs/Kconfig
|
## file: fs/romfs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2114,7 +2111,7 @@ CONFIG_CRASH_MAX_MEMORY_RANGES=8192
|
|||||||
##
|
##
|
||||||
## choice: Preemption Model
|
## choice: Preemption Model
|
||||||
CONFIG_PREEMPT_NONE=y
|
CONFIG_PREEMPT_NONE=y
|
||||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
# CONFIG_PREEMPT_LAZY is not set
|
||||||
## end choice
|
## end choice
|
||||||
# CONFIG_SCHED_CORE is not set
|
# CONFIG_SCHED_CORE is not set
|
||||||
|
|
||||||
@@ -2178,7 +2175,6 @@ CONFIG_PANIC_TIMEOUT=5
|
|||||||
## file: mm/Kconfig
|
## file: mm/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_ZSWAP is not set
|
# CONFIG_ZSWAP is not set
|
||||||
CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
|
|
||||||
# CONFIG_HWPOISON_INJECT is not set
|
# CONFIG_HWPOISON_INJECT is not set
|
||||||
# CONFIG_NUMA_EMU is not set
|
# CONFIG_NUMA_EMU is not set
|
||||||
|
|
||||||
@@ -2462,7 +2458,6 @@ 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_ECC=m
|
|
||||||
CONFIG_CRYPTO_LIB_AESCFB=m
|
CONFIG_CRYPTO_LIB_AESCFB=m
|
||||||
CONFIG_CXL_PORT=y
|
CONFIG_CXL_PORT=y
|
||||||
CONFIG_FB_IOMEM_HELPERS_DEFERRED=y
|
CONFIG_FB_IOMEM_HELPERS_DEFERRED=y
|
||||||
@@ -2472,6 +2467,11 @@ CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
|
|||||||
CONFIG_INFINIBAND_RTRS=m
|
CONFIG_INFINIBAND_RTRS=m
|
||||||
CONFIG_INFINIBAND_USER_MEM=y
|
CONFIG_INFINIBAND_USER_MEM=y
|
||||||
CONFIG_INFINIBAND_VIRT_DMA=y
|
CONFIG_INFINIBAND_VIRT_DMA=y
|
||||||
|
CONFIG_INLINE_READ_UNLOCK=y
|
||||||
|
CONFIG_INLINE_READ_UNLOCK_IRQ=y
|
||||||
|
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
|
||||||
|
CONFIG_INLINE_WRITE_UNLOCK=y
|
||||||
|
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
|
||||||
CONFIG_IP_VS_PROTO_AH_ESP=y
|
CONFIG_IP_VS_PROTO_AH_ESP=y
|
||||||
CONFIG_KEXEC_CORE=y
|
CONFIG_KEXEC_CORE=y
|
||||||
CONFIG_LZ4HC_COMPRESS=m
|
CONFIG_LZ4HC_COMPRESS=m
|
||||||
|
276
debian/config/amd64/config.mobile
vendored
276
debian/config/amd64/config.mobile
vendored
@@ -88,6 +88,7 @@ CONFIG_ULTRIX_PARTITION=y
|
|||||||
CONFIG_SUN_PARTITION=y
|
CONFIG_SUN_PARTITION=y
|
||||||
CONFIG_KARMA_PARTITION=y
|
CONFIG_KARMA_PARTITION=y
|
||||||
CONFIG_SYSV68_PARTITION=y
|
CONFIG_SYSV68_PARTITION=y
|
||||||
|
CONFIG_OF_PARTITION=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: certs/Kconfig
|
## file: certs/Kconfig
|
||||||
@@ -103,7 +104,6 @@ CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
|
|||||||
## file: crypto/Kconfig
|
## file: crypto/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_CRYPTO_ECDH=y
|
CONFIG_CRYPTO_ECDH=y
|
||||||
CONFIG_CRYPTO_ECDSA=y
|
|
||||||
CONFIG_CRYPTO_CTS=y
|
CONFIG_CRYPTO_CTS=y
|
||||||
CONFIG_CRYPTO_XTS=y
|
CONFIG_CRYPTO_XTS=y
|
||||||
CONFIG_CRYPTO_DEFLATE=y
|
CONFIG_CRYPTO_DEFLATE=y
|
||||||
@@ -117,6 +117,11 @@ CONFIG_CRYPTO_ZSTD=y
|
|||||||
##
|
##
|
||||||
CONFIG_DRM_ACCEL=y
|
CONFIG_DRM_ACCEL=y
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/accel/amdxdna/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_DRM_ACCEL_AMDXDNA=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/accel/habanalabs/Kconfig
|
## file: drivers/accel/habanalabs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -126,6 +131,7 @@ CONFIG_DRM_ACCEL_HABANALABS=m
|
|||||||
## file: drivers/accel/ivpu/Kconfig
|
## file: drivers/accel/ivpu/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_DRM_ACCEL_IVPU=m
|
CONFIG_DRM_ACCEL_IVPU=m
|
||||||
|
# CONFIG_DRM_ACCEL_IVPU_DEBUG is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/accel/qaic/Kconfig
|
## file: drivers/accel/qaic/Kconfig
|
||||||
@@ -324,6 +330,7 @@ CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
|
|||||||
CONFIG_BT_HCIBTUSB=m
|
CONFIG_BT_HCIBTUSB=m
|
||||||
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
|
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
|
||||||
CONFIG_BT_HCIBTUSB_POLL_SYNC=y
|
CONFIG_BT_HCIBTUSB_POLL_SYNC=y
|
||||||
|
CONFIG_BT_HCIBTUSB_AUTO_ISOC_ALT=y
|
||||||
CONFIG_BT_HCIBTUSB_BCM=y
|
CONFIG_BT_HCIBTUSB_BCM=y
|
||||||
CONFIG_BT_HCIBTUSB_MTK=y
|
CONFIG_BT_HCIBTUSB_MTK=y
|
||||||
CONFIG_BT_HCIBTUSB_RTL=y
|
CONFIG_BT_HCIBTUSB_RTL=y
|
||||||
@@ -581,6 +588,8 @@ CONFIG_XILINX_ZYNQMP_DPDMA=m
|
|||||||
##
|
##
|
||||||
## file: drivers/dma/amd/Kconfig
|
## file: drivers/dma/amd/Kconfig
|
||||||
##
|
##
|
||||||
|
CONFIG_AMD_AE4DMA=m
|
||||||
|
CONFIG_AMD_PTDMA=m
|
||||||
CONFIG_AMD_QDMA=m
|
CONFIG_AMD_QDMA=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -600,11 +609,6 @@ CONFIG_DW_EDMA_PCIE=m
|
|||||||
##
|
##
|
||||||
CONFIG_INTEL_LDMA=y
|
CONFIG_INTEL_LDMA=y
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/dma/ptdma/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_AMD_PTDMA=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/dma/qcom/Kconfig
|
## file: drivers/dma/qcom/Kconfig
|
||||||
##
|
##
|
||||||
@@ -747,6 +751,7 @@ CONFIG_GPIO_HLWD=m
|
|||||||
CONFIG_GPIO_ICH=m
|
CONFIG_GPIO_ICH=m
|
||||||
CONFIG_GPIO_LOGICVC=m
|
CONFIG_GPIO_LOGICVC=m
|
||||||
CONFIG_GPIO_MB86S7X=m
|
CONFIG_GPIO_MB86S7X=m
|
||||||
|
CONFIG_GPIO_POLARFIRE_SOC=y
|
||||||
CONFIG_GPIO_SIFIVE=y
|
CONFIG_GPIO_SIFIVE=y
|
||||||
CONFIG_GPIO_SYSCON=m
|
CONFIG_GPIO_SYSCON=m
|
||||||
CONFIG_GPIO_WCD934X=m
|
CONFIG_GPIO_WCD934X=m
|
||||||
@@ -776,6 +781,7 @@ CONFIG_GPIO_ARIZONA=m
|
|||||||
CONFIG_GPIO_BD71815=m
|
CONFIG_GPIO_BD71815=m
|
||||||
CONFIG_GPIO_BD71828=m
|
CONFIG_GPIO_BD71828=m
|
||||||
CONFIG_GPIO_BD9571MWV=m
|
CONFIG_GPIO_BD9571MWV=m
|
||||||
|
CONFIG_GPIO_CGBC=m
|
||||||
CONFIG_GPIO_CRYSTAL_COVE=m
|
CONFIG_GPIO_CRYSTAL_COVE=m
|
||||||
CONFIG_GPIO_DA9052=m
|
CONFIG_GPIO_DA9052=m
|
||||||
CONFIG_GPIO_DA9055=m
|
CONFIG_GPIO_DA9055=m
|
||||||
@@ -823,6 +829,7 @@ CONFIG_GPIO_PISOSR=m
|
|||||||
CONFIG_GPIO_XRA1403=m
|
CONFIG_GPIO_XRA1403=m
|
||||||
CONFIG_GPIO_MOXTET=m
|
CONFIG_GPIO_MOXTET=m
|
||||||
CONFIG_GPIO_VIPERBOARD=m
|
CONFIG_GPIO_VIPERBOARD=m
|
||||||
|
CONFIG_GPIO_MPSSE=m
|
||||||
CONFIG_GPIO_AGGREGATOR=m
|
CONFIG_GPIO_AGGREGATOR=m
|
||||||
CONFIG_GPIO_LATCH=m
|
CONFIG_GPIO_LATCH=m
|
||||||
CONFIG_GPIO_MOCKUP=m
|
CONFIG_GPIO_MOCKUP=m
|
||||||
@@ -839,9 +846,6 @@ CONFIG_DRM=y
|
|||||||
# 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_FBDEV_EMULATION=y
|
|
||||||
CONFIG_DRM_FBDEV_OVERALLOC=100
|
|
||||||
# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM 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_WERROR is not set
|
# CONFIG_DRM_WERROR is not set
|
||||||
@@ -890,6 +894,7 @@ CONFIG_DRM_AST=m
|
|||||||
CONFIG_DRM_CHIPONE_ICN6211=m
|
CONFIG_DRM_CHIPONE_ICN6211=m
|
||||||
CONFIG_DRM_CHRONTEL_CH7033=m
|
CONFIG_DRM_CHRONTEL_CH7033=m
|
||||||
CONFIG_DRM_DISPLAY_CONNECTOR=m
|
CONFIG_DRM_DISPLAY_CONNECTOR=m
|
||||||
|
CONFIG_DRM_ITE_IT6263=m
|
||||||
CONFIG_DRM_ITE_IT6505=m
|
CONFIG_DRM_ITE_IT6505=m
|
||||||
CONFIG_DRM_LONTIUM_LT8912B=m
|
CONFIG_DRM_LONTIUM_LT8912B=m
|
||||||
CONFIG_DRM_LONTIUM_LT9211=m
|
CONFIG_DRM_LONTIUM_LT9211=m
|
||||||
@@ -914,6 +919,7 @@ CONFIG_DRM_TOSHIBA_TC358767=m
|
|||||||
CONFIG_DRM_TOSHIBA_TC358768=m
|
CONFIG_DRM_TOSHIBA_TC358768=m
|
||||||
# CONFIG_DRM_TOSHIBA_TC358775 is not set
|
# CONFIG_DRM_TOSHIBA_TC358775 is not set
|
||||||
CONFIG_DRM_TI_DLPC3433=m
|
CONFIG_DRM_TI_DLPC3433=m
|
||||||
|
CONFIG_DRM_TI_TDP158=m
|
||||||
CONFIG_DRM_TI_TFP410=m
|
CONFIG_DRM_TI_TFP410=m
|
||||||
CONFIG_DRM_TI_SN65DSI83=m
|
CONFIG_DRM_TI_SN65DSI83=m
|
||||||
# CONFIG_DRM_TI_SN65DSI86 is not set
|
# CONFIG_DRM_TI_SN65DSI86 is not set
|
||||||
@@ -940,6 +946,17 @@ CONFIG_DRM_CDNS_DSI=m
|
|||||||
CONFIG_DRM_CDNS_DSI_J721E=y
|
CONFIG_DRM_CDNS_DSI_J721E=y
|
||||||
CONFIG_DRM_CDNS_MHDP8546=m
|
CONFIG_DRM_CDNS_MHDP8546=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/clients/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_DRM_FBDEV_EMULATION=y
|
||||||
|
CONFIG_DRM_FBDEV_OVERALLOC=100
|
||||||
|
# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set
|
||||||
|
# CONFIG_DRM_CLIENT_LOG is not set
|
||||||
|
## choice: Default DRM Client
|
||||||
|
CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y
|
||||||
|
## end choice
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/display/Kconfig
|
## file: drivers/gpu/drm/display/Kconfig
|
||||||
##
|
##
|
||||||
@@ -961,6 +978,11 @@ CONFIG_DRM_GMA500=m
|
|||||||
##
|
##
|
||||||
CONFIG_DRM_GUD=m
|
CONFIG_DRM_GUD=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/hisilicon/hibmc/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_DRM_HISI_HIBMC=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/i2c/Kconfig
|
## file: drivers/gpu/drm/i2c/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1096,6 +1118,9 @@ CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
|
|||||||
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
|
CONFIG_DRM_PANEL_RAYDIUM_RM692E5=m
|
||||||
CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
|
CONFIG_DRM_PANEL_RAYDIUM_RM69380=m
|
||||||
CONFIG_DRM_PANEL_RONBO_RB070D30=m
|
CONFIG_DRM_PANEL_RONBO_RB070D30=m
|
||||||
|
CONFIG_DRM_PANEL_SAMSUNG_AMS581VF01=m
|
||||||
|
CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08=m
|
||||||
|
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
|
CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
|
CONFIG_DRM_PANEL_SAMSUNG_DB7430=m
|
||||||
@@ -1105,6 +1130,7 @@ CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=m
|
|||||||
CONFIG_DRM_PANEL_SAMSUNG_S6D27A1=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6D27A1=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
|
||||||
|
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA8=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=m
|
||||||
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI=m
|
CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_SPI=m
|
||||||
@@ -1171,6 +1197,7 @@ CONFIG_TINYDRM_ILI9341=m
|
|||||||
CONFIG_TINYDRM_ILI9486=m
|
CONFIG_TINYDRM_ILI9486=m
|
||||||
CONFIG_TINYDRM_MI0283QT=m
|
CONFIG_TINYDRM_MI0283QT=m
|
||||||
CONFIG_TINYDRM_REPAPER=m
|
CONFIG_TINYDRM_REPAPER=m
|
||||||
|
CONFIG_TINYDRM_SHARP_MEMORY=m
|
||||||
CONFIG_TINYDRM_ST7586=m
|
CONFIG_TINYDRM_ST7586=m
|
||||||
CONFIG_TINYDRM_ST7735R=m
|
CONFIG_TINYDRM_ST7735R=m
|
||||||
|
|
||||||
@@ -1208,6 +1235,7 @@ CONFIG_DRM_XE_FORCE_PROBE=""
|
|||||||
# CONFIG_DRM_XE_WERROR is not set
|
# CONFIG_DRM_XE_WERROR is not set
|
||||||
# CONFIG_DRM_XE_DEBUG is not set
|
# CONFIG_DRM_XE_DEBUG is not set
|
||||||
# CONFIG_DRM_XE_DEBUG_VM is not set
|
# CONFIG_DRM_XE_DEBUG_VM is not set
|
||||||
|
# CONFIG_DRM_XE_DEBUG_MEMIRQ is not set
|
||||||
# CONFIG_DRM_XE_DEBUG_SRIOV is not set
|
# CONFIG_DRM_XE_DEBUG_SRIOV is not set
|
||||||
# CONFIG_DRM_XE_DEBUG_MEM is not set
|
# CONFIG_DRM_XE_DEBUG_MEM is not set
|
||||||
# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
|
# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
|
||||||
@@ -1287,6 +1315,7 @@ CONFIG_HID_VIVALDI=m
|
|||||||
CONFIG_HID_GT683R=m
|
CONFIG_HID_GT683R=m
|
||||||
CONFIG_HID_KEYTOUCH=m
|
CONFIG_HID_KEYTOUCH=m
|
||||||
CONFIG_HID_KYE=m
|
CONFIG_HID_KYE=m
|
||||||
|
CONFIG_HID_KYSONA=m
|
||||||
CONFIG_HID_UCLOGIC=m
|
CONFIG_HID_UCLOGIC=m
|
||||||
CONFIG_HID_WALTOP=m
|
CONFIG_HID_WALTOP=m
|
||||||
CONFIG_HID_VIEWSONIC=m
|
CONFIG_HID_VIEWSONIC=m
|
||||||
@@ -1403,6 +1432,13 @@ CONFIG_I2C_HID_OF_GOODIX=m
|
|||||||
CONFIG_INTEL_ISH_HID=m
|
CONFIG_INTEL_ISH_HID=m
|
||||||
CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
|
CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/hid/intel-thc-hid/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_INTEL_THC_HID=m
|
||||||
|
CONFIG_INTEL_QUICKSPI=m
|
||||||
|
CONFIG_INTEL_QUICKI2C=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/hid/usbhid/Kconfig
|
## file: drivers/hid/usbhid/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1491,6 +1527,7 @@ CONFIG_SENSORS_IBMAEM=m
|
|||||||
CONFIG_SENSORS_IBMPEX=m
|
CONFIG_SENSORS_IBMPEX=m
|
||||||
CONFIG_SENSORS_I5500=m
|
CONFIG_SENSORS_I5500=m
|
||||||
CONFIG_SENSORS_CORETEMP=m
|
CONFIG_SENSORS_CORETEMP=m
|
||||||
|
CONFIG_SENSORS_ISL28022=m
|
||||||
CONFIG_SENSORS_IT87=m
|
CONFIG_SENSORS_IT87=m
|
||||||
CONFIG_SENSORS_JC42=m
|
CONFIG_SENSORS_JC42=m
|
||||||
CONFIG_SENSORS_POWERZ=m
|
CONFIG_SENSORS_POWERZ=m
|
||||||
@@ -1555,6 +1592,7 @@ CONFIG_SENSORS_PC87427=m
|
|||||||
CONFIG_SENSORS_NCT6683=m
|
CONFIG_SENSORS_NCT6683=m
|
||||||
CONFIG_SENSORS_NCT6775=m
|
CONFIG_SENSORS_NCT6775=m
|
||||||
CONFIG_SENSORS_NCT6775_I2C=m
|
CONFIG_SENSORS_NCT6775_I2C=m
|
||||||
|
CONFIG_SENSORS_NCT7363=m
|
||||||
CONFIG_SENSORS_NCT7802=m
|
CONFIG_SENSORS_NCT7802=m
|
||||||
CONFIG_SENSORS_NCT7904=m
|
CONFIG_SENSORS_NCT7904=m
|
||||||
CONFIG_SENSORS_NPCM7XX=m
|
CONFIG_SENSORS_NPCM7XX=m
|
||||||
@@ -1565,6 +1603,7 @@ CONFIG_SENSORS_OXP=m
|
|||||||
CONFIG_SENSORS_PCF8591=m
|
CONFIG_SENSORS_PCF8591=m
|
||||||
CONFIG_SENSORS_PT5161L=m
|
CONFIG_SENSORS_PT5161L=m
|
||||||
CONFIG_SENSORS_PWM_FAN=m
|
CONFIG_SENSORS_PWM_FAN=m
|
||||||
|
CONFIG_SENSORS_QNAP_MCU_HWMON=m
|
||||||
CONFIG_SENSORS_SBTSI=m
|
CONFIG_SENSORS_SBTSI=m
|
||||||
CONFIG_SENSORS_SBRMI=m
|
CONFIG_SENSORS_SBRMI=m
|
||||||
CONFIG_SENSORS_SHT15=m
|
CONFIG_SENSORS_SHT15=m
|
||||||
@@ -1651,6 +1690,7 @@ CONFIG_SENSORS_ADM1275=m
|
|||||||
CONFIG_SENSORS_ADP1050=m
|
CONFIG_SENSORS_ADP1050=m
|
||||||
CONFIG_SENSORS_BEL_PFE=m
|
CONFIG_SENSORS_BEL_PFE=m
|
||||||
CONFIG_SENSORS_BPA_RS600=m
|
CONFIG_SENSORS_BPA_RS600=m
|
||||||
|
CONFIG_SENSORS_CRPS=m
|
||||||
CONFIG_SENSORS_DELTA_AHE50DC_FAN=m
|
CONFIG_SENSORS_DELTA_AHE50DC_FAN=m
|
||||||
CONFIG_SENSORS_FSP_3Y=m
|
CONFIG_SENSORS_FSP_3Y=m
|
||||||
CONFIG_SENSORS_IBM_CFFPS=m
|
CONFIG_SENSORS_IBM_CFFPS=m
|
||||||
@@ -1699,6 +1739,8 @@ CONFIG_SENSORS_Q54SJ108A2=m
|
|||||||
CONFIG_SENSORS_STPDDC60=m
|
CONFIG_SENSORS_STPDDC60=m
|
||||||
CONFIG_SENSORS_TDA38640=m
|
CONFIG_SENSORS_TDA38640=m
|
||||||
CONFIG_SENSORS_TDA38640_REGULATOR=y
|
CONFIG_SENSORS_TDA38640_REGULATOR=y
|
||||||
|
CONFIG_SENSORS_TPS25990=m
|
||||||
|
CONFIG_SENSORS_TPS25990_REGULATOR=y
|
||||||
CONFIG_SENSORS_TPS40422=m
|
CONFIG_SENSORS_TPS40422=m
|
||||||
CONFIG_SENSORS_TPS53679=m
|
CONFIG_SENSORS_TPS53679=m
|
||||||
CONFIG_SENSORS_TPS546D24=m
|
CONFIG_SENSORS_TPS546D24=m
|
||||||
@@ -1754,16 +1796,15 @@ CONFIG_I2C_ALI1535=m
|
|||||||
CONFIG_I2C_ALI1563=m
|
CONFIG_I2C_ALI1563=m
|
||||||
CONFIG_I2C_ALI15X3=m
|
CONFIG_I2C_ALI15X3=m
|
||||||
CONFIG_I2C_AMD756=m
|
CONFIG_I2C_AMD756=m
|
||||||
CONFIG_I2C_AMD756_S4882=m
|
|
||||||
CONFIG_I2C_AMD8111=m
|
CONFIG_I2C_AMD8111=m
|
||||||
CONFIG_I2C_AMD_MP2=m
|
CONFIG_I2C_AMD_MP2=m
|
||||||
|
CONFIG_I2C_AMD_ASF=m
|
||||||
CONFIG_I2C_I801=m
|
CONFIG_I2C_I801=m
|
||||||
CONFIG_I2C_ISCH=m
|
CONFIG_I2C_ISCH=m
|
||||||
CONFIG_I2C_ISMT=m
|
CONFIG_I2C_ISMT=m
|
||||||
CONFIG_I2C_PIIX4=m
|
CONFIG_I2C_PIIX4=m
|
||||||
CONFIG_I2C_CHT_WC=m
|
CONFIG_I2C_CHT_WC=m
|
||||||
CONFIG_I2C_NFORCE2=m
|
CONFIG_I2C_NFORCE2=m
|
||||||
CONFIG_I2C_NFORCE2_S4985=m
|
|
||||||
CONFIG_I2C_NVIDIA_GPU=m
|
CONFIG_I2C_NVIDIA_GPU=m
|
||||||
CONFIG_I2C_SIS5595=m
|
CONFIG_I2C_SIS5595=m
|
||||||
CONFIG_I2C_SIS630=m
|
CONFIG_I2C_SIS630=m
|
||||||
@@ -1773,6 +1814,7 @@ CONFIG_I2C_VIAPRO=m
|
|||||||
CONFIG_I2C_ZHAOXIN=m
|
CONFIG_I2C_ZHAOXIN=m
|
||||||
CONFIG_I2C_SCMI=m
|
CONFIG_I2C_SCMI=m
|
||||||
CONFIG_I2C_CBUS_GPIO=m
|
CONFIG_I2C_CBUS_GPIO=m
|
||||||
|
CONFIG_I2C_CGBC=m
|
||||||
CONFIG_I2C_DESIGNWARE_CORE=y
|
CONFIG_I2C_DESIGNWARE_CORE=y
|
||||||
CONFIG_I2C_DESIGNWARE_SLAVE=y
|
CONFIG_I2C_DESIGNWARE_SLAVE=y
|
||||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||||
@@ -2010,6 +2052,7 @@ CONFIG_INPUT_SOC_BUTTON_ARRAY=m
|
|||||||
CONFIG_INPUT_DRV260X_HAPTICS=m
|
CONFIG_INPUT_DRV260X_HAPTICS=m
|
||||||
CONFIG_INPUT_DRV2665_HAPTICS=m
|
CONFIG_INPUT_DRV2665_HAPTICS=m
|
||||||
CONFIG_INPUT_DRV2667_HAPTICS=m
|
CONFIG_INPUT_DRV2667_HAPTICS=m
|
||||||
|
CONFIG_INPUT_QNAP_MCU=m
|
||||||
CONFIG_INPUT_RAVE_SP_PWRBUTTON=m
|
CONFIG_INPUT_RAVE_SP_PWRBUTTON=m
|
||||||
CONFIG_INPUT_RT5120_PWRKEY=m
|
CONFIG_INPUT_RT5120_PWRKEY=m
|
||||||
CONFIG_INPUT_STPMIC1_ONKEY=m
|
CONFIG_INPUT_STPMIC1_ONKEY=m
|
||||||
@@ -2208,6 +2251,7 @@ CONFIG_IOMMUFD=m
|
|||||||
## file: drivers/irqchip/Kconfig
|
## file: drivers/irqchip/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_AL_FIC is not set
|
# CONFIG_AL_FIC is not set
|
||||||
|
CONFIG_LAN966X_OIC=m
|
||||||
# CONFIG_XILINX_INTC is not set
|
# CONFIG_XILINX_INTC is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2273,10 +2317,12 @@ CONFIG_LEDS_LP5569=m
|
|||||||
CONFIG_LEDS_LP8501=m
|
CONFIG_LEDS_LP8501=m
|
||||||
CONFIG_LEDS_LP8788=m
|
CONFIG_LEDS_LP8788=m
|
||||||
CONFIG_LEDS_LP8860=m
|
CONFIG_LEDS_LP8860=m
|
||||||
|
CONFIG_LEDS_LP8864=m
|
||||||
CONFIG_LEDS_PCA955X=m
|
CONFIG_LEDS_PCA955X=m
|
||||||
CONFIG_LEDS_PCA955X_GPIO=y
|
CONFIG_LEDS_PCA955X_GPIO=y
|
||||||
CONFIG_LEDS_PCA963X=m
|
CONFIG_LEDS_PCA963X=m
|
||||||
CONFIG_LEDS_PCA995X=m
|
CONFIG_LEDS_PCA995X=m
|
||||||
|
CONFIG_LEDS_QNAP_MCU=m
|
||||||
CONFIG_LEDS_WM831X_STATUS=m
|
CONFIG_LEDS_WM831X_STATUS=m
|
||||||
CONFIG_LEDS_WM8350=m
|
CONFIG_LEDS_WM8350=m
|
||||||
CONFIG_LEDS_DA903X=m
|
CONFIG_LEDS_DA903X=m
|
||||||
@@ -2299,6 +2345,7 @@ CONFIG_LEDS_LM355x=m
|
|||||||
CONFIG_LEDS_MENF21BMC=m
|
CONFIG_LEDS_MENF21BMC=m
|
||||||
CONFIG_LEDS_IS31FL319X=m
|
CONFIG_LEDS_IS31FL319X=m
|
||||||
CONFIG_LEDS_IS31FL32XX=m
|
CONFIG_LEDS_IS31FL32XX=m
|
||||||
|
CONFIG_LEDS_UPBOARD=m
|
||||||
CONFIG_LEDS_BLINKM=m
|
CONFIG_LEDS_BLINKM=m
|
||||||
CONFIG_LEDS_BLINKM_MULTICOLOR=y
|
CONFIG_LEDS_BLINKM_MULTICOLOR=y
|
||||||
CONFIG_LEDS_MLXCPLD=m
|
CONFIG_LEDS_MLXCPLD=m
|
||||||
@@ -2309,6 +2356,7 @@ CONFIG_LEDS_SPI_BYTE=m
|
|||||||
CONFIG_LEDS_TI_LMU_COMMON=m
|
CONFIG_LEDS_TI_LMU_COMMON=m
|
||||||
CONFIG_LEDS_LM3697=m
|
CONFIG_LEDS_LM3697=m
|
||||||
CONFIG_LEDS_LM36274=m
|
CONFIG_LEDS_LM36274=m
|
||||||
|
CONFIG_LEDS_ST1202=m
|
||||||
CONFIG_LEDS_TPS6105X=m
|
CONFIG_LEDS_TPS6105X=m
|
||||||
CONFIG_LEDS_STEAMDECK=m
|
CONFIG_LEDS_STEAMDECK=m
|
||||||
|
|
||||||
@@ -2426,6 +2474,7 @@ CONFIG_MEDIA_CONTROLLER=y
|
|||||||
##
|
##
|
||||||
## file: drivers/media/cec/Kconfig
|
## file: drivers/media/cec/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_CEC_PIN_ERROR_INJ is not set
|
||||||
CONFIG_MEDIA_CEC_SUPPORT=y
|
CONFIG_MEDIA_CEC_SUPPORT=y
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2436,6 +2485,7 @@ CONFIG_CEC_CH7322=m
|
|||||||
##
|
##
|
||||||
## file: drivers/media/cec/platform/Kconfig
|
## file: drivers/media/cec/platform/Kconfig
|
||||||
##
|
##
|
||||||
|
CONFIG_CEC_GPIO=m
|
||||||
CONFIG_CEC_SECO=m
|
CONFIG_CEC_SECO=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2606,6 +2656,11 @@ CONFIG_VIDEO_MUX=m
|
|||||||
##
|
##
|
||||||
# CONFIG_VIDEO_CAFE_CCIC is not set
|
# CONFIG_VIDEO_CAFE_CCIC is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/media/platform/raspberrypi/rp1-cfe/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_VIDEO_RP1_CFE=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/media/platform/xilinx/Kconfig
|
## file: drivers/media/platform/xilinx/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2765,6 +2820,7 @@ CONFIG_MFD_ATMEL_HLCDC=m
|
|||||||
CONFIG_MFD_BCM590XX=m
|
CONFIG_MFD_BCM590XX=m
|
||||||
CONFIG_MFD_BD9571MWV=m
|
CONFIG_MFD_BD9571MWV=m
|
||||||
CONFIG_MFD_AXP20X_I2C=m
|
CONFIG_MFD_AXP20X_I2C=m
|
||||||
|
CONFIG_MFD_CGBC=m
|
||||||
CONFIG_MFD_CS42L43_I2C=m
|
CONFIG_MFD_CS42L43_I2C=m
|
||||||
CONFIG_MFD_CS42L43_SDW=m
|
CONFIG_MFD_CS42L43_SDW=m
|
||||||
CONFIG_MFD_MADERA=m
|
CONFIG_MFD_MADERA=m
|
||||||
@@ -2903,8 +2959,10 @@ CONFIG_MFD_CS40L50_I2C=m
|
|||||||
CONFIG_MFD_CS40L50_SPI=m
|
CONFIG_MFD_CS40L50_SPI=m
|
||||||
CONFIG_RAVE_SP_CORE=m
|
CONFIG_RAVE_SP_CORE=m
|
||||||
CONFIG_MFD_INTEL_M10_BMC_SPI=m
|
CONFIG_MFD_INTEL_M10_BMC_SPI=m
|
||||||
|
CONFIG_MFD_QNAP_MCU=m
|
||||||
CONFIG_MFD_RSMU_I2C=m
|
CONFIG_MFD_RSMU_I2C=m
|
||||||
CONFIG_MFD_RSMU_SPI=m
|
CONFIG_MFD_RSMU_SPI=m
|
||||||
|
CONFIG_MFD_UPBOARD_FPGA=m
|
||||||
CONFIG_MFD_STEAMDECK=m
|
CONFIG_MFD_STEAMDECK=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2942,6 +3000,7 @@ CONFIG_NTSYNC=m
|
|||||||
# CONFIG_VCPU_STALL_DETECTOR is not set
|
# CONFIG_VCPU_STALL_DETECTOR is not set
|
||||||
CONFIG_TPS6594_ESM=m
|
CONFIG_TPS6594_ESM=m
|
||||||
CONFIG_TPS6594_PFSM=m
|
CONFIG_TPS6594_PFSM=m
|
||||||
|
CONFIG_MCHP_LAN966X_PCI=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/misc/altera-stapl/Kconfig
|
## file: drivers/misc/altera-stapl/Kconfig
|
||||||
@@ -2979,7 +3038,7 @@ CONFIG_CB710_CORE=m
|
|||||||
CONFIG_EEPROM_AT24=m
|
CONFIG_EEPROM_AT24=m
|
||||||
CONFIG_EEPROM_AT25=m
|
CONFIG_EEPROM_AT25=m
|
||||||
CONFIG_EEPROM_MAX6875=m
|
CONFIG_EEPROM_MAX6875=m
|
||||||
CONFIG_EEPROM_93CX6=m
|
CONFIG_EEPROM_93CX6=y
|
||||||
CONFIG_EEPROM_93XX46=m
|
CONFIG_EEPROM_93XX46=m
|
||||||
CONFIG_EEPROM_IDT_89HPESX=m
|
CONFIG_EEPROM_IDT_89HPESX=m
|
||||||
CONFIG_EEPROM_EE1004=m
|
CONFIG_EEPROM_EE1004=m
|
||||||
@@ -2988,6 +3047,7 @@ CONFIG_EEPROM_EE1004=m
|
|||||||
## file: drivers/misc/keba/Kconfig
|
## file: drivers/misc/keba/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_KEBA_CP500=m
|
CONFIG_KEBA_CP500=m
|
||||||
|
CONFIG_KEBA_LAN9252=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/misc/lis3lv02d/Kconfig
|
## file: drivers/misc/lis3lv02d/Kconfig
|
||||||
@@ -3024,11 +3084,6 @@ CONFIG_INTEL_MEI_HDCP=m
|
|||||||
##
|
##
|
||||||
CONFIG_INTEL_MEI_PXP=m
|
CONFIG_INTEL_MEI_PXP=m
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/misc/ti-st/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_TI_ST=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/mmc/Kconfig
|
## file: drivers/mmc/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3051,6 +3106,7 @@ CONFIG_MMC_CRYPTO=y
|
|||||||
##
|
##
|
||||||
# CONFIG_MMC_DEBUG is not set
|
# CONFIG_MMC_DEBUG is not set
|
||||||
CONFIG_MMC_SDHCI=m
|
CONFIG_MMC_SDHCI=m
|
||||||
|
CONFIG_MMC_SDHCI_UHS2=m
|
||||||
CONFIG_MMC_SDHCI_PCI=m
|
CONFIG_MMC_SDHCI_PCI=m
|
||||||
CONFIG_MMC_RICOH_MMC=y
|
CONFIG_MMC_RICOH_MMC=y
|
||||||
CONFIG_MMC_SDHCI_ACPI=m
|
CONFIG_MMC_SDHCI_ACPI=m
|
||||||
@@ -3573,8 +3629,6 @@ CONFIG_ULI526X=m
|
|||||||
##
|
##
|
||||||
CONFIG_NET_VENDOR_DLINK=y
|
CONFIG_NET_VENDOR_DLINK=y
|
||||||
CONFIG_DL2K=m
|
CONFIG_DL2K=m
|
||||||
CONFIG_SUNDANCE=m
|
|
||||||
# CONFIG_SUNDANCE_MMIO is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ethernet/emulex/benet/Kconfig
|
## file: drivers/net/ethernet/emulex/benet/Kconfig
|
||||||
@@ -3604,6 +3658,12 @@ CONFIG_NET_VENDOR_FUNGIBLE=y
|
|||||||
##
|
##
|
||||||
CONFIG_FUN_ETH=m
|
CONFIG_FUN_ETH=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/ethernet/hisilicon/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_NET_VENDOR_HISILICON=y
|
||||||
|
CONFIG_HIBMCGE=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ethernet/huawei/Kconfig
|
## file: drivers/net/ethernet/huawei/Kconfig
|
||||||
##
|
##
|
||||||
@@ -4095,7 +4155,6 @@ CONFIG_MARVELL_10G_PHY=m
|
|||||||
CONFIG_MARVELL_88Q2XXX_PHY=m
|
CONFIG_MARVELL_88Q2XXX_PHY=m
|
||||||
CONFIG_MARVELL_88X2222_PHY=m
|
CONFIG_MARVELL_88X2222_PHY=m
|
||||||
CONFIG_MAXLINEAR_GPHY=m
|
CONFIG_MAXLINEAR_GPHY=m
|
||||||
CONFIG_MEDIATEK_GE_PHY=m
|
|
||||||
CONFIG_MICREL_PHY=m
|
CONFIG_MICREL_PHY=m
|
||||||
CONFIG_MICROCHIP_T1S_PHY=m
|
CONFIG_MICROCHIP_T1S_PHY=m
|
||||||
CONFIG_MICROCHIP_PHY=m
|
CONFIG_MICROCHIP_PHY=m
|
||||||
@@ -4108,7 +4167,6 @@ CONFIG_NXP_C45_TJA11XX_PHY=m
|
|||||||
CONFIG_NXP_TJA11XX_PHY=m
|
CONFIG_NXP_TJA11XX_PHY=m
|
||||||
CONFIG_NCN26000_PHY=m
|
CONFIG_NCN26000_PHY=m
|
||||||
CONFIG_QSEMI_PHY=m
|
CONFIG_QSEMI_PHY=m
|
||||||
CONFIG_REALTEK_PHY=m
|
|
||||||
CONFIG_RENESAS_PHY=m
|
CONFIG_RENESAS_PHY=m
|
||||||
CONFIG_ROCKCHIP_PHY=m
|
CONFIG_ROCKCHIP_PHY=m
|
||||||
CONFIG_SMSC_PHY=m
|
CONFIG_SMSC_PHY=m
|
||||||
@@ -4130,6 +4188,11 @@ CONFIG_XILINX_GMII2RGMII=m
|
|||||||
##
|
##
|
||||||
CONFIG_AQUANTIA_PHY=m
|
CONFIG_AQUANTIA_PHY=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/phy/mediatek/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_MEDIATEK_GE_PHY=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/phy/qcom/Kconfig
|
## file: drivers/net/phy/qcom/Kconfig
|
||||||
##
|
##
|
||||||
@@ -4138,6 +4201,11 @@ CONFIG_QCA83XX_PHY=m
|
|||||||
CONFIG_QCA808X_PHY=m
|
CONFIG_QCA808X_PHY=m
|
||||||
CONFIG_QCA807X_PHY=m
|
CONFIG_QCA807X_PHY=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/phy/realtek/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_REALTEK_PHY=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/plip/Kconfig
|
## file: drivers/net/plip/Kconfig
|
||||||
##
|
##
|
||||||
@@ -4308,6 +4376,7 @@ CONFIG_ATH11K_DEBUG=y
|
|||||||
CONFIG_ATH12K=m
|
CONFIG_ATH12K=m
|
||||||
CONFIG_ATH12K_DEBUG=y
|
CONFIG_ATH12K_DEBUG=y
|
||||||
# CONFIG_ATH12K_TRACING is not set
|
# CONFIG_ATH12K_TRACING is not set
|
||||||
|
# CONFIG_ATH12K_COREDUMP is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/wireless/ath/ath5k/Kconfig
|
## file: drivers/net/wireless/ath/ath5k/Kconfig
|
||||||
@@ -4667,6 +4736,8 @@ CONFIG_RTW88_8723DU=m
|
|||||||
CONFIG_RTW88_8821CE=m
|
CONFIG_RTW88_8821CE=m
|
||||||
CONFIG_RTW88_8821CS=m
|
CONFIG_RTW88_8821CS=m
|
||||||
CONFIG_RTW88_8821CU=m
|
CONFIG_RTW88_8821CU=m
|
||||||
|
CONFIG_RTW88_8821AU=m
|
||||||
|
CONFIG_RTW88_8812AU=m
|
||||||
CONFIG_RTW88_DEBUG=y
|
CONFIG_RTW88_DEBUG=y
|
||||||
CONFIG_RTW88_DEBUGFS=y
|
CONFIG_RTW88_DEBUGFS=y
|
||||||
|
|
||||||
@@ -4928,7 +4999,7 @@ CONFIG_PARPORT_1284=y
|
|||||||
##
|
##
|
||||||
## file: drivers/pci/Kconfig
|
## file: drivers/pci/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_PCI_P2PDMA=y
|
CONFIG_PCIE_TPH=y
|
||||||
# CONFIG_PCI_DYNAMIC_OF_NODES is not set
|
# CONFIG_PCI_DYNAMIC_OF_NODES is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -4963,6 +5034,7 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m
|
|||||||
CONFIG_HOTPLUG_PCI_CPCI=y
|
CONFIG_HOTPLUG_PCI_CPCI=y
|
||||||
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
|
CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
|
||||||
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
|
CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
|
||||||
|
CONFIG_HOTPLUG_PCI_OCTEONEP=y
|
||||||
CONFIG_HOTPLUG_PCI_SHPC=y
|
CONFIG_HOTPLUG_PCI_SHPC=y
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -4997,6 +5069,7 @@ CONFIG_CXL_PMU=m
|
|||||||
CONFIG_GENERIC_PHY=y
|
CONFIG_GENERIC_PHY=y
|
||||||
CONFIG_USB_LGM_PHY=m
|
CONFIG_USB_LGM_PHY=m
|
||||||
CONFIG_PHY_CAN_TRANSCEIVER=m
|
CONFIG_PHY_CAN_TRANSCEIVER=m
|
||||||
|
CONFIG_PHY_NXP_PTN3222=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/phy/broadcom/Kconfig
|
## file: drivers/phy/broadcom/Kconfig
|
||||||
@@ -5195,10 +5268,15 @@ CONFIG_SEL3350_PLATFORM=m
|
|||||||
##
|
##
|
||||||
## file: drivers/platform/x86/amd/Kconfig
|
## file: drivers/platform/x86/amd/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_AMD_HSMP=m
|
|
||||||
CONFIG_AMD_3D_VCACHE=m
|
CONFIG_AMD_3D_VCACHE=m
|
||||||
CONFIG_AMD_WBRF=y
|
CONFIG_AMD_WBRF=y
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/platform/x86/amd/hsmp/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_AMD_HSMP_ACPI=m
|
||||||
|
CONFIG_AMD_HSMP_PLAT=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/platform/x86/amd/pmc/Kconfig
|
## file: drivers/platform/x86/amd/pmc/Kconfig
|
||||||
##
|
##
|
||||||
@@ -5428,6 +5506,7 @@ CONFIG_CHARGER_RT5033=m
|
|||||||
CONFIG_CHARGER_RT9455=m
|
CONFIG_CHARGER_RT9455=m
|
||||||
CONFIG_CHARGER_RT9467=m
|
CONFIG_CHARGER_RT9467=m
|
||||||
CONFIG_CHARGER_RT9471=m
|
CONFIG_CHARGER_RT9471=m
|
||||||
|
CONFIG_FUEL_GAUGE_STC3117=m
|
||||||
CONFIG_CHARGER_UCS1002=m
|
CONFIG_CHARGER_UCS1002=m
|
||||||
CONFIG_CHARGER_BD99954=m
|
CONFIG_CHARGER_BD99954=m
|
||||||
CONFIG_BATTERY_UG3105=m
|
CONFIG_BATTERY_UG3105=m
|
||||||
@@ -5695,6 +5774,7 @@ CONFIG_REGULATOR_QCOM_LABIBB=m
|
|||||||
CONFIG_RESET_CONTROLLER=y
|
CONFIG_RESET_CONTROLLER=y
|
||||||
CONFIG_RESET_GPIO=m
|
CONFIG_RESET_GPIO=m
|
||||||
CONFIG_RESET_INTEL_GW=y
|
CONFIG_RESET_INTEL_GW=y
|
||||||
|
CONFIG_RESET_MCHP_SPARX5=m
|
||||||
CONFIG_RESET_SIMPLE=y
|
CONFIG_RESET_SIMPLE=y
|
||||||
CONFIG_RESET_TI_SYSCON=m
|
CONFIG_RESET_TI_SYSCON=m
|
||||||
CONFIG_RESET_TI_TPS380X=m
|
CONFIG_RESET_TI_TPS380X=m
|
||||||
@@ -5710,6 +5790,7 @@ CONFIG_RPMSG_QCOM_GLINK_RPM=m
|
|||||||
CONFIG_RTC_DRV_TEST=m
|
CONFIG_RTC_DRV_TEST=m
|
||||||
CONFIG_RTC_DRV_88PM860X=m
|
CONFIG_RTC_DRV_88PM860X=m
|
||||||
CONFIG_RTC_DRV_88PM80X=m
|
CONFIG_RTC_DRV_88PM80X=m
|
||||||
|
CONFIG_RTC_DRV_88PM886=m
|
||||||
CONFIG_RTC_DRV_ABB5ZES3=m
|
CONFIG_RTC_DRV_ABB5ZES3=m
|
||||||
CONFIG_RTC_DRV_ABEOZ9=m
|
CONFIG_RTC_DRV_ABEOZ9=m
|
||||||
CONFIG_RTC_DRV_ABX80X=m
|
CONFIG_RTC_DRV_ABX80X=m
|
||||||
@@ -5878,7 +5959,7 @@ CONFIG_SOC_TI=y
|
|||||||
##
|
##
|
||||||
## file: drivers/soundwire/Kconfig
|
## file: drivers/soundwire/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_SOUNDWIRE=y
|
CONFIG_SOUNDWIRE=m
|
||||||
CONFIG_SOUNDWIRE_AMD=m
|
CONFIG_SOUNDWIRE_AMD=m
|
||||||
CONFIG_SOUNDWIRE_INTEL=m
|
CONFIG_SOUNDWIRE_INTEL=m
|
||||||
CONFIG_SOUNDWIRE_QCOM=m
|
CONFIG_SOUNDWIRE_QCOM=m
|
||||||
@@ -5908,6 +5989,7 @@ CONFIG_SPI_FSI=m
|
|||||||
CONFIG_SPI_GPIO=m
|
CONFIG_SPI_GPIO=m
|
||||||
# CONFIG_SPI_INTEL_PCI is not set
|
# CONFIG_SPI_INTEL_PCI is not set
|
||||||
# CONFIG_SPI_INTEL_PLATFORM is not set
|
# CONFIG_SPI_INTEL_PLATFORM is not set
|
||||||
|
CONFIG_SPI_KSPI2=m
|
||||||
# CONFIG_SPI_LM70_LLP is not set
|
# CONFIG_SPI_LM70_LLP is not set
|
||||||
CONFIG_SPI_FSL_SPI=m
|
CONFIG_SPI_FSL_SPI=m
|
||||||
CONFIG_SPI_LJCA=m
|
CONFIG_SPI_LJCA=m
|
||||||
@@ -5959,21 +6041,20 @@ CONFIG_STAGING=y
|
|||||||
CONFIG_XIL_AXIS_FIFO=m
|
CONFIG_XIL_AXIS_FIFO=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/fieldbus/Kconfig
|
## file: drivers/staging/gpib/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_FIELDBUS_DEV=m
|
CONFIG_GPIB=m
|
||||||
|
CONFIG_GPIB_COMMON=m
|
||||||
##
|
CONFIG_GPIB_AGILENT_82350B=m
|
||||||
## file: drivers/staging/fieldbus/anybuss/Kconfig
|
CONFIG_GPIB_AGILENT_82357A=m
|
||||||
##
|
CONFIG_GPIB_CEC_PCI=m
|
||||||
CONFIG_HMS_ANYBUSS_BUS=m
|
CONFIG_GPIB_NI_PCI_ISA=m
|
||||||
CONFIG_ARCX_ANYBUS_CONTROLLER=m
|
CONFIG_GPIB_CB7210=m
|
||||||
CONFIG_HMS_PROFINET=m
|
CONFIG_GPIB_NI_USB=m
|
||||||
|
CONFIG_GPIB_FLUKE=m
|
||||||
##
|
CONFIG_GPIB_FMH=m
|
||||||
## file: drivers/staging/gdm724x/Kconfig
|
CONFIG_GPIB_INES=m
|
||||||
##
|
CONFIG_GPIB_LPVO=m
|
||||||
CONFIG_LTE_GDM724X=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/greybus/Kconfig
|
## file: drivers/staging/greybus/Kconfig
|
||||||
@@ -6028,34 +6109,11 @@ CONFIG_MOST_NET=m
|
|||||||
##
|
##
|
||||||
CONFIG_MOST_VIDEO=m
|
CONFIG_MOST_VIDEO=m
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/rtl8192e/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_RTLLIB=m
|
|
||||||
CONFIG_RTLLIB_CRYPTO_CCMP=m
|
|
||||||
CONFIG_RTLLIB_CRYPTO_TKIP=m
|
|
||||||
CONFIG_RTLLIB_CRYPTO_WEP=m
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/rtl8192e/rtl8192e/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_RTL8192E=m
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/rtl8712/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_R8712U=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/rtl8723bs/Kconfig
|
## file: drivers/staging/rtl8723bs/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_RTL8723BS=m
|
CONFIG_RTL8723BS=m
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/rts5208/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_RTS5208=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/sm750fb/Kconfig
|
## file: drivers/staging/sm750fb/Kconfig
|
||||||
##
|
##
|
||||||
@@ -6069,16 +6127,6 @@ CONFIG_VME_TSI148=m
|
|||||||
CONFIG_VME_FAKE=m
|
CONFIG_VME_FAKE=m
|
||||||
CONFIG_VME_USER=m
|
CONFIG_VME_USER=m
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/vt6655/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_VT6655=m
|
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/vt6656/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_VT6656=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/target/iscsi/Kconfig
|
## file: drivers/target/iscsi/Kconfig
|
||||||
##
|
##
|
||||||
@@ -6114,6 +6162,7 @@ CONFIG_CPU_THERMAL=y
|
|||||||
CONFIG_CPU_FREQ_THERMAL=y
|
CONFIG_CPU_FREQ_THERMAL=y
|
||||||
CONFIG_CPU_IDLE_THERMAL=y
|
CONFIG_CPU_IDLE_THERMAL=y
|
||||||
CONFIG_DEVFREQ_THERMAL=y
|
CONFIG_DEVFREQ_THERMAL=y
|
||||||
|
CONFIG_PCIE_THERMAL=y
|
||||||
CONFIG_THERMAL_MMIO=m
|
CONFIG_THERMAL_MMIO=m
|
||||||
CONFIG_MAX77620_THERMAL=m
|
CONFIG_MAX77620_THERMAL=m
|
||||||
CONFIG_DA9062_THERMAL=m
|
CONFIG_DA9062_THERMAL=m
|
||||||
@@ -6619,6 +6668,7 @@ CONFIG_TYPEC_WUSB3801=m
|
|||||||
##
|
##
|
||||||
CONFIG_TYPEC_DP_ALTMODE=m
|
CONFIG_TYPEC_DP_ALTMODE=m
|
||||||
CONFIG_TYPEC_NVIDIA_ALTMODE=m
|
CONFIG_TYPEC_NVIDIA_ALTMODE=m
|
||||||
|
CONFIG_TYPEC_TBT_ALTMODE=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/usb/typec/mux/Kconfig
|
## file: drivers/usb/typec/mux/Kconfig
|
||||||
@@ -6630,6 +6680,7 @@ CONFIG_TYPEC_MUX_INTEL_PMC=m
|
|||||||
CONFIG_TYPEC_MUX_IT5205=m
|
CONFIG_TYPEC_MUX_IT5205=m
|
||||||
CONFIG_TYPEC_MUX_NB7VPQ904M=m
|
CONFIG_TYPEC_MUX_NB7VPQ904M=m
|
||||||
CONFIG_TYPEC_MUX_PTN36502=m
|
CONFIG_TYPEC_MUX_PTN36502=m
|
||||||
|
CONFIG_TYPEC_MUX_TUSB1046=m
|
||||||
CONFIG_TYPEC_MUX_WCD939X_USBSS=m
|
CONFIG_TYPEC_MUX_WCD939X_USBSS=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -6858,6 +6909,7 @@ CONFIG_ADVANTECH_WDT=m
|
|||||||
CONFIG_ADVANTECH_EC_WDT=m
|
CONFIG_ADVANTECH_EC_WDT=m
|
||||||
CONFIG_ALIM1535_WDT=m
|
CONFIG_ALIM1535_WDT=m
|
||||||
CONFIG_ALIM7101_WDT=m
|
CONFIG_ALIM7101_WDT=m
|
||||||
|
CONFIG_CGBC_WDT=m
|
||||||
CONFIG_EBC_C384_WDT=m
|
CONFIG_EBC_C384_WDT=m
|
||||||
CONFIG_EXAR_WDT=m
|
CONFIG_EXAR_WDT=m
|
||||||
CONFIG_F71808E_WDT=m
|
CONFIG_F71808E_WDT=m
|
||||||
@@ -6877,7 +6929,6 @@ CONFIG_SC1200_WDT=m
|
|||||||
CONFIG_PC87413_WDT=m
|
CONFIG_PC87413_WDT=m
|
||||||
CONFIG_NV_TCO=m
|
CONFIG_NV_TCO=m
|
||||||
CONFIG_60XX_WDT=m
|
CONFIG_60XX_WDT=m
|
||||||
CONFIG_CPU5_WDT=m
|
|
||||||
CONFIG_SMSC_SCH311X_WDT=m
|
CONFIG_SMSC_SCH311X_WDT=m
|
||||||
CONFIG_SMSC37B787_WDT=m
|
CONFIG_SMSC37B787_WDT=m
|
||||||
CONFIG_TQMX86_WDT=m
|
CONFIG_TQMX86_WDT=m
|
||||||
@@ -6938,6 +6989,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
|
|||||||
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
|
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
|
||||||
# CONFIG_BTRFS_DEBUG is not set
|
# CONFIG_BTRFS_DEBUG is not set
|
||||||
# CONFIG_BTRFS_ASSERT is not set
|
# CONFIG_BTRFS_ASSERT is not set
|
||||||
|
# CONFIG_BTRFS_EXPERIMENTAL is not set
|
||||||
# CONFIG_BTRFS_FS_REF_VERIFY is not set
|
# CONFIG_BTRFS_FS_REF_VERIFY is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -7150,16 +7202,6 @@ CONFIG_QNX4FS_FS=m
|
|||||||
CONFIG_QNX6FS_FS=m
|
CONFIG_QNX6FS_FS=m
|
||||||
# CONFIG_QNX6FS_DEBUG is not set
|
# CONFIG_QNX6FS_DEBUG is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/reiserfs/Kconfig
|
|
||||||
##
|
|
||||||
CONFIG_REISERFS_FS=m
|
|
||||||
# CONFIG_REISERFS_CHECK is not set
|
|
||||||
# CONFIG_REISERFS_PROC_INFO is not set
|
|
||||||
CONFIG_REISERFS_FS_XATTR=y
|
|
||||||
CONFIG_REISERFS_FS_POSIX_ACL=y
|
|
||||||
CONFIG_REISERFS_FS_SECURITY=y
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/romfs/Kconfig
|
## file: fs/romfs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -7244,7 +7286,7 @@ CONFIG_UCLAMP_TASK_GROUP=y
|
|||||||
##
|
##
|
||||||
## choice: Preemption Model
|
## choice: Preemption Model
|
||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
CONFIG_PREEMPT_VOLUNTARY=y
|
CONFIG_PREEMPT_LAZY=y
|
||||||
## end choice
|
## end choice
|
||||||
CONFIG_SCHED_CORE=y
|
CONFIG_SCHED_CORE=y
|
||||||
|
|
||||||
@@ -7280,6 +7322,7 @@ CONFIG_NO_HZ=y
|
|||||||
##
|
##
|
||||||
CONFIG_BOOTTIME_TRACING=y
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
CONFIG_FUNCTION_GRAPH_RETVAL=y
|
CONFIG_FUNCTION_GRAPH_RETVAL=y
|
||||||
|
# CONFIG_PREEMPT_TRACER is not set
|
||||||
CONFIG_SCHED_TRACER=y
|
CONFIG_SCHED_TRACER=y
|
||||||
CONFIG_HWLAT_TRACER=y
|
CONFIG_HWLAT_TRACER=y
|
||||||
CONFIG_OSNOISE_TRACER=y
|
CONFIG_OSNOISE_TRACER=y
|
||||||
@@ -7308,6 +7351,7 @@ CONFIG_DEBUG_MEMORY_INIT=y
|
|||||||
CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
|
CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
|
||||||
CONFIG_PANIC_TIMEOUT=120
|
CONFIG_PANIC_TIMEOUT=120
|
||||||
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
|
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
|
||||||
|
# CONFIG_DEBUG_PREEMPT is not set
|
||||||
CONFIG_NMI_CHECK_CPU=y
|
CONFIG_NMI_CHECK_CPU=y
|
||||||
CONFIG_DEBUG_IRQFLAGS=y
|
CONFIG_DEBUG_IRQFLAGS=y
|
||||||
CONFIG_DEBUG_LIST=y
|
CONFIG_DEBUG_LIST=y
|
||||||
@@ -7354,6 +7398,7 @@ CONFIG_TEST_FIRMWARE=m
|
|||||||
CONFIG_TEST_STATIC_KEYS=m
|
CONFIG_TEST_STATIC_KEYS=m
|
||||||
# CONFIG_TEST_DYNAMIC_DEBUG is not set
|
# CONFIG_TEST_DYNAMIC_DEBUG is not set
|
||||||
# CONFIG_TEST_KMOD is not set
|
# CONFIG_TEST_KMOD is not set
|
||||||
|
# CONFIG_TEST_KALLSYMS is not set
|
||||||
# CONFIG_TEST_MEMCAT_P is not set
|
# CONFIG_TEST_MEMCAT_P is not set
|
||||||
# CONFIG_TEST_OBJAGG is not set
|
# CONFIG_TEST_OBJAGG is not set
|
||||||
# CONFIG_TEST_MEMINIT is not set
|
# CONFIG_TEST_MEMINIT is not set
|
||||||
@@ -7395,7 +7440,6 @@ CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
|
|||||||
## end choice
|
## end choice
|
||||||
CONFIG_ZBUD=y
|
CONFIG_ZBUD=y
|
||||||
CONFIG_Z3FOLD_DEPRECATED=m
|
CONFIG_Z3FOLD_DEPRECATED=m
|
||||||
# CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE is not set
|
|
||||||
CONFIG_HWPOISON_INJECT=m
|
CONFIG_HWPOISON_INJECT=m
|
||||||
CONFIG_NUMA_EMU=y
|
CONFIG_NUMA_EMU=y
|
||||||
|
|
||||||
@@ -7412,7 +7456,6 @@ CONFIG_DAMON=y
|
|||||||
CONFIG_DAMON_VADDR=y
|
CONFIG_DAMON_VADDR=y
|
||||||
CONFIG_DAMON_PADDR=y
|
CONFIG_DAMON_PADDR=y
|
||||||
CONFIG_DAMON_SYSFS=y
|
CONFIG_DAMON_SYSFS=y
|
||||||
# CONFIG_DAMON_DBGFS_DEPRECATED is not set
|
|
||||||
CONFIG_DAMON_RECLAIM=y
|
CONFIG_DAMON_RECLAIM=y
|
||||||
CONFIG_DAMON_LRU_SORT=y
|
CONFIG_DAMON_LRU_SORT=y
|
||||||
|
|
||||||
@@ -7450,7 +7493,7 @@ CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
|
|||||||
CONFIG_NET_9P=m
|
CONFIG_NET_9P=m
|
||||||
CONFIG_NET_9P_FD=m
|
CONFIG_NET_9P_FD=m
|
||||||
CONFIG_NET_9P_VIRTIO=m
|
CONFIG_NET_9P_VIRTIO=m
|
||||||
CONFIG_NET_9P_USBG=y
|
CONFIG_NET_9P_USBG=m
|
||||||
# CONFIG_NET_9P_DEBUG is not set
|
# CONFIG_NET_9P_DEBUG is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -7771,7 +7814,6 @@ CONFIG_CFG80211_DEFAULT_PS=y
|
|||||||
# CONFIG_CFG80211_DEBUGFS is not set
|
# CONFIG_CFG80211_DEBUGFS is not set
|
||||||
CONFIG_CFG80211_CRDA_SUPPORT=y
|
CONFIG_CFG80211_CRDA_SUPPORT=y
|
||||||
CONFIG_CFG80211_WEXT=y
|
CONFIG_CFG80211_WEXT=y
|
||||||
# CONFIG_LIB80211_DEBUG is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/x25/Kconfig
|
## file: net/x25/Kconfig
|
||||||
@@ -7970,6 +8012,7 @@ CONFIG_SND_HDA_SCODEC_CS35L41_SPI=m
|
|||||||
CONFIG_SND_HDA_SCODEC_CS35L56_I2C=m
|
CONFIG_SND_HDA_SCODEC_CS35L56_I2C=m
|
||||||
CONFIG_SND_HDA_SCODEC_CS35L56_SPI=m
|
CONFIG_SND_HDA_SCODEC_CS35L56_SPI=m
|
||||||
CONFIG_SND_HDA_SCODEC_TAS2781_I2C=m
|
CONFIG_SND_HDA_SCODEC_TAS2781_I2C=m
|
||||||
|
CONFIG_SND_HDA_SCODEC_TAS2781_SPI=m
|
||||||
CONFIG_SND_HDA_CODEC_REALTEK=m
|
CONFIG_SND_HDA_CODEC_REALTEK=m
|
||||||
CONFIG_SND_HDA_CODEC_ANALOG=m
|
CONFIG_SND_HDA_CODEC_ANALOG=m
|
||||||
CONFIG_SND_HDA_CODEC_SIGMATEL=m
|
CONFIG_SND_HDA_CODEC_SIGMATEL=m
|
||||||
@@ -8034,6 +8077,7 @@ CONFIG_SND_AMD_ASOC_ACP70=m
|
|||||||
CONFIG_SND_SOC_AMD_LEGACY_MACH=m
|
CONFIG_SND_SOC_AMD_LEGACY_MACH=m
|
||||||
CONFIG_SND_SOC_AMD_SOF_MACH=m
|
CONFIG_SND_SOC_AMD_SOF_MACH=m
|
||||||
CONFIG_SND_SOC_AMD_SOF_SDW_MACH=m
|
CONFIG_SND_SOC_AMD_SOF_SDW_MACH=m
|
||||||
|
CONFIG_SND_SOC_AMD_LEGACY_SDW_MACH=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: sound/soc/atmel/Kconfig
|
## file: sound/soc/atmel/Kconfig
|
||||||
@@ -8052,6 +8096,7 @@ CONFIG_SND_BCM63XX_I2S_WHISTLER=m
|
|||||||
CONFIG_SND_SOC_AC97_CODEC=m
|
CONFIG_SND_SOC_AC97_CODEC=m
|
||||||
CONFIG_SND_SOC_ADAU1372_I2C=m
|
CONFIG_SND_SOC_ADAU1372_I2C=m
|
||||||
CONFIG_SND_SOC_ADAU1372_SPI=m
|
CONFIG_SND_SOC_ADAU1372_SPI=m
|
||||||
|
CONFIG_SND_SOC_ADAU1373=m
|
||||||
CONFIG_SND_SOC_ADAU1701=m
|
CONFIG_SND_SOC_ADAU1701=m
|
||||||
CONFIG_SND_SOC_ADAU1761_I2C=m
|
CONFIG_SND_SOC_ADAU1761_I2C=m
|
||||||
CONFIG_SND_SOC_ADAU1761_SPI=m
|
CONFIG_SND_SOC_ADAU1761_SPI=m
|
||||||
@@ -8072,6 +8117,7 @@ CONFIG_SND_SOC_ALC5623=m
|
|||||||
CONFIG_SND_SOC_AW8738=m
|
CONFIG_SND_SOC_AW8738=m
|
||||||
CONFIG_SND_SOC_AW88395=m
|
CONFIG_SND_SOC_AW88395=m
|
||||||
CONFIG_SND_SOC_AW88261=m
|
CONFIG_SND_SOC_AW88261=m
|
||||||
|
CONFIG_SND_SOC_AW88081=m
|
||||||
CONFIG_SND_SOC_AW87390=m
|
CONFIG_SND_SOC_AW87390=m
|
||||||
CONFIG_SND_SOC_AW88399=m
|
CONFIG_SND_SOC_AW88399=m
|
||||||
CONFIG_SND_SOC_BD28623=m
|
CONFIG_SND_SOC_BD28623=m
|
||||||
@@ -8100,6 +8146,7 @@ CONFIG_SND_SOC_CS42L52=m
|
|||||||
CONFIG_SND_SOC_CS42L56=m
|
CONFIG_SND_SOC_CS42L56=m
|
||||||
CONFIG_SND_SOC_CS42L73=m
|
CONFIG_SND_SOC_CS42L73=m
|
||||||
CONFIG_SND_SOC_CS42L83=m
|
CONFIG_SND_SOC_CS42L83=m
|
||||||
|
CONFIG_SND_SOC_CS42L84=m
|
||||||
CONFIG_SND_SOC_CS4234=m
|
CONFIG_SND_SOC_CS4234=m
|
||||||
CONFIG_SND_SOC_CS4265=m
|
CONFIG_SND_SOC_CS4265=m
|
||||||
CONFIG_SND_SOC_CS4270=m
|
CONFIG_SND_SOC_CS4270=m
|
||||||
@@ -8118,6 +8165,7 @@ CONFIG_SND_SOC_ES7134=m
|
|||||||
CONFIG_SND_SOC_ES7241=m
|
CONFIG_SND_SOC_ES7241=m
|
||||||
CONFIG_SND_SOC_ES8311=m
|
CONFIG_SND_SOC_ES8311=m
|
||||||
CONFIG_SND_SOC_ES8316=m
|
CONFIG_SND_SOC_ES8316=m
|
||||||
|
CONFIG_SND_SOC_ES8323=m
|
||||||
CONFIG_SND_SOC_ES8326=m
|
CONFIG_SND_SOC_ES8326=m
|
||||||
CONFIG_SND_SOC_ES8328_I2C=m
|
CONFIG_SND_SOC_ES8328_I2C=m
|
||||||
CONFIG_SND_SOC_ES8328_SPI=m
|
CONFIG_SND_SOC_ES8328_SPI=m
|
||||||
@@ -8174,6 +8222,7 @@ CONFIG_SND_SOC_RT711_SDW=m
|
|||||||
CONFIG_SND_SOC_RT711_SDCA_SDW=m
|
CONFIG_SND_SOC_RT711_SDCA_SDW=m
|
||||||
CONFIG_SND_SOC_RT712_SDCA_SDW=m
|
CONFIG_SND_SOC_RT712_SDCA_SDW=m
|
||||||
CONFIG_SND_SOC_RT712_SDCA_DMIC_SDW=m
|
CONFIG_SND_SOC_RT712_SDCA_DMIC_SDW=m
|
||||||
|
CONFIG_SND_SOC_RT721_SDCA_SDW=m
|
||||||
CONFIG_SND_SOC_RT722_SDCA_SDW=m
|
CONFIG_SND_SOC_RT722_SDCA_SDW=m
|
||||||
CONFIG_SND_SOC_RT715_SDW=m
|
CONFIG_SND_SOC_RT715_SDW=m
|
||||||
CONFIG_SND_SOC_RT715_SDCA_SDW=m
|
CONFIG_SND_SOC_RT715_SDCA_SDW=m
|
||||||
@@ -8184,6 +8233,7 @@ CONFIG_SND_SOC_SGTL5000=m
|
|||||||
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
|
CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
|
||||||
CONFIG_SND_SOC_SIMPLE_MUX=m
|
CONFIG_SND_SOC_SIMPLE_MUX=m
|
||||||
CONFIG_SND_SOC_SMA1303=m
|
CONFIG_SND_SOC_SMA1303=m
|
||||||
|
CONFIG_SND_SOC_SMA1307=m
|
||||||
CONFIG_SND_SOC_SPDIF=m
|
CONFIG_SND_SOC_SPDIF=m
|
||||||
CONFIG_SND_SOC_SRC4XXX_I2C=m
|
CONFIG_SND_SOC_SRC4XXX_I2C=m
|
||||||
CONFIG_SND_SOC_SSM2305=m
|
CONFIG_SND_SOC_SSM2305=m
|
||||||
@@ -8222,6 +8272,7 @@ CONFIG_SND_SOC_TS3A227E=m
|
|||||||
CONFIG_SND_SOC_TSCS42XX=m
|
CONFIG_SND_SOC_TSCS42XX=m
|
||||||
CONFIG_SND_SOC_TSCS454=m
|
CONFIG_SND_SOC_TSCS454=m
|
||||||
CONFIG_SND_SOC_UDA1334=m
|
CONFIG_SND_SOC_UDA1334=m
|
||||||
|
CONFIG_SND_SOC_UDA1342=m
|
||||||
CONFIG_SND_SOC_WCD9335=m
|
CONFIG_SND_SOC_WCD9335=m
|
||||||
CONFIG_SND_SOC_WCD934X=m
|
CONFIG_SND_SOC_WCD934X=m
|
||||||
CONFIG_SND_SOC_WCD937X_SDW=m
|
CONFIG_SND_SOC_WCD937X_SDW=m
|
||||||
@@ -8268,6 +8319,8 @@ CONFIG_SND_SOC_NAU8810=m
|
|||||||
CONFIG_SND_SOC_NAU8821=m
|
CONFIG_SND_SOC_NAU8821=m
|
||||||
CONFIG_SND_SOC_NAU8822=m
|
CONFIG_SND_SOC_NAU8822=m
|
||||||
CONFIG_SND_SOC_NAU8824=m
|
CONFIG_SND_SOC_NAU8824=m
|
||||||
|
CONFIG_SND_SOC_NTP8918=m
|
||||||
|
CONFIG_SND_SOC_NTP8835=m
|
||||||
CONFIG_SND_SOC_TPA6130A2=m
|
CONFIG_SND_SOC_TPA6130A2=m
|
||||||
CONFIG_SND_SOC_LPASS_WSA_MACRO=m
|
CONFIG_SND_SOC_LPASS_WSA_MACRO=m
|
||||||
CONFIG_SND_SOC_LPASS_VA_MACRO=m
|
CONFIG_SND_SOC_LPASS_VA_MACRO=m
|
||||||
@@ -8504,6 +8557,7 @@ CONFIG_ACPI_ADXL=y
|
|||||||
CONFIG_ACPI_NHLT=y
|
CONFIG_ACPI_NHLT=y
|
||||||
CONFIG_ACPI_PLATFORM_PROFILE=m
|
CONFIG_ACPI_PLATFORM_PROFILE=m
|
||||||
CONFIG_AMD_ATL_PRM=y
|
CONFIG_AMD_ATL_PRM=y
|
||||||
|
CONFIG_AMD_HSMP=m
|
||||||
CONFIG_ASN1_ENCODER=m
|
CONFIG_ASN1_ENCODER=m
|
||||||
CONFIG_ASYNC_MEMCPY=m
|
CONFIG_ASYNC_MEMCPY=m
|
||||||
CONFIG_ASYNC_PQ=m
|
CONFIG_ASYNC_PQ=m
|
||||||
@@ -8554,7 +8608,7 @@ CONFIG_CARL9170_WPC=y
|
|||||||
CONFIG_CB710_DEBUG_ASSUMPTIONS=y
|
CONFIG_CB710_DEBUG_ASSUMPTIONS=y
|
||||||
CONFIG_CEC_CORE=m
|
CONFIG_CEC_CORE=m
|
||||||
CONFIG_CEC_NOTIFIER=y
|
CONFIG_CEC_NOTIFIER=y
|
||||||
CONFIG_CFG80211_WEXT_EXPORT=y
|
CONFIG_CEC_PIN=y
|
||||||
CONFIG_CHECK_SIGNATURE=y
|
CONFIG_CHECK_SIGNATURE=y
|
||||||
CONFIG_CHELSIO_LIB=m
|
CONFIG_CHELSIO_LIB=m
|
||||||
CONFIG_CLOSURES=y
|
CONFIG_CLOSURES=y
|
||||||
@@ -8562,7 +8616,6 @@ CONFIG_COMPAT_NETLINK_MESSAGES=y
|
|||||||
CONFIG_CRYPTO_DEV_ATMEL_I2C=m
|
CONFIG_CRYPTO_DEV_ATMEL_I2C=m
|
||||||
CONFIG_CRYPTO_DEV_NITROX=m
|
CONFIG_CRYPTO_DEV_NITROX=m
|
||||||
CONFIG_CRYPTO_DEV_QAT=m
|
CONFIG_CRYPTO_DEV_QAT=m
|
||||||
CONFIG_CRYPTO_ECC=y
|
|
||||||
CONFIG_CRYPTO_LIB_AESCFB=y
|
CONFIG_CRYPTO_LIB_AESCFB=y
|
||||||
CONFIG_CRYPTO_LIB_ARC4=m
|
CONFIG_CRYPTO_LIB_ARC4=m
|
||||||
CONFIG_CXL_PORT=m
|
CONFIG_CXL_PORT=m
|
||||||
@@ -8578,24 +8631,32 @@ CONFIG_DRM_ANALOGIX_DP=m
|
|||||||
CONFIG_DRM_AUX_BRIDGE=m
|
CONFIG_DRM_AUX_BRIDGE=m
|
||||||
CONFIG_DRM_AUX_HPD_BRIDGE=m
|
CONFIG_DRM_AUX_HPD_BRIDGE=m
|
||||||
CONFIG_DRM_BRIDGE=y
|
CONFIG_DRM_BRIDGE=y
|
||||||
|
CONFIG_DRM_BRIDGE_CONNECTOR=y
|
||||||
CONFIG_DRM_BUDDY=m
|
CONFIG_DRM_BUDDY=m
|
||||||
CONFIG_DRM_CLIENT_SELECTION=y
|
CONFIG_DRM_CLIENT=y
|
||||||
|
CONFIG_DRM_CLIENT_DEFAULT="fbdev"
|
||||||
|
CONFIG_DRM_CLIENT_LIB=m
|
||||||
|
CONFIG_DRM_CLIENT_SELECTION=m
|
||||||
CONFIG_DRM_CLIENT_SETUP=y
|
CONFIG_DRM_CLIENT_SETUP=y
|
||||||
CONFIG_DRM_DISPLAY_DP_AUX_BUS=m
|
CONFIG_DRM_DISPLAY_DP_AUX_BUS=m
|
||||||
CONFIG_DRM_DISPLAY_DP_HELPER=y
|
CONFIG_DRM_DISPLAY_DP_HELPER=y
|
||||||
CONFIG_DRM_DISPLAY_DP_TUNNEL=y
|
CONFIG_DRM_DISPLAY_DP_TUNNEL=y
|
||||||
|
CONFIG_DRM_DISPLAY_DSC_HELPER=y
|
||||||
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
|
CONFIG_DRM_DISPLAY_HDCP_HELPER=y
|
||||||
|
CONFIG_DRM_DISPLAY_HDMI_AUDIO_HELPER=y
|
||||||
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
|
CONFIG_DRM_DISPLAY_HDMI_HELPER=y
|
||||||
|
CONFIG_DRM_DISPLAY_HDMI_STATE_HELPER=y
|
||||||
CONFIG_DRM_DISPLAY_HELPER=m
|
CONFIG_DRM_DISPLAY_HELPER=m
|
||||||
CONFIG_DRM_EXEC=m
|
CONFIG_DRM_EXEC=m
|
||||||
CONFIG_DRM_GEM_DMA_HELPER=m
|
CONFIG_DRM_GEM_DMA_HELPER=m
|
||||||
CONFIG_DRM_GEM_SHMEM_HELPER=m
|
CONFIG_DRM_GEM_SHMEM_HELPER=m
|
||||||
CONFIG_DRM_GPUVM=m
|
CONFIG_DRM_GPUVM=m
|
||||||
CONFIG_DRM_I915_GVT=y
|
CONFIG_DRM_I915_GVT=y
|
||||||
CONFIG_DRM_KMS_HELPER=y
|
CONFIG_DRM_KMS_HELPER=m
|
||||||
CONFIG_DRM_MIPI_DBI=m
|
CONFIG_DRM_MIPI_DBI=m
|
||||||
CONFIG_DRM_MIPI_DSI=y
|
CONFIG_DRM_MIPI_DSI=y
|
||||||
CONFIG_DRM_PANEL=y
|
CONFIG_DRM_PANEL=y
|
||||||
|
CONFIG_DRM_PANEL_BACKLIGHT_QUIRKS=m
|
||||||
CONFIG_DRM_PANEL_BRIDGE=y
|
CONFIG_DRM_PANEL_BRIDGE=y
|
||||||
CONFIG_DRM_PRIVACY_SCREEN=y
|
CONFIG_DRM_PRIVACY_SCREEN=y
|
||||||
CONFIG_DRM_SCHED=m
|
CONFIG_DRM_SCHED=m
|
||||||
@@ -8604,7 +8665,7 @@ 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_DTC=y
|
CONFIG_DTC=y
|
||||||
CONFIG_FB_BACKLIGHT=m
|
CONFIG_FB_BACKLIGHT=y
|
||||||
CONFIG_FB_DMAMEM_HELPERS=y
|
CONFIG_FB_DMAMEM_HELPERS=y
|
||||||
CONFIG_FB_DMAMEM_HELPERS_DEFERRED=y
|
CONFIG_FB_DMAMEM_HELPERS_DEFERRED=y
|
||||||
CONFIG_FUN_CORE=m
|
CONFIG_FUN_CORE=m
|
||||||
@@ -8617,6 +8678,8 @@ CONFIG_GENERIC_PINCONF=y
|
|||||||
CONFIG_GENERIC_PINCTRL_GROUPS=y
|
CONFIG_GENERIC_PINCTRL_GROUPS=y
|
||||||
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
|
CONFIG_GENERIC_PINMUX_FUNCTIONS=y
|
||||||
CONFIG_GNSS_SERIAL=m
|
CONFIG_GNSS_SERIAL=m
|
||||||
|
CONFIG_GPIB_NEC7210=m
|
||||||
|
CONFIG_GPIB_TMS9914=m
|
||||||
CONFIG_GPIOLIB_IRQCHIP=y
|
CONFIG_GPIOLIB_IRQCHIP=y
|
||||||
CONFIG_GPIO_ACPI=y
|
CONFIG_GPIO_ACPI=y
|
||||||
CONFIG_GPIO_GENERIC=y
|
CONFIG_GPIO_GENERIC=y
|
||||||
@@ -8650,6 +8713,7 @@ CONFIG_INTEL_UNCORE_FREQ_CONTROL_TPMI=m
|
|||||||
CONFIG_INTEL_WMI=y
|
CONFIG_INTEL_WMI=y
|
||||||
CONFIG_INTERVAL_TREE_SPAN_ITER=y
|
CONFIG_INTERVAL_TREE_SPAN_ITER=y
|
||||||
CONFIG_IOMMUFD_DRIVER=y
|
CONFIG_IOMMUFD_DRIVER=y
|
||||||
|
CONFIG_IOMMUFD_DRIVER_CORE=y
|
||||||
CONFIG_IOMMU_HELPER=y
|
CONFIG_IOMMU_HELPER=y
|
||||||
CONFIG_IPMI_DMI_DECODE=y
|
CONFIG_IPMI_DMI_DECODE=y
|
||||||
CONFIG_IPMI_PLAT_DATA=y
|
CONFIG_IPMI_PLAT_DATA=y
|
||||||
@@ -8663,10 +8727,6 @@ CONFIG_IWLWIFI_LEDS=y
|
|||||||
CONFIG_IWLWIFI_OPMODE_MODULAR=y
|
CONFIG_IWLWIFI_OPMODE_MODULAR=y
|
||||||
CONFIG_KVM_EXTERNAL_WRITE_TRACKING=y
|
CONFIG_KVM_EXTERNAL_WRITE_TRACKING=y
|
||||||
CONFIG_LEDS_EXPRESSWIRE=y
|
CONFIG_LEDS_EXPRESSWIRE=y
|
||||||
CONFIG_LIB80211=m
|
|
||||||
CONFIG_LIB80211_CRYPT_CCMP=m
|
|
||||||
CONFIG_LIB80211_CRYPT_TKIP=m
|
|
||||||
CONFIG_LIB80211_CRYPT_WEP=m
|
|
||||||
CONFIG_LIBETH=m
|
CONFIG_LIBETH=m
|
||||||
CONFIG_LIBFDT=y
|
CONFIG_LIBFDT=y
|
||||||
CONFIG_LIBIPW=m
|
CONFIG_LIBIPW=m
|
||||||
@@ -8701,6 +8761,7 @@ CONFIG_MFD_TPS65912=m
|
|||||||
CONFIG_MFD_TPS6594=m
|
CONFIG_MFD_TPS6594=m
|
||||||
CONFIG_MFD_WM831X=y
|
CONFIG_MFD_WM831X=y
|
||||||
CONFIG_MFD_WM8350=y
|
CONFIG_MFD_WM8350=y
|
||||||
|
CONFIG_MICROCHIP_PHY_RDS_PTP=m
|
||||||
CONFIG_MII=m
|
CONFIG_MII=m
|
||||||
CONFIG_MISC_RTSX=m
|
CONFIG_MISC_RTSX=m
|
||||||
CONFIG_MISDN_IPAC=m
|
CONFIG_MISDN_IPAC=m
|
||||||
@@ -8733,6 +8794,7 @@ CONFIG_MTD_NAND_CORE=m
|
|||||||
CONFIG_MTD_NAND_DENALI=m
|
CONFIG_MTD_NAND_DENALI=m
|
||||||
CONFIG_MTD_NAND_ECC=y
|
CONFIG_MTD_NAND_ECC=y
|
||||||
CONFIG_MTD_SM_COMMON=m
|
CONFIG_MTD_SM_COMMON=m
|
||||||
|
CONFIG_MTK_NET_PHYLIB=m
|
||||||
CONFIG_MULTIPLEXER=m
|
CONFIG_MULTIPLEXER=m
|
||||||
CONFIG_ND_BTT=y
|
CONFIG_ND_BTT=y
|
||||||
CONFIG_ND_PFN=y
|
CONFIG_ND_PFN=y
|
||||||
@@ -8751,7 +8813,6 @@ CONFIG_OF_ADDRESS=y
|
|||||||
CONFIG_OF_EARLY_FLATTREE=y
|
CONFIG_OF_EARLY_FLATTREE=y
|
||||||
CONFIG_OF_FLATTREE=y
|
CONFIG_OF_FLATTREE=y
|
||||||
CONFIG_OF_GPIO=y
|
CONFIG_OF_GPIO=y
|
||||||
CONFIG_OF_GPIO_MM_GPIOCHIP=y
|
|
||||||
CONFIG_OF_IOMMU=y
|
CONFIG_OF_IOMMU=y
|
||||||
CONFIG_OF_IRQ=y
|
CONFIG_OF_IRQ=y
|
||||||
CONFIG_OF_KOBJ=y
|
CONFIG_OF_KOBJ=y
|
||||||
@@ -8793,7 +8854,10 @@ CONFIG_PM_OPP=y
|
|||||||
CONFIG_PM_SLEEP_DEBUG=y
|
CONFIG_PM_SLEEP_DEBUG=y
|
||||||
CONFIG_POLYNOMIAL=m
|
CONFIG_POLYNOMIAL=m
|
||||||
CONFIG_PPPOE_HASH_BITS=4
|
CONFIG_PPPOE_HASH_BITS=4
|
||||||
CONFIG_PREEMPT_VOLUNTARY_BUILD=y
|
CONFIG_PREEMPTION=y
|
||||||
|
CONFIG_PREEMPT_BUILD=y
|
||||||
|
CONFIG_PREEMPT_COUNT=y
|
||||||
|
CONFIG_PREEMPT_RCU=y
|
||||||
CONFIG_PWM_DWC_CORE=m
|
CONFIG_PWM_DWC_CORE=m
|
||||||
CONFIG_PWM_LPSS=m
|
CONFIG_PWM_LPSS=m
|
||||||
CONFIG_QCA7000=m
|
CONFIG_QCA7000=m
|
||||||
@@ -8805,10 +8869,12 @@ CONFIG_QTNFMAC=m
|
|||||||
CONFIG_R8169_LEDS=y
|
CONFIG_R8169_LEDS=y
|
||||||
CONFIG_RAID6_PQ=m
|
CONFIG_RAID6_PQ=m
|
||||||
CONFIG_RATIONAL=y
|
CONFIG_RATIONAL=y
|
||||||
|
CONFIG_REALTEK_PHY_HWMON=y
|
||||||
CONFIG_REBOOT_MODE=m
|
CONFIG_REBOOT_MODE=m
|
||||||
CONFIG_REED_SOLOMON_DEC16=y
|
CONFIG_REED_SOLOMON_DEC16=y
|
||||||
CONFIG_REGMAP=y
|
CONFIG_REGMAP=y
|
||||||
CONFIG_REGMAP_I2C=y
|
CONFIG_REGMAP_I2C=y
|
||||||
|
CONFIG_REGMAP_I3C=m
|
||||||
CONFIG_REGMAP_IRQ=y
|
CONFIG_REGMAP_IRQ=y
|
||||||
CONFIG_REGMAP_MMIO=y
|
CONFIG_REGMAP_MMIO=y
|
||||||
CONFIG_REGMAP_SLIMBUS=m
|
CONFIG_REGMAP_SLIMBUS=m
|
||||||
@@ -8847,10 +8913,14 @@ CONFIG_RTLWIFI_USB=m
|
|||||||
CONFIG_RTW88_8703B=m
|
CONFIG_RTW88_8703B=m
|
||||||
CONFIG_RTW88_8723D=m
|
CONFIG_RTW88_8723D=m
|
||||||
CONFIG_RTW88_8723X=m
|
CONFIG_RTW88_8723X=m
|
||||||
|
CONFIG_RTW88_8812A=m
|
||||||
|
CONFIG_RTW88_8821A=m
|
||||||
CONFIG_RTW88_8821C=m
|
CONFIG_RTW88_8821C=m
|
||||||
CONFIG_RTW88_8822B=m
|
CONFIG_RTW88_8822B=m
|
||||||
CONFIG_RTW88_8822C=m
|
CONFIG_RTW88_8822C=m
|
||||||
|
CONFIG_RTW88_88XXA=m
|
||||||
CONFIG_RTW88_CORE=m
|
CONFIG_RTW88_CORE=m
|
||||||
|
CONFIG_RTW88_LEDS=y
|
||||||
CONFIG_RTW88_PCI=m
|
CONFIG_RTW88_PCI=m
|
||||||
CONFIG_RTW88_SDIO=m
|
CONFIG_RTW88_SDIO=m
|
||||||
CONFIG_RTW88_USB=m
|
CONFIG_RTW88_USB=m
|
||||||
@@ -8880,6 +8950,7 @@ CONFIG_SLHC=m
|
|||||||
CONFIG_SMBFS=m
|
CONFIG_SMBFS=m
|
||||||
CONFIG_SND_AC97_CODEC=m
|
CONFIG_SND_AC97_CODEC=m
|
||||||
CONFIG_SND_AMD_SOUNDWIRE_ACPI=m
|
CONFIG_SND_AMD_SOUNDWIRE_ACPI=m
|
||||||
|
CONFIG_SND_COMPRESS_ACCEL=y
|
||||||
CONFIG_SND_COMPRESS_OFFLOAD=m
|
CONFIG_SND_COMPRESS_OFFLOAD=m
|
||||||
CONFIG_SND_CTL_LED=m
|
CONFIG_SND_CTL_LED=m
|
||||||
CONFIG_SND_DMAENGINE_PCM=m
|
CONFIG_SND_DMAENGINE_PCM=m
|
||||||
@@ -8924,6 +8995,7 @@ CONFIG_SND_SOC_AC97_BUS=y
|
|||||||
CONFIG_SND_SOC_ACPI=m
|
CONFIG_SND_SOC_ACPI=m
|
||||||
CONFIG_SND_SOC_ACPI_AMD_MATCH=m
|
CONFIG_SND_SOC_ACPI_AMD_MATCH=m
|
||||||
CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
|
CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
|
||||||
|
CONFIG_SND_SOC_ACPI_INTEL_SDCA_QUIRKS=m
|
||||||
CONFIG_SND_SOC_ADAU1372=m
|
CONFIG_SND_SOC_ADAU1372=m
|
||||||
CONFIG_SND_SOC_ADAU1761=m
|
CONFIG_SND_SOC_ADAU1761=m
|
||||||
CONFIG_SND_SOC_ADAU17X1=m
|
CONFIG_SND_SOC_ADAU17X1=m
|
||||||
@@ -8934,6 +9006,7 @@ CONFIG_SND_SOC_AMD_ACP_LEGACY_COMMON=m
|
|||||||
CONFIG_SND_SOC_AMD_ACP_PCM=m
|
CONFIG_SND_SOC_AMD_ACP_PCM=m
|
||||||
CONFIG_SND_SOC_AMD_ACP_PDM=m
|
CONFIG_SND_SOC_AMD_ACP_PDM=m
|
||||||
CONFIG_SND_SOC_AMD_MACH_COMMON=m
|
CONFIG_SND_SOC_AMD_MACH_COMMON=m
|
||||||
|
CONFIG_SND_SOC_AMD_SDW_MACH_COMMON=m
|
||||||
CONFIG_SND_SOC_AMD_SOUNDWIRE_LINK_BASELINE=m
|
CONFIG_SND_SOC_AMD_SOUNDWIRE_LINK_BASELINE=m
|
||||||
CONFIG_SND_SOC_ARIZONA=m
|
CONFIG_SND_SOC_ARIZONA=m
|
||||||
CONFIG_SND_SOC_AW88395_LIB=m
|
CONFIG_SND_SOC_AW88395_LIB=m
|
||||||
@@ -8966,6 +9039,7 @@ CONFIG_SND_SOC_INTEL_SOF_REALTEK_COMMON=m
|
|||||||
CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
|
CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
|
||||||
CONFIG_SND_SOC_MAX98373=m
|
CONFIG_SND_SOC_MAX98373=m
|
||||||
CONFIG_SND_SOC_NAU8825=m
|
CONFIG_SND_SOC_NAU8825=m
|
||||||
|
CONFIG_SND_SOC_NTPFW=m
|
||||||
CONFIG_SND_SOC_PCM1789=m
|
CONFIG_SND_SOC_PCM1789=m
|
||||||
CONFIG_SND_SOC_PCM179X=m
|
CONFIG_SND_SOC_PCM179X=m
|
||||||
CONFIG_SND_SOC_PCM186X=m
|
CONFIG_SND_SOC_PCM186X=m
|
||||||
@@ -8996,6 +9070,9 @@ CONFIG_SND_SOC_RT5682_I2C=m
|
|||||||
CONFIG_SND_SOC_RT700=m
|
CONFIG_SND_SOC_RT700=m
|
||||||
CONFIG_SND_SOC_RT711=m
|
CONFIG_SND_SOC_RT711=m
|
||||||
CONFIG_SND_SOC_RT715=m
|
CONFIG_SND_SOC_RT715=m
|
||||||
|
CONFIG_SND_SOC_RT_SDW_COMMON=m
|
||||||
|
CONFIG_SND_SOC_SDCA=m
|
||||||
|
CONFIG_SND_SOC_SDCA_OPTIONAL=m
|
||||||
CONFIG_SND_SOC_SDW_UTILS=m
|
CONFIG_SND_SOC_SDW_UTILS=m
|
||||||
CONFIG_SND_SOC_SIGMADSP=m
|
CONFIG_SND_SOC_SIGMADSP=m
|
||||||
CONFIG_SND_SOC_SIGMADSP_I2C=m
|
CONFIG_SND_SOC_SIGMADSP_I2C=m
|
||||||
@@ -9070,10 +9147,12 @@ CONFIG_SSB_PCIHOST_POSSIBLE=y
|
|||||||
CONFIG_SSB_SDIOHOST_POSSIBLE=y
|
CONFIG_SSB_SDIOHOST_POSSIBLE=y
|
||||||
CONFIG_SSB_SPROM=y
|
CONFIG_SSB_SPROM=y
|
||||||
CONFIG_SUNGEM_PHY=m
|
CONFIG_SUNGEM_PHY=m
|
||||||
|
CONFIG_TASKS_RCU=y
|
||||||
CONFIG_TCG_TIS_CORE=y
|
CONFIG_TCG_TIS_CORE=y
|
||||||
CONFIG_TCG_TIS_ST33ZP24=m
|
CONFIG_TCG_TIS_ST33ZP24=m
|
||||||
CONFIG_TRACER_MAX_TRACE=y
|
CONFIG_TRACER_MAX_TRACE=y
|
||||||
CONFIG_TRACING_MAP=y
|
CONFIG_TRACING_MAP=y
|
||||||
|
CONFIG_UNINLINE_SPIN_UNLOCK=y
|
||||||
CONFIG_USB_ARCH_HAS_HCD=y
|
CONFIG_USB_ARCH_HAS_HCD=y
|
||||||
CONFIG_USB_CDNS_HOST=y
|
CONFIG_USB_CDNS_HOST=y
|
||||||
CONFIG_USB_COMMON=m
|
CONFIG_USB_COMMON=m
|
||||||
@@ -9134,7 +9213,6 @@ CONFIG_VMAP_PFN=y
|
|||||||
CONFIG_WEXT_CORE=y
|
CONFIG_WEXT_CORE=y
|
||||||
CONFIG_WEXT_PRIV=y
|
CONFIG_WEXT_PRIV=y
|
||||||
CONFIG_WEXT_PROC=y
|
CONFIG_WEXT_PROC=y
|
||||||
CONFIG_WEXT_SPY=y
|
|
||||||
CONFIG_WILC1000=m
|
CONFIG_WILC1000=m
|
||||||
CONFIG_WIRELESS_EXT=y
|
CONFIG_WIRELESS_EXT=y
|
||||||
CONFIG_X86_ESPFIX64=y
|
CONFIG_X86_ESPFIX64=y
|
||||||
|
126
debian/config/amd64/config.vm
vendored
126
debian/config/amd64/config.vm
vendored
@@ -115,7 +115,6 @@ CONFIG_XEN_PV_MSR_SAFE=y
|
|||||||
## file: crypto/Kconfig
|
## file: crypto/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_CRYPTO_ECDH=m
|
CONFIG_CRYPTO_ECDH=m
|
||||||
CONFIG_CRYPTO_ECDSA=m
|
|
||||||
CONFIG_CRYPTO_CTS=m
|
CONFIG_CRYPTO_CTS=m
|
||||||
CONFIG_CRYPTO_XTS=m
|
CONFIG_CRYPTO_XTS=m
|
||||||
CONFIG_CRYPTO_DEFLATE=m
|
CONFIG_CRYPTO_DEFLATE=m
|
||||||
@@ -410,6 +409,7 @@ CONFIG_PM_DEVFREQ_EVENT=y
|
|||||||
##
|
##
|
||||||
## file: drivers/dma/amd/Kconfig
|
## file: drivers/dma/amd/Kconfig
|
||||||
##
|
##
|
||||||
|
# CONFIG_AMD_PTDMA is not set
|
||||||
# CONFIG_AMD_QDMA is not set
|
# CONFIG_AMD_QDMA is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -428,11 +428,6 @@ CONFIG_PM_DEVFREQ_EVENT=y
|
|||||||
##
|
##
|
||||||
# CONFIG_INTEL_LDMA is not set
|
# CONFIG_INTEL_LDMA is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/dma/ptdma/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_AMD_PTDMA is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/dma/qcom/Kconfig
|
## file: drivers/dma/qcom/Kconfig
|
||||||
##
|
##
|
||||||
@@ -530,12 +525,15 @@ CONFIG_GPIOLIB_FASTPATH_LIMIT=512
|
|||||||
CONFIG_GPIO_SYSFS=y
|
CONFIG_GPIO_SYSFS=y
|
||||||
CONFIG_GPIO_CDEV=y
|
CONFIG_GPIO_CDEV=y
|
||||||
CONFIG_GPIO_CDEV_V1=y
|
CONFIG_GPIO_CDEV_V1=y
|
||||||
|
# CONFIG_GPIO_ALTERA is not set
|
||||||
# CONFIG_GPIO_AMDPT is not set
|
# CONFIG_GPIO_AMDPT is not set
|
||||||
# CONFIG_GPIO_DWAPB is not set
|
# CONFIG_GPIO_DWAPB is not set
|
||||||
CONFIG_GPIO_GENERIC_PLATFORM=m
|
CONFIG_GPIO_GENERIC_PLATFORM=m
|
||||||
# CONFIG_GPIO_GRANITERAPIDS is not set
|
# CONFIG_GPIO_GRANITERAPIDS is not set
|
||||||
CONFIG_GPIO_ICH=m
|
CONFIG_GPIO_ICH=m
|
||||||
# CONFIG_GPIO_MB86S7X is not set
|
# CONFIG_GPIO_MB86S7X is not set
|
||||||
|
# CONFIG_GPIO_POLARFIRE_SOC is not set
|
||||||
|
# CONFIG_GPIO_XILINX is not set
|
||||||
# CONFIG_GPIO_AMD_FCH is not set
|
# CONFIG_GPIO_AMD_FCH is not set
|
||||||
# CONFIG_GPIO_VX855 is not set
|
# CONFIG_GPIO_VX855 is not set
|
||||||
# CONFIG_GPIO_F7188X is not set
|
# CONFIG_GPIO_F7188X is not set
|
||||||
@@ -559,6 +557,7 @@ CONFIG_GPIO_SCH=m
|
|||||||
# CONFIG_GPIO_PCI_IDIO_16 is not set
|
# CONFIG_GPIO_PCI_IDIO_16 is not set
|
||||||
# CONFIG_GPIO_PCIE_IDIO_24 is not set
|
# CONFIG_GPIO_PCIE_IDIO_24 is not set
|
||||||
# CONFIG_GPIO_RDC321X is not set
|
# CONFIG_GPIO_RDC321X is not set
|
||||||
|
# CONFIG_GPIO_MPSSE is not set
|
||||||
CONFIG_GPIO_AGGREGATOR=m
|
CONFIG_GPIO_AGGREGATOR=m
|
||||||
# CONFIG_GPIO_LATCH is not set
|
# CONFIG_GPIO_LATCH is not set
|
||||||
CONFIG_GPIO_MOCKUP=m
|
CONFIG_GPIO_MOCKUP=m
|
||||||
@@ -575,9 +574,6 @@ CONFIG_DRM=y
|
|||||||
# 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_FBDEV_EMULATION=y
|
|
||||||
CONFIG_DRM_FBDEV_OVERALLOC=100
|
|
||||||
# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM 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
|
||||||
@@ -598,6 +594,17 @@ CONFIG_DRM_HYPERV=m
|
|||||||
##
|
##
|
||||||
# CONFIG_DRM_ANALOGIX_ANX78XX is not set
|
# CONFIG_DRM_ANALOGIX_ANX78XX is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/clients/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_DRM_FBDEV_EMULATION=y
|
||||||
|
CONFIG_DRM_FBDEV_OVERALLOC=100
|
||||||
|
# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set
|
||||||
|
# CONFIG_DRM_CLIENT_LOG is not set
|
||||||
|
## choice: Default DRM Client
|
||||||
|
CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y
|
||||||
|
## end choice
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/etnaviv/Kconfig
|
## file: drivers/gpu/drm/etnaviv/Kconfig
|
||||||
##
|
##
|
||||||
@@ -613,6 +620,11 @@ CONFIG_DRM_HYPERV=m
|
|||||||
##
|
##
|
||||||
# CONFIG_DRM_GUD is not set
|
# CONFIG_DRM_GUD is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/gpu/drm/hisilicon/hibmc/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_DRM_HISI_HIBMC is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/gpu/drm/i2c/Kconfig
|
## file: drivers/gpu/drm/i2c/Kconfig
|
||||||
##
|
##
|
||||||
@@ -743,6 +755,7 @@ CONFIG_HID_GENERIC=m
|
|||||||
# CONFIG_HID_VIVALDI is not set
|
# CONFIG_HID_VIVALDI is not set
|
||||||
# CONFIG_HID_KEYTOUCH is not set
|
# CONFIG_HID_KEYTOUCH is not set
|
||||||
# CONFIG_HID_KYE is not set
|
# CONFIG_HID_KYE is not set
|
||||||
|
# CONFIG_HID_KYSONA is not set
|
||||||
# CONFIG_HID_UCLOGIC is not set
|
# CONFIG_HID_UCLOGIC is not set
|
||||||
# CONFIG_HID_WALTOP is not set
|
# CONFIG_HID_WALTOP is not set
|
||||||
# CONFIG_HID_VIEWSONIC is not set
|
# CONFIG_HID_VIEWSONIC is not set
|
||||||
@@ -827,6 +840,11 @@ CONFIG_I2C_HID_OF=m
|
|||||||
##
|
##
|
||||||
# CONFIG_INTEL_ISH_HID is not set
|
# CONFIG_INTEL_ISH_HID is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/hid/intel-thc-hid/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_INTEL_THC_HID is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/hid/usbhid/Kconfig
|
## file: drivers/hid/usbhid/Kconfig
|
||||||
##
|
##
|
||||||
@@ -912,6 +930,7 @@ CONFIG_HWMON=y
|
|||||||
# CONFIG_SENSORS_HS3001 is not set
|
# CONFIG_SENSORS_HS3001 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_IT87 is not set
|
# CONFIG_SENSORS_IT87 is not set
|
||||||
# CONFIG_SENSORS_JC42 is not set
|
# CONFIG_SENSORS_JC42 is not set
|
||||||
# CONFIG_SENSORS_POWERZ is not set
|
# CONFIG_SENSORS_POWERZ is not set
|
||||||
@@ -969,6 +988,7 @@ CONFIG_HWMON=y
|
|||||||
# 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_NCT6775_I2C is not set
|
# CONFIG_SENSORS_NCT6775_I2C is not set
|
||||||
|
# CONFIG_SENSORS_NCT7363 is not set
|
||||||
# CONFIG_SENSORS_NCT7802 is not set
|
# CONFIG_SENSORS_NCT7802 is not set
|
||||||
# CONFIG_SENSORS_NCT7904 is not set
|
# CONFIG_SENSORS_NCT7904 is not set
|
||||||
# CONFIG_SENSORS_NPCM7XX is not set
|
# CONFIG_SENSORS_NPCM7XX is not set
|
||||||
@@ -1049,6 +1069,7 @@ CONFIG_SENSORS_PMBUS=m
|
|||||||
# CONFIG_SENSORS_ADP1050 is not set
|
# CONFIG_SENSORS_ADP1050 is not set
|
||||||
# CONFIG_SENSORS_BEL_PFE is not set
|
# CONFIG_SENSORS_BEL_PFE is not set
|
||||||
# CONFIG_SENSORS_BPA_RS600 is not set
|
# CONFIG_SENSORS_BPA_RS600 is not set
|
||||||
|
# CONFIG_SENSORS_CRPS is not set
|
||||||
# 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
|
||||||
@@ -1089,6 +1110,7 @@ CONFIG_SENSORS_PMBUS=m
|
|||||||
# CONFIG_SENSORS_Q54SJ108A2 is not set
|
# CONFIG_SENSORS_Q54SJ108A2 is not set
|
||||||
# CONFIG_SENSORS_STPDDC60 is not set
|
# CONFIG_SENSORS_STPDDC60 is not set
|
||||||
# CONFIG_SENSORS_TDA38640 is not set
|
# CONFIG_SENSORS_TDA38640 is not set
|
||||||
|
# CONFIG_SENSORS_TPS25990 is not set
|
||||||
# CONFIG_SENSORS_TPS40422 is not set
|
# CONFIG_SENSORS_TPS40422 is not set
|
||||||
# CONFIG_SENSORS_TPS53679 is not set
|
# CONFIG_SENSORS_TPS53679 is not set
|
||||||
# CONFIG_SENSORS_TPS546D24 is not set
|
# CONFIG_SENSORS_TPS546D24 is not set
|
||||||
@@ -1137,6 +1159,7 @@ CONFIG_I2C_ALGOPCA=m
|
|||||||
# CONFIG_I2C_AMD756 is not set
|
# CONFIG_I2C_AMD756 is not set
|
||||||
# CONFIG_I2C_AMD8111 is not set
|
# CONFIG_I2C_AMD8111 is not set
|
||||||
# CONFIG_I2C_AMD_MP2 is not set
|
# CONFIG_I2C_AMD_MP2 is not set
|
||||||
|
# CONFIG_I2C_AMD_ASF is not set
|
||||||
CONFIG_I2C_I801=m
|
CONFIG_I2C_I801=m
|
||||||
CONFIG_I2C_ISCH=m
|
CONFIG_I2C_ISCH=m
|
||||||
CONFIG_I2C_ISMT=m
|
CONFIG_I2C_ISMT=m
|
||||||
@@ -1623,6 +1646,7 @@ CONFIG_FUSION_FC=m
|
|||||||
# CONFIG_MFD_BCM590XX is not set
|
# CONFIG_MFD_BCM590XX is not set
|
||||||
# CONFIG_MFD_BD9571MWV is not set
|
# CONFIG_MFD_BD9571MWV is not set
|
||||||
# CONFIG_MFD_AXP20X_I2C is not set
|
# CONFIG_MFD_AXP20X_I2C is not set
|
||||||
|
# CONFIG_MFD_CGBC is not set
|
||||||
# CONFIG_MFD_CS42L43_I2C is not set
|
# CONFIG_MFD_CS42L43_I2C is not set
|
||||||
# CONFIG_MFD_MADERA is not set
|
# CONFIG_MFD_MADERA is not set
|
||||||
# CONFIG_PMIC_DA903X is not set
|
# CONFIG_PMIC_DA903X is not set
|
||||||
@@ -1698,6 +1722,8 @@ CONFIG_MFD_INTEL_PMC_BXT=m
|
|||||||
# CONFIG_MFD_ATC260X_I2C is not set
|
# CONFIG_MFD_ATC260X_I2C is not set
|
||||||
# CONFIG_MFD_CS40L50_I2C is not set
|
# CONFIG_MFD_CS40L50_I2C is not set
|
||||||
# CONFIG_RAVE_SP_CORE is not set
|
# CONFIG_RAVE_SP_CORE is not set
|
||||||
|
# CONFIG_MFD_QNAP_MCU is not set
|
||||||
|
# CONFIG_MFD_UPBOARD_FPGA is not set
|
||||||
# CONFIG_MFD_STEAMDECK is not set
|
# CONFIG_MFD_STEAMDECK is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -1780,11 +1806,6 @@ CONFIG_EEPROM_AT24=m
|
|||||||
##
|
##
|
||||||
# CONFIG_INTEL_MEI is not set
|
# CONFIG_INTEL_MEI is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/misc/ti-st/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_TI_ST is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/mmc/Kconfig
|
## file: drivers/mmc/Kconfig
|
||||||
##
|
##
|
||||||
@@ -1947,6 +1968,11 @@ CONFIG_BE2NET_SKYHAWK=y
|
|||||||
##
|
##
|
||||||
# CONFIG_NET_VENDOR_FUNGIBLE is not set
|
# CONFIG_NET_VENDOR_FUNGIBLE is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/ethernet/hisilicon/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_NET_VENDOR_HISILICON is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ethernet/huawei/Kconfig
|
## file: drivers/net/ethernet/huawei/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2237,7 +2263,6 @@ 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_MEDIATEK_GE_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
|
||||||
@@ -2250,7 +2275,6 @@ CONFIG_MCTP_TRANSPORT_I2C=m
|
|||||||
# CONFIG_NXP_TJA11XX_PHY is not set
|
# CONFIG_NXP_TJA11XX_PHY is not set
|
||||||
# CONFIG_NCN26000_PHY is not set
|
# CONFIG_NCN26000_PHY is not set
|
||||||
# CONFIG_QSEMI_PHY is not set
|
# CONFIG_QSEMI_PHY is not set
|
||||||
# CONFIG_REALTEK_PHY is not set
|
|
||||||
# CONFIG_RENESAS_PHY is not set
|
# CONFIG_RENESAS_PHY is not set
|
||||||
# CONFIG_ROCKCHIP_PHY is not set
|
# CONFIG_ROCKCHIP_PHY is not set
|
||||||
# CONFIG_SMSC_PHY is not set
|
# CONFIG_SMSC_PHY is not set
|
||||||
@@ -2271,12 +2295,22 @@ CONFIG_MCTP_TRANSPORT_I2C=m
|
|||||||
##
|
##
|
||||||
# CONFIG_AQUANTIA_PHY is not set
|
# CONFIG_AQUANTIA_PHY is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/phy/mediatek/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_MEDIATEK_GE_PHY is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/phy/qcom/Kconfig
|
## file: drivers/net/phy/qcom/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_QCA83XX_PHY is not set
|
# CONFIG_QCA83XX_PHY is not set
|
||||||
# CONFIG_QCA808X_PHY is not set
|
# CONFIG_QCA808X_PHY is not set
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/net/phy/realtek/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_REALTEK_PHY is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/net/ppp/Kconfig
|
## file: drivers/net/ppp/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2367,7 +2401,7 @@ CONFIG_NVME_TARGET_FC=m
|
|||||||
## file: drivers/pci/Kconfig
|
## file: drivers/pci/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_XEN_PCIDEV_FRONTEND=m
|
CONFIG_XEN_PCIDEV_FRONTEND=m
|
||||||
# CONFIG_PCI_P2PDMA is not set
|
CONFIG_PCIE_TPH=y
|
||||||
CONFIG_PCI_HYPERV=m
|
CONFIG_PCI_HYPERV=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2387,6 +2421,7 @@ CONFIG_PCI_HYPERV_INTERFACE=m
|
|||||||
##
|
##
|
||||||
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
|
# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
|
||||||
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
# CONFIG_HOTPLUG_PCI_CPCI is not set
|
||||||
|
# CONFIG_HOTPLUG_PCI_OCTEONEP is not set
|
||||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2492,10 +2527,15 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
|||||||
##
|
##
|
||||||
## file: drivers/platform/x86/amd/Kconfig
|
## file: drivers/platform/x86/amd/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_AMD_HSMP is not set
|
|
||||||
# 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
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/platform/x86/amd/hsmp/Kconfig
|
||||||
|
##
|
||||||
|
# CONFIG_AMD_HSMP_ACPI is not set
|
||||||
|
# CONFIG_AMD_HSMP_PLAT is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/platform/x86/amd/pmc/Kconfig
|
## file: drivers/platform/x86/amd/pmc/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2611,6 +2651,7 @@ 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
|
||||||
@@ -2783,11 +2824,6 @@ CONFIG_SCSI_MPI3MR=m
|
|||||||
##
|
##
|
||||||
# CONFIG_SOC_TI is not set
|
# CONFIG_SOC_TI is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/soundwire/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_SOUNDWIRE is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/spi/Kconfig
|
## file: drivers/spi/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2809,25 +2845,15 @@ CONFIG_SCSI_MPI3MR=m
|
|||||||
CONFIG_STAGING=y
|
CONFIG_STAGING=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/fieldbus/Kconfig
|
## file: drivers/staging/gpib/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_FIELDBUS_DEV is not set
|
# CONFIG_GPIB is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/gdm724x/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_LTE_GDM724X is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/media/Kconfig
|
## file: drivers/staging/media/Kconfig
|
||||||
##
|
##
|
||||||
# CONFIG_STAGING_MEDIA is not set
|
# CONFIG_STAGING_MEDIA is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: drivers/staging/rts5208/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_RTS5208 is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/staging/sm750fb/Kconfig
|
## file: drivers/staging/sm750fb/Kconfig
|
||||||
##
|
##
|
||||||
@@ -2857,6 +2883,7 @@ CONFIG_THERMAL_DEBUGFS=y
|
|||||||
# CONFIG_THERMAL_HWMON is not set
|
# CONFIG_THERMAL_HWMON is not set
|
||||||
# CONFIG_THERMAL_GOV_BANG_BANG is not set
|
# CONFIG_THERMAL_GOV_BANG_BANG is not set
|
||||||
CONFIG_DEVFREQ_THERMAL=y
|
CONFIG_DEVFREQ_THERMAL=y
|
||||||
|
CONFIG_PCIE_THERMAL=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/thunderbolt/Kconfig
|
## file: drivers/thunderbolt/Kconfig
|
||||||
@@ -3177,7 +3204,6 @@ CONFIG_FB_UVESA=m
|
|||||||
CONFIG_FB_GOLDFISH=m
|
CONFIG_FB_GOLDFISH=m
|
||||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||||
CONFIG_FB_HYPERV=m
|
CONFIG_FB_HYPERV=m
|
||||||
# CONFIG_FB_SSD1307 is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/video/fbdev/core/Kconfig
|
## file: drivers/video/fbdev/core/Kconfig
|
||||||
@@ -3244,7 +3270,6 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
|||||||
# CONFIG_PC87413_WDT is not set
|
# CONFIG_PC87413_WDT is not set
|
||||||
# CONFIG_NV_TCO is not set
|
# CONFIG_NV_TCO is not set
|
||||||
# CONFIG_60XX_WDT is not set
|
# CONFIG_60XX_WDT is not set
|
||||||
# CONFIG_CPU5_WDT is not set
|
|
||||||
# CONFIG_SMSC_SCH311X_WDT is not set
|
# CONFIG_SMSC_SCH311X_WDT is not set
|
||||||
# CONFIG_SMSC37B787_WDT is not set
|
# CONFIG_SMSC37B787_WDT is not set
|
||||||
# CONFIG_TQMX86_WDT is not set
|
# CONFIG_TQMX86_WDT is not set
|
||||||
@@ -3328,6 +3353,7 @@ CONFIG_BTRFS_FS_POSIX_ACL=y
|
|||||||
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
|
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
|
||||||
# CONFIG_BTRFS_DEBUG is not set
|
# CONFIG_BTRFS_DEBUG is not set
|
||||||
# CONFIG_BTRFS_ASSERT is not set
|
# CONFIG_BTRFS_ASSERT is not set
|
||||||
|
# CONFIG_BTRFS_EXPERIMENTAL is not set
|
||||||
# CONFIG_BTRFS_FS_REF_VERIFY is not set
|
# CONFIG_BTRFS_FS_REF_VERIFY is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -3502,11 +3528,6 @@ CONFIG_OCFS2_DEBUG_MASKLOG=y
|
|||||||
##
|
##
|
||||||
# CONFIG_QNX6FS_FS is not set
|
# CONFIG_QNX6FS_FS is not set
|
||||||
|
|
||||||
##
|
|
||||||
## file: fs/reiserfs/Kconfig
|
|
||||||
##
|
|
||||||
# CONFIG_REISERFS_FS is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/romfs/Kconfig
|
## file: fs/romfs/Kconfig
|
||||||
##
|
##
|
||||||
@@ -3570,7 +3591,7 @@ CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
|
|||||||
##
|
##
|
||||||
## choice: Preemption Model
|
## choice: Preemption Model
|
||||||
# CONFIG_PREEMPT_NONE is not set
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
CONFIG_PREEMPT_VOLUNTARY=y
|
CONFIG_PREEMPT_LAZY=y
|
||||||
## end choice
|
## end choice
|
||||||
# CONFIG_SCHED_CORE is not set
|
# CONFIG_SCHED_CORE is not set
|
||||||
|
|
||||||
@@ -3604,6 +3625,7 @@ CONFIG_PM_ADVANCED_DEBUG=y
|
|||||||
##
|
##
|
||||||
CONFIG_BOOTTIME_TRACING=y
|
CONFIG_BOOTTIME_TRACING=y
|
||||||
CONFIG_FUNCTION_GRAPH_RETVAL=y
|
CONFIG_FUNCTION_GRAPH_RETVAL=y
|
||||||
|
# CONFIG_PREEMPT_TRACER is not set
|
||||||
CONFIG_SCHED_TRACER=y
|
CONFIG_SCHED_TRACER=y
|
||||||
CONFIG_HWLAT_TRACER=y
|
CONFIG_HWLAT_TRACER=y
|
||||||
CONFIG_OSNOISE_TRACER=y
|
CONFIG_OSNOISE_TRACER=y
|
||||||
@@ -3630,6 +3652,7 @@ CONFIG_RAID6_PQ_BENCHMARK=y
|
|||||||
# CONFIG_MEMORY_NOTIFIER_ERROR_INJECT is not set
|
# CONFIG_MEMORY_NOTIFIER_ERROR_INJECT is not set
|
||||||
CONFIG_PANIC_TIMEOUT=30
|
CONFIG_PANIC_TIMEOUT=30
|
||||||
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
|
CONFIG_WQ_CPU_INTENSIVE_REPORT=y
|
||||||
|
# CONFIG_DEBUG_PREEMPT is not set
|
||||||
CONFIG_NMI_CHECK_CPU=y
|
CONFIG_NMI_CHECK_CPU=y
|
||||||
# CONFIG_DEBUG_IRQFLAGS is not set
|
# CONFIG_DEBUG_IRQFLAGS is not set
|
||||||
# CONFIG_DEBUG_LIST is not set
|
# CONFIG_DEBUG_LIST is not set
|
||||||
@@ -3672,7 +3695,6 @@ CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD=y
|
|||||||
## end choice
|
## end choice
|
||||||
CONFIG_ZBUD=y
|
CONFIG_ZBUD=y
|
||||||
CONFIG_Z3FOLD_DEPRECATED=m
|
CONFIG_Z3FOLD_DEPRECATED=m
|
||||||
CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
|
|
||||||
# CONFIG_HWPOISON_INJECT is not set
|
# CONFIG_HWPOISON_INJECT is not set
|
||||||
CONFIG_NUMA_EMU=y
|
CONFIG_NUMA_EMU=y
|
||||||
|
|
||||||
@@ -4011,13 +4033,18 @@ CONFIG_ASYNC_RAID6_RECOV=m
|
|||||||
CONFIG_BLK_CGROUP_PUNT_BIO=y
|
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_CRYPTO_ECC=m
|
|
||||||
CONFIG_CRYPTO_LIB_AESCFB=m
|
CONFIG_CRYPTO_LIB_AESCFB=m
|
||||||
CONFIG_CRYPTO_LIB_ARC4=m
|
CONFIG_CRYPTO_LIB_ARC4=m
|
||||||
CONFIG_CXL_PORT=y
|
CONFIG_CXL_PORT=y
|
||||||
CONFIG_DRM_BRIDGE=y
|
CONFIG_DRM_BRIDGE=y
|
||||||
|
CONFIG_DRM_CLIENT=y
|
||||||
|
CONFIG_DRM_CLIENT_DEFAULT="fbdev"
|
||||||
|
CONFIG_DRM_CLIENT_LIB=m
|
||||||
|
CONFIG_DRM_CLIENT_SELECTION=m
|
||||||
|
CONFIG_DRM_CLIENT_SETUP=y
|
||||||
|
CONFIG_DRM_EXEC=m
|
||||||
CONFIG_DRM_GEM_SHMEM_HELPER=m
|
CONFIG_DRM_GEM_SHMEM_HELPER=m
|
||||||
CONFIG_DRM_KMS_HELPER=y
|
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_TTM=m
|
CONFIG_DRM_TTM=m
|
||||||
@@ -4064,7 +4091,10 @@ CONFIG_PM_CLK=y
|
|||||||
CONFIG_PM_OPP=y
|
CONFIG_PM_OPP=y
|
||||||
CONFIG_PM_SLEEP_DEBUG=y
|
CONFIG_PM_SLEEP_DEBUG=y
|
||||||
CONFIG_PPPOE_HASH_BITS=4
|
CONFIG_PPPOE_HASH_BITS=4
|
||||||
CONFIG_PREEMPT_VOLUNTARY_BUILD=y
|
CONFIG_PREEMPTION=y
|
||||||
|
CONFIG_PREEMPT_BUILD=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
|
||||||
@@ -4080,9 +4110,11 @@ CONFIG_SLHC=m
|
|||||||
CONFIG_SMBFS=m
|
CONFIG_SMBFS=m
|
||||||
CONFIG_SWIOTLB_XEN=y
|
CONFIG_SWIOTLB_XEN=y
|
||||||
CONFIG_SYS_HYPERVISOR=y
|
CONFIG_SYS_HYPERVISOR=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
|
||||||
CONFIG_TRACING_MAP=y
|
CONFIG_TRACING_MAP=y
|
||||||
|
CONFIG_UNINLINE_SPIN_UNLOCK=y
|
||||||
CONFIG_USB_ARCH_HAS_HCD=y
|
CONFIG_USB_ARCH_HAS_HCD=y
|
||||||
CONFIG_USB_COMMON=m
|
CONFIG_USB_COMMON=m
|
||||||
CONFIG_USB_EHCI_PCI=m
|
CONFIG_USB_EHCI_PCI=m
|
||||||
|
98
debian/config/config
vendored
98
debian/config/config
vendored
@@ -87,6 +87,7 @@ CONFIG_LEGACY_VSYSCALL_NONE=y
|
|||||||
## end choice
|
## end choice
|
||||||
# CONFIG_CMDLINE_BOOL is not set
|
# CONFIG_CMDLINE_BOOL is not set
|
||||||
# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
|
# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
|
||||||
|
CONFIG_X86_BUS_LOCK_DETECT=y
|
||||||
CONFIG_CPU_MITIGATIONS=y
|
CONFIG_CPU_MITIGATIONS=y
|
||||||
CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y
|
CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y
|
||||||
# CONFIG_MITIGATION_RETPOLINE is not set
|
# CONFIG_MITIGATION_RETPOLINE is not set
|
||||||
@@ -146,7 +147,8 @@ CONFIG_IA32_EMULATION=y
|
|||||||
# CONFIG_MSKYLAKE is not set
|
# CONFIG_MSKYLAKE is not set
|
||||||
# CONFIG_MSKYLAKEX is not set
|
# CONFIG_MSKYLAKEX is not set
|
||||||
# CONFIG_MCANNONLAKE is not set
|
# CONFIG_MCANNONLAKE is not set
|
||||||
# CONFIG_MICELAKE is not set
|
# CONFIG_MICELAKE_CLIENT is not set
|
||||||
|
# CONFIG_MICELAKE_SERVER is not set
|
||||||
# CONFIG_MCASCADELAKE is not set
|
# CONFIG_MCASCADELAKE is not set
|
||||||
# CONFIG_MCOOPERLAKE is not set
|
# CONFIG_MCOOPERLAKE is not set
|
||||||
# CONFIG_MTIGERLAKE is not set
|
# CONFIG_MTIGERLAKE is not set
|
||||||
@@ -227,9 +229,6 @@ CONFIG_CRYPTO_SHA256_SSSE3=m
|
|||||||
CONFIG_CRYPTO_SHA512_SSSE3=m
|
CONFIG_CRYPTO_SHA512_SSSE3=m
|
||||||
CONFIG_CRYPTO_SM3_AVX_X86_64=m
|
CONFIG_CRYPTO_SM3_AVX_X86_64=m
|
||||||
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
|
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
|
||||||
CONFIG_CRYPTO_CRC32C_INTEL=m
|
|
||||||
CONFIG_CRYPTO_CRC32_PCLMUL=m
|
|
||||||
CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: arch/x86/events/Kconfig
|
## file: arch/x86/events/Kconfig
|
||||||
@@ -295,9 +294,9 @@ CONFIG_CMDLINE_PARTITION=y
|
|||||||
##
|
##
|
||||||
## file: certs/Kconfig
|
## file: certs/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
|
|
||||||
## choice: Type of module signing key to be generated
|
## choice: Type of module signing key to be generated
|
||||||
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
|
# CONFIG_MODULE_SIG_KEY_TYPE_RSA is not set
|
||||||
|
CONFIG_MODULE_SIG_KEY_TYPE_ECDSA=y
|
||||||
## end choice
|
## end choice
|
||||||
CONFIG_SYSTEM_TRUSTED_KEYRING=y
|
CONFIG_SYSTEM_TRUSTED_KEYRING=y
|
||||||
CONFIG_SYSTEM_TRUSTED_KEYS=""
|
CONFIG_SYSTEM_TRUSTED_KEYS=""
|
||||||
@@ -318,6 +317,7 @@ CONFIG_CRYPTO_TEST=m
|
|||||||
CONFIG_CRYPTO_RSA=y
|
CONFIG_CRYPTO_RSA=y
|
||||||
CONFIG_CRYPTO_DH=y
|
CONFIG_CRYPTO_DH=y
|
||||||
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
|
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
|
||||||
|
CONFIG_CRYPTO_ECDSA=y
|
||||||
CONFIG_CRYPTO_ECRDSA=m
|
CONFIG_CRYPTO_ECRDSA=m
|
||||||
CONFIG_CRYPTO_CURVE25519=m
|
CONFIG_CRYPTO_CURVE25519=m
|
||||||
CONFIG_CRYPTO_AES=y
|
CONFIG_CRYPTO_AES=y
|
||||||
@@ -338,7 +338,6 @@ CONFIG_CRYPTO_CBC=y
|
|||||||
CONFIG_CRYPTO_CTR=y
|
CONFIG_CRYPTO_CTR=y
|
||||||
CONFIG_CRYPTO_ECB=y
|
CONFIG_CRYPTO_ECB=y
|
||||||
CONFIG_CRYPTO_HCTR2=m
|
CONFIG_CRYPTO_HCTR2=m
|
||||||
CONFIG_CRYPTO_KEYWRAP=m
|
|
||||||
CONFIG_CRYPTO_LRW=m
|
CONFIG_CRYPTO_LRW=m
|
||||||
CONFIG_CRYPTO_PCBC=m
|
CONFIG_CRYPTO_PCBC=m
|
||||||
CONFIG_CRYPTO_AEGIS128=m
|
CONFIG_CRYPTO_AEGIS128=m
|
||||||
@@ -363,7 +362,6 @@ CONFIG_CRYPTO_SHA512=y
|
|||||||
CONFIG_CRYPTO_SHA3=y
|
CONFIG_CRYPTO_SHA3=y
|
||||||
CONFIG_CRYPTO_SM3_GENERIC=m
|
CONFIG_CRYPTO_SM3_GENERIC=m
|
||||||
CONFIG_CRYPTO_STREEBOG=m
|
CONFIG_CRYPTO_STREEBOG=m
|
||||||
CONFIG_CRYPTO_VMAC=m
|
|
||||||
CONFIG_CRYPTO_WP512=m
|
CONFIG_CRYPTO_WP512=m
|
||||||
CONFIG_CRYPTO_XCBC=m
|
CONFIG_CRYPTO_XCBC=m
|
||||||
CONFIG_CRYPTO_XXHASH=m
|
CONFIG_CRYPTO_XXHASH=m
|
||||||
@@ -404,6 +402,7 @@ CONFIG_ACPI=y
|
|||||||
CONFIG_ACPI_SPCR_TABLE=y
|
CONFIG_ACPI_SPCR_TABLE=y
|
||||||
CONFIG_ACPI_FPDT=y
|
CONFIG_ACPI_FPDT=y
|
||||||
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
|
CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
|
||||||
|
CONFIG_ACPI_EC=y
|
||||||
CONFIG_ACPI_BUTTON=y
|
CONFIG_ACPI_BUTTON=y
|
||||||
CONFIG_ACPI_FAN=m
|
CONFIG_ACPI_FAN=m
|
||||||
CONFIG_ACPI_TAD=m
|
CONFIG_ACPI_TAD=m
|
||||||
@@ -795,7 +794,6 @@ CONFIG_INPUT=y
|
|||||||
CONFIG_INPUT_SPARSEKMAP=m
|
CONFIG_INPUT_SPARSEKMAP=m
|
||||||
CONFIG_INPUT_MATRIXKMAP=m
|
CONFIG_INPUT_MATRIXKMAP=m
|
||||||
CONFIG_INPUT_EVDEV=m
|
CONFIG_INPUT_EVDEV=m
|
||||||
# CONFIG_INPUT_EVBUG is not set
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/input/keyboard/Kconfig
|
## file: drivers/input/keyboard/Kconfig
|
||||||
@@ -1134,6 +1132,7 @@ CONFIG_PCI_PF_STUB=m
|
|||||||
CONFIG_PCI_IOV=y
|
CONFIG_PCI_IOV=y
|
||||||
CONFIG_PCI_PRI=y
|
CONFIG_PCI_PRI=y
|
||||||
CONFIG_PCI_PASID=y
|
CONFIG_PCI_PASID=y
|
||||||
|
CONFIG_PCI_P2PDMA=y
|
||||||
## choice: PCI Express hierarchy optimization setting
|
## choice: PCI Express hierarchy optimization setting
|
||||||
# CONFIG_PCIE_BUS_TUNE_OFF is not set
|
# CONFIG_PCIE_BUS_TUNE_OFF is not set
|
||||||
CONFIG_PCIE_BUS_DEFAULT=y
|
CONFIG_PCIE_BUS_DEFAULT=y
|
||||||
@@ -1221,10 +1220,17 @@ CONFIG_PPS_CLIENT_KTIMER=m
|
|||||||
CONFIG_PPS_CLIENT_LDISC=m
|
CONFIG_PPS_CLIENT_LDISC=m
|
||||||
CONFIG_PPS_CLIENT_GPIO=m
|
CONFIG_PPS_CLIENT_GPIO=m
|
||||||
|
|
||||||
|
##
|
||||||
|
## file: drivers/pps/generators/Kconfig
|
||||||
|
##
|
||||||
|
CONFIG_PPS_GENERATOR=m
|
||||||
|
CONFIG_PPS_GENERATOR_DUMMY=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/ptp/Kconfig
|
## file: drivers/ptp/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_PTP_1588_CLOCK=m
|
CONFIG_PTP_1588_CLOCK=m
|
||||||
|
CONFIG_PTP_1588_CLOCK_VMCLOCK=m
|
||||||
CONFIG_PTP_1588_CLOCK_MOCK=m
|
CONFIG_PTP_1588_CLOCK_MOCK=m
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -1532,6 +1538,7 @@ CONFIG_VFIO_PCI=m
|
|||||||
## file: drivers/vfio/pci/virtio/Kconfig
|
## file: drivers/vfio/pci/virtio/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_VIRTIO_VFIO_PCI=m
|
CONFIG_VIRTIO_VFIO_PCI=m
|
||||||
|
CONFIG_VIRTIO_VFIO_PCI_ADMIN_LEGACY=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: drivers/vhost/Kconfig
|
## file: drivers/vhost/Kconfig
|
||||||
@@ -1794,6 +1801,7 @@ CONFIG_FAT_DEFAULT_UTF8=y
|
|||||||
CONFIG_CUSE=m
|
CONFIG_CUSE=m
|
||||||
CONFIG_FUSE_DAX=y
|
CONFIG_FUSE_DAX=y
|
||||||
CONFIG_FUSE_PASSTHROUGH=y
|
CONFIG_FUSE_PASSTHROUGH=y
|
||||||
|
CONFIG_FUSE_IO_URING=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: fs/isofs/Kconfig
|
## file: fs/isofs/Kconfig
|
||||||
@@ -2043,6 +2051,7 @@ CONFIG_FAIR_GROUP_SCHED=y
|
|||||||
CONFIG_CFS_BANDWIDTH=y
|
CONFIG_CFS_BANDWIDTH=y
|
||||||
CONFIG_CGROUP_PIDS=y
|
CONFIG_CGROUP_PIDS=y
|
||||||
CONFIG_CGROUP_RDMA=y
|
CONFIG_CGROUP_RDMA=y
|
||||||
|
CONFIG_CGROUP_DMEM=y
|
||||||
CONFIG_CGROUP_FREEZER=y
|
CONFIG_CGROUP_FREEZER=y
|
||||||
CONFIG_CGROUP_HUGETLB=y
|
CONFIG_CGROUP_HUGETLB=y
|
||||||
CONFIG_CPUSETS=y
|
CONFIG_CPUSETS=y
|
||||||
@@ -2124,9 +2133,10 @@ CONFIG_HZ_100=y
|
|||||||
## file: kernel/Kconfig.preempt
|
## file: kernel/Kconfig.preempt
|
||||||
##
|
##
|
||||||
## choice: Preemption Model
|
## choice: Preemption Model
|
||||||
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
# CONFIG_PREEMPT_RT is not set
|
|
||||||
## end choice
|
## end choice
|
||||||
|
# CONFIG_PREEMPT_RT is not set
|
||||||
# CONFIG_PREEMPT_DYNAMIC is not set
|
# CONFIG_PREEMPT_DYNAMIC is not set
|
||||||
CONFIG_SCHED_CLASS_EXT=y
|
CONFIG_SCHED_CLASS_EXT=y
|
||||||
|
|
||||||
@@ -2171,17 +2181,23 @@ CONFIG_MODULE_UNLOAD=y
|
|||||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||||
# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set
|
# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set
|
||||||
CONFIG_MODVERSIONS=y
|
CONFIG_MODVERSIONS=y
|
||||||
|
## choice: Module versioning implementation
|
||||||
|
CONFIG_GENKSYMS=y
|
||||||
|
# CONFIG_GENDWARFKSYMS is not set
|
||||||
|
## end choice
|
||||||
|
# CONFIG_EXTENDED_MODVERSIONS is not set
|
||||||
|
CONFIG_BASIC_MODVERSIONS=y
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_MODULE_SIG=y
|
CONFIG_MODULE_SIG=y
|
||||||
# CONFIG_MODULE_SIG_FORCE is not set
|
# CONFIG_MODULE_SIG_FORCE is not set
|
||||||
CONFIG_MODULE_SIG_ALL=y
|
CONFIG_MODULE_SIG_ALL=y
|
||||||
## choice: Hash algorithm to sign modules
|
## choice: Hash algorithm to sign modules
|
||||||
# CONFIG_MODULE_SIG_SHA1 is not set
|
# CONFIG_MODULE_SIG_SHA1 is not set
|
||||||
CONFIG_MODULE_SIG_SHA256=y
|
# CONFIG_MODULE_SIG_SHA256 is not set
|
||||||
# CONFIG_MODULE_SIG_SHA384 is not set
|
# CONFIG_MODULE_SIG_SHA384 is not set
|
||||||
# CONFIG_MODULE_SIG_SHA512 is not set
|
# CONFIG_MODULE_SIG_SHA512 is not set
|
||||||
# CONFIG_MODULE_SIG_SHA3_256 is not set
|
# CONFIG_MODULE_SIG_SHA3_256 is not set
|
||||||
# CONFIG_MODULE_SIG_SHA3_384 is not set
|
CONFIG_MODULE_SIG_SHA3_384=y
|
||||||
# CONFIG_MODULE_SIG_SHA3_512 is not set
|
# CONFIG_MODULE_SIG_SHA3_512 is not set
|
||||||
## end choice
|
## end choice
|
||||||
CONFIG_MODULE_COMPRESS=y
|
CONFIG_MODULE_COMPRESS=y
|
||||||
@@ -2252,6 +2268,7 @@ CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125
|
|||||||
CONFIG_FTRACE=y
|
CONFIG_FTRACE=y
|
||||||
CONFIG_FUNCTION_TRACER=y
|
CONFIG_FUNCTION_TRACER=y
|
||||||
CONFIG_FUNCTION_GRAPH_TRACER=y
|
CONFIG_FUNCTION_GRAPH_TRACER=y
|
||||||
|
# CONFIG_FUNCTION_GRAPH_RETADDR is not set
|
||||||
CONFIG_DYNAMIC_FTRACE=y
|
CONFIG_DYNAMIC_FTRACE=y
|
||||||
CONFIG_FPROBE=y
|
CONFIG_FPROBE=y
|
||||||
# CONFIG_FUNCTION_PROFILER is not set
|
# CONFIG_FUNCTION_PROFILER is not set
|
||||||
@@ -2297,18 +2314,12 @@ CONFIG_CRC_T10DIF=y
|
|||||||
CONFIG_CRC64_ROCKSOFT=y
|
CONFIG_CRC64_ROCKSOFT=y
|
||||||
CONFIG_CRC_ITU_T=m
|
CONFIG_CRC_ITU_T=m
|
||||||
CONFIG_CRC32=y
|
CONFIG_CRC32=y
|
||||||
# CONFIG_CRC32_SELFTEST is not set
|
|
||||||
## choice: CRC32 implementation
|
|
||||||
CONFIG_CRC32_SLICEBY8=y
|
|
||||||
# CONFIG_CRC32_SLICEBY4 is not set
|
|
||||||
# CONFIG_CRC32_SARWATE is not set
|
|
||||||
# CONFIG_CRC32_BIT is not set
|
|
||||||
## end choice
|
|
||||||
CONFIG_CRC64=y
|
CONFIG_CRC64=y
|
||||||
CONFIG_CRC4=m
|
CONFIG_CRC4=m
|
||||||
CONFIG_CRC7=m
|
CONFIG_CRC7=m
|
||||||
CONFIG_LIBCRC32C=y
|
CONFIG_LIBCRC32C=y
|
||||||
CONFIG_CRC8=m
|
CONFIG_CRC8=m
|
||||||
|
CONFIG_CRC_OPTIMIZATIONS=y
|
||||||
# CONFIG_RANDOM32_SELFTEST is not set
|
# CONFIG_RANDOM32_SELFTEST is not set
|
||||||
# CONFIG_GLOB_SELFTEST is not set
|
# CONFIG_GLOB_SELFTEST is not set
|
||||||
CONFIG_IRQ_POLL=y
|
CONFIG_IRQ_POLL=y
|
||||||
@@ -2512,6 +2523,12 @@ CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
|
|||||||
# CONFIG_COMPAT_BRK is not set
|
# CONFIG_COMPAT_BRK is not set
|
||||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||||
CONFIG_MEMORY_HOTPLUG=y
|
CONFIG_MEMORY_HOTPLUG=y
|
||||||
|
## choice: Memory Hotplug Default Online Type
|
||||||
|
CONFIG_MHP_DEFAULT_ONLINE_TYPE_OFFLINE=y
|
||||||
|
# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_AUTO is not set
|
||||||
|
# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_KERNEL is not set
|
||||||
|
# CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_MOVABLE is not set
|
||||||
|
## end choice
|
||||||
CONFIG_MEMORY_HOTREMOVE=y
|
CONFIG_MEMORY_HOTREMOVE=y
|
||||||
CONFIG_BALLOON_COMPACTION=y
|
CONFIG_BALLOON_COMPACTION=y
|
||||||
CONFIG_COMPACTION=y
|
CONFIG_COMPACTION=y
|
||||||
@@ -2548,6 +2565,7 @@ CONFIG_PTE_MARKER_UFFD_WP=y
|
|||||||
CONFIG_LRU_GEN=y
|
CONFIG_LRU_GEN=y
|
||||||
CONFIG_LRU_GEN_ENABLED=y
|
CONFIG_LRU_GEN_ENABLED=y
|
||||||
# CONFIG_LRU_GEN_STATS is not set
|
# CONFIG_LRU_GEN_STATS is not set
|
||||||
|
CONFIG_PT_RECLAIM=y
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: mm/Kconfig.debug
|
## file: mm/Kconfig.debug
|
||||||
@@ -2593,6 +2611,7 @@ CONFIG_ETHTOOL_NETLINK=y
|
|||||||
# CONFIG_NET_DEV_REFCNT_TRACKER is not set
|
# CONFIG_NET_DEV_REFCNT_TRACKER is not set
|
||||||
# CONFIG_NET_NS_REFCNT_TRACKER is not set
|
# CONFIG_NET_NS_REFCNT_TRACKER is not set
|
||||||
# CONFIG_DEBUG_NET is not set
|
# CONFIG_DEBUG_NET is not set
|
||||||
|
# CONFIG_DEBUG_NET_SMALL_RTNL is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: net/8021q/Kconfig
|
## file: net/8021q/Kconfig
|
||||||
@@ -2627,6 +2646,7 @@ CONFIG_NF_TABLES_BRIDGE=m
|
|||||||
CONFIG_NFT_BRIDGE_META=m
|
CONFIG_NFT_BRIDGE_META=m
|
||||||
CONFIG_NFT_BRIDGE_REJECT=m
|
CONFIG_NFT_BRIDGE_REJECT=m
|
||||||
CONFIG_NF_CONNTRACK_BRIDGE=m
|
CONFIG_NF_CONNTRACK_BRIDGE=m
|
||||||
|
# CONFIG_BRIDGE_NF_EBTABLES_LEGACY is not set
|
||||||
# CONFIG_BRIDGE_NF_EBTABLES is not set
|
# CONFIG_BRIDGE_NF_EBTABLES is not set
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -2731,6 +2751,7 @@ CONFIG_TCP_MD5SIG=y
|
|||||||
##
|
##
|
||||||
## file: net/ipv4/netfilter/Kconfig
|
## file: net/ipv4/netfilter/Kconfig
|
||||||
##
|
##
|
||||||
|
CONFIG_IP_NF_IPTABLES_LEGACY=m
|
||||||
CONFIG_NF_SOCKET_IPV4=m
|
CONFIG_NF_SOCKET_IPV4=m
|
||||||
CONFIG_NF_TPROXY_IPV4=m
|
CONFIG_NF_TPROXY_IPV4=m
|
||||||
CONFIG_NF_TABLES_IPV4=y
|
CONFIG_NF_TABLES_IPV4=y
|
||||||
@@ -2759,6 +2780,7 @@ CONFIG_IP_NF_TARGET_ECN=m
|
|||||||
# CONFIG_IP_NF_TARGET_TTL is not set
|
# CONFIG_IP_NF_TARGET_TTL is not set
|
||||||
CONFIG_IP_NF_RAW=m
|
CONFIG_IP_NF_RAW=m
|
||||||
CONFIG_IP_NF_SECURITY=m
|
CONFIG_IP_NF_SECURITY=m
|
||||||
|
CONFIG_IP_NF_ARPTABLES=m
|
||||||
CONFIG_IP_NF_ARPFILTER=m
|
CONFIG_IP_NF_ARPFILTER=m
|
||||||
CONFIG_IP_NF_ARP_MANGLE=m
|
CONFIG_IP_NF_ARP_MANGLE=m
|
||||||
|
|
||||||
@@ -2793,6 +2815,7 @@ CONFIG_IPV6_SEG6_HMAC=y
|
|||||||
##
|
##
|
||||||
## file: net/ipv6/netfilter/Kconfig
|
## file: net/ipv6/netfilter/Kconfig
|
||||||
##
|
##
|
||||||
|
CONFIG_IP6_NF_IPTABLES_LEGACY=m
|
||||||
CONFIG_NF_SOCKET_IPV6=m
|
CONFIG_NF_SOCKET_IPV6=m
|
||||||
CONFIG_NF_TPROXY_IPV6=m
|
CONFIG_NF_TPROXY_IPV6=m
|
||||||
CONFIG_NF_TABLES_IPV6=y
|
CONFIG_NF_TABLES_IPV6=y
|
||||||
@@ -3126,6 +3149,7 @@ CONFIG_TLS_DEVICE=y
|
|||||||
## file: net/unix/Kconfig
|
## file: net/unix/Kconfig
|
||||||
##
|
##
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
CONFIG_AF_UNIX_OOB=y
|
||||||
CONFIG_UNIX_DIAG=y
|
CONFIG_UNIX_DIAG=y
|
||||||
|
|
||||||
##
|
##
|
||||||
@@ -3154,6 +3178,7 @@ CONFIG_XFRM_MIGRATE=y
|
|||||||
CONFIG_XFRM_STATISTICS=y
|
CONFIG_XFRM_STATISTICS=y
|
||||||
CONFIG_NET_KEY=m
|
CONFIG_NET_KEY=m
|
||||||
CONFIG_NET_KEY_MIGRATE=y
|
CONFIG_NET_KEY_MIGRATE=y
|
||||||
|
CONFIG_XFRM_IPTFS=m
|
||||||
|
|
||||||
##
|
##
|
||||||
## file: samples/Kconfig
|
## file: samples/Kconfig
|
||||||
@@ -3324,8 +3349,8 @@ CONFIG_ACPI_THERMAL_LIB=y
|
|||||||
CONFIG_ACPI_THERMAL_REL=m
|
CONFIG_ACPI_THERMAL_REL=m
|
||||||
CONFIG_ACPI_VIOT=y
|
CONFIG_ACPI_VIOT=y
|
||||||
CONFIG_ACPI_WATCHDOG=y
|
CONFIG_ACPI_WATCHDOG=y
|
||||||
CONFIG_AF_UNIX_OOB=y
|
|
||||||
CONFIG_AMD_NB=y
|
CONFIG_AMD_NB=y
|
||||||
|
CONFIG_AMD_NODE=y
|
||||||
CONFIG_APERTURE_HELPERS=y
|
CONFIG_APERTURE_HELPERS=y
|
||||||
CONFIG_ARCH_CLOCKSOURCE_INIT=y
|
CONFIG_ARCH_CLOCKSOURCE_INIT=y
|
||||||
CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y
|
CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y
|
||||||
@@ -3346,6 +3371,8 @@ CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y
|
|||||||
CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y
|
CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y
|
||||||
CONFIG_ARCH_HAS_CPU_PASID=y
|
CONFIG_ARCH_HAS_CPU_PASID=y
|
||||||
CONFIG_ARCH_HAS_CPU_RELAX=y
|
CONFIG_ARCH_HAS_CPU_RELAX=y
|
||||||
|
CONFIG_ARCH_HAS_CRC32=y
|
||||||
|
CONFIG_ARCH_HAS_CRC_T10DIF=y
|
||||||
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
|
CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
|
||||||
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
|
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
|
||||||
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
|
CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
|
||||||
@@ -3370,6 +3397,7 @@ CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
|
|||||||
CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
|
CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
|
||||||
CONFIG_ARCH_HAS_PKEYS=y
|
CONFIG_ARCH_HAS_PKEYS=y
|
||||||
CONFIG_ARCH_HAS_PMEM_API=y
|
CONFIG_ARCH_HAS_PMEM_API=y
|
||||||
|
CONFIG_ARCH_HAS_PREEMPT_LAZY=y
|
||||||
CONFIG_ARCH_HAS_PTE_DEVMAP=y
|
CONFIG_ARCH_HAS_PTE_DEVMAP=y
|
||||||
CONFIG_ARCH_HAS_PTE_SPECIAL=y
|
CONFIG_ARCH_HAS_PTE_SPECIAL=y
|
||||||
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
|
CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
|
||||||
@@ -3401,6 +3429,7 @@ CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
|||||||
CONFIG_ARCH_STACKWALK=y
|
CONFIG_ARCH_STACKWALK=y
|
||||||
CONFIG_ARCH_SUPPORTS_ACPI=y
|
CONFIG_ARCH_SUPPORTS_ACPI=y
|
||||||
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
|
CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y
|
||||||
|
CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y
|
||||||
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
|
CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
|
||||||
CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y
|
CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y
|
||||||
CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y
|
CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y
|
||||||
@@ -3422,6 +3451,8 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
|
|||||||
CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
|
CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
|
||||||
CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y
|
CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y
|
||||||
CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y
|
CONFIG_ARCH_SUPPORTS_PMD_PFNMAP=y
|
||||||
|
CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y
|
||||||
|
CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
|
||||||
CONFIG_ARCH_SUPPORTS_PUD_PFNMAP=y
|
CONFIG_ARCH_SUPPORTS_PUD_PFNMAP=y
|
||||||
CONFIG_ARCH_SUPPORTS_RT=y
|
CONFIG_ARCH_SUPPORTS_RT=y
|
||||||
CONFIG_ARCH_SUPPORTS_UPROBES=y
|
CONFIG_ARCH_SUPPORTS_UPROBES=y
|
||||||
@@ -3474,6 +3505,7 @@ CONFIG_BOOT_VESA_SUPPORT=y
|
|||||||
CONFIG_BPF=y
|
CONFIG_BPF=y
|
||||||
CONFIG_BPF_EVENTS=y
|
CONFIG_BPF_EVENTS=y
|
||||||
CONFIG_BPF_JIT_DEFAULT_ON=y
|
CONFIG_BPF_JIT_DEFAULT_ON=y
|
||||||
|
CONFIG_BROADCAST_TLB_FLUSH=y
|
||||||
CONFIG_BUFFER_HEAD=y
|
CONFIG_BUFFER_HEAD=y
|
||||||
CONFIG_BUILDTIME_MCOUNT_SORT=y
|
CONFIG_BUILDTIME_MCOUNT_SORT=y
|
||||||
CONFIG_BUILDTIME_TABLE_SORT=y
|
CONFIG_BUILDTIME_TABLE_SORT=y
|
||||||
@@ -3498,6 +3530,8 @@ CONFIG_CONTIG_ALLOC=y
|
|||||||
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
CONFIG_CPU_FREQ_GOV_ATTR_SET=y
|
||||||
CONFIG_CPU_FREQ_GOV_COMMON=y
|
CONFIG_CPU_FREQ_GOV_COMMON=y
|
||||||
CONFIG_CPU_RMAP=y
|
CONFIG_CPU_RMAP=y
|
||||||
|
CONFIG_CRC32_ARCH=y
|
||||||
|
CONFIG_CRC_T10DIF_ARCH=y
|
||||||
CONFIG_CRYPTO_ACOMP2=y
|
CONFIG_CRYPTO_ACOMP2=y
|
||||||
CONFIG_CRYPTO_AEAD=m
|
CONFIG_CRYPTO_AEAD=m
|
||||||
CONFIG_CRYPTO_AEAD2=y
|
CONFIG_CRYPTO_AEAD2=y
|
||||||
@@ -3513,6 +3547,7 @@ CONFIG_CRYPTO_BLOWFISH_COMMON=m
|
|||||||
CONFIG_CRYPTO_CAST_COMMON=m
|
CONFIG_CRYPTO_CAST_COMMON=m
|
||||||
CONFIG_CRYPTO_DRBG=y
|
CONFIG_CRYPTO_DRBG=y
|
||||||
CONFIG_CRYPTO_DRBG_HMAC=y
|
CONFIG_CRYPTO_DRBG_HMAC=y
|
||||||
|
CONFIG_CRYPTO_ECC=y
|
||||||
CONFIG_CRYPTO_ENGINE=m
|
CONFIG_CRYPTO_ENGINE=m
|
||||||
CONFIG_CRYPTO_GENIV=m
|
CONFIG_CRYPTO_GENIV=m
|
||||||
CONFIG_CRYPTO_HASH=y
|
CONFIG_CRYPTO_HASH=y
|
||||||
@@ -3524,11 +3559,12 @@ CONFIG_CRYPTO_KDF800108_CTR=y
|
|||||||
CONFIG_CRYPTO_KPP=y
|
CONFIG_CRYPTO_KPP=y
|
||||||
CONFIG_CRYPTO_KPP2=y
|
CONFIG_CRYPTO_KPP2=y
|
||||||
CONFIG_CRYPTO_LIB_AES=y
|
CONFIG_CRYPTO_LIB_AES=y
|
||||||
|
CONFIG_CRYPTO_LIB_AESGCM=y
|
||||||
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
|
||||||
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
|
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
|
||||||
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
|
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
|
||||||
CONFIG_CRYPTO_LIB_DES=m
|
CONFIG_CRYPTO_LIB_DES=m
|
||||||
CONFIG_CRYPTO_LIB_GF128MUL=m
|
CONFIG_CRYPTO_LIB_GF128MUL=y
|
||||||
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
|
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
|
||||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
|
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
|
||||||
CONFIG_CRYPTO_LIB_SHA1=y
|
CONFIG_CRYPTO_LIB_SHA1=y
|
||||||
@@ -3693,6 +3729,7 @@ CONFIG_HAS_DMA=y
|
|||||||
CONFIG_HAS_IOMEM=y
|
CONFIG_HAS_IOMEM=y
|
||||||
CONFIG_HAS_IOPORT=y
|
CONFIG_HAS_IOPORT=y
|
||||||
CONFIG_HAS_IOPORT_MAP=y
|
CONFIG_HAS_IOPORT_MAP=y
|
||||||
|
CONFIG_HAS_SECURITY_AUDIT=y
|
||||||
CONFIG_HAVE_ACPI_APEI=y
|
CONFIG_HAVE_ACPI_APEI=y
|
||||||
CONFIG_HAVE_ACPI_APEI_NMI=y
|
CONFIG_HAVE_ACPI_APEI_NMI=y
|
||||||
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
|
CONFIG_HAVE_ALIGNED_STRUCT_PAGE=y
|
||||||
@@ -3745,10 +3782,12 @@ CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
|
|||||||
CONFIG_HAVE_EISA=y
|
CONFIG_HAVE_EISA=y
|
||||||
CONFIG_HAVE_EXIT_THREAD=y
|
CONFIG_HAVE_EXIT_THREAD=y
|
||||||
CONFIG_HAVE_FENTRY=y
|
CONFIG_HAVE_FENTRY=y
|
||||||
|
CONFIG_HAVE_FTRACE_GRAPH_FUNC=y
|
||||||
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
|
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
|
||||||
|
CONFIG_HAVE_FTRACE_REGS_HAVING_PT_REGS=y
|
||||||
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
|
CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
|
||||||
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
|
CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
|
||||||
CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
|
CONFIG_HAVE_FUNCTION_GRAPH_FREGS=y
|
||||||
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
|
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
|
||||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
CONFIG_HAVE_GCC_PLUGINS=y
|
CONFIG_HAVE_GCC_PLUGINS=y
|
||||||
@@ -3858,11 +3897,6 @@ CONFIG_INET_TCP_DIAG=y
|
|||||||
CONFIG_INET_TUNNEL=m
|
CONFIG_INET_TUNNEL=m
|
||||||
CONFIG_INET_XFRM_TUNNEL=m
|
CONFIG_INET_XFRM_TUNNEL=m
|
||||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
CONFIG_INLINE_READ_UNLOCK=y
|
|
||||||
CONFIG_INLINE_READ_UNLOCK_IRQ=y
|
|
||||||
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
|
|
||||||
CONFIG_INLINE_WRITE_UNLOCK=y
|
|
||||||
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
|
|
||||||
CONFIG_INPUT_VIVALDIFMAP=y
|
CONFIG_INPUT_VIVALDIFMAP=y
|
||||||
CONFIG_INSTRUCTION_DECODER=y
|
CONFIG_INSTRUCTION_DECODER=y
|
||||||
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
CONFIG_INTEL_IOMMU_FLOPPY_WA=y
|
||||||
@@ -3878,7 +3912,6 @@ CONFIG_IOMMU_IO_PGTABLE=y
|
|||||||
CONFIG_IOMMU_MM_DATA=y
|
CONFIG_IOMMU_MM_DATA=y
|
||||||
CONFIG_IOMMU_SVA=y
|
CONFIG_IOMMU_SVA=y
|
||||||
CONFIG_IO_WQ=y
|
CONFIG_IO_WQ=y
|
||||||
CONFIG_IP6_NF_IPTABLES_LEGACY=m
|
|
||||||
CONFIG_IPV6_FOU=m
|
CONFIG_IPV6_FOU=m
|
||||||
CONFIG_IPV6_FOU_TUNNEL=m
|
CONFIG_IPV6_FOU_TUNNEL=m
|
||||||
CONFIG_IPV6_NDISC_NODETYPE=y
|
CONFIG_IPV6_NDISC_NODETYPE=y
|
||||||
@@ -3886,8 +3919,6 @@ CONFIG_IPV6_SEG6_BPF=y
|
|||||||
CONFIG_IPVLAN_L3S=y
|
CONFIG_IPVLAN_L3S=y
|
||||||
CONFIG_IP_DCCP_TFRC_LIB=y
|
CONFIG_IP_DCCP_TFRC_LIB=y
|
||||||
CONFIG_IP_MROUTE_COMMON=y
|
CONFIG_IP_MROUTE_COMMON=y
|
||||||
CONFIG_IP_NF_ARPTABLES=m
|
|
||||||
CONFIG_IP_NF_IPTABLES_LEGACY=m
|
|
||||||
CONFIG_IP_ROUTE_CLASSID=y
|
CONFIG_IP_ROUTE_CLASSID=y
|
||||||
CONFIG_IRQ_BYPASS_MANAGER=y
|
CONFIG_IRQ_BYPASS_MANAGER=y
|
||||||
CONFIG_IRQ_DOMAIN=y
|
CONFIG_IRQ_DOMAIN=y
|
||||||
@@ -3904,6 +3935,7 @@ CONFIG_KRETPROBE_ON_RETHOOK=y
|
|||||||
CONFIG_KVM_ASYNC_PF=y
|
CONFIG_KVM_ASYNC_PF=y
|
||||||
CONFIG_KVM_COMMON=y
|
CONFIG_KVM_COMMON=y
|
||||||
CONFIG_KVM_COMPAT=y
|
CONFIG_KVM_COMPAT=y
|
||||||
|
CONFIG_KVM_ELIDE_TLB_FLUSH_IF_YOUNG=y
|
||||||
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
|
CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
|
||||||
CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y
|
CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y
|
||||||
CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES=y
|
CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES=y
|
||||||
@@ -3939,6 +3971,7 @@ CONFIG_MEMORY_ISOLATION=y
|
|||||||
CONFIG_MEMREGION=y
|
CONFIG_MEMREGION=y
|
||||||
CONFIG_MHP_MEMMAP_ON_MEMORY=y
|
CONFIG_MHP_MEMMAP_ON_MEMORY=y
|
||||||
CONFIG_MICROCODE=y
|
CONFIG_MICROCODE=y
|
||||||
|
CONFIG_MIN_HEAP=y
|
||||||
CONFIG_MLX4_CORE=m
|
CONFIG_MLX4_CORE=m
|
||||||
CONFIG_MMCONF_FAM10H=y
|
CONFIG_MMCONF_FAM10H=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
@@ -3950,7 +3983,7 @@ CONFIG_MMU_NOTIFIER=y
|
|||||||
CONFIG_MODULES_TREE_LOOKUP=y
|
CONFIG_MODULES_TREE_LOOKUP=y
|
||||||
CONFIG_MODULES_USE_ELF_RELA=y
|
CONFIG_MODULES_USE_ELF_RELA=y
|
||||||
CONFIG_MODULE_SIG_FORMAT=y
|
CONFIG_MODULE_SIG_FORMAT=y
|
||||||
CONFIG_MODULE_SIG_HASH="sha256"
|
CONFIG_MODULE_SIG_HASH="sha3-384"
|
||||||
CONFIG_MPILIB=y
|
CONFIG_MPILIB=y
|
||||||
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
CONFIG_MUTEX_SPIN_ON_OWNER=y
|
||||||
CONFIG_ND_CLAIM=y
|
CONFIG_ND_CLAIM=y
|
||||||
@@ -3981,6 +4014,7 @@ CONFIG_NET_RX_BUSY_POLL=y
|
|||||||
CONFIG_NET_SCH_FIFO=y
|
CONFIG_NET_SCH_FIFO=y
|
||||||
CONFIG_NET_SCH_MQPRIO_LIB=m
|
CONFIG_NET_SCH_MQPRIO_LIB=m
|
||||||
CONFIG_NET_SELFTESTS=m
|
CONFIG_NET_SELFTESTS=m
|
||||||
|
CONFIG_NET_SHAPER=y
|
||||||
CONFIG_NET_SOCK_MSG=y
|
CONFIG_NET_SOCK_MSG=y
|
||||||
CONFIG_NET_UDP_TUNNEL=m
|
CONFIG_NET_UDP_TUNNEL=m
|
||||||
CONFIG_NET_XGRESS=y
|
CONFIG_NET_XGRESS=y
|
||||||
@@ -4155,6 +4189,7 @@ CONFIG_UCS2_STRING=y
|
|||||||
CONFIG_UEFI_CPER=y
|
CONFIG_UEFI_CPER=y
|
||||||
CONFIG_UEFI_CPER_X86=y
|
CONFIG_UEFI_CPER_X86=y
|
||||||
CONFIG_UNACCEPTED_MEMORY=y
|
CONFIG_UNACCEPTED_MEMORY=y
|
||||||
|
CONFIG_UNION_FIND=y
|
||||||
CONFIG_UPROBES=y
|
CONFIG_UPROBES=y
|
||||||
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||||
CONFIG_USER_RETURN_NOTIFIER=y
|
CONFIG_USER_RETURN_NOTIFIER=y
|
||||||
@@ -4186,7 +4221,6 @@ CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=m
|
|||||||
CONFIG_X86=y
|
CONFIG_X86=y
|
||||||
CONFIG_X86_64=y
|
CONFIG_X86_64=y
|
||||||
CONFIG_X86_64_SMP=y
|
CONFIG_X86_64_SMP=y
|
||||||
CONFIG_X86_BROADCAST_TLB_FLUSH=y
|
|
||||||
CONFIG_X86_CMOV=y
|
CONFIG_X86_CMOV=y
|
||||||
CONFIG_X86_CMPXCHG64=y
|
CONFIG_X86_CMPXCHG64=y
|
||||||
CONFIG_X86_DEBUGCTLMSR=y
|
CONFIG_X86_DEBUGCTLMSR=y
|
||||||
|
109
debian/copyright
vendored
109
debian/copyright
vendored
@@ -25,43 +25,43 @@ Copyright: 1996-2006 Manoj Srivastava
|
|||||||
License: GPL-2
|
License: GPL-2
|
||||||
|
|
||||||
Files:
|
Files:
|
||||||
arch/arm/boot/dts/armada-370.dtsi
|
arch/arm/boot/dts/allwinner/axp*.dts*
|
||||||
arch/arm/boot/dts/armada-370-d*.dts*
|
arch/arm/boot/dts/allwinner/sun*.dts*
|
||||||
arch/arm/boot/dts/armada-370-mirabox.dts
|
arch/arm/boot/dts/amlogic/meson*.dts*
|
||||||
arch/arm/boot/dts/armada-370-netgear*.dts*
|
arch/arm/boot/dts/arm/mps2*.dts*
|
||||||
arch/arm/boot/dts/armada-370-rd.dts
|
arch/arm/boot/dts/axis/artpec6.dtsi
|
||||||
arch/arm/boot/dts/armada-370-synology-ds213j.dts
|
arch/arm/boot/dts/cnxt/cx92755*.dts*
|
||||||
arch/arm/boot/dts/armada-375*.dts*
|
|
||||||
arch/arm/boot/dts/armada-38*.dts*
|
|
||||||
arch/arm/boot/dts/armada-39*.dts*
|
|
||||||
arch/arm/boot/dts/armada-xp*.dts*
|
|
||||||
arch/arm/boot/dts/artpec6.dtsi
|
|
||||||
arch/arm/boot/dts/at91sam9260ek.dts
|
|
||||||
arch/arm/boot/dts/at91sam9xe.dtsi
|
|
||||||
arch/arm/boot/dts/axp*.dts*
|
|
||||||
arch/arm/boot/dts/berlin2*.dts*
|
|
||||||
arch/arm/boot/dts/cros-ec-sbs.dtsi
|
arch/arm/boot/dts/cros-ec-sbs.dtsi
|
||||||
arch/arm/boot/dts/cx92755*.dts*
|
arch/arm/boot/dts/intel/socfpga/socfpga_cyclone5_vining_fpga.dts
|
||||||
arch/arm/boot/dts/imx7*.dts*
|
arch/arm/boot/dts/marvell/armada-370-d*.dts*
|
||||||
arch/arm/boot/dts/kirkwood-linkstation*.dts*
|
arch/arm/boot/dts/marvell/armada-370-mirabox.dts
|
||||||
arch/arm/boot/dts/ls*.dts*
|
arch/arm/boot/dts/marvell/armada-370-netgear*.dts*
|
||||||
arch/arm/boot/dts/meson*.dts*
|
arch/arm/boot/dts/marvell/armada-370-rd.dts
|
||||||
arch/arm/boot/dts/mps2*.dts*
|
arch/arm/boot/dts/marvell/armada-370-synology-ds213j.dts
|
||||||
arch/arm/boot/dts/mvebu-linkstation-*.dts*
|
arch/arm/boot/dts/marvell/armada-370.dtsi
|
||||||
arch/arm/boot/dts/orion5x-kuroboxpro.dts
|
arch/arm/boot/dts/marvell/armada-375*.dts*
|
||||||
arch/arm/boot/dts/orion5x-linkstation*.dts*
|
arch/arm/boot/dts/marvell/armada-38*.dts*
|
||||||
arch/arm/boot/dts/orion5x-ls*.dts*
|
arch/arm/boot/dts/marvell/armada-39*.dts*
|
||||||
arch/arm/boot/dts/qcom-mdm9615*.dts*
|
arch/arm/boot/dts/marvell/armada-xp*.dts*
|
||||||
arch/arm/boot/dts/rk*.dts
|
arch/arm/boot/dts/marvell/kirkwood-linkstation*.dts*
|
||||||
arch/arm/boot/dts/sama5d2.dtsi
|
arch/arm/boot/dts/marvell/mvebu-linkstation-*.dts*
|
||||||
arch/arm/boot/dts/sama5d4.dtsi
|
arch/arm/boot/dts/marvell/orion5x-kuroboxpro.dts
|
||||||
arch/arm/boot/dts/socfpga_cyclone5_vining_fpga.dts
|
arch/arm/boot/dts/marvell/orion5x-linkstation*.dts*
|
||||||
arch/arm/boot/dts/stm*.dts*
|
arch/arm/boot/dts/marvell/orion5x-ls*.dts*
|
||||||
arch/arm/boot/dts/sun*.dts*
|
arch/arm/boot/dts/microchip/at91sam9260ek.dts
|
||||||
arch/arm/boot/dts/tegra124-apalis*.dts*
|
arch/arm/boot/dts/microchip/at91sam9xe.dtsi
|
||||||
arch/arm/boot/dts/uniphier-*.dts*
|
arch/arm/boot/dts/microchip/sama5d2.dtsi
|
||||||
arch/arm/boot/dts/vf610-colibri*.dts*
|
arch/arm/boot/dts/microchip/sama5d4.dtsi
|
||||||
arch/arm/boot/dts/vf610m*.dts*
|
arch/arm/boot/dts/nvidia/tegra124-apalis*.dts*
|
||||||
|
arch/arm/boot/dts/nxp/imx/imx7*.dts*
|
||||||
|
arch/arm/boot/dts/nxp/ls/ls*.dts*
|
||||||
|
arch/arm/boot/dts/nxp/vf/vf610-colibri*.dts*
|
||||||
|
arch/arm/boot/dts/nxp/vf/vf610m*.dts*
|
||||||
|
arch/arm/boot/dts/qcom/qcom-mdm9615*.dts*
|
||||||
|
arch/arm/boot/dts/rockchip/rk*.dts
|
||||||
|
arch/arm/boot/dts/socionext/uniphier-*.dts*
|
||||||
|
arch/arm/boot/dts/st/stm*.dts*
|
||||||
|
arch/arm/boot/dts/synaptics/berlin2*.dts*
|
||||||
arch/arm64/boot/dts/allwinner/*.dts*
|
arch/arm64/boot/dts/allwinner/*.dts*
|
||||||
arch/arm64/boot/dts/amlogic/*.dts*
|
arch/arm64/boot/dts/amlogic/*.dts*
|
||||||
arch/arm64/boot/dts/cavium/thunder-*.dts*
|
arch/arm64/boot/dts/cavium/thunder-*.dts*
|
||||||
@@ -78,43 +78,6 @@ Files:
|
|||||||
Copyright: 2012-2018 Linus Torvalds and many others
|
Copyright: 2012-2018 Linus Torvalds and many others
|
||||||
License: GPL-2+-or-X11
|
License: GPL-2+-or-X11
|
||||||
|
|
||||||
Files: drivers/crypto/vmx/*.pl
|
|
||||||
Copyright: 2006,2014 Andy Polyakov <appro@openssl.org>
|
|
||||||
License: CRYPTOGAMS
|
|
||||||
All rights reserved.
|
|
||||||
.
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions
|
|
||||||
are met:
|
|
||||||
.
|
|
||||||
* Redistributions of source code must retain copyright notices, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
* Redistributions in binary form must reproduce the above copyright
|
|
||||||
notice, this list of conditions and the following disclaimer in the
|
|
||||||
documentation and/or other materials provided with the
|
|
||||||
distribution.
|
|
||||||
* Neither the name of the CRYPTOGAMS nor the names of its copyright
|
|
||||||
holder and contributors may be used to endorse or promote products
|
|
||||||
derived from this software without specific prior written
|
|
||||||
permission.
|
|
||||||
.
|
|
||||||
ALTERNATIVELY, provided that this notice is retained in full, this
|
|
||||||
product may be distributed under the terms of the GNU General Public
|
|
||||||
License (GPL), in which case the provisions of the GPL apply INSTEAD
|
|
||||||
OF those given above.
|
|
||||||
.
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS
|
|
||||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
Files: fs/nls/mac-*
|
Files: fs/nls/mac-*
|
||||||
Copyright: 1991-2012 Unicode, Inc.
|
Copyright: 1991-2012 Unicode, Inc.
|
||||||
License: Unicode-data
|
License: Unicode-data
|
||||||
|
10
debian/lib/python/debian_linux/config_v2.py
vendored
10
debian/lib/python/debian_linux/config_v2.py
vendored
@@ -11,7 +11,6 @@ from pathlib import Path
|
|||||||
from typing import (
|
from typing import (
|
||||||
Optional,
|
Optional,
|
||||||
Self,
|
Self,
|
||||||
TypeVar,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
import dacite
|
import dacite
|
||||||
@@ -157,9 +156,6 @@ class ConfigBase:
|
|||||||
return config
|
return config
|
||||||
|
|
||||||
|
|
||||||
ConfigT = TypeVar('ConfigT', bound=ConfigBase)
|
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
class Config(ConfigBase):
|
class Config(ConfigBase):
|
||||||
# Disable basic fields
|
# Disable basic fields
|
||||||
@@ -227,9 +223,9 @@ class Config(ConfigBase):
|
|||||||
return config
|
return config
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _read_hierarchy(
|
def _read_hierarchy[T: ConfigBase](
|
||||||
cls, bases: Iterable[Path], orig: Iterable[ConfigT],
|
cls, bases: Iterable[Path], orig: Iterable[T],
|
||||||
) -> Iterable[ConfigT]:
|
) -> Iterable[T]:
|
||||||
for i in orig:
|
for i in orig:
|
||||||
try:
|
try:
|
||||||
assert i.path is not None
|
assert i.path is not None
|
||||||
|
@@ -5,22 +5,16 @@ import re
|
|||||||
from typing import (
|
from typing import (
|
||||||
Any,
|
Any,
|
||||||
Callable,
|
Callable,
|
||||||
Generic,
|
|
||||||
IO,
|
IO,
|
||||||
Iterable,
|
Iterable,
|
||||||
Optional,
|
Optional,
|
||||||
overload,
|
overload,
|
||||||
TypeVar,
|
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
)
|
)
|
||||||
|
|
||||||
_T = TypeVar('_T')
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from dataclasses import _DataclassT
|
from _typeshed import DataclassInstance as _DataclassInstance
|
||||||
else:
|
|
||||||
# We can only get to _DataclassT during type checking, use a generic type during runtime
|
|
||||||
_DataclassT = _T
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'field_deb822',
|
'field_deb822',
|
||||||
@@ -30,61 +24,61 @@ __all__ = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class Deb822Field(Generic[_T]):
|
class Deb822Field[T]:
|
||||||
key: str
|
key: str
|
||||||
load: Optional[Callable[[str], _T]]
|
load: Optional[Callable[[str], T]]
|
||||||
dump: Optional[Callable[[_T], str]]
|
dump: Optional[Callable[[T], str]]
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, *,
|
self, *,
|
||||||
key: str,
|
key: str,
|
||||||
load: Optional[Callable[[str], _T]],
|
load: Optional[Callable[[str], T]],
|
||||||
dump: Optional[Callable[[_T], str]],
|
dump: Optional[Callable[[T], str]],
|
||||||
) -> None:
|
) -> None:
|
||||||
self.key = key
|
self.key = key
|
||||||
self.load = load
|
self.load = load
|
||||||
self.dump = dump
|
self.dump = dump
|
||||||
|
|
||||||
|
|
||||||
# The return type _T is technically wrong, but it allows checking if during
|
# The return type T is technically wrong, but it allows checking if during
|
||||||
# runtime we get the correct type.
|
# runtime we get the correct type.
|
||||||
@overload
|
@overload
|
||||||
def field_deb822(
|
def field_deb822[T](
|
||||||
deb822_key: str,
|
deb822_key: str,
|
||||||
/, *,
|
/, *,
|
||||||
deb822_load: Optional[Callable[[str], _T]] = None,
|
deb822_load: Optional[Callable[[str], T]] = None,
|
||||||
deb822_dump: Optional[Callable[[_T], str]] = str,
|
deb822_dump: Optional[Callable[[T], str]] = str,
|
||||||
default: _T,
|
default: T,
|
||||||
) -> _T:
|
) -> T:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def field_deb822(
|
def field_deb822[T](
|
||||||
deb822_key: str,
|
deb822_key: str,
|
||||||
/, *,
|
/, *,
|
||||||
deb822_load: Optional[Callable[[str], _T]] = None,
|
deb822_load: Optional[Callable[[str], T]] = None,
|
||||||
deb822_dump: Optional[Callable[[_T], str]] = str,
|
deb822_dump: Optional[Callable[[T], str]] = str,
|
||||||
default_factory: Callable[[], _T],
|
default_factory: Callable[[], T],
|
||||||
) -> _T:
|
) -> T:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
@overload
|
@overload
|
||||||
def field_deb822(
|
def field_deb822[T](
|
||||||
deb822_key: str,
|
deb822_key: str,
|
||||||
/, *,
|
/, *,
|
||||||
deb822_load: Optional[Callable[[str], _T]] = None,
|
deb822_load: Optional[Callable[[str], T]] = None,
|
||||||
deb822_dump: Optional[Callable[[_T], str]] = str,
|
deb822_dump: Optional[Callable[[T], str]] = str,
|
||||||
) -> _T:
|
) -> T:
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
def field_deb822(
|
def field_deb822[T](
|
||||||
deb822_key: str,
|
deb822_key: str,
|
||||||
/, *,
|
/, *,
|
||||||
deb822_load: Optional[Callable[[str], _T]] = None,
|
deb822_load: Optional[Callable[[str], T]] = None,
|
||||||
deb822_dump: Optional[Callable[[_T], str]] = str,
|
deb822_dump: Optional[Callable[[T], str]] = str,
|
||||||
default: Any = dataclasses.MISSING,
|
default: Any = dataclasses.MISSING,
|
||||||
default_factory: Any = dataclasses.MISSING,
|
default_factory: Any = dataclasses.MISSING,
|
||||||
) -> Any:
|
) -> Any:
|
||||||
@@ -112,8 +106,8 @@ class Deb822DecodeError(ValueError):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Deb822DecodeState(Generic[_DataclassT]):
|
class Deb822DecodeState[T: _DataclassInstance]:
|
||||||
cls: type[_DataclassT]
|
cls: type[T]
|
||||||
fields: dict[str, dataclasses.Field]
|
fields: dict[str, dataclasses.Field]
|
||||||
ignore_unknown: bool
|
ignore_unknown: bool
|
||||||
|
|
||||||
@@ -132,7 +126,7 @@ class Deb822DecodeState(Generic[_DataclassT]):
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
cls: type[_DataclassT],
|
cls: type[T],
|
||||||
ignore_unknown: bool,
|
ignore_unknown: bool,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.reset()
|
self.reset()
|
||||||
@@ -167,7 +161,7 @@ class Deb822DecodeState(Generic[_DataclassT]):
|
|||||||
else:
|
else:
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def generate(self) -> _DataclassT | None:
|
def generate(self) -> T | None:
|
||||||
if not self.data:
|
if not self.data:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -192,12 +186,12 @@ class Deb822DecodeState(Generic[_DataclassT]):
|
|||||||
return self.cls(**r)
|
return self.cls(**r)
|
||||||
|
|
||||||
|
|
||||||
def read_deb822(
|
def read_deb822[T: _DataclassInstance](
|
||||||
cls: type[_DataclassT],
|
cls: type[T],
|
||||||
file: IO[str],
|
file: IO[str],
|
||||||
/,
|
/,
|
||||||
ignore_unknown: bool = False,
|
ignore_unknown: bool = False,
|
||||||
) -> Iterable[_DataclassT]:
|
) -> Iterable[T]:
|
||||||
state = Deb822DecodeState(cls, ignore_unknown)
|
state = Deb822DecodeState(cls, ignore_unknown)
|
||||||
|
|
||||||
for linenr, line in enumerate(file):
|
for linenr, line in enumerate(file):
|
||||||
@@ -217,8 +211,8 @@ def read_deb822(
|
|||||||
yield obj
|
yield obj
|
||||||
|
|
||||||
|
|
||||||
def write_deb822(
|
def write_deb822[T: _DataclassInstance](
|
||||||
objs: Iterable[_DataclassT],
|
objs: Iterable[T],
|
||||||
file: IO[str],
|
file: IO[str],
|
||||||
/,
|
/,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@@ -7,7 +7,6 @@ from dataclasses import (
|
|||||||
)
|
)
|
||||||
from typing import (
|
from typing import (
|
||||||
Protocol,
|
Protocol,
|
||||||
TypeVar,
|
|
||||||
TYPE_CHECKING,
|
TYPE_CHECKING,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -17,14 +16,11 @@ if TYPE_CHECKING:
|
|||||||
class _HasName(Protocol, _DataclassInstance):
|
class _HasName(Protocol, _DataclassInstance):
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
_DataclassT = TypeVar('_DataclassT', bound=_DataclassInstance)
|
|
||||||
_HasNameT = TypeVar('_HasNameT', bound=_HasName)
|
|
||||||
|
|
||||||
|
def default[T: _DataclassInstance](
|
||||||
def default(
|
cls: type[T],
|
||||||
cls: type[_DataclassT],
|
|
||||||
/,
|
/,
|
||||||
) -> _DataclassT:
|
) -> T:
|
||||||
f = {}
|
f = {}
|
||||||
|
|
||||||
for field in fields(cls):
|
for field in fields(cls):
|
||||||
@@ -34,10 +30,10 @@ def default(
|
|||||||
return cls(**f)
|
return cls(**f)
|
||||||
|
|
||||||
|
|
||||||
def merge(
|
def merge[T: _DataclassInstance](
|
||||||
self: _DataclassT,
|
self: T,
|
||||||
other: _DataclassT | None, /,
|
other: T | None, /,
|
||||||
) -> _DataclassT:
|
) -> T:
|
||||||
if other is None:
|
if other is None:
|
||||||
return self
|
return self
|
||||||
|
|
||||||
@@ -75,22 +71,22 @@ def merge(
|
|||||||
return replace(self, **f)
|
return replace(self, **f)
|
||||||
|
|
||||||
|
|
||||||
def merge_default(
|
def merge_default[T: _DataclassInstance](
|
||||||
cls: type[_DataclassT],
|
cls: type[T],
|
||||||
/,
|
/,
|
||||||
*others: _DataclassT,
|
*others: T,
|
||||||
) -> _DataclassT:
|
) -> T:
|
||||||
ret: _DataclassT = default(cls)
|
ret: T = default(cls)
|
||||||
for o in others:
|
for o in others:
|
||||||
ret = merge(ret, o)
|
ret = merge(ret, o)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def _merge_assoclist(
|
def _merge_assoclist[T: _HasName](
|
||||||
self_list: list[_HasNameT],
|
self_list: list[T],
|
||||||
other_list: list[_HasNameT],
|
other_list: list[T],
|
||||||
/,
|
/,
|
||||||
) -> list[_HasNameT]:
|
) -> list[T]:
|
||||||
'''
|
'''
|
||||||
Merge lists where each item got a "name" attribute
|
Merge lists where each item got a "name" attribute
|
||||||
'''
|
'''
|
||||||
@@ -99,7 +95,7 @@ def _merge_assoclist(
|
|||||||
if not other_list:
|
if not other_list:
|
||||||
return self_list
|
return self_list
|
||||||
|
|
||||||
ret: list[_HasNameT] = []
|
ret: list[T] = []
|
||||||
other_dict = {
|
other_dict = {
|
||||||
i.name: i
|
i.name: i
|
||||||
for i in other_list
|
for i in other_list
|
||||||
|
23
debian/lib/python/debian_linux/debian.py
vendored
23
debian/lib/python/debian_linux/debian.py
vendored
@@ -370,9 +370,8 @@ class PackageRelationEntry:
|
|||||||
ret.append(f'({self.operator} {self.version})')
|
ret.append(f'({self.operator} {self.version})')
|
||||||
if self.arches:
|
if self.arches:
|
||||||
ret.append(f'[{self.arches}]')
|
ret.append(f'[{self.arches}]')
|
||||||
if self.restrictions:
|
|
||||||
ret.append(str(self.restrictions))
|
ret.append(str(self.restrictions))
|
||||||
return ' '.join(ret)
|
return ' '.join(i for i in ret if i)
|
||||||
|
|
||||||
|
|
||||||
class PackageRelationGroup(list[PackageRelationEntry]):
|
class PackageRelationGroup(list[PackageRelationEntry]):
|
||||||
@@ -443,8 +442,6 @@ class PackageBuildprofileEntry:
|
|||||||
pos: set[str] = dataclasses.field(default_factory=set)
|
pos: set[str] = dataclasses.field(default_factory=set)
|
||||||
neg: set[str] = dataclasses.field(default_factory=set)
|
neg: set[str] = dataclasses.field(default_factory=set)
|
||||||
|
|
||||||
__re = re.compile(r'^<(?P<profiles>[a-z0-9. !-]+)>$')
|
|
||||||
|
|
||||||
def copy(self) -> Self:
|
def copy(self) -> Self:
|
||||||
return self.__class__(
|
return self.__class__(
|
||||||
pos=set(self.pos),
|
pos=set(self.pos),
|
||||||
@@ -453,12 +450,8 @@ class PackageBuildprofileEntry:
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def parse(cls, v: str, /) -> Self:
|
def parse(cls, v: str, /) -> Self:
|
||||||
match = cls.__re.match(v)
|
|
||||||
if not match:
|
|
||||||
raise RuntimeError('Unable to parse build profile "%s"' % v)
|
|
||||||
|
|
||||||
ret = cls()
|
ret = cls()
|
||||||
for i in re.split(r' ', match.group('profiles')):
|
for i in re.split(r' ', v):
|
||||||
if i:
|
if i:
|
||||||
if i[0] == '!':
|
if i[0] == '!':
|
||||||
ret.neg.add(i[1:])
|
ret.neg.add(i[1:])
|
||||||
@@ -506,16 +499,18 @@ class PackageBuildprofileEntry:
|
|||||||
self.neg &= other.neg - diff
|
self.neg &= other.neg - diff
|
||||||
__ior__ = update
|
__ior__ = update
|
||||||
|
|
||||||
|
def __len__(self) -> int:
|
||||||
|
return len(self.pos) + len(self.neg)
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
s = ' '.join(itertools.chain(
|
return ' '.join(itertools.chain(
|
||||||
sorted(self.pos),
|
sorted(self.pos),
|
||||||
(f'!{i}' for i in sorted(self.neg)),
|
(f'!{i}' for i in sorted(self.neg)),
|
||||||
))
|
))
|
||||||
return f'<{s}>'
|
|
||||||
|
|
||||||
|
|
||||||
class PackageBuildprofile(list[PackageBuildprofileEntry]):
|
class PackageBuildprofile(list[PackageBuildprofileEntry]):
|
||||||
__re = re.compile(r' *(<[^>]+>)(?: +|$)')
|
__re = re.compile(r' *<(?P<entry>[a-z0-9. !-]+)>(?: +|$)')
|
||||||
|
|
||||||
def copy(self) -> Self:
|
def copy(self) -> Self:
|
||||||
return self.__class__(i.copy() for i in self)
|
return self.__class__(i.copy() for i in self)
|
||||||
@@ -524,7 +519,7 @@ class PackageBuildprofile(list[PackageBuildprofileEntry]):
|
|||||||
def parse(cls, v: str, /) -> Self:
|
def parse(cls, v: str, /) -> Self:
|
||||||
ret = cls()
|
ret = cls()
|
||||||
for match in cls.__re.finditer(v):
|
for match in cls.__re.finditer(v):
|
||||||
ret.append(PackageBuildprofileEntry.parse(match.group(1)))
|
ret.append(PackageBuildprofileEntry.parse(match.group('entry')))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def update(self, v: Self, /) -> None:
|
def update(self, v: Self, /) -> None:
|
||||||
@@ -538,7 +533,7 @@ class PackageBuildprofile(list[PackageBuildprofileEntry]):
|
|||||||
__ior__ = update
|
__ior__ = update
|
||||||
|
|
||||||
def __str__(self) -> str:
|
def __str__(self) -> str:
|
||||||
return ' '.join(str(i) for i in self)
|
return ' '.join(f'<{str(i)}>' for i in self if i)
|
||||||
|
|
||||||
|
|
||||||
@dataclasses.dataclass
|
@dataclasses.dataclass
|
||||||
|
7
debian/lib/python/debian_linux/gencontrol.py
vendored
7
debian/lib/python/debian_linux/gencontrol.py
vendored
@@ -189,6 +189,7 @@ class PackagesBundle:
|
|||||||
package.meta_rules_check_packages = check_packages
|
package.meta_rules_check_packages = check_packages
|
||||||
|
|
||||||
for name in (
|
for name in (
|
||||||
|
'NEWS',
|
||||||
'lintian-overrides',
|
'lintian-overrides',
|
||||||
'maintscript',
|
'maintscript',
|
||||||
'postinst',
|
'postinst',
|
||||||
@@ -202,7 +203,11 @@ class PackagesBundle:
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
with self.open(f'{package_name}.{name}') as f:
|
if arch:
|
||||||
|
out = f'{package_name}.{name}.{arch}'
|
||||||
|
else:
|
||||||
|
out = f'{package_name}.{name}'
|
||||||
|
with self.open(out) as f:
|
||||||
f.write(template)
|
f.write(template)
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
424
debian/lib/python/debian_linux/test_debian.py
vendored
424
debian/lib/python/debian_linux/test_debian.py
vendored
@@ -1,424 +0,0 @@
|
|||||||
import pytest
|
|
||||||
|
|
||||||
from .debian import (
|
|
||||||
Version,
|
|
||||||
VersionLinux,
|
|
||||||
PackageArchitecture,
|
|
||||||
PackageDescription,
|
|
||||||
PackageRelationEntry,
|
|
||||||
PackageRelationGroup,
|
|
||||||
PackageRelation,
|
|
||||||
PackageBuildprofileEntry,
|
|
||||||
PackageBuildprofile,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestVersion:
|
|
||||||
def test_native(self) -> None:
|
|
||||||
v = Version('1.2+c~4')
|
|
||||||
assert v.epoch is None
|
|
||||||
assert v.upstream == '1.2+c~4'
|
|
||||||
assert v.revision is None
|
|
||||||
assert v.complete == '1.2+c~4'
|
|
||||||
assert v.complete_noepoch == '1.2+c~4'
|
|
||||||
|
|
||||||
def test_nonnative(self) -> None:
|
|
||||||
v = Version('1-2+d~3')
|
|
||||||
assert v.epoch is None
|
|
||||||
assert v.upstream == '1'
|
|
||||||
assert v.revision == '2+d~3'
|
|
||||||
assert v.complete == '1-2+d~3'
|
|
||||||
assert v.complete_noepoch == '1-2+d~3'
|
|
||||||
|
|
||||||
def test_native_epoch(self) -> None:
|
|
||||||
v = Version('5:1.2.3')
|
|
||||||
assert v.epoch == 5
|
|
||||||
assert v.upstream == '1.2.3'
|
|
||||||
assert v.revision is None
|
|
||||||
assert v.complete == '5:1.2.3'
|
|
||||||
assert v.complete_noepoch == '1.2.3'
|
|
||||||
|
|
||||||
def test_nonnative_epoch(self) -> None:
|
|
||||||
v = Version('5:1.2.3-4')
|
|
||||||
assert v.epoch == 5
|
|
||||||
assert v.upstream == '1.2.3'
|
|
||||||
assert v.revision == '4'
|
|
||||||
assert v.complete == '5:1.2.3-4'
|
|
||||||
assert v.complete_noepoch == '1.2.3-4'
|
|
||||||
|
|
||||||
def test_multi_hyphen(self) -> None:
|
|
||||||
v = Version('1-2-3')
|
|
||||||
assert v.epoch is None
|
|
||||||
assert v.upstream == '1-2'
|
|
||||||
assert v.revision == '3'
|
|
||||||
assert v.complete == '1-2-3'
|
|
||||||
|
|
||||||
def test_multi_colon(self) -> None:
|
|
||||||
v = Version('1:2:3')
|
|
||||||
assert v.epoch == 1
|
|
||||||
assert v.upstream == '2:3'
|
|
||||||
assert v.revision is None
|
|
||||||
|
|
||||||
def test_invalid_epoch(self) -> None:
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('a:1')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('-1:1')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1a:1')
|
|
||||||
|
|
||||||
def test_invalid_upstream(self) -> None:
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1_2')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1/2')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('a1')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1 2')
|
|
||||||
|
|
||||||
def test_invalid_revision(self) -> None:
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1-2_3')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1-2/3')
|
|
||||||
with pytest.raises(RuntimeError):
|
|
||||||
Version('1-2:3')
|
|
||||||
|
|
||||||
|
|
||||||
class TestVersionLinux:
|
|
||||||
def test_stable(self) -> None:
|
|
||||||
v = VersionLinux('1.2.3-4')
|
|
||||||
assert v.linux_version == '1.2'
|
|
||||||
assert v.linux_upstream == '1.2'
|
|
||||||
assert v.linux_upstream_full == '1.2.3'
|
|
||||||
assert v.linux_modifier is None
|
|
||||||
assert v.linux_dfsg is None
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_rc(self) -> None:
|
|
||||||
v = VersionLinux('1.2~rc3-4')
|
|
||||||
assert v.linux_version == '1.2'
|
|
||||||
assert v.linux_upstream == '1.2-rc3'
|
|
||||||
assert v.linux_upstream_full == '1.2-rc3'
|
|
||||||
assert v.linux_modifier == 'rc3'
|
|
||||||
assert v.linux_dfsg is None
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_dfsg(self) -> None:
|
|
||||||
v = VersionLinux('1.2~rc3.dfsg.1-4')
|
|
||||||
assert v.linux_version == '1.2'
|
|
||||||
assert v.linux_upstream == '1.2-rc3'
|
|
||||||
assert v.linux_upstream_full == '1.2-rc3'
|
|
||||||
assert v.linux_modifier == 'rc3'
|
|
||||||
assert v.linux_dfsg == '1'
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_experimental(self) -> None:
|
|
||||||
v = VersionLinux('1.2~rc3-4~exp5')
|
|
||||||
assert v.linux_upstream_full == '1.2-rc3'
|
|
||||||
assert v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_security(self) -> None:
|
|
||||||
v = VersionLinux('1.2.3-4+deb10u1')
|
|
||||||
assert v.linux_upstream_full == '1.2.3'
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_backports(self) -> None:
|
|
||||||
v = VersionLinux('1.2.3-4~bpo9+10')
|
|
||||||
assert v.linux_upstream_full == '1.2.3'
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_security_backports(self) -> None:
|
|
||||||
v = VersionLinux('1.2.3-4+deb10u1~bpo9+10')
|
|
||||||
assert v.linux_upstream_full == '1.2.3'
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert v.linux_revision_security
|
|
||||||
assert v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_lts_backports(self) -> None:
|
|
||||||
# Backport during LTS, as an extra package in the -security
|
|
||||||
# suite. Since this is not part of a -backports suite it
|
|
||||||
# shouldn't get the linux_revision_backports flag.
|
|
||||||
v = VersionLinux('1.2.3-4~deb9u10')
|
|
||||||
assert v.linux_upstream_full == '1.2.3'
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_lts_backports_2(self) -> None:
|
|
||||||
# Same but with two security extensions in the revision.
|
|
||||||
v = VersionLinux('1.2.3-4+deb10u1~deb9u10')
|
|
||||||
assert v.linux_upstream_full == '1.2.3'
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_binnmu(self) -> None:
|
|
||||||
v = VersionLinux('1.2.3-4+b1')
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert not v.linux_revision_other
|
|
||||||
|
|
||||||
def test_other_revision(self) -> None:
|
|
||||||
v = VersionLinux('4.16.5-1+revert+crng+ready') # from #898087
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert v.linux_revision_other
|
|
||||||
|
|
||||||
def test_other_revision_binnmu(self) -> None:
|
|
||||||
v = VersionLinux('4.16.5-1+revert+crng+ready+b1')
|
|
||||||
assert not v.linux_revision_experimental
|
|
||||||
assert not v.linux_revision_security
|
|
||||||
assert not v.linux_revision_backports
|
|
||||||
assert v.linux_revision_other
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageArchitecture:
|
|
||||||
def test_init(self) -> None:
|
|
||||||
a = PackageArchitecture()
|
|
||||||
assert a == set()
|
|
||||||
|
|
||||||
def test_init_str(self) -> None:
|
|
||||||
a = PackageArchitecture(' foo bar\tbaz ')
|
|
||||||
assert a == {'foo', 'bar', 'baz'}
|
|
||||||
|
|
||||||
def test_init_iter(self) -> None:
|
|
||||||
a = PackageArchitecture(('foo', 'bar'))
|
|
||||||
assert a == {'foo', 'bar'}
|
|
||||||
|
|
||||||
def test_init_self(self) -> None:
|
|
||||||
a = PackageArchitecture(PackageArchitecture(('foo', 'bar')))
|
|
||||||
assert a == {'foo', 'bar'}
|
|
||||||
|
|
||||||
def test_str(self) -> None:
|
|
||||||
a = PackageArchitecture(('foo', 'bar'))
|
|
||||||
assert str(a) == 'bar foo'
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageDescription:
|
|
||||||
def test_init(self) -> None:
|
|
||||||
a = PackageDescription()
|
|
||||||
assert a.short == []
|
|
||||||
assert a.long == []
|
|
||||||
|
|
||||||
def test_init_str(self) -> None:
|
|
||||||
a = PackageDescription('Short\nLong1\n.\nLong2')
|
|
||||||
assert a.short == ['Short']
|
|
||||||
assert a.long == ['Long1', 'Long2']
|
|
||||||
|
|
||||||
def test_init_self(self) -> None:
|
|
||||||
a = PackageDescription(PackageDescription('Short\nLong1\n.\nLong2'))
|
|
||||||
assert a.short == ['Short']
|
|
||||||
assert a.long == ['Long1', 'Long2']
|
|
||||||
|
|
||||||
def test_str(self) -> None:
|
|
||||||
a = PackageDescription('Short\nLong1\n.\nLong2')
|
|
||||||
assert str(a) == 'Short\nLong1\n.\nLong2'
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageRelationEntry:
|
|
||||||
def test_init_str(self) -> None:
|
|
||||||
a = PackageRelationEntry('package (>=version) [arch2 arch1] <profile1 >')
|
|
||||||
assert a.name == 'package'
|
|
||||||
assert a.version == 'version'
|
|
||||||
assert a.arches == {'arch1', 'arch2'}
|
|
||||||
# TODO: assert a.profiles
|
|
||||||
assert str(a) == 'package (>= version) [arch1 arch2] <profile1>'
|
|
||||||
|
|
||||||
def test_init_self(self) -> None:
|
|
||||||
a = PackageRelationEntry(PackageRelationEntry('package [arch2 arch1]'))
|
|
||||||
assert a.name == 'package'
|
|
||||||
assert a.arches == {'arch1', 'arch2'}
|
|
||||||
assert str(a) == 'package [arch1 arch2]'
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageRelationGroup:
|
|
||||||
def test_init(self) -> None:
|
|
||||||
a = PackageRelationGroup()
|
|
||||||
assert a == []
|
|
||||||
|
|
||||||
def test_init_str(self) -> None:
|
|
||||||
a = PackageRelationGroup('foo | bar')
|
|
||||||
assert len(a) == 2
|
|
||||||
assert a[0].name == 'foo'
|
|
||||||
assert a[1].name == 'bar'
|
|
||||||
|
|
||||||
def test_init_iter_entry(self) -> None:
|
|
||||||
a = PackageRelationGroup((PackageRelationEntry('foo'), PackageRelationEntry('bar')))
|
|
||||||
assert len(a) == 2
|
|
||||||
assert a[0].name == 'foo'
|
|
||||||
assert a[1].name == 'bar'
|
|
||||||
|
|
||||||
def test_init_iter_str(self) -> None:
|
|
||||||
a = PackageRelationGroup(('foo', 'bar'))
|
|
||||||
assert len(a) == 2
|
|
||||||
assert a[0].name == 'foo'
|
|
||||||
assert a[1].name == 'bar'
|
|
||||||
|
|
||||||
def test_init_self(self) -> None:
|
|
||||||
a = PackageRelationGroup(PackageRelationGroup(['foo', 'bar']))
|
|
||||||
assert len(a) == 2
|
|
||||||
assert a[0].name == 'foo'
|
|
||||||
assert a[1].name == 'bar'
|
|
||||||
|
|
||||||
def test_str(self) -> None:
|
|
||||||
a = PackageRelationGroup('foo| bar')
|
|
||||||
assert str(a) == 'foo | bar'
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageRelation:
|
|
||||||
def test_init(self) -> None:
|
|
||||||
a = PackageRelation()
|
|
||||||
assert a == []
|
|
||||||
|
|
||||||
def test_init_str(self) -> None:
|
|
||||||
a = PackageRelation('foo1 | foo2, bar')
|
|
||||||
assert len(a) == 2
|
|
||||||
assert len(a[0]) == 2
|
|
||||||
assert a[0][0].name == 'foo1'
|
|
||||||
assert a[0][1].name == 'foo2'
|
|
||||||
assert len(a[1]) == 1
|
|
||||||
assert a[1][0].name == 'bar'
|
|
||||||
|
|
||||||
def test_init_iter_entry(self) -> None:
|
|
||||||
a = PackageRelation([[PackageRelationEntry('foo')], [PackageRelationEntry('bar')]])
|
|
||||||
assert len(a) == 2
|
|
||||||
assert len(a[0]) == 1
|
|
||||||
assert a[0][0].name == 'foo'
|
|
||||||
assert len(a[1]) == 1
|
|
||||||
assert a[1][0].name == 'bar'
|
|
||||||
|
|
||||||
def test_init_iter_str(self) -> None:
|
|
||||||
a = PackageRelation(('foo', 'bar'))
|
|
||||||
assert len(a) == 2
|
|
||||||
assert len(a[0]) == 1
|
|
||||||
assert a[0][0].name == 'foo'
|
|
||||||
assert len(a[1]) == 1
|
|
||||||
assert a[1][0].name == 'bar'
|
|
||||||
|
|
||||||
def test_init_self(self) -> None:
|
|
||||||
a = PackageRelation(PackageRelation(('foo', 'bar')))
|
|
||||||
assert len(a) == 2
|
|
||||||
assert len(a[0]) == 1
|
|
||||||
assert a[0][0].name == 'foo'
|
|
||||||
assert len(a[1]) == 1
|
|
||||||
assert a[1][0].name == 'bar'
|
|
||||||
|
|
||||||
def test_str(self) -> None:
|
|
||||||
a = PackageRelation('foo ,bar')
|
|
||||||
assert str(a) == 'foo, bar'
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageBuildprofileEntry:
|
|
||||||
def test_parse(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 !profile2 profile3 !profile4>')
|
|
||||||
assert a.pos == {'profile1', 'profile3'}
|
|
||||||
assert a.neg == {'profile2', 'profile4'}
|
|
||||||
assert str(a) == '<profile1 profile3 !profile2 !profile4>'
|
|
||||||
|
|
||||||
def test_eq(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 !profile2>')
|
|
||||||
b = PackageBuildprofileEntry(pos={'profile1'}, neg={'profile2'})
|
|
||||||
assert a == b
|
|
||||||
|
|
||||||
def test_isdisjoint(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 profile2>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<profile1 profile3>')
|
|
||||||
assert a.isdisjoint(b)
|
|
||||||
|
|
||||||
def test_issubset_empty(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 profile2>')
|
|
||||||
b = PackageBuildprofileEntry()
|
|
||||||
assert a.issubset(b)
|
|
||||||
|
|
||||||
def test_issubset_pos(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 profile2>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<profile1>')
|
|
||||||
assert a.issubset(b)
|
|
||||||
|
|
||||||
def test_issubset_neg(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<!profile1>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<!profile1 !profile2>')
|
|
||||||
assert a.issubset(b)
|
|
||||||
|
|
||||||
def test_issubset_both(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<!profile1 !profile2 profile3>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<!profile1 !profile2 !profile3>')
|
|
||||||
assert a.issubset(b)
|
|
||||||
|
|
||||||
def test_issuperset_empty(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 profile2>')
|
|
||||||
b = PackageBuildprofileEntry()
|
|
||||||
assert b.issuperset(a)
|
|
||||||
|
|
||||||
def test_issuperset_pos(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 profile2>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<profile1>')
|
|
||||||
assert b.issuperset(a)
|
|
||||||
|
|
||||||
def test_issuperset_neg(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<!profile1>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<!profile1 !profile2>')
|
|
||||||
assert b.issuperset(a)
|
|
||||||
|
|
||||||
def test_issuperset_both(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<!profile1 !profile2 profile3>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<!profile1 !profile2 !profile3>')
|
|
||||||
assert b.issuperset(a)
|
|
||||||
|
|
||||||
def test_update_pos(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 profile2>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<profile1>')
|
|
||||||
a.update(b)
|
|
||||||
assert a.pos == {'profile1'}
|
|
||||||
assert a.neg == set()
|
|
||||||
|
|
||||||
def test_update_neg(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<!profile1 !profile2>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<!profile1>')
|
|
||||||
a.update(b)
|
|
||||||
assert a.pos == set()
|
|
||||||
assert a.neg == {'profile1'}
|
|
||||||
|
|
||||||
def test_update_both(self) -> None:
|
|
||||||
a = PackageBuildprofileEntry.parse('<profile1 !profile2 profile3>')
|
|
||||||
b = PackageBuildprofileEntry.parse('<profile1 !profile2 !profile3>')
|
|
||||||
a.update(b)
|
|
||||||
assert a.pos == {'profile1'}
|
|
||||||
assert a.neg == {'profile2'}
|
|
||||||
|
|
||||||
|
|
||||||
class TestPackageBuildprofile:
|
|
||||||
def test_parse(self) -> None:
|
|
||||||
a = PackageBuildprofile.parse('<profile1> <!profile2> <profile3> <!profile4>')
|
|
||||||
assert str(a) == '<profile1> <!profile2> <profile3> <!profile4>'
|
|
||||||
|
|
||||||
def test_update(self) -> None:
|
|
||||||
a = PackageBuildprofile.parse('<profile1 profile2> <profile2>')
|
|
||||||
b = PackageBuildprofile.parse('<profile1> <profile2 !profile3> <profile3>')
|
|
||||||
a.update(b)
|
|
||||||
assert str(a) == '<profile1> <profile2> <profile3>'
|
|
1
debian/linux-perf.lintian-overrides.amd64
vendored
1
debian/linux-perf.lintian-overrides.amd64
vendored
@@ -1,4 +1,5 @@
|
|||||||
# These executables are needed to handle processes running in compat mode
|
# These executables are needed to handle processes running in compat mode
|
||||||
|
linux-perf: binary-from-other-architecture *usr/lib/perf-core/perf-read-vdso32*
|
||||||
linux-perf: binary-from-other-architecture *usr/lib/perf-core/perf-read-vdsox32*
|
linux-perf: binary-from-other-architecture *usr/lib/perf-core/perf-read-vdsox32*
|
||||||
|
|
||||||
# Some of these plugins only need symbols from libtraceevent, which
|
# Some of these plugins only need symbols from libtraceevent, which
|
||||||
|
6
debian/linux-perf.postrm
vendored
6
debian/linux-perf.postrm
vendored
@@ -9,8 +9,7 @@ if [ -n "${old_version_suffix}" ] ; then
|
|||||||
fi
|
fi
|
||||||
unset old_version_suffix
|
unset old_version_suffix
|
||||||
|
|
||||||
case "$1" in
|
if [ "$1" = remove ] ; then
|
||||||
remove )
|
|
||||||
for wrapper in \
|
for wrapper in \
|
||||||
/usr/bin/perf \
|
/usr/bin/perf \
|
||||||
/usr/share/bash-completion/completions/perf \
|
/usr/share/bash-completion/completions/perf \
|
||||||
@@ -19,7 +18,6 @@ remove )
|
|||||||
diversion="${wrapper%/perf*}/perf.wrapper${wrapper#*/perf}"
|
diversion="${wrapper%/perf*}/perf.wrapper${wrapper#*/perf}"
|
||||||
dpkg-divert --package linux-perf --divert "${diversion}" --rename --remove "${wrapper}"
|
dpkg-divert --package linux-perf --divert "${diversion}" --rename --remove "${wrapper}"
|
||||||
done ; unset wrapper diversion
|
done ; unset wrapper diversion
|
||||||
;;
|
fi
|
||||||
esac
|
|
||||||
|
|
||||||
#DEBHELPER#
|
#DEBHELPER#
|
||||||
|
@@ -16,7 +16,7 @@ correctness.
|
|||||||
|
|
||||||
--- a/drivers/net/phy/marvell.c
|
--- a/drivers/net/phy/marvell.c
|
||||||
+++ b/drivers/net/phy/marvell.c
|
+++ b/drivers/net/phy/marvell.c
|
||||||
@@ -1366,6 +1366,7 @@ static int m88e1118_config_init(struct p
|
@@ -1409,6 +1409,7 @@ static int m88e1118_config_init(struct p
|
||||||
return genphy_soft_reset(phydev);
|
return genphy_soft_reset(phydev);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ correctness.
|
|||||||
static int m88e1149_config_init(struct phy_device *phydev)
|
static int m88e1149_config_init(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@@ -1391,7 +1392,9 @@ static int m88e1149_config_init(struct p
|
@@ -1434,7 +1435,9 @@ static int m88e1149_config_init(struct p
|
||||||
|
|
||||||
return genphy_soft_reset(phydev);
|
return genphy_soft_reset(phydev);
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ correctness.
|
|||||||
static int m88e1145_config_init_rgmii(struct phy_device *phydev)
|
static int m88e1145_config_init_rgmii(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@@ -1469,6 +1472,7 @@ static int m88e1145_config_init(struct p
|
@@ -1512,6 +1515,7 @@ static int m88e1145_config_init(struct p
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
{
|
{
|
||||||
@@ -3792,6 +3796,7 @@ static struct phy_driver marvell_drivers
|
@@ -3848,6 +3852,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,
|
||||||
@@ -3815,6 +3820,8 @@ static struct phy_driver marvell_drivers
|
@@ -3871,6 +3876,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,
|
||||||
@@ -3833,6 +3840,8 @@ static struct phy_driver marvell_drivers
|
@@ -3889,6 +3896,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,
|
||||||
@@ -3853,6 +3862,7 @@ static struct phy_driver marvell_drivers
|
@@ -3909,6 +3918,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,
|
||||||
@@ -4141,9 +4151,9 @@ static struct mdio_device_id __maybe_unu
|
@@ -4197,9 +4207,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,61 +0,0 @@
|
|||||||
From: Philip Yang <Philip.Yang@amd.com>
|
|
||||||
Date: Wed, 29 Jan 2025 12:37:30 -0500
|
|
||||||
Subject: drm/amdkfd: Fix user queue validation on Gfx7/8
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
Origin: https://gitlab.freedesktop.org/drm/kernel/-/commit/e7a477735f1771b9a9346a5fbd09d7ff0641723a
|
|
||||||
Bug-Debian: https://bugs.debian.org/1093124
|
|
||||||
|
|
||||||
To workaround queue full h/w issue on Gfx7/8, when application create
|
|
||||||
AQL queue, the ring buffer bo allocate size is queue_size/2 and
|
|
||||||
map queue_size ring buffer to GPU in 2 pieces using 2 attachments, each
|
|
||||||
attachment map size is queue_size/2, with same ring_bo backing memory.
|
|
||||||
|
|
||||||
For Gfx7/8, user queue buffer validation should use queue_size/2 to
|
|
||||||
verify ring_bo allocation and mapping size.
|
|
||||||
|
|
||||||
Fixes: 68e599db7a54 ("drm/amdkfd: Validate user queue buffers")
|
|
||||||
Suggested-by: Tomáš Trnka <trnka@scm.com>
|
|
||||||
Signed-off-by: Philip Yang <Philip.Yang@amd.com>
|
|
||||||
Acked-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
||||||
---
|
|
||||||
drivers/gpu/drm/amd/amdkfd/kfd_queue.c | 12 +++++++++++-
|
|
||||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/gpu/drm/amd/amdkfd/kfd_queue.c
|
|
||||||
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_queue.c
|
|
||||||
@@ -233,6 +233,7 @@ void kfd_queue_buffer_put(struct amdgpu_
|
|
||||||
int kfd_queue_acquire_buffers(struct kfd_process_device *pdd, struct queue_properties *properties)
|
|
||||||
{
|
|
||||||
struct kfd_topology_device *topo_dev;
|
|
||||||
+ u64 expected_queue_size;
|
|
||||||
struct amdgpu_vm *vm;
|
|
||||||
u32 total_cwsr_size;
|
|
||||||
int err;
|
|
||||||
@@ -241,6 +242,15 @@ int kfd_queue_acquire_buffers(struct kfd
|
|
||||||
if (!topo_dev)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
+ /* AQL queues on GFX7 and GFX8 appear twice their actual size */
|
|
||||||
+ if (properties->type == KFD_QUEUE_TYPE_COMPUTE &&
|
|
||||||
+ properties->format == KFD_QUEUE_FORMAT_AQL &&
|
|
||||||
+ topo_dev->node_props.gfx_target_version >= 70000 &&
|
|
||||||
+ topo_dev->node_props.gfx_target_version < 90000)
|
|
||||||
+ expected_queue_size = properties->queue_size / 2;
|
|
||||||
+ else
|
|
||||||
+ expected_queue_size = properties->queue_size;
|
|
||||||
+
|
|
||||||
vm = drm_priv_to_vm(pdd->drm_priv);
|
|
||||||
err = amdgpu_bo_reserve(vm->root.bo, false);
|
|
||||||
if (err)
|
|
||||||
@@ -255,7 +265,7 @@ int kfd_queue_acquire_buffers(struct kfd
|
|
||||||
goto out_err_unreserve;
|
|
||||||
|
|
||||||
err = kfd_queue_buffer_get(vm, (void *)properties->queue_address,
|
|
||||||
- &properties->ring_bo, properties->queue_size);
|
|
||||||
+ &properties->ring_bo, expected_queue_size);
|
|
||||||
if (err)
|
|
||||||
goto out_err_unreserve;
|
|
||||||
|
|
@@ -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
|
||||||
@@ -2618,7 +2618,7 @@ module_exit(exit_btrfs_fs)
|
@@ -2627,7 +2627,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");
|
||||||
@@ -27,19 +27,9 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
MODULE_SOFTDEP("pre: xxhash64");
|
MODULE_SOFTDEP("pre: xxhash64");
|
||||||
MODULE_SOFTDEP("pre: sha256");
|
MODULE_SOFTDEP("pre: sha256");
|
||||||
MODULE_SOFTDEP("pre: blake2b-256");
|
MODULE_SOFTDEP("pre: blake2b-256");
|
||||||
--- a/fs/ext4/super.c
|
|
||||||
+++ b/fs/ext4/super.c
|
|
||||||
@@ -7447,6 +7447,6 @@ static void __exit ext4_exit_fs(void)
|
|
||||||
MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
|
|
||||||
MODULE_DESCRIPTION("Fourth Extended Filesystem");
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
-MODULE_SOFTDEP("pre: crc32c");
|
|
||||||
+MODULE_SOFTDEP("pre: crypto-crc32c");
|
|
||||||
module_init(ext4_init_fs)
|
|
||||||
module_exit(ext4_exit_fs)
|
|
||||||
--- a/fs/jbd2/journal.c
|
--- a/fs/jbd2/journal.c
|
||||||
+++ b/fs/jbd2/journal.c
|
+++ b/fs/jbd2/journal.c
|
||||||
@@ -3181,6 +3181,7 @@ static void __exit journal_exit(void)
|
@@ -3152,6 +3152,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");
|
||||||
@@ -49,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
|
||||||
@@ -2384,5 +2384,8 @@ static void __exit exit_nfsd(void)
|
@@ -2344,5 +2344,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");
|
||||||
|
@@ -15,16 +15,16 @@ Signed-off-by: Ben Hutchings <benh@debian.org>
|
|||||||
---
|
---
|
||||||
--- a/scripts/Makefile.btf
|
--- a/scripts/Makefile.btf
|
||||||
+++ b/scripts/Makefile.btf
|
+++ b/scripts/Makefile.btf
|
||||||
@@ -12,8 +12,6 @@ endif
|
@@ -14,8 +14,6 @@ endif
|
||||||
|
|
||||||
pahole-flags-$(call test-ge, $(pahole-ver), 121) += --btf_gen_floats
|
pahole-flags-$(call test-ge, $(pahole-ver), 121) += --btf_gen_floats
|
||||||
|
|
||||||
-pahole-flags-$(call test-ge, $(pahole-ver), 122) += -j
|
-pahole-flags-$(call test-ge, $(pahole-ver), 122) += -j$(JOBS)
|
||||||
-
|
-
|
||||||
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
|
||||||
@@ -27,6 +25,18 @@ endif
|
@@ -29,6 +27,18 @@ endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -35,9 +35,9 @@ Signed-off-by: Ben Hutchings <benh@debian.org>
|
|||||||
+# Assume that if KBUILD_BUILD_TIMESTAMP is set then a reproducible
|
+# Assume that if KBUILD_BUILD_TIMESTAMP is set then a reproducible
|
||||||
+# build is required and we must not use -j alone.
|
+# build is required and we must not use -j alone.
|
||||||
+ifeq ($(KBUILD_BUILD_TIMESTAMP),)
|
+ifeq ($(KBUILD_BUILD_TIMESTAMP),)
|
||||||
+pahole-flags-$(call test-ge, $(pahole-ver), 122) += -j
|
+pahole-flags-$(call test-ge, $(pahole-ver), 122) += -j$(JOBS)
|
||||||
+else
|
+else
|
||||||
+pahole-flags-$(call test-ge, $(pahole-ver), 127) += -j --btf_features=+reproducible_build
|
+pahole-flags-$(call test-ge, $(pahole-ver), 127) += -j$(JOBS) --btf_features=+reproducible_build
|
||||||
+endif
|
+endif
|
||||||
+
|
+
|
||||||
pahole-flags-$(CONFIG_PAHOLE_HAS_LANG_EXCLUDE) += --lang_exclude=rust
|
pahole-flags-$(CONFIG_PAHOLE_HAS_LANG_EXCLUDE) += --lang_exclude=rust
|
||||||
|
@@ -9,7 +9,7 @@ sources.
|
|||||||
|
|
||||||
--- a/scripts/Makefile.build
|
--- a/scripts/Makefile.build
|
||||||
+++ b/scripts/Makefile.build
|
+++ b/scripts/Makefile.build
|
||||||
@@ -195,6 +195,11 @@ cmd_record_mcount = $(if $(findstring $(
|
@@ -188,6 +188,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
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@ alternative may allow subverting module signing.
|
|||||||
---
|
---
|
||||||
--- a/kernel/module/version.c
|
--- a/kernel/module/version.c
|
||||||
+++ b/kernel/module/version.c
|
+++ b/kernel/module/version.c
|
||||||
@@ -46,9 +46,8 @@ int check_version(const struct load_info
|
@@ -63,9 +63,8 @@ int check_version(const struct load_info
|
||||||
goto bad_version;
|
goto bad_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1,33 +0,0 @@
|
|||||||
From: Scott Mayhew <smayhew@redhat.com>
|
|
||||||
Date: Tue, 10 Dec 2024 07:25:54 -0500
|
|
||||||
Subject: nfsd: fix legacy client tracking initialization
|
|
||||||
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git/commit/?h=nfsd-next&id=45cd8c0c13fe5c9f1b926bd307df431f8f1b8a16
|
|
||||||
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=219580
|
|
||||||
Bug-Debian: https://bugs.debian.org/1087900
|
|
||||||
|
|
||||||
Get rid of the nfsd4_legacy_tracking_ops->init() call in
|
|
||||||
check_for_legacy_methods(). That will be handled in the caller
|
|
||||||
(nfsd4_client_tracking_init()). Otherwise, we'll wind up calling
|
|
||||||
nfsd4_legacy_tracking_ops->init() twice, and the second time we'll
|
|
||||||
trigger the BUG_ON() in nfsd4_init_recdir().
|
|
||||||
|
|
||||||
Fixes: 74fd48739d04 ("nfsd: new Kconfig option for legacy client tracking")
|
|
||||||
Reported-by: Jur van der Burg <jur@avtware.com>
|
|
||||||
Link: https://bugzilla.kernel.org/show_bug.cgi?id=219580
|
|
||||||
Signed-off-by: Scott Mayhew <smayhew@redhat.com>
|
|
||||||
Reviewed-by: Jeff Layton <jlayton@kernel.org>
|
|
||||||
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
|
|
||||||
---
|
|
||||||
fs/nfsd/nfs4recover.c | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/fs/nfsd/nfs4recover.c
|
|
||||||
+++ b/fs/nfsd/nfs4recover.c
|
|
||||||
@@ -2052,7 +2052,6 @@ static inline int check_for_legacy_metho
|
|
||||||
path_put(&path);
|
|
||||||
if (status)
|
|
||||||
return -ENOTDIR;
|
|
||||||
- status = nn->client_tracking_ops->init(net);
|
|
||||||
}
|
|
||||||
return status;
|
|
||||||
}
|
|
31
debian/patches/bugfix/all/perf-docs-Fix-perf-check-manual-page-built-with-asci.patch
vendored
Normal file
31
debian/patches/bugfix/all/perf-docs-Fix-perf-check-manual-page-built-with-asci.patch
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
From: Ben Hutchings <benh@debian.org>
|
||||||
|
Date: Sun, 23 Mar 2025 21:04:02 +0100
|
||||||
|
Subject: [PATCH] perf docs: Fix perf-check manual page built with asciidoctor
|
||||||
|
Forwarded: https://lore.kernel.org/linux-perf-users/Z-BxCE8WrcRmR_5f@decadent.org.uk/
|
||||||
|
|
||||||
|
asciidoctor is more picky than asciidoc about the length of heading
|
||||||
|
underlines, and currently mis-parses perf-check.txt:
|
||||||
|
|
||||||
|
ASCIIDOC perf-check.1
|
||||||
|
asciidoctor: ERROR: perf-check.txt: line 1: non-conforming manpage title
|
||||||
|
asciidoctor: ERROR: perf-check.txt: line 1: name section expected
|
||||||
|
asciidoctor: WARNING: perf-check.txt: line 2: unterminated example block
|
||||||
|
asciidoctor: WARNING: perf-check.txt: line 5: unterminated listing block
|
||||||
|
|
||||||
|
Fix the length of the title underline so it works properly.
|
||||||
|
|
||||||
|
Fixes: 98ad0b77323c ("perf check: Introduce 'check' subcommand")
|
||||||
|
Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||||
|
---
|
||||||
|
tools/perf/Documentation/perf-check.txt | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
--- a/tools/perf/Documentation/perf-check.txt
|
||||||
|
+++ b/tools/perf/Documentation/perf-check.txt
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
perf-check(1)
|
||||||
|
-===============
|
||||||
|
+=============
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
@@ -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
|
||||||
@@ -953,7 +953,7 @@ $(LIBAPI)-clean:
|
@@ -945,7 +945,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= \
|
||||||
|
@@ -36,7 +36,7 @@ of the patch
|
|||||||
--- a/drivers/gpu/drm/radeon/radeon_drv.c
|
--- a/drivers/gpu/drm/radeon/radeon_drv.c
|
||||||
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
|
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
|
||||||
@@ -32,6 +32,8 @@
|
@@ -32,6 +32,8 @@
|
||||||
|
#include <linux/aperture.h>
|
||||||
#include <linux/compat.h>
|
#include <linux/compat.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
+#include <linux/namei.h>
|
+#include <linux/namei.h>
|
||||||
@@ -73,7 +73,7 @@ of the patch
|
|||||||
static int radeon_pci_probe(struct pci_dev *pdev,
|
static int radeon_pci_probe(struct pci_dev *pdev,
|
||||||
const struct pci_device_id *ent)
|
const struct pci_device_id *ent)
|
||||||
{
|
{
|
||||||
@@ -296,6 +320,12 @@ static int radeon_pci_probe(struct pci_d
|
@@ -297,6 +321,12 @@ static int radeon_pci_probe(struct pci_d
|
||||||
if (vga_switcheroo_client_probe_defer(pdev))
|
if (vga_switcheroo_client_probe_defer(pdev))
|
||||||
return -EPROBE_DEFER;
|
return -EPROBE_DEFER;
|
||||||
|
|
||||||
@@ -84,5 +84,5 @@ of the patch
|
|||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
/* Get rid of things like offb */
|
/* Get rid of things like offb */
|
||||||
ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &kms_driver);
|
ret = aperture_remove_conflicting_pci_devices(pdev, kms_driver.name);
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@@ -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
|
||||||
@@ -927,7 +927,7 @@ $(OUTPUT)dlfilters/%.o: dlfilters/%.c in
|
@@ -919,7 +919,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
|
||||||
|
@@ -1,22 +0,0 @@
|
|||||||
From: Ben Hutchings <ben@decadent.org.uk>
|
|
||||||
Date: Fri, 25 Sep 2015 22:50:50 +0100
|
|
||||||
Subject: Revert "perf build: Fix libunwind feature detection on 32-bit x86"
|
|
||||||
Forwarded: no
|
|
||||||
|
|
||||||
This reverts commit 05b41775e2edd69a83f592e3534930c934d4038e.
|
|
||||||
It broke feature detection that was working just fine for us.
|
|
||||||
---
|
|
||||||
tools/perf/Makefile.config | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/tools/perf/Makefile.config
|
|
||||||
+++ b/tools/perf/Makefile.config
|
|
||||||
@@ -56,7 +56,7 @@ ifeq ($(SRCARCH),x86)
|
|
||||||
LIBUNWIND_LIBS = -lunwind-x86_64 -lunwind -llzma
|
|
||||||
$(call detected,CONFIG_X86_64)
|
|
||||||
else
|
|
||||||
- LIBUNWIND_LIBS = -lunwind-x86 -llzma -lunwind
|
|
||||||
+ LIBUNWIND_LIBS = -lunwind -lunwind-x86
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
@@ -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
|
||||||
@@ -120,6 +120,12 @@
|
@@ -119,6 +119,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
|
||||||
*/
|
*/
|
||||||
@@ -2157,6 +2163,10 @@ __latent_entropy struct task_struct *cop
|
@@ -2167,6 +2173,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.
|
||||||
@@ -3310,6 +3320,12 @@ int ksys_unshare(unsigned long unshare_f
|
@@ -3320,6 +3330,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;
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
|||||||
#endif /* CONFIG_SYSCTL */
|
#endif /* CONFIG_SYSCTL */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -1618,6 +1622,15 @@ static struct ctl_table kern_table[] = {
|
@@ -1617,6 +1621,15 @@ static const struct ctl_table kern_table
|
||||||
.mode = 0644,
|
.mode = 0644,
|
||||||
.proc_handler = proc_dointvec,
|
.proc_handler = proc_dointvec,
|
||||||
},
|
},
|
||||||
|
@@ -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
|
||||||
@@ -766,6 +766,18 @@ static void set_device_specific_options(
|
@@ -765,6 +765,18 @@ static void set_device_specific_options(
|
||||||
btrfs_set_opt(fs_info->mount_opt, SSD);
|
btrfs_set_opt(fs_info->mount_opt, SSD);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -15,7 +15,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
---
|
---
|
||||||
--- a/net/dccp/ipv4.c
|
--- a/net/dccp/ipv4.c
|
||||||
+++ b/net/dccp/ipv4.c
|
+++ b/net/dccp/ipv4.c
|
||||||
@@ -1098,8 +1098,8 @@ module_exit(dccp_v4_exit);
|
@@ -1099,8 +1099,8 @@ module_exit(dccp_v4_exit);
|
||||||
* values directly, Also cover the case where the protocol is not specified,
|
* values directly, Also cover the case where the protocol is not specified,
|
||||||
* i.e. net-pf-PF_INET-proto-0-type-SOCK_DCCP
|
* i.e. net-pf-PF_INET-proto-0-type-SOCK_DCCP
|
||||||
*/
|
*/
|
||||||
|
@@ -15,14 +15,13 @@ probably discontinued 10 years ago.
|
|||||||
---
|
---
|
||||||
--- a/drivers/video/fbdev/Kconfig
|
--- a/drivers/video/fbdev/Kconfig
|
||||||
+++ b/drivers/video/fbdev/Kconfig
|
+++ b/drivers/video/fbdev/Kconfig
|
||||||
@@ -657,100 +657,6 @@ config FB_ATMEL
|
@@ -658,102 +658,6 @@ config FB_ATMEL
|
||||||
help
|
help
|
||||||
This enables support for the AT91 LCD Controller.
|
This enables support for the AT91 LCD Controller.
|
||||||
|
|
||||||
-config FB_NVIDIA
|
-config FB_NVIDIA
|
||||||
- tristate "nVidia Framebuffer Support"
|
- tristate "nVidia Framebuffer Support"
|
||||||
- depends on FB && PCI
|
- depends on FB && PCI
|
||||||
- select FB_BACKLIGHT if FB_NVIDIA_BACKLIGHT
|
|
||||||
- select FB_CFB_FILLRECT
|
- select FB_CFB_FILLRECT
|
||||||
- select FB_CFB_COPYAREA
|
- select FB_CFB_COPYAREA
|
||||||
- select FB_CFB_IMAGEBLIT
|
- select FB_CFB_IMAGEBLIT
|
||||||
@@ -62,6 +61,8 @@ probably discontinued 10 years ago.
|
|||||||
-config FB_NVIDIA_BACKLIGHT
|
-config FB_NVIDIA_BACKLIGHT
|
||||||
- bool "Support for backlight control"
|
- bool "Support for backlight control"
|
||||||
- depends on FB_NVIDIA
|
- depends on FB_NVIDIA
|
||||||
|
- depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_NVIDIA
|
||||||
|
- select FB_BACKLIGHT
|
||||||
- default y
|
- default y
|
||||||
- help
|
- help
|
||||||
- Say Y here if you want to control the backlight of your display.
|
- Say Y here if you want to control the backlight of your display.
|
||||||
@@ -69,7 +70,6 @@ probably discontinued 10 years ago.
|
|||||||
-config FB_RIVA
|
-config FB_RIVA
|
||||||
- tristate "nVidia Riva support"
|
- tristate "nVidia Riva support"
|
||||||
- depends on FB && PCI
|
- depends on FB && PCI
|
||||||
- select FB_BACKLIGHT if FB_RIVA_BACKLIGHT
|
|
||||||
- select FB_CFB_FILLRECT
|
- select FB_CFB_FILLRECT
|
||||||
- select FB_CFB_COPYAREA
|
- select FB_CFB_COPYAREA
|
||||||
- select FB_CFB_IMAGEBLIT
|
- select FB_CFB_IMAGEBLIT
|
||||||
@@ -109,6 +109,8 @@ probably discontinued 10 years ago.
|
|||||||
-config FB_RIVA_BACKLIGHT
|
-config FB_RIVA_BACKLIGHT
|
||||||
- bool "Support for backlight control"
|
- bool "Support for backlight control"
|
||||||
- depends on FB_RIVA
|
- depends on FB_RIVA
|
||||||
|
- depends on BACKLIGHT_CLASS_DEVICE=y || BACKLIGHT_CLASS_DEVICE=FB_RIVA
|
||||||
|
- select FB_BACKLIGHT
|
||||||
- default y
|
- default y
|
||||||
- help
|
- help
|
||||||
- Say Y here if you want to control the backlight of your display.
|
- Say Y here if you want to control the backlight of your display.
|
||||||
|
@@ -22,7 +22,7 @@ Export the currently un-exported symbols it depends on.
|
|||||||
|
|
||||||
--- a/fs/file.c
|
--- a/fs/file.c
|
||||||
+++ b/fs/file.c
|
+++ b/fs/file.c
|
||||||
@@ -793,6 +793,7 @@ struct file *file_close_fd(unsigned int
|
@@ -837,6 +837,7 @@ struct file *file_close_fd(unsigned int
|
||||||
|
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,7 @@ Export the currently un-exported symbols it depends on.
|
|||||||
* Note: we use "set_current_state()" _after_ the wait-queue add,
|
* Note: we use "set_current_state()" _after_ the wait-queue add,
|
||||||
--- a/kernel/task_work.c
|
--- a/kernel/task_work.c
|
||||||
+++ b/kernel/task_work.c
|
+++ b/kernel/task_work.c
|
||||||
@@ -108,6 +108,7 @@ int task_work_add(struct task_struct *ta
|
@@ -96,6 +96,7 @@ int task_work_add(struct task_struct *ta
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ 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/memory.c
|
--- a/mm/memory.c
|
||||||
+++ b/mm/memory.c
|
+++ b/mm/memory.c
|
||||||
@@ -1937,6 +1937,7 @@ void zap_page_range_single(struct vm_are
|
@@ -2030,6 +2030,7 @@ void zap_page_range_single(struct vm_are
|
||||||
tlb_finish_mmu(&tlb);
|
tlb_finish_mmu(&tlb);
|
||||||
hugetlb_zap_end(vma, details);
|
hugetlb_zap_end(vma, details);
|
||||||
}
|
}
|
||||||
@@ -92,7 +92,7 @@ Export the currently un-exported symbols it depends on.
|
|||||||
* zap_vma_ptes - remove ptes mapping the vma
|
* zap_vma_ptes - remove ptes mapping the vma
|
||||||
--- a/security/security.c
|
--- a/security/security.c
|
||||||
+++ b/security/security.c
|
+++ b/security/security.c
|
||||||
@@ -997,6 +997,7 @@ int security_binder_set_context_mgr(cons
|
@@ -996,6 +996,7 @@ int security_binder_set_context_mgr(cons
|
||||||
{
|
{
|
||||||
return call_int_hook(binder_set_context_mgr, mgr);
|
return call_int_hook(binder_set_context_mgr, mgr);
|
||||||
}
|
}
|
||||||
@@ -100,7 +100,7 @@ Export the currently un-exported symbols it depends on.
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* security_binder_transaction() - Check if a binder transaction is allowed
|
* security_binder_transaction() - Check if a binder transaction is allowed
|
||||||
@@ -1012,6 +1013,7 @@ int security_binder_transaction(const st
|
@@ -1011,6 +1012,7 @@ int security_binder_transaction(const st
|
||||||
{
|
{
|
||||||
return call_int_hook(binder_transaction, from, to);
|
return call_int_hook(binder_transaction, from, to);
|
||||||
}
|
}
|
||||||
@@ -108,7 +108,7 @@ Export the currently un-exported symbols it depends on.
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* security_binder_transfer_binder() - Check if a binder transfer is allowed
|
* security_binder_transfer_binder() - Check if a binder transfer is allowed
|
||||||
@@ -1027,6 +1029,7 @@ int security_binder_transfer_binder(cons
|
@@ -1026,6 +1028,7 @@ int security_binder_transfer_binder(cons
|
||||||
{
|
{
|
||||||
return call_int_hook(binder_transfer_binder, from, to);
|
return call_int_hook(binder_transfer_binder, from, to);
|
||||||
}
|
}
|
||||||
@@ -116,7 +116,7 @@ Export the currently un-exported symbols it depends on.
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* security_binder_transfer_file() - Check if a binder file xfer is allowed
|
* security_binder_transfer_file() - Check if a binder file xfer is allowed
|
||||||
@@ -1043,6 +1046,7 @@ int security_binder_transfer_file(const
|
@@ -1042,6 +1045,7 @@ int security_binder_transfer_file(const
|
||||||
{
|
{
|
||||||
return call_int_hook(binder_transfer_file, from, to, file);
|
return call_int_hook(binder_transfer_file, from, to, file);
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
@@ -1763,6 +1763,14 @@ static int do_fanotify_mark(int fanotify
|
@@ -1838,6 +1838,14 @@ static int do_fanotify_mark(int fanotify
|
||||||
umask = FANOTIFY_EVENT_FLAGS;
|
umask = FANOTIFY_EVENT_FLAGS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,6 +24,6 @@ actually used.
|
|||||||
+ }
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
f = fdget(fanotify_fd);
|
CLASS(fd, f)(fanotify_fd);
|
||||||
if (unlikely(!fd_file(f)))
|
if (fd_empty(f))
|
||||||
return -EBADF;
|
return -EBADF;
|
||||||
|
@@ -9,7 +9,7 @@ This reverts commit 561ec64ae67ef25cac8d72bb9c4bfc955edfd415
|
|||||||
|
|
||||||
--- a/fs/namei.c
|
--- a/fs/namei.c
|
||||||
+++ b/fs/namei.c
|
+++ b/fs/namei.c
|
||||||
@@ -1034,8 +1034,8 @@ static inline void put_link(struct namei
|
@@ -1094,8 +1094,8 @@ static inline void put_link(struct namei
|
||||||
path_put(&last->link);
|
path_put(&last->link);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -16,8 +16,8 @@ The error message is based on that used in commit 0126be38d988
|
|||||||
---
|
---
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -134,6 +134,18 @@ ifeq ("$(origin M)", "command line")
|
@@ -138,6 +138,18 @@ ifeq ("$(origin MO)", "command line")
|
||||||
KBUILD_EXTMOD := $(M)
|
KBUILD_EXTMOD_OUTPUT := $(MO)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
+# Old syntax make ... SUBDIRS=$PWD should be rejected to avoid mishaps
|
+# Old syntax make ... SUBDIRS=$PWD should be rejected to avoid mishaps
|
||||||
|
@@ -27,27 +27,27 @@ rules.real and change Makefile.modfinal to look for it in both places.
|
|||||||
|
|
||||||
--- a/scripts/Makefile.modfinal
|
--- a/scripts/Makefile.modfinal
|
||||||
+++ b/scripts/Makefile.modfinal
|
+++ b/scripts/Makefile.modfinal
|
||||||
@@ -33,11 +33,13 @@ quiet_cmd_cc_o_c = CC [M] $@
|
@@ -28,11 +28,13 @@ ccflags-remove-y := $(CC_FLAGS_CFI)
|
||||||
$(extmod_prefix).module-common.o: $(srctree)/scripts/module-common.c FORCE
|
.module-common.o: $(srctree)/scripts/module-common.c FORCE
|
||||||
$(call if_changed_dep,cc_o_c)
|
$(call if_changed_rule,cc_o_c)
|
||||||
|
|
||||||
+ARCH_MODULE_LDS := $(word 1,$(wildcard scripts/module.lds arch/$(SRCARCH)/module.lds))
|
+ARCH_MODULE_LDS := $(word 1,$(wildcard $(objtree)/scripts/module.lds $(objtree)/arch/$(SRCARCH)/module.lds))
|
||||||
+
|
+
|
||||||
quiet_cmd_ld_ko_o = LD [M] $@
|
quiet_cmd_ld_ko_o = LD [M] $@
|
||||||
cmd_ld_ko_o = \
|
cmd_ld_ko_o = \
|
||||||
$(LD) -r $(KBUILD_LDFLAGS) \
|
$(LD) -r $(KBUILD_LDFLAGS) \
|
||||||
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \
|
||||||
- -T scripts/module.lds -o $@ $(filter %.o, $^)
|
- -T $(objtree)/scripts/module.lds -o $@ $(filter %.o, $^)
|
||||||
+ -T $(ARCH_MODULE_LDS) -o $@ $(filter %.o, $^)
|
+ -T $(ARCH_MODULE_LDS) -o $@ $(filter %.o, $^)
|
||||||
|
|
||||||
quiet_cmd_btf_ko = BTF [M] $@
|
quiet_cmd_btf_ko = BTF [M] $@
|
||||||
cmd_btf_ko = \
|
cmd_btf_ko = \
|
||||||
@@ -57,7 +59,7 @@ if_changed_except = $(if $(call newer_pr
|
@@ -52,7 +54,7 @@ if_changed_except = $(if $(call newer_pr
|
||||||
printf '%s\n' 'savedcmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
|
printf '%s\n' 'savedcmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
|
||||||
|
|
||||||
# Re-generate module BTFs if either module's .ko or vmlinux changed
|
# Re-generate module BTFs if either module's .ko or vmlinux changed
|
||||||
-%.ko: %.o %.mod.o $(extmod_prefix).module-common.o scripts/module.lds $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),vmlinux) FORCE
|
-%.ko: %.o %.mod.o .module-common.o $(objtree)/scripts/module.lds $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),$(objtree)/vmlinux) FORCE
|
||||||
+%.ko: %.o %.mod.o $(extmod_prefix).module-common.o $(ARCH_MODULE_LDS) $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),vmlinux) FORCE
|
+%.ko: %.o %.mod.o .module-common.o $(ARCH_MODULE_LDS) $(and $(CONFIG_DEBUG_INFO_BTF_MODULES),$(KBUILD_BUILTIN),$(objtree)/vmlinux) FORCE
|
||||||
+$(call if_changed_except,ld_ko_o,vmlinux)
|
+$(call if_changed_except,ld_ko_o,$(objtree)/vmlinux)
|
||||||
ifdef CONFIG_DEBUG_INFO_BTF_MODULES
|
ifdef CONFIG_DEBUG_INFO_BTF_MODULES
|
||||||
+$(if $(newer-prereqs),$(call cmd,btf_ko))
|
+$(if $(newer-prereqs),$(call cmd,btf_ko))
|
||||||
|
8
debian/patches/debian/kernelvariables.patch
vendored
8
debian/patches/debian/kernelvariables.patch
vendored
@@ -14,10 +14,12 @@ use of $(ARCH) needs to be moved after this.
|
|||||||
|
|
||||||
[bwh: Updated for 5.3: include .kernelvariables from current directory
|
[bwh: Updated for 5.3: include .kernelvariables from current directory
|
||||||
rather than using undefined $(obj).]
|
rather than using undefined $(obj).]
|
||||||
|
|
||||||
|
[carnil: Update for 6.13: Include .kernelvariables from $(objtree).]
|
||||||
---
|
---
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -380,36 +380,6 @@ include $(srctree)/scripts/subarch.inclu
|
@@ -405,36 +405,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)
|
||||||
|
|
||||||
@@ -54,11 +56,11 @@ use of $(ARCH) needs to be moved after this.
|
|||||||
KCONFIG_CONFIG ?= .config
|
KCONFIG_CONFIG ?= .config
|
||||||
export KCONFIG_CONFIG
|
export KCONFIG_CONFIG
|
||||||
|
|
||||||
@@ -529,6 +499,35 @@ RUSTFLAGS_KERNEL =
|
@@ -555,6 +525,35 @@ RUSTFLAGS_KERNEL =
|
||||||
AFLAGS_KERNEL =
|
AFLAGS_KERNEL =
|
||||||
LDFLAGS_vmlinux =
|
LDFLAGS_vmlinux =
|
||||||
|
|
||||||
+-include .kernelvariables
|
+-include $(objtree)/.kernelvariables
|
||||||
+
|
+
|
||||||
+# Architecture as present in compile.h
|
+# Architecture as present in compile.h
|
||||||
+UTS_MACHINE := $(ARCH)
|
+UTS_MACHINE := $(ARCH)
|
||||||
|
@@ -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
|
||||||
@@ -662,10 +662,12 @@ static int report__browse_hists(struct r
|
@@ -660,10 +660,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,10 +30,10 @@ 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 @@ perf-test-$(CONFIG_DWARF_UNWIND) += dwar
|
@@ -73,7 +73,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86
|
||||||
|
perf-test-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
CFLAGS_attr.o += -DBINDIR="BUILD_STR($(bindir_SQ))" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
|
||||||
-CFLAGS_python-use.o += -DPYTHONPATH="BUILD_STR($(OUTPUT)python)" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
-CFLAGS_python-use.o += -DPYTHONPATH="BUILD_STR($(OUTPUT)python)" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
||||||
+CFLAGS_python-use.o += -DPYTHONPATH="BUILD_STR($(perfexec_instdir_SQ)/scripts/python)" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
+CFLAGS_python-use.o += -DPYTHONPATH="BUILD_STR($(perfexec_instdir_SQ)/scripts/python)" -DPYTHON="BUILD_STR($(PYTHON_WORD))"
|
||||||
CFLAGS_dwarf-unwind.o += -fno-optimize-sibling-calls
|
CFLAGS_dwarf-unwind.o += -fno-optimize-sibling-calls
|
||||||
|
@@ -20,7 +20,7 @@ is non-empty.
|
|||||||
---
|
---
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -1825,7 +1825,7 @@ PHONY += prepare
|
@@ -1873,7 +1873,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
|
||||||
@@ -1153,7 +1153,7 @@ install-bin: install-tools install-tests
|
@@ -1139,7 +1139,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
|
||||||
@@ -1075,21 +1075,21 @@ install-tools: all install-gtk
|
@@ -1067,21 +1067,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'
|
||||||
|
@@ -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 {
|
||||||
@@ -476,7 +476,7 @@ static inline void yama_init_sysctl(void
|
@@ -474,7 +474,7 @@ static inline void yama_init_sysctl(void
|
||||||
|
|
||||||
static int __init yama_init(void)
|
static int __init yama_init(void)
|
||||||
{
|
{
|
||||||
|
@@ -1,153 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -765,7 +765,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;
|
|
@@ -1,153 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1070,19 +1070,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
|
|
||||||
@@ -876,6 +876,14 @@ static inline int efi_range_is_wc(unsign
|
|
||||||
#define EFI_MEM_ATTR 10 /* Did firmware publish an EFI_MEMORY_ATTRIBUTES table? */
|
|
||||||
#define EFI_MEM_NO_SOFT_RESERVE 11 /* Is the kernel configured to ignore soft reservations? */
|
|
||||||
#define EFI_PRESERVE_BS_REGIONS 12 /* Are EFI boot-services memory segments available? */
|
|
||||||
+#define EFI_SECURE_BOOT 13 /* 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
|
|
||||||
/*
|
|
||||||
@@ -900,6 +908,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)
|
|
||||||
{
|
|
||||||
@@ -919,6 +928,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);
|
|
||||||
@@ -1137,13 +1147,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)
|
|
||||||
{
|
|
@@ -1,121 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -904,6 +904,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();
|
|
||||||
|
|
||||||
@@ -1070,8 +1072,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
|
|
||||||
@@ -522,6 +522,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, void **ctx, u32 *ctxlen);
|
|
||||||
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);
|
|
||||||
@@ -1504,6 +1505,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;
|
|
@@ -1,75 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -364,7 +364,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,7 +22,7 @@ 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
|
||||||
@@ -1623,6 +1623,11 @@ int perf_cpu_time_max_percent_handler(co
|
@@ -1659,6 +1659,11 @@ int perf_cpu_time_max_percent_handler(co
|
||||||
int perf_event_max_stack_handler(const struct ctl_table *table, int write,
|
int perf_event_max_stack_handler(const struct ctl_table *table, int write,
|
||||||
void *buffer, size_t *lenp, loff_t *ppos);
|
void *buffer, size_t *lenp, loff_t *ppos);
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
/* Minimum for 512 kiB + 1 user control page */
|
/* Minimum for 512 kiB + 1 user control page */
|
||||||
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
|
int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
|
||||||
@@ -12691,6 +12696,9 @@ SYSCALL_DEFINE5(perf_event_open,
|
@@ -12821,6 +12826,9 @@ SYSCALL_DEFINE5(perf_event_open,
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
@@ -48,7 +48,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
def_bool y
|
def_bool y
|
||||||
--- a/drivers/iommu/intel/iommu.c
|
--- a/drivers/iommu/intel/iommu.c
|
||||||
+++ b/drivers/iommu/intel/iommu.c
|
+++ b/drivers/iommu/intel/iommu.c
|
||||||
@@ -205,13 +205,13 @@ static LIST_HEAD(dmar_satc_units);
|
@@ -204,13 +204,13 @@ static LIST_HEAD(dmar_satc_units);
|
||||||
|
|
||||||
static void intel_iommu_domain_free(struct iommu_domain *domain);
|
static void intel_iommu_domain_free(struct iommu_domain *domain);
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
static int intel_iommu_superpage = 1;
|
static int intel_iommu_superpage = 1;
|
||||||
static int iommu_identity_mapping;
|
static int iommu_identity_mapping;
|
||||||
static int iommu_skip_te_disable;
|
static int iommu_skip_te_disable;
|
||||||
@@ -250,6 +250,7 @@ static int __init intel_iommu_setup(char
|
@@ -249,6 +249,7 @@ static int __init intel_iommu_setup(char
|
||||||
while (*str) {
|
while (*str) {
|
||||||
if (!strncmp(str, "on", 2)) {
|
if (!strncmp(str, "on", 2)) {
|
||||||
dmar_disabled = 0;
|
dmar_disabled = 0;
|
||||||
|
@@ -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
|
||||||
@@ -2218,6 +2218,8 @@
|
@@ -2247,6 +2247,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.
|
||||||
@@ -33,7 +33,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
sp_off [Default Off]
|
sp_off [Default Off]
|
||||||
--- a/drivers/iommu/intel/iommu.c
|
--- a/drivers/iommu/intel/iommu.c
|
||||||
+++ b/drivers/iommu/intel/iommu.c
|
+++ b/drivers/iommu/intel/iommu.c
|
||||||
@@ -36,6 +36,9 @@
|
@@ -35,6 +35,9 @@
|
||||||
#define CONTEXT_SIZE VTD_PAGE_SIZE
|
#define CONTEXT_SIZE VTD_PAGE_SIZE
|
||||||
|
|
||||||
#define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
|
#define IS_GFX_DEVICE(pdev) ((pdev->class >> 16) == PCI_BASE_CLASS_DISPLAY)
|
||||||
@@ -43,7 +43,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
#define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
|
#define IS_USB_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_SERIAL_USB)
|
||||||
#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
|
#define IS_ISA_DEVICE(pdev) ((pdev->class >> 8) == PCI_CLASS_BRIDGE_ISA)
|
||||||
#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
|
#define IS_AZALIA(pdev) ((pdev)->vendor == 0x8086 && (pdev)->device == 0x3a3e)
|
||||||
@@ -208,12 +211,14 @@ int intel_iommu_sm = IS_ENABLED(CONFIG_I
|
@@ -207,12 +210,14 @@ int intel_iommu_sm = IS_ENABLED(CONFIG_I
|
||||||
int intel_iommu_enabled = 0;
|
int intel_iommu_enabled = 0;
|
||||||
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
|
EXPORT_SYMBOL_GPL(intel_iommu_enabled);
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||||||
|
|
||||||
const struct iommu_ops intel_iommu_ops;
|
const struct iommu_ops intel_iommu_ops;
|
||||||
static const struct iommu_dirty_ops intel_dirty_ops;
|
static const struct iommu_dirty_ops intel_dirty_ops;
|
||||||
@@ -253,6 +258,9 @@ static int __init intel_iommu_setup(char
|
@@ -252,6 +257,9 @@ static int __init intel_iommu_setup(char
|
||||||
} else if (!strncmp(str, "igfx_off", 8)) {
|
} else if (!strncmp(str, "igfx_off", 8)) {
|
||||||
disable_igfx_iommu = 1;
|
disable_igfx_iommu = 1;
|
||||||
pr_info("Disable GFX device mapping\n");
|
pr_info("Disable GFX device mapping\n");
|
||||||
@@ -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;
|
||||||
@@ -2046,6 +2054,9 @@ static int device_def_domain_type(struct
|
@@ -1902,6 +1910,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;
|
||||||
@@ -2344,6 +2355,9 @@ static int __init init_dmars(void)
|
@@ -2196,6 +2207,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
|
||||||
@@ -6641,6 +6641,10 @@
|
@@ -6982,6 +6982,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
|
||||||
@@ -3165,6 +3165,14 @@ config COMPAT_32
|
@@ -3186,6 +3186,14 @@ config COMPAT_32
|
||||||
select HAVE_UID16
|
select HAVE_UID16
|
||||||
select OLD_SIGSUSPEND3
|
select OLD_SIGSUSPEND3
|
||||||
|
|
||||||
|
@@ -30,7 +30,7 @@ this reverts following commit:
|
|||||||
|
|
||||||
--- a/tools/objtool/check.c
|
--- a/tools/objtool/check.c
|
||||||
+++ b/tools/objtool/check.c
|
+++ b/tools/objtool/check.c
|
||||||
@@ -4897,10 +4897,14 @@ int check(struct objtool_file *file)
|
@@ -4771,10 +4771,14 @@ int check(struct objtool_file *file)
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
2
debian/patches/krd/0003-local-ports.patch
vendored
2
debian/patches/krd/0003-local-ports.patch
vendored
@@ -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
|
||||||
@@ -1800,7 +1800,7 @@ static __net_init int inet_init_net(stru
|
@@ -1790,7 +1790,7 @@ static __net_init int inet_init_net(stru
|
||||||
/*
|
/*
|
||||||
* Set defaults for local port range
|
* Set defaults for local port range
|
||||||
*/
|
*/
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
--- a/net/bridge/br_input.c
|
--- a/net/bridge/br_input.c
|
||||||
+++ b/net/bridge/br_input.c
|
+++ b/net/bridge/br_input.c
|
||||||
@@ -374,7 +374,11 @@ static rx_handler_result_t br_handle_fra
|
@@ -383,7 +383,11 @@ static rx_handler_result_t br_handle_fra
|
||||||
return RX_HANDLER_PASS;
|
|
||||||
|
|
||||||
case 0x01: /* IEEE MAC (Pause) */
|
case 0x01: /* IEEE MAC (Pause) */
|
||||||
|
reason = SKB_DROP_REASON_MAC_IEEE_MAC_CONTROL;
|
||||||
- goto drop;
|
- goto drop;
|
||||||
+ fwd_mask |= p->br->group_fwd_mask;
|
+ fwd_mask |= p->br->group_fwd_mask;
|
||||||
+ if (fwd_mask & (1u << dest[5]))
|
+ if (fwd_mask & (1u << dest[5]))
|
||||||
|
@@ -1,42 +0,0 @@
|
|||||||
From d53b209e5fcee3b3c53c30a4cc4fcc8e392a8fce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexandre Frade <kernel@xanmod.org>
|
|
||||||
Date: Mon, 11 Mar 2024 12:01:13 -0300
|
|
||||||
Subject: [PATCH 19/19] x86/cfi,bpf: Add tso_segs and skb_marked_lost to
|
|
||||||
bpf_struct_ops CFI
|
|
||||||
|
|
||||||
Rebased-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
|
||||||
[ https://github.com/sirlucjan/kernel-patches/blob/master/6.8/bbr3-patches/0001-tcp-bbr3-initial-import.patch ]
|
|
||||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|
||||||
---
|
|
||||||
net/ipv4/bpf_tcp_ca.c | 9 +++++++--
|
|
||||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/net/ipv4/bpf_tcp_ca.c
|
|
||||||
+++ b/net/ipv4/bpf_tcp_ca.c
|
|
||||||
@@ -280,11 +280,15 @@ static void bpf_tcp_ca_pkts_acked(struct
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
-static u32 bpf_tcp_ca_min_tso_segs(struct sock *sk)
|
|
||||||
+static u32 bpf_tcp_ca_tso_segs(struct sock *sk, unsigned int mss_now)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void bpf_tcp_ca_skb_marked_lost(struct sock *sk, const struct sk_buff *skb)
|
|
||||||
+{
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void bpf_tcp_ca_cong_control(struct sock *sk, u32 ack, int flag,
|
|
||||||
const struct rate_sample *rs)
|
|
||||||
{
|
|
||||||
@@ -315,7 +319,8 @@ static struct tcp_congestion_ops __bpf_o
|
|
||||||
.cwnd_event = bpf_tcp_ca_cwnd_event,
|
|
||||||
.in_ack_event = bpf_tcp_ca_in_ack_event,
|
|
||||||
.pkts_acked = bpf_tcp_ca_pkts_acked,
|
|
||||||
- .min_tso_segs = bpf_tcp_ca_min_tso_segs,
|
|
||||||
+ .tso_segs = bpf_tcp_ca_tso_segs,
|
|
||||||
+ .skb_marked_lost = bpf_tcp_ca_skb_marked_lost,
|
|
||||||
.cong_control = bpf_tcp_ca_cong_control,
|
|
||||||
.undo_cwnd = bpf_tcp_ca_undo_cwnd,
|
|
||||||
.sndbuf_expand = bpf_tcp_ca_sndbuf_expand,
|
|
@@ -1,55 +0,0 @@
|
|||||||
From e50ffd43b88d64b8063a9fce59f1d03b56f6144c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:42 -0600
|
|
||||||
Subject: ntsync: Return the fd from NTSYNC_IOC_CREATE_SEM.
|
|
||||||
|
|
||||||
Simplify the user API a bit by returning the fd as return value from the ioctl
|
|
||||||
instead of through the argument pointer.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 7 ++-----
|
|
||||||
include/uapi/linux/ntsync.h | 3 +--
|
|
||||||
2 files changed, 3 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -165,7 +165,6 @@ static int ntsync_obj_get_fd(struct ntsy
|
|
||||||
|
|
||||||
static int ntsync_create_sem(struct ntsync_device *dev, void __user *argp)
|
|
||||||
{
|
|
||||||
- struct ntsync_sem_args __user *user_args = argp;
|
|
||||||
struct ntsync_sem_args args;
|
|
||||||
struct ntsync_obj *sem;
|
|
||||||
int fd;
|
|
||||||
@@ -182,12 +181,10 @@ static int ntsync_create_sem(struct ntsy
|
|
||||||
sem->u.sem.count = args.count;
|
|
||||||
sem->u.sem.max = args.max;
|
|
||||||
fd = ntsync_obj_get_fd(sem);
|
|
||||||
- if (fd < 0) {
|
|
||||||
+ if (fd < 0)
|
|
||||||
kfree(sem);
|
|
||||||
- return fd;
|
|
||||||
- }
|
|
||||||
|
|
||||||
- return put_user(fd, &user_args->sem);
|
|
||||||
+ return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int ntsync_char_open(struct inode *inode, struct file *file)
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -11,12 +11,11 @@
|
|
||||||
#include <linux/types.h>
|
|
||||||
|
|
||||||
struct ntsync_sem_args {
|
|
||||||
- __u32 sem;
|
|
||||||
__u32 count;
|
|
||||||
__u32 max;
|
|
||||||
};
|
|
||||||
|
|
||||||
-#define NTSYNC_IOC_CREATE_SEM _IOWR('N', 0x80, struct ntsync_sem_args)
|
|
||||||
+#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
|
|
||||||
|
|
@@ -1,64 +0,0 @@
|
|||||||
From 160e9bf7826da868ae4de261753a03cce2208ff6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:43 -0600
|
|
||||||
Subject: ntsync: Rename NTSYNC_IOC_SEM_POST to NTSYNC_IOC_SEM_RELEASE.
|
|
||||||
|
|
||||||
Use the more common "release" terminology, which is also the term used by NT,
|
|
||||||
instead of "post" (which is used by POSIX).
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 10 +++++-----
|
|
||||||
include/uapi/linux/ntsync.h | 2 +-
|
|
||||||
2 files changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -57,7 +57,7 @@ struct ntsync_device {
|
|
||||||
* Actually change the semaphore state, returning -EOVERFLOW if it is made
|
|
||||||
* invalid.
|
|
||||||
*/
|
|
||||||
-static int post_sem_state(struct ntsync_obj *sem, __u32 count)
|
|
||||||
+static int release_sem_state(struct ntsync_obj *sem, __u32 count)
|
|
||||||
{
|
|
||||||
__u32 sum;
|
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ static int post_sem_state(struct ntsync_
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int ntsync_sem_post(struct ntsync_obj *sem, void __user *argp)
|
|
||||||
+static int ntsync_sem_release(struct ntsync_obj *sem, void __user *argp)
|
|
||||||
{
|
|
||||||
__u32 __user *user_args = argp;
|
|
||||||
__u32 prev_count;
|
|
||||||
@@ -87,7 +87,7 @@ static int ntsync_sem_post(struct ntsync
|
|
||||||
spin_lock(&sem->lock);
|
|
||||||
|
|
||||||
prev_count = sem->u.sem.count;
|
|
||||||
- ret = post_sem_state(sem, args);
|
|
||||||
+ ret = release_sem_state(sem, args);
|
|
||||||
|
|
||||||
spin_unlock(&sem->lock);
|
|
||||||
|
|
||||||
@@ -114,8 +114,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
void __user *argp = (void __user *)parm;
|
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
- case NTSYNC_IOC_SEM_POST:
|
|
||||||
- return ntsync_sem_post(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_SEM_RELEASE:
|
|
||||||
+ return ntsync_sem_release(obj, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -17,6 +17,6 @@ struct ntsync_sem_args {
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
|
|
||||||
|
|
||||||
-#define NTSYNC_IOC_SEM_POST _IOWR('N', 0x81, __u32)
|
|
||||||
+#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,377 +0,0 @@
|
|||||||
From e855a17ec837cdee9047e6e23e47ed7b4312a265 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:44 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_WAIT_ANY.
|
|
||||||
|
|
||||||
This corresponds to part of the functionality of the NT syscall
|
|
||||||
NtWaitForMultipleObjects(). Specifically, it implements the behaviour where
|
|
||||||
the third argument (wait_any) is TRUE, and it does not handle alertable waits.
|
|
||||||
Those features have been split out into separate patches to ease review.
|
|
||||||
|
|
||||||
This patch therefore implements the wait/wake infrastructure which comprises the
|
|
||||||
core of ntsync's functionality.
|
|
||||||
|
|
||||||
NTSYNC_IOC_WAIT_ANY is a vectored wait function similar to poll(). Unlike
|
|
||||||
poll(), it "consumes" objects when they are signaled. For semaphores, this means
|
|
||||||
decreasing one from the internal counter. At most one object can be consumed by
|
|
||||||
this function.
|
|
||||||
|
|
||||||
This wait/wake model is fundamentally different from that used anywhere else in
|
|
||||||
the kernel, and for that reason ntsync does not use any existing infrastructure,
|
|
||||||
such as futexes, kernel mutexes or semaphores, or wait_event().
|
|
||||||
|
|
||||||
Up to 64 objects can be waited on at once. As soon as one is signaled, the
|
|
||||||
object with the lowest index is consumed, and that index is returned via the
|
|
||||||
"index" field.
|
|
||||||
|
|
||||||
A timeout is supported. The timeout is passed as a u64 nanosecond value, which
|
|
||||||
represents absolute time measured against either the MONOTONIC or REALTIME clock
|
|
||||||
(controlled by the flags argument). If U64_MAX is passed, the ioctl waits
|
|
||||||
indefinitely.
|
|
||||||
|
|
||||||
This ioctl validates that all objects belong to the relevant device. This is not
|
|
||||||
necessary for any technical reason related to NTSYNC_IOC_WAIT_ANY, but will be
|
|
||||||
necessary for NTSYNC_IOC_WAIT_ALL introduced in the following patch.
|
|
||||||
|
|
||||||
Some padding fields are added for alignment and for fields which will be added
|
|
||||||
in future patches (split out to ease review).
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 247 +++++++++++++++++++++++++++++++++++-
|
|
||||||
include/uapi/linux/ntsync.h | 14 ++
|
|
||||||
2 files changed, 260 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -6,11 +6,16 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/anon_inodes.h>
|
|
||||||
+#include <linux/atomic.h>
|
|
||||||
#include <linux/file.h>
|
|
||||||
#include <linux/fs.h>
|
|
||||||
+#include <linux/hrtimer.h>
|
|
||||||
+#include <linux/ktime.h>
|
|
||||||
#include <linux/miscdevice.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/overflow.h>
|
|
||||||
+#include <linux/sched.h>
|
|
||||||
+#include <linux/sched/signal.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include <linux/spinlock.h>
|
|
||||||
#include <uapi/linux/ntsync.h>
|
|
||||||
@@ -30,6 +35,8 @@ enum ntsync_type {
|
|
||||||
*
|
|
||||||
* Both rely on struct file for reference counting. Individual
|
|
||||||
* ntsync_obj objects take a reference to the device when created.
|
|
||||||
+ * Wait operations take a reference to each object being waited on for
|
|
||||||
+ * the duration of the wait.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct ntsync_obj {
|
|
||||||
@@ -47,12 +54,55 @@ struct ntsync_obj {
|
|
||||||
__u32 max;
|
|
||||||
} sem;
|
|
||||||
} u;
|
|
||||||
+
|
|
||||||
+ struct list_head any_waiters;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct ntsync_q_entry {
|
|
||||||
+ struct list_head node;
|
|
||||||
+ struct ntsync_q *q;
|
|
||||||
+ struct ntsync_obj *obj;
|
|
||||||
+ __u32 index;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct ntsync_q {
|
|
||||||
+ struct task_struct *task;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Protected via atomic_try_cmpxchg(). Only the thread that wins the
|
|
||||||
+ * compare-and-swap may actually change object states and wake this
|
|
||||||
+ * task.
|
|
||||||
+ */
|
|
||||||
+ atomic_t signaled;
|
|
||||||
+
|
|
||||||
+ __u32 count;
|
|
||||||
+ struct ntsync_q_entry entries[];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ntsync_device {
|
|
||||||
struct file *file;
|
|
||||||
};
|
|
||||||
|
|
||||||
+static void try_wake_any_sem(struct ntsync_obj *sem)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_q_entry *entry;
|
|
||||||
+
|
|
||||||
+ lockdep_assert_held(&sem->lock);
|
|
||||||
+
|
|
||||||
+ list_for_each_entry(entry, &sem->any_waiters, node) {
|
|
||||||
+ struct ntsync_q *q = entry->q;
|
|
||||||
+ int signaled = -1;
|
|
||||||
+
|
|
||||||
+ if (!sem->u.sem.count)
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ if (atomic_try_cmpxchg(&q->signaled, &signaled, entry->index)) {
|
|
||||||
+ sem->u.sem.count--;
|
|
||||||
+ wake_up_process(q->task);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Actually change the semaphore state, returning -EOVERFLOW if it is made
|
|
||||||
* invalid.
|
|
||||||
@@ -87,7 +137,9 @@ static int ntsync_sem_release(struct nts
|
|
||||||
spin_lock(&sem->lock);
|
|
||||||
|
|
||||||
prev_count = sem->u.sem.count;
|
|
||||||
- ret = release_sem_state(sem, args);
|
|
||||||
+ ret = post_sem_state(sem, args);
|
|
||||||
+ if (!ret)
|
|
||||||
+ try_wake_any_sem(sem);
|
|
||||||
|
|
||||||
spin_unlock(&sem->lock);
|
|
||||||
|
|
||||||
@@ -140,6 +192,7 @@ static struct ntsync_obj *ntsync_alloc_o
|
|
||||||
obj->dev = dev;
|
|
||||||
get_file(dev->file);
|
|
||||||
spin_lock_init(&obj->lock);
|
|
||||||
+ INIT_LIST_HEAD(&obj->any_waiters);
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
@@ -187,6 +240,196 @@ static int ntsync_create_sem(struct ntsy
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
|
|
||||||
+{
|
|
||||||
+ struct file *file = fget(fd);
|
|
||||||
+ struct ntsync_obj *obj;
|
|
||||||
+
|
|
||||||
+ if (!file)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ if (file->f_op != &ntsync_obj_fops) {
|
|
||||||
+ fput(file);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ obj = file->private_data;
|
|
||||||
+ if (obj->dev != dev) {
|
|
||||||
+ fput(file);
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return obj;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void put_obj(struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ fput(obj->file);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ntsync_schedule(const struct ntsync_q *q, const struct ntsync_wait_args *args)
|
|
||||||
+{
|
|
||||||
+ ktime_t timeout = ns_to_ktime(args->timeout);
|
|
||||||
+ clockid_t clock = CLOCK_MONOTONIC;
|
|
||||||
+ ktime_t *timeout_ptr;
|
|
||||||
+ int ret = 0;
|
|
||||||
+
|
|
||||||
+ timeout_ptr = (args->timeout == U64_MAX ? NULL : &timeout);
|
|
||||||
+
|
|
||||||
+ if (args->flags & NTSYNC_WAIT_REALTIME)
|
|
||||||
+ clock = CLOCK_REALTIME;
|
|
||||||
+
|
|
||||||
+ do {
|
|
||||||
+ if (signal_pending(current)) {
|
|
||||||
+ ret = -ERESTARTSYS;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ set_current_state(TASK_INTERRUPTIBLE);
|
|
||||||
+ if (atomic_read(&q->signaled) != -1) {
|
|
||||||
+ ret = 0;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ ret = schedule_hrtimeout_range_clock(timeout_ptr, 0, HRTIMER_MODE_ABS, clock);
|
|
||||||
+ } while (ret < 0);
|
|
||||||
+ __set_current_state(TASK_RUNNING);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * Allocate and initialize the ntsync_q structure, but do not queue us yet.
|
|
||||||
+ */
|
|
||||||
+static int setup_wait(struct ntsync_device *dev,
|
|
||||||
+ const struct ntsync_wait_args *args,
|
|
||||||
+ struct ntsync_q **ret_q)
|
|
||||||
+{
|
|
||||||
+ const __u32 count = args->count;
|
|
||||||
+ int fds[NTSYNC_MAX_WAIT_COUNT];
|
|
||||||
+ struct ntsync_q *q;
|
|
||||||
+ __u32 i, j;
|
|
||||||
+
|
|
||||||
+ if (args->pad[0] || args->pad[1] || args->pad[2] || (args->flags & ~NTSYNC_WAIT_REALTIME))
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (args->count > NTSYNC_MAX_WAIT_COUNT)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (copy_from_user(fds, u64_to_user_ptr(args->objs),
|
|
||||||
+ array_size(count, sizeof(*fds))))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ q = kmalloc(struct_size(q, entries, count), GFP_KERNEL);
|
|
||||||
+ if (!q)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ q->task = current;
|
|
||||||
+ atomic_set(&q->signaled, -1);
|
|
||||||
+ q->count = count;
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < count; i++) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
+ struct ntsync_obj *obj = get_obj(dev, fds[i]);
|
|
||||||
+
|
|
||||||
+ if (!obj)
|
|
||||||
+ goto err;
|
|
||||||
+
|
|
||||||
+ entry->obj = obj;
|
|
||||||
+ entry->q = q;
|
|
||||||
+ entry->index = i;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ *ret_q = q;
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+err:
|
|
||||||
+ for (j = 0; j < i; j++)
|
|
||||||
+ put_obj(q->entries[j].obj);
|
|
||||||
+ kfree(q);
|
|
||||||
+ return -EINVAL;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void try_wake_any_obj(struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ switch (obj->type) {
|
|
||||||
+ case NTSYNC_TYPE_SEM:
|
|
||||||
+ try_wake_any_sem(obj);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_wait_args args;
|
|
||||||
+ struct ntsync_q *q;
|
|
||||||
+ int signaled;
|
|
||||||
+ __u32 i;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ ret = setup_wait(dev, &args, &q);
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+ /* queue ourselves */
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < args.count; i++) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
+ struct ntsync_obj *obj = entry->obj;
|
|
||||||
+
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ list_add_tail(&entry->node, &obj->any_waiters);
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* check if we are already signaled */
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < args.count; i++) {
|
|
||||||
+ struct ntsync_obj *obj = q->entries[i].obj;
|
|
||||||
+
|
|
||||||
+ if (atomic_read(&q->signaled) != -1)
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ try_wake_any_obj(obj);
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* sleep */
|
|
||||||
+
|
|
||||||
+ ret = ntsync_schedule(q, &args);
|
|
||||||
+
|
|
||||||
+ /* and finally, unqueue */
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < args.count; i++) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
+ struct ntsync_obj *obj = entry->obj;
|
|
||||||
+
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ list_del(&entry->node);
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+
|
|
||||||
+ put_obj(obj);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ signaled = atomic_read(&q->signaled);
|
|
||||||
+ if (signaled != -1) {
|
|
||||||
+ struct ntsync_wait_args __user *user_args = argp;
|
|
||||||
+
|
|
||||||
+ /* even if we caught a signal, we need to communicate success */
|
|
||||||
+ ret = 0;
|
|
||||||
+
|
|
||||||
+ if (put_user(signaled, &user_args->index))
|
|
||||||
+ ret = -EFAULT;
|
|
||||||
+ } else if (!ret) {
|
|
||||||
+ ret = -ETIMEDOUT;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ kfree(q);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_char_open(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_device *dev;
|
|
||||||
@@ -218,6 +461,8 @@ static long ntsync_char_ioctl(struct fil
|
|
||||||
switch (cmd) {
|
|
||||||
case NTSYNC_IOC_CREATE_SEM:
|
|
||||||
return ntsync_create_sem(dev, argp);
|
|
||||||
+ case NTSYNC_IOC_WAIT_ANY:
|
|
||||||
+ return ntsync_wait_any(dev, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -15,7 +15,21 @@ struct ntsync_sem_args {
|
|
||||||
__u32 max;
|
|
||||||
};
|
|
||||||
|
|
||||||
+#define NTSYNC_WAIT_REALTIME 0x1
|
|
||||||
+
|
|
||||||
+struct ntsync_wait_args {
|
|
||||||
+ __u64 timeout;
|
|
||||||
+ __u64 objs;
|
|
||||||
+ __u32 count;
|
|
||||||
+ __u32 index;
|
|
||||||
+ __u32 flags;
|
|
||||||
+ __u32 pad[3];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define NTSYNC_MAX_WAIT_COUNT 64
|
|
||||||
+
|
|
||||||
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
|
|
||||||
+#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
|
|
@@ -1,533 +0,0 @@
|
|||||||
From 6c1dac87ff835a48a067fe75bd0a6965921dac78 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:45 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_WAIT_ALL.
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
This is similar to NTSYNC_IOC_WAIT_ANY, but waits until all of the objects are
|
|
||||||
simultaneously signaled, and then acquires all of them as a single atomic
|
|
||||||
operation.
|
|
||||||
|
|
||||||
Because acquisition of multiple objects is atomic, some complex locking is
|
|
||||||
required. We cannot simply spin-lock multiple objects simultaneously, as that
|
|
||||||
may disable preëmption for a problematically long time.
|
|
||||||
|
|
||||||
Instead, modifying any object which may be involved in a wait-all operation takes
|
|
||||||
a device-wide sleeping mutex, "wait_all_lock", instead of the normal object
|
|
||||||
spinlock.
|
|
||||||
|
|
||||||
Because wait-for-all is a rare operation, in order to optimize wait-for-any,
|
|
||||||
this lock is only taken when necessary. "all_hint" is used to mark objects which
|
|
||||||
are involved in a wait-for-all operation, and if an object is not, only its
|
|
||||||
spinlock is taken.
|
|
||||||
|
|
||||||
The locking scheme used here was written by Peter Zijlstra.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 336 ++++++++++++++++++++++++++++++++++--
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 323 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -13,6 +13,7 @@
|
|
||||||
#include <linux/ktime.h>
|
|
||||||
#include <linux/miscdevice.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
+#include <linux/mutex.h>
|
|
||||||
#include <linux/overflow.h>
|
|
||||||
#include <linux/sched.h>
|
|
||||||
#include <linux/sched/signal.h>
|
|
||||||
@@ -41,6 +42,7 @@ enum ntsync_type {
|
|
||||||
|
|
||||||
struct ntsync_obj {
|
|
||||||
spinlock_t lock;
|
|
||||||
+ int dev_locked;
|
|
||||||
|
|
||||||
enum ntsync_type type;
|
|
||||||
|
|
||||||
@@ -55,7 +57,30 @@ struct ntsync_obj {
|
|
||||||
} sem;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * any_waiters is protected by the object lock, but all_waiters is
|
|
||||||
+ * protected by the device wait_all_lock.
|
|
||||||
+ */
|
|
||||||
struct list_head any_waiters;
|
|
||||||
+ struct list_head all_waiters;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * Hint describing how many tasks are queued on this object in a
|
|
||||||
+ * wait-all operation.
|
|
||||||
+ *
|
|
||||||
+ * Any time we do a wake, we may need to wake "all" waiters as well as
|
|
||||||
+ * "any" waiters. In order to atomically wake "all" waiters, we must
|
|
||||||
+ * lock all of the objects, and that means grabbing the wait_all_lock
|
|
||||||
+ * below (and, due to lock ordering rules, before locking this object).
|
|
||||||
+ * However, wait-all is a rare operation, and grabbing the wait-all
|
|
||||||
+ * lock for every wake would create unnecessary contention.
|
|
||||||
+ * Therefore we first check whether all_hint is zero, and, if it is,
|
|
||||||
+ * we skip trying to wake "all" waiters.
|
|
||||||
+ *
|
|
||||||
+ * Since wait requests must originate from user-space threads, we're
|
|
||||||
+ * limited here by PID_MAX_LIMIT, so there's no risk of overflow.
|
|
||||||
+ */
|
|
||||||
+ atomic_t all_hint;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ntsync_q_entry {
|
|
||||||
@@ -75,19 +100,198 @@ struct ntsync_q {
|
|
||||||
*/
|
|
||||||
atomic_t signaled;
|
|
||||||
|
|
||||||
+ bool all;
|
|
||||||
__u32 count;
|
|
||||||
struct ntsync_q_entry entries[];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ntsync_device {
|
|
||||||
+ /*
|
|
||||||
+ * Wait-all operations must atomically grab all objects, and be totally
|
|
||||||
+ * ordered with respect to each other and wait-any operations.
|
|
||||||
+ * If one thread is trying to acquire several objects, another thread
|
|
||||||
+ * cannot touch the object at the same time.
|
|
||||||
+ *
|
|
||||||
+ * This device-wide lock is used to serialize wait-for-all
|
|
||||||
+ * operations, and operations on an object that is involved in a
|
|
||||||
+ * wait-for-all.
|
|
||||||
+ */
|
|
||||||
+ struct mutex wait_all_lock;
|
|
||||||
+
|
|
||||||
struct file *file;
|
|
||||||
};
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Single objects are locked using obj->lock.
|
|
||||||
+ *
|
|
||||||
+ * Multiple objects are 'locked' while holding dev->wait_all_lock.
|
|
||||||
+ * In this case however, individual objects are not locked by holding
|
|
||||||
+ * obj->lock, but by setting obj->dev_locked.
|
|
||||||
+ *
|
|
||||||
+ * This means that in order to lock a single object, the sequence is slightly
|
|
||||||
+ * more complicated than usual. Specifically it needs to check obj->dev_locked
|
|
||||||
+ * after acquiring obj->lock, if set, it needs to drop the lock and acquire
|
|
||||||
+ * dev->wait_all_lock in order to serialize against the multi-object operation.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+static void dev_lock_obj(struct ntsync_device *dev, struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ lockdep_assert_held(&dev->wait_all_lock);
|
|
||||||
+ lockdep_assert(obj->dev == dev);
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ /*
|
|
||||||
+ * By setting obj->dev_locked inside obj->lock, it is ensured that
|
|
||||||
+ * anyone holding obj->lock must see the value.
|
|
||||||
+ */
|
|
||||||
+ obj->dev_locked = 1;
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void dev_unlock_obj(struct ntsync_device *dev, struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ lockdep_assert_held(&dev->wait_all_lock);
|
|
||||||
+ lockdep_assert(obj->dev == dev);
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ obj->dev_locked = 0;
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void obj_lock(struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_device *dev = obj->dev;
|
|
||||||
+
|
|
||||||
+ for (;;) {
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ if (likely(!obj->dev_locked))
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+ mutex_lock(&dev->wait_all_lock);
|
|
||||||
+ spin_lock(&obj->lock);
|
|
||||||
+ /*
|
|
||||||
+ * obj->dev_locked should be set and released under the same
|
|
||||||
+ * wait_all_lock section, since we now own this lock, it should
|
|
||||||
+ * be clear.
|
|
||||||
+ */
|
|
||||||
+ lockdep_assert(!obj->dev_locked);
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+ mutex_unlock(&dev->wait_all_lock);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void obj_unlock(struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ spin_unlock(&obj->lock);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static bool ntsync_lock_obj(struct ntsync_device *dev, struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ bool all;
|
|
||||||
+
|
|
||||||
+ obj_lock(obj);
|
|
||||||
+ all = atomic_read(&obj->all_hint);
|
|
||||||
+ if (unlikely(all)) {
|
|
||||||
+ obj_unlock(obj);
|
|
||||||
+ mutex_lock(&dev->wait_all_lock);
|
|
||||||
+ dev_lock_obj(dev, obj);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return all;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void ntsync_unlock_obj(struct ntsync_device *dev, struct ntsync_obj *obj, bool all)
|
|
||||||
+{
|
|
||||||
+ if (all) {
|
|
||||||
+ dev_unlock_obj(dev, obj);
|
|
||||||
+ mutex_unlock(&dev->wait_all_lock);
|
|
||||||
+ } else {
|
|
||||||
+ obj_unlock(obj);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#define ntsync_assert_held(obj) \
|
|
||||||
+ lockdep_assert((lockdep_is_held(&(obj)->lock) != LOCK_STATE_NOT_HELD) || \
|
|
||||||
+ ((lockdep_is_held(&(obj)->dev->wait_all_lock) != LOCK_STATE_NOT_HELD) && \
|
|
||||||
+ (obj)->dev_locked))
|
|
||||||
+
|
|
||||||
+static bool is_signaled(struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ ntsync_assert_held(obj);
|
|
||||||
+
|
|
||||||
+ switch (obj->type) {
|
|
||||||
+ case NTSYNC_TYPE_SEM:
|
|
||||||
+ return !!obj->u.sem.count;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ WARN(1, "bad object type %#x\n", obj->type);
|
|
||||||
+ return false;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
+ * "locked_obj" is an optional pointer to an object which is already locked and
|
|
||||||
+ * should not be locked again. This is necessary so that changing an object's
|
|
||||||
+ * state and waking it can be a single atomic operation.
|
|
||||||
+ */
|
|
||||||
+static void try_wake_all(struct ntsync_device *dev, struct ntsync_q *q,
|
|
||||||
+ struct ntsync_obj *locked_obj)
|
|
||||||
+{
|
|
||||||
+ __u32 count = q->count;
|
|
||||||
+ bool can_wake = true;
|
|
||||||
+ int signaled = -1;
|
|
||||||
+ __u32 i;
|
|
||||||
+
|
|
||||||
+ lockdep_assert_held(&dev->wait_all_lock);
|
|
||||||
+ if (locked_obj)
|
|
||||||
+ lockdep_assert(locked_obj->dev_locked);
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < count; i++) {
|
|
||||||
+ if (q->entries[i].obj != locked_obj)
|
|
||||||
+ dev_lock_obj(dev, q->entries[i].obj);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < count; i++) {
|
|
||||||
+ if (!is_signaled(q->entries[i].obj)) {
|
|
||||||
+ can_wake = false;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (can_wake && atomic_try_cmpxchg(&q->signaled, &signaled, 0)) {
|
|
||||||
+ for (i = 0; i < count; i++) {
|
|
||||||
+ struct ntsync_obj *obj = q->entries[i].obj;
|
|
||||||
+
|
|
||||||
+ switch (obj->type) {
|
|
||||||
+ case NTSYNC_TYPE_SEM:
|
|
||||||
+ obj->u.sem.count--;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ wake_up_process(q->task);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < count; i++) {
|
|
||||||
+ if (q->entries[i].obj != locked_obj)
|
|
||||||
+ dev_unlock_obj(dev, q->entries[i].obj);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void try_wake_all_obj(struct ntsync_device *dev, struct ntsync_obj *obj)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_q_entry *entry;
|
|
||||||
+
|
|
||||||
+ lockdep_assert_held(&dev->wait_all_lock);
|
|
||||||
+ lockdep_assert(obj->dev_locked);
|
|
||||||
+
|
|
||||||
+ list_for_each_entry(entry, &obj->all_waiters, node)
|
|
||||||
+ try_wake_all(dev, entry->q, obj);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void try_wake_any_sem(struct ntsync_obj *sem)
|
|
||||||
{
|
|
||||||
struct ntsync_q_entry *entry;
|
|
||||||
|
|
||||||
- lockdep_assert_held(&sem->lock);
|
|
||||||
+ ntsync_assert_held(sem);
|
|
||||||
+ lockdep_assert(sem->type == NTSYNC_TYPE_SEM);
|
|
||||||
|
|
||||||
list_for_each_entry(entry, &sem->any_waiters, node) {
|
|
||||||
struct ntsync_q *q = entry->q;
|
|
||||||
@@ -111,7 +315,7 @@ static int release_sem_state(struct ntsy
|
|
||||||
{
|
|
||||||
__u32 sum;
|
|
||||||
|
|
||||||
- lockdep_assert_held(&sem->lock);
|
|
||||||
+ ntsync_assert_held(sem);
|
|
||||||
|
|
||||||
if (check_add_overflow(sem->u.sem.count, count, &sum) ||
|
|
||||||
sum > sem->u.sem.max)
|
|
||||||
@@ -123,9 +327,11 @@ static int release_sem_state(struct ntsy
|
|
||||||
|
|
||||||
static int ntsync_sem_release(struct ntsync_obj *sem, void __user *argp)
|
|
||||||
{
|
|
||||||
+ struct ntsync_device *dev = sem->dev;
|
|
||||||
__u32 __user *user_args = argp;
|
|
||||||
__u32 prev_count;
|
|
||||||
__u32 args;
|
|
||||||
+ bool all;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
@@ -134,14 +340,17 @@ static int ntsync_sem_release(struct nts
|
|
||||||
if (sem->type != NTSYNC_TYPE_SEM)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
- spin_lock(&sem->lock);
|
|
||||||
+ all = ntsync_lock_obj(dev, sem);
|
|
||||||
|
|
||||||
prev_count = sem->u.sem.count;
|
|
||||||
- ret = post_sem_state(sem, args);
|
|
||||||
- if (!ret)
|
|
||||||
+ ret = release_sem_state(sem, args);
|
|
||||||
+ if (!ret) {
|
|
||||||
+ if (all)
|
|
||||||
+ try_wake_all_obj(dev, sem);
|
|
||||||
try_wake_any_sem(sem);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- spin_unlock(&sem->lock);
|
|
||||||
+ ntsync_unlock_obj(dev, sem, all);
|
|
||||||
|
|
||||||
if (!ret && put_user(prev_count, user_args))
|
|
||||||
ret = -EFAULT;
|
|
||||||
@@ -193,6 +402,8 @@ static struct ntsync_obj *ntsync_alloc_o
|
|
||||||
get_file(dev->file);
|
|
||||||
spin_lock_init(&obj->lock);
|
|
||||||
INIT_LIST_HEAD(&obj->any_waiters);
|
|
||||||
+ INIT_LIST_HEAD(&obj->all_waiters);
|
|
||||||
+ atomic_set(&obj->all_hint, 0);
|
|
||||||
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
@@ -301,7 +512,7 @@ static int ntsync_schedule(const struct
|
|
||||||
* Allocate and initialize the ntsync_q structure, but do not queue us yet.
|
|
||||||
*/
|
|
||||||
static int setup_wait(struct ntsync_device *dev,
|
|
||||||
- const struct ntsync_wait_args *args,
|
|
||||||
+ const struct ntsync_wait_args *args, bool all,
|
|
||||||
struct ntsync_q **ret_q)
|
|
||||||
{
|
|
||||||
const __u32 count = args->count;
|
|
||||||
@@ -324,6 +535,7 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
return -ENOMEM;
|
|
||||||
q->task = current;
|
|
||||||
atomic_set(&q->signaled, -1);
|
|
||||||
+ q->all = all;
|
|
||||||
q->count = count;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
@@ -333,6 +545,16 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
if (!obj)
|
|
||||||
goto err;
|
|
||||||
|
|
||||||
+ if (all) {
|
|
||||||
+ /* Check that the objects are all distinct. */
|
|
||||||
+ for (j = 0; j < i; j++) {
|
|
||||||
+ if (obj == q->entries[j].obj) {
|
|
||||||
+ put_obj(obj);
|
|
||||||
+ goto err;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
entry->obj = obj;
|
|
||||||
entry->q = q;
|
|
||||||
entry->index = i;
|
|
||||||
@@ -362,13 +584,14 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
struct ntsync_wait_args args;
|
|
||||||
struct ntsync_q *q;
|
|
||||||
int signaled;
|
|
||||||
+ bool all;
|
|
||||||
__u32 i;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
- ret = setup_wait(dev, &args, &q);
|
|
||||||
+ ret = setup_wait(dev, &args, false, &q);
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
@@ -378,9 +601,9 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
struct ntsync_obj *obj = entry->obj;
|
|
||||||
|
|
||||||
- spin_lock(&obj->lock);
|
|
||||||
+ all = ntsync_lock_obj(dev, obj);
|
|
||||||
list_add_tail(&entry->node, &obj->any_waiters);
|
|
||||||
- spin_unlock(&obj->lock);
|
|
||||||
+ ntsync_unlock_obj(dev, obj, all);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check if we are already signaled */
|
|
||||||
@@ -391,9 +614,9 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
if (atomic_read(&q->signaled) != -1)
|
|
||||||
break;
|
|
||||||
|
|
||||||
- spin_lock(&obj->lock);
|
|
||||||
+ all = ntsync_lock_obj(dev, obj);
|
|
||||||
try_wake_any_obj(obj);
|
|
||||||
- spin_unlock(&obj->lock);
|
|
||||||
+ ntsync_unlock_obj(dev, obj, all);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* sleep */
|
|
||||||
@@ -406,13 +629,94 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
struct ntsync_obj *obj = entry->obj;
|
|
||||||
|
|
||||||
- spin_lock(&obj->lock);
|
|
||||||
+ all = ntsync_lock_obj(dev, obj);
|
|
||||||
list_del(&entry->node);
|
|
||||||
- spin_unlock(&obj->lock);
|
|
||||||
+ ntsync_unlock_obj(dev, obj, all);
|
|
||||||
+
|
|
||||||
+ put_obj(obj);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ signaled = atomic_read(&q->signaled);
|
|
||||||
+ if (signaled != -1) {
|
|
||||||
+ struct ntsync_wait_args __user *user_args = argp;
|
|
||||||
+
|
|
||||||
+ /* even if we caught a signal, we need to communicate success */
|
|
||||||
+ ret = 0;
|
|
||||||
+
|
|
||||||
+ if (put_user(signaled, &user_args->index))
|
|
||||||
+ ret = -EFAULT;
|
|
||||||
+ } else if (!ret) {
|
|
||||||
+ ret = -ETIMEDOUT;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ kfree(q);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ntsync_wait_all(struct ntsync_device *dev, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_wait_args args;
|
|
||||||
+ struct ntsync_q *q;
|
|
||||||
+ int signaled;
|
|
||||||
+ __u32 i;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ ret = setup_wait(dev, &args, true, &q);
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+ /* queue ourselves */
|
|
||||||
+
|
|
||||||
+ mutex_lock(&dev->wait_all_lock);
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < args.count; i++) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
+ struct ntsync_obj *obj = entry->obj;
|
|
||||||
+
|
|
||||||
+ atomic_inc(&obj->all_hint);
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * obj->all_waiters is protected by dev->wait_all_lock rather
|
|
||||||
+ * than obj->lock, so there is no need to acquire obj->lock
|
|
||||||
+ * here.
|
|
||||||
+ */
|
|
||||||
+ list_add_tail(&entry->node, &obj->all_waiters);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* check if we are already signaled */
|
|
||||||
+
|
|
||||||
+ try_wake_all(dev, q, NULL);
|
|
||||||
+
|
|
||||||
+ mutex_unlock(&dev->wait_all_lock);
|
|
||||||
+
|
|
||||||
+ /* sleep */
|
|
||||||
+
|
|
||||||
+ ret = ntsync_schedule(q, &args);
|
|
||||||
+
|
|
||||||
+ /* and finally, unqueue */
|
|
||||||
+
|
|
||||||
+ mutex_lock(&dev->wait_all_lock);
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < args.count; i++) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
+ struct ntsync_obj *obj = entry->obj;
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * obj->all_waiters is protected by dev->wait_all_lock rather
|
|
||||||
+ * than obj->lock, so there is no need to acquire it here.
|
|
||||||
+ */
|
|
||||||
+ list_del(&entry->node);
|
|
||||||
+
|
|
||||||
+ atomic_dec(&obj->all_hint);
|
|
||||||
|
|
||||||
put_obj(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ mutex_unlock(&dev->wait_all_lock);
|
|
||||||
+
|
|
||||||
signaled = atomic_read(&q->signaled);
|
|
||||||
if (signaled != -1) {
|
|
||||||
struct ntsync_wait_args __user *user_args = argp;
|
|
||||||
@@ -438,6 +742,8 @@ static int ntsync_char_open(struct inode
|
|
||||||
if (!dev)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
+ mutex_init(&dev->wait_all_lock);
|
|
||||||
+
|
|
||||||
file->private_data = dev;
|
|
||||||
dev->file = file;
|
|
||||||
return nonseekable_open(inode, file);
|
|
||||||
@@ -461,6 +767,8 @@ static long ntsync_char_ioctl(struct fil
|
|
||||||
switch (cmd) {
|
|
||||||
case NTSYNC_IOC_CREATE_SEM:
|
|
||||||
return ntsync_create_sem(dev, argp);
|
|
||||||
+ case NTSYNC_IOC_WAIT_ALL:
|
|
||||||
+ return ntsync_wait_all(dev, argp);
|
|
||||||
case NTSYNC_IOC_WAIT_ANY:
|
|
||||||
return ntsync_wait_any(dev, argp);
|
|
||||||
default:
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -30,6 +30,7 @@ struct ntsync_wait_args {
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
|
|
||||||
#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
|
|
||||||
+#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
|
|
@@ -1,222 +0,0 @@
|
|||||||
From bcdeaefdc4b60e7845232c201427717df3a83277 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:46 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_CREATE_MUTEX.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtCreateMutant().
|
|
||||||
|
|
||||||
An NT mutex is recursive, with a 32-bit recursion counter. When acquired via
|
|
||||||
NtWaitForMultipleObjects(), the recursion counter is incremented by one. The OS
|
|
||||||
records the thread which acquired it.
|
|
||||||
|
|
||||||
The OS records the thread which acquired it. However, in order to keep this
|
|
||||||
driver self-contained, the owning thread ID is managed by user-space, and passed
|
|
||||||
as a parameter to all relevant ioctls.
|
|
||||||
|
|
||||||
The initial owner and recursion count, if any, are specified when the mutex is
|
|
||||||
created.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 74 +++++++++++++++++++++++++++++++++++--
|
|
||||||
include/uapi/linux/ntsync.h | 9 ++++-
|
|
||||||
2 files changed, 79 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -25,6 +25,7 @@
|
|
||||||
|
|
||||||
enum ntsync_type {
|
|
||||||
NTSYNC_TYPE_SEM,
|
|
||||||
+ NTSYNC_TYPE_MUTEX,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -55,6 +56,10 @@ struct ntsync_obj {
|
|
||||||
__u32 count;
|
|
||||||
__u32 max;
|
|
||||||
} sem;
|
|
||||||
+ struct {
|
|
||||||
+ __u32 count;
|
|
||||||
+ pid_t owner;
|
|
||||||
+ } mutex;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -92,6 +97,7 @@ struct ntsync_q_entry {
|
|
||||||
|
|
||||||
struct ntsync_q {
|
|
||||||
struct task_struct *task;
|
|
||||||
+ __u32 owner;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Protected via atomic_try_cmpxchg(). Only the thread that wins the
|
|
||||||
@@ -214,13 +220,17 @@ static void ntsync_unlock_obj(struct nts
|
|
||||||
((lockdep_is_held(&(obj)->dev->wait_all_lock) != LOCK_STATE_NOT_HELD) && \
|
|
||||||
(obj)->dev_locked))
|
|
||||||
|
|
||||||
-static bool is_signaled(struct ntsync_obj *obj)
|
|
||||||
+static bool is_signaled(struct ntsync_obj *obj, __u32 owner)
|
|
||||||
{
|
|
||||||
ntsync_assert_held(obj);
|
|
||||||
|
|
||||||
switch (obj->type) {
|
|
||||||
case NTSYNC_TYPE_SEM:
|
|
||||||
return !!obj->u.sem.count;
|
|
||||||
+ case NTSYNC_TYPE_MUTEX:
|
|
||||||
+ if (obj->u.mutex.owner && obj->u.mutex.owner != owner)
|
|
||||||
+ return false;
|
|
||||||
+ return obj->u.mutex.count < UINT_MAX;
|
|
||||||
}
|
|
||||||
|
|
||||||
WARN(1, "bad object type %#x\n", obj->type);
|
|
||||||
@@ -250,7 +260,7 @@ static void try_wake_all(struct ntsync_d
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
- if (!is_signaled(q->entries[i].obj)) {
|
|
||||||
+ if (!is_signaled(q->entries[i].obj, q->owner)) {
|
|
||||||
can_wake = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -264,6 +274,10 @@ static void try_wake_all(struct ntsync_d
|
|
||||||
case NTSYNC_TYPE_SEM:
|
|
||||||
obj->u.sem.count--;
|
|
||||||
break;
|
|
||||||
+ case NTSYNC_TYPE_MUTEX:
|
|
||||||
+ obj->u.mutex.count++;
|
|
||||||
+ obj->u.mutex.owner = q->owner;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wake_up_process(q->task);
|
|
||||||
@@ -307,6 +321,30 @@ static void try_wake_any_sem(struct ntsy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void try_wake_any_mutex(struct ntsync_obj *mutex)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_q_entry *entry;
|
|
||||||
+
|
|
||||||
+ ntsync_assert_held(mutex);
|
|
||||||
+ lockdep_assert(mutex->type == NTSYNC_TYPE_MUTEX);
|
|
||||||
+
|
|
||||||
+ list_for_each_entry(entry, &mutex->any_waiters, node) {
|
|
||||||
+ struct ntsync_q *q = entry->q;
|
|
||||||
+ int signaled = -1;
|
|
||||||
+
|
|
||||||
+ if (mutex->u.mutex.count == UINT_MAX)
|
|
||||||
+ break;
|
|
||||||
+ if (mutex->u.mutex.owner && mutex->u.mutex.owner != q->owner)
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
+ if (atomic_try_cmpxchg(&q->signaled, &signaled, entry->index)) {
|
|
||||||
+ mutex->u.mutex.count++;
|
|
||||||
+ mutex->u.mutex.owner = q->owner;
|
|
||||||
+ wake_up_process(q->task);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Actually change the semaphore state, returning -EOVERFLOW if it is made
|
|
||||||
* invalid.
|
|
||||||
@@ -451,6 +489,30 @@ static int ntsync_create_sem(struct ntsy
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_create_mutex(struct ntsync_device *dev, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_mutex_args args;
|
|
||||||
+ struct ntsync_obj *mutex;
|
|
||||||
+ int fd;
|
|
||||||
+
|
|
||||||
+ if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ if (!args.owner != !args.count)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ mutex = ntsync_alloc_obj(dev, NTSYNC_TYPE_MUTEX);
|
|
||||||
+ if (!mutex)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ mutex->u.mutex.count = args.count;
|
|
||||||
+ mutex->u.mutex.owner = args.owner;
|
|
||||||
+ fd = ntsync_obj_get_fd(mutex);
|
|
||||||
+ if (fd < 0)
|
|
||||||
+ kfree(mutex);
|
|
||||||
+
|
|
||||||
+ return fd;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
|
|
||||||
{
|
|
||||||
struct file *file = fget(fd);
|
|
||||||
@@ -520,7 +582,7 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
struct ntsync_q *q;
|
|
||||||
__u32 i, j;
|
|
||||||
|
|
||||||
- if (args->pad[0] || args->pad[1] || args->pad[2] || (args->flags & ~NTSYNC_WAIT_REALTIME))
|
|
||||||
+ if (args->pad[0] || args->pad[1] || (args->flags & ~NTSYNC_WAIT_REALTIME))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (args->count > NTSYNC_MAX_WAIT_COUNT)
|
|
||||||
@@ -534,6 +596,7 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
if (!q)
|
|
||||||
return -ENOMEM;
|
|
||||||
q->task = current;
|
|
||||||
+ q->owner = args->owner;
|
|
||||||
atomic_set(&q->signaled, -1);
|
|
||||||
q->all = all;
|
|
||||||
q->count = count;
|
|
||||||
@@ -576,6 +639,9 @@ static void try_wake_any_obj(struct ntsy
|
|
||||||
case NTSYNC_TYPE_SEM:
|
|
||||||
try_wake_any_sem(obj);
|
|
||||||
break;
|
|
||||||
+ case NTSYNC_TYPE_MUTEX:
|
|
||||||
+ try_wake_any_mutex(obj);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -765,6 +831,8 @@ static long ntsync_char_ioctl(struct fil
|
|
||||||
void __user *argp = (void __user *)parm;
|
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
+ case NTSYNC_IOC_CREATE_MUTEX:
|
|
||||||
+ return ntsync_create_mutex(dev, argp);
|
|
||||||
case NTSYNC_IOC_CREATE_SEM:
|
|
||||||
return ntsync_create_sem(dev, argp);
|
|
||||||
case NTSYNC_IOC_WAIT_ALL:
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -15,6 +15,11 @@ struct ntsync_sem_args {
|
|
||||||
__u32 max;
|
|
||||||
};
|
|
||||||
|
|
||||||
+struct ntsync_mutex_args {
|
|
||||||
+ __u32 owner;
|
|
||||||
+ __u32 count;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
#define NTSYNC_WAIT_REALTIME 0x1
|
|
||||||
|
|
||||||
struct ntsync_wait_args {
|
|
||||||
@@ -23,7 +28,8 @@ struct ntsync_wait_args {
|
|
||||||
__u32 count;
|
|
||||||
__u32 index;
|
|
||||||
__u32 flags;
|
|
||||||
- __u32 pad[3];
|
|
||||||
+ __u32 owner;
|
|
||||||
+ __u32 pad[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NTSYNC_MAX_WAIT_COUNT 64
|
|
||||||
@@ -31,6 +37,7 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_CREATE_SEM _IOW ('N', 0x80, struct ntsync_sem_args)
|
|
||||||
#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
|
|
||||||
#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
|
|
||||||
+#define NTSYNC_IOC_CREATE_MUTEX _IOW ('N', 0x84, struct ntsync_mutex_args)
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
|
|
@@ -1,95 +0,0 @@
|
|||||||
From e349279c9dc7fc2136a764a16074a90ef3039f38 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:47 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_MUTEX_UNLOCK.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtReleaseMutant().
|
|
||||||
|
|
||||||
This syscall decrements the mutex's recursion count by one, and returns the
|
|
||||||
previous value. If the mutex is not owned by the current task, the function
|
|
||||||
instead fails and returns -EPERM.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 53 +++++++++++++++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 54 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -396,6 +396,57 @@ static int ntsync_sem_release(struct nts
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Actually change the mutex state, returning -EPERM if not the owner.
|
|
||||||
+ */
|
|
||||||
+static int unlock_mutex_state(struct ntsync_obj *mutex,
|
|
||||||
+ const struct ntsync_mutex_args *args)
|
|
||||||
+{
|
|
||||||
+ ntsync_assert_held(mutex);
|
|
||||||
+
|
|
||||||
+ if (mutex->u.mutex.owner != args->owner)
|
|
||||||
+ return -EPERM;
|
|
||||||
+
|
|
||||||
+ if (!--mutex->u.mutex.count)
|
|
||||||
+ mutex->u.mutex.owner = 0;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ntsync_mutex_unlock(struct ntsync_obj *mutex, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_mutex_args __user *user_args = argp;
|
|
||||||
+ struct ntsync_device *dev = mutex->dev;
|
|
||||||
+ struct ntsync_mutex_args args;
|
|
||||||
+ __u32 prev_count;
|
|
||||||
+ bool all;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ if (!args.owner)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (mutex->type != NTSYNC_TYPE_MUTEX)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, mutex);
|
|
||||||
+
|
|
||||||
+ prev_count = mutex->u.mutex.count;
|
|
||||||
+ ret = unlock_mutex_state(mutex, &args);
|
|
||||||
+ if (!ret) {
|
|
||||||
+ if (all)
|
|
||||||
+ try_wake_all_obj(dev, mutex);
|
|
||||||
+ try_wake_any_mutex(mutex);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, mutex, all);
|
|
||||||
+
|
|
||||||
+ if (!ret && put_user(prev_count, &user_args->count))
|
|
||||||
+ ret = -EFAULT;
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -415,6 +466,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
switch (cmd) {
|
|
||||||
case NTSYNC_IOC_SEM_RELEASE:
|
|
||||||
return ntsync_sem_release(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_MUTEX_UNLOCK:
|
|
||||||
+ return ntsync_mutex_unlock(obj, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -40,5 +40,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_CREATE_MUTEX _IOW ('N', 0x84, struct ntsync_mutex_args)
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
+#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,156 +0,0 @@
|
|||||||
From ebb60a10ac3c6b28ba7a46aa67b279d41ad9356d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:48 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_MUTEX_KILL.
|
|
||||||
|
|
||||||
This does not correspond to any NT syscall. Rather, when a thread dies, it
|
|
||||||
should be called by the NT emulator for each mutex, with the TID of the dying
|
|
||||||
thread.
|
|
||||||
|
|
||||||
NT mutexes are robust (in the pthread sense). When an NT thread dies, any
|
|
||||||
mutexes it owned are immediately released. Acquisition of those mutexes by other
|
|
||||||
threads will return a special value indicating that the mutex was abandoned,
|
|
||||||
like EOWNERDEAD returned from pthread_mutex_lock(), and EOWNERDEAD is indeed
|
|
||||||
used here for that purpose.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 61 +++++++++++++++++++++++++++++++++++--
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 60 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -59,6 +59,7 @@ struct ntsync_obj {
|
|
||||||
struct {
|
|
||||||
__u32 count;
|
|
||||||
pid_t owner;
|
|
||||||
+ bool ownerdead;
|
|
||||||
} mutex;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
@@ -107,6 +108,7 @@ struct ntsync_q {
|
|
||||||
atomic_t signaled;
|
|
||||||
|
|
||||||
bool all;
|
|
||||||
+ bool ownerdead;
|
|
||||||
__u32 count;
|
|
||||||
struct ntsync_q_entry entries[];
|
|
||||||
};
|
|
||||||
@@ -275,6 +277,9 @@ static void try_wake_all(struct ntsync_d
|
|
||||||
obj->u.sem.count--;
|
|
||||||
break;
|
|
||||||
case NTSYNC_TYPE_MUTEX:
|
|
||||||
+ if (obj->u.mutex.ownerdead)
|
|
||||||
+ q->ownerdead = true;
|
|
||||||
+ obj->u.mutex.ownerdead = false;
|
|
||||||
obj->u.mutex.count++;
|
|
||||||
obj->u.mutex.owner = q->owner;
|
|
||||||
break;
|
|
||||||
@@ -338,6 +343,9 @@ static void try_wake_any_mutex(struct nt
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (atomic_try_cmpxchg(&q->signaled, &signaled, entry->index)) {
|
|
||||||
+ if (mutex->u.mutex.ownerdead)
|
|
||||||
+ q->ownerdead = true;
|
|
||||||
+ mutex->u.mutex.ownerdead = false;
|
|
||||||
mutex->u.mutex.count++;
|
|
||||||
mutex->u.mutex.owner = q->owner;
|
|
||||||
wake_up_process(q->task);
|
|
||||||
@@ -447,6 +455,52 @@ static int ntsync_mutex_unlock(struct nt
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * Actually change the mutex state to mark its owner as dead,
|
|
||||||
+ * returning -EPERM if not the owner.
|
|
||||||
+ */
|
|
||||||
+static int kill_mutex_state(struct ntsync_obj *mutex, __u32 owner)
|
|
||||||
+{
|
|
||||||
+ ntsync_assert_held(mutex);
|
|
||||||
+
|
|
||||||
+ if (mutex->u.mutex.owner != owner)
|
|
||||||
+ return -EPERM;
|
|
||||||
+
|
|
||||||
+ mutex->u.mutex.ownerdead = true;
|
|
||||||
+ mutex->u.mutex.owner = 0;
|
|
||||||
+ mutex->u.mutex.count = 0;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int ntsync_mutex_kill(struct ntsync_obj *mutex, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_device *dev = mutex->dev;
|
|
||||||
+ __u32 owner;
|
|
||||||
+ bool all;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if (get_user(owner, (__u32 __user *)argp))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ if (!owner)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ if (mutex->type != NTSYNC_TYPE_MUTEX)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, mutex);
|
|
||||||
+
|
|
||||||
+ ret = kill_mutex_state(mutex, owner);
|
|
||||||
+ if (!ret) {
|
|
||||||
+ if (all)
|
|
||||||
+ try_wake_all_obj(dev, mutex);
|
|
||||||
+ try_wake_any_mutex(mutex);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, mutex, all);
|
|
||||||
+
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -468,6 +522,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
return ntsync_sem_release(obj, argp);
|
|
||||||
case NTSYNC_IOC_MUTEX_UNLOCK:
|
|
||||||
return ntsync_mutex_unlock(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_MUTEX_KILL:
|
|
||||||
+ return ntsync_mutex_kill(obj, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
@@ -652,6 +708,7 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
q->owner = args->owner;
|
|
||||||
atomic_set(&q->signaled, -1);
|
|
||||||
q->all = all;
|
|
||||||
+ q->ownerdead = false;
|
|
||||||
q->count = count;
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++) {
|
|
||||||
@@ -760,7 +817,7 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
struct ntsync_wait_args __user *user_args = argp;
|
|
||||||
|
|
||||||
/* even if we caught a signal, we need to communicate success */
|
|
||||||
- ret = 0;
|
|
||||||
+ ret = q->ownerdead ? -EOWNERDEAD : 0;
|
|
||||||
|
|
||||||
if (put_user(signaled, &user_args->index))
|
|
||||||
ret = -EFAULT;
|
|
||||||
@@ -841,7 +898,7 @@ static int ntsync_wait_all(struct ntsync
|
|
||||||
struct ntsync_wait_args __user *user_args = argp;
|
|
||||||
|
|
||||||
/* even if we caught a signal, we need to communicate success */
|
|
||||||
- ret = 0;
|
|
||||||
+ ret = q->ownerdead ? -EOWNERDEAD : 0;
|
|
||||||
|
|
||||||
if (put_user(signaled, &user_args->index))
|
|
||||||
ret = -EFAULT;
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -41,5 +41,6 @@ struct ntsync_wait_args {
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
|
|
||||||
+#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,162 +0,0 @@
|
|||||||
From f74c8259d49ea4c0e679902da9c7c95ec06ae65c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:49 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_CREATE_EVENT.
|
|
||||||
|
|
||||||
This correspond to the NT syscall NtCreateEvent().
|
|
||||||
|
|
||||||
An NT event holds a single bit of state denoting whether it is signaled or
|
|
||||||
unsignaled.
|
|
||||||
|
|
||||||
There are two types of events: manual-reset and automatic-reset. When an
|
|
||||||
automatic-reset event is acquired via a wait function, its state is reset to
|
|
||||||
unsignaled. Manual-reset events are not affected by wait functions.
|
|
||||||
|
|
||||||
Whether the event is manual-reset, and its initial state, are specified at
|
|
||||||
creation time.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 59 +++++++++++++++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 6 ++++
|
|
||||||
2 files changed, 65 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -26,6 +26,7 @@
|
|
||||||
enum ntsync_type {
|
|
||||||
NTSYNC_TYPE_SEM,
|
|
||||||
NTSYNC_TYPE_MUTEX,
|
|
||||||
+ NTSYNC_TYPE_EVENT,
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -61,6 +62,10 @@ struct ntsync_obj {
|
|
||||||
pid_t owner;
|
|
||||||
bool ownerdead;
|
|
||||||
} mutex;
|
|
||||||
+ struct {
|
|
||||||
+ bool manual;
|
|
||||||
+ bool signaled;
|
|
||||||
+ } event;
|
|
||||||
} u;
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -233,6 +238,8 @@ static bool is_signaled(struct ntsync_ob
|
|
||||||
if (obj->u.mutex.owner && obj->u.mutex.owner != owner)
|
|
||||||
return false;
|
|
||||||
return obj->u.mutex.count < UINT_MAX;
|
|
||||||
+ case NTSYNC_TYPE_EVENT:
|
|
||||||
+ return obj->u.event.signaled;
|
|
||||||
}
|
|
||||||
|
|
||||||
WARN(1, "bad object type %#x\n", obj->type);
|
|
||||||
@@ -283,6 +290,10 @@ static void try_wake_all(struct ntsync_d
|
|
||||||
obj->u.mutex.count++;
|
|
||||||
obj->u.mutex.owner = q->owner;
|
|
||||||
break;
|
|
||||||
+ case NTSYNC_TYPE_EVENT:
|
|
||||||
+ if (!obj->u.event.manual)
|
|
||||||
+ obj->u.event.signaled = false;
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wake_up_process(q->task);
|
|
||||||
@@ -353,6 +364,28 @@ static void try_wake_any_mutex(struct nt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void try_wake_any_event(struct ntsync_obj *event)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_q_entry *entry;
|
|
||||||
+
|
|
||||||
+ ntsync_assert_held(event);
|
|
||||||
+ lockdep_assert(event->type == NTSYNC_TYPE_EVENT);
|
|
||||||
+
|
|
||||||
+ list_for_each_entry(entry, &event->any_waiters, node) {
|
|
||||||
+ struct ntsync_q *q = entry->q;
|
|
||||||
+ int signaled = -1;
|
|
||||||
+
|
|
||||||
+ if (!event->u.event.signaled)
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
+ if (atomic_try_cmpxchg(&q->signaled, &signaled, entry->index)) {
|
|
||||||
+ if (!event->u.event.manual)
|
|
||||||
+ event->u.event.signaled = false;
|
|
||||||
+ wake_up_process(q->task);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/*
|
|
||||||
* Actually change the semaphore state, returning -EOVERFLOW if it is made
|
|
||||||
* invalid.
|
|
||||||
@@ -622,6 +655,27 @@ static int ntsync_create_mutex(struct nt
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_create_event(struct ntsync_device *dev, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_event_args args;
|
|
||||||
+ struct ntsync_obj *event;
|
|
||||||
+ int fd;
|
|
||||||
+
|
|
||||||
+ if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ event = ntsync_alloc_obj(dev, NTSYNC_TYPE_EVENT);
|
|
||||||
+ if (!event)
|
|
||||||
+ return -ENOMEM;
|
|
||||||
+ event->u.event.manual = args.manual;
|
|
||||||
+ event->u.event.signaled = args.signaled;
|
|
||||||
+ fd = ntsync_obj_get_fd(event);
|
|
||||||
+ if (fd < 0)
|
|
||||||
+ kfree(event);
|
|
||||||
+
|
|
||||||
+ return fd;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static struct ntsync_obj *get_obj(struct ntsync_device *dev, int fd)
|
|
||||||
{
|
|
||||||
struct file *file = fget(fd);
|
|
||||||
@@ -752,6 +806,9 @@ static void try_wake_any_obj(struct ntsy
|
|
||||||
case NTSYNC_TYPE_MUTEX:
|
|
||||||
try_wake_any_mutex(obj);
|
|
||||||
break;
|
|
||||||
+ case NTSYNC_TYPE_EVENT:
|
|
||||||
+ try_wake_any_event(obj);
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -941,6 +998,8 @@ static long ntsync_char_ioctl(struct fil
|
|
||||||
void __user *argp = (void __user *)parm;
|
|
||||||
|
|
||||||
switch (cmd) {
|
|
||||||
+ case NTSYNC_IOC_CREATE_EVENT:
|
|
||||||
+ return ntsync_create_event(dev, argp);
|
|
||||||
case NTSYNC_IOC_CREATE_MUTEX:
|
|
||||||
return ntsync_create_mutex(dev, argp);
|
|
||||||
case NTSYNC_IOC_CREATE_SEM:
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -20,6 +20,11 @@ struct ntsync_mutex_args {
|
|
||||||
__u32 count;
|
|
||||||
};
|
|
||||||
|
|
||||||
+struct ntsync_event_args {
|
|
||||||
+ __u32 manual;
|
|
||||||
+ __u32 signaled;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
#define NTSYNC_WAIT_REALTIME 0x1
|
|
||||||
|
|
||||||
struct ntsync_wait_args {
|
|
||||||
@@ -38,6 +43,7 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_WAIT_ANY _IOWR('N', 0x82, struct ntsync_wait_args)
|
|
||||||
#define NTSYNC_IOC_WAIT_ALL _IOWR('N', 0x83, struct ntsync_wait_args)
|
|
||||||
#define NTSYNC_IOC_CREATE_MUTEX _IOW ('N', 0x84, struct ntsync_mutex_args)
|
|
||||||
+#define NTSYNC_IOC_CREATE_EVENT _IOW ('N', 0x87, struct ntsync_event_args)
|
|
||||||
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
|
|
@@ -1,67 +0,0 @@
|
|||||||
From bf60db9cfeccc8f92636b6dcf2eccd7fcd8d84f3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:50 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_SET.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtSetEvent().
|
|
||||||
|
|
||||||
This sets the event to the signaled state, and returns its previous state.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 27 +++++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 28 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -534,6 +534,31 @@ static int ntsync_mutex_kill(struct ntsy
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_event_set(struct ntsync_obj *event, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_device *dev = event->dev;
|
|
||||||
+ __u32 prev_state;
|
|
||||||
+ bool all;
|
|
||||||
+
|
|
||||||
+ if (event->type != NTSYNC_TYPE_EVENT)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, event);
|
|
||||||
+
|
|
||||||
+ prev_state = event->u.event.signaled;
|
|
||||||
+ event->u.event.signaled = true;
|
|
||||||
+ if (all)
|
|
||||||
+ try_wake_all_obj(dev, event);
|
|
||||||
+ try_wake_any_event(event);
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, event, all);
|
|
||||||
+
|
|
||||||
+ if (put_user(prev_state, (__u32 __user *)argp))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -557,6 +582,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
return ntsync_mutex_unlock(obj, argp);
|
|
||||||
case NTSYNC_IOC_MUTEX_KILL:
|
|
||||||
return ntsync_mutex_kill(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_EVENT_SET:
|
|
||||||
+ return ntsync_event_set(obj, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -48,5 +48,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_SEM_RELEASE _IOWR('N', 0x81, __u32)
|
|
||||||
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
|
|
||||||
#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
|
|
||||||
+#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,64 +0,0 @@
|
|||||||
From f2de3c99a840cac45446515dd268cb9d64f9f892 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:51 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_RESET.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtResetEvent().
|
|
||||||
|
|
||||||
This sets the event to the unsignaled state, and returns its previous state.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 24 ++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 25 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -559,6 +559,28 @@ static int ntsync_event_set(struct ntsyn
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_event_reset(struct ntsync_obj *event, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_device *dev = event->dev;
|
|
||||||
+ __u32 prev_state;
|
|
||||||
+ bool all;
|
|
||||||
+
|
|
||||||
+ if (event->type != NTSYNC_TYPE_EVENT)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, event);
|
|
||||||
+
|
|
||||||
+ prev_state = event->u.event.signaled;
|
|
||||||
+ event->u.event.signaled = false;
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, event, all);
|
|
||||||
+
|
|
||||||
+ if (put_user(prev_state, (__u32 __user *)argp))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -584,6 +606,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
return ntsync_mutex_kill(obj, argp);
|
|
||||||
case NTSYNC_IOC_EVENT_SET:
|
|
||||||
return ntsync_event_set(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_EVENT_RESET:
|
|
||||||
+ return ntsync_event_reset(obj, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -49,5 +49,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_MUTEX_UNLOCK _IOWR('N', 0x85, struct ntsync_mutex_args)
|
|
||||||
#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
|
|
||||||
#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)
|
|
||||||
+#define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,60 +0,0 @@
|
|||||||
From 50c791dde217f9fdc1785de77fa2ae888d6bdb4e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:52 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_PULSE.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtPulseEvent().
|
|
||||||
|
|
||||||
This wakes up any waiters as if the event had been set, but does not set the
|
|
||||||
event, instead resetting it if it had been signalled. Thus, for a manual-reset
|
|
||||||
event, all waiters are woken, whereas for an auto-reset event, at most one
|
|
||||||
waiter is woken.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 8 ++++++--
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 7 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -534,7 +534,7 @@ static int ntsync_mutex_kill(struct ntsy
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int ntsync_event_set(struct ntsync_obj *event, void __user *argp)
|
|
||||||
+static int ntsync_event_set(struct ntsync_obj *event, void __user *argp, bool pulse)
|
|
||||||
{
|
|
||||||
struct ntsync_device *dev = event->dev;
|
|
||||||
__u32 prev_state;
|
|
||||||
@@ -550,6 +550,8 @@ static int ntsync_event_set(struct ntsyn
|
|
||||||
if (all)
|
|
||||||
try_wake_all_obj(dev, event);
|
|
||||||
try_wake_any_event(event);
|
|
||||||
+ if (pulse)
|
|
||||||
+ event->u.event.signaled = false;
|
|
||||||
|
|
||||||
ntsync_unlock_obj(dev, event, all);
|
|
||||||
|
|
||||||
@@ -605,9 +607,11 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
case NTSYNC_IOC_MUTEX_KILL:
|
|
||||||
return ntsync_mutex_kill(obj, argp);
|
|
||||||
case NTSYNC_IOC_EVENT_SET:
|
|
||||||
- return ntsync_event_set(obj, argp);
|
|
||||||
+ return ntsync_event_set(obj, argp, false);
|
|
||||||
case NTSYNC_IOC_EVENT_RESET:
|
|
||||||
return ntsync_event_reset(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_EVENT_PULSE:
|
|
||||||
+ return ntsync_event_set(obj, argp, true);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -50,5 +50,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_MUTEX_KILL _IOW ('N', 0x86, __u32)
|
|
||||||
#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)
|
|
||||||
#define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
|
|
||||||
+#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,64 +0,0 @@
|
|||||||
From 248013d9877d47dc5219344268c10b62de1f52f2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:53 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_SEM_READ.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtQuerySemaphore().
|
|
||||||
|
|
||||||
This returns the current count and maximum count of the semaphore.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 24 ++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 25 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -583,6 +583,28 @@ static int ntsync_event_reset(struct nts
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_sem_read(struct ntsync_obj *sem, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_sem_args __user *user_args = argp;
|
|
||||||
+ struct ntsync_device *dev = sem->dev;
|
|
||||||
+ struct ntsync_sem_args args;
|
|
||||||
+ bool all;
|
|
||||||
+
|
|
||||||
+ if (sem->type != NTSYNC_TYPE_SEM)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, sem);
|
|
||||||
+
|
|
||||||
+ args.count = sem->u.sem.count;
|
|
||||||
+ args.max = sem->u.sem.max;
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, sem, all);
|
|
||||||
+
|
|
||||||
+ if (copy_to_user(user_args, &args, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -602,6 +624,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
switch (cmd) {
|
|
||||||
case NTSYNC_IOC_SEM_RELEASE:
|
|
||||||
return ntsync_sem_release(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_SEM_READ:
|
|
||||||
+ return ntsync_sem_read(obj, argp);
|
|
||||||
case NTSYNC_IOC_MUTEX_UNLOCK:
|
|
||||||
return ntsync_mutex_unlock(obj, argp);
|
|
||||||
case NTSYNC_IOC_MUTEX_KILL:
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -51,5 +51,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_EVENT_SET _IOR ('N', 0x88, __u32)
|
|
||||||
#define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
|
|
||||||
#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
|
|
||||||
+#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,66 +0,0 @@
|
|||||||
From 8fc7a993fd8bc6b1a09b4b965bee7d16bb2156cc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:54 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_MUTEX_READ.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtQueryMutant().
|
|
||||||
|
|
||||||
This returns the recursion count, owner, and abandoned state of the mutex.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 26 ++++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 27 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -605,6 +605,30 @@ static int ntsync_sem_read(struct ntsync
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_mutex_read(struct ntsync_obj *mutex, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_mutex_args __user *user_args = argp;
|
|
||||||
+ struct ntsync_device *dev = mutex->dev;
|
|
||||||
+ struct ntsync_mutex_args args;
|
|
||||||
+ bool all;
|
|
||||||
+ int ret;
|
|
||||||
+
|
|
||||||
+ if (mutex->type != NTSYNC_TYPE_MUTEX)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, mutex);
|
|
||||||
+
|
|
||||||
+ args.count = mutex->u.mutex.count;
|
|
||||||
+ args.owner = mutex->u.mutex.owner;
|
|
||||||
+ ret = mutex->u.mutex.ownerdead ? -EOWNERDEAD : 0;
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, mutex, all);
|
|
||||||
+
|
|
||||||
+ if (copy_to_user(user_args, &args, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -630,6 +654,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
return ntsync_mutex_unlock(obj, argp);
|
|
||||||
case NTSYNC_IOC_MUTEX_KILL:
|
|
||||||
return ntsync_mutex_kill(obj, argp);
|
|
||||||
+ case NTSYNC_IOC_MUTEX_READ:
|
|
||||||
+ return ntsync_mutex_read(obj, argp);
|
|
||||||
case NTSYNC_IOC_EVENT_SET:
|
|
||||||
return ntsync_event_set(obj, argp, false);
|
|
||||||
case NTSYNC_IOC_EVENT_RESET:
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -52,5 +52,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_EVENT_RESET _IOR ('N', 0x89, __u32)
|
|
||||||
#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
|
|
||||||
#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
|
|
||||||
+#define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,64 +0,0 @@
|
|||||||
From aed34cc9c28dba5e3735d7c59e1970a32eefc5f4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:55 -0600
|
|
||||||
Subject: ntsync: Introduce NTSYNC_IOC_EVENT_READ.
|
|
||||||
|
|
||||||
This corresponds to the NT syscall NtQueryEvent().
|
|
||||||
|
|
||||||
This returns the signaled state of the event and whether it is manual-reset.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 24 ++++++++++++++++++++++++
|
|
||||||
include/uapi/linux/ntsync.h | 1 +
|
|
||||||
2 files changed, 25 insertions(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -629,6 +629,28 @@ static int ntsync_mutex_read(struct ntsy
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static int ntsync_event_read(struct ntsync_obj *event, void __user *argp)
|
|
||||||
+{
|
|
||||||
+ struct ntsync_event_args __user *user_args = argp;
|
|
||||||
+ struct ntsync_device *dev = event->dev;
|
|
||||||
+ struct ntsync_event_args args;
|
|
||||||
+ bool all;
|
|
||||||
+
|
|
||||||
+ if (event->type != NTSYNC_TYPE_EVENT)
|
|
||||||
+ return -EINVAL;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, event);
|
|
||||||
+
|
|
||||||
+ args.manual = event->u.event.manual;
|
|
||||||
+ args.signaled = event->u.event.signaled;
|
|
||||||
+
|
|
||||||
+ ntsync_unlock_obj(dev, event, all);
|
|
||||||
+
|
|
||||||
+ if (copy_to_user(user_args, &args, sizeof(args)))
|
|
||||||
+ return -EFAULT;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int ntsync_obj_release(struct inode *inode, struct file *file)
|
|
||||||
{
|
|
||||||
struct ntsync_obj *obj = file->private_data;
|
|
||||||
@@ -662,6 +684,8 @@ static long ntsync_obj_ioctl(struct file
|
|
||||||
return ntsync_event_reset(obj, argp);
|
|
||||||
case NTSYNC_IOC_EVENT_PULSE:
|
|
||||||
return ntsync_event_set(obj, argp, true);
|
|
||||||
+ case NTSYNC_IOC_EVENT_READ:
|
|
||||||
+ return ntsync_event_read(obj, argp);
|
|
||||||
default:
|
|
||||||
return -ENOIOCTLCMD;
|
|
||||||
}
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -53,5 +53,6 @@ struct ntsync_wait_args {
|
|
||||||
#define NTSYNC_IOC_EVENT_PULSE _IOR ('N', 0x8a, __u32)
|
|
||||||
#define NTSYNC_IOC_SEM_READ _IOR ('N', 0x8b, struct ntsync_sem_args)
|
|
||||||
#define NTSYNC_IOC_MUTEX_READ _IOR ('N', 0x8c, struct ntsync_mutex_args)
|
|
||||||
+#define NTSYNC_IOC_EVENT_READ _IOR ('N', 0x8d, struct ntsync_event_args)
|
|
||||||
|
|
||||||
#endif
|
|
@@ -1,187 +0,0 @@
|
|||||||
From 361a7fb848ba9cac87855cb68f9ab000ed1027be Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:34:56 -0600
|
|
||||||
Subject: ntsync: Introduce alertable waits.
|
|
||||||
|
|
||||||
NT waits can optionally be made "alertable". This is a special channel for
|
|
||||||
thread wakeup that is mildly similar to SIGIO. A thread has an internal single
|
|
||||||
bit of "alerted" state, and if a thread is alerted while an alertable wait, the
|
|
||||||
wait will return a special value, consume the "alerted" state, and will not
|
|
||||||
consume any of its objects.
|
|
||||||
|
|
||||||
Alerts are implemented using events; the user-space NT emulator is expected to
|
|
||||||
create an internal ntsync event for each thread and pass that event to wait
|
|
||||||
functions.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 70 ++++++++++++++++++++++++++++++++-----
|
|
||||||
include/uapi/linux/ntsync.h | 3 +-
|
|
||||||
2 files changed, 63 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -869,22 +869,29 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
const struct ntsync_wait_args *args, bool all,
|
|
||||||
struct ntsync_q **ret_q)
|
|
||||||
{
|
|
||||||
+ int fds[NTSYNC_MAX_WAIT_COUNT + 1];
|
|
||||||
const __u32 count = args->count;
|
|
||||||
- int fds[NTSYNC_MAX_WAIT_COUNT];
|
|
||||||
struct ntsync_q *q;
|
|
||||||
+ __u32 total_count;
|
|
||||||
__u32 i, j;
|
|
||||||
|
|
||||||
- if (args->pad[0] || args->pad[1] || (args->flags & ~NTSYNC_WAIT_REALTIME))
|
|
||||||
+ if (args->pad || (args->flags & ~NTSYNC_WAIT_REALTIME))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
if (args->count > NTSYNC_MAX_WAIT_COUNT)
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
+ total_count = count;
|
|
||||||
+ if (args->alert)
|
|
||||||
+ total_count++;
|
|
||||||
+
|
|
||||||
if (copy_from_user(fds, u64_to_user_ptr(args->objs),
|
|
||||||
array_size(count, sizeof(*fds))))
|
|
||||||
return -EFAULT;
|
|
||||||
+ if (args->alert)
|
|
||||||
+ fds[count] = args->alert;
|
|
||||||
|
|
||||||
- q = kmalloc(struct_size(q, entries, count), GFP_KERNEL);
|
|
||||||
+ q = kmalloc(struct_size(q, entries, total_count), GFP_KERNEL);
|
|
||||||
if (!q)
|
|
||||||
return -ENOMEM;
|
|
||||||
q->task = current;
|
|
||||||
@@ -894,7 +901,7 @@ static int setup_wait(struct ntsync_devi
|
|
||||||
q->ownerdead = false;
|
|
||||||
q->count = count;
|
|
||||||
|
|
||||||
- for (i = 0; i < count; i++) {
|
|
||||||
+ for (i = 0; i < total_count; i++) {
|
|
||||||
struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
struct ntsync_obj *obj = get_obj(dev, fds[i]);
|
|
||||||
|
|
||||||
@@ -944,10 +951,10 @@ static void try_wake_any_obj(struct ntsy
|
|
||||||
static int ntsync_wait_any(struct ntsync_device *dev, void __user *argp)
|
|
||||||
{
|
|
||||||
struct ntsync_wait_args args;
|
|
||||||
+ __u32 i, total_count;
|
|
||||||
struct ntsync_q *q;
|
|
||||||
int signaled;
|
|
||||||
bool all;
|
|
||||||
- __u32 i;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
if (copy_from_user(&args, argp, sizeof(args)))
|
|
||||||
@@ -957,9 +964,13 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
+ total_count = args.count;
|
|
||||||
+ if (args.alert)
|
|
||||||
+ total_count++;
|
|
||||||
+
|
|
||||||
/* queue ourselves */
|
|
||||||
|
|
||||||
- for (i = 0; i < args.count; i++) {
|
|
||||||
+ for (i = 0; i < total_count; i++) {
|
|
||||||
struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
struct ntsync_obj *obj = entry->obj;
|
|
||||||
|
|
||||||
@@ -968,9 +979,15 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
ntsync_unlock_obj(dev, obj, all);
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* check if we are already signaled */
|
|
||||||
+ /*
|
|
||||||
+ * Check if we are already signaled.
|
|
||||||
+ *
|
|
||||||
+ * Note that the API requires that normal objects are checked before
|
|
||||||
+ * the alert event. Hence we queue the alert event last, and check
|
|
||||||
+ * objects in order.
|
|
||||||
+ */
|
|
||||||
|
|
||||||
- for (i = 0; i < args.count; i++) {
|
|
||||||
+ for (i = 0; i < total_count; i++) {
|
|
||||||
struct ntsync_obj *obj = q->entries[i].obj;
|
|
||||||
|
|
||||||
if (atomic_read(&q->signaled) != -1)
|
|
||||||
@@ -987,7 +1004,7 @@ static int ntsync_wait_any(struct ntsync
|
|
||||||
|
|
||||||
/* and finally, unqueue */
|
|
||||||
|
|
||||||
- for (i = 0; i < args.count; i++) {
|
|
||||||
+ for (i = 0; i < total_count; i++) {
|
|
||||||
struct ntsync_q_entry *entry = &q->entries[i];
|
|
||||||
struct ntsync_obj *obj = entry->obj;
|
|
||||||
|
|
||||||
@@ -1047,6 +1064,14 @@ static int ntsync_wait_all(struct ntsync
|
|
||||||
*/
|
|
||||||
list_add_tail(&entry->node, &obj->all_waiters);
|
|
||||||
}
|
|
||||||
+ if (args.alert) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[args.count];
|
|
||||||
+ struct ntsync_obj *obj = entry->obj;
|
|
||||||
+
|
|
||||||
+ dev_lock_obj(dev, obj);
|
|
||||||
+ list_add_tail(&entry->node, &obj->any_waiters);
|
|
||||||
+ dev_unlock_obj(dev, obj);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* check if we are already signaled */
|
|
||||||
|
|
||||||
@@ -1054,6 +1079,21 @@ static int ntsync_wait_all(struct ntsync
|
|
||||||
|
|
||||||
mutex_unlock(&dev->wait_all_lock);
|
|
||||||
|
|
||||||
+ /*
|
|
||||||
+ * Check if the alert event is signaled, making sure to do so only
|
|
||||||
+ * after checking if the other objects are signaled.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ if (args.alert) {
|
|
||||||
+ struct ntsync_obj *obj = q->entries[args.count].obj;
|
|
||||||
+
|
|
||||||
+ if (atomic_read(&q->signaled) == -1) {
|
|
||||||
+ bool all = ntsync_lock_obj(dev, obj);
|
|
||||||
+ try_wake_any_obj(obj);
|
|
||||||
+ ntsync_unlock_obj(dev, obj, all);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* sleep */
|
|
||||||
|
|
||||||
ret = ntsync_schedule(q, &args);
|
|
||||||
@@ -1079,6 +1119,18 @@ static int ntsync_wait_all(struct ntsync
|
|
||||||
|
|
||||||
mutex_unlock(&dev->wait_all_lock);
|
|
||||||
|
|
||||||
+ if (args.alert) {
|
|
||||||
+ struct ntsync_q_entry *entry = &q->entries[args.count];
|
|
||||||
+ struct ntsync_obj *obj = entry->obj;
|
|
||||||
+ bool all;
|
|
||||||
+
|
|
||||||
+ all = ntsync_lock_obj(dev, obj);
|
|
||||||
+ list_del(&entry->node);
|
|
||||||
+ ntsync_unlock_obj(dev, obj, all);
|
|
||||||
+
|
|
||||||
+ put_obj(obj);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
signaled = atomic_read(&q->signaled);
|
|
||||||
if (signaled != -1) {
|
|
||||||
struct ntsync_wait_args __user *user_args = argp;
|
|
||||||
--- a/include/uapi/linux/ntsync.h
|
|
||||||
+++ b/include/uapi/linux/ntsync.h
|
|
||||||
@@ -34,7 +34,8 @@ struct ntsync_wait_args {
|
|
||||||
__u32 index;
|
|
||||||
__u32 flags;
|
|
||||||
__u32 owner;
|
|
||||||
- __u32 pad[2];
|
|
||||||
+ __u32 alert;
|
|
||||||
+ __u32 pad;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NTSYNC_MAX_WAIT_COUNT 64
|
|
@@ -1,30 +0,0 @@
|
|||||||
From b240b27e5348d38acbc4a12f1dc762dd1845f391 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:35:09 -0600
|
|
||||||
Subject: maintainers: Add an entry for ntsync.
|
|
||||||
|
|
||||||
Add myself as maintainer, supported by CodeWeavers.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
MAINTAINERS | 9 +++++++++
|
|
||||||
1 file changed, 9 insertions(+)
|
|
||||||
|
|
||||||
--- a/MAINTAINERS
|
|
||||||
+++ b/MAINTAINERS
|
|
||||||
@@ -16486,6 +16486,15 @@ T: git https://github.com/Paragon-Softwa
|
|
||||||
F: Documentation/filesystems/ntfs3.rst
|
|
||||||
F: fs/ntfs3/
|
|
||||||
|
|
||||||
+NTSYNC SYNCHRONIZATION PRIMITIVE DRIVER
|
|
||||||
+M: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
+L: wine-devel@winehq.org
|
|
||||||
+S: Supported
|
|
||||||
+F: Documentation/userspace-api/ntsync.rst
|
|
||||||
+F: drivers/misc/ntsync.c
|
|
||||||
+F: include/uapi/linux/ntsync.h
|
|
||||||
+F: tools/testing/selftests/drivers/ntsync/
|
|
||||||
+
|
|
||||||
NUBUS SUBSYSTEM
|
|
||||||
M: Finn Thain <fthain@linux-m68k.org>
|
|
||||||
L: linux-m68k@lists.linux-m68k.org
|
|
@@ -1,413 +0,0 @@
|
|||||||
From 733e310bb840117593a0eb4726fa63b34fea9cc3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:35:10 -0600
|
|
||||||
Subject: docs: ntsync: Add documentation for the ntsync uAPI.
|
|
||||||
|
|
||||||
Add an overall explanation of the driver architecture, and complete and precise
|
|
||||||
specification for its intended behaviour.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
Documentation/userspace-api/index.rst | 1 +
|
|
||||||
Documentation/userspace-api/ntsync.rst | 385 +++++++++++++++++++++++++
|
|
||||||
2 files changed, 386 insertions(+)
|
|
||||||
create mode 100644 Documentation/userspace-api/ntsync.rst
|
|
||||||
|
|
||||||
--- a/Documentation/userspace-api/index.rst
|
|
||||||
+++ b/Documentation/userspace-api/index.rst
|
|
||||||
@@ -63,6 +63,7 @@ Everything else
|
|
||||||
vduse
|
|
||||||
futex2
|
|
||||||
perf_ring_buffer
|
|
||||||
+ ntsync
|
|
||||||
|
|
||||||
.. only:: subproject and html
|
|
||||||
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/Documentation/userspace-api/ntsync.rst
|
|
||||||
@@ -0,0 +1,385 @@
|
|
||||||
+===================================
|
|
||||||
+NT synchronization primitive driver
|
|
||||||
+===================================
|
|
||||||
+
|
|
||||||
+This page documents the user-space API for the ntsync driver.
|
|
||||||
+
|
|
||||||
+ntsync is a support driver for emulation of NT synchronization
|
|
||||||
+primitives by user-space NT emulators. It exists because implementation
|
|
||||||
+in user-space, using existing tools, cannot match Windows performance
|
|
||||||
+while offering accurate semantics. It is implemented entirely in
|
|
||||||
+software, and does not drive any hardware device.
|
|
||||||
+
|
|
||||||
+This interface is meant as a compatibility tool only, and should not
|
|
||||||
+be used for general synchronization. Instead use generic, versatile
|
|
||||||
+interfaces such as futex(2) and poll(2).
|
|
||||||
+
|
|
||||||
+Synchronization primitives
|
|
||||||
+==========================
|
|
||||||
+
|
|
||||||
+The ntsync driver exposes three types of synchronization primitives:
|
|
||||||
+semaphores, mutexes, and events.
|
|
||||||
+
|
|
||||||
+A semaphore holds a single volatile 32-bit counter, and a static 32-bit
|
|
||||||
+integer denoting the maximum value. It is considered signaled (that is,
|
|
||||||
+can be acquired without contention, or will wake up a waiting thread)
|
|
||||||
+when the counter is nonzero. The counter is decremented by one when a
|
|
||||||
+wait is satisfied. Both the initial and maximum count are established
|
|
||||||
+when the semaphore is created.
|
|
||||||
+
|
|
||||||
+A mutex holds a volatile 32-bit recursion count, and a volatile 32-bit
|
|
||||||
+identifier denoting its owner. A mutex is considered signaled when its
|
|
||||||
+owner is zero (indicating that it is not owned). The recursion count is
|
|
||||||
+incremented when a wait is satisfied, and ownership is set to the given
|
|
||||||
+identifier.
|
|
||||||
+
|
|
||||||
+A mutex also holds an internal flag denoting whether its previous owner
|
|
||||||
+has died; such a mutex is said to be abandoned. Owner death is not
|
|
||||||
+tracked automatically based on thread death, but rather must be
|
|
||||||
+communicated using ``NTSYNC_IOC_MUTEX_KILL``. An abandoned mutex is
|
|
||||||
+inherently considered unowned.
|
|
||||||
+
|
|
||||||
+Except for the "unowned" semantics of zero, the actual value of the
|
|
||||||
+owner identifier is not interpreted by the ntsync driver at all. The
|
|
||||||
+intended use is to store a thread identifier; however, the ntsync
|
|
||||||
+driver does not actually validate that a calling thread provides
|
|
||||||
+consistent or unique identifiers.
|
|
||||||
+
|
|
||||||
+An event is similar to a semaphore with a maximum count of one. It holds
|
|
||||||
+a volatile boolean state denoting whether it is signaled or not. There
|
|
||||||
+are two types of events, auto-reset and manual-reset. An auto-reset
|
|
||||||
+event is designaled when a wait is satisfied; a manual-reset event is
|
|
||||||
+not. The event type is specified when the event is created.
|
|
||||||
+
|
|
||||||
+Unless specified otherwise, all operations on an object are atomic and
|
|
||||||
+totally ordered with respect to other operations on the same object.
|
|
||||||
+
|
|
||||||
+Objects are represented by files. When all file descriptors to an
|
|
||||||
+object are closed, that object is deleted.
|
|
||||||
+
|
|
||||||
+Char device
|
|
||||||
+===========
|
|
||||||
+
|
|
||||||
+The ntsync driver creates a single char device /dev/ntsync. Each file
|
|
||||||
+description opened on the device represents a unique instance intended
|
|
||||||
+to back an individual NT virtual machine. Objects created by one ntsync
|
|
||||||
+instance may only be used with other objects created by the same
|
|
||||||
+instance.
|
|
||||||
+
|
|
||||||
+ioctl reference
|
|
||||||
+===============
|
|
||||||
+
|
|
||||||
+All operations on the device are done through ioctls. There are four
|
|
||||||
+structures used in ioctl calls::
|
|
||||||
+
|
|
||||||
+ struct ntsync_sem_args {
|
|
||||||
+ __u32 count;
|
|
||||||
+ __u32 max;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ struct ntsync_mutex_args {
|
|
||||||
+ __u32 owner;
|
|
||||||
+ __u32 count;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ struct ntsync_event_args {
|
|
||||||
+ __u32 signaled;
|
|
||||||
+ __u32 manual;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ struct ntsync_wait_args {
|
|
||||||
+ __u64 timeout;
|
|
||||||
+ __u64 objs;
|
|
||||||
+ __u32 count;
|
|
||||||
+ __u32 owner;
|
|
||||||
+ __u32 index;
|
|
||||||
+ __u32 alert;
|
|
||||||
+ __u32 flags;
|
|
||||||
+ __u32 pad;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+Depending on the ioctl, members of the structure may be used as input,
|
|
||||||
+output, or not at all.
|
|
||||||
+
|
|
||||||
+The ioctls on the device file are as follows:
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_CREATE_SEM
|
|
||||||
+
|
|
||||||
+ Create a semaphore object. Takes a pointer to struct
|
|
||||||
+ :c:type:`ntsync_sem_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``count``
|
|
||||||
+ - Initial count of the semaphore.
|
|
||||||
+ * - ``max``
|
|
||||||
+ - Maximum count of the semaphore.
|
|
||||||
+
|
|
||||||
+ Fails with ``EINVAL`` if ``count`` is greater than ``max``.
|
|
||||||
+ On success, returns a file descriptor the created semaphore.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_CREATE_MUTEX
|
|
||||||
+
|
|
||||||
+ Create a mutex object. Takes a pointer to struct
|
|
||||||
+ :c:type:`ntsync_mutex_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``count``
|
|
||||||
+ - Initial recursion count of the mutex.
|
|
||||||
+ * - ``owner``
|
|
||||||
+ - Initial owner of the mutex.
|
|
||||||
+
|
|
||||||
+ If ``owner`` is nonzero and ``count`` is zero, or if ``owner`` is
|
|
||||||
+ zero and ``count`` is nonzero, the function fails with ``EINVAL``.
|
|
||||||
+ On success, returns a file descriptor the created mutex.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_CREATE_EVENT
|
|
||||||
+
|
|
||||||
+ Create an event object. Takes a pointer to struct
|
|
||||||
+ :c:type:`ntsync_event_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``signaled``
|
|
||||||
+ - If nonzero, the event is initially signaled, otherwise
|
|
||||||
+ nonsignaled.
|
|
||||||
+ * - ``manual``
|
|
||||||
+ - If nonzero, the event is a manual-reset event, otherwise
|
|
||||||
+ auto-reset.
|
|
||||||
+
|
|
||||||
+ On success, returns a file descriptor the created event.
|
|
||||||
+
|
|
||||||
+The ioctls on the individual objects are as follows:
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_SEM_POST
|
|
||||||
+
|
|
||||||
+ Post to a semaphore object. Takes a pointer to a 32-bit integer,
|
|
||||||
+ which on input holds the count to be added to the semaphore, and on
|
|
||||||
+ output contains its previous count.
|
|
||||||
+
|
|
||||||
+ If adding to the semaphore's current count would raise the latter
|
|
||||||
+ past the semaphore's maximum count, the ioctl fails with
|
|
||||||
+ ``EOVERFLOW`` and the semaphore is not affected. If raising the
|
|
||||||
+ semaphore's count causes it to become signaled, eligible threads
|
|
||||||
+ waiting on this semaphore will be woken and the semaphore's count
|
|
||||||
+ decremented appropriately.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_MUTEX_UNLOCK
|
|
||||||
+
|
|
||||||
+ Release a mutex object. Takes a pointer to struct
|
|
||||||
+ :c:type:`ntsync_mutex_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``owner``
|
|
||||||
+ - Specifies the owner trying to release this mutex.
|
|
||||||
+ * - ``count``
|
|
||||||
+ - On output, contains the previous recursion count.
|
|
||||||
+
|
|
||||||
+ If ``owner`` is zero, the ioctl fails with ``EINVAL``. If ``owner``
|
|
||||||
+ is not the current owner of the mutex, the ioctl fails with
|
|
||||||
+ ``EPERM``.
|
|
||||||
+
|
|
||||||
+ The mutex's count will be decremented by one. If decrementing the
|
|
||||||
+ mutex's count causes it to become zero, the mutex is marked as
|
|
||||||
+ unowned and signaled, and eligible threads waiting on it will be
|
|
||||||
+ woken as appropriate.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_SET_EVENT
|
|
||||||
+
|
|
||||||
+ Signal an event object. Takes a pointer to a 32-bit integer, which on
|
|
||||||
+ output contains the previous state of the event.
|
|
||||||
+
|
|
||||||
+ Eligible threads will be woken, and auto-reset events will be
|
|
||||||
+ designaled appropriately.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_RESET_EVENT
|
|
||||||
+
|
|
||||||
+ Designal an event object. Takes a pointer to a 32-bit integer, which
|
|
||||||
+ on output contains the previous state of the event.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_PULSE_EVENT
|
|
||||||
+
|
|
||||||
+ Wake threads waiting on an event object while leaving it in an
|
|
||||||
+ unsignaled state. Takes a pointer to a 32-bit integer, which on
|
|
||||||
+ output contains the previous state of the event.
|
|
||||||
+
|
|
||||||
+ A pulse operation can be thought of as a set followed by a reset,
|
|
||||||
+ performed as a single atomic operation. If two threads are waiting on
|
|
||||||
+ an auto-reset event which is pulsed, only one will be woken. If two
|
|
||||||
+ threads are waiting a manual-reset event which is pulsed, both will
|
|
||||||
+ be woken. However, in both cases, the event will be unsignaled
|
|
||||||
+ afterwards, and a simultaneous read operation will always report the
|
|
||||||
+ event as unsignaled.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_READ_SEM
|
|
||||||
+
|
|
||||||
+ Read the current state of a semaphore object. Takes a pointer to
|
|
||||||
+ struct :c:type:`ntsync_sem_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``count``
|
|
||||||
+ - On output, contains the current count of the semaphore.
|
|
||||||
+ * - ``max``
|
|
||||||
+ - On output, contains the maximum count of the semaphore.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_READ_MUTEX
|
|
||||||
+
|
|
||||||
+ Read the current state of a mutex object. Takes a pointer to struct
|
|
||||||
+ :c:type:`ntsync_mutex_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``owner``
|
|
||||||
+ - On output, contains the current owner of the mutex, or zero
|
|
||||||
+ if the mutex is not currently owned.
|
|
||||||
+ * - ``count``
|
|
||||||
+ - On output, contains the current recursion count of the mutex.
|
|
||||||
+
|
|
||||||
+ If the mutex is marked as abandoned, the function fails with
|
|
||||||
+ ``EOWNERDEAD``. In this case, ``count`` and ``owner`` are set to
|
|
||||||
+ zero.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_READ_EVENT
|
|
||||||
+
|
|
||||||
+ Read the current state of an event object. Takes a pointer to struct
|
|
||||||
+ :c:type:`ntsync_event_args`, which is used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``signaled``
|
|
||||||
+ - On output, contains the current state of the event.
|
|
||||||
+ * - ``manual``
|
|
||||||
+ - On output, contains 1 if the event is a manual-reset event,
|
|
||||||
+ and 0 otherwise.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_KILL_OWNER
|
|
||||||
+
|
|
||||||
+ Mark a mutex as unowned and abandoned if it is owned by the given
|
|
||||||
+ owner. Takes an input-only pointer to a 32-bit integer denoting the
|
|
||||||
+ owner. If the owner is zero, the ioctl fails with ``EINVAL``. If the
|
|
||||||
+ owner does not own the mutex, the function fails with ``EPERM``.
|
|
||||||
+
|
|
||||||
+ Eligible threads waiting on the mutex will be woken as appropriate
|
|
||||||
+ (and such waits will fail with ``EOWNERDEAD``, as described below).
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_WAIT_ANY
|
|
||||||
+
|
|
||||||
+ Poll on any of a list of objects, atomically acquiring at most one.
|
|
||||||
+ Takes a pointer to struct :c:type:`ntsync_wait_args`, which is
|
|
||||||
+ used as follows:
|
|
||||||
+
|
|
||||||
+ .. list-table::
|
|
||||||
+
|
|
||||||
+ * - ``timeout``
|
|
||||||
+ - Absolute timeout in nanoseconds. If ``NTSYNC_WAIT_REALTIME``
|
|
||||||
+ is set, the timeout is measured against the REALTIME clock;
|
|
||||||
+ otherwise it is measured against the MONOTONIC clock. If the
|
|
||||||
+ timeout is equal to or earlier than the current time, the
|
|
||||||
+ function returns immediately without sleeping. If ``timeout``
|
|
||||||
+ is U64_MAX, the function will sleep until an object is
|
|
||||||
+ signaled, and will not fail with ``ETIMEDOUT``.
|
|
||||||
+ * - ``objs``
|
|
||||||
+ - Pointer to an array of ``count`` file descriptors
|
|
||||||
+ (specified as an integer so that the structure has the same
|
|
||||||
+ size regardless of architecture). If any object is
|
|
||||||
+ invalid, the function fails with ``EINVAL``.
|
|
||||||
+ * - ``count``
|
|
||||||
+ - Number of objects specified in the ``objs`` array.
|
|
||||||
+ If greater than ``NTSYNC_MAX_WAIT_COUNT``, the function fails
|
|
||||||
+ with ``EINVAL``.
|
|
||||||
+ * - ``owner``
|
|
||||||
+ - Mutex owner identifier. If any object in ``objs`` is a mutex,
|
|
||||||
+ the ioctl will attempt to acquire that mutex on behalf of
|
|
||||||
+ ``owner``. If ``owner`` is zero, the ioctl fails with
|
|
||||||
+ ``EINVAL``.
|
|
||||||
+ * - ``index``
|
|
||||||
+ - On success, contains the index (into ``objs``) of the object
|
|
||||||
+ which was signaled. If ``alert`` was signaled instead,
|
|
||||||
+ this contains ``count``.
|
|
||||||
+ * - ``alert``
|
|
||||||
+ - Optional event object file descriptor. If nonzero, this
|
|
||||||
+ specifies an "alert" event object which, if signaled, will
|
|
||||||
+ terminate the wait. If nonzero, the identifier must point to a
|
|
||||||
+ valid event.
|
|
||||||
+ * - ``flags``
|
|
||||||
+ - Zero or more flags. Currently the only flag is
|
|
||||||
+ ``NTSYNC_WAIT_REALTIME``, which causes the timeout to be
|
|
||||||
+ measured against the REALTIME clock instead of MONOTONIC.
|
|
||||||
+ * - ``pad``
|
|
||||||
+ - Unused, must be set to zero.
|
|
||||||
+
|
|
||||||
+ This function attempts to acquire one of the given objects. If unable
|
|
||||||
+ to do so, it sleeps until an object becomes signaled, subsequently
|
|
||||||
+ acquiring it, or the timeout expires. In the latter case the ioctl
|
|
||||||
+ fails with ``ETIMEDOUT``. The function only acquires one object, even
|
|
||||||
+ if multiple objects are signaled.
|
|
||||||
+
|
|
||||||
+ A semaphore is considered to be signaled if its count is nonzero, and
|
|
||||||
+ is acquired by decrementing its count by one. A mutex is considered
|
|
||||||
+ to be signaled if it is unowned or if its owner matches the ``owner``
|
|
||||||
+ argument, and is acquired by incrementing its recursion count by one
|
|
||||||
+ and setting its owner to the ``owner`` argument. An auto-reset event
|
|
||||||
+ is acquired by designaling it; a manual-reset event is not affected
|
|
||||||
+ by acquisition.
|
|
||||||
+
|
|
||||||
+ Acquisition is atomic and totally ordered with respect to other
|
|
||||||
+ operations on the same object. If two wait operations (with different
|
|
||||||
+ ``owner`` identifiers) are queued on the same mutex, only one is
|
|
||||||
+ signaled. If two wait operations are queued on the same semaphore,
|
|
||||||
+ and a value of one is posted to it, only one is signaled.
|
|
||||||
+
|
|
||||||
+ If an abandoned mutex is acquired, the ioctl fails with
|
|
||||||
+ ``EOWNERDEAD``. Although this is a failure return, the function may
|
|
||||||
+ otherwise be considered successful. The mutex is marked as owned by
|
|
||||||
+ the given owner (with a recursion count of 1) and as no longer
|
|
||||||
+ abandoned, and ``index`` is still set to the index of the mutex.
|
|
||||||
+
|
|
||||||
+ The ``alert`` argument is an "extra" event which can terminate the
|
|
||||||
+ wait, independently of all other objects.
|
|
||||||
+
|
|
||||||
+ It is valid to pass the same object more than once, including by
|
|
||||||
+ passing the same event in the ``objs`` array and in ``alert``. If a
|
|
||||||
+ wakeup occurs due to that object being signaled, ``index`` is set to
|
|
||||||
+ the lowest index corresponding to that object.
|
|
||||||
+
|
|
||||||
+ The function may fail with ``EINTR`` if a signal is received.
|
|
||||||
+
|
|
||||||
+.. c:macro:: NTSYNC_IOC_WAIT_ALL
|
|
||||||
+
|
|
||||||
+ Poll on a list of objects, atomically acquiring all of them. Takes a
|
|
||||||
+ pointer to struct :c:type:`ntsync_wait_args`, which is used
|
|
||||||
+ identically to ``NTSYNC_IOC_WAIT_ANY``, except that ``index`` is
|
|
||||||
+ always filled with zero on success if not woken via alert.
|
|
||||||
+
|
|
||||||
+ This function attempts to simultaneously acquire all of the given
|
|
||||||
+ objects. If unable to do so, it sleeps until all objects become
|
|
||||||
+ simultaneously signaled, subsequently acquiring them, or the timeout
|
|
||||||
+ expires. In the latter case the ioctl fails with ``ETIMEDOUT`` and no
|
|
||||||
+ objects are modified.
|
|
||||||
+
|
|
||||||
+ Objects may become signaled and subsequently designaled (through
|
|
||||||
+ acquisition by other threads) while this thread is sleeping. Only
|
|
||||||
+ once all objects are simultaneously signaled does the ioctl acquire
|
|
||||||
+ them and return. The entire acquisition is atomic and totally ordered
|
|
||||||
+ with respect to other operations on any of the given objects.
|
|
||||||
+
|
|
||||||
+ If an abandoned mutex is acquired, the ioctl fails with
|
|
||||||
+ ``EOWNERDEAD``. Similarly to ``NTSYNC_IOC_WAIT_ANY``, all objects are
|
|
||||||
+ nevertheless marked as acquired. Note that if multiple mutex objects
|
|
||||||
+ are specified, there is no way to know which were marked as
|
|
||||||
+ abandoned.
|
|
||||||
+
|
|
||||||
+ As with "any" waits, the ``alert`` argument is an "extra" event which
|
|
||||||
+ can terminate the wait. Critically, however, an "all" wait will
|
|
||||||
+ succeed if all members in ``objs`` are signaled, *or* if ``alert`` is
|
|
||||||
+ signaled. In the latter case ``index`` will be set to ``count``. As
|
|
||||||
+ with "any" waits, if both conditions are filled, the former takes
|
|
||||||
+ priority, and objects in ``objs`` will be acquired.
|
|
||||||
+
|
|
||||||
+ Unlike ``NTSYNC_IOC_WAIT_ANY``, it is not valid to pass the same
|
|
||||||
+ object more than once, nor is it valid to pass the same object in
|
|
||||||
+ ``objs`` and in ``alert``. If this is attempted, the function fails
|
|
||||||
+ with ``EINVAL``.
|
|
@@ -1,25 +0,0 @@
|
|||||||
From 4871bb89577d78a3d55b44e47c3a4f677dbdc89b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
Date: Fri, 13 Dec 2024 13:35:11 -0600
|
|
||||||
Subject: ntsync: No longer depend on BROKEN.
|
|
||||||
|
|
||||||
f5b335dc025cfee90957efa90dc72fada0d5abb4 ("misc: ntsync: mark driver as "broken"
|
|
||||||
to prevent from building") was committed to avoid the driver being used while
|
|
||||||
only part of its functionality was released. Since the rest of the functionality
|
|
||||||
has now been committed, revert this.
|
|
||||||
|
|
||||||
Signed-off-by: Elizabeth Figura <zfigura@codeweavers.com>
|
|
||||||
---
|
|
||||||
drivers/misc/Kconfig | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/drivers/misc/Kconfig
|
|
||||||
+++ b/drivers/misc/Kconfig
|
|
||||||
@@ -517,7 +517,6 @@ config OPEN_DICE
|
|
||||||
|
|
||||||
config NTSYNC
|
|
||||||
tristate "NT synchronization primitive emulation"
|
|
||||||
- depends on BROKEN
|
|
||||||
help
|
|
||||||
This module provides kernel support for emulation of Windows NT
|
|
||||||
synchronization primitives. It is not a hardware driver.
|
|
@@ -1,22 +0,0 @@
|
|||||||
From 2aa0cab3a568e6adccbe708ee2e79185638860ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mike Lothian <mike@fireburn.co.uk>
|
|
||||||
Date: Fri, 14 Feb 2025 12:28:00 +0000
|
|
||||||
Subject: ntsync: Set the permissions to be 0666
|
|
||||||
|
|
||||||
This allows ntsync to be usuable by non-root processes out of the box
|
|
||||||
|
|
||||||
Signed-off-by: Mike Lothian <mike@fireburn.co.uk>
|
|
||||||
---
|
|
||||||
drivers/misc/ntsync.c | 1 +
|
|
||||||
1 file changed, 1 insertion(+)
|
|
||||||
|
|
||||||
--- a/drivers/misc/ntsync.c
|
|
||||||
+++ b/drivers/misc/ntsync.c
|
|
||||||
@@ -1206,6 +1206,7 @@ static struct miscdevice ntsync_misc = {
|
|
||||||
.minor = MISC_DYNAMIC_MINOR,
|
|
||||||
.name = NTSYNC_NAME,
|
|
||||||
.fops = &ntsync_fops,
|
|
||||||
+ .mode = 0666, // Setting file permissions to 0666
|
|
||||||
};
|
|
||||||
|
|
||||||
module_misc_device(ntsync_misc);
|
|
@@ -21,12 +21,12 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
|||||||
--- a/net/mac80211/iface.c
|
--- a/net/mac80211/iface.c
|
||||||
+++ b/net/mac80211/iface.c
|
+++ b/net/mac80211/iface.c
|
||||||
@@ -62,7 +62,8 @@ bool __ieee80211_recalc_txpower(struct i
|
@@ -62,7 +62,8 @@ bool __ieee80211_recalc_txpower(struct i
|
||||||
if (sdata->deflink.user_power_level != IEEE80211_UNSET_POWER_LEVEL)
|
if (link->user_power_level != IEEE80211_UNSET_POWER_LEVEL)
|
||||||
power = min(power, sdata->deflink.user_power_level);
|
power = min(power, link->user_power_level);
|
||||||
|
|
||||||
- if (sdata->deflink.ap_power_level != IEEE80211_UNSET_POWER_LEVEL)
|
- if (link->ap_power_level != IEEE80211_UNSET_POWER_LEVEL)
|
||||||
+ if (sdata->deflink.ap_power_level != IEEE80211_UNSET_POWER_LEVEL &&
|
+ if (link->ap_power_level != IEEE80211_UNSET_POWER_LEVEL &&
|
||||||
+ sdata->vif.bss_conf.txpower_type != NL80211_TX_POWER_FIXED)
|
+ link->conf->txpower_type != NL80211_TX_POWER_FIXED)
|
||||||
power = min(power, sdata->deflink.ap_power_level);
|
power = min(power, link->ap_power_level);
|
||||||
|
|
||||||
if (power != sdata->vif.bss_conf.txpower) {
|
if (power != link->conf->txpower) {
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
From 421120bda34d994c5e0e07a89e2f9c40c53e8e87 Mon Sep 17 00:00:00 2001
|
From 90b69178f6a866c7f3330c2006f6b5396146192c 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, 16 Sep 2024 05:55:58 -0400
|
||||||
Subject: ZEN: Add graysky's more-uarches
|
Subject: ZEN: Add graysky's more-uarches
|
||||||
@@ -123,10 +123,10 @@ REFERENCES
|
|||||||
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 | 359 ++++++++++++++++++++++++++++++--
|
arch/x86/Kconfig.cpu | 367 ++++++++++++++++++++++++++++++--
|
||||||
arch/x86/Makefile | 87 +++++++-
|
arch/x86/Makefile | 89 +++++++-
|
||||||
arch/x86/include/asm/vermagic.h | 70 +++++++
|
arch/x86/include/asm/vermagic.h | 72 +++++++
|
||||||
3 files changed, 499 insertions(+), 17 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
|
||||||
@@ -257,7 +257,7 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+config MZEN5
|
+config MZEN5
|
||||||
+ bool "AMD Zen 5"
|
+ bool "AMD Zen 5"
|
||||||
+ depends on (CC_IS_GCC && GCC_VERSION > 140000) || (CC_IS_CLANG && CLANG_VERSION >= 191000)
|
+ 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.
|
||||||
+
|
+
|
||||||
@@ -285,7 +285,7 @@ REFERENCES
|
|||||||
help
|
help
|
||||||
|
|
||||||
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
Select this for Intel Core 2 and newer Core 2 Xeons (Xeon 51xx and
|
||||||
@@ -278,14 +388,191 @@ config MCORE2
|
@@ -278,14 +388,199 @@ config MCORE2
|
||||||
family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
family in /proc/cpuinfo. Newer ones have 6 and older ones 15
|
||||||
(not a typo)
|
(not a typo)
|
||||||
|
|
||||||
@@ -393,14 +393,22 @@ REFERENCES
|
|||||||
+
|
+
|
||||||
+ Enables -march=cannonlake
|
+ Enables -march=cannonlake
|
||||||
+
|
+
|
||||||
+config MICELAKE
|
+config MICELAKE_CLIENT
|
||||||
+ bool "Intel Ice Lake"
|
+ bool "Intel Ice Lake"
|
||||||
+ help
|
+ help
|
||||||
+
|
+
|
||||||
+ Select this for 10th Gen Core processors in the Ice Lake family.
|
+ Select this for 10th Gen Core client processors in the Ice Lake family.
|
||||||
+
|
+
|
||||||
+ Enables -march=icelake-client
|
+ Enables -march=icelake-client
|
||||||
+
|
+
|
||||||
|
+config MICELAKE_SERVER
|
||||||
|
+ bool "Intel Ice Lake Server"
|
||||||
|
+ help
|
||||||
|
+
|
||||||
|
+ Select this for 10th Gen Core server processors in the Ice Lake family.
|
||||||
|
+
|
||||||
|
+ Enables -march=icelake-server
|
||||||
|
+
|
||||||
+config MCASCADELAKE
|
+config MCASCADELAKE
|
||||||
+ bool "Intel Cascade Lake"
|
+ bool "Intel Cascade Lake"
|
||||||
+ help
|
+ help
|
||||||
@@ -483,7 +491,7 @@ REFERENCES
|
|||||||
|
|
||||||
config GENERIC_CPU
|
config GENERIC_CPU
|
||||||
bool "Generic-x86-64"
|
bool "Generic-x86-64"
|
||||||
@@ -294,6 +581,26 @@ config GENERIC_CPU
|
@@ -294,6 +589,26 @@ config GENERIC_CPU
|
||||||
Generic x86-64 CPU.
|
Generic x86-64 CPU.
|
||||||
Run equally well on all x86-64 CPUs.
|
Run equally well on all x86-64 CPUs.
|
||||||
|
|
||||||
@@ -510,7 +518,7 @@ REFERENCES
|
|||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config X86_GENERIC
|
config X86_GENERIC
|
||||||
@@ -308,6 +615,30 @@ config X86_GENERIC
|
@@ -308,6 +623,30 @@ config X86_GENERIC
|
||||||
This is really intended for distributors who need more
|
This is really intended for distributors who need more
|
||||||
generic optimizations.
|
generic optimizations.
|
||||||
|
|
||||||
@@ -541,32 +549,32 @@ 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 +649,7 @@ config X86_INTERNODE_CACHE_SHIFT
|
@@ -318,7 +657,7 @@ 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 || MPSC
|
||||||
- default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
- default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU
|
||||||
+ 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 || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MNATIVE_INTEL || MNATIVE_AMD
|
+ 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 "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 +667,11 @@ config X86_ALIGNMENT_16
|
@@ -336,11 +675,11 @@ 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 || MK8 || MK7 || MEFFICEON || MCORE2
|
||||||
+ 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 || 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 || MNATIVE_INTEL
|
||||||
|
|
||||||
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 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || 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 || 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 || MNATIVE_INTEL || MNATIVE_AMD
|
||||||
|
|
||||||
#
|
#
|
||||||
# P6_NOPs are a relatively minor optimization that require a family >=
|
# 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,96 @@ else
|
@@ -182,15 +182,98 @@ else
|
||||||
cflags-$(CONFIG_MK8) += -march=k8
|
cflags-$(CONFIG_MK8) += -march=k8
|
||||||
cflags-$(CONFIG_MPSC) += -march=nocona
|
cflags-$(CONFIG_MPSC) += -march=nocona
|
||||||
cflags-$(CONFIG_MCORE2) += -march=core2
|
cflags-$(CONFIG_MCORE2) += -march=core2
|
||||||
@@ -608,7 +616,8 @@ REFERENCES
|
|||||||
+ cflags-$(CONFIG_MSKYLAKE) += -march=skylake
|
+ cflags-$(CONFIG_MSKYLAKE) += -march=skylake
|
||||||
+ cflags-$(CONFIG_MSKYLAKEX) += -march=skylake-avx512
|
+ cflags-$(CONFIG_MSKYLAKEX) += -march=skylake-avx512
|
||||||
+ cflags-$(CONFIG_MCANNONLAKE) += -march=cannonlake
|
+ cflags-$(CONFIG_MCANNONLAKE) += -march=cannonlake
|
||||||
+ cflags-$(CONFIG_MICELAKE) += -march=icelake-client
|
+ cflags-$(CONFIG_MICELAKE_CLIENT) += -march=icelake-client
|
||||||
|
+ cflags-$(CONFIG_MICELAKE_SERVER) += -march=icelake-server
|
||||||
+ cflags-$(CONFIG_MCASCADELAKE) += -march=cascadelake
|
+ cflags-$(CONFIG_MCASCADELAKE) += -march=cascadelake
|
||||||
+ cflags-$(CONFIG_MCOOPERLAKE) += -march=cooperlake
|
+ cflags-$(CONFIG_MCOOPERLAKE) += -march=cooperlake
|
||||||
+ cflags-$(CONFIG_MTIGERLAKE) += -march=tigerlake
|
+ cflags-$(CONFIG_MTIGERLAKE) += -march=tigerlake
|
||||||
@@ -653,7 +662,8 @@ REFERENCES
|
|||||||
+ rustflags-$(CONFIG_MSKYLAKE) += -Ctarget-cpu=skylake
|
+ rustflags-$(CONFIG_MSKYLAKE) += -Ctarget-cpu=skylake
|
||||||
+ rustflags-$(CONFIG_MSKYLAKEX) += -Ctarget-cpu=skylake-avx512
|
+ rustflags-$(CONFIG_MSKYLAKEX) += -Ctarget-cpu=skylake-avx512
|
||||||
+ rustflags-$(CONFIG_MCANNONLAKE) += -Ctarget-cpu=cannonlake
|
+ rustflags-$(CONFIG_MCANNONLAKE) += -Ctarget-cpu=cannonlake
|
||||||
+ rustflags-$(CONFIG_MICELAKE) += -Ctarget-cpu=icelake-client
|
+ rustflags-$(CONFIG_MICELAKE_CLIENT) += -Ctarget-cpu=icelake-client
|
||||||
|
+ rustflags-$(CONFIG_MICELAKE_SERVER) += -Ctarget-cpu=icelake-server
|
||||||
+ rustflags-$(CONFIG_MCASCADELAKE) += -Ctarget-cpu=cascadelake
|
+ rustflags-$(CONFIG_MCASCADELAKE) += -Ctarget-cpu=cascadelake
|
||||||
+ rustflags-$(CONFIG_MCOOPERLAKE) += -Ctarget-cpu=cooperlake
|
+ rustflags-$(CONFIG_MCOOPERLAKE) += -Ctarget-cpu=cooperlake
|
||||||
+ rustflags-$(CONFIG_MTIGERLAKE) += -Ctarget-cpu=tigerlake
|
+ rustflags-$(CONFIG_MTIGERLAKE) += -Ctarget-cpu=tigerlake
|
||||||
@@ -668,7 +678,7 @@ REFERENCES
|
|||||||
KBUILD_CFLAGS += -mno-red-zone
|
KBUILD_CFLAGS += -mno-red-zone
|
||||||
--- a/arch/x86/include/asm/vermagic.h
|
--- a/arch/x86/include/asm/vermagic.h
|
||||||
+++ b/arch/x86/include/asm/vermagic.h
|
+++ b/arch/x86/include/asm/vermagic.h
|
||||||
@@ -17,6 +17,54 @@
|
@@ -17,6 +17,56 @@
|
||||||
#define MODULE_PROC_FAMILY "586MMX "
|
#define MODULE_PROC_FAMILY "586MMX "
|
||||||
#elif defined CONFIG_MCORE2
|
#elif defined CONFIG_MCORE2
|
||||||
#define MODULE_PROC_FAMILY "CORE2 "
|
#define MODULE_PROC_FAMILY "CORE2 "
|
||||||
@@ -700,8 +710,10 @@ REFERENCES
|
|||||||
+#define MODULE_PROC_FAMILY "SKYLAKEX "
|
+#define MODULE_PROC_FAMILY "SKYLAKEX "
|
||||||
+#elif defined CONFIG_MCANNONLAKE
|
+#elif defined CONFIG_MCANNONLAKE
|
||||||
+#define MODULE_PROC_FAMILY "CANNONLAKE "
|
+#define MODULE_PROC_FAMILY "CANNONLAKE "
|
||||||
+#elif defined CONFIG_MICELAKE
|
+#elif defined CONFIG_MICELAKE_CLIENT
|
||||||
+#define MODULE_PROC_FAMILY "ICELAKE "
|
+#define MODULE_PROC_FAMILY "ICELAKE_CLIENT "
|
||||||
|
+#elif defined CONFIG_MICELAKE_SERVER
|
||||||
|
+#define MODULE_PROC_FAMILY "ICELAKE_SERVER "
|
||||||
+#elif defined CONFIG_MCASCADELAKE
|
+#elif defined CONFIG_MCASCADELAKE
|
||||||
+#define MODULE_PROC_FAMILY "CASCADELAKE "
|
+#define MODULE_PROC_FAMILY "CASCADELAKE "
|
||||||
+#elif defined CONFIG_MCOOPERLAKE
|
+#elif defined CONFIG_MCOOPERLAKE
|
||||||
@@ -723,7 +735,7 @@ REFERENCES
|
|||||||
#elif defined CONFIG_MATOM
|
#elif defined CONFIG_MATOM
|
||||||
#define MODULE_PROC_FAMILY "ATOM "
|
#define MODULE_PROC_FAMILY "ATOM "
|
||||||
#elif defined CONFIG_M686
|
#elif defined CONFIG_M686
|
||||||
@@ -35,6 +83,28 @@
|
@@ -35,6 +85,28 @@
|
||||||
#define MODULE_PROC_FAMILY "K7 "
|
#define MODULE_PROC_FAMILY "K7 "
|
||||||
#elif defined CONFIG_MK8
|
#elif defined CONFIG_MK8
|
||||||
#define MODULE_PROC_FAMILY "K8 "
|
#define MODULE_PROC_FAMILY "K8 "
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
From 1fc1195e784540ad1966b57267fc927a87c5d21d Mon Sep 17 00:00:00 2001
|
From f4f448a305e9d705b9a0da102ddfd58bfaac5cc0 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
|
||||||
@@ -820,6 +820,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
|
@@ -872,6 +872,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
|
||||||
@@ -1451,6 +1451,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
@@ -1465,6 +1465,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
|
||||||
@@ -828,6 +828,10 @@ KBUILD_CFLAGS += -Os
|
@@ -880,6 +880,10 @@ KBUILD_CFLAGS += -Os
|
||||||
KBUILD_RUSTFLAGS += -Copt-level=s
|
KBUILD_RUSTFLAGS += -Copt-level=s
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -1,8 +1,7 @@
|
|||||||
From 3ebc1fdf3e0ee9bff1efe20eb5791eba5c84a810 Mon Sep 17 00:00:00 2001
|
From 3ebc1fdf3e0ee9bff1efe20eb5791eba5c84a810 Mon Sep 17 00:00:00 2001
|
||||||
From: Alexandre Frade <kernel@xanmod.org>
|
From: Alexandre Frade <kernel@xanmod.org>
|
||||||
Date: Thu, 3 Aug 2023 13:53:49 +0000
|
Date: Thu, 3 Aug 2023 13:53:49 +0000
|
||||||
Subject: [PATCH 01/19] XANMOD: x86/build: Prevent generating avx2 and avx512
|
Subject: XANMOD: x86/build: Prevent generating avx2 and avx512 floating-point code
|
||||||
floating-point code
|
|
||||||
|
|
||||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||||
---
|
---
|
||||||
|
@@ -1,17 +1,16 @@
|
|||||||
From dccbc0ca6c05ae315967a603870d553c231a68a1 Mon Sep 17 00:00:00 2001
|
From b1a99a2a9675f80b7c04a239a6b047373ccf3a17 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: [PATCH 02/18] XANMOD: kbuild: Add GCC SMS-based modulo scheduling
|
Subject: XANMOD: kbuild: Add GCC SMS-based modulo scheduling flags
|
||||||
flags
|
|
||||||
|
|
||||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||||
---
|
---
|
||||||
Makefile | 7 ++++
|
Makefile | 4 ++++
|
||||||
1 file changed, 7 insertions(+)
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -832,6 +832,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
@@ -884,6 +884,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fivopts)
|
KBUILD_CFLAGS += $(call cc-option,-fivopts)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@@ -1,24 +0,0 @@
|
|||||||
From 578cb97f41beb5d2dde81b8a4c1db6e01e8bcc6a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Oleksandr Natalenko <oleksandr@natalenko.name>
|
|
||||||
Date: Wed, 11 Dec 2024 08:50:50 +0100
|
|
||||||
Subject: kbuild-6.12: adopt proposed upstream change for generic CPUs
|
|
||||||
|
|
||||||
Link: https://lore.kernel.org/lkml/20241210144945.2325330-4-arnd@kernel.org/
|
|
||||||
Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
|
||||||
---
|
|
||||||
arch/x86/Makefile | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/x86/Makefile
|
|
||||||
+++ b/arch/x86/Makefile
|
|
||||||
@@ -184,8 +184,8 @@ else
|
|
||||||
cflags-$(CONFIG_MCORE2) += -march=core2
|
|
||||||
cflags-$(CONFIG_MATOM) += -march=bonnell
|
|
||||||
ifeq ($(CONFIG_X86_64_VERSION),1)
|
|
||||||
- cflags-$(CONFIG_GENERIC_CPU) += -mtune=generic
|
|
||||||
- rustflags-$(CONFIG_GENERIC_CPU) += -Ztune-cpu=generic
|
|
||||||
+ cflags-$(CONFIG_GENERIC_CPU) += -march=x86-64 -mtune=generic
|
|
||||||
+ rustflags-$(CONFIG_GENERIC_CPU) += -Ctarget-cpu=x86-64 -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)
|
|
@@ -0,0 +1,59 @@
|
|||||||
|
From b6c0305214154bc26d20b130266fc1ba8341b58c 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)
|
@@ -0,0 +1,27 @@
|
|||||||
|
From 6e51c53b5e940312c71ce5ea68cf94a000beab01 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);
|
@@ -0,0 +1,51 @@
|
|||||||
|
From ad3fffe8ff1f18ad437d8b0d0bb602ba3c24adf7 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);
|
355
debian/patches/patchset-pf/amd-pstate/0004-cpufreq-amd-pstate-Convert-all-perf-values-to-u8.patch
vendored
Normal file
355
debian/patches/patchset-pf/amd-pstate/0004-cpufreq-amd-pstate-Convert-all-perf-values-to-u8.patch
vendored
Normal file
@@ -0,0 +1,355 @@
|
|||||||
|
From 300686c32b77583f45c6763535da85f2242bf820 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
131
debian/patches/patchset-pf/amd-pstate/0005-cpufreq-amd-pstate-Modularize-perf-freq-conversion.patch
vendored
Normal file
131
debian/patches/patchset-pf/amd-pstate/0005-cpufreq-amd-pstate-Modularize-perf-freq-conversion.patch
vendored
Normal file
@@ -0,0 +1,131 @@
|
|||||||
|
From 8b87350a2e336e54b4d2638ac042bb2f7416312a 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
|
@@ -0,0 +1,37 @@
|
|||||||
|
From b638a74c3b16e0781bb25478c135726862c9271d 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);
|
||||||
|
-
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
@@ -0,0 +1,26 @@
|
|||||||
|
From 156278367fd2c0863dc06f9a7df0a654ae336726 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);
|
@@ -0,0 +1,124 @@
|
|||||||
|
From e36868a11daa43eff94abd32f19b1783e89298d4 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);
|
@@ -0,0 +1,26 @@
|
|||||||
|
From 9b7b7d59c5425246ffda281e761ef3ec3b0e4fbc 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;
|
||||||
|
|
@@ -0,0 +1,35 @@
|
|||||||
|
From f09ef5b8aacd5b16ac1ea93103b41a7e88b174ed 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)
|
@@ -0,0 +1,42 @@
|
|||||||
|
From 210d043d7b244588c911e355f2d5339bda9c8209 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;
|
||||||
|
|
@@ -0,0 +1,35 @@
|
|||||||
|
From a0233b8c2c01e98ddeb2e80768d4c7172311b200 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;
|
||||||
|
}
|
@@ -0,0 +1,209 @@
|
|||||||
|
From ad672c3336331cab028c27e4a73153f517bb1844 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;
|
||||||
|
|
611
debian/patches/patchset-pf/amd-pstate/0014-cpufreq-amd-pstate-Move-perf-values-into-a-union.patch
vendored
Normal file
611
debian/patches/patchset-pf/amd-pstate/0014-cpufreq-amd-pstate-Move-perf-values-into-a-union.patch
vendored
Normal file
@@ -0,0 +1,611 @@
|
|||||||
|
From b96076ada115f25a4944f6f111b22c44a5d1a3cf 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;
|
89
debian/patches/patchset-pf/amd-pstate/0015-cpufreq-amd-pstate-Overhaul-locking.patch
vendored
Normal file
89
debian/patches/patchset-pf/amd-pstate/0015-cpufreq-amd-pstate-Overhaul-locking.patch
vendored
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
From 6c0b59640cce68d7574078d7d1e549bdb8f0128d 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);
|
||||||
|
|
48
debian/patches/patchset-pf/amd-pstate/0016-cpufreq-amd-pstate-Drop-cppc_cap1_cached.patch
vendored
Normal file
48
debian/patches/patchset-pf/amd-pstate/0016-cpufreq-amd-pstate-Drop-cppc_cap1_cached.patch
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
From 7c9409faeb921c76988b4cd2294ca0a959775f35 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;
|
||||||
|
};
|
@@ -0,0 +1,144 @@
|
|||||||
|
From 346b2824b742a8f5943db8c8200ba4a7492bb3cf 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)
|
@@ -0,0 +1,37 @@
|
|||||||
|
From 310f8a994f55561902e5a75ff8623988921e3908 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mario Limonciello <mario.limonciello@amd.com>
|
||||||
|
Date: Wed, 26 Feb 2025 01:49:23 -0600
|
||||||
|
Subject: cpufreq/amd-pstate-ut: Allow lowest nonlinear and lowest to be the
|
||||||
|
same
|
||||||
|
|
||||||
|
Several Ryzen AI processors support the exact same value for lowest
|
||||||
|
nonlinear perf and lowest perf. Loosen up the unit tests to allow this
|
||||||
|
scenario.
|
||||||
|
|
||||||
|
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 | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
--- a/drivers/cpufreq/amd-pstate-ut.c
|
||||||
|
+++ b/drivers/cpufreq/amd-pstate-ut.c
|
||||||
|
@@ -184,7 +184,7 @@ static void amd_pstate_ut_check_perf(u32
|
||||||
|
|
||||||
|
if (!((highest_perf >= nominal_perf) &&
|
||||||
|
(nominal_perf > lowest_nonlinear_perf) &&
|
||||||
|
- (lowest_nonlinear_perf > lowest_perf) &&
|
||||||
|
+ (lowest_nonlinear_perf >= lowest_perf) &&
|
||||||
|
(lowest_perf > 0))) {
|
||||||
|
amd_pstate_ut_cases[index].result = AMD_PSTATE_UT_RESULT_FAIL;
|
||||||
|
pr_err("%s cpu%d highest=%d >= nominal=%d > lowest_nonlinear=%d > lowest=%d > 0, the formula is incorrect!\n",
|
||||||
|
@@ -217,7 +217,7 @@ static void amd_pstate_ut_check_freq(u32
|
||||||
|
|
||||||
|
if (!((policy->cpuinfo.max_freq >= cpudata->nominal_freq) &&
|
||||||
|
(cpudata->nominal_freq > cpudata->lowest_nonlinear_freq) &&
|
||||||
|
- (cpudata->lowest_nonlinear_freq > policy->cpuinfo.min_freq) &&
|
||||||
|
+ (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",
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user