Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
818a459fa3 | |||
bbfd90d5dc | |||
8a22827345 | |||
44cb6acc9c |
4
debian/bin/gencontrol.py
vendored
4
debian/bin/gencontrol.py
vendored
@@ -62,7 +62,7 @@ class Gencontrol(Base):
|
||||
super().do_main_setup(config, vars, makeflags)
|
||||
makeflags.update({
|
||||
'VERSION': self.version.linux_version,
|
||||
'UPSTREAMVERSION': self.version.linux_upstream,
|
||||
'UPSTREAMVERSION': self.version.linux_upstream_full,
|
||||
'ABINAME': self.abiname,
|
||||
'SOURCEVERSION': self.version.complete,
|
||||
})
|
||||
@@ -353,7 +353,7 @@ class Gencontrol(Base):
|
||||
self.abiname = f'{version.linux_upstream_full}'
|
||||
|
||||
self.vars = {
|
||||
'upstreamversion': self.version.linux_upstream,
|
||||
'upstreamversion': self.version.linux_upstream_full,
|
||||
'version': self.version.linux_version,
|
||||
'version_complete': self.version.complete,
|
||||
'source_basename': re.sub(r'-[\d.]+$', '',
|
||||
|
2
debian/bin/genpatch-pf
vendored
2
debian/bin/genpatch-pf
vendored
@@ -7,7 +7,7 @@ w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
||||
|
||||
dst='debian/patches/tmp-pf'
|
||||
src='../linux-extras'
|
||||
branches='fixes archlinux cpuidle exfat kbuild nfs smb xfs'
|
||||
branches='archlinux bbr3 cpuidle kbuild steady'
|
||||
|
||||
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
||||
mkdir -p "${dst}"
|
||||
|
2
debian/bin/genpatch-zen
vendored
2
debian/bin/genpatch-zen
vendored
@@ -7,7 +7,7 @@ w=$(git rev-parse --path-format=absolute --show-toplevel) ; : "${w:?}" ; cd "$w"
|
||||
|
||||
dst='debian/patches/tmp-zen'
|
||||
src='../linux-extras'
|
||||
branches='zen-sauce fixes'
|
||||
branches='bbr3 fixes zen-sauce'
|
||||
|
||||
if [ -d "${dst}" ] ; then rm -rf "${dst}" ; fi
|
||||
mkdir -p "${dst}"
|
||||
|
71
debian/changelog
vendored
71
debian/changelog
vendored
@@ -1,71 +1,30 @@
|
||||
linux (6.15.11-1) sid; urgency=medium
|
||||
linux (6.16.6-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.11
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.6
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Wed, 20 Aug 2025 21:45:46 +0300
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Tue, 09 Sep 2025 20:27:56 +0300
|
||||
|
||||
linux (6.15.10-1) sid; urgency=medium
|
||||
linux (6.16.5-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.10
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.5
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 15 Aug 2025 15:43:04 +0300
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 04 Sep 2025 18:03:41 +0300
|
||||
|
||||
linux (6.15.9-1) sid; urgency=medium
|
||||
linux (6.16.4-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.9
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.4
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 01 Aug 2025 16:49:13 +0300
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 28 Aug 2025 22:38:27 +0300
|
||||
|
||||
linux (6.15.8-1) sid; urgency=medium
|
||||
linux (6.16.3-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.8
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.1
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.2
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.16.3
|
||||
* New upstream release: https://kernelnewbies.org/Linux_6.16
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Sat, 26 Jul 2025 12:31:39 +0300
|
||||
|
||||
linux (6.15.7-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.7
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 17 Jul 2025 22:21:12 +0300
|
||||
|
||||
linux (6.15.6-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.6
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 10 Jul 2025 19:38:23 +0300
|
||||
|
||||
linux (6.15.5-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.5
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Mon, 07 Jul 2025 01:40:22 +0300
|
||||
|
||||
linux (6.15.4-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.4
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Fri, 27 Jun 2025 14:05:47 +0300
|
||||
|
||||
linux (6.15.3-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.3
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Thu, 19 Jun 2025 17:46:46 +0300
|
||||
|
||||
linux (6.15.2-1) sid; urgency=medium
|
||||
|
||||
* New upstream stable update:
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.1
|
||||
https://www.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.15.2
|
||||
* New upstream release: https://kernelnewbies.org/Linux_6.15
|
||||
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Tue, 17 Jun 2025 12:18:45 +0300
|
||||
-- Konstantin Demin <rockdrilla@gmail.com> Sun, 24 Aug 2025 20:54:35 +0300
|
||||
|
28
debian/config/amd64/config.cloud
vendored
28
debian/config/amd64/config.cloud
vendored
@@ -91,6 +91,7 @@ CONFIG_IO_DELAY_NONE=y
|
||||
##
|
||||
## file: crypto/Kconfig
|
||||
##
|
||||
# CONFIG_CRYPTO_BENCHMARK is not set
|
||||
CONFIG_CRYPTO_ECDH=m
|
||||
CONFIG_CRYPTO_DEFLATE=m
|
||||
CONFIG_CRYPTO_842=m
|
||||
@@ -201,6 +202,7 @@ CONFIG_SATA_MOBILE_LPM_POLICY=0
|
||||
## file: drivers/block/Kconfig
|
||||
##
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
# CONFIG_BLK_DEV_ZONED_LOOP is not set
|
||||
|
||||
##
|
||||
## file: drivers/block/mtip32xx/Kconfig
|
||||
@@ -295,6 +297,7 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
# CONFIG_CRYPTO_DEV_QAT_C62X is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_6XXX is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
|
||||
@@ -474,7 +477,6 @@ CONFIG_HWMON=m
|
||||
# CONFIG_SENSORS_NCT6683 is not set
|
||||
# CONFIG_SENSORS_NCT6775 is not set
|
||||
# CONFIG_SENSORS_NPCM7XX is not set
|
||||
# CONFIG_SENSORS_OXP is not set
|
||||
# CONFIG_SENSORS_SIS5595 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
@@ -826,6 +828,7 @@ CONFIG_FUSION_FC=m
|
||||
##
|
||||
## file: drivers/net/Kconfig
|
||||
##
|
||||
# CONFIG_OVPN is not set
|
||||
# CONFIG_FUJITSU_ES is not set
|
||||
|
||||
##
|
||||
@@ -1223,6 +1226,7 @@ CONFIG_FBNIC=m
|
||||
##
|
||||
## file: drivers/net/phy/Kconfig
|
||||
##
|
||||
# CONFIG_AS21XXX_PHY is not set
|
||||
# CONFIG_AIR_EN8811H_PHY is not set
|
||||
# CONFIG_AMD_PHY is not set
|
||||
# CONFIG_ADIN_PHY is not set
|
||||
@@ -1245,6 +1249,7 @@ CONFIG_FBNIC=m
|
||||
# CONFIG_MARVELL_88Q2XXX_PHY is not set
|
||||
# CONFIG_MARVELL_88X2222_PHY is not set
|
||||
# CONFIG_MAXLINEAR_GPHY is not set
|
||||
# CONFIG_MAXLINEAR_86110_PHY is not set
|
||||
# CONFIG_MICREL_PHY is not set
|
||||
# CONFIG_MICROCHIP_T1S_PHY is not set
|
||||
# CONFIG_MICROCHIP_PHY is not set
|
||||
@@ -1389,7 +1394,7 @@ CONFIG_PCIEASPM_DEFAULT=y
|
||||
##
|
||||
## file: drivers/pci/pwrctrl/Kconfig
|
||||
##
|
||||
# CONFIG_PCI_PWRCTL_SLOT is not set
|
||||
# CONFIG_PCI_PWRCTRL_SLOT is not set
|
||||
|
||||
##
|
||||
## file: drivers/pci/switch/Kconfig
|
||||
@@ -1762,6 +1767,7 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
||||
# CONFIG_IBMASR is not set
|
||||
# CONFIG_WAFER_WDT is not set
|
||||
# CONFIG_IE6XX_WDT is not set
|
||||
# CONFIG_INTEL_OC_WATCHDOG is not set
|
||||
# CONFIG_IT8712F_WDT is not set
|
||||
# CONFIG_IT87_WDT is not set
|
||||
# CONFIG_HP_WATCHDOG is not set
|
||||
@@ -1832,6 +1838,11 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
||||
##
|
||||
# CONFIG_EFS_FS is not set
|
||||
|
||||
##
|
||||
## file: fs/erofs/Kconfig
|
||||
##
|
||||
# CONFIG_EROFS_FS_ZIP_ACCEL is not set
|
||||
|
||||
##
|
||||
## file: fs/f2fs/Kconfig
|
||||
##
|
||||
@@ -1967,6 +1978,11 @@ CONFIG_PROC_VMCORE=y
|
||||
##
|
||||
# CONFIG_CIFS is not set
|
||||
|
||||
##
|
||||
## file: fs/squashfs/Kconfig
|
||||
##
|
||||
# CONFIG_SQUASHFS_COMP_CACHE_FULL is not set
|
||||
|
||||
##
|
||||
## file: fs/ufs/Kconfig
|
||||
##
|
||||
@@ -1996,6 +2012,7 @@ CONFIG_KEXEC_SIG=y
|
||||
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
|
||||
CONFIG_KEXEC_JUMP=y
|
||||
CONFIG_CRASH_DUMP=y
|
||||
# CONFIG_CRASH_DM_CRYPT is not set
|
||||
CONFIG_CRASH_HOTPLUG=y
|
||||
CONFIG_CRASH_MAX_MEMORY_RANGES=8192
|
||||
|
||||
@@ -2097,7 +2114,7 @@ CONFIG_MAX_SKB_FRAGS=19
|
||||
##
|
||||
## file: net/9p/Kconfig
|
||||
##
|
||||
# CONFIG_NET_9P is not set
|
||||
CONFIG_NET_9P_RDMA=m
|
||||
|
||||
##
|
||||
## file: net/appletalk/Kconfig
|
||||
@@ -2340,10 +2357,7 @@ CONFIG_CRYPTO_LIB_AESCFB=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA_INTERNAL=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305_INTERNAL=m
|
||||
CONFIG_CRYPTO_POLY1305_X86_64=m
|
||||
CONFIG_CXL_PORT=y
|
||||
CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y
|
||||
@@ -2362,8 +2376,8 @@ CONFIG_LZ4_COMPRESS=m
|
||||
CONFIG_MFD_CORE=m
|
||||
CONFIG_ND_BTT=m
|
||||
CONFIG_ND_PFN=m
|
||||
CONFIG_NETFS_SUPPORT=m
|
||||
# CONFIG_NVMEM_LAYOUTS is not set
|
||||
CONFIG_PLDMFW=y
|
||||
CONFIG_PREEMPT_NONE_BUILD=y
|
||||
CONFIG_RATIONAL=m
|
||||
CONFIG_SCSI_COMMON=m
|
||||
|
145
debian/config/amd64/config.mobile
vendored
145
debian/config/amd64/config.mobile
vendored
@@ -31,7 +31,7 @@ CONFIG_MODIFY_LDT_SYSCALL=y
|
||||
##
|
||||
## file: arch/x86/Kconfig.cpu
|
||||
##
|
||||
CONFIG_X86_64_VERSION=2
|
||||
CONFIG_X86_64_VERSION=3
|
||||
|
||||
##
|
||||
## file: arch/x86/Kconfig.debug
|
||||
@@ -107,6 +107,7 @@ CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y
|
||||
##
|
||||
## file: crypto/Kconfig
|
||||
##
|
||||
CONFIG_CRYPTO_BENCHMARK=m
|
||||
CONFIG_CRYPTO_ECDH=y
|
||||
CONFIG_CRYPTO_DEFLATE=y
|
||||
CONFIG_CRYPTO_842=y
|
||||
@@ -320,6 +321,7 @@ CONFIG_BCMA_DRIVER_GPIO=y
|
||||
## file: drivers/block/Kconfig
|
||||
##
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_BLK_DEV_ZONED_LOOP=m
|
||||
|
||||
##
|
||||
## file: drivers/block/mtip32xx/Kconfig
|
||||
@@ -332,7 +334,6 @@ CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
|
||||
CONFIG_BT_HCIBTUSB=m
|
||||
CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
|
||||
CONFIG_BT_HCIBTUSB_POLL_SYNC=y
|
||||
CONFIG_BT_HCIBTUSB_AUTO_ISOC_ALT=y
|
||||
CONFIG_BT_HCIBTUSB_BCM=y
|
||||
CONFIG_BT_HCIBTUSB_MTK=y
|
||||
CONFIG_BT_HCIBTUSB_RTL=y
|
||||
@@ -545,6 +546,7 @@ CONFIG_CRYPTO_DEV_QAT_C3XXX=m
|
||||
CONFIG_CRYPTO_DEV_QAT_C62X=m
|
||||
CONFIG_CRYPTO_DEV_QAT_4XXX=m
|
||||
CONFIG_CRYPTO_DEV_QAT_420XX=m
|
||||
CONFIG_CRYPTO_DEV_QAT_6XXX=m
|
||||
CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
|
||||
CONFIG_CRYPTO_DEV_QAT_C3XXXVF=m
|
||||
CONFIG_CRYPTO_DEV_QAT_C62XVF=m
|
||||
@@ -556,6 +558,7 @@ CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION=y
|
||||
CONFIG_CXL_BUS=m
|
||||
CONFIG_CXL_MEM_RAW_COMMANDS=y
|
||||
CONFIG_CXL_FEATURES=y
|
||||
# CONFIG_CXL_EDAC_MEM_FEATURES is not set
|
||||
|
||||
##
|
||||
## file: drivers/devfreq/Kconfig
|
||||
@@ -711,6 +714,14 @@ CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY=m
|
||||
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=y
|
||||
# CONFIG_GOOGLE_VPD is not set
|
||||
|
||||
##
|
||||
## file: drivers/firmware/qcom/Kconfig
|
||||
##
|
||||
## choice: TrustZone interface memory allocator mode
|
||||
CONFIG_QCOM_TZMEM_MODE_GENERIC=y
|
||||
# CONFIG_QCOM_TZMEM_MODE_SHMBRIDGE is not set
|
||||
## end choice
|
||||
|
||||
##
|
||||
## file: drivers/fsi/Kconfig
|
||||
##
|
||||
@@ -809,6 +820,7 @@ CONFIG_GPIO_LP87565=m
|
||||
CONFIG_GPIO_MADERA=m
|
||||
CONFIG_GPIO_MAX77620=m
|
||||
CONFIG_GPIO_MAX77650=m
|
||||
CONFIG_GPIO_MAX77759=m
|
||||
CONFIG_GPIO_PALMAS=y
|
||||
CONFIG_GPIO_RC5T583=y
|
||||
CONFIG_GPIO_STMPE=y
|
||||
@@ -855,14 +867,18 @@ CONFIG_GPIO_VIRTUSER=m
|
||||
## file: drivers/gpu/drm/Kconfig
|
||||
##
|
||||
CONFIG_DRM=y
|
||||
# CONFIG_DRM_DEBUG_MM is not set
|
||||
# CONFIG_DRM_PANIC is not set
|
||||
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
|
||||
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
|
||||
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
|
||||
CONFIG_DRM_VGEM=m
|
||||
CONFIG_DRM_HYPERV=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/Kconfig.debug
|
||||
##
|
||||
# CONFIG_DRM_WERROR is not set
|
||||
# CONFIG_DRM_DEBUG_MM is not set
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/amd/acp/Kconfig
|
||||
@@ -1072,6 +1088,7 @@ CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=m
|
||||
CONFIG_DRM_PANEL_AUO_A030JTN01=m
|
||||
CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=m
|
||||
CONFIG_DRM_PANEL_BOE_HIMAX8279D=m
|
||||
CONFIG_DRM_PANEL_BOE_TD4320=m
|
||||
CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A=m
|
||||
CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
|
||||
CONFIG_DRM_PANEL_BOE_TV101WUM_LL2=m
|
||||
@@ -1081,6 +1098,7 @@ CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=m
|
||||
CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=m
|
||||
CONFIG_DRM_PANEL_DSI_CM=m
|
||||
CONFIG_DRM_PANEL_LVDS=m
|
||||
CONFIG_DRM_PANEL_HIMAX_HX8279=m
|
||||
CONFIG_DRM_PANEL_HIMAX_HX83102=m
|
||||
CONFIG_DRM_PANEL_HIMAX_HX83112A=m
|
||||
CONFIG_DRM_PANEL_HIMAX_HX8394=m
|
||||
@@ -1115,6 +1133,7 @@ CONFIG_DRM_PANEL_NOVATEK_NT35950=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT36523=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT36672A=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT36672E=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT37801=m
|
||||
CONFIG_DRM_PANEL_NOVATEK_NT39016=m
|
||||
CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=m
|
||||
CONFIG_DRM_PANEL_ORISETECH_OTA5601A=m
|
||||
@@ -1168,6 +1187,7 @@ CONFIG_DRM_PANEL_TPO_TD028TTEC1=m
|
||||
CONFIG_DRM_PANEL_TPO_TD043MTEA1=m
|
||||
CONFIG_DRM_PANEL_TPO_TPG110=m
|
||||
# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set
|
||||
CONFIG_DRM_PANEL_VISIONOX_G2647FB105=m
|
||||
CONFIG_DRM_PANEL_VISIONOX_R66451=m
|
||||
# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set
|
||||
CONFIG_DRM_PANEL_VISIONOX_RM692E5=m
|
||||
@@ -1186,6 +1206,13 @@ CONFIG_DRM_QXL=m
|
||||
CONFIG_DRM_RADEON=m
|
||||
CONFIG_DRM_RADEON_USERPTR=y
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/sitronix/Kconfig
|
||||
##
|
||||
CONFIG_DRM_ST7571_I2C=m
|
||||
CONFIG_DRM_ST7586=m
|
||||
CONFIG_DRM_ST7735R=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/solomon/Kconfig
|
||||
##
|
||||
@@ -1193,6 +1220,13 @@ CONFIG_DRM_SSD130X=m
|
||||
CONFIG_DRM_SSD130X_I2C=m
|
||||
CONFIG_DRM_SSD130X_SPI=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/sysfb/Kconfig
|
||||
##
|
||||
CONFIG_DRM_EFIDRM=m
|
||||
# CONFIG_DRM_SIMPLEDRM is not set
|
||||
CONFIG_DRM_VESADRM=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/tiny/Kconfig
|
||||
##
|
||||
@@ -1202,7 +1236,6 @@ CONFIG_DRM_BOCHS=m
|
||||
CONFIG_DRM_CIRRUS_QEMU=m
|
||||
CONFIG_DRM_GM12U320=m
|
||||
CONFIG_DRM_PANEL_MIPI_DBI=m
|
||||
# CONFIG_DRM_SIMPLEDRM is not set
|
||||
CONFIG_TINYDRM_HX8357D=m
|
||||
CONFIG_TINYDRM_ILI9163=m
|
||||
CONFIG_TINYDRM_ILI9225=m
|
||||
@@ -1211,8 +1244,6 @@ CONFIG_TINYDRM_ILI9486=m
|
||||
CONFIG_TINYDRM_MI0283QT=m
|
||||
CONFIG_TINYDRM_REPAPER=m
|
||||
CONFIG_TINYDRM_SHARP_MEMORY=m
|
||||
CONFIG_TINYDRM_ST7586=m
|
||||
CONFIG_TINYDRM_ST7735R=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/udl/Kconfig
|
||||
@@ -1247,6 +1278,7 @@ CONFIG_DRM_VMWGFX=m
|
||||
CONFIG_DRM_XE=m
|
||||
CONFIG_DRM_XE_DISPLAY=y
|
||||
CONFIG_DRM_XE_DP_TUNNEL=y
|
||||
CONFIG_DRM_XE_GPUSVM=y
|
||||
CONFIG_DRM_XE_DEVMEM_MIRROR=y
|
||||
CONFIG_DRM_XE_FORCE_PROBE=""
|
||||
|
||||
@@ -1528,6 +1560,8 @@ CONFIG_SENSORS_ASUS_ROG_RYUJIN=m
|
||||
CONFIG_SENSORS_AXI_FAN_CONTROL=m
|
||||
CONFIG_SENSORS_K8TEMP=m
|
||||
CONFIG_SENSORS_K10TEMP=m
|
||||
CONFIG_SENSORS_KBATT=m
|
||||
CONFIG_SENSORS_KFAN=m
|
||||
CONFIG_SENSORS_FAM15H_POWER=m
|
||||
CONFIG_SENSORS_APPLESMC=m
|
||||
CONFIG_SENSORS_ASB100=m
|
||||
@@ -1601,6 +1635,7 @@ CONFIG_SENSORS_MAX6639=m
|
||||
CONFIG_SENSORS_MAX6650=m
|
||||
CONFIG_SENSORS_MAX6697=m
|
||||
CONFIG_SENSORS_MAX31790=m
|
||||
CONFIG_SENSORS_MAX77705=m
|
||||
CONFIG_SENSORS_MC34VR500=m
|
||||
CONFIG_SENSORS_MCP3021=m
|
||||
CONFIG_SENSORS_TC654=m
|
||||
@@ -1636,13 +1671,11 @@ CONFIG_SENSORS_NPCM7XX=m
|
||||
CONFIG_SENSORS_NZXT_KRAKEN2=m
|
||||
CONFIG_SENSORS_NZXT_KRAKEN3=m
|
||||
CONFIG_SENSORS_NZXT_SMART2=m
|
||||
CONFIG_SENSORS_OXP=m
|
||||
CONFIG_SENSORS_PCF8591=m
|
||||
CONFIG_SENSORS_PT5161L=m
|
||||
CONFIG_SENSORS_PWM_FAN=m
|
||||
CONFIG_SENSORS_QNAP_MCU_HWMON=m
|
||||
CONFIG_SENSORS_SBTSI=m
|
||||
CONFIG_SENSORS_SBRMI=m
|
||||
CONFIG_SENSORS_SHT15=m
|
||||
CONFIG_SENSORS_SHT21=m
|
||||
CONFIG_SENSORS_SHT3x=m
|
||||
@@ -1742,6 +1775,8 @@ CONFIG_SENSORS_IRPS5401=m
|
||||
CONFIG_SENSORS_ISL68137=m
|
||||
CONFIG_SENSORS_LM25066=m
|
||||
CONFIG_SENSORS_LM25066_REGULATOR=y
|
||||
CONFIG_SENSORS_LT3074=m
|
||||
CONFIG_SENSORS_LT3074_REGULATOR=m
|
||||
CONFIG_SENSORS_LT7182S=m
|
||||
CONFIG_SENSORS_LTC2978=m
|
||||
CONFIG_SENSORS_LTC2978_REGULATOR=y
|
||||
@@ -1856,6 +1891,7 @@ CONFIG_I2C_CGBC=m
|
||||
CONFIG_I2C_DESIGNWARE_CORE=y
|
||||
CONFIG_I2C_DESIGNWARE_SLAVE=y
|
||||
CONFIG_I2C_DESIGNWARE_PLATFORM=y
|
||||
CONFIG_I2C_DESIGNWARE_AMDISP=m
|
||||
CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
|
||||
CONFIG_I2C_DESIGNWARE_PCI=m
|
||||
CONFIG_I2C_EMEV2=m
|
||||
@@ -2414,6 +2450,7 @@ CONFIG_LEDS_RT4505=m
|
||||
CONFIG_LEDS_RT8515=m
|
||||
CONFIG_LEDS_SGM3140=m
|
||||
CONFIG_LEDS_SY7802=m
|
||||
CONFIG_LEDS_TPS6131X=m
|
||||
|
||||
##
|
||||
## file: drivers/leds/rgb/Kconfig
|
||||
@@ -2907,6 +2944,7 @@ CONFIG_MFD_MAX77686=m
|
||||
CONFIG_MFD_MAX77693=m
|
||||
CONFIG_MFD_MAX77705=m
|
||||
CONFIG_MFD_MAX77714=m
|
||||
CONFIG_MFD_MAX77759=m
|
||||
CONFIG_MFD_MAX77843=y
|
||||
CONFIG_MFD_MAX8907=m
|
||||
CONFIG_MFD_MAX8925=y
|
||||
@@ -2931,7 +2969,7 @@ CONFIG_MFD_RC5T583=y
|
||||
CONFIG_MFD_RK8XX_I2C=m
|
||||
CONFIG_MFD_RK8XX_SPI=m
|
||||
CONFIG_MFD_RN5T618=m
|
||||
CONFIG_MFD_SEC_CORE=m
|
||||
CONFIG_MFD_SEC_I2C=m
|
||||
CONFIG_MFD_SI476X_CORE=m
|
||||
CONFIG_MFD_SM501=m
|
||||
CONFIG_MFD_SM501_GPIO=y
|
||||
@@ -3009,6 +3047,7 @@ CONFIG_AD525X_DPOT_SPI=m
|
||||
CONFIG_IBM_ASM=m
|
||||
CONFIG_PHANTOM=m
|
||||
CONFIG_RPMB=m
|
||||
CONFIG_TI_FPC202=m
|
||||
CONFIG_TIFM_CORE=m
|
||||
CONFIG_TIFM_7XX1=m
|
||||
CONFIG_ICS932S401=m
|
||||
@@ -3042,6 +3081,12 @@ CONFIG_MCHP_LAN966X_PCI=m
|
||||
##
|
||||
CONFIG_ALTERA_STAPL=m
|
||||
|
||||
##
|
||||
## file: drivers/misc/amd-sbi/Kconfig
|
||||
##
|
||||
CONFIG_AMD_SBRMI_I2C=m
|
||||
CONFIG_AMD_SBRMI_HWMON=y
|
||||
|
||||
##
|
||||
## file: drivers/misc/bcm-vk/Kconfig
|
||||
##
|
||||
@@ -3348,6 +3393,7 @@ CONFIG_MUX_MMIO=m
|
||||
##
|
||||
## file: drivers/net/Kconfig
|
||||
##
|
||||
CONFIG_OVPN=m
|
||||
CONFIG_NTB_NETDEV=m
|
||||
CONFIG_RIONET=m
|
||||
CONFIG_RIONET_TX_SIZE=128
|
||||
@@ -3709,6 +3755,11 @@ CONFIG_NET_VENDOR_HUAWEI=y
|
||||
##
|
||||
CONFIG_HINIC=m
|
||||
|
||||
##
|
||||
## file: drivers/net/ethernet/huawei/hinic3/Kconfig
|
||||
##
|
||||
CONFIG_HINIC3=m
|
||||
|
||||
##
|
||||
## file: drivers/net/ethernet/i825xx/Kconfig
|
||||
##
|
||||
@@ -4170,6 +4221,7 @@ CONFIG_PCS_XPCS=m
|
||||
##
|
||||
CONFIG_LED_TRIGGER_PHY=y
|
||||
CONFIG_SFP=m
|
||||
CONFIG_AS21XXX_PHY=m
|
||||
CONFIG_AIR_EN8811H_PHY=m
|
||||
CONFIG_AMD_PHY=m
|
||||
CONFIG_ADIN_PHY=m
|
||||
@@ -4192,6 +4244,7 @@ CONFIG_MARVELL_10G_PHY=m
|
||||
CONFIG_MARVELL_88Q2XXX_PHY=m
|
||||
CONFIG_MARVELL_88X2222_PHY=m
|
||||
CONFIG_MAXLINEAR_GPHY=m
|
||||
CONFIG_MAXLINEAR_86110_PHY=m
|
||||
CONFIG_MICREL_PHY=m
|
||||
CONFIG_MICROCHIP_T1S_PHY=m
|
||||
CONFIG_MICROCHIP_PHY=m
|
||||
@@ -4415,6 +4468,7 @@ CONFIG_ATH11K_SPECTRAL=y
|
||||
## file: drivers/net/wireless/ath/ath12k/Kconfig
|
||||
##
|
||||
CONFIG_ATH12K=m
|
||||
CONFIG_ATH12K_AHB=y
|
||||
CONFIG_ATH12K_DEBUG=y
|
||||
CONFIG_ATH12K_DEBUGFS=y
|
||||
# CONFIG_ATH12K_TRACING is not set
|
||||
@@ -5020,6 +5074,7 @@ CONFIG_NVME_HWMON=y
|
||||
##
|
||||
## file: drivers/nvmem/Kconfig
|
||||
##
|
||||
CONFIG_NVMEM_MAX77759=m
|
||||
CONFIG_NVMEM_RAVE_SP_EEPROM=m
|
||||
CONFIG_NVMEM_SPMI_SDAM=m
|
||||
CONFIG_NVMEM_U_BOOT_ENV=m
|
||||
@@ -5103,7 +5158,7 @@ CONFIG_PCIEASPM_POWERSAVE=y
|
||||
##
|
||||
## file: drivers/pci/pwrctrl/Kconfig
|
||||
##
|
||||
CONFIG_PCI_PWRCTL_SLOT=m
|
||||
CONFIG_PCI_PWRCTRL_SLOT=m
|
||||
|
||||
##
|
||||
## file: drivers/pci/switch/Kconfig
|
||||
@@ -5300,6 +5355,7 @@ CONFIG_MSI_LAPTOP=m
|
||||
CONFIG_MSI_WMI=m
|
||||
CONFIG_MSI_WMI_PLATFORM=m
|
||||
CONFIG_PCENGINES_APU2=m
|
||||
CONFIG_PORTWELL_EC=m
|
||||
CONFIG_BARCO_P50_GPIO=m
|
||||
CONFIG_SAMSUNG_GALAXYBOOK=m
|
||||
CONFIG_SAMSUNG_LAPTOP=m
|
||||
@@ -5318,6 +5374,7 @@ CONFIG_TOPSTAR_LAPTOP=m
|
||||
CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
||||
CONFIG_INSPUR_PLATFORM_PROFILE=m
|
||||
CONFIG_LENOVO_WMI_CAMERA=m
|
||||
CONFIG_DASHARO_ACPI=m
|
||||
CONFIG_INTEL_IPS=m
|
||||
CONFIG_INTEL_SCU_PCI=y
|
||||
CONFIG_INTEL_SCU_PLATFORM=m
|
||||
@@ -5325,12 +5382,14 @@ CONFIG_INTEL_SCU_IPC_UTIL=m
|
||||
CONFIG_SILICOM_PLATFORM=m
|
||||
CONFIG_WINMATE_FM07_KEYS=m
|
||||
CONFIG_SEL3350_PLATFORM=m
|
||||
CONFIG_OXP_EC=m
|
||||
|
||||
##
|
||||
## file: drivers/platform/x86/amd/Kconfig
|
||||
##
|
||||
CONFIG_AMD_3D_VCACHE=m
|
||||
CONFIG_AMD_WBRF=y
|
||||
CONFIG_AMD_ISP_PLATFORM=m
|
||||
|
||||
##
|
||||
## file: drivers/platform/x86/amd/hsmp/Kconfig
|
||||
@@ -5466,6 +5525,11 @@ CONFIG_SIEMENS_SIMATIC_IPC_BATT_APOLLOLAKE=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC_BATT_ELKHARTLAKE=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC_BATT_F7188X=m
|
||||
|
||||
##
|
||||
## file: drivers/platform/x86/tuxedo/nb04/Kconfig
|
||||
##
|
||||
CONFIG_TUXEDO_NB04_WMI_AB=m
|
||||
|
||||
##
|
||||
## file: drivers/platform/x86/x86-android-tablets/Kconfig
|
||||
##
|
||||
@@ -5512,6 +5576,7 @@ CONFIG_TEST_POWER=m
|
||||
CONFIG_BATTERY_88PM860X=m
|
||||
CONFIG_CHARGER_ADP5061=m
|
||||
CONFIG_BATTERY_ACT8945A=m
|
||||
CONFIG_BATTERY_CHAGALL=m
|
||||
CONFIG_BATTERY_CW2015=m
|
||||
CONFIG_BATTERY_DS2760=m
|
||||
CONFIG_BATTERY_DS2780=m
|
||||
@@ -5547,6 +5612,7 @@ CONFIG_CHARGER_MAX77650=m
|
||||
CONFIG_CHARGER_MAX77693=m
|
||||
CONFIG_CHARGER_MAX77705=m
|
||||
CONFIG_CHARGER_MAX77976=m
|
||||
CONFIG_CHARGER_MAX8971=m
|
||||
CONFIG_CHARGER_MAX8997=m
|
||||
CONFIG_CHARGER_MAX8998=m
|
||||
CONFIG_CHARGER_MT6360=m
|
||||
@@ -5625,6 +5691,7 @@ CONFIG_PWM_IQS620A=m
|
||||
CONFIG_PWM_LP3943=m
|
||||
CONFIG_PWM_LPSS_PCI=m
|
||||
CONFIG_PWM_LPSS_PLATFORM=m
|
||||
CONFIG_PWM_MC33XS2410=m
|
||||
CONFIG_PWM_NTXEC=m
|
||||
CONFIG_PWM_PCA9685=m
|
||||
CONFIG_PWM_STMPE=y
|
||||
@@ -5682,6 +5749,7 @@ CONFIG_REGULATOR_88PM886=m
|
||||
CONFIG_REGULATOR_ACT8865=m
|
||||
CONFIG_REGULATOR_ACT8945A=m
|
||||
CONFIG_REGULATOR_AD5398=m
|
||||
CONFIG_REGULATOR_ADP5055=m
|
||||
CONFIG_REGULATOR_AAT2870=m
|
||||
CONFIG_REGULATOR_ARIZONA_LDO1=m
|
||||
CONFIG_REGULATOR_ARIZONA_MICSUPP=m
|
||||
@@ -6087,7 +6155,6 @@ CONFIG_SPI_OFFLOAD_TRIGGER_PWM=m
|
||||
## file: drivers/spmi/Kconfig
|
||||
##
|
||||
CONFIG_SPMI=m
|
||||
CONFIG_SPMI_HISI3670=m
|
||||
|
||||
##
|
||||
## file: drivers/ssb/Kconfig
|
||||
@@ -6506,13 +6573,9 @@ CONFIG_USB_RAW_GADGET=m
|
||||
CONFIG_USB_GR_UDC=m
|
||||
CONFIG_USB_R8A66597=m
|
||||
CONFIG_USB_PXA27X=m
|
||||
CONFIG_USB_MV_UDC=m
|
||||
CONFIG_USB_MV_U3D=m
|
||||
CONFIG_USB_SNP_UDC_PLAT=m
|
||||
CONFIG_USB_M66592=m
|
||||
CONFIG_USB_AMD5536UDC=m
|
||||
CONFIG_USB_NET2272=m
|
||||
# CONFIG_USB_NET2272_DMA is not set
|
||||
CONFIG_USB_NET2280=m
|
||||
CONFIG_USB_GOKU=m
|
||||
CONFIG_USB_EG20T=m
|
||||
@@ -6538,6 +6601,7 @@ CONFIG_USB_XHCI_HCD=m
|
||||
# CONFIG_USB_XHCI_DBGCAP is not set
|
||||
CONFIG_USB_XHCI_PCI_RENESAS=m
|
||||
CONFIG_USB_XHCI_PLATFORM=m
|
||||
CONFIG_USB_XHCI_SIDEBAND=y
|
||||
CONFIG_USB_EHCI_HCD=m
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
||||
@@ -6986,6 +7050,7 @@ CONFIG_IB700_WDT=m
|
||||
CONFIG_IBMASR=m
|
||||
CONFIG_WAFER_WDT=m
|
||||
CONFIG_IE6XX_WDT=m
|
||||
CONFIG_INTEL_OC_WATCHDOG=m
|
||||
CONFIG_IT8712F_WDT=m
|
||||
CONFIG_IT87_WDT=m
|
||||
CONFIG_HP_WATCHDOG=m
|
||||
@@ -7024,14 +7089,6 @@ CONFIG_XEN_SYMS=y
|
||||
##
|
||||
CONFIG_VALIDATE_FS_PARSER=y
|
||||
|
||||
##
|
||||
## file: fs/9p/Kconfig
|
||||
##
|
||||
CONFIG_9P_FS=m
|
||||
CONFIG_9P_FSCACHE=y
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_9P_FS_SECURITY=y
|
||||
|
||||
##
|
||||
## file: fs/adfs/Kconfig
|
||||
##
|
||||
@@ -7088,6 +7145,11 @@ CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
##
|
||||
CONFIG_EFS_FS=m
|
||||
|
||||
##
|
||||
## file: fs/erofs/Kconfig
|
||||
##
|
||||
CONFIG_EROFS_FS_ZIP_ACCEL=y
|
||||
|
||||
##
|
||||
## file: fs/f2fs/Kconfig
|
||||
##
|
||||
@@ -7285,6 +7347,11 @@ CONFIG_CIFS_SWN_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
# CONFIG_CIFS_COMPRESSION is not set
|
||||
|
||||
##
|
||||
## file: fs/squashfs/Kconfig
|
||||
##
|
||||
CONFIG_SQUASHFS_COMP_CACHE_FULL=y
|
||||
|
||||
##
|
||||
## file: fs/ubifs/Kconfig
|
||||
##
|
||||
@@ -7324,6 +7391,7 @@ CONFIG_LOG_CPU_MAX_BUF_SHIFT=14
|
||||
CONFIG_UCLAMP_TASK=y
|
||||
CONFIG_UCLAMP_BUCKETS_COUNT=10
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
# CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED is not set
|
||||
CONFIG_UCLAMP_TASK_GROUP=y
|
||||
|
||||
##
|
||||
@@ -7534,12 +7602,7 @@ CONFIG_6LOWPAN_GHC_EXT_HDR_ROUTE=m
|
||||
##
|
||||
## file: net/9p/Kconfig
|
||||
##
|
||||
CONFIG_NET_9P=m
|
||||
CONFIG_NET_9P_FD=m
|
||||
CONFIG_NET_9P_VIRTIO=m
|
||||
CONFIG_NET_9P_XEN=m
|
||||
CONFIG_NET_9P_USBG=m
|
||||
# CONFIG_NET_9P_DEBUG is not set
|
||||
|
||||
##
|
||||
## file: net/appletalk/Kconfig
|
||||
@@ -7769,6 +7832,7 @@ CONFIG_AF_RXRPC_IPV6=y
|
||||
# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set
|
||||
# CONFIG_AF_RXRPC_DEBUG is not set
|
||||
CONFIG_RXKAD=y
|
||||
# CONFIG_RXGK is not set
|
||||
# CONFIG_RXPERF is not set
|
||||
|
||||
##
|
||||
@@ -8054,6 +8118,7 @@ CONFIG_SND_YMFPCI=m
|
||||
## file: sound/pci/hda/Kconfig
|
||||
##
|
||||
CONFIG_SND_HDA_INTEL=m
|
||||
CONFIG_SND_HDA_ACPI=m
|
||||
CONFIG_SND_HDA_HWDEP=y
|
||||
CONFIG_SND_HDA_RECONFIG=y
|
||||
CONFIG_SND_HDA_INPUT_BEEP=y
|
||||
@@ -8088,6 +8153,7 @@ CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y
|
||||
## file: sound/soc/Kconfig
|
||||
##
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_SOC_USB=m
|
||||
|
||||
##
|
||||
## file: sound/soc/adi/Kconfig
|
||||
@@ -8209,6 +8275,7 @@ CONFIG_SND_SOC_CS42XX8_I2C=m
|
||||
CONFIG_SND_SOC_CS43130=m
|
||||
CONFIG_SND_SOC_CS4341=m
|
||||
CONFIG_SND_SOC_CS4349=m
|
||||
CONFIG_SND_SOC_CS48L32=m
|
||||
CONFIG_SND_SOC_CS53L30=m
|
||||
CONFIG_SND_SOC_CS530X_I2C=m
|
||||
CONFIG_SND_SOC_CX2072X=m
|
||||
@@ -8222,6 +8289,8 @@ CONFIG_SND_SOC_ES8323=m
|
||||
CONFIG_SND_SOC_ES8326=m
|
||||
CONFIG_SND_SOC_ES8328_I2C=m
|
||||
CONFIG_SND_SOC_ES8328_SPI=m
|
||||
CONFIG_SND_SOC_ES8375=m
|
||||
CONFIG_SND_SOC_ES8389=m
|
||||
CONFIG_SND_SOC_FRAMER=m
|
||||
CONFIG_SND_SOC_GTM601=m
|
||||
CONFIG_SND_SOC_HDA=m
|
||||
@@ -8280,6 +8349,8 @@ CONFIG_SND_SOC_RT722_SDCA_SDW=m
|
||||
CONFIG_SND_SOC_RT715_SDW=m
|
||||
CONFIG_SND_SOC_RT715_SDCA_SDW=m
|
||||
CONFIG_SND_SOC_RT9120=m
|
||||
CONFIG_SND_SOC_RT9123=m
|
||||
CONFIG_SND_SOC_RT9123P=m
|
||||
CONFIG_SND_SOC_RTQ9128=m
|
||||
CONFIG_SND_SOC_SDW_MOCKUP=m
|
||||
CONFIG_SND_SOC_SGTL5000=m
|
||||
@@ -8357,6 +8428,7 @@ CONFIG_SND_SOC_WM8962=m
|
||||
CONFIG_SND_SOC_WM8974=m
|
||||
CONFIG_SND_SOC_WM8978=m
|
||||
CONFIG_SND_SOC_WM8985=m
|
||||
CONFIG_SND_SOC_WM8998=m
|
||||
CONFIG_SND_SOC_WSA881X=m
|
||||
CONFIG_SND_SOC_WSA883X=m
|
||||
CONFIG_SND_SOC_WSA884X=m
|
||||
@@ -8444,6 +8516,7 @@ CONFIG_SND_SOC_INTEL_AVS=m
|
||||
##
|
||||
## file: sound/soc/intel/avs/boards/Kconfig
|
||||
##
|
||||
# CONFIG_SND_SOC_INTEL_AVS_CARDNAME_OBSOLETE is not set
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_DA7219=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_DMIC=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_ES8336=m
|
||||
@@ -8581,6 +8654,7 @@ CONFIG_SND_USB_US122L=m
|
||||
CONFIG_SND_USB_6FIRE=m
|
||||
CONFIG_SND_USB_HIFACE=m
|
||||
CONFIG_SND_BCD2000=m
|
||||
CONFIG_SND_USB_AUDIO_QMI=m
|
||||
|
||||
##
|
||||
## file: sound/usb/line6/Kconfig
|
||||
@@ -8685,10 +8759,7 @@ CONFIG_CRYPTO_LIB_ARC4=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA=y
|
||||
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y
|
||||
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_CHACHA_INTERNAL=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_INTERNAL=y
|
||||
CONFIG_CRYPTO_POLY1305_X86_64=y
|
||||
CONFIG_CXL_PORT=m
|
||||
CONFIG_DCA=m
|
||||
@@ -8735,6 +8806,7 @@ CONFIG_DRM_PANEL_BRIDGE=y
|
||||
CONFIG_DRM_PRIVACY_SCREEN=y
|
||||
CONFIG_DRM_SCHED=m
|
||||
CONFIG_DRM_SUBALLOC_HELPER=m
|
||||
CONFIG_DRM_SYSFB_HELPER=m
|
||||
CONFIG_DRM_TTM=m
|
||||
CONFIG_DRM_TTM_HELPER=m
|
||||
CONFIG_DRM_VRAM_HELPER=m
|
||||
@@ -8779,6 +8851,7 @@ CONFIG_IGC_LEDS=y
|
||||
CONFIG_INTEL_ATOMISP2_PDX86=y
|
||||
CONFIG_INTEL_GTT=y
|
||||
CONFIG_INTEL_IDXD_BUS=m
|
||||
CONFIG_INTEL_PMC_SSRAM_TELEMETRY=m
|
||||
CONFIG_INTEL_PMT_CLASS=m
|
||||
CONFIG_INTEL_SCU=y
|
||||
CONFIG_INTEL_SCU_IPC=y
|
||||
@@ -8831,6 +8904,7 @@ CONFIG_MFD_INTEL_LPSS=m
|
||||
CONFIG_MFD_INTEL_M10_BMC_CORE=m
|
||||
CONFIG_MFD_MC13XXX=m
|
||||
CONFIG_MFD_RK8XX=m
|
||||
CONFIG_MFD_SEC_CORE=m
|
||||
CONFIG_MFD_SIMPLE_MFD_I2C=m
|
||||
CONFIG_MFD_TPS65912=m
|
||||
CONFIG_MFD_TPS6594=m
|
||||
@@ -8873,7 +8947,6 @@ CONFIG_MTK_NET_PHYLIB=m
|
||||
CONFIG_MULTIPLEXER=m
|
||||
CONFIG_ND_BTT=y
|
||||
CONFIG_ND_PFN=y
|
||||
CONFIG_NETFS_SUPPORT=m
|
||||
CONFIG_NET_CLS=y
|
||||
CONFIG_NFC_MICROREAD=m
|
||||
CONFIG_NFC_MRVL=m
|
||||
@@ -8909,7 +8982,7 @@ CONFIG_PCIE_DW_PLAT=y
|
||||
CONFIG_PCIE_PLDA_HOST=y
|
||||
CONFIG_PCI_ECAM=y
|
||||
CONFIG_PCI_HOST_COMMON=y
|
||||
CONFIG_PCI_PWRCTL=m
|
||||
CONFIG_PCI_PWRCTRL=m
|
||||
CONFIG_PCS_LYNX=m
|
||||
CONFIG_PHYLIB_LEDS=y
|
||||
CONFIG_PINCTRL_CS47L15=y
|
||||
@@ -8936,10 +9009,13 @@ CONFIG_PREEMPT_COUNT=y
|
||||
CONFIG_PWM_DWC_CORE=m
|
||||
CONFIG_PWM_LPSS=m
|
||||
CONFIG_QCA7000=m
|
||||
CONFIG_QCOM_MDT_LOADER=m
|
||||
CONFIG_QCOM_NET_PHYLIB=m
|
||||
CONFIG_QCOM_PDR_HELPERS=m
|
||||
CONFIG_QCOM_PDR_MSG=m
|
||||
CONFIG_QCOM_QMI_HELPERS=m
|
||||
CONFIG_QCOM_SCM=m
|
||||
CONFIG_QCOM_TZMEM=m
|
||||
CONFIG_QTNFMAC=m
|
||||
CONFIG_RAID6_PQ=m
|
||||
CONFIG_RATIONAL=y
|
||||
@@ -9035,7 +9111,6 @@ CONFIG_SND_HDA=m
|
||||
CONFIG_SND_HDA_CIRRUS_SCODEC=m
|
||||
CONFIG_SND_HDA_COMPONENT=y
|
||||
CONFIG_SND_HDA_CORE=m
|
||||
CONFIG_SND_HDA_CS_DSP_CONTROLS=m
|
||||
CONFIG_SND_HDA_DSP_LOADER=y
|
||||
CONFIG_SND_HDA_EXT_CORE=m
|
||||
CONFIG_SND_HDA_GENERIC_LEDS=y
|
||||
@@ -9043,6 +9118,7 @@ CONFIG_SND_HDA_I915=y
|
||||
CONFIG_SND_HDA_SCODEC_COMPONENT=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L41=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L56=m
|
||||
CONFIG_SND_HDA_SCODEC_TAS2781=m
|
||||
CONFIG_SND_HWDEP=m
|
||||
CONFIG_SND_INTEL_DSP_CONFIG=m
|
||||
CONFIG_SND_INTEL_NHLT=y
|
||||
@@ -9185,6 +9261,7 @@ CONFIG_SND_SOC_SOF_XTENSA=m
|
||||
CONFIG_SND_SOC_SRC4XXX=m
|
||||
CONFIG_SND_SOC_SSM2602=m
|
||||
CONFIG_SND_SOC_TAS2781_COMLIB=m
|
||||
CONFIG_SND_SOC_TAS2781_COMLIB_I2C=m
|
||||
CONFIG_SND_SOC_TAS2781_FMWLIB=m
|
||||
CONFIG_SND_SOC_TLV320AIC23=m
|
||||
CONFIG_SND_SOC_TLV320AIC32X4=m
|
||||
|
80
debian/config/amd64/config.vm
vendored
80
debian/config/amd64/config.vm
vendored
@@ -96,6 +96,7 @@ CONFIG_IO_DELAY_NONE=y
|
||||
##
|
||||
## file: crypto/Kconfig
|
||||
##
|
||||
CONFIG_CRYPTO_BENCHMARK=m
|
||||
CONFIG_CRYPTO_ECDH=m
|
||||
CONFIG_CRYPTO_DEFLATE=m
|
||||
CONFIG_CRYPTO_842=m
|
||||
@@ -216,6 +217,7 @@ CONFIG_SATA_MOBILE_LPM_POLICY=0
|
||||
## file: drivers/block/Kconfig
|
||||
##
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
CONFIG_BLK_DEV_ZONED_LOOP=m
|
||||
|
||||
##
|
||||
## file: drivers/block/mtip32xx/Kconfig
|
||||
@@ -342,6 +344,7 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
|
||||
# CONFIG_CRYPTO_DEV_QAT_C62X is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_420XX is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_6XXX is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_DH895xCCVF is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
|
||||
# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
|
||||
@@ -551,14 +554,18 @@ CONFIG_GPIO_SIM=m
|
||||
## file: drivers/gpu/drm/Kconfig
|
||||
##
|
||||
CONFIG_DRM=y
|
||||
# CONFIG_DRM_DEBUG_MM is not set
|
||||
# CONFIG_DRM_PANIC is not set
|
||||
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
|
||||
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
|
||||
CONFIG_DRM_LOAD_EDID_FIRMWARE=y
|
||||
CONFIG_DRM_VGEM=m
|
||||
CONFIG_DRM_HYPERV=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/Kconfig.debug
|
||||
##
|
||||
# CONFIG_DRM_WERROR is not set
|
||||
# CONFIG_DRM_DEBUG_MM is not set
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/amd/amdgpu/Kconfig
|
||||
@@ -636,11 +643,23 @@ CONFIG_DRM_QXL=m
|
||||
##
|
||||
# CONFIG_DRM_RADEON is not set
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/sitronix/Kconfig
|
||||
##
|
||||
# CONFIG_DRM_ST7571_I2C is not set
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/solomon/Kconfig
|
||||
##
|
||||
# CONFIG_DRM_SSD130X is not set
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/sysfb/Kconfig
|
||||
##
|
||||
CONFIG_DRM_EFIDRM=m
|
||||
# CONFIG_DRM_SIMPLEDRM is not set
|
||||
CONFIG_DRM_VESADRM=m
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/tiny/Kconfig
|
||||
##
|
||||
@@ -648,7 +667,6 @@ CONFIG_DRM_QXL=m
|
||||
CONFIG_DRM_BOCHS=m
|
||||
CONFIG_DRM_CIRRUS_QEMU=m
|
||||
# CONFIG_DRM_GM12U320 is not set
|
||||
# CONFIG_DRM_SIMPLEDRM is not set
|
||||
|
||||
##
|
||||
## file: drivers/gpu/drm/udl/Kconfig
|
||||
@@ -973,11 +991,9 @@ CONFIG_HWMON=y
|
||||
# CONFIG_SENSORS_NZXT_KRAKEN2 is not set
|
||||
# CONFIG_SENSORS_NZXT_KRAKEN3 is not set
|
||||
# CONFIG_SENSORS_NZXT_SMART2 is not set
|
||||
# CONFIG_SENSORS_OXP is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_PT5161L is not set
|
||||
# CONFIG_SENSORS_SBTSI is not set
|
||||
# CONFIG_SENSORS_SBRMI is not set
|
||||
# CONFIG_SENSORS_SHT15 is not set
|
||||
# CONFIG_SENSORS_SHT21 is not set
|
||||
# CONFIG_SENSORS_SHT3x is not set
|
||||
@@ -1059,6 +1075,7 @@ CONFIG_SENSORS_PMBUS=m
|
||||
# CONFIG_SENSORS_IRPS5401 is not set
|
||||
# CONFIG_SENSORS_ISL68137 is not set
|
||||
# CONFIG_SENSORS_LM25066 is not set
|
||||
# CONFIG_SENSORS_LT3074 is not set
|
||||
# CONFIG_SENSORS_LT7182S is not set
|
||||
# CONFIG_SENSORS_LTC2978 is not set
|
||||
# CONFIG_SENSORS_LTC3815 is not set
|
||||
@@ -1704,6 +1721,7 @@ CONFIG_MFD_INTEL_PMC_BXT=m
|
||||
# CONFIG_AD525X_DPOT is not set
|
||||
# CONFIG_IBM_ASM is not set
|
||||
# CONFIG_PHANTOM is not set
|
||||
# CONFIG_TI_FPC202 is not set
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
@@ -1726,6 +1744,12 @@ CONFIG_NTSYNC=m
|
||||
##
|
||||
# CONFIG_ALTERA_STAPL is not set
|
||||
|
||||
##
|
||||
## file: drivers/misc/amd-sbi/Kconfig
|
||||
##
|
||||
CONFIG_AMD_SBRMI_I2C=m
|
||||
CONFIG_AMD_SBRMI_HWMON=y
|
||||
|
||||
##
|
||||
## file: drivers/misc/bcm-vk/Kconfig
|
||||
##
|
||||
@@ -1795,6 +1819,7 @@ CONFIG_EEPROM_AT24=m
|
||||
##
|
||||
## file: drivers/net/Kconfig
|
||||
##
|
||||
CONFIG_OVPN=m
|
||||
# CONFIG_FUJITSU_ES is not set
|
||||
|
||||
##
|
||||
@@ -2201,6 +2226,7 @@ CONFIG_MCTP_TRANSPORT_USB=m
|
||||
## file: drivers/net/phy/Kconfig
|
||||
##
|
||||
# CONFIG_SFP is not set
|
||||
# CONFIG_AS21XXX_PHY is not set
|
||||
# CONFIG_AIR_EN8811H_PHY is not set
|
||||
# CONFIG_AMD_PHY is not set
|
||||
# CONFIG_ADIN_PHY is not set
|
||||
@@ -2223,6 +2249,7 @@ CONFIG_MCTP_TRANSPORT_USB=m
|
||||
# CONFIG_MARVELL_88Q2XXX_PHY is not set
|
||||
# CONFIG_MARVELL_88X2222_PHY is not set
|
||||
# CONFIG_MAXLINEAR_GPHY is not set
|
||||
# CONFIG_MAXLINEAR_86110_PHY is not set
|
||||
# CONFIG_MICREL_PHY is not set
|
||||
# CONFIG_MICROCHIP_T1S_PHY is not set
|
||||
# CONFIG_MICROCHIP_PHY is not set
|
||||
@@ -2393,7 +2420,7 @@ CONFIG_PCIEASPM_DEFAULT=y
|
||||
##
|
||||
## file: drivers/pci/pwrctrl/Kconfig
|
||||
##
|
||||
# CONFIG_PCI_PWRCTL_SLOT is not set
|
||||
CONFIG_PCI_PWRCTRL_SLOT=m
|
||||
|
||||
##
|
||||
## file: drivers/pci/switch/Kconfig
|
||||
@@ -2471,6 +2498,7 @@ CONFIG_WMI_BMOF=m
|
||||
CONFIG_ACPI_QUICKSTART=m
|
||||
# CONFIG_MEEGOPAD_ANX7428 is not set
|
||||
CONFIG_MSI_WMI_PLATFORM=m
|
||||
# CONFIG_PORTWELL_EC is not set
|
||||
# CONFIG_BARCO_P50_GPIO is not set
|
||||
# CONFIG_SAMSUNG_Q10 is not set
|
||||
# CONFIG_TOSHIBA_BT_RFKILL is not set
|
||||
@@ -2481,6 +2509,7 @@ CONFIG_MSI_WMI_PLATFORM=m
|
||||
CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
||||
# CONFIG_INSPUR_PLATFORM_PROFILE is not set
|
||||
# CONFIG_LENOVO_WMI_CAMERA is not set
|
||||
# CONFIG_DASHARO_ACPI is not set
|
||||
# CONFIG_INTEL_IPS is not set
|
||||
# CONFIG_INTEL_SCU_PCI is not set
|
||||
# CONFIG_INTEL_SCU_PLATFORM is not set
|
||||
@@ -2491,6 +2520,7 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
||||
##
|
||||
# CONFIG_AMD_3D_VCACHE is not set
|
||||
# CONFIG_AMD_WBRF is not set
|
||||
CONFIG_AMD_ISP_PLATFORM=m
|
||||
|
||||
##
|
||||
## file: drivers/platform/x86/amd/hsmp/Kconfig
|
||||
@@ -2561,6 +2591,11 @@ CONFIG_SERIAL_MULTI_INSTANTIATE=m
|
||||
##
|
||||
# CONFIG_SIEMENS_SIMATIC_IPC is not set
|
||||
|
||||
##
|
||||
## file: drivers/platform/x86/tuxedo/nb04/Kconfig
|
||||
##
|
||||
# CONFIG_TUXEDO_NB04_WMI_AB is not set
|
||||
|
||||
##
|
||||
## file: drivers/pnp/Kconfig
|
||||
##
|
||||
@@ -2601,6 +2636,7 @@ CONFIG_CHARGER_GPIO=m
|
||||
# CONFIG_CHARGER_LT3651 is not set
|
||||
# CONFIG_CHARGER_LTC4162L is not set
|
||||
# CONFIG_CHARGER_MAX77976 is not set
|
||||
# CONFIG_CHARGER_MAX8971 is not set
|
||||
# CONFIG_CHARGER_BQ2415X is not set
|
||||
# CONFIG_CHARGER_BQ24190 is not set
|
||||
# CONFIG_CHARGER_BQ24257 is not set
|
||||
@@ -2971,6 +3007,7 @@ CONFIG_USB_XHCI_HCD=m
|
||||
# CONFIG_USB_XHCI_DBGCAP is not set
|
||||
CONFIG_USB_XHCI_PCI_RENESAS=m
|
||||
CONFIG_USB_XHCI_PLATFORM=m
|
||||
# CONFIG_USB_XHCI_SIDEBAND is not set
|
||||
CONFIG_USB_EHCI_HCD=m
|
||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
||||
@@ -3203,6 +3240,7 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
||||
# CONFIG_IBMASR is not set
|
||||
# CONFIG_WAFER_WDT is not set
|
||||
# CONFIG_IE6XX_WDT is not set
|
||||
# CONFIG_INTEL_OC_WATCHDOG is not set
|
||||
# CONFIG_IT8712F_WDT is not set
|
||||
# CONFIG_IT87_WDT is not set
|
||||
# CONFIG_HP_WATCHDOG is not set
|
||||
@@ -3230,14 +3268,6 @@ CONFIG_SOFT_WATCHDOG_PRETIMEOUT=y
|
||||
##
|
||||
# CONFIG_VALIDATE_FS_PARSER is not set
|
||||
|
||||
##
|
||||
## file: fs/9p/Kconfig
|
||||
##
|
||||
CONFIG_9P_FS=y
|
||||
CONFIG_9P_FSCACHE=y
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_9P_FS_SECURITY=y
|
||||
|
||||
##
|
||||
## file: fs/adfs/Kconfig
|
||||
##
|
||||
@@ -3285,6 +3315,11 @@ CONFIG_ECRYPT_FS_MESSAGING=y
|
||||
##
|
||||
# CONFIG_EFS_FS is not set
|
||||
|
||||
##
|
||||
## file: fs/erofs/Kconfig
|
||||
##
|
||||
CONFIG_EROFS_FS_ZIP_ACCEL=y
|
||||
|
||||
##
|
||||
## file: fs/f2fs/Kconfig
|
||||
##
|
||||
@@ -3447,6 +3482,11 @@ CONFIG_CIFS_SWN_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
# CONFIG_CIFS_COMPRESSION is not set
|
||||
|
||||
##
|
||||
## file: fs/squashfs/Kconfig
|
||||
##
|
||||
CONFIG_SQUASHFS_COMP_CACHE_FULL=y
|
||||
|
||||
##
|
||||
## file: fs/ufs/Kconfig
|
||||
##
|
||||
@@ -3471,6 +3511,7 @@ CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
|
||||
CONFIG_UCLAMP_TASK=y
|
||||
CONFIG_UCLAMP_BUCKETS_COUNT=10
|
||||
CONFIG_RT_GROUP_SCHED=y
|
||||
# CONFIG_RT_GROUP_SCHED_DEFAULT_DISABLED is not set
|
||||
CONFIG_UCLAMP_TASK_GROUP=y
|
||||
|
||||
##
|
||||
@@ -3613,12 +3654,7 @@ CONFIG_NET_PKTGEN=m
|
||||
##
|
||||
## file: net/9p/Kconfig
|
||||
##
|
||||
CONFIG_NET_9P=y
|
||||
CONFIG_NET_9P_FD=y
|
||||
CONFIG_NET_9P_VIRTIO=y
|
||||
CONFIG_NET_9P_XEN=y
|
||||
CONFIG_NET_9P_RDMA=m
|
||||
# CONFIG_NET_9P_DEBUG is not set
|
||||
|
||||
##
|
||||
## file: net/appletalk/Kconfig
|
||||
@@ -3763,6 +3799,7 @@ CONFIG_AF_RXRPC_IPV6=y
|
||||
# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set
|
||||
# CONFIG_AF_RXRPC_DEBUG is not set
|
||||
# CONFIG_RXKAD is not set
|
||||
# CONFIG_RXGK is not set
|
||||
# CONFIG_RXPERF is not set
|
||||
|
||||
##
|
||||
@@ -3912,10 +3949,7 @@ CONFIG_CRYPTO_LIB_ARC4=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_CHACHA_INTERNAL=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305_INTERNAL=m
|
||||
CONFIG_CRYPTO_POLY1305_X86_64=m
|
||||
CONFIG_CXL_PORT=y
|
||||
CONFIG_DEV_SYNC_PROBE=m
|
||||
@@ -3930,6 +3964,7 @@ CONFIG_DRM_GEM_SHMEM_HELPER=m
|
||||
CONFIG_DRM_KMS_HELPER=m
|
||||
CONFIG_DRM_PANEL=y
|
||||
CONFIG_DRM_PANEL_BRIDGE=y
|
||||
CONFIG_DRM_SYSFB_HELPER=m
|
||||
CONFIG_DRM_TTM=m
|
||||
CONFIG_DRM_TTM_HELPER=m
|
||||
CONFIG_DRM_VRAM_HELPER=m
|
||||
@@ -3960,10 +3995,11 @@ CONFIG_MFD_CORE=m
|
||||
CONFIG_MOUSE_PS2_SMBUS=y
|
||||
CONFIG_ND_BTT=m
|
||||
CONFIG_ND_PFN=m
|
||||
CONFIG_NETFS_SUPPORT=y
|
||||
CONFIG_NET_CLS=y
|
||||
CONFIG_NLS_UCS2_UTILS=m
|
||||
# CONFIG_NVMEM_LAYOUTS is not set
|
||||
CONFIG_PCI_PWRCTRL=m
|
||||
CONFIG_PLDMFW=y
|
||||
CONFIG_PM_CLK=y
|
||||
CONFIG_PM_OPP=y
|
||||
CONFIG_PM_SLEEP_DEBUG=y
|
||||
|
97
debian/config/config
vendored
97
debian/config/config
vendored
@@ -61,7 +61,6 @@ CONFIG_X86_VSYSCALL_EMULATION=y
|
||||
# CONFIG_MICROCODE_LATE_LOADING is not set
|
||||
CONFIG_X86_MSR=m
|
||||
CONFIG_X86_CPUID=m
|
||||
# CONFIG_X86_5LEVEL is not set
|
||||
# CONFIG_X86_CPA_STATISTICS is not set
|
||||
CONFIG_AMD_MEM_ENCRYPT=y
|
||||
CONFIG_NUMA=y
|
||||
@@ -127,11 +126,9 @@ CONFIG_IA32_EMULATION=y
|
||||
##
|
||||
## file: arch/x86/Kconfig.cpu
|
||||
##
|
||||
## choice: x86_64 Compiler Build Optimization
|
||||
# CONFIG_X86_NATIVE_CPU is not set
|
||||
## choice: x86_64 Compiler Build Optimization
|
||||
CONFIG_GENERIC_CPU=y
|
||||
# CONFIG_MNATIVE_INTEL is not set
|
||||
# CONFIG_MNATIVE_AMD is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MK8SSE3 is not set
|
||||
# CONFIG_MK10 is not set
|
||||
@@ -172,6 +169,7 @@ CONFIG_GENERIC_CPU=y
|
||||
# CONFIG_MRAPTORLAKE is not set
|
||||
# CONFIG_MMETEORLAKE is not set
|
||||
# CONFIG_MEMERALDRAPIDS is not set
|
||||
# CONFIG_MDIAMONDRAPIDS is not set
|
||||
## end choice
|
||||
# CONFIG_PROCESSOR_SELECT is not set
|
||||
CONFIG_CPU_SUP_INTEL=y
|
||||
@@ -230,10 +228,8 @@ CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64=m
|
||||
CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=m
|
||||
CONFIG_CRYPTO_NHPOLY1305_SSE2=m
|
||||
CONFIG_CRYPTO_NHPOLY1305_AVX2=m
|
||||
CONFIG_CRYPTO_BLAKE2S_X86=y
|
||||
CONFIG_CRYPTO_POLYVAL_CLMUL_NI=m
|
||||
CONFIG_CRYPTO_SHA1_SSSE3=m
|
||||
CONFIG_CRYPTO_SHA256_SSSE3=m
|
||||
CONFIG_CRYPTO_SHA512_SSSE3=m
|
||||
CONFIG_CRYPTO_SM3_AVX_X86_64=m
|
||||
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
|
||||
@@ -265,6 +261,11 @@ CONFIG_KVM_HYPERV=y
|
||||
# CONFIG_KVM_PROVE_MMU is not set
|
||||
CONFIG_KVM_MAX_NR_VCPUS=1024
|
||||
|
||||
##
|
||||
## file: arch/x86/lib/crypto/Kconfig
|
||||
##
|
||||
CONFIG_CRYPTO_BLAKE2S_X86=y
|
||||
|
||||
##
|
||||
## file: arch/x86/xen/Kconfig
|
||||
##
|
||||
@@ -325,15 +326,13 @@ CONFIG_SYSTEM_TRUSTED_KEYS=""
|
||||
## file: crypto/Kconfig
|
||||
##
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_USER=m
|
||||
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
|
||||
# CONFIG_CRYPTO_SELFTESTS is not set
|
||||
CONFIG_CRYPTO_NULL=y
|
||||
CONFIG_CRYPTO_PCRYPT=m
|
||||
CONFIG_CRYPTO_CRYPTD=m
|
||||
CONFIG_CRYPTO_AUTHENC=m
|
||||
CONFIG_CRYPTO_KRB5ENC=m
|
||||
CONFIG_CRYPTO_TEST=m
|
||||
CONFIG_CRYPTO_RSA=y
|
||||
CONFIG_CRYPTO_DH=y
|
||||
CONFIG_CRYPTO_DH_RFC7919_GROUPS=y
|
||||
@@ -376,7 +375,6 @@ CONFIG_CRYPTO_HMAC=y
|
||||
CONFIG_CRYPTO_MD4=m
|
||||
CONFIG_CRYPTO_MD5=y
|
||||
CONFIG_CRYPTO_MICHAEL_MIC=m
|
||||
CONFIG_CRYPTO_POLY1305=m
|
||||
CONFIG_CRYPTO_RMD160=m
|
||||
CONFIG_CRYPTO_SHA1=y
|
||||
CONFIG_CRYPTO_SHA256=y
|
||||
@@ -628,6 +626,7 @@ CONFIG_TCG_TPM2_HMAC=y
|
||||
CONFIG_HW_RANDOM_TPM=y
|
||||
CONFIG_TCG_XEN=m
|
||||
CONFIG_TCG_VTPM_PROXY=m
|
||||
CONFIG_TCG_SVSM=m
|
||||
|
||||
##
|
||||
## file: drivers/comedi/Kconfig
|
||||
@@ -963,11 +962,6 @@ CONFIG_VMWARE_BALLOON=m
|
||||
# CONFIG_PCI_ENDPOINT_TEST is not set
|
||||
CONFIG_NSM=m
|
||||
|
||||
##
|
||||
## file: drivers/misc/echo/Kconfig
|
||||
##
|
||||
# CONFIG_ECHO is not set
|
||||
|
||||
##
|
||||
## file: drivers/misc/genwqe/Kconfig
|
||||
##
|
||||
@@ -1112,7 +1106,7 @@ CONFIG_HYPERV_NET=m
|
||||
##
|
||||
## file: drivers/net/mdio/Kconfig
|
||||
##
|
||||
CONFIG_MDIO_DEVICE=m
|
||||
CONFIG_MDIO_BUS=m
|
||||
|
||||
##
|
||||
## file: drivers/net/phy/Kconfig
|
||||
@@ -1734,6 +1728,9 @@ CONFIG_VIRTIO_INPUT=m
|
||||
CONFIG_VIRTIO_MMIO=m
|
||||
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
|
||||
# CONFIG_VIRTIO_DEBUG is not set
|
||||
CONFIG_VIRTIO_RTC=m
|
||||
CONFIG_VIRTIO_RTC_PTP=y
|
||||
CONFIG_VIRTIO_RTC_CLASS=y
|
||||
|
||||
##
|
||||
## file: drivers/watchdog/Kconfig
|
||||
@@ -1809,6 +1806,14 @@ CONFIG_BINFMT_SCRIPT=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_COREDUMP=y
|
||||
|
||||
##
|
||||
## file: fs/9p/Kconfig
|
||||
##
|
||||
CONFIG_9P_FS=y
|
||||
CONFIG_9P_FSCACHE=y
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_9P_FS_SECURITY=y
|
||||
|
||||
##
|
||||
## file: fs/afs/Kconfig
|
||||
##
|
||||
@@ -2050,6 +2055,11 @@ CONFIG_QUOTA_NETLINK_INTERFACE=y
|
||||
# CONFIG_QFMT_V1 is not set
|
||||
CONFIG_QFMT_V2=m
|
||||
|
||||
##
|
||||
## file: fs/resctrl/Kconfig
|
||||
##
|
||||
CONFIG_RESCTRL_FS=y
|
||||
|
||||
##
|
||||
## file: fs/smb/server/Kconfig
|
||||
##
|
||||
@@ -2135,7 +2145,6 @@ CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_WATCH_QUEUE=y
|
||||
CONFIG_CROSS_MEMORY_ATTACH=y
|
||||
# CONFIG_USELIB is not set
|
||||
CONFIG_AUDIT=y
|
||||
## choice: Cputime accounting
|
||||
CONFIG_VIRT_CPU_ACCOUNTING_GEN=y
|
||||
@@ -2181,6 +2190,7 @@ CONFIG_UTS_NS=y
|
||||
CONFIG_TIME_NS=y
|
||||
CONFIG_IPC_NS=y
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_USER_NS_UNPRIVILEGED=y
|
||||
CONFIG_PID_NS=y
|
||||
CONFIG_NET_NS=y
|
||||
CONFIG_CHECKPOINT_RESTORE=y
|
||||
@@ -2649,6 +2659,7 @@ CONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
|
||||
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
||||
# CONFIG_NO_PAGE_MAPCOUNT is not set
|
||||
# CONFIG_CMA is not set
|
||||
CONFIG_PAGE_BLOCK_ORDER=10
|
||||
CONFIG_MEM_SOFT_DIRTY=y
|
||||
CONFIG_DEFERRED_STRUCT_PAGE_INIT=y
|
||||
# CONFIG_IDLE_PAGE_TRACKING is not set
|
||||
@@ -2723,6 +2734,15 @@ CONFIG_VLAN_8021Q=m
|
||||
# CONFIG_VLAN_8021Q_GVRP is not set
|
||||
# CONFIG_VLAN_8021Q_MVRP is not set
|
||||
|
||||
##
|
||||
## file: net/9p/Kconfig
|
||||
##
|
||||
CONFIG_NET_9P=y
|
||||
CONFIG_NET_9P_FD=y
|
||||
CONFIG_NET_9P_VIRTIO=y
|
||||
CONFIG_NET_9P_XEN=y
|
||||
# CONFIG_NET_9P_DEBUG is not set
|
||||
|
||||
##
|
||||
## file: net/batman-adv/Kconfig
|
||||
##
|
||||
@@ -2764,11 +2784,6 @@ CONFIG_CEPH_LIB=m
|
||||
##
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
##
|
||||
## file: net/dccp/Kconfig
|
||||
##
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
##
|
||||
## file: net/dns_resolver/Kconfig
|
||||
##
|
||||
@@ -3193,6 +3208,7 @@ CONFIG_NET_SCH_FQ_CODEL=y
|
||||
CONFIG_NET_SCH_CAKE=m
|
||||
CONFIG_NET_SCH_PIE=y
|
||||
CONFIG_NET_SCH_FQ_PIE=y
|
||||
CONFIG_NET_SCH_BPF=y
|
||||
CONFIG_NET_SCH_DEFAULT=y
|
||||
## choice: Default queuing discipline
|
||||
# CONFIG_DEFAULT_FQ is not set
|
||||
@@ -3253,11 +3269,11 @@ CONFIG_UNIX_DIAG=y
|
||||
##
|
||||
## file: net/vmw_vsock/Kconfig
|
||||
##
|
||||
CONFIG_VSOCKETS=m
|
||||
CONFIG_VSOCKETS_DIAG=m
|
||||
CONFIG_VSOCKETS_LOOPBACK=m
|
||||
CONFIG_VSOCKETS=y
|
||||
CONFIG_VSOCKETS_DIAG=y
|
||||
CONFIG_VSOCKETS_LOOPBACK=y
|
||||
CONFIG_VMWARE_VMCI_VSOCKETS=m
|
||||
CONFIG_VIRTIO_VSOCKETS=m
|
||||
CONFIG_VIRTIO_VSOCKETS=y
|
||||
CONFIG_HYPERV_VSOCKETS=m
|
||||
|
||||
##
|
||||
@@ -3439,6 +3455,7 @@ CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
|
||||
CONFIG_ACPI_LPIT=y
|
||||
CONFIG_ACPI_MADT_WAKEUP=y
|
||||
CONFIG_ACPI_MDIO=m
|
||||
CONFIG_ACPI_MRRM=y
|
||||
CONFIG_ACPI_NUMA=y
|
||||
CONFIG_ACPI_PROCESSOR_CSTATE=y
|
||||
CONFIG_ACPI_PROCESSOR_IDLE=y
|
||||
@@ -3471,6 +3488,7 @@ CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y
|
||||
CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y
|
||||
CONFIG_ARCH_HAS_CPU_PASID=y
|
||||
CONFIG_ARCH_HAS_CPU_RELAX=y
|
||||
CONFIG_ARCH_HAS_CPU_RESCTRL=y
|
||||
CONFIG_ARCH_HAS_CRC32=y
|
||||
CONFIG_ARCH_HAS_CRC64=y
|
||||
CONFIG_ARCH_HAS_CRC_T10DIF=y
|
||||
@@ -3542,6 +3560,7 @@ CONFIG_ARCH_SUPPORTS_INT128=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_HANDOVER=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_JUMP=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y
|
||||
@@ -3580,6 +3599,7 @@ CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
|
||||
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
|
||||
CONFIG_ARCH_WANT_HUGETLB_VMEMMAP_PREINIT=y
|
||||
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
|
||||
CONFIG_ARCH_WANT_IRQS_OFF_ACTIVATE_MM=y
|
||||
CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
|
||||
CONFIG_ARCH_WANT_OLD_COMPAT_IPC=y
|
||||
CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y
|
||||
@@ -3601,9 +3621,7 @@ CONFIG_BLK_CGROUP_RWSTAT=y
|
||||
CONFIG_BLK_DEV_BSG_COMMON=y
|
||||
CONFIG_BLK_DEV_DM_BUILTIN=y
|
||||
CONFIG_BLK_ICQ=y
|
||||
CONFIG_BLK_MQ_PCI=y
|
||||
CONFIG_BLK_MQ_STACKING=y
|
||||
CONFIG_BLK_MQ_VIRTIO=y
|
||||
CONFIG_BLK_PM=y
|
||||
CONFIG_BLK_RQ_ALLOC_TIME=y
|
||||
CONFIG_BLOCK_HOLDER_DEPRECATED=y
|
||||
@@ -3655,6 +3673,8 @@ CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=y
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519=y
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=y
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_ARCH_HAVE_LIB_SHA256_SIMD=y
|
||||
CONFIG_CRYPTO_BLOWFISH_COMMON=m
|
||||
CONFIG_CRYPTO_CAST_COMMON=m
|
||||
CONFIG_CRYPTO_CURVE25519_X86=m
|
||||
@@ -3680,23 +3700,25 @@ CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_CURVE25519_INTERNAL=m
|
||||
CONFIG_CRYPTO_LIB_DES=m
|
||||
CONFIG_CRYPTO_LIB_GF128MUL=y
|
||||
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
|
||||
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
|
||||
CONFIG_CRYPTO_LIB_SHA1=y
|
||||
CONFIG_CRYPTO_LIB_SHA256=y
|
||||
CONFIG_CRYPTO_LIB_SHA256_GENERIC=y
|
||||
CONFIG_CRYPTO_LIB_SM3=m
|
||||
CONFIG_CRYPTO_LIB_UTILS=y
|
||||
CONFIG_CRYPTO_MANAGER=y
|
||||
CONFIG_CRYPTO_MANAGER2=y
|
||||
CONFIG_CRYPTO_NHPOLY1305=m
|
||||
CONFIG_CRYPTO_NULL2=y
|
||||
CONFIG_CRYPTO_POLYVAL=m
|
||||
CONFIG_CRYPTO_RNG=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_RNG_DEFAULT=y
|
||||
CONFIG_CRYPTO_SHA256_X86_64=y
|
||||
CONFIG_CRYPTO_SIG=y
|
||||
CONFIG_CRYPTO_SIG2=y
|
||||
CONFIG_CRYPTO_SIMD=m
|
||||
CONFIG_CRYPTO_SKCIPHER=y
|
||||
CONFIG_CRYPTO_SKCIPHER2=y
|
||||
CONFIG_CRYPTO_SM3=m
|
||||
CONFIG_CRYPTO_SM4=m
|
||||
CONFIG_CRYPTO_TWOFISH_COMMON=m
|
||||
CONFIG_CRYPTO_USER_API=m
|
||||
@@ -3738,7 +3760,6 @@ CONFIG_DYNAMIC_EVENTS=y
|
||||
CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y
|
||||
CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
|
||||
CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
|
||||
CONFIG_DYNAMIC_MEMORY_LAYOUT=y
|
||||
CONFIG_DYNAMIC_PHYSICAL_MASK=y
|
||||
CONFIG_DYNAMIC_SIGFRAME=y
|
||||
CONFIG_EDAC_ATOMIC_SCRUB=y
|
||||
@@ -3789,6 +3810,7 @@ CONFIG_FUNCTION_ALIGNMENT_4B=y
|
||||
CONFIG_FUNCTION_PADDING_BYTES=16
|
||||
CONFIG_FUNCTION_PADDING_CFI=11
|
||||
CONFIG_FUNCTION_TRACE_ARGS=y
|
||||
CONFIG_FUTEX_MPOL=y
|
||||
CONFIG_FUTEX_PI=y
|
||||
CONFIG_FWNODE_MDIO=m
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
@@ -4082,8 +4104,6 @@ CONFIG_LRU_GEN_WALKS_MMU=y
|
||||
CONFIG_LZ4_DECOMPRESS=y
|
||||
CONFIG_LZO_COMPRESS=y
|
||||
CONFIG_LZO_DECOMPRESS=y
|
||||
CONFIG_MDIO_BUS=m
|
||||
CONFIG_MDIO_DEVRES=m
|
||||
CONFIG_MEMORY_BALLOON=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MEMREGION=y
|
||||
@@ -4119,7 +4139,9 @@ CONFIG_NETFILTER_FAMILY_BRIDGE=y
|
||||
CONFIG_NETFILTER_NETLINK=y
|
||||
CONFIG_NETFILTER_SKIP_EGRESS=y
|
||||
CONFIG_NETFILTER_SYNPROXY=m
|
||||
CONFIG_NETFS_SUPPORT=y
|
||||
CONFIG_NETPOLL=y
|
||||
CONFIG_NET_CRC32C=y
|
||||
CONFIG_NET_DEVLINK=y
|
||||
CONFIG_NET_DEVMEM=y
|
||||
CONFIG_NET_EGRESS=y
|
||||
@@ -4201,7 +4223,7 @@ CONFIG_PCI_LOCKLESS_CONFIG=y
|
||||
CONFIG_PCI_XEN=y
|
||||
CONFIG_PER_VMA_LOCK=y
|
||||
CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
|
||||
CONFIG_PGTABLE_LEVELS=4
|
||||
CONFIG_PGTABLE_LEVELS=5
|
||||
CONFIG_PHYLINK=m
|
||||
CONFIG_PHYS_ADDR_T_64BIT=y
|
||||
CONFIG_PM_SLEEP=y
|
||||
@@ -4310,6 +4332,8 @@ CONFIG_TRACING=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
CONFIG_TREE_RCU=y
|
||||
CONFIG_TREE_SRCU=y
|
||||
CONFIG_TSM_GUEST=y
|
||||
CONFIG_TSM_MEASUREMENTS=y
|
||||
CONFIG_TSM_REPORTS=m
|
||||
CONFIG_UCS2_STRING=y
|
||||
CONFIG_UEFI_CPER=y
|
||||
@@ -4337,7 +4361,7 @@ CONFIG_VIRTIO_ANCHOR=y
|
||||
CONFIG_VIRTIO_PCI_ADMIN_LEGACY=y
|
||||
CONFIG_VIRTIO_PCI_LIB=y
|
||||
CONFIG_VIRTIO_PCI_LIB_LEGACY=y
|
||||
CONFIG_VIRTIO_VSOCKETS_COMMON=m
|
||||
CONFIG_VIRTIO_VSOCKETS_COMMON=y
|
||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||
CONFIG_VMCORE_INFO=y
|
||||
CONFIG_VT_CONSOLE_SLEEP=y
|
||||
@@ -4355,7 +4379,6 @@ CONFIG_X86_DISABLED_FEATURE_CENTAUR_MCR=y
|
||||
CONFIG_X86_DISABLED_FEATURE_CYRIX_ARR=y
|
||||
CONFIG_X86_DISABLED_FEATURE_IBT=y
|
||||
CONFIG_X86_DISABLED_FEATURE_K6_MTRR=y
|
||||
CONFIG_X86_DISABLED_FEATURE_LA57=y
|
||||
CONFIG_X86_DISABLED_FEATURE_LAM=y
|
||||
CONFIG_X86_DISABLED_FEATURE_RETHUNK=y
|
||||
CONFIG_X86_DISABLED_FEATURE_RETPOLINE=y
|
||||
|
2
debian/config/defines.toml
vendored
2
debian/config/defines.toml
vendored
@@ -11,7 +11,7 @@ name = 'x86'
|
||||
name = 'none'
|
||||
|
||||
[build]
|
||||
compiler = 'gcc-14'
|
||||
compiler = 'gcc-15'
|
||||
|
||||
[relations.image]
|
||||
depends = [
|
||||
|
8
debian/lib/python/debian_linux/debian.py
vendored
8
debian/lib/python/debian_linux/debian.py
vendored
@@ -175,12 +175,6 @@ class VersionLinux(Version):
|
||||
.+?
|
||||
)
|
||||
)?
|
||||
(?:
|
||||
\.dfsg\.
|
||||
(?P<dfsg>
|
||||
\d+
|
||||
)
|
||||
)?
|
||||
$
|
||||
""", re.X)
|
||||
|
||||
@@ -192,7 +186,6 @@ $
|
||||
if up_match is None or rev_match is None:
|
||||
raise RuntimeError(u"Invalid debian linux version")
|
||||
d = up_match.groupdict()
|
||||
self.linux_modifier = d['modifier']
|
||||
self.linux_version = d['version']
|
||||
if d['modifier'] is not None:
|
||||
assert not d['update']
|
||||
@@ -200,7 +193,6 @@ $
|
||||
else:
|
||||
self.linux_upstream = d['version']
|
||||
self.linux_upstream_full = self.linux_upstream + d['update']
|
||||
self.linux_dfsg = d['dfsg']
|
||||
|
||||
|
||||
class PackageArchitecture(set[str]):
|
||||
|
45
debian/patches/bugfix/all/bootconfig-fix-negative-seeks-on-32-bit-with-lfs-ena.patch
vendored
Normal file
45
debian/patches/bugfix/all/bootconfig-fix-negative-seeks-on-32-bit-with-lfs-ena.patch
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
From: Ben Hutchings <benh@debian.org>
|
||||
Date: Sun, 17 Aug 2025 16:06:28 +0200
|
||||
Subject: bootconfig: Fix negative seeks on 32-bit with LFS enabled
|
||||
Forwarded: https://lore.kernel.org/linux-trace-kernel/aKHlevxeg6Y7UQrz@decadent.org.uk/T/
|
||||
|
||||
Commit 26dda5769509 "tools/bootconfig: Cleanup bootconfig footer size
|
||||
calculations" replaced some expressions of type int with the
|
||||
BOOTCONFIG_FOOTER_SIZE macro, which expands to an expression of type
|
||||
size_t, which is unsigned.
|
||||
|
||||
On 32-bit architectures with LFS enabled (i.e. off_t is 64-bit), the
|
||||
seek offset of -BOOTCONFIG_FOOTER_SIZE now turns into a positive
|
||||
value.
|
||||
|
||||
Fix this by casting the size to off_t before negating it.
|
||||
|
||||
Just in case someone changes BOOTCONFIG_MAGIC_LEN to have type size_t
|
||||
later, do the same thing to the seek offset of -BOOTCONFIG_MAGIC_LEN.
|
||||
|
||||
Fixes: 26dda5769509 ("tools/bootconfig: Cleanup bootconfig footer size calculations")
|
||||
Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||
---
|
||||
tools/bootconfig/main.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/tools/bootconfig/main.c
|
||||
+++ b/tools/bootconfig/main.c
|
||||
@@ -193,7 +193,7 @@ static int load_xbc_from_initrd(int fd,
|
||||
if (stat.st_size < BOOTCONFIG_FOOTER_SIZE)
|
||||
return 0;
|
||||
|
||||
- if (lseek(fd, -BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
|
||||
+ if (lseek(fd, -(off_t)BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
|
||||
return pr_errno("Failed to lseek for magic", -errno);
|
||||
|
||||
if (read(fd, magic, BOOTCONFIG_MAGIC_LEN) < 0)
|
||||
@@ -203,7 +203,7 @@ static int load_xbc_from_initrd(int fd,
|
||||
if (memcmp(magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN) != 0)
|
||||
return 0;
|
||||
|
||||
- if (lseek(fd, -BOOTCONFIG_FOOTER_SIZE, SEEK_END) < 0)
|
||||
+ if (lseek(fd, -(off_t)BOOTCONFIG_FOOTER_SIZE, SEEK_END) < 0)
|
||||
return pr_errno("Failed to lseek for size", -errno);
|
||||
|
||||
if (read(fd, &size, sizeof(uint32_t)) < 0)
|
71
debian/patches/bugfix/all/bootconfig-fix-unaligned-access-when-building-footer.patch
vendored
Normal file
71
debian/patches/bugfix/all/bootconfig-fix-unaligned-access-when-building-footer.patch
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
From: Ben Hutchings <benh@debian.org>
|
||||
Date: Wed, 23 Jul 2025 12:17:14 +0200
|
||||
Subject: bootconfig: Fix unaligned access when building footer
|
||||
Forwarded: https://lore.kernel.org/linux-trace-kernel/aIC-NTw-cdm9ZGFw@decadent.org.uk/T/
|
||||
|
||||
Currently we add padding between the bootconfig text and footer to
|
||||
ensure that the footer is aligned within the initramfs image.
|
||||
However, because only the bootconfig data is held in memory, not the
|
||||
full initramfs image, the footer may not be naturally aligned in
|
||||
memory.
|
||||
|
||||
This can result in an alignment fault (SIGBUS) when writing the footer
|
||||
on some architectures, such as sparc.
|
||||
|
||||
Build the footer in a struct on the stack before adding it to the
|
||||
buffer.
|
||||
|
||||
References: https://buildd.debian.org/status/fetch.php?pkg=linux&arch=sparc64&ver=6.16%7Erc7-1%7Eexp1&stamp=1753209801&raw=0
|
||||
Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||
---
|
||||
tools/bootconfig/main.c | 24 +++++++++++++-----------
|
||||
1 file changed, 13 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/tools/bootconfig/main.c
|
||||
+++ b/tools/bootconfig/main.c
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <endian.h>
|
||||
+#include <assert.h>
|
||||
|
||||
#include <linux/bootconfig.h>
|
||||
|
||||
@@ -363,7 +364,12 @@ static int delete_xbc(const char *path)
|
||||
|
||||
static int apply_xbc(const char *path, const char *xbc_path)
|
||||
{
|
||||
- char *buf, *data, *p;
|
||||
+ struct {
|
||||
+ uint32_t size;
|
||||
+ uint32_t csum;
|
||||
+ char magic[BOOTCONFIG_MAGIC_LEN];
|
||||
+ } footer;
|
||||
+ char *buf, *data;
|
||||
size_t total_size;
|
||||
struct stat stat;
|
||||
const char *msg;
|
||||
@@ -433,17 +439,13 @@ static int apply_xbc(const char *path, c
|
||||
size += pad;
|
||||
|
||||
/* Add a footer */
|
||||
- p = data + size;
|
||||
- *(uint32_t *)p = htole32(size);
|
||||
- p += sizeof(uint32_t);
|
||||
+ footer.size = htole32(size);
|
||||
+ footer.csum = htole32(csum);
|
||||
+ memcpy(footer.magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
|
||||
+ static_assert(sizeof(footer) == BOOTCONFIG_FOOTER_SIZE);
|
||||
+ memcpy(data + size, &footer, BOOTCONFIG_FOOTER_SIZE);
|
||||
|
||||
- *(uint32_t *)p = htole32(csum);
|
||||
- p += sizeof(uint32_t);
|
||||
-
|
||||
- memcpy(p, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
|
||||
- p += BOOTCONFIG_MAGIC_LEN;
|
||||
-
|
||||
- total_size = p - data;
|
||||
+ total_size = size + BOOTCONFIG_FOOTER_SIZE;
|
||||
|
||||
ret = write(fd, data, total_size);
|
||||
if (ret < total_size) {
|
@@ -18,7 +18,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
--- a/fs/btrfs/super.c
|
||||
+++ b/fs/btrfs/super.c
|
||||
@@ -2630,7 +2630,7 @@ module_exit(exit_btrfs_fs)
|
||||
@@ -2625,7 +2625,7 @@ module_exit(exit_btrfs_fs)
|
||||
|
||||
MODULE_DESCRIPTION("B-Tree File System (BTRFS)");
|
||||
MODULE_LICENSE("GPL");
|
||||
@@ -29,7 +29,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
MODULE_SOFTDEP("pre: blake2b-256");
|
||||
--- a/fs/jbd2/journal.c
|
||||
+++ b/fs/jbd2/journal.c
|
||||
@@ -3158,6 +3158,7 @@ static void __exit journal_exit(void)
|
||||
@@ -3157,6 +3157,7 @@ static void __exit journal_exit(void)
|
||||
|
||||
MODULE_DESCRIPTION("Generic filesystem journal-writing module");
|
||||
MODULE_LICENSE("GPL");
|
||||
@@ -39,7 +39,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
--- a/fs/nfsd/nfsctl.c
|
||||
+++ b/fs/nfsd/nfsctl.c
|
||||
@@ -2349,5 +2349,8 @@ static void __exit exit_nfsd(void)
|
||||
@@ -2353,5 +2353,8 @@ static void __exit exit_nfsd(void)
|
||||
MODULE_AUTHOR("Olaf Kirch <okir@monad.swb.de>");
|
||||
MODULE_DESCRIPTION("In-kernel NFS server");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@@ -24,7 +24,7 @@ Signed-off-by: Ben Hutchings <benh@debian.org>
|
||||
pahole-flags-$(call test-ge, $(pahole-ver), 125) += --skip_encoding_btf_inconsistent_proto --btf_gen_optimized
|
||||
|
||||
else
|
||||
@@ -29,6 +27,18 @@ endif
|
||||
@@ -31,6 +29,18 @@ endif
|
||||
|
||||
endif
|
||||
|
||||
|
@@ -9,7 +9,7 @@ sources.
|
||||
|
||||
--- a/scripts/Makefile.build
|
||||
+++ b/scripts/Makefile.build
|
||||
@@ -184,6 +184,11 @@ cmd_record_mcount = $(if $(findstring $(
|
||||
@@ -268,6 +268,11 @@ cmd_record_mcount = $(if $(findstring $(
|
||||
$(sub_cmd_record_mcount))
|
||||
endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT
|
||||
|
||||
|
90
debian/patches/bugfix/all/tools-bootconfig-cleanup-bootconfig-footer-size-calc.patch
vendored
Normal file
90
debian/patches/bugfix/all/tools-bootconfig-cleanup-bootconfig-footer-size-calc.patch
vendored
Normal file
@@ -0,0 +1,90 @@
|
||||
From: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
|
||||
Date: Thu, 10 Jul 2025 11:24:17 +0900
|
||||
Subject: tools/bootconfig: Cleanup bootconfig footer size calculations
|
||||
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git/commit?id=26dda57695090e05c1a99c3e8f802f862d1ac474
|
||||
|
||||
There are many same pattern of 8 + BOOTCONFIG_MAGIC_LEN for calculating
|
||||
the size of bootconfig footer. Use BOOTCONFIG_FOOTER_SIZE macro to
|
||||
clean up those magic numbers.
|
||||
|
||||
Link: https://lore.kernel.org/all/175211425693.2591046.16029516706923643510.stgit@mhiramat.tok.corp.google.com/
|
||||
|
||||
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
|
||||
---
|
||||
tools/bootconfig/main.c | 19 +++++++++++--------
|
||||
1 file changed, 11 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/tools/bootconfig/main.c
|
||||
+++ b/tools/bootconfig/main.c
|
||||
@@ -16,6 +16,10 @@
|
||||
|
||||
#define pr_err(fmt, ...) fprintf(stderr, fmt, ##__VA_ARGS__)
|
||||
|
||||
+/* Bootconfig footer is [size][csum][BOOTCONFIG_MAGIC]. */
|
||||
+#define BOOTCONFIG_FOOTER_SIZE \
|
||||
+ (sizeof(uint32_t) * 2 + BOOTCONFIG_MAGIC_LEN)
|
||||
+
|
||||
static int xbc_show_value(struct xbc_node *node, bool semicolon)
|
||||
{
|
||||
const char *val, *eol;
|
||||
@@ -185,7 +189,7 @@ static int load_xbc_from_initrd(int fd,
|
||||
if (ret < 0)
|
||||
return -errno;
|
||||
|
||||
- if (stat.st_size < 8 + BOOTCONFIG_MAGIC_LEN)
|
||||
+ if (stat.st_size < BOOTCONFIG_FOOTER_SIZE)
|
||||
return 0;
|
||||
|
||||
if (lseek(fd, -BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
|
||||
@@ -198,7 +202,7 @@ static int load_xbc_from_initrd(int fd,
|
||||
if (memcmp(magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN) != 0)
|
||||
return 0;
|
||||
|
||||
- if (lseek(fd, -(8 + BOOTCONFIG_MAGIC_LEN), SEEK_END) < 0)
|
||||
+ if (lseek(fd, -BOOTCONFIG_FOOTER_SIZE, SEEK_END) < 0)
|
||||
return pr_errno("Failed to lseek for size", -errno);
|
||||
|
||||
if (read(fd, &size, sizeof(uint32_t)) < 0)
|
||||
@@ -210,12 +214,12 @@ static int load_xbc_from_initrd(int fd,
|
||||
csum = le32toh(csum);
|
||||
|
||||
/* Wrong size error */
|
||||
- if (stat.st_size < size + 8 + BOOTCONFIG_MAGIC_LEN) {
|
||||
+ if (stat.st_size < size + BOOTCONFIG_FOOTER_SIZE) {
|
||||
pr_err("bootconfig size is too big\n");
|
||||
return -E2BIG;
|
||||
}
|
||||
|
||||
- if (lseek(fd, stat.st_size - (size + 8 + BOOTCONFIG_MAGIC_LEN),
|
||||
+ if (lseek(fd, stat.st_size - (size + BOOTCONFIG_FOOTER_SIZE),
|
||||
SEEK_SET) < 0)
|
||||
return pr_errno("Failed to lseek", -errno);
|
||||
|
||||
@@ -346,7 +350,7 @@ static int delete_xbc(const char *path)
|
||||
ret = fstat(fd, &stat);
|
||||
if (!ret)
|
||||
ret = ftruncate(fd, stat.st_size
|
||||
- - size - 8 - BOOTCONFIG_MAGIC_LEN);
|
||||
+ - size - BOOTCONFIG_FOOTER_SIZE);
|
||||
if (ret)
|
||||
ret = -errno;
|
||||
} /* Ignore if there is no boot config in initrd */
|
||||
@@ -376,8 +380,7 @@ static int apply_xbc(const char *path, c
|
||||
csum = xbc_calc_checksum(buf, size);
|
||||
|
||||
/* Backup the bootconfig data */
|
||||
- data = calloc(size + BOOTCONFIG_ALIGN +
|
||||
- sizeof(uint32_t) + sizeof(uint32_t) + BOOTCONFIG_MAGIC_LEN, 1);
|
||||
+ data = calloc(size + BOOTCONFIG_ALIGN + BOOTCONFIG_FOOTER_SIZE, 1);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
memcpy(data, buf, size);
|
||||
@@ -425,7 +428,7 @@ static int apply_xbc(const char *path, c
|
||||
}
|
||||
|
||||
/* To align up the total size to BOOTCONFIG_ALIGN, get padding size */
|
||||
- total_size = stat.st_size + size + sizeof(uint32_t) * 2 + BOOTCONFIG_MAGIC_LEN;
|
||||
+ total_size = stat.st_size + size + BOOTCONFIG_FOOTER_SIZE;
|
||||
pad = ((total_size + BOOTCONFIG_ALIGN - 1) & (~BOOTCONFIG_ALIGN_MASK)) - total_size;
|
||||
size += pad;
|
||||
|
@@ -26,7 +26,7 @@ Tested-by: Michal Kubecek <mkubecek@suse.cz>
|
||||
|
||||
--- a/arch/powerpc/boot/Makefile
|
||||
+++ b/arch/powerpc/boot/Makefile
|
||||
@@ -97,7 +97,7 @@ BOOTCFLAGS += -fno-stack-protector
|
||||
@@ -98,7 +98,7 @@ BOOTCFLAGS += -fno-stack-protector
|
||||
endif
|
||||
|
||||
BOOTCFLAGS += -include $(srctree)/include/linux/compiler_attributes.h
|
||||
|
@@ -21,7 +21,7 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -119,6 +119,12 @@
|
||||
@@ -122,6 +122,12 @@
|
||||
|
||||
#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
|
||||
*/
|
||||
@@ -2194,6 +2200,10 @@ __latent_entropy struct task_struct *cop
|
||||
@@ -1933,6 +1939,10 @@ __latent_entropy struct task_struct *cop
|
||||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
||||
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
|
||||
* can only be started up within the thread group.
|
||||
@@ -3354,6 +3364,12 @@ int ksys_unshare(unsigned long unshare_f
|
||||
@@ -3099,6 +3109,12 @@ int ksys_unshare(unsigned long unshare_f
|
||||
if (unshare_flags & CLONE_NEWNS)
|
||||
unshare_flags |= CLONE_FS;
|
||||
|
||||
@@ -60,7 +60,7 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
goto bad_unshare_out;
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -84,6 +84,10 @@ EXPORT_SYMBOL_GPL(sysctl_long_vals);
|
||||
@@ -77,6 +77,10 @@ EXPORT_SYMBOL_GPL(sysctl_long_vals);
|
||||
static const int ngroups_max = NGROUPS_MAX;
|
||||
static const int cap_last_cap = CAP_LAST_CAP;
|
||||
|
||||
@@ -71,10 +71,10 @@ Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
#ifdef CONFIG_PROC_SYSCTL
|
||||
|
||||
/**
|
||||
@@ -1595,6 +1599,15 @@ static const struct ctl_table kern_table
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
@@ -1581,6 +1585,15 @@ int proc_do_static_key(const struct ctl_
|
||||
}
|
||||
|
||||
static const struct ctl_table kern_table[] = {
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+ {
|
||||
+ .procname = "unprivileged_userns_clone",
|
||||
|
@@ -22,7 +22,7 @@ implementation went from disk-io.c to super.c; forwarded the issue]
|
||||
|
||||
--- a/fs/btrfs/super.c
|
||||
+++ b/fs/btrfs/super.c
|
||||
@@ -769,6 +769,18 @@ static void set_device_specific_options(
|
||||
@@ -761,6 +761,18 @@ static void set_device_specific_options(
|
||||
btrfs_set_opt(fs_info->mount_opt, SSD);
|
||||
|
||||
/*
|
||||
|
@@ -10,7 +10,7 @@ Forwarded: not-needed
|
||||
|
||||
--- a/Documentation/Makefile
|
||||
+++ b/Documentation/Makefile
|
||||
@@ -118,7 +118,6 @@ $(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.
|
||||
@@ -119,7 +119,6 @@ $(YNL_RST_DIR)/%.rst: $(YNL_YAML_DIR)/%.
|
||||
htmldocs texinfodocs latexdocs epubdocs xmldocs: $(YNL_INDEX)
|
||||
|
||||
htmldocs:
|
||||
@@ -18,7 +18,7 @@ Forwarded: not-needed
|
||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,html,$(var),,$(var)))
|
||||
|
||||
# If Rust support is available and .config exists, add rustdoc generated contents.
|
||||
@@ -132,7 +131,6 @@ endif
|
||||
@@ -133,7 +132,6 @@ endif
|
||||
endif
|
||||
|
||||
texinfodocs:
|
||||
@@ -26,7 +26,7 @@ Forwarded: not-needed
|
||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,texinfo,$(var),texinfo,$(var)))
|
||||
|
||||
# Note: the 'info' Make target is generated by sphinx itself when
|
||||
@@ -144,7 +142,6 @@ linkcheckdocs:
|
||||
@@ -145,7 +143,6 @@ linkcheckdocs:
|
||||
@$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,linkcheck,$(var),,$(var)))
|
||||
|
||||
latexdocs:
|
||||
@@ -34,7 +34,7 @@ Forwarded: not-needed
|
||||
@+$(foreach var,$(SPHINXDIRS),$(call loop_cmd,sphinx,latex,$(var),latex,$(var)))
|
||||
|
||||
ifeq ($(HAVE_PDFLATEX),0)
|
||||
@@ -157,7 +154,6 @@ else # HAVE_PDFLATEX
|
||||
@@ -158,7 +155,6 @@ else # HAVE_PDFLATEX
|
||||
|
||||
pdfdocs: DENY_VF = XDG_CONFIG_HOME=$(FONTS_CONF_DENY_VF)
|
||||
pdfdocs: latexdocs
|
||||
@@ -42,7 +42,7 @@ Forwarded: not-needed
|
||||
$(foreach var,$(SPHINXDIRS), \
|
||||
$(MAKE) PDFLATEX="$(PDFLATEX)" LATEXOPTS="$(LATEXOPTS)" $(DENY_VF) -C $(BUILDDIR)/$(var)/latex || sh $(srctree)/scripts/check-variable-fonts.sh || exit; \
|
||||
mkdir -p $(BUILDDIR)/$(var)/pdf; \
|
||||
@@ -167,11 +163,9 @@ pdfdocs: latexdocs
|
||||
@@ -168,11 +164,9 @@ pdfdocs: latexdocs
|
||||
endif # HAVE_PDFLATEX
|
||||
|
||||
epubdocs:
|
||||
|
@@ -17,9 +17,10 @@ Export the currently un-exported symbols it depends on.
|
||||
kernel/sched/wait.c | 1 +
|
||||
kernel/task_work.c | 1 +
|
||||
mm/list_lru.c | 2 ++
|
||||
mm/memory.c | 2 ++
|
||||
mm/memory.c | 1 +
|
||||
mm/mmap_lock.c | 1 +
|
||||
security/security.c | 4 ++++
|
||||
9 files changed, 14 insertions(+)
|
||||
10 files changed, 14 insertions(+)
|
||||
|
||||
--- a/fs/file.c
|
||||
+++ b/fs/file.c
|
||||
@@ -101,22 +102,24 @@ Export the currently un-exported symbols it depends on.
|
||||
{
|
||||
--- a/mm/memory.c
|
||||
+++ b/mm/memory.c
|
||||
@@ -2020,6 +2020,7 @@ void zap_page_range_single(struct vm_are
|
||||
@@ -2050,6 +2050,7 @@ void zap_page_range_single(struct vm_are
|
||||
zap_page_range_single_batched(&tlb, vma, address, size, details);
|
||||
tlb_finish_mmu(&tlb);
|
||||
hugetlb_zap_end(vma, details);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(zap_page_range_single);
|
||||
|
||||
/**
|
||||
* zap_vma_ptes - remove ptes mapping the vma
|
||||
@@ -6567,6 +6568,7 @@ inval:
|
||||
--- a/mm/mmap_lock.c
|
||||
+++ b/mm/mmap_lock.c
|
||||
@@ -177,6 +177,7 @@ inval:
|
||||
count_vm_vma_lock_event(VMA_LOCK_ABORT);
|
||||
return NULL;
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(lock_vma_under_rcu);
|
||||
#endif /* CONFIG_PER_VMA_LOCK */
|
||||
|
||||
#ifndef __PAGETABLE_P4D_FOLDED
|
||||
#ifdef CONFIG_LOCK_MM_AND_FIND_VMA
|
||||
--- a/security/security.c
|
||||
+++ b/security/security.c
|
||||
@@ -996,6 +996,7 @@ int security_binder_set_context_mgr(cons
|
||||
|
@@ -12,7 +12,7 @@ actually used.
|
||||
---
|
||||
--- a/fs/notify/fanotify/fanotify_user.c
|
||||
+++ b/fs/notify/fanotify/fanotify_user.c
|
||||
@@ -1881,6 +1881,14 @@ static int do_fanotify_mark(int fanotify
|
||||
@@ -1878,6 +1878,14 @@ static int do_fanotify_mark(int fanotify
|
||||
umask = FANOTIFY_EVENT_FLAGS;
|
||||
}
|
||||
|
||||
|
@@ -37,7 +37,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
{
|
||||
--- a/net/rose/af_rose.c
|
||||
+++ b/net/rose/af_rose.c
|
||||
@@ -1638,7 +1638,7 @@ MODULE_PARM_DESC(rose_ndevs, "number of
|
||||
@@ -1639,7 +1639,7 @@ MODULE_PARM_DESC(rose_ndevs, "number of
|
||||
MODULE_AUTHOR("Jonathan Naylor G4KLX <g4klx@g4klx.demon.co.uk>");
|
||||
MODULE_DESCRIPTION("The amateur radio ROSE network layer protocol");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
2
debian/patches/debian/kernelvariables.patch
vendored
2
debian/patches/debian/kernelvariables.patch
vendored
@@ -56,7 +56,7 @@ use of $(ARCH) needs to be moved after this.
|
||||
KCONFIG_CONFIG ?= .config
|
||||
export KCONFIG_CONFIG
|
||||
|
||||
@@ -551,6 +521,35 @@ RUSTFLAGS_KERNEL =
|
||||
@@ -556,6 +526,35 @@ RUSTFLAGS_KERNEL =
|
||||
AFLAGS_KERNEL =
|
||||
LDFLAGS_vmlinux =
|
||||
|
||||
|
@@ -15,7 +15,7 @@ to the installed location.
|
||||
---
|
||||
--- a/tools/perf/builtin-report.c
|
||||
+++ b/tools/perf/builtin-report.c
|
||||
@@ -666,10 +666,12 @@ static int report__browse_hists(struct r
|
||||
@@ -669,10 +669,12 @@ static int report__browse_hists(struct r
|
||||
|
||||
path = system_path(TIPDIR);
|
||||
if (perf_tip(&help, path) || help == NULL) {
|
||||
@@ -30,7 +30,7 @@ to the installed location.
|
||||
free(path);
|
||||
--- a/tools/perf/tests/Build
|
||||
+++ b/tools/perf/tests/Build
|
||||
@@ -73,7 +73,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86
|
||||
@@ -74,7 +74,7 @@ ifeq ($(SRCARCH),$(filter $(SRCARCH),x86
|
||||
perf-test-$(CONFIG_DWARF_UNWIND) += dwarf-unwind.o
|
||||
endif
|
||||
|
||||
|
@@ -31,7 +31,7 @@ cc: linux-efi@vger.kernel.org
|
||||
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1127,19 +1127,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -1149,19 +1149,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
/* Allocate bigger log buffer */
|
||||
setup_log_buf(1);
|
||||
|
||||
|
@@ -26,7 +26,7 @@ Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
|
||||
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -964,6 +964,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -986,6 +986,8 @@ void __init setup_arch(char **cmdline_p)
|
||||
if (efi_enabled(EFI_BOOT))
|
||||
efi_init();
|
||||
|
||||
@@ -35,7 +35,7 @@ Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
|
||||
reserve_ibft_region();
|
||||
x86_init.resources.dmi_setup();
|
||||
|
||||
@@ -1127,8 +1129,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
@@ -1149,8 +1151,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
/* Allocate bigger log buffer */
|
||||
setup_log_buf(1);
|
||||
|
||||
@@ -67,7 +67,7 @@ Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
|
||||
default:
|
||||
--- a/include/linux/security.h
|
||||
+++ b/include/linux/security.h
|
||||
@@ -574,6 +574,7 @@ int security_inode_notifysecctx(struct i
|
||||
@@ -573,6 +573,7 @@ int security_inode_notifysecctx(struct i
|
||||
int security_inode_setsecctx(struct dentry *dentry, void *ctx, u32 ctxlen);
|
||||
int security_inode_getsecctx(struct inode *inode, struct lsm_context *cp);
|
||||
int security_locked_down(enum lockdown_reason what);
|
||||
@@ -75,7 +75,7 @@ Signed-off-by: Salvatore Bonaccorso <carnil@debian.org>
|
||||
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);
|
||||
@@ -1580,6 +1581,11 @@ static inline int security_locked_down(e
|
||||
@@ -1574,6 +1575,11 @@ static inline int security_locked_down(e
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
@@ -22,7 +22,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
--- a/include/linux/perf_event.h
|
||||
+++ b/include/linux/perf_event.h
|
||||
@@ -1684,6 +1684,11 @@ extern int sysctl_perf_event_sample_rate
|
||||
@@ -1761,6 +1761,11 @@ extern int sysctl_perf_event_sample_rate
|
||||
|
||||
extern void perf_sample_event_took(u64 sample_len_ns);
|
||||
|
||||
@@ -50,7 +50,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
/* Minimum for 512 kiB + 1 user control page. 'free' kiB per user. */
|
||||
static int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024);
|
||||
@@ -13164,6 +13169,9 @@ SYSCALL_DEFINE5(perf_event_open,
|
||||
@@ -13382,6 +13387,9 @@ SYSCALL_DEFINE5(perf_event_open,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
|
@@ -22,7 +22,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -2288,6 +2288,8 @@
|
||||
@@ -2306,6 +2306,8 @@
|
||||
bypassed by not enabling DMAR with this option. In
|
||||
this case, gfx device will use physical address for
|
||||
DMA.
|
||||
@@ -68,7 +68,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
} else if (!strncmp(str, "forcedac", 8)) {
|
||||
pr_warn("intel_iommu=forcedac deprecated; use iommu.forcedac instead\n");
|
||||
iommu_dma_forcedac = true;
|
||||
@@ -1949,6 +1957,9 @@ static int device_def_domain_type(struct
|
||||
@@ -1899,6 +1907,9 @@ static int device_def_domain_type(struct
|
||||
|
||||
if ((iommu_identity_mapping & IDENTMAP_AZALIA) && IS_AZALIA(pdev))
|
||||
return IOMMU_DOMAIN_IDENTITY;
|
||||
@@ -78,7 +78,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -2243,6 +2254,9 @@ static int __init init_dmars(void)
|
||||
@@ -2189,6 +2200,9 @@ static int __init init_dmars(void)
|
||||
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
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -7044,6 +7044,10 @@
|
||||
@@ -7117,6 +7117,10 @@
|
||||
later by a loaded module cannot be set this way.
|
||||
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
|
||||
--- a/arch/x86/Kconfig
|
||||
+++ b/arch/x86/Kconfig
|
||||
@@ -3178,6 +3178,14 @@ config COMPAT_32
|
||||
@@ -3150,6 +3150,14 @@ config COMPAT_32
|
||||
select HAVE_UID16
|
||||
select OLD_SIGSUSPEND3
|
||||
|
||||
@@ -69,7 +69,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
|
||||
typedef unsigned long elf_greg_t;
|
||||
|
||||
@@ -152,7 +155,8 @@ do { \
|
||||
@@ -148,7 +151,8 @@ do { \
|
||||
|
||||
#define compat_elf_check_arch(x) \
|
||||
((elf_check_arch_ia32(x) && ia32_enabled_verbose()) || \
|
||||
|
2
debian/patches/krd/0002-local-ports.patch
vendored
2
debian/patches/krd/0002-local-ports.patch
vendored
@@ -1,6 +1,6 @@
|
||||
--- a/net/ipv4/af_inet.c
|
||||
+++ b/net/ipv4/af_inet.c
|
||||
@@ -1790,7 +1790,7 @@ static __net_init int inet_init_net(stru
|
||||
@@ -1787,7 +1787,7 @@ static __net_init int inet_init_net(stru
|
||||
/*
|
||||
* Set defaults for local port range
|
||||
*/
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/net/bridge/br_input.c
|
||||
+++ b/net/bridge/br_input.c
|
||||
@@ -383,7 +383,11 @@ static rx_handler_result_t br_handle_fra
|
||||
@@ -384,7 +384,11 @@ static rx_handler_result_t br_handle_fra
|
||||
|
||||
case 0x01: /* IEEE MAC (Pause) */
|
||||
reason = SKB_DROP_REASON_MAC_IEEE_MAC_CONTROL;
|
||||
|
@@ -18,7 +18,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
||||
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2467,6 +2467,13 @@ static void sta_stats_decode_rate(struct
|
||||
@@ -2468,6 +2468,13 @@ static void sta_stats_decode_rate(struct
|
||||
|
||||
sband = local->hw.wiphy->bands[band];
|
||||
|
@@ -23,7 +23,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -4085,7 +4085,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4074,7 +4074,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
|
||||
if (deficit < 0)
|
||||
sta->airtime[txqi->txq.ac].deficit +=
|
||||
@@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (deficit < 0 || !aql_check) {
|
||||
list_move_tail(&txqi->schedule_order,
|
||||
@@ -4230,7 +4230,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4219,7 +4219,8 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
}
|
||||
sta = container_of(iter->txq.sta, struct sta_info, sta);
|
||||
if (ieee80211_sta_deficit(sta, ac) < 0)
|
||||
@@ -42,7 +42,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
list_move_tail(&iter->schedule_order, &local->active_txqs[ac]);
|
||||
}
|
||||
|
||||
@@ -4238,7 +4239,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4227,7 +4228,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
if (sta->airtime[ac].deficit >= 0)
|
||||
goto out;
|
||||
|
@@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -3464,6 +3464,7 @@ enum wiphy_params_flags {
|
||||
@@ -3434,6 +3434,7 @@ enum wiphy_params_flags {
|
||||
/* The per TXQ device queue limit in airtime */
|
||||
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_L 5000
|
||||
#define IEEE80211_DEFAULT_AQL_TXQ_LIMIT_H 12000
|
||||
@@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/net/mac80211/ieee80211_i.h
|
||||
+++ b/net/mac80211/ieee80211_i.h
|
||||
@@ -1377,10 +1377,12 @@ struct ieee80211_local {
|
||||
@@ -1392,10 +1392,12 @@ struct ieee80211_local {
|
||||
spinlock_t handle_wake_tx_queue_lock;
|
||||
|
||||
u16 airtime_flags;
|
||||
@@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_lock_init(&local->active_txq_lock[i]);
|
||||
--- a/net/mac80211/sta_info.c
|
||||
+++ b/net/mac80211/sta_info.c
|
||||
@@ -2381,13 +2381,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||
@@ -2382,13 +2382,28 @@ EXPORT_SYMBOL(ieee80211_sta_recalc_aggre
|
||||
|
||||
void ieee80211_sta_update_pending_airtime(struct ieee80211_local *local,
|
||||
struct sta_info *sta, u8 ac,
|
||||
@@ -127,7 +127,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
atomic_add(tx_airtime,
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -2556,7 +2556,7 @@ static u16 ieee80211_store_ack_skb(struc
|
||||
@@ -2546,7 +2546,7 @@ static u16 ieee80211_store_ack_skb(struc
|
||||
|
||||
spin_lock_irqsave(&local->ack_status_lock, flags);
|
||||
id = idr_alloc(&local->ack_status_frames, ack_skb,
|
||||
@@ -136,7 +136,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
spin_unlock_irqrestore(&local->ack_status_lock, flags);
|
||||
|
||||
if (id >= 0) {
|
||||
@@ -3986,20 +3986,20 @@ begin:
|
||||
@@ -3975,20 +3975,20 @@ begin:
|
||||
encap_out:
|
||||
info->control.vif = vif;
|
||||
|
||||
@@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
return skb;
|
||||
@@ -4051,6 +4051,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4040,6 +4040,7 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
struct ieee80211_txq *ret = NULL;
|
||||
struct txq_info *txqi = NULL, *head = NULL;
|
||||
bool found_eligible_txq = false;
|
||||
@@ -175,7 +175,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
@@ -4074,26 +4075,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
@@ -4063,26 +4064,26 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||
if (!head)
|
||||
head = txqi;
|
||||
|
||||
@@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (txqi->schedule_round == local->schedule_round[ac])
|
||||
goto out;
|
||||
|
||||
@@ -4160,7 +4161,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||
@@ -4149,7 +4150,8 @@ bool ieee80211_txq_airtime_check(struct
|
||||
return true;
|
||||
|
||||
if (!txq->sta)
|
||||
@@ -224,7 +224,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
if (unlikely(txq->tid == IEEE80211_NUM_TIDS))
|
||||
return true;
|
||||
@@ -4209,15 +4211,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
@@ -4198,15 +4200,15 @@ bool ieee80211_txq_may_transmit(struct i
|
||||
|
||||
spin_lock_bh(&local->active_txq_lock[ac]);
|
||||
|
||||
@@ -245,7 +245,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
if (iter == txqi)
|
||||
--- a/include/net/mac80211.h
|
||||
+++ b/include/net/mac80211.h
|
||||
@@ -1238,8 +1238,8 @@ struct ieee80211_tx_info {
|
||||
@@ -1245,8 +1245,8 @@ struct ieee80211_tx_info {
|
||||
status_data_idr:1,
|
||||
status_data:13,
|
||||
hw_queue:4,
|
@@ -1,6 +1,6 @@
|
||||
--- a/net/mac80211/tx.c
|
||||
+++ b/net/mac80211/tx.c
|
||||
@@ -1606,8 +1606,8 @@ int ieee80211_txq_setup_flows(struct iee
|
||||
@@ -1596,8 +1596,8 @@ int ieee80211_txq_setup_flows(struct iee
|
||||
fq->memory_limit = 4 << 20; /* 4 Mbytes */
|
||||
|
||||
codel_params_init(&local->cparams);
|
@@ -1,6 +1,6 @@
|
||||
--- a/include/net/cfg80211.h
|
||||
+++ b/include/net/cfg80211.h
|
||||
@@ -3462,12 +3462,12 @@ enum wiphy_params_flags {
|
||||
@@ -3432,12 +3432,12 @@ enum wiphy_params_flags {
|
||||
#define IEEE80211_DEFAULT_AIRTIME_WEIGHT 256
|
||||
|
||||
/* The per TXQ device queue limit in airtime */
|
@@ -1,10 +1,6 @@
|
||||
From 906ed24dfc7e1bbceacc087ba38aecfd22a9890b Mon Sep 17 00:00:00 2001
|
||||
From 6b1d270f55e3143bcb3ad914adf920774351a6b9 Mon Sep 17 00:00:00 2001
|
||||
From: graysky <therealgraysky AT proton DOT me>
|
||||
Date: Mon, 16 Sep 2024 14:47:03 -0400
|
||||
|
||||
FEATURES
|
||||
This patch adds additional tunings via new x86-64 ISA levels and
|
||||
more micro-architecture options to the Linux kernel in three classes.
|
||||
Date: Mon, 18 Aug 2025 04:14:48 -0400
|
||||
|
||||
1. New generic x86-64 ISA levels
|
||||
|
||||
@@ -103,7 +99,7 @@ See the following experimental evidence supporting this statement:
|
||||
https://github.com/graysky2/kernel_compiler_patch?tab=readme-ov-file#benchmarks
|
||||
|
||||
REQUIREMENTS
|
||||
linux version 6.1.79+
|
||||
linux version 6.16+
|
||||
gcc version >=9.0 or clang version >=9.0
|
||||
|
||||
ACKNOWLEDGMENTS
|
||||
@@ -116,9 +112,9 @@ REFERENCES
|
||||
4. http://www.linuxforge.net/docs/linux/linux-gcc.php
|
||||
|
||||
---
|
||||
arch/x86/Kconfig.cpu | 462 ++++++++++++++++++++++++++++++++++++++++++-
|
||||
arch/x86/Makefile | 222 +++++++++++++++++++++
|
||||
2 files changed, 675 insertions(+), 9 deletions(-)
|
||||
arch/x86/Kconfig.cpu | 427 ++++++++++++++++++++++++++++++++++++++++++-
|
||||
arch/x86/Makefile | 213 ++++++++++++++++++++-
|
||||
2 files changed, 631 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/arch/x86/Kconfig.cpu
|
||||
+++ b/arch/x86/Kconfig.cpu
|
||||
@@ -163,38 +159,15 @@ REFERENCES
|
||||
|
||||
config MK6
|
||||
bool "K6/K6-II/K6-III"
|
||||
@@ -245,6 +260,435 @@ config MATOM
|
||||
@@ -281,6 +296,402 @@ config X86_GENERIC
|
||||
This is really intended for distributors who need more
|
||||
generic optimizations.
|
||||
|
||||
endchoice
|
||||
|
||||
+config CC_HAS_MARCH_NATIVE
|
||||
+ # This flag might not be available in cross-compilers:
|
||||
+ def_bool $(cc-option, -march=native)
|
||||
+ # LLVM 18 has an easily triggered internal compiler error in core
|
||||
+ # networking code with '-march=native' on certain systems:
|
||||
+ # https://github.com/llvm/llvm-project/issues/72026
|
||||
+ # LLVM 19 introduces an optimization that resolves some high stack
|
||||
+ # usage warnings that only appear wth '-march=native'.
|
||||
+ depends on CC_IS_GCC || CLANG_VERSION >= 190100
|
||||
+
|
||||
+choice
|
||||
+ prompt "x86_64 Compiler Build Optimization"
|
||||
+ depends on !X86_NATIVE_CPU
|
||||
+ default GENERIC_CPU
|
||||
+
|
||||
+config X86_NATIVE_CPU
|
||||
+ bool "Build and optimize for local/native CPU"
|
||||
+ depends on X86_64
|
||||
+ depends on CC_HAS_MARCH_NATIVE
|
||||
+ help
|
||||
+ Optimize for the current CPU used to compile the kernel.
|
||||
+ Use this option if you intend to build the kernel for your
|
||||
+ local machine.
|
||||
+
|
||||
+ Note that such a kernel might not work optimally on a
|
||||
+ different x86 machine.
|
||||
+
|
||||
+ If unsure, say N.
|
||||
+
|
||||
+config GENERIC_CPU
|
||||
+ bool "Generic-x86-64"
|
||||
+ depends on X86_64
|
||||
@@ -202,26 +175,6 @@ REFERENCES
|
||||
+ Generic x86-64 CPU.
|
||||
+ Runs equally well on all x86-64 CPUs.
|
||||
+
|
||||
+config MNATIVE_INTEL
|
||||
+ bool "Intel-Native optimizations autodetected by the compiler"
|
||||
+ help
|
||||
+
|
||||
+ Clang 3.8, GCC 4.2 and above support -march=native, which automatically detects
|
||||
+ the optimum settings to use based on your processor. Do NOT use this
|
||||
+ for AMD CPUs. Intel Only!
|
||||
+
|
||||
+ Enables -march=native
|
||||
+
|
||||
+config MNATIVE_AMD
|
||||
+ bool "AMD-Native optimizations autodetected by the compiler"
|
||||
+ help
|
||||
+
|
||||
+ Clang 3.8, GCC 4.2 and above support -march=native, which automatically detects
|
||||
+ the optimum settings to use based on your processor. Do NOT use this
|
||||
+ for Intel CPUs. AMD Only!
|
||||
+
|
||||
+ Enables -march=native
|
||||
+
|
||||
+config MK8
|
||||
+ bool "AMD Opteron/Athlon64/Hammer/K8"
|
||||
+ help
|
||||
@@ -445,20 +398,20 @@ REFERENCES
|
||||
+ Enables -march=skylake
|
||||
+
|
||||
+config MSKYLAKEX
|
||||
+ bool "Intel Skylake X"
|
||||
+ bool "Intel Skylake-X (7th Gen Core i7/i9)"
|
||||
+ depends on X86_64
|
||||
+ help
|
||||
+
|
||||
+ Select this for 6th Gen Core processors in the Skylake X family.
|
||||
+ Select this for 7th Gen Core i7/i9 processors in the Skylake-X family.
|
||||
+
|
||||
+ Enables -march=skylake-avx512
|
||||
+
|
||||
+config MCANNONLAKE
|
||||
+ bool "Intel Cannon Lake"
|
||||
+ bool "Intel Coffee Lake/Kaby Lake Refresh (8th Gen Core i3/i5/i7)"
|
||||
+ depends on X86_64
|
||||
+ help
|
||||
+
|
||||
+ Select this for 8th Gen Core processors
|
||||
+ Select this for 8th Gen Core i3/i5/i7 processors in the Coffee Lake or Kaby Lake Refresh families.
|
||||
+
|
||||
+ Enables -march=cannonlake
|
||||
+
|
||||
@@ -472,11 +425,11 @@ REFERENCES
|
||||
+ Enables -march=icelake-client
|
||||
+
|
||||
+config MICELAKE_SERVER
|
||||
+ bool "Intel Ice Lake Server"
|
||||
+ bool "Intel Ice Lake-SP (3rd Gen Xeon Scalable)"
|
||||
+ depends on X86_64
|
||||
+ help
|
||||
+
|
||||
+ Select this for 10th Gen Core server processors in the Ice Lake family.
|
||||
+ Select this for 3rd Gen Xeon Scalable processors in the Ice Lake-SP family.
|
||||
+
|
||||
+ Enables -march=icelake-server
|
||||
+
|
||||
@@ -566,10 +519,20 @@ REFERENCES
|
||||
+ depends on (CC_IS_GCC && GCC_VERSION > 130000) || (CC_IS_CLANG && CLANG_VERSION >= 150500)
|
||||
+ help
|
||||
+
|
||||
+ Select this for fifth-generation 10 nm process processors in the Emerald Rapids family.
|
||||
+ Select this for fifth-generation Xeon Scalable processors in the Emerald Rapids family.
|
||||
+
|
||||
+ Enables -march=emeraldrapids
|
||||
+
|
||||
+config MDIAMONDRAPIDS
|
||||
+ bool "Intel Diamond Rapids (7th Gen Xeon Scalable)"
|
||||
+ depends on X86_64
|
||||
+ depends on (CC_IS_GCC && GCC_VERSION > 150000) || (CC_IS_CLANG && CLANG_VERSION >= 200000)
|
||||
+ help
|
||||
+
|
||||
+ Select this for seventh-generation Xeon Scalable processors in the Diamond Rapids family.
|
||||
+
|
||||
+ Enables -march=diamondrapids
|
||||
+
|
||||
+endchoice
|
||||
+
|
||||
+config X86_64_VERSION
|
||||
@@ -596,31 +559,31 @@ REFERENCES
|
||||
+ /lib/ld-linux-x86-64.so.2 --help | grep supported
|
||||
+ /lib64/ld-linux-x86-64.so.2 --help | grep supported
|
||||
+
|
||||
config X86_GENERIC
|
||||
bool "Generic x86 support"
|
||||
depends on X86_32
|
||||
@@ -266,8 +710,8 @@ config X86_INTERNODE_CACHE_SHIFT
|
||||
#
|
||||
# Define implied options from the CPU selection here
|
||||
config X86_INTERNODE_CACHE_SHIFT
|
||||
@@ -290,8 +701,8 @@ config X86_INTERNODE_CACHE_SHIFT
|
||||
|
||||
config X86_L1_CACHE_SHIFT
|
||||
int
|
||||
- default "7" if MPENTIUM4
|
||||
- default "6" if MK7 || MPENTIUMM || MATOM || MVIAC7 || X86_GENERIC || X86_64
|
||||
+ default "7" if MPENTIUM4 || MPSC
|
||||
+ default "6" if MK7 || MK8 || MPENTIUMM || MCORE2 || MATOM || MVIAC7 || X86_GENERIC || GENERIC_CPU || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || 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 || MDIAMONDRAPIDS || X86_NATIVE_CPU
|
||||
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
|
||||
|
||||
@@ -285,19 +729,19 @@ config X86_ALIGNMENT_16
|
||||
@@ -309,19 +720,19 @@ config X86_ALIGNMENT_16
|
||||
|
||||
config X86_INTEL_USERCOPY
|
||||
def_bool y
|
||||
- depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK7 || MEFFICEON
|
||||
+ depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MNATIVE_INTEL
|
||||
+ depends on MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M586MMX || X86_GENERIC || MK8 || MK7 || MEFFICEON || MCORE2 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS
|
||||
|
||||
config X86_USE_PPRO_CHECKSUM
|
||||
def_bool y
|
||||
- depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MATOM
|
||||
+ depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MNATIVE_INTEL || MNATIVE_AMD
|
||||
+ depends on MWINCHIP3D || MWINCHIPC6 || MCYRIXIII || MK7 || MK6 || MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MK8 || MVIAC3_2 || MVIAC7 || MEFFICEON || MGEODE_LX || MCORE2 || MATOM || MK8SSE3 || MK10 || MBARCELONA || MBOBCAT || MJAGUAR || MBULLDOZER || MPILEDRIVER || MSTEAMROLLER || MEXCAVATOR || MZEN || MZEN2 || MZEN3 || MZEN4 || MZEN5 || MNEHALEM || MWESTMERE || MSILVERMONT || MGOLDMONT || MGOLDMONTPLUS || MSANDYBRIDGE || MIVYBRIDGE || MHASWELL || MBROADWELL || MSKYLAKE || MSKYLAKEX || MCANNONLAKE || MICELAKE_CLIENT || MICELAKE_SERVER || MCASCADELAKE || MCOOPERLAKE || MTIGERLAKE || MSAPPHIRERAPIDS || MROCKETLAKE || MALDERLAKE || MRAPTORLAKE || MMETEORLAKE || MEMERALDRAPIDS || MDIAMONDRAPIDS
|
||||
|
||||
config X86_TSC
|
||||
def_bool y
|
||||
@@ -634,7 +597,7 @@ REFERENCES
|
||||
|
||||
config X86_CX8
|
||||
def_bool y
|
||||
@@ -307,13 +751,13 @@ config X86_CX8
|
||||
@@ -331,12 +742,12 @@ config X86_CX8
|
||||
# generates cmov.
|
||||
config X86_CMOV
|
||||
def_bool y
|
||||
@@ -645,33 +608,16 @@ REFERENCES
|
||||
int
|
||||
default "64" if X86_64
|
||||
- default "6" if X86_32 && (MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MATOM || MK7)
|
||||
- default "5" if X86_32 && X86_CX8
|
||||
+ default "6" if X86_32 && (MPENTIUM4 || MPENTIUMM || MPENTIUMIII || MPENTIUMII || M686 || MVIAC3_2 || MVIAC7 || MEFFICEON || MATOM || MCORE2 || MK7 || MK8)
|
||||
+ default "5" if X86_32 && X86_CMPXCHG64
|
||||
default "5" if X86_32 && X86_CX8
|
||||
default "4"
|
||||
|
||||
config X86_DEBUGCTLMSR
|
||||
--- a/arch/x86/Makefile
|
||||
+++ b/arch/x86/Makefile
|
||||
@@ -173,8 +173,230 @@ else
|
||||
# Use -mskip-rax-setup if supported.
|
||||
KBUILD_CFLAGS += $(call cc-option,-mskip-rax-setup)
|
||||
|
||||
+ifdef CONFIG_X86_NATIVE_CPU
|
||||
+ KBUILD_CFLAGS += -march=native
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=native
|
||||
+endif
|
||||
+
|
||||
+ifdef CONFIG_MNATIVE_INTEL
|
||||
+ KBUILD_CFLAGS += -march=native
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=native
|
||||
+endif
|
||||
+
|
||||
+ifdef CONFIG_MNATIVE_AMD
|
||||
+ KBUILD_CFLAGS += -march=native
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=native
|
||||
+endif
|
||||
+
|
||||
@@ -177,10 +177,221 @@ ifdef CONFIG_X86_NATIVE_CPU
|
||||
KBUILD_CFLAGS += -march=native
|
||||
KBUILD_RUSTFLAGS += -Ctarget-cpu=native
|
||||
else
|
||||
+ifdef CONFIG_MK8
|
||||
+ KBUILD_CFLAGS += -march=k8
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=k8
|
||||
@@ -872,6 +818,11 @@ REFERENCES
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=emeraldrapids
|
||||
+endif
|
||||
+
|
||||
+ifdef CONFIG_MDIAMONDRAPIDS
|
||||
+ KBUILD_CFLAGS += -march=diamondrapids
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=diamondrapids
|
||||
+endif
|
||||
+
|
||||
+ifdef CONFIG_GENERIC_CPU
|
||||
+ifeq ($(CONFIG_X86_64_VERSION),1)
|
||||
KBUILD_CFLAGS += -march=x86-64 -mtune=generic
|
||||
@@ -879,8 +830,10 @@ REFERENCES
|
||||
+else
|
||||
+ KBUILD_CFLAGS +=-march=x86-64-v$(CONFIG_X86_64_VERSION)
|
||||
+ KBUILD_RUSTFLAGS += -Ctarget-cpu=x86-64-v$(CONFIG_X86_64_VERSION)
|
||||
+endif # CONFIG_X86_64_VERSION
|
||||
+endif # CONFIG_GENERIC_CPU
|
||||
|
||||
+endif
|
||||
+endif
|
||||
endif
|
||||
-
|
||||
KBUILD_CFLAGS += -mno-red-zone
|
||||
KBUILD_CFLAGS += -mcmodel=kernel
|
||||
KBUILD_RUSTFLAGS += -Cno-redzone=y
|
||||
|
@@ -13,7 +13,7 @@ dependency on CONFIG_ARC and adds RUSTFLAGS.
|
||||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -868,6 +868,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
|
||||
@@ -873,6 +873,9 @@ KBUILD_CFLAGS += -fno-delete-null-pointe
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
KBUILD_CFLAGS += -O2
|
||||
KBUILD_RUSTFLAGS += -Copt-level=2
|
||||
@@ -25,7 +25,7 @@ dependency on CONFIG_ARC and adds RUSTFLAGS.
|
||||
KBUILD_RUSTFLAGS += -Copt-level=s
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1479,6 +1479,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
@@ -1498,6 +1498,12 @@ config CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
with the "-O2" compiler flag for best performance and most
|
||||
helpful compile-time warnings.
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -876,6 +876,10 @@ KBUILD_CFLAGS += -Os
|
||||
@@ -881,6 +881,10 @@ KBUILD_CFLAGS += -Os
|
||||
KBUILD_RUSTFLAGS += -Copt-level=s
|
||||
endif
|
||||
|
||||
|
@@ -11,7 +11,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -880,6 +880,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
@@ -885,6 +885,13 @@ ifdef CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE
|
||||
KBUILD_CFLAGS += $(call cc-option,-fivopts)
|
||||
endif
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 1cb9f09cead0ba384729bfdc74d6fa21d586530c Mon Sep 17 00:00:00 2001
|
||||
From 2f7f5a0cd283219e09f8b05b7bfef26b518685ee Mon Sep 17 00:00:00 2001
|
||||
From: Christian Loehle <christian.loehle@arm.com>
|
||||
Date: Thu, 5 Sep 2024 10:26:39 +0100
|
||||
Subject: cpuidle: Prefer teo over menu governor
|
||||
@@ -36,7 +36,7 @@ Signed-off-by: Christian Loehle <christian.loehle@arm.com>
|
||||
depends on KVM_GUEST
|
||||
--- a/drivers/cpuidle/governors/menu.c
|
||||
+++ b/drivers/cpuidle/governors/menu.c
|
||||
@@ -526,7 +526,7 @@ static int menu_enable_device(struct cpu
|
||||
@@ -521,7 +521,7 @@ static int menu_enable_device(struct cpu
|
||||
|
||||
static struct cpuidle_governor menu_governor = {
|
||||
.name = "menu",
|
||||
|
@@ -1,29 +0,0 @@
|
||||
From b3dc27f64b5d62505ae9f03a6c342a43b0b7e0b2 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Axboe <axboe@kernel.dk>
|
||||
Date: Tue, 27 May 2025 07:28:54 -0600
|
||||
Subject: Revert "Disable FOP_DONTCACHE for now due to bugs"
|
||||
|
||||
This reverts commit 478ad02d6844217cc7568619aeb0809d93ade43d.
|
||||
|
||||
Both the read and write side dirty && writeback races should be resolved
|
||||
now, revert the commit that disabled FOP_DONTCACHE for filesystems.
|
||||
|
||||
Link: https://lore.kernel.org/linux-fsdevel/20250525083209.GS2023217@ZenIV/
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
Link: https://lore.kernel.org/20250527133255.452431-4-axboe@kernel.dk
|
||||
Signed-off-by: Christian Brauner <brauner@kernel.org>
|
||||
---
|
||||
include/linux/fs.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -2186,7 +2186,7 @@ struct file_operations {
|
||||
/* Supports asynchronous lock callbacks */
|
||||
#define FOP_ASYNC_LOCK ((__force fop_flags_t)(1 << 6))
|
||||
/* File system supports uncached read/write buffered IO */
|
||||
-#define FOP_DONTCACHE 0 /* ((__force fop_flags_t)(1 << 7)) */
|
||||
+#define FOP_DONTCACHE ((__force fop_flags_t)(1 << 7))
|
||||
|
||||
/* Wrap a directory iterator that needs exclusive inode access */
|
||||
int wrap_directory_iterator(struct file *, struct dir_context *,
|
@@ -1,36 +0,0 @@
|
||||
From 0b8d9b7ae677a03629218f69037be3f342c5ee81 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Axboe <axboe@kernel.dk>
|
||||
Date: Tue, 27 May 2025 07:28:55 -0600
|
||||
Subject: mm/filemap: unify read/write dropbehind naming
|
||||
|
||||
The read side is filemap_end_dropbehind_read(), while the write side
|
||||
used folio_ as the prefix rather than filemap_. The read side makes more
|
||||
sense, unify the naming such that the write side follows that.
|
||||
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
Link: https://lore.kernel.org/20250527133255.452431-5-axboe@kernel.dk
|
||||
Signed-off-by: Christian Brauner <brauner@kernel.org>
|
||||
---
|
||||
mm/filemap.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/mm/filemap.c
|
||||
+++ b/mm/filemap.c
|
||||
@@ -1604,7 +1604,7 @@ static void filemap_end_dropbehind(struc
|
||||
* completes. Do that now. If we fail, it's likely because of a big folio -
|
||||
* just reset dropbehind for that case and latter completions should invalidate.
|
||||
*/
|
||||
-static void folio_end_dropbehind_write(struct folio *folio)
|
||||
+static void filemap_end_dropbehind_write(struct folio *folio)
|
||||
{
|
||||
/*
|
||||
* Hitting !in_task() should not happen off RWF_DONTCACHE writeback,
|
||||
@@ -1659,7 +1659,7 @@ void folio_end_writeback(struct folio *f
|
||||
acct_reclaim_writeback(folio);
|
||||
|
||||
if (folio_dropbehind)
|
||||
- folio_end_dropbehind_write(folio);
|
||||
+ filemap_end_dropbehind_write(folio);
|
||||
folio_put(folio);
|
||||
}
|
||||
EXPORT_SYMBOL(folio_end_writeback);
|
@@ -1,78 +0,0 @@
|
||||
From 2c1c3b3aafb153cbc3bd298db57cc7313d1601b1 Mon Sep 17 00:00:00 2001
|
||||
From: Jens Axboe <axboe@kernel.dk>
|
||||
Date: Tue, 27 May 2025 07:28:56 -0600
|
||||
Subject: mm/filemap: unify dropbehind flag testing and clearing
|
||||
|
||||
The read and write side does this a bit differently, unify it such that
|
||||
the _{read,write} helpers check the bit before locking, and the generic
|
||||
handler is in charge of clearing the bit and invalidating, once under
|
||||
the folio lock.
|
||||
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
Link: https://lore.kernel.org/20250527133255.452431-6-axboe@kernel.dk
|
||||
Signed-off-by: Christian Brauner <brauner@kernel.org>
|
||||
---
|
||||
mm/filemap.c | 21 +++++++++++----------
|
||||
1 file changed, 11 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/mm/filemap.c
|
||||
+++ b/mm/filemap.c
|
||||
@@ -1595,7 +1595,11 @@ static void filemap_end_dropbehind(struc
|
||||
|
||||
VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
|
||||
|
||||
- if (mapping && !folio_test_writeback(folio) && !folio_test_dirty(folio))
|
||||
+ if (folio_test_writeback(folio) || folio_test_dirty(folio))
|
||||
+ return;
|
||||
+ if (!folio_test_clear_dropbehind(folio))
|
||||
+ return;
|
||||
+ if (mapping)
|
||||
folio_unmap_invalidate(mapping, folio, 0);
|
||||
}
|
||||
|
||||
@@ -1606,6 +1610,9 @@ static void filemap_end_dropbehind(struc
|
||||
*/
|
||||
static void filemap_end_dropbehind_write(struct folio *folio)
|
||||
{
|
||||
+ if (!folio_test_dropbehind(folio))
|
||||
+ return;
|
||||
+
|
||||
/*
|
||||
* Hitting !in_task() should not happen off RWF_DONTCACHE writeback,
|
||||
* but can happen if normal writeback just happens to find dirty folios
|
||||
@@ -1629,8 +1636,6 @@ static void filemap_end_dropbehind_write
|
||||
*/
|
||||
void folio_end_writeback(struct folio *folio)
|
||||
{
|
||||
- bool folio_dropbehind = false;
|
||||
-
|
||||
VM_BUG_ON_FOLIO(!folio_test_writeback(folio), folio);
|
||||
|
||||
/*
|
||||
@@ -1652,14 +1657,11 @@ void folio_end_writeback(struct folio *f
|
||||
* reused before the folio_wake_bit().
|
||||
*/
|
||||
folio_get(folio);
|
||||
- if (!folio_test_dirty(folio))
|
||||
- folio_dropbehind = folio_test_clear_dropbehind(folio);
|
||||
if (__folio_end_writeback(folio))
|
||||
folio_wake_bit(folio, PG_writeback);
|
||||
- acct_reclaim_writeback(folio);
|
||||
|
||||
- if (folio_dropbehind)
|
||||
- filemap_end_dropbehind_write(folio);
|
||||
+ filemap_end_dropbehind_write(folio);
|
||||
+ acct_reclaim_writeback(folio);
|
||||
folio_put(folio);
|
||||
}
|
||||
EXPORT_SYMBOL(folio_end_writeback);
|
||||
@@ -2651,8 +2653,7 @@ static void filemap_end_dropbehind_read(
|
||||
if (folio_test_writeback(folio) || folio_test_dirty(folio))
|
||||
return;
|
||||
if (folio_trylock(folio)) {
|
||||
- if (folio_test_clear_dropbehind(folio))
|
||||
- filemap_end_dropbehind(folio);
|
||||
+ filemap_end_dropbehind(folio);
|
||||
folio_unlock(folio);
|
||||
}
|
||||
}
|
@@ -1,98 +0,0 @@
|
||||
From 61d27e9dadb2eb2b7596a11a37402452d97625f7 Mon Sep 17 00:00:00 2001
|
||||
From: Shivank Garg <shivankg@amd.com>
|
||||
Date: Mon, 26 May 2025 18:28:18 +0000
|
||||
Subject: mm/khugepaged: fix race with folio split/free using temporary
|
||||
reference
|
||||
|
||||
hpage_collapse_scan_file() calls is_refcount_suitable(), which in turn
|
||||
calls folio_mapcount(). folio_mapcount() checks folio_test_large() before
|
||||
proceeding to folio_large_mapcount(), but there is a race window where the
|
||||
folio may get split/freed between these checks, triggering:
|
||||
|
||||
VM_WARN_ON_FOLIO(!folio_test_large(folio), folio)
|
||||
|
||||
Take a temporary reference to the folio in hpage_collapse_scan_file().
|
||||
This stabilizes the folio during refcount check and prevents incorrect
|
||||
large folio detection due to concurrent split/free. Use helper
|
||||
folio_expected_ref_count() + 1 to compare with folio_ref_count() instead
|
||||
of using is_refcount_suitable().
|
||||
|
||||
Link: https://lkml.kernel.org/r/20250526182818.37978-1-shivankg@amd.com
|
||||
Fixes: 05c5323b2a34 ("mm: track mapcount of large folios in single value")
|
||||
Signed-off-by: Shivank Garg <shivankg@amd.com>
|
||||
Reported-by: syzbot+2b99589e33edbe9475ca@syzkaller.appspotmail.com
|
||||
Closes: https://lore.kernel.org/all/6828470d.a70a0220.38f255.000c.GAE@google.com
|
||||
Suggested-by: David Hildenbrand <david@redhat.com>
|
||||
Acked-by: David Hildenbrand <david@redhat.com>
|
||||
Acked-by: Dev Jain <dev.jain@arm.com>
|
||||
Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>
|
||||
Cc: Bharata B Rao <bharata@amd.com>
|
||||
Cc: Fengwei Yin <fengwei.yin@intel.com>
|
||||
Cc: Liam Howlett <liam.howlett@oracle.com>
|
||||
Cc: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
Cc: Mariano Pache <npache@redhat.com>
|
||||
Cc: Ryan Roberts <ryan.roberts@arm.com>
|
||||
Cc: Zi Yan <ziy@nvidia.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
mm/khugepaged.c | 18 +++++++++++++++++-
|
||||
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/mm/khugepaged.c
|
||||
+++ b/mm/khugepaged.c
|
||||
@@ -2295,6 +2295,17 @@ static int hpage_collapse_scan_file(stru
|
||||
continue;
|
||||
}
|
||||
|
||||
+ if (!folio_try_get(folio)) {
|
||||
+ xas_reset(&xas);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (unlikely(folio != xas_reload(&xas))) {
|
||||
+ folio_put(folio);
|
||||
+ xas_reset(&xas);
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
if (folio_order(folio) == HPAGE_PMD_ORDER &&
|
||||
folio->index == start) {
|
||||
/* Maybe PMD-mapped */
|
||||
@@ -2305,23 +2316,27 @@ static int hpage_collapse_scan_file(stru
|
||||
* it's safe to skip LRU and refcount checks before
|
||||
* returning.
|
||||
*/
|
||||
+ folio_put(folio);
|
||||
break;
|
||||
}
|
||||
|
||||
node = folio_nid(folio);
|
||||
if (hpage_collapse_scan_abort(node, cc)) {
|
||||
result = SCAN_SCAN_ABORT;
|
||||
+ folio_put(folio);
|
||||
break;
|
||||
}
|
||||
cc->node_load[node]++;
|
||||
|
||||
if (!folio_test_lru(folio)) {
|
||||
result = SCAN_PAGE_LRU;
|
||||
+ folio_put(folio);
|
||||
break;
|
||||
}
|
||||
|
||||
- if (!is_refcount_suitable(folio)) {
|
||||
+ if (folio_expected_ref_count(folio) + 1 != folio_ref_count(folio)) {
|
||||
result = SCAN_PAGE_COUNT;
|
||||
+ folio_put(folio);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2333,6 +2348,7 @@ static int hpage_collapse_scan_file(stru
|
||||
*/
|
||||
|
||||
present += folio_nr_pages(folio);
|
||||
+ folio_put(folio);
|
||||
|
||||
if (need_resched()) {
|
||||
xas_pause(&xas);
|
@@ -1,198 +0,0 @@
|
||||
From 8135974e9e512fdf6d15f59947f95e44f2834c37 Mon Sep 17 00:00:00 2001
|
||||
From: Shivank Garg <shivankg@amd.com>
|
||||
Date: Wed, 30 Apr 2025 10:01:51 +0000
|
||||
Subject: mm: add folio_expected_ref_count() for reference count calculation
|
||||
|
||||
Patch series " JFS: Implement migrate_folio for jfs_metapage_aops" v5.
|
||||
|
||||
This patchset addresses a warning that occurs during memory compaction due
|
||||
to JFS's missing migrate_folio operation. The warning was introduced by
|
||||
commit 7ee3647243e5 ("migrate: Remove call to ->writepage") which added
|
||||
explicit warnings when filesystem don't implement migrate_folio.
|
||||
|
||||
The syzbot reported following [1]:
|
||||
jfs_metapage_aops does not implement migrate_folio
|
||||
WARNING: CPU: 1 PID: 5861 at mm/migrate.c:955 fallback_migrate_folio mm/migrate.c:953 [inline]
|
||||
WARNING: CPU: 1 PID: 5861 at mm/migrate.c:955 move_to_new_folio+0x70e/0x840 mm/migrate.c:1007
|
||||
Modules linked in:
|
||||
CPU: 1 UID: 0 PID: 5861 Comm: syz-executor280 Not tainted 6.15.0-rc1-next-20250411-syzkaller #0 PREEMPT(full)
|
||||
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 02/12/2025
|
||||
RIP: 0010:fallback_migrate_folio mm/migrate.c:953 [inline]
|
||||
RIP: 0010:move_to_new_folio+0x70e/0x840 mm/migrate.c:1007
|
||||
|
||||
To fix this issue, this series implement metapage_migrate_folio() for JFS
|
||||
which handles both single and multiple metapages per page configurations.
|
||||
|
||||
While most filesystems leverage existing migration implementations like
|
||||
filemap_migrate_folio(), buffer_migrate_folio_norefs() or
|
||||
buffer_migrate_folio() (which internally used folio_expected_refs()),
|
||||
JFS's metapage architecture requires special handling of its private data
|
||||
during migration. To support this, this series introduce the
|
||||
folio_expected_ref_count(), which calculates external references to a
|
||||
folio from page/swap cache, private data, and page table mappings.
|
||||
|
||||
This standardized implementation replaces the previous ad-hoc
|
||||
folio_expected_refs() function and enables JFS to accurately determine
|
||||
whether a folio has unexpected references before attempting migration.
|
||||
|
||||
|
||||
|
||||
|
||||
Implement folio_expected_ref_count() to calculate expected folio reference
|
||||
counts from:
|
||||
- Page/swap cache (1 per page)
|
||||
- Private data (1)
|
||||
- Page table mappings (1 per map)
|
||||
|
||||
While originally needed for page migration operations, this improved
|
||||
implementation standardizes reference counting by consolidating all
|
||||
refcount contributors into a single, reusable function that can benefit
|
||||
any subsystem needing to detect unexpected references to folios.
|
||||
|
||||
The folio_expected_ref_count() returns the sum of these external
|
||||
references without including any reference the caller itself might hold.
|
||||
Callers comparing against the actual folio_ref_count() must account for
|
||||
their own references separately.
|
||||
|
||||
Link: https://syzkaller.appspot.com/bug?extid=8bb6fd945af4e0ad9299 [1]
|
||||
Link: https://lkml.kernel.org/r/20250430100150.279751-1-shivankg@amd.com
|
||||
Link: https://lkml.kernel.org/r/20250430100150.279751-2-shivankg@amd.com
|
||||
Signed-off-by: David Hildenbrand <david@redhat.com>
|
||||
Signed-off-by: Shivank Garg <shivankg@amd.com>
|
||||
Suggested-by: Matthew Wilcox <willy@infradead.org>
|
||||
Co-developed-by: David Hildenbrand <david@redhat.com>
|
||||
Cc: Alistair Popple <apopple@nvidia.com>
|
||||
Cc: Dave Kleikamp <shaggy@kernel.org>
|
||||
Cc: Donet Tom <donettom@linux.ibm.com>
|
||||
Cc: Jane Chu <jane.chu@oracle.com>
|
||||
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
|
||||
Cc: Zi Yan <ziy@nvidia.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
include/linux/mm.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
mm/migrate.c | 22 ++++---------------
|
||||
2 files changed, 59 insertions(+), 18 deletions(-)
|
||||
|
||||
--- a/include/linux/mm.h
|
||||
+++ b/include/linux/mm.h
|
||||
@@ -2337,6 +2337,61 @@ static inline bool folio_maybe_mapped_sh
|
||||
return folio_test_large_maybe_mapped_shared(folio);
|
||||
}
|
||||
|
||||
+/**
|
||||
+ * folio_expected_ref_count - calculate the expected folio refcount
|
||||
+ * @folio: the folio
|
||||
+ *
|
||||
+ * Calculate the expected folio refcount, taking references from the pagecache,
|
||||
+ * swapcache, PG_private and page table mappings into account. Useful in
|
||||
+ * combination with folio_ref_count() to detect unexpected references (e.g.,
|
||||
+ * GUP or other temporary references).
|
||||
+ *
|
||||
+ * Does currently not consider references from the LRU cache. If the folio
|
||||
+ * was isolated from the LRU (which is the case during migration or split),
|
||||
+ * the LRU cache does not apply.
|
||||
+ *
|
||||
+ * Calling this function on an unmapped folio -- !folio_mapped() -- that is
|
||||
+ * locked will return a stable result.
|
||||
+ *
|
||||
+ * Calling this function on a mapped folio will not result in a stable result,
|
||||
+ * because nothing stops additional page table mappings from coming (e.g.,
|
||||
+ * fork()) or going (e.g., munmap()).
|
||||
+ *
|
||||
+ * Calling this function without the folio lock will also not result in a
|
||||
+ * stable result: for example, the folio might get dropped from the swapcache
|
||||
+ * concurrently.
|
||||
+ *
|
||||
+ * However, even when called without the folio lock or on a mapped folio,
|
||||
+ * this function can be used to detect unexpected references early (for example,
|
||||
+ * if it makes sense to even lock the folio and unmap it).
|
||||
+ *
|
||||
+ * The caller must add any reference (e.g., from folio_try_get()) it might be
|
||||
+ * holding itself to the result.
|
||||
+ *
|
||||
+ * Returns the expected folio refcount.
|
||||
+ */
|
||||
+static inline int folio_expected_ref_count(const struct folio *folio)
|
||||
+{
|
||||
+ const int order = folio_order(folio);
|
||||
+ int ref_count = 0;
|
||||
+
|
||||
+ if (WARN_ON_ONCE(folio_test_slab(folio)))
|
||||
+ return 0;
|
||||
+
|
||||
+ if (folio_test_anon(folio)) {
|
||||
+ /* One reference per page from the swapcache. */
|
||||
+ ref_count += folio_test_swapcache(folio) << order;
|
||||
+ } else if (!((unsigned long)folio->mapping & PAGE_MAPPING_FLAGS)) {
|
||||
+ /* One reference per page from the pagecache. */
|
||||
+ ref_count += !!folio->mapping << order;
|
||||
+ /* One reference from PG_private. */
|
||||
+ ref_count += folio_test_private(folio);
|
||||
+ }
|
||||
+
|
||||
+ /* One reference per page table mapping. */
|
||||
+ return ref_count + folio_mapcount(folio);
|
||||
+}
|
||||
+
|
||||
#ifndef HAVE_ARCH_MAKE_FOLIO_ACCESSIBLE
|
||||
static inline int arch_make_folio_accessible(struct folio *folio)
|
||||
{
|
||||
--- a/mm/migrate.c
|
||||
+++ b/mm/migrate.c
|
||||
@@ -445,20 +445,6 @@ unlock:
|
||||
}
|
||||
#endif
|
||||
|
||||
-static int folio_expected_refs(struct address_space *mapping,
|
||||
- struct folio *folio)
|
||||
-{
|
||||
- int refs = 1;
|
||||
- if (!mapping)
|
||||
- return refs;
|
||||
-
|
||||
- refs += folio_nr_pages(folio);
|
||||
- if (folio_test_private(folio))
|
||||
- refs++;
|
||||
-
|
||||
- return refs;
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* Replace the folio in the mapping.
|
||||
*
|
||||
@@ -601,7 +587,7 @@ static int __folio_migrate_mapping(struc
|
||||
int folio_migrate_mapping(struct address_space *mapping,
|
||||
struct folio *newfolio, struct folio *folio, int extra_count)
|
||||
{
|
||||
- int expected_count = folio_expected_refs(mapping, folio) + extra_count;
|
||||
+ int expected_count = folio_expected_ref_count(folio) + extra_count + 1;
|
||||
|
||||
if (folio_ref_count(folio) != expected_count)
|
||||
return -EAGAIN;
|
||||
@@ -618,7 +604,7 @@ int migrate_huge_page_move_mapping(struc
|
||||
struct folio *dst, struct folio *src)
|
||||
{
|
||||
XA_STATE(xas, &mapping->i_pages, folio_index(src));
|
||||
- int rc, expected_count = folio_expected_refs(mapping, src);
|
||||
+ int rc, expected_count = folio_expected_ref_count(src) + 1;
|
||||
|
||||
if (folio_ref_count(src) != expected_count)
|
||||
return -EAGAIN;
|
||||
@@ -749,7 +735,7 @@ static int __migrate_folio(struct addres
|
||||
struct folio *src, void *src_private,
|
||||
enum migrate_mode mode)
|
||||
{
|
||||
- int rc, expected_count = folio_expected_refs(mapping, src);
|
||||
+ int rc, expected_count = folio_expected_ref_count(src) + 1;
|
||||
|
||||
/* Check whether src does not have extra refs before we do more work */
|
||||
if (folio_ref_count(src) != expected_count)
|
||||
@@ -837,7 +823,7 @@ static int __buffer_migrate_folio(struct
|
||||
return migrate_folio(mapping, dst, src, mode);
|
||||
|
||||
/* Check whether page does not have extra refs before we do more work */
|
||||
- expected_count = folio_expected_refs(mapping, src);
|
||||
+ expected_count = folio_expected_ref_count(src) + 1;
|
||||
if (folio_ref_count(src) != expected_count)
|
||||
return -EAGAIN;
|
||||
|
@@ -1,40 +0,0 @@
|
||||
From 3d1a493525955678c231ab7ccf0950c0ba2b9f45 Mon Sep 17 00:00:00 2001
|
||||
From: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
|
||||
Date: Fri, 13 Jun 2025 11:42:46 +0530
|
||||
Subject: drm/i915/snps_hdmi_pll: Fix 64-bit divisor truncation by using
|
||||
div64_u64
|
||||
|
||||
DIV_ROUND_CLOSEST_ULL uses do_div(), which expects a 32-bit divisor.
|
||||
When passing a 64-bit constant like CURVE2_MULTIPLIER, the value is
|
||||
silently truncated to u32, potentially leading to incorrect results
|
||||
on large divisors.
|
||||
|
||||
Replace DIV_ROUND_CLOSEST_ULL with div64_u64(), which correctly
|
||||
handles full 64-bit division. Since the result is clamped between
|
||||
1 and 127, rounding is unnecessary and truncating division
|
||||
is sufficient.
|
||||
|
||||
Fixes: 5947642004bf ("drm/i915/display: Add support for SNPS PHY HDMI PLL algorithm for DG2")
|
||||
Cc: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
|
||||
Cc: Suraj Kandpal <suraj.kandpal@intel.com>
|
||||
Cc: Jani Nikula <jani.nikula@intel.com>
|
||||
Cc: <stable@vger.kernel.org> # v6.15+
|
||||
Signed-off-by: Ankit Nautiyal <ankit.k.nautiyal@intel.com>
|
||||
Cherry-picked-for: https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/issues/145
|
||||
---
|
||||
drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c
|
||||
+++ b/drivers/gpu/drm/i915/display/intel_snps_hdmi_pll.c
|
||||
@@ -103,8 +103,8 @@ static void get_ana_cp_int_prop(u64 vco_
|
||||
DIV_ROUND_DOWN_ULL(curve_1_interpolated, CURVE0_MULTIPLIER)));
|
||||
|
||||
ana_cp_int_temp =
|
||||
- DIV64_U64_ROUND_CLOSEST(DIV_ROUND_DOWN_ULL(adjusted_vco_clk1, curve_2_scaled1),
|
||||
- CURVE2_MULTIPLIER);
|
||||
+ div64_u64(DIV_ROUND_DOWN_ULL(adjusted_vco_clk1, curve_2_scaled1),
|
||||
+ CURVE2_MULTIPLIER);
|
||||
|
||||
*ana_cp_int = max(1, min(ana_cp_int_temp, 127));
|
||||
|
@@ -1,86 +0,0 @@
|
||||
From 336152e6ec30b13f5617ee9b702beb5bc310c6a7 Mon Sep 17 00:00:00 2001
|
||||
From: "Vishal Moola (Oracle)" <vishal.moola@gmail.com>
|
||||
Date: Mon, 31 Mar 2025 19:10:25 -0700
|
||||
Subject: mm/compaction: use folio in hugetlb pathway
|
||||
|
||||
Use a folio in the hugetlb pathway during the compaction migrate-able
|
||||
pageblock scan.
|
||||
|
||||
This removes a call to compound_head().
|
||||
|
||||
Link: https://lkml.kernel.org/r/20250401021025.637333-2-vishal.moola@gmail.com
|
||||
Signed-off-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
|
||||
Acked-by: Oscar Salvador <osalvador@suse.de>
|
||||
Reviewed-by: Zi Yan <ziy@nvidia.com>
|
||||
Cc: Muchun Song <muchun.song@linux.dev>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
include/linux/hugetlb.h | 4 ++--
|
||||
mm/compaction.c | 8 ++++----
|
||||
mm/hugetlb.c | 3 +--
|
||||
3 files changed, 7 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/include/linux/hugetlb.h
|
||||
+++ b/include/linux/hugetlb.h
|
||||
@@ -703,7 +703,7 @@ struct huge_bootmem_page {
|
||||
|
||||
bool hugetlb_bootmem_page_zones_valid(int nid, struct huge_bootmem_page *m);
|
||||
|
||||
-int isolate_or_dissolve_huge_page(struct page *page, struct list_head *list);
|
||||
+int isolate_or_dissolve_huge_folio(struct folio *folio, struct list_head *list);
|
||||
int replace_free_hugepage_folios(unsigned long start_pfn, unsigned long end_pfn);
|
||||
void wait_for_freed_hugetlb_folios(void);
|
||||
struct folio *alloc_hugetlb_folio(struct vm_area_struct *vma,
|
||||
@@ -1091,7 +1091,7 @@ static inline struct folio *filemap_lock
|
||||
return NULL;
|
||||
}
|
||||
|
||||
-static inline int isolate_or_dissolve_huge_page(struct page *page,
|
||||
+static inline int isolate_or_dissolve_huge_folio(struct folio *folio,
|
||||
struct list_head *list)
|
||||
{
|
||||
return -ENOMEM;
|
||||
--- a/mm/compaction.c
|
||||
+++ b/mm/compaction.c
|
||||
@@ -1001,10 +1001,11 @@ isolate_migratepages_block(struct compac
|
||||
locked = NULL;
|
||||
}
|
||||
|
||||
- ret = isolate_or_dissolve_huge_page(page, &cc->migratepages);
|
||||
+ folio = page_folio(page);
|
||||
+ ret = isolate_or_dissolve_huge_folio(folio, &cc->migratepages);
|
||||
|
||||
/*
|
||||
- * Fail isolation in case isolate_or_dissolve_huge_page()
|
||||
+ * Fail isolation in case isolate_or_dissolve_huge_folio()
|
||||
* reports an error. In case of -ENOMEM, abort right away.
|
||||
*/
|
||||
if (ret < 0) {
|
||||
@@ -1016,12 +1017,11 @@ isolate_migratepages_block(struct compac
|
||||
goto isolate_fail;
|
||||
}
|
||||
|
||||
- if (PageHuge(page)) {
|
||||
+ if (folio_test_hugetlb(folio)) {
|
||||
/*
|
||||
* Hugepage was successfully isolated and placed
|
||||
* on the cc->migratepages list.
|
||||
*/
|
||||
- folio = page_folio(page);
|
||||
low_pfn += folio_nr_pages(folio) - 1;
|
||||
goto isolate_success_no_list;
|
||||
}
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -2896,10 +2896,9 @@ free_new:
|
||||
return ret;
|
||||
}
|
||||
|
||||
-int isolate_or_dissolve_huge_page(struct page *page, struct list_head *list)
|
||||
+int isolate_or_dissolve_huge_folio(struct folio *folio, struct list_head *list)
|
||||
{
|
||||
struct hstate *h;
|
||||
- struct folio *folio = page_folio(page);
|
||||
int ret = -EBUSY;
|
||||
|
||||
/*
|
@@ -1,154 +0,0 @@
|
||||
From 2e50b415d59dda319bb3208c5ed5234a23f307e9 Mon Sep 17 00:00:00 2001
|
||||
From: Ge Yang <yangge1116@126.com>
|
||||
Date: Tue, 27 May 2025 11:36:50 +0800
|
||||
Subject: mm/hugetlb: remove unnecessary holding of hugetlb_lock
|
||||
|
||||
In isolate_or_dissolve_huge_folio(), after acquiring the hugetlb_lock, it
|
||||
is only for the purpose of obtaining the correct hstate, which is then
|
||||
passed to alloc_and_dissolve_hugetlb_folio().
|
||||
|
||||
alloc_and_dissolve_hugetlb_folio() itself also acquires the hugetlb_lock.
|
||||
We can have alloc_and_dissolve_hugetlb_folio() obtain the hstate by
|
||||
itself, so that isolate_or_dissolve_huge_folio() no longer needs to
|
||||
acquire the hugetlb_lock. In addition, we keep the folio_test_hugetlb()
|
||||
check within isolate_or_dissolve_huge_folio(). By doing so, we can avoid
|
||||
disrupting the normal path by vainly holding the hugetlb_lock.
|
||||
|
||||
replace_free_hugepage_folios() has the same issue, and we should address
|
||||
it as well.
|
||||
|
||||
Addresses a possible performance problem which was added by the hotfix
|
||||
113ed54ad276 ("mm/hugetlb: fix kernel NULL pointer dereference when
|
||||
replacing free hugetlb folios").
|
||||
|
||||
Link: https://lkml.kernel.org/r/1748317010-16272-1-git-send-email-yangge1116@126.com
|
||||
Fixes: 113ed54ad276 ("mm/hugetlb: fix kernel NULL pointer dereference when replacing free hugetlb folios")
|
||||
Signed-off-by: Ge Yang <yangge1116@126.com>
|
||||
Suggested-by: Oscar Salvador <osalvador@suse.de>
|
||||
Reviewed-by: Muchun Song <muchun.song@linux.dev>
|
||||
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
|
||||
Cc: Barry Song <21cnbao@gmail.com>
|
||||
Cc: David Hildenbrand <david@redhat.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
mm/hugetlb.c | 54 +++++++++++++++++-----------------------------------
|
||||
1 file changed, 17 insertions(+), 37 deletions(-)
|
||||
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -2811,20 +2811,24 @@ void restore_reserve_on_error(struct hst
|
||||
/*
|
||||
* alloc_and_dissolve_hugetlb_folio - Allocate a new folio and dissolve
|
||||
* the old one
|
||||
- * @h: struct hstate old page belongs to
|
||||
* @old_folio: Old folio to dissolve
|
||||
* @list: List to isolate the page in case we need to
|
||||
* Returns 0 on success, otherwise negated error.
|
||||
*/
|
||||
-static int alloc_and_dissolve_hugetlb_folio(struct hstate *h,
|
||||
- struct folio *old_folio, struct list_head *list)
|
||||
+static int alloc_and_dissolve_hugetlb_folio(struct folio *old_folio,
|
||||
+ struct list_head *list)
|
||||
{
|
||||
- gfp_t gfp_mask = htlb_alloc_mask(h) | __GFP_THISNODE;
|
||||
+ gfp_t gfp_mask;
|
||||
+ struct hstate *h;
|
||||
int nid = folio_nid(old_folio);
|
||||
struct folio *new_folio = NULL;
|
||||
int ret = 0;
|
||||
|
||||
retry:
|
||||
+ /*
|
||||
+ * The old_folio might have been dissolved from under our feet, so make sure
|
||||
+ * to carefully check the state under the lock.
|
||||
+ */
|
||||
spin_lock_irq(&hugetlb_lock);
|
||||
if (!folio_test_hugetlb(old_folio)) {
|
||||
/*
|
||||
@@ -2853,8 +2857,10 @@ retry:
|
||||
cond_resched();
|
||||
goto retry;
|
||||
} else {
|
||||
+ h = folio_hstate(old_folio);
|
||||
if (!new_folio) {
|
||||
spin_unlock_irq(&hugetlb_lock);
|
||||
+ gfp_mask = htlb_alloc_mask(h) | __GFP_THISNODE;
|
||||
new_folio = alloc_buddy_hugetlb_folio(h, gfp_mask, nid,
|
||||
NULL, NULL);
|
||||
if (!new_folio)
|
||||
@@ -2898,35 +2904,24 @@ free_new:
|
||||
|
||||
int isolate_or_dissolve_huge_folio(struct folio *folio, struct list_head *list)
|
||||
{
|
||||
- struct hstate *h;
|
||||
int ret = -EBUSY;
|
||||
|
||||
- /*
|
||||
- * The page might have been dissolved from under our feet, so make sure
|
||||
- * to carefully check the state under the lock.
|
||||
- * Return success when racing as if we dissolved the page ourselves.
|
||||
- */
|
||||
- spin_lock_irq(&hugetlb_lock);
|
||||
- if (folio_test_hugetlb(folio)) {
|
||||
- h = folio_hstate(folio);
|
||||
- } else {
|
||||
- spin_unlock_irq(&hugetlb_lock);
|
||||
+ /* Not to disrupt normal path by vainly holding hugetlb_lock */
|
||||
+ if (!folio_test_hugetlb(folio))
|
||||
return 0;
|
||||
- }
|
||||
- spin_unlock_irq(&hugetlb_lock);
|
||||
|
||||
/*
|
||||
* Fence off gigantic pages as there is a cyclic dependency between
|
||||
* alloc_contig_range and them. Return -ENOMEM as this has the effect
|
||||
* of bailing out right away without further retrying.
|
||||
*/
|
||||
- if (hstate_is_gigantic(h))
|
||||
+ if (folio_order(folio) > MAX_PAGE_ORDER)
|
||||
return -ENOMEM;
|
||||
|
||||
if (folio_ref_count(folio) && folio_isolate_hugetlb(folio, list))
|
||||
ret = 0;
|
||||
else if (!folio_ref_count(folio))
|
||||
- ret = alloc_and_dissolve_hugetlb_folio(h, folio, list);
|
||||
+ ret = alloc_and_dissolve_hugetlb_folio(folio, list);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -2940,7 +2935,6 @@ int isolate_or_dissolve_huge_folio(struc
|
||||
*/
|
||||
int replace_free_hugepage_folios(unsigned long start_pfn, unsigned long end_pfn)
|
||||
{
|
||||
- struct hstate *h;
|
||||
struct folio *folio;
|
||||
int ret = 0;
|
||||
|
||||
@@ -2949,23 +2943,9 @@ int replace_free_hugepage_folios(unsigne
|
||||
while (start_pfn < end_pfn) {
|
||||
folio = pfn_folio(start_pfn);
|
||||
|
||||
- /*
|
||||
- * The folio might have been dissolved from under our feet, so make sure
|
||||
- * to carefully check the state under the lock.
|
||||
- */
|
||||
- spin_lock_irq(&hugetlb_lock);
|
||||
- if (folio_test_hugetlb(folio)) {
|
||||
- h = folio_hstate(folio);
|
||||
- } else {
|
||||
- spin_unlock_irq(&hugetlb_lock);
|
||||
- start_pfn++;
|
||||
- continue;
|
||||
- }
|
||||
- spin_unlock_irq(&hugetlb_lock);
|
||||
-
|
||||
- if (!folio_ref_count(folio)) {
|
||||
- ret = alloc_and_dissolve_hugetlb_folio(h, folio,
|
||||
- &isolate_list);
|
||||
+ /* Not to disrupt normal path by vainly holding hugetlb_lock */
|
||||
+ if (folio_test_hugetlb(folio) && !folio_ref_count(folio)) {
|
||||
+ ret = alloc_and_dissolve_hugetlb_folio(folio, &isolate_list);
|
||||
if (ret)
|
||||
break;
|
||||
|
@@ -1,136 +0,0 @@
|
||||
From b885aa903c313644f7ba8d46d4c09ead1b52f1f1 Mon Sep 17 00:00:00 2001
|
||||
From: David Howells <dhowells@redhat.com>
|
||||
Date: Tue, 1 Jul 2025 17:38:38 +0100
|
||||
Subject: netfs: Provide helpers to perform NETFS_RREQ_IN_PROGRESS flag
|
||||
wangling
|
||||
|
||||
Provide helpers to clear and test the NETFS_RREQ_IN_PROGRESS and to insert
|
||||
the appropriate barrierage.
|
||||
|
||||
Signed-off-by: David Howells <dhowells@redhat.com>
|
||||
Link: https://lore.kernel.org/20250701163852.2171681-4-dhowells@redhat.com
|
||||
Tested-by: Steve French <sfrench@samba.org>
|
||||
Reviewed-by: Paulo Alcantara <pc@manguebit.org>
|
||||
cc: netfs@lists.linux.dev
|
||||
cc: linux-fsdevel@vger.kernel.org
|
||||
Signed-off-by: Christian Brauner <brauner@kernel.org>
|
||||
---
|
||||
fs/netfs/internal.h | 18 ++++++++++++++++++
|
||||
fs/netfs/misc.c | 10 +++++-----
|
||||
fs/netfs/read_collect.c | 4 ++--
|
||||
fs/netfs/write_collect.c | 4 ++--
|
||||
4 files changed, 27 insertions(+), 9 deletions(-)
|
||||
|
||||
--- a/fs/netfs/internal.h
|
||||
+++ b/fs/netfs/internal.h
|
||||
@@ -275,6 +275,24 @@ static inline void netfs_wake_rreq_flag(
|
||||
}
|
||||
|
||||
/*
|
||||
+ * Test the NETFS_RREQ_IN_PROGRESS flag, inserting an appropriate barrier.
|
||||
+ */
|
||||
+static inline bool netfs_check_rreq_in_progress(const struct netfs_io_request *rreq)
|
||||
+{
|
||||
+ /* Order read of flags before read of anything else, such as error. */
|
||||
+ return test_bit_acquire(NETFS_RREQ_IN_PROGRESS, &rreq->flags);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Test the NETFS_SREQ_IN_PROGRESS flag, inserting an appropriate barrier.
|
||||
+ */
|
||||
+static inline bool netfs_check_subreq_in_progress(const struct netfs_io_subrequest *subreq)
|
||||
+{
|
||||
+ /* Order read of flags before read of anything else, such as error. */
|
||||
+ return test_bit_acquire(NETFS_SREQ_IN_PROGRESS, &subreq->flags);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
* fscache-cache.c
|
||||
*/
|
||||
#ifdef CONFIG_PROC_FS
|
||||
--- a/fs/netfs/misc.c
|
||||
+++ b/fs/netfs/misc.c
|
||||
@@ -356,14 +356,14 @@ void netfs_wait_for_in_progress_stream(s
|
||||
DEFINE_WAIT(myself);
|
||||
|
||||
list_for_each_entry(subreq, &stream->subrequests, rreq_link) {
|
||||
- if (!test_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags))
|
||||
+ if (!netfs_check_subreq_in_progress(subreq))
|
||||
continue;
|
||||
|
||||
trace_netfs_rreq(rreq, netfs_rreq_trace_wait_queue);
|
||||
for (;;) {
|
||||
prepare_to_wait(&rreq->waitq, &myself, TASK_UNINTERRUPTIBLE);
|
||||
|
||||
- if (!test_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags))
|
||||
+ if (!netfs_check_subreq_in_progress(subreq))
|
||||
break;
|
||||
|
||||
trace_netfs_sreq(subreq, netfs_sreq_trace_wait_for);
|
||||
@@ -400,7 +400,7 @@ static int netfs_collect_in_app(struct n
|
||||
struct netfs_io_subrequest,
|
||||
rreq_link);
|
||||
if (subreq &&
|
||||
- (!test_bit(NETFS_SREQ_IN_PROGRESS, &subreq->flags) ||
|
||||
+ (!netfs_check_subreq_in_progress(subreq) ||
|
||||
test_bit(NETFS_SREQ_MADE_PROGRESS, &subreq->flags))) {
|
||||
need_collect = true;
|
||||
break;
|
||||
@@ -454,7 +454,7 @@ static ssize_t netfs_wait_for_in_progres
|
||||
}
|
||||
}
|
||||
|
||||
- if (!test_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags))
|
||||
+ if (!netfs_check_rreq_in_progress(rreq))
|
||||
break;
|
||||
|
||||
schedule();
|
||||
@@ -525,7 +525,7 @@ static void netfs_wait_for_pause(struct
|
||||
}
|
||||
}
|
||||
|
||||
- if (!test_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags) ||
|
||||
+ if (!netfs_check_rreq_in_progress(rreq) ||
|
||||
!test_bit(NETFS_RREQ_PAUSE, &rreq->flags))
|
||||
break;
|
||||
|
||||
--- a/fs/netfs/read_collect.c
|
||||
+++ b/fs/netfs/read_collect.c
|
||||
@@ -220,7 +220,7 @@ reassess:
|
||||
stream->collected_to = front->start;
|
||||
}
|
||||
|
||||
- if (test_bit(NETFS_SREQ_IN_PROGRESS, &front->flags))
|
||||
+ if (netfs_check_subreq_in_progress(front))
|
||||
notes |= HIT_PENDING;
|
||||
smp_rmb(); /* Read counters after IN_PROGRESS flag. */
|
||||
transferred = READ_ONCE(front->transferred);
|
||||
@@ -447,7 +447,7 @@ void netfs_read_collection_worker(struct
|
||||
struct netfs_io_request *rreq = container_of(work, struct netfs_io_request, work);
|
||||
|
||||
netfs_see_request(rreq, netfs_rreq_trace_see_work);
|
||||
- if (test_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags)) {
|
||||
+ if (netfs_check_rreq_in_progress(rreq)) {
|
||||
if (netfs_read_collection(rreq))
|
||||
/* Drop the ref from the IN_PROGRESS flag. */
|
||||
netfs_put_request(rreq, netfs_rreq_trace_put_work_ip);
|
||||
--- a/fs/netfs/write_collect.c
|
||||
+++ b/fs/netfs/write_collect.c
|
||||
@@ -240,7 +240,7 @@ reassess_streams:
|
||||
}
|
||||
|
||||
/* Stall if the front is still undergoing I/O. */
|
||||
- if (test_bit(NETFS_SREQ_IN_PROGRESS, &front->flags)) {
|
||||
+ if (netfs_check_subreq_in_progress(front)) {
|
||||
notes |= HIT_PENDING;
|
||||
break;
|
||||
}
|
||||
@@ -434,7 +434,7 @@ void netfs_write_collection_worker(struc
|
||||
struct netfs_io_request *rreq = container_of(work, struct netfs_io_request, work);
|
||||
|
||||
netfs_see_request(rreq, netfs_rreq_trace_see_work);
|
||||
- if (test_bit(NETFS_RREQ_IN_PROGRESS, &rreq->flags)) {
|
||||
+ if (netfs_check_rreq_in_progress(rreq)) {
|
||||
if (netfs_write_collection(rreq))
|
||||
/* Drop the ref from the IN_PROGRESS flag. */
|
||||
netfs_put_request(rreq, netfs_rreq_trace_put_work_ip);
|
@@ -1,4 +1,4 @@
|
||||
From 3400d11fad849dae6015e448c83d6e90f8a6ef35 Mon Sep 17 00:00:00 2001
|
||||
From cb67be41cf8b19fed3b1cc08a42417aa1c7550e0 Mon Sep 17 00:00:00 2001
|
||||
From: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Date: Tue, 8 Apr 2025 12:02:36 +0200
|
||||
Subject: ice: mark ice_write_prof_mask_reg() as noinline
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 1615cc0c7d979a1c211f349c8c28ee8afb9ad57d Mon Sep 17 00:00:00 2001
|
||||
From a3c672256ccc59b07f007b569e1e7507b0a82dce Mon Sep 17 00:00:00 2001
|
||||
From: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
Date: Thu, 1 May 2025 20:22:53 +0200
|
||||
Subject: wifi: mac80211: mark copy_mesh_setup() as noinline
|
||||
@@ -24,7 +24,7 @@ Signed-off-by: Oleksandr Natalenko <oleksandr@natalenko.name>
|
||||
|
||||
--- a/net/mac80211/cfg.c
|
||||
+++ b/net/mac80211/cfg.c
|
||||
@@ -2515,7 +2515,7 @@ static inline bool _chg_mesh_attr(enum n
|
||||
@@ -2539,7 +2539,7 @@ static inline bool _chg_mesh_attr(enum n
|
||||
return (mask >> (parm-1)) & 0x1;
|
||||
}
|
||||
|
||||
|
@@ -0,0 +1,77 @@
|
||||
From 0958a5878e3cbeb42c0e6dbad00000c15a44c544 Mon Sep 17 00:00:00 2001
|
||||
From: Pavel Begunkov <asml.silence@gmail.com>
|
||||
Date: Wed, 2 Jul 2025 15:29:04 +0100
|
||||
Subject: io_uring/zcrx: always pass page to io_zcrx_copy_chunk
|
||||
|
||||
io_zcrx_copy_chunk() currently takes either a page or virtual address.
|
||||
Unify the parameters, make it take pages and resolve the linear part
|
||||
into a page the same way general networking code does that.
|
||||
|
||||
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
|
||||
Reviewed-by: David Wei <dw@davidwei.uk>
|
||||
Link: https://lore.kernel.org/r/b8f9f4bac027f5f44a9ccf85350912d1db41ceb8.1751466461.git.asml.silence@gmail.com
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
io_uring/zcrx.c | 21 ++++++++++-----------
|
||||
1 file changed, 10 insertions(+), 11 deletions(-)
|
||||
|
||||
--- a/io_uring/zcrx.c
|
||||
+++ b/io_uring/zcrx.c
|
||||
@@ -968,8 +968,8 @@ static struct net_iov *io_zcrx_alloc_fal
|
||||
}
|
||||
|
||||
static ssize_t io_zcrx_copy_chunk(struct io_kiocb *req, struct io_zcrx_ifq *ifq,
|
||||
- void *src_base, struct page *src_page,
|
||||
- unsigned int src_offset, size_t len)
|
||||
+ struct page *src_page, unsigned int src_offset,
|
||||
+ size_t len)
|
||||
{
|
||||
struct io_zcrx_area *area = ifq->area;
|
||||
size_t copied = 0;
|
||||
@@ -983,7 +983,7 @@ static ssize_t io_zcrx_copy_chunk(struct
|
||||
const int dst_off = 0;
|
||||
struct net_iov *niov;
|
||||
struct page *dst_page;
|
||||
- void *dst_addr;
|
||||
+ void *dst_addr, *src_addr;
|
||||
|
||||
niov = io_zcrx_alloc_fallback(area);
|
||||
if (!niov) {
|
||||
@@ -993,13 +993,11 @@ static ssize_t io_zcrx_copy_chunk(struct
|
||||
|
||||
dst_page = io_zcrx_iov_page(niov);
|
||||
dst_addr = kmap_local_page(dst_page);
|
||||
- if (src_page)
|
||||
- src_base = kmap_local_page(src_page);
|
||||
+ src_addr = kmap_local_page(src_page);
|
||||
|
||||
- memcpy(dst_addr, src_base + src_offset, copy_size);
|
||||
+ memcpy(dst_addr, src_addr + src_offset, copy_size);
|
||||
|
||||
- if (src_page)
|
||||
- kunmap_local(src_base);
|
||||
+ kunmap_local(src_addr);
|
||||
kunmap_local(dst_addr);
|
||||
|
||||
if (!io_zcrx_queue_cqe(req, niov, ifq, dst_off, copy_size)) {
|
||||
@@ -1028,7 +1026,7 @@ static int io_zcrx_copy_frag(struct io_k
|
||||
|
||||
skb_frag_foreach_page(frag, off, len,
|
||||
page, p_off, p_len, t) {
|
||||
- ret = io_zcrx_copy_chunk(req, ifq, NULL, page, p_off, p_len);
|
||||
+ ret = io_zcrx_copy_chunk(req, ifq, page, p_off, p_len);
|
||||
if (ret < 0)
|
||||
return copied ? copied : ret;
|
||||
copied += ret;
|
||||
@@ -1090,8 +1088,9 @@ io_zcrx_recv_skb(read_descriptor_t *desc
|
||||
size_t to_copy;
|
||||
|
||||
to_copy = min_t(size_t, skb_headlen(skb) - offset, len);
|
||||
- copied = io_zcrx_copy_chunk(req, ifq, skb->data, NULL,
|
||||
- offset, to_copy);
|
||||
+ copied = io_zcrx_copy_chunk(req, ifq, virt_to_page(skb->data),
|
||||
+ offset_in_page(skb->data) + offset,
|
||||
+ to_copy);
|
||||
if (copied < 0) {
|
||||
ret = copied;
|
||||
goto out;
|
26
debian/patches/patchset-pf/steady/0002-io_uring-zcrx-assert-area-type-in-io_zcrx_iov_page.patch
vendored
Normal file
26
debian/patches/patchset-pf/steady/0002-io_uring-zcrx-assert-area-type-in-io_zcrx_iov_page.patch
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
From 221ca821b4f8439aa9749e41f1a35b0b19c4d825 Mon Sep 17 00:00:00 2001
|
||||
From: Pavel Begunkov <asml.silence@gmail.com>
|
||||
Date: Wed, 2 Jul 2025 15:29:08 +0100
|
||||
Subject: io_uring/zcrx: assert area type in io_zcrx_iov_page
|
||||
|
||||
Add a simple debug assertion to io_zcrx_iov_page() making it's not
|
||||
trying to return pages for a dmabuf area.
|
||||
|
||||
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
|
||||
Link: https://lore.kernel.org/r/c3c30a926a18436a399a1768f3cc86c76cd17fa7.1751466461.git.asml.silence@gmail.com
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
io_uring/zcrx.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
--- a/io_uring/zcrx.c
|
||||
+++ b/io_uring/zcrx.c
|
||||
@@ -44,6 +44,8 @@ static inline struct page *io_zcrx_iov_p
|
||||
{
|
||||
struct io_zcrx_area *area = io_zcrx_iov_to_area(niov);
|
||||
|
||||
+ lockdep_assert(!area->mem.is_dmabuf);
|
||||
+
|
||||
return area->mem.pages[net_iov_idx(niov)];
|
||||
}
|
||||
|
142
debian/patches/patchset-pf/steady/0003-io_uring-zcrx-prepare-fallback-for-larger-pages.patch
vendored
Normal file
142
debian/patches/patchset-pf/steady/0003-io_uring-zcrx-prepare-fallback-for-larger-pages.patch
vendored
Normal file
@@ -0,0 +1,142 @@
|
||||
From ace17dfbf605c4eab9eb68c897ace0708d466bca Mon Sep 17 00:00:00 2001
|
||||
From: Pavel Begunkov <asml.silence@gmail.com>
|
||||
Date: Wed, 2 Jul 2025 15:29:09 +0100
|
||||
Subject: io_uring/zcrx: prepare fallback for larger pages
|
||||
|
||||
io_zcrx_copy_chunk() processes one page at a time, which won't be
|
||||
sufficient when the net_iov size grows. Introduce a structure keeping
|
||||
the target niov page and other parameters, it's more convenient and can
|
||||
be reused later. And add a helper function that can efficient copy
|
||||
buffers of an arbitrary length. For 64bit archs the loop inside should
|
||||
be compiled out.
|
||||
|
||||
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
|
||||
Link: https://lore.kernel.org/r/e84bc705a4e1edeb9aefff470d96558d8232388f.1751466461.git.asml.silence@gmail.com
|
||||
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
||||
---
|
||||
io_uring/zcrx.c | 83 +++++++++++++++++++++++++++++++++----------------
|
||||
1 file changed, 56 insertions(+), 27 deletions(-)
|
||||
|
||||
--- a/io_uring/zcrx.c
|
||||
+++ b/io_uring/zcrx.c
|
||||
@@ -969,6 +969,51 @@ static struct net_iov *io_zcrx_alloc_fal
|
||||
return niov;
|
||||
}
|
||||
|
||||
+struct io_copy_cache {
|
||||
+ struct page *page;
|
||||
+ unsigned long offset;
|
||||
+ size_t size;
|
||||
+};
|
||||
+
|
||||
+static ssize_t io_copy_page(struct io_copy_cache *cc, struct page *src_page,
|
||||
+ unsigned int src_offset, size_t len)
|
||||
+{
|
||||
+ size_t copied = 0;
|
||||
+
|
||||
+ len = min(len, cc->size);
|
||||
+
|
||||
+ while (len) {
|
||||
+ void *src_addr, *dst_addr;
|
||||
+ struct page *dst_page = cc->page;
|
||||
+ unsigned dst_offset = cc->offset;
|
||||
+ size_t n = len;
|
||||
+
|
||||
+ if (folio_test_partial_kmap(page_folio(dst_page)) ||
|
||||
+ folio_test_partial_kmap(page_folio(src_page))) {
|
||||
+ dst_page = nth_page(dst_page, dst_offset / PAGE_SIZE);
|
||||
+ dst_offset = offset_in_page(dst_offset);
|
||||
+ src_page = nth_page(src_page, src_offset / PAGE_SIZE);
|
||||
+ src_offset = offset_in_page(src_offset);
|
||||
+ n = min(PAGE_SIZE - src_offset, PAGE_SIZE - dst_offset);
|
||||
+ n = min(n, len);
|
||||
+ }
|
||||
+
|
||||
+ dst_addr = kmap_local_page(dst_page) + dst_offset;
|
||||
+ src_addr = kmap_local_page(src_page) + src_offset;
|
||||
+
|
||||
+ memcpy(dst_addr, src_addr, n);
|
||||
+
|
||||
+ kunmap_local(src_addr);
|
||||
+ kunmap_local(dst_addr);
|
||||
+
|
||||
+ cc->size -= n;
|
||||
+ cc->offset += n;
|
||||
+ len -= n;
|
||||
+ copied += n;
|
||||
+ }
|
||||
+ return copied;
|
||||
+}
|
||||
+
|
||||
static ssize_t io_zcrx_copy_chunk(struct io_kiocb *req, struct io_zcrx_ifq *ifq,
|
||||
struct page *src_page, unsigned int src_offset,
|
||||
size_t len)
|
||||
@@ -981,11 +1026,9 @@ static ssize_t io_zcrx_copy_chunk(struct
|
||||
return -EFAULT;
|
||||
|
||||
while (len) {
|
||||
- size_t copy_size = min_t(size_t, PAGE_SIZE, len);
|
||||
- const int dst_off = 0;
|
||||
+ struct io_copy_cache cc;
|
||||
struct net_iov *niov;
|
||||
- struct page *dst_page;
|
||||
- void *dst_addr, *src_addr;
|
||||
+ size_t n;
|
||||
|
||||
niov = io_zcrx_alloc_fallback(area);
|
||||
if (!niov) {
|
||||
@@ -993,25 +1036,22 @@ static ssize_t io_zcrx_copy_chunk(struct
|
||||
break;
|
||||
}
|
||||
|
||||
- dst_page = io_zcrx_iov_page(niov);
|
||||
- dst_addr = kmap_local_page(dst_page);
|
||||
- src_addr = kmap_local_page(src_page);
|
||||
-
|
||||
- memcpy(dst_addr, src_addr + src_offset, copy_size);
|
||||
+ cc.page = io_zcrx_iov_page(niov);
|
||||
+ cc.offset = 0;
|
||||
+ cc.size = PAGE_SIZE;
|
||||
|
||||
- kunmap_local(src_addr);
|
||||
- kunmap_local(dst_addr);
|
||||
+ n = io_copy_page(&cc, src_page, src_offset, len);
|
||||
|
||||
- if (!io_zcrx_queue_cqe(req, niov, ifq, dst_off, copy_size)) {
|
||||
+ if (!io_zcrx_queue_cqe(req, niov, ifq, 0, n)) {
|
||||
io_zcrx_return_niov(niov);
|
||||
ret = -ENOSPC;
|
||||
break;
|
||||
}
|
||||
|
||||
io_zcrx_get_niov_uref(niov);
|
||||
- src_offset += copy_size;
|
||||
- len -= copy_size;
|
||||
- copied += copy_size;
|
||||
+ src_offset += n;
|
||||
+ len -= n;
|
||||
+ copied += n;
|
||||
}
|
||||
|
||||
return copied ? copied : ret;
|
||||
@@ -1021,19 +1061,8 @@ static int io_zcrx_copy_frag(struct io_k
|
||||
const skb_frag_t *frag, int off, int len)
|
||||
{
|
||||
struct page *page = skb_frag_page(frag);
|
||||
- u32 p_off, p_len, t, copied = 0;
|
||||
- int ret = 0;
|
||||
|
||||
- off += skb_frag_off(frag);
|
||||
-
|
||||
- skb_frag_foreach_page(frag, off, len,
|
||||
- page, p_off, p_len, t) {
|
||||
- ret = io_zcrx_copy_chunk(req, ifq, page, p_off, p_len);
|
||||
- if (ret < 0)
|
||||
- return copied ? copied : ret;
|
||||
- copied += ret;
|
||||
- }
|
||||
- return copied;
|
||||
+ return io_zcrx_copy_chunk(req, ifq, page, off + skb_frag_off(frag), len);
|
||||
}
|
||||
|
||||
static int io_zcrx_recv_frag(struct io_kiocb *req, struct io_zcrx_ifq *ifq,
|
105
debian/patches/patchset-pf/steady/0004-fs-proc-task_mmu-remove-conversion-of-seq_file-posit.patch
vendored
Normal file
105
debian/patches/patchset-pf/steady/0004-fs-proc-task_mmu-remove-conversion-of-seq_file-posit.patch
vendored
Normal file
@@ -0,0 +1,105 @@
|
||||
From b7e9e555a80801d33d94287307e7b7606501cffb Mon Sep 17 00:00:00 2001
|
||||
From: Suren Baghdasaryan <surenb@google.com>
|
||||
Date: Sat, 19 Jul 2025 11:28:53 -0700
|
||||
Subject: fs/proc/task_mmu: remove conversion of seq_file position to unsigned
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Back in 2.6 era, last_addr used to be stored in seq_file->version
|
||||
variable, which was unsigned long. As a result, sentinels to represent
|
||||
gate vma and end of all vmas used unsigned values. In more recent kernels
|
||||
we don't used seq_file->version anymore and therefore conversion from
|
||||
loff_t into unsigned type is not needed. Similarly, sentinel values don't
|
||||
need to be unsigned. Remove type conversion for set_file position and
|
||||
change sentinel values to signed. While at it, change the hardcoded
|
||||
sentinel values with named definitions for better documentation.
|
||||
|
||||
Link: https://lkml.kernel.org/r/20250719182854.3166724-6-surenb@google.com
|
||||
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
|
||||
Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
|
||||
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
|
||||
Acked-by: David Hildenbrand <david@redhat.com>
|
||||
Cc: Alexey Dobriyan <adobriyan@gmail.com>
|
||||
Cc: Andrii Nakryiko <andrii@kernel.org>
|
||||
Cc: Christian Brauner <brauner@kernel.org>
|
||||
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
|
||||
Cc: Jann Horn <jannh@google.com>
|
||||
Cc: Jeongjun Park <aha310510@gmail.com>
|
||||
Cc: Johannes Weiner <hannes@cmpxchg.org>
|
||||
Cc: Josef Bacik <josef@toxicpanda.com>
|
||||
Cc: Kalesh Singh <kaleshsingh@google.com>
|
||||
Cc: Liam Howlett <liam.howlett@oracle.com>
|
||||
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
|
||||
Cc: Michal Hocko <mhocko@kernel.org>
|
||||
Cc: Oscar Salvador <osalvador@suse.de>
|
||||
Cc: "Paul E . McKenney" <paulmck@kernel.org>
|
||||
Cc: Peter Xu <peterx@redhat.com>
|
||||
Cc: Ryan Roberts <ryan.roberts@arm.com>
|
||||
Cc: Shuah Khan <shuah@kernel.org>
|
||||
Cc: Thomas Weißschuh <linux@weissschuh.net>
|
||||
Cc: T.J. Mercier <tjmercier@google.com>
|
||||
Cc: Ye Bin <yebin10@huawei.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
fs/proc/task_mmu.c | 17 ++++++++++-------
|
||||
1 file changed, 10 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/fs/proc/task_mmu.c
|
||||
+++ b/fs/proc/task_mmu.c
|
||||
@@ -29,6 +29,9 @@
|
||||
#include <asm/tlbflush.h>
|
||||
#include "internal.h"
|
||||
|
||||
+#define SENTINEL_VMA_END -1
|
||||
+#define SENTINEL_VMA_GATE -2
|
||||
+
|
||||
#define SEQ_PUT_DEC(str, val) \
|
||||
seq_put_decimal_ull_width(m, str, (val) << (PAGE_SHIFT-10), 8)
|
||||
void task_mem(struct seq_file *m, struct mm_struct *mm)
|
||||
@@ -135,7 +138,7 @@ static struct vm_area_struct *proc_get_v
|
||||
if (vma) {
|
||||
*ppos = vma->vm_start;
|
||||
} else {
|
||||
- *ppos = -2UL;
|
||||
+ *ppos = SENTINEL_VMA_GATE;
|
||||
vma = get_gate_vma(priv->mm);
|
||||
}
|
||||
|
||||
@@ -145,11 +148,11 @@ static struct vm_area_struct *proc_get_v
|
||||
static void *m_start(struct seq_file *m, loff_t *ppos)
|
||||
{
|
||||
struct proc_maps_private *priv = m->private;
|
||||
- unsigned long last_addr = *ppos;
|
||||
+ loff_t last_addr = *ppos;
|
||||
struct mm_struct *mm;
|
||||
|
||||
/* See m_next(). Zero at the start or after lseek. */
|
||||
- if (last_addr == -1UL)
|
||||
+ if (last_addr == SENTINEL_VMA_END)
|
||||
return NULL;
|
||||
|
||||
priv->task = get_proc_task(priv->inode);
|
||||
@@ -170,9 +173,9 @@ static void *m_start(struct seq_file *m,
|
||||
return ERR_PTR(-EINTR);
|
||||
}
|
||||
|
||||
- vma_iter_init(&priv->iter, mm, last_addr);
|
||||
+ vma_iter_init(&priv->iter, mm, (unsigned long)last_addr);
|
||||
hold_task_mempolicy(priv);
|
||||
- if (last_addr == -2UL)
|
||||
+ if (last_addr == SENTINEL_VMA_GATE)
|
||||
return get_gate_vma(mm);
|
||||
|
||||
return proc_get_vma(priv, ppos);
|
||||
@@ -180,8 +183,8 @@ static void *m_start(struct seq_file *m,
|
||||
|
||||
static void *m_next(struct seq_file *m, void *v, loff_t *ppos)
|
||||
{
|
||||
- if (*ppos == -2UL) {
|
||||
- *ppos = -1UL;
|
||||
+ if (*ppos == SENTINEL_VMA_GATE) {
|
||||
+ *ppos = SENTINEL_VMA_END;
|
||||
return NULL;
|
||||
}
|
||||
return proc_get_vma(m->private, ppos);
|
478
debian/patches/patchset-pf/steady/0005-cifs-Add-support-for-creating-reparse-points-over-SM.patch
vendored
Normal file
478
debian/patches/patchset-pf/steady/0005-cifs-Add-support-for-creating-reparse-points-over-SM.patch
vendored
Normal file
@@ -0,0 +1,478 @@
|
||||
From 1b49e1eaff6d1d665cacad667a1fc03c38fc8533 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
|
||||
Date: Thu, 26 Dec 2024 00:43:22 +0100
|
||||
Subject: cifs: Add support for creating reparse points over SMB1
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
SMB1 already supports querying reparse points and detecting types of
|
||||
symlink, fifo, socket, block and char.
|
||||
|
||||
This change implements the missing part - ability to create a new reparse
|
||||
points over SMB1. This includes everything which SMB2+ already supports:
|
||||
- native SMB symlinks and sockets
|
||||
- NFS style of special files (symlinks, fifos, sockets, char/block devs)
|
||||
- WSL style of special files (symlinks, fifos, sockets, char/block devs)
|
||||
|
||||
Attaching a reparse point to an existing file or directory is done via
|
||||
SMB1 SMB_COM_NT_TRANSACT/NT_TRANSACT_IOCTL/FSCTL_SET_REPARSE_POINT command
|
||||
and implemented in a new cifs_create_reparse_inode() function.
|
||||
|
||||
This change introduce a new callback ->create_reparse_inode() which creates
|
||||
a new reperse point file or directory and returns inode. For SMB1 it is
|
||||
provided via that new cifs_create_reparse_inode() function.
|
||||
|
||||
Existing reparse.c code was only slightly updated to call new protocol
|
||||
callback ->create_reparse_inode() instead of hardcoded SMB2+ function.
|
||||
This make the whole reparse.c code to work with every SMB dialect.
|
||||
|
||||
The original callback ->create_reparse_symlink() is not needed anymore as
|
||||
the implementation of new create_reparse_symlink() function is dialect
|
||||
agnostic too. So the link.c code was updated to call that function directly
|
||||
(and not via callback).
|
||||
|
||||
Signed-off-by: Pali Rohár <pali@kernel.org>
|
||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
||||
---
|
||||
fs/smb/client/cifsglob.h | 14 +++--
|
||||
fs/smb/client/cifsproto.h | 8 +++
|
||||
fs/smb/client/cifssmb.c | 128 ++++++++++++++++++++++++++++++++++++++
|
||||
fs/smb/client/link.c | 13 ++--
|
||||
fs/smb/client/reparse.c | 16 +++--
|
||||
fs/smb/client/reparse.h | 4 +-
|
||||
fs/smb/client/smb1ops.c | 31 ++++++---
|
||||
fs/smb/client/smb2inode.c | 2 +-
|
||||
fs/smb/client/smb2ops.c | 10 +--
|
||||
fs/smb/client/smb2proto.h | 5 +-
|
||||
10 files changed, 188 insertions(+), 43 deletions(-)
|
||||
|
||||
--- a/fs/smb/client/cifsglob.h
|
||||
+++ b/fs/smb/client/cifsglob.h
|
||||
@@ -627,12 +627,14 @@ struct smb_version_operations {
|
||||
bool (*is_network_name_deleted)(char *buf, struct TCP_Server_Info *srv);
|
||||
struct reparse_data_buffer * (*get_reparse_point_buffer)(const struct kvec *rsp_iov,
|
||||
u32 *plen);
|
||||
- int (*create_reparse_symlink)(const unsigned int xid,
|
||||
- struct inode *inode,
|
||||
- struct dentry *dentry,
|
||||
- struct cifs_tcon *tcon,
|
||||
- const char *full_path,
|
||||
- const char *symname);
|
||||
+ struct inode * (*create_reparse_inode)(struct cifs_open_info_data *data,
|
||||
+ struct super_block *sb,
|
||||
+ const unsigned int xid,
|
||||
+ struct cifs_tcon *tcon,
|
||||
+ const char *full_path,
|
||||
+ bool directory,
|
||||
+ struct kvec *reparse_iov,
|
||||
+ struct kvec *xattr_iov);
|
||||
};
|
||||
|
||||
struct smb_version_values {
|
||||
--- a/fs/smb/client/cifsproto.h
|
||||
+++ b/fs/smb/client/cifsproto.h
|
||||
@@ -483,6 +483,14 @@ extern int cifs_query_reparse_point(cons
|
||||
const char *full_path,
|
||||
u32 *tag, struct kvec *rsp,
|
||||
int *rsp_buftype);
|
||||
+extern struct inode *cifs_create_reparse_inode(struct cifs_open_info_data *data,
|
||||
+ struct super_block *sb,
|
||||
+ const unsigned int xid,
|
||||
+ struct cifs_tcon *tcon,
|
||||
+ const char *full_path,
|
||||
+ bool directory,
|
||||
+ struct kvec *reparse_iov,
|
||||
+ struct kvec *xattr_iov);
|
||||
extern int CIFSSMB_set_compression(const unsigned int xid,
|
||||
struct cifs_tcon *tcon, __u16 fid);
|
||||
extern int CIFS_open(const unsigned int xid, struct cifs_open_parms *oparms,
|
||||
--- a/fs/smb/client/cifssmb.c
|
||||
+++ b/fs/smb/client/cifssmb.c
|
||||
@@ -2851,6 +2851,134 @@ error:
|
||||
return rc;
|
||||
}
|
||||
|
||||
+struct inode *cifs_create_reparse_inode(struct cifs_open_info_data *data,
|
||||
+ struct super_block *sb,
|
||||
+ const unsigned int xid,
|
||||
+ struct cifs_tcon *tcon,
|
||||
+ const char *full_path,
|
||||
+ bool directory,
|
||||
+ struct kvec *reparse_iov,
|
||||
+ struct kvec *xattr_iov)
|
||||
+{
|
||||
+ struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
+ struct cifs_open_parms oparms;
|
||||
+ TRANSACT_IOCTL_REQ *io_req;
|
||||
+ struct inode *new = NULL;
|
||||
+ struct kvec in_iov[2];
|
||||
+ struct kvec out_iov;
|
||||
+ struct cifs_fid fid;
|
||||
+ int io_req_len;
|
||||
+ int oplock = 0;
|
||||
+ int buf_type = 0;
|
||||
+ int rc;
|
||||
+
|
||||
+ cifs_tcon_dbg(FYI, "%s: path=%s\n", __func__, full_path);
|
||||
+
|
||||
+ /*
|
||||
+ * If server filesystem does not support reparse points then do not
|
||||
+ * attempt to create reparse point. This will prevent creating unusable
|
||||
+ * empty object on the server.
|
||||
+ */
|
||||
+ if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
|
||||
+ return ERR_PTR(-EOPNOTSUPP);
|
||||
+
|
||||
+#ifndef CONFIG_CIFS_XATTR
|
||||
+ if (xattr_iov)
|
||||
+ return ERR_PTR(-EOPNOTSUPP);
|
||||
+#endif
|
||||
+
|
||||
+ oparms = CIFS_OPARMS(cifs_sb, tcon, full_path,
|
||||
+ FILE_READ_ATTRIBUTES | FILE_WRITE_DATA | FILE_WRITE_EA,
|
||||
+ FILE_CREATE,
|
||||
+ (directory ? CREATE_NOT_FILE : CREATE_NOT_DIR) | OPEN_REPARSE_POINT,
|
||||
+ ACL_NO_MODE);
|
||||
+ oparms.fid = &fid;
|
||||
+
|
||||
+ rc = CIFS_open(xid, &oparms, &oplock, NULL);
|
||||
+ if (rc)
|
||||
+ return ERR_PTR(rc);
|
||||
+
|
||||
+#ifdef CONFIG_CIFS_XATTR
|
||||
+ if (xattr_iov) {
|
||||
+ struct smb2_file_full_ea_info *ea;
|
||||
+
|
||||
+ ea = &((struct smb2_create_ea_ctx *)xattr_iov->iov_base)->ea;
|
||||
+ while (1) {
|
||||
+ rc = CIFSSMBSetEA(xid,
|
||||
+ tcon,
|
||||
+ full_path,
|
||||
+ &ea->ea_data[0],
|
||||
+ &ea->ea_data[ea->ea_name_length+1],
|
||||
+ le16_to_cpu(ea->ea_value_length),
|
||||
+ cifs_sb->local_nls,
|
||||
+ cifs_sb);
|
||||
+ if (rc)
|
||||
+ goto out_close;
|
||||
+ if (le32_to_cpu(ea->next_entry_offset) == 0)
|
||||
+ break;
|
||||
+ ea = (struct smb2_file_full_ea_info *)((u8 *)ea +
|
||||
+ le32_to_cpu(ea->next_entry_offset));
|
||||
+ }
|
||||
+ }
|
||||
+#endif
|
||||
+
|
||||
+ rc = smb_init(SMB_COM_NT_TRANSACT, 23, tcon, (void **)&io_req, NULL);
|
||||
+ if (rc)
|
||||
+ goto out_close;
|
||||
+
|
||||
+ inc_rfc1001_len(io_req, sizeof(io_req->Pad));
|
||||
+
|
||||
+ io_req_len = be32_to_cpu(io_req->hdr.smb_buf_length) + sizeof(io_req->hdr.smb_buf_length);
|
||||
+
|
||||
+ /* NT IOCTL response contains one-word long output setup buffer with size of output data. */
|
||||
+ io_req->MaxSetupCount = 1;
|
||||
+ /* NT IOCTL response does not contain output parameters. */
|
||||
+ io_req->MaxParameterCount = cpu_to_le32(0);
|
||||
+ /* FSCTL_SET_REPARSE_POINT response contains empty output data. */
|
||||
+ io_req->MaxDataCount = cpu_to_le32(0);
|
||||
+
|
||||
+ io_req->TotalParameterCount = cpu_to_le32(0);
|
||||
+ io_req->TotalDataCount = cpu_to_le32(reparse_iov->iov_len);
|
||||
+ io_req->ParameterCount = io_req->TotalParameterCount;
|
||||
+ io_req->ParameterOffset = cpu_to_le32(0);
|
||||
+ io_req->DataCount = io_req->TotalDataCount;
|
||||
+ io_req->DataOffset = cpu_to_le32(offsetof(typeof(*io_req), Data) -
|
||||
+ sizeof(io_req->hdr.smb_buf_length));
|
||||
+ io_req->SetupCount = 4;
|
||||
+ io_req->SubCommand = cpu_to_le16(NT_TRANSACT_IOCTL);
|
||||
+ io_req->FunctionCode = cpu_to_le32(FSCTL_SET_REPARSE_POINT);
|
||||
+ io_req->Fid = fid.netfid;
|
||||
+ io_req->IsFsctl = 1;
|
||||
+ io_req->IsRootFlag = 0;
|
||||
+ io_req->ByteCount = cpu_to_le16(le32_to_cpu(io_req->DataCount) + sizeof(io_req->Pad));
|
||||
+
|
||||
+ inc_rfc1001_len(io_req, reparse_iov->iov_len);
|
||||
+
|
||||
+ in_iov[0].iov_base = (char *)io_req;
|
||||
+ in_iov[0].iov_len = io_req_len;
|
||||
+ in_iov[1] = *reparse_iov;
|
||||
+ rc = SendReceive2(xid, tcon->ses, in_iov, ARRAY_SIZE(in_iov), &buf_type,
|
||||
+ CIFS_NO_RSP_BUF, &out_iov);
|
||||
+
|
||||
+ cifs_buf_release(io_req);
|
||||
+
|
||||
+ if (!rc)
|
||||
+ rc = cifs_get_inode_info(&new, full_path, data, sb, xid, NULL);
|
||||
+
|
||||
+out_close:
|
||||
+ CIFSSMBClose(xid, tcon, fid.netfid);
|
||||
+
|
||||
+ /*
|
||||
+ * If CREATE was successful but FSCTL_SET_REPARSE_POINT failed then
|
||||
+ * remove the intermediate object created by CREATE. Otherwise
|
||||
+ * empty object stay on the server when reparse call failed.
|
||||
+ */
|
||||
+ if (rc)
|
||||
+ CIFSSMBDelFile(xid, tcon, full_path, cifs_sb, NULL);
|
||||
+
|
||||
+ return rc ? ERR_PTR(rc) : new;
|
||||
+}
|
||||
+
|
||||
int
|
||||
CIFSSMB_set_compression(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
__u16 fid)
|
||||
--- a/fs/smb/client/link.c
|
||||
+++ b/fs/smb/client/link.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "smb2proto.h"
|
||||
#include "cifs_ioctl.h"
|
||||
#include "fs_context.h"
|
||||
+#include "reparse.h"
|
||||
|
||||
/*
|
||||
* M-F Symlink Functions - Begin
|
||||
@@ -570,7 +571,6 @@ cifs_symlink(struct mnt_idmap *idmap, st
|
||||
int rc = -EOPNOTSUPP;
|
||||
unsigned int xid;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
|
||||
- struct TCP_Server_Info *server;
|
||||
struct tcon_link *tlink;
|
||||
struct cifs_tcon *pTcon;
|
||||
const char *full_path;
|
||||
@@ -593,7 +593,6 @@ cifs_symlink(struct mnt_idmap *idmap, st
|
||||
goto symlink_exit;
|
||||
}
|
||||
pTcon = tlink_tcon(tlink);
|
||||
- server = cifs_pick_channel(pTcon->ses);
|
||||
|
||||
full_path = build_path_from_dentry(direntry, page);
|
||||
if (IS_ERR(full_path)) {
|
||||
@@ -636,13 +635,9 @@ cifs_symlink(struct mnt_idmap *idmap, st
|
||||
case CIFS_SYMLINK_TYPE_NATIVE:
|
||||
case CIFS_SYMLINK_TYPE_NFS:
|
||||
case CIFS_SYMLINK_TYPE_WSL:
|
||||
- if (server->ops->create_reparse_symlink &&
|
||||
- (le32_to_cpu(pTcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS)) {
|
||||
- rc = server->ops->create_reparse_symlink(xid, inode,
|
||||
- direntry,
|
||||
- pTcon,
|
||||
- full_path,
|
||||
- symname);
|
||||
+ if (le32_to_cpu(pTcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
|
||||
+ rc = create_reparse_symlink(xid, inode, direntry, pTcon,
|
||||
+ full_path, symname);
|
||||
goto symlink_exit;
|
||||
}
|
||||
break;
|
||||
--- a/fs/smb/client/reparse.c
|
||||
+++ b/fs/smb/client/reparse.c
|
||||
@@ -34,7 +34,7 @@ static int detect_directory_symlink_targ
|
||||
const char *symname,
|
||||
bool *directory);
|
||||
|
||||
-int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
|
||||
+int create_reparse_symlink(const unsigned int xid, struct inode *inode,
|
||||
struct dentry *dentry, struct cifs_tcon *tcon,
|
||||
const char *full_path, const char *symname)
|
||||
{
|
||||
@@ -227,7 +227,8 @@ static int create_native_symlink(const u
|
||||
|
||||
iov.iov_base = buf;
|
||||
iov.iov_len = len;
|
||||
- new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
|
||||
+ new = tcon->ses->server->ops->create_reparse_inode(
|
||||
+ &data, inode->i_sb, xid,
|
||||
tcon, full_path, directory,
|
||||
&iov, NULL);
|
||||
if (!IS_ERR(new))
|
||||
@@ -399,7 +400,8 @@ static int create_native_socket(const un
|
||||
struct inode *new;
|
||||
int rc = 0;
|
||||
|
||||
- new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
|
||||
+ new = tcon->ses->server->ops->create_reparse_inode(
|
||||
+ &data, inode->i_sb, xid,
|
||||
tcon, full_path, false, &iov, NULL);
|
||||
if (!IS_ERR(new))
|
||||
d_instantiate(dentry, new);
|
||||
@@ -492,7 +494,8 @@ static int mknod_nfs(unsigned int xid, s
|
||||
.symlink_target = kstrdup(symname, GFP_KERNEL),
|
||||
};
|
||||
|
||||
- new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
|
||||
+ new = tcon->ses->server->ops->create_reparse_inode(
|
||||
+ &data, inode->i_sb, xid,
|
||||
tcon, full_path, false, &iov, NULL);
|
||||
if (!IS_ERR(new))
|
||||
d_instantiate(dentry, new);
|
||||
@@ -685,7 +688,8 @@ static int mknod_wsl(unsigned int xid, s
|
||||
memcpy(data.wsl.eas, &cc->ea, len);
|
||||
data.wsl.eas_len = len;
|
||||
|
||||
- new = smb2_get_reparse_inode(&data, inode->i_sb,
|
||||
+ new = tcon->ses->server->ops->create_reparse_inode(
|
||||
+ &data, inode->i_sb,
|
||||
xid, tcon, full_path, false,
|
||||
&reparse_iov, &xattr_iov);
|
||||
if (!IS_ERR(new))
|
||||
@@ -698,7 +702,7 @@ static int mknod_wsl(unsigned int xid, s
|
||||
return rc;
|
||||
}
|
||||
|
||||
-int smb2_mknod_reparse(unsigned int xid, struct inode *inode,
|
||||
+int mknod_reparse(unsigned int xid, struct inode *inode,
|
||||
struct dentry *dentry, struct cifs_tcon *tcon,
|
||||
const char *full_path, umode_t mode, dev_t dev)
|
||||
{
|
||||
--- a/fs/smb/client/reparse.h
|
||||
+++ b/fs/smb/client/reparse.h
|
||||
@@ -129,10 +129,10 @@ static inline bool cifs_open_data_repars
|
||||
bool cifs_reparse_point_to_fattr(struct cifs_sb_info *cifs_sb,
|
||||
struct cifs_fattr *fattr,
|
||||
struct cifs_open_info_data *data);
|
||||
-int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
|
||||
+int create_reparse_symlink(const unsigned int xid, struct inode *inode,
|
||||
struct dentry *dentry, struct cifs_tcon *tcon,
|
||||
const char *full_path, const char *symname);
|
||||
-int smb2_mknod_reparse(unsigned int xid, struct inode *inode,
|
||||
+int mknod_reparse(unsigned int xid, struct inode *inode,
|
||||
struct dentry *dentry, struct cifs_tcon *tcon,
|
||||
const char *full_path, umode_t mode, dev_t dev);
|
||||
struct reparse_data_buffer *smb2_get_reparse_point_buffer(const struct kvec *rsp_iov, u32 *len);
|
||||
--- a/fs/smb/client/smb1ops.c
|
||||
+++ b/fs/smb/client/smb1ops.c
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "fs_context.h"
|
||||
#include "nterr.h"
|
||||
#include "smberr.h"
|
||||
+#include "reparse.h"
|
||||
|
||||
/*
|
||||
* An NT cancel request header looks just like the original request except:
|
||||
@@ -1263,17 +1264,26 @@ cifs_make_node(unsigned int xid, struct
|
||||
if (rc == 0)
|
||||
d_instantiate(dentry, newinode);
|
||||
return rc;
|
||||
+ } else if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
|
||||
+ /*
|
||||
+ * Check if mounted with mount parm 'sfu' mount parm.
|
||||
+ * SFU emulation should work with all servers
|
||||
+ * and was used by default in earlier versions of Windows.
|
||||
+ */
|
||||
+ return cifs_sfu_make_node(xid, inode, dentry, tcon,
|
||||
+ full_path, mode, dev);
|
||||
+ } else if (le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
|
||||
+ /*
|
||||
+ * mknod via reparse points requires server support for
|
||||
+ * storing reparse points, which is available since
|
||||
+ * Windows 2000, but was not widely used until release
|
||||
+ * of Windows Server 2012 by the Windows NFS server.
|
||||
+ */
|
||||
+ return mknod_reparse(xid, inode, dentry, tcon,
|
||||
+ full_path, mode, dev);
|
||||
+ } else {
|
||||
+ return -EOPNOTSUPP;
|
||||
}
|
||||
- /*
|
||||
- * Check if mounted with mount parm 'sfu' mount parm.
|
||||
- * SFU emulation should work with all servers, but only
|
||||
- * supports block and char device, socket & fifo,
|
||||
- * and was used by default in earlier versions of Windows
|
||||
- */
|
||||
- if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL))
|
||||
- return -EPERM;
|
||||
- return cifs_sfu_make_node(xid, inode, dentry, tcon,
|
||||
- full_path, mode, dev);
|
||||
}
|
||||
|
||||
static bool
|
||||
@@ -1370,6 +1380,7 @@ struct smb_version_operations smb1_opera
|
||||
.create_hardlink = CIFSCreateHardLink,
|
||||
.query_symlink = cifs_query_symlink,
|
||||
.get_reparse_point_buffer = cifs_get_reparse_point_buffer,
|
||||
+ .create_reparse_inode = cifs_create_reparse_inode,
|
||||
.open = cifs_open_file,
|
||||
.set_fid = cifs_set_fid,
|
||||
.close = cifs_close_file,
|
||||
--- a/fs/smb/client/smb2inode.c
|
||||
+++ b/fs/smb/client/smb2inode.c
|
||||
@@ -1323,7 +1323,7 @@ smb2_set_file_info(struct inode *inode,
|
||||
return rc;
|
||||
}
|
||||
|
||||
-struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
|
||||
+struct inode *smb2_create_reparse_inode(struct cifs_open_info_data *data,
|
||||
struct super_block *sb,
|
||||
const unsigned int xid,
|
||||
struct cifs_tcon *tcon,
|
||||
--- a/fs/smb/client/smb2ops.c
|
||||
+++ b/fs/smb/client/smb2ops.c
|
||||
@@ -5271,7 +5271,7 @@ static int smb2_make_node(unsigned int x
|
||||
full_path, mode, dev);
|
||||
} else if ((le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS)
|
||||
|| (tcon->posix_extensions)) {
|
||||
- rc = smb2_mknod_reparse(xid, inode, dentry, tcon,
|
||||
+ rc = mknod_reparse(xid, inode, dentry, tcon,
|
||||
full_path, mode, dev);
|
||||
}
|
||||
return rc;
|
||||
@@ -5330,7 +5330,7 @@ struct smb_version_operations smb20_oper
|
||||
.get_reparse_point_buffer = smb2_get_reparse_point_buffer,
|
||||
.query_mf_symlink = smb3_query_mf_symlink,
|
||||
.create_mf_symlink = smb3_create_mf_symlink,
|
||||
- .create_reparse_symlink = smb2_create_reparse_symlink,
|
||||
+ .create_reparse_inode = smb2_create_reparse_inode,
|
||||
.open = smb2_open_file,
|
||||
.set_fid = smb2_set_fid,
|
||||
.close = smb2_close_file,
|
||||
@@ -5433,7 +5433,7 @@ struct smb_version_operations smb21_oper
|
||||
.get_reparse_point_buffer = smb2_get_reparse_point_buffer,
|
||||
.query_mf_symlink = smb3_query_mf_symlink,
|
||||
.create_mf_symlink = smb3_create_mf_symlink,
|
||||
- .create_reparse_symlink = smb2_create_reparse_symlink,
|
||||
+ .create_reparse_inode = smb2_create_reparse_inode,
|
||||
.open = smb2_open_file,
|
||||
.set_fid = smb2_set_fid,
|
||||
.close = smb2_close_file,
|
||||
@@ -5540,7 +5540,7 @@ struct smb_version_operations smb30_oper
|
||||
.get_reparse_point_buffer = smb2_get_reparse_point_buffer,
|
||||
.query_mf_symlink = smb3_query_mf_symlink,
|
||||
.create_mf_symlink = smb3_create_mf_symlink,
|
||||
- .create_reparse_symlink = smb2_create_reparse_symlink,
|
||||
+ .create_reparse_inode = smb2_create_reparse_inode,
|
||||
.open = smb2_open_file,
|
||||
.set_fid = smb2_set_fid,
|
||||
.close = smb2_close_file,
|
||||
@@ -5656,7 +5656,7 @@ struct smb_version_operations smb311_ope
|
||||
.get_reparse_point_buffer = smb2_get_reparse_point_buffer,
|
||||
.query_mf_symlink = smb3_query_mf_symlink,
|
||||
.create_mf_symlink = smb3_create_mf_symlink,
|
||||
- .create_reparse_symlink = smb2_create_reparse_symlink,
|
||||
+ .create_reparse_inode = smb2_create_reparse_inode,
|
||||
.open = smb2_open_file,
|
||||
.set_fid = smb2_set_fid,
|
||||
.close = smb2_close_file,
|
||||
--- a/fs/smb/client/smb2proto.h
|
||||
+++ b/fs/smb/client/smb2proto.h
|
||||
@@ -54,7 +54,7 @@ extern int smb3_handle_read_data(struct
|
||||
extern int smb2_query_reparse_tag(const unsigned int xid, struct cifs_tcon *tcon,
|
||||
struct cifs_sb_info *cifs_sb, const char *path,
|
||||
__u32 *reparse_tag);
|
||||
-struct inode *smb2_get_reparse_inode(struct cifs_open_info_data *data,
|
||||
+struct inode *smb2_create_reparse_inode(struct cifs_open_info_data *data,
|
||||
struct super_block *sb,
|
||||
const unsigned int xid,
|
||||
struct cifs_tcon *tcon,
|
||||
@@ -314,9 +314,6 @@ int smb311_posix_query_path_info(const u
|
||||
int posix_info_parse(const void *beg, const void *end,
|
||||
struct smb2_posix_info_parsed *out);
|
||||
int posix_info_sid_size(const void *beg, const void *end);
|
||||
-int smb2_create_reparse_symlink(const unsigned int xid, struct inode *inode,
|
||||
- struct dentry *dentry, struct cifs_tcon *tcon,
|
||||
- const char *full_path, const char *symname);
|
||||
int smb2_make_nfs_node(unsigned int xid, struct inode *inode,
|
||||
struct dentry *dentry, struct cifs_tcon *tcon,
|
||||
const char *full_path, umode_t mode, dev_t dev);
|
109
debian/patches/patchset-pf/steady/0006-smb-client-fix-creating-symlinks-under-POSIX-mounts.patch
vendored
Normal file
109
debian/patches/patchset-pf/steady/0006-smb-client-fix-creating-symlinks-under-POSIX-mounts.patch
vendored
Normal file
@@ -0,0 +1,109 @@
|
||||
From c027b463e9389e4421b21f170128f35c0f2941b9 Mon Sep 17 00:00:00 2001
|
||||
From: Paulo Alcantara <pc@manguebit.org>
|
||||
Date: Thu, 31 Jul 2025 20:46:43 -0300
|
||||
Subject: smb: client: fix creating symlinks under POSIX mounts
|
||||
|
||||
SMB3.1.1 POSIX mounts support native symlinks that are created with
|
||||
IO_REPARSE_TAG_SYMLINK reparse points, so skip the checking of
|
||||
FILE_SUPPORTS_REPARSE_POINTS as some servers might not have it set.
|
||||
|
||||
Cc: linux-cifs@vger.kernel.org
|
||||
Cc: Ralph Boehme <slow@samba.org>
|
||||
Cc: David Howells <dhowells@redhat.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Reported-by: Matthew Richardson <m.richardson@ed.ac.uk>
|
||||
Closes: https://marc.info/?i=1124e7cd-6a46-40a6-9f44-b7664a66654b@ed.ac.uk
|
||||
Signed-off-by: Paulo Alcantara (Red Hat) <pc@manguebit.org>
|
||||
Signed-off-by: Steve French <stfrench@microsoft.com>
|
||||
---
|
||||
fs/smb/client/cifsglob.h | 5 +++++
|
||||
fs/smb/client/cifssmb.c | 4 ++--
|
||||
fs/smb/client/link.c | 2 +-
|
||||
fs/smb/client/smb1ops.c | 2 +-
|
||||
fs/smb/client/smb2inode.c | 5 ++---
|
||||
fs/smb/client/smb2ops.c | 5 ++---
|
||||
6 files changed, 13 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/fs/smb/client/cifsglob.h
|
||||
+++ b/fs/smb/client/cifsglob.h
|
||||
@@ -2377,4 +2377,9 @@ static inline bool cifs_netbios_name(con
|
||||
return ret;
|
||||
}
|
||||
|
||||
+#define CIFS_REPARSE_SUPPORT(tcon) \
|
||||
+ ((tcon)->posix_extensions || \
|
||||
+ (le32_to_cpu((tcon)->fsAttrInfo.Attributes) & \
|
||||
+ FILE_SUPPORTS_REPARSE_POINTS))
|
||||
+
|
||||
#endif /* _CIFS_GLOB_H */
|
||||
--- a/fs/smb/client/cifssmb.c
|
||||
+++ b/fs/smb/client/cifssmb.c
|
||||
@@ -2751,7 +2751,7 @@ int cifs_query_reparse_point(const unsig
|
||||
if (cap_unix(tcon->ses))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
- if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
|
||||
+ if (!CIFS_REPARSE_SUPPORT(tcon))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
oparms = (struct cifs_open_parms) {
|
||||
@@ -2879,7 +2879,7 @@ struct inode *cifs_create_reparse_inode(
|
||||
* attempt to create reparse point. This will prevent creating unusable
|
||||
* empty object on the server.
|
||||
*/
|
||||
- if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
|
||||
+ if (!CIFS_REPARSE_SUPPORT(tcon))
|
||||
return ERR_PTR(-EOPNOTSUPP);
|
||||
|
||||
#ifndef CONFIG_CIFS_XATTR
|
||||
--- a/fs/smb/client/link.c
|
||||
+++ b/fs/smb/client/link.c
|
||||
@@ -635,7 +635,7 @@ cifs_symlink(struct mnt_idmap *idmap, st
|
||||
case CIFS_SYMLINK_TYPE_NATIVE:
|
||||
case CIFS_SYMLINK_TYPE_NFS:
|
||||
case CIFS_SYMLINK_TYPE_WSL:
|
||||
- if (le32_to_cpu(pTcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
|
||||
+ if (CIFS_REPARSE_SUPPORT(pTcon)) {
|
||||
rc = create_reparse_symlink(xid, inode, direntry, pTcon,
|
||||
full_path, symname);
|
||||
goto symlink_exit;
|
||||
--- a/fs/smb/client/smb1ops.c
|
||||
+++ b/fs/smb/client/smb1ops.c
|
||||
@@ -1272,7 +1272,7 @@ cifs_make_node(unsigned int xid, struct
|
||||
*/
|
||||
return cifs_sfu_make_node(xid, inode, dentry, tcon,
|
||||
full_path, mode, dev);
|
||||
- } else if (le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS) {
|
||||
+ } else if (CIFS_REPARSE_SUPPORT(tcon)) {
|
||||
/*
|
||||
* mknod via reparse points requires server support for
|
||||
* storing reparse points, which is available since
|
||||
--- a/fs/smb/client/smb2inode.c
|
||||
+++ b/fs/smb/client/smb2inode.c
|
||||
@@ -1348,9 +1348,8 @@ struct inode *smb2_create_reparse_inode(
|
||||
* attempt to create reparse point. This will prevent creating unusable
|
||||
* empty object on the server.
|
||||
*/
|
||||
- if (!(le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS))
|
||||
- if (!tcon->posix_extensions)
|
||||
- return ERR_PTR(-EOPNOTSUPP);
|
||||
+ if (!CIFS_REPARSE_SUPPORT(tcon))
|
||||
+ return ERR_PTR(-EOPNOTSUPP);
|
||||
|
||||
oparms = CIFS_OPARMS(cifs_sb, tcon, full_path,
|
||||
SYNCHRONIZE | DELETE |
|
||||
--- a/fs/smb/client/smb2ops.c
|
||||
+++ b/fs/smb/client/smb2ops.c
|
||||
@@ -5269,10 +5269,9 @@ static int smb2_make_node(unsigned int x
|
||||
if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_UNX_EMUL) {
|
||||
rc = cifs_sfu_make_node(xid, inode, dentry, tcon,
|
||||
full_path, mode, dev);
|
||||
- } else if ((le32_to_cpu(tcon->fsAttrInfo.Attributes) & FILE_SUPPORTS_REPARSE_POINTS)
|
||||
- || (tcon->posix_extensions)) {
|
||||
+ } else if (CIFS_REPARSE_SUPPORT(tcon)) {
|
||||
rc = mknod_reparse(xid, inode, dentry, tcon,
|
||||
- full_path, mode, dev);
|
||||
+ full_path, mode, dev);
|
||||
}
|
||||
return rc;
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
From d2a99ecf2d0479f78a21568eee08f4ca27652629 Mon Sep 17 00:00:00 2001
|
||||
From: Guenter Roeck <linux@roeck-us.net>
|
||||
Date: Sun, 17 Aug 2025 07:48:17 -0700
|
||||
Subject: watchdog: intel_oc_wdt: Do not try to write into const memory
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
The code tries to update the intel_oc_wdt_info data structure if the
|
||||
watchdog is locked. That data structure is marked as const and can not
|
||||
be written into. Copy it into struct intel_oc_wdt and modify it there
|
||||
to fix the problem.
|
||||
|
||||
Reported-by: Petar Kulić <cooleech@gmail.com>
|
||||
Cc: Diogo Ivo <diogo.ivo@siemens.com>
|
||||
Fixes: 535d1784d8a9 ("watchdog: Add driver for Intel OC WDT")
|
||||
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
||||
---
|
||||
drivers/watchdog/intel_oc_wdt.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/watchdog/intel_oc_wdt.c
|
||||
+++ b/drivers/watchdog/intel_oc_wdt.c
|
||||
@@ -41,6 +41,7 @@
|
||||
struct intel_oc_wdt {
|
||||
struct watchdog_device wdd;
|
||||
struct resource *ctrl_res;
|
||||
+ struct watchdog_info info;
|
||||
bool locked;
|
||||
};
|
||||
|
||||
@@ -115,7 +116,6 @@ static const struct watchdog_ops intel_o
|
||||
|
||||
static int intel_oc_wdt_setup(struct intel_oc_wdt *oc_wdt)
|
||||
{
|
||||
- struct watchdog_info *info;
|
||||
unsigned long val;
|
||||
|
||||
val = inl(INTEL_OC_WDT_CTRL_REG(oc_wdt));
|
||||
@@ -134,7 +134,6 @@ static int intel_oc_wdt_setup(struct int
|
||||
set_bit(WDOG_HW_RUNNING, &oc_wdt->wdd.status);
|
||||
|
||||
if (oc_wdt->locked) {
|
||||
- info = (struct watchdog_info *)&intel_oc_wdt_info;
|
||||
/*
|
||||
* Set nowayout unconditionally as we cannot stop
|
||||
* the watchdog.
|
||||
@@ -145,7 +144,7 @@ static int intel_oc_wdt_setup(struct int
|
||||
* and inform the core we can't change it.
|
||||
*/
|
||||
oc_wdt->wdd.timeout = (val & INTEL_OC_WDT_TOV) + 1;
|
||||
- info->options &= ~WDIOF_SETTIMEOUT;
|
||||
+ oc_wdt->info.options &= ~WDIOF_SETTIMEOUT;
|
||||
|
||||
dev_info(oc_wdt->wdd.parent,
|
||||
"Register access locked, heartbeat fixed at: %u s\n",
|
||||
@@ -193,7 +192,8 @@ static int intel_oc_wdt_probe(struct pla
|
||||
wdd->min_timeout = INTEL_OC_WDT_MIN_TOV;
|
||||
wdd->max_timeout = INTEL_OC_WDT_MAX_TOV;
|
||||
wdd->timeout = INTEL_OC_WDT_DEF_TOV;
|
||||
- wdd->info = &intel_oc_wdt_info;
|
||||
+ oc_wdt->info = intel_oc_wdt_info;
|
||||
+ wdd->info = &oc_wdt->info;
|
||||
wdd->ops = &intel_oc_wdt_ops;
|
||||
wdd->parent = dev;
|
||||
|
@@ -0,0 +1,45 @@
|
||||
From b0eaacb0b9b0412916e3ca0c769f8aab34d82725 Mon Sep 17 00:00:00 2001
|
||||
From: Quanmin Yan <yanquanmin1@huawei.com>
|
||||
Date: Thu, 21 Aug 2025 20:55:55 +0800
|
||||
Subject: mm/damon/core: prevent unnecessary overflow in
|
||||
damos_set_effective_quota()
|
||||
|
||||
On 32-bit systems, the throughput calculation in
|
||||
damos_set_effective_quota() is prone to unnecessary multiplication
|
||||
overflow. Using mult_frac() to fix it.
|
||||
|
||||
Andrew Paniakin also recently found and privately reported this issue, on
|
||||
64 bit systems. This can also happen on 64-bit systems, once the charged
|
||||
size exceeds ~17 TiB. On systems running for long time in production,
|
||||
this issue can actually happen.
|
||||
|
||||
More specifically, when a DAMOS scheme having the time quota run for
|
||||
longtime, throughput calculation can overflow and set esz too small. As a
|
||||
result, speed of the scheme get unexpectedly slow.
|
||||
|
||||
Link: https://lkml.kernel.org/r/20250821125555.3020951-1-yanquanmin1@huawei.com
|
||||
Fixes: 1cd243030059 ("mm/damon/schemes: implement time quota")
|
||||
Signed-off-by: Quanmin Yan <yanquanmin1@huawei.com>
|
||||
Reported-by: Andrew Paniakin <apanyaki@amazon.com>
|
||||
Reviewed-by: SeongJae Park <sj@kernel.org>
|
||||
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
|
||||
Cc: ze zuo <zuoze1@huawei.com>
|
||||
Cc: <stable@vger.kernel.org> [5.16+]
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
mm/damon/core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/mm/damon/core.c
|
||||
+++ b/mm/damon/core.c
|
||||
@@ -2026,8 +2026,8 @@ static void damos_set_effective_quota(st
|
||||
|
||||
if (quota->ms) {
|
||||
if (quota->total_charged_ns)
|
||||
- throughput = quota->total_charged_sz * 1000000 /
|
||||
- quota->total_charged_ns;
|
||||
+ throughput = mult_frac(quota->total_charged_sz, 1000000,
|
||||
+ quota->total_charged_ns);
|
||||
else
|
||||
throughput = PAGE_SIZE * 1024;
|
||||
esz = min(throughput * quota->ms, esz);
|
55
debian/patches/patchset-pf/steady/0009-iwlwifi-Patch-to-fix-130-1030.patch
vendored
Normal file
55
debian/patches/patchset-pf/steady/0009-iwlwifi-Patch-to-fix-130-1030.patch
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
From fdafd071d48a1f425b54882acf2e4d08163e85b2 Mon Sep 17 00:00:00 2001
|
||||
From: "Jan Alexander Steffens (heftig)" <heftig@archlinux.org>
|
||||
Date: Fri, 5 Sep 2025 01:08:14 +0200
|
||||
Subject: iwlwifi: Patch to fix 130/1030
|
||||
|
||||
Apply Johannes Berg's patch for BKO 220472.
|
||||
|
||||
See: https://bugzilla.kernel.org/show_bug.cgi?id=220472
|
||||
Cherry-picked-for: https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/issues/153
|
||||
---
|
||||
drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 26 +++++++++----------
|
||||
1 file changed, 13 insertions(+), 13 deletions(-)
|
||||
|
||||
--- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
+++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c
|
||||
@@ -124,13 +124,13 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct pc
|
||||
{IWL_PCI_DEVICE(0x0082, 0x1304, iwl6005_mac_cfg)},/* low 5GHz active */
|
||||
{IWL_PCI_DEVICE(0x0082, 0x1305, iwl6005_mac_cfg)},/* high 5GHz active */
|
||||
|
||||
-/* 6x30 Series */
|
||||
- {IWL_PCI_DEVICE(0x008A, 0x5305, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x008A, 0x5307, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x008A, 0x5325, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x008A, 0x5327, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x008B, 0x5315, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x008B, 0x5317, iwl1000_mac_cfg)},
|
||||
+/* 1030/6x30 Series */
|
||||
+ {IWL_PCI_DEVICE(0x008A, 0x5305, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x008A, 0x5307, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x008A, 0x5325, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x008A, 0x5327, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x008B, 0x5315, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x008B, 0x5317, iwl6030_mac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x0090, 0x5211, iwl6030_mac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x0090, 0x5215, iwl6030_mac_cfg)},
|
||||
{IWL_PCI_DEVICE(0x0090, 0x5216, iwl6030_mac_cfg)},
|
||||
@@ -181,12 +181,12 @@ VISIBLE_IF_IWLWIFI_KUNIT const struct pc
|
||||
{IWL_PCI_DEVICE(0x08AE, 0x1027, iwl1000_mac_cfg)},
|
||||
|
||||
/* 130 Series WiFi */
|
||||
- {IWL_PCI_DEVICE(0x0896, 0x5005, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x0896, 0x5007, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x0897, 0x5015, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x0897, 0x5017, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x0896, 0x5025, iwl1000_mac_cfg)},
|
||||
- {IWL_PCI_DEVICE(0x0896, 0x5027, iwl1000_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x0896, 0x5005, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x0896, 0x5007, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x0897, 0x5015, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x0897, 0x5017, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x0896, 0x5025, iwl6030_mac_cfg)},
|
||||
+ {IWL_PCI_DEVICE(0x0896, 0x5027, iwl6030_mac_cfg)},
|
||||
|
||||
/* 2x00 Series */
|
||||
{IWL_PCI_DEVICE(0x0890, 0x4022, iwl2000_mac_cfg)},
|
@@ -0,0 +1,31 @@
|
||||
From 862ed307cdb6281d669ac6a3124b109bac9d401c Mon Sep 17 00:00:00 2001
|
||||
From: Amir Goldstein <amir73il@gmail.com>
|
||||
Date: Thu, 10 Jul 2025 12:08:30 +0200
|
||||
Subject: fuse: do not allow mapping a non-regular backing file
|
||||
|
||||
We do not support passthrough operations other than read/write on
|
||||
regular file, so allowing non-regular backing files makes no sense.
|
||||
|
||||
Fixes: efad7153bf93 ("fuse: allow O_PATH fd for FUSE_DEV_IOC_BACKING_OPEN")
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Amir Goldstein <amir73il@gmail.com>
|
||||
Reviewed-by: Bernd Schubert <bschubert@ddn.com>
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
||||
---
|
||||
fs/fuse/passthrough.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
--- a/fs/fuse/passthrough.c
|
||||
+++ b/fs/fuse/passthrough.c
|
||||
@@ -237,6 +237,11 @@ int fuse_backing_open(struct fuse_conn *
|
||||
if (!file)
|
||||
goto out;
|
||||
|
||||
+ /* read/write/splice/mmap passthrough only relevant for regular files */
|
||||
+ res = d_is_dir(file->f_path.dentry) ? -EISDIR : -EINVAL;
|
||||
+ if (!d_is_reg(file->f_path.dentry))
|
||||
+ goto out_fput;
|
||||
+
|
||||
backing_sb = file_inode(file)->i_sb;
|
||||
res = -ELOOP;
|
||||
if (backing_sb->s_stack_depth >= fc->max_stack_depth)
|
@@ -0,0 +1,29 @@
|
||||
From a8da10d61b16a9c719708b07bce976afce86f372 Mon Sep 17 00:00:00 2001
|
||||
From: Miklos Szeredi <mszeredi@redhat.com>
|
||||
Date: Tue, 12 Aug 2025 14:07:54 +0200
|
||||
Subject: fuse: check if copy_file_range() returns larger than requested size
|
||||
|
||||
Just like write(), copy_file_range() should check if the return value is
|
||||
less or equal to the requested number of bytes.
|
||||
|
||||
Reported-by: Chunsheng Luo <luochunsheng@ustc.edu>
|
||||
Closes: https://lore.kernel.org/all/20250807062425.694-1-luochunsheng@ustc.edu/
|
||||
Fixes: 88bc7d5097a1 ("fuse: add support for copy_file_range()")
|
||||
Cc: <stable@vger.kernel.org> # v4.20
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
||||
---
|
||||
fs/fuse/file.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
--- a/fs/fuse/file.c
|
||||
+++ b/fs/fuse/file.c
|
||||
@@ -3079,6 +3079,9 @@ static ssize_t __fuse_copy_file_range(st
|
||||
fc->no_copy_file_range = 1;
|
||||
err = -EOPNOTSUPP;
|
||||
}
|
||||
+ if (!err && outarg.size > len)
|
||||
+ err = -EIO;
|
||||
+
|
||||
if (err)
|
||||
goto out;
|
||||
|
@@ -0,0 +1,33 @@
|
||||
From 2f371362d8ae6573b5b7bbc1b4fd8a100b11c5dc Mon Sep 17 00:00:00 2001
|
||||
From: Miklos Szeredi <mszeredi@redhat.com>
|
||||
Date: Tue, 12 Aug 2025 14:46:34 +0200
|
||||
Subject: fuse: prevent overflow in copy_file_range return value
|
||||
|
||||
The FUSE protocol uses struct fuse_write_out to convey the return value of
|
||||
copy_file_range, which is restricted to uint32_t. But the COPY_FILE_RANGE
|
||||
interface supports a 64-bit size copies.
|
||||
|
||||
Currently the number of bytes copied is silently truncated to 32-bit, which
|
||||
may result in poor performance or even failure to copy in case of
|
||||
truncation to zero.
|
||||
|
||||
Reported-by: Florian Weimer <fweimer@redhat.com>
|
||||
Closes: https://lore.kernel.org/all/lhuh5ynl8z5.fsf@oldenburg.str.redhat.com/
|
||||
Fixes: 88bc7d5097a1 ("fuse: add support for copy_file_range()")
|
||||
Cc: <stable@vger.kernel.org> # v4.20
|
||||
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
|
||||
---
|
||||
fs/fuse/file.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/fs/fuse/file.c
|
||||
+++ b/fs/fuse/file.c
|
||||
@@ -3013,7 +3013,7 @@ static ssize_t __fuse_copy_file_range(st
|
||||
.nodeid_out = ff_out->nodeid,
|
||||
.fh_out = ff_out->fh,
|
||||
.off_out = pos_out,
|
||||
- .len = len,
|
||||
+ .len = min_t(size_t, len, UINT_MAX & PAGE_MASK),
|
||||
.flags = flags
|
||||
};
|
||||
struct fuse_write_out outarg;
|
@@ -46,7 +46,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
Binderfs is a pseudo-filesystem for the Android Binder IPC driver
|
||||
--- a/drivers/android/binder.c
|
||||
+++ b/drivers/android/binder.c
|
||||
@@ -7043,9 +7043,20 @@ err_alloc_device_names_failed:
|
||||
@@ -7107,9 +7107,20 @@ err_alloc_device_names_failed:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -185,7 +185,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
return container_of(ns, struct ipc_namespace, ns);
|
||||
--- a/mm/vmalloc.c
|
||||
+++ b/mm/vmalloc.c
|
||||
@@ -3190,6 +3190,7 @@ struct vm_struct *get_vm_area(unsigned l
|
||||
@@ -3231,6 +3231,7 @@ struct vm_struct *get_vm_area(unsigned l
|
||||
NUMA_NO_NODE, GFP_KERNEL,
|
||||
__builtin_return_address(0));
|
||||
}
|
||||
|
@@ -71,7 +71,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
wq_entry->flags = flags;
|
||||
--- a/net/ipv4/inet_connection_sock.c
|
||||
+++ b/net/ipv4/inet_connection_sock.c
|
||||
@@ -632,7 +632,7 @@ static int inet_csk_wait_for_connect(str
|
||||
@@ -629,7 +629,7 @@ static int inet_csk_wait_for_connect(str
|
||||
* having to remove and re-insert us on the wait queue.
|
||||
*/
|
||||
for (;;) {
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From a78b8dee94d4742c4696c55c0eec964802e812ac Mon Sep 17 00:00:00 2001
|
||||
From 5d06324b94cc7c38e4a7943c1a0f25b118819afc Mon Sep 17 00:00:00 2001
|
||||
From: Alexandre Frade <kernel@xanmod.org>
|
||||
Date: Mon, 27 Feb 2023 01:38:18 +0000
|
||||
Subject: [PATCH 1/2] netfilter: Add netfilter nf_tables fullcone support
|
||||
Subject: [PATCH] netfilter: Add netfilter nf_tables fullcone support
|
||||
|
||||
Signed-off-by: Syrone Wong <wong.syrone@gmail.com>
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
@@ -1482,9 +1482,9 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
+ enum ip_conntrack_info ctinfo;
|
||||
+ struct nf_conn_nat *nat;
|
||||
+ struct nf_conntrack_tuple *ct_tuple, *ct_tuple_origin;
|
||||
+ uint16_t port, original_port, want_port;
|
||||
+ uint16_t port, original_port, want_port = 0;
|
||||
+ uint8_t protonum;
|
||||
+ bool is_src_mapping_active;
|
||||
+ bool is_src_mapping_active = false;
|
||||
+
|
||||
+ /* NFPROTO specific def */
|
||||
+ struct nat_mapping *mapping, *src_mapping;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
From 242e385bcd49ee7ea5332b27864f81aab9b11718 Mon Sep 17 00:00:00 2001
|
||||
From b735384e46e7fe572615643b466ec6b3c410256a Mon Sep 17 00:00:00 2001
|
||||
From: Felix Fietkau <nbd@nbd.name>
|
||||
Date: Tue, 20 Feb 2018 15:56:02 +0100
|
||||
Subject: [PATCH 2/2] netfilter: add xt_FLOWOFFLOAD target
|
||||
Subject: [PATCH] netfilter: add xt_FLOWOFFLOAD target
|
||||
|
||||
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
@@ -11,8 +11,8 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
net/netfilter/Kconfig | 9 +
|
||||
net/netfilter/Makefile | 1 +
|
||||
net/netfilter/nf_flow_table_core.c | 5 +-
|
||||
net/netfilter/xt_FLOWOFFLOAD.c | 698 ++++++++++++++++++
|
||||
6 files changed, 732 insertions(+), 3 deletions(-)
|
||||
net/netfilter/xt_FLOWOFFLOAD.c | 701 ++++++++++++++++++
|
||||
6 files changed, 735 insertions(+), 3 deletions(-)
|
||||
create mode 100644 include/uapi/linux/netfilter/xt_FLOWOFFLOAD.h
|
||||
create mode 100644 net/netfilter/xt_FLOWOFFLOAD.c
|
||||
|
||||
@@ -108,7 +108,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
{
|
||||
--- /dev/null
|
||||
+++ b/net/netfilter/xt_FLOWOFFLOAD.c
|
||||
@@ -0,0 +1,698 @@
|
||||
@@ -0,0 +1,701 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2018-2021 Felix Fietkau <nbd@nbd.name>
|
||||
+ *
|
||||
@@ -578,7 +578,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
+ const struct xt_flowoffload_target_info *info = par->targinfo;
|
||||
+ struct tcphdr _tcph, *tcph = NULL;
|
||||
+ enum ip_conntrack_info ctinfo;
|
||||
+ enum ip_conntrack_dir dir;
|
||||
+ enum ip_conntrack_dir dir = IP_CT_DIR_ORIGINAL;
|
||||
+ struct nf_flow_route route = {};
|
||||
+ struct flow_offload *flow = NULL;
|
||||
+ struct net_device *devs[2] = {};
|
||||
@@ -804,6 +804,9 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
+ nf_flow_table_free(&flowtable[1].ft);
|
||||
+}
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+module_init(xt_flowoffload_tg_init);
|
||||
+module_exit(xt_flowoffload_tg_exit);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_AUTHOR("Felix Fietkau <nbd@nbd.name>");
|
||||
+MODULE_DESCRIPTION("Netfilter FLOWOFFLOAD nf_flow_offload module");
|
||||
|
@@ -1,52 +0,0 @@
|
||||
From 1e164adec73236b05d5b84846a460082d3d211d2 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Tue, 11 Jun 2019 12:26:55 -0400
|
||||
Subject: [PATCH 01/18] net-tcp_bbr: broaden app-limited rate sample detection
|
||||
|
||||
This commit is a bug fix for the Linux TCP app-limited
|
||||
(application-limited) logic that is used for collecting rate
|
||||
(bandwidth) samples.
|
||||
|
||||
Previously the app-limited logic only looked for "bubbles" of
|
||||
silence in between application writes, by checking at the start
|
||||
of each sendmsg. But "bubbles" of silence can also happen before
|
||||
retransmits: e.g. bubbles can happen between an application write
|
||||
and a retransmit, or between two retransmits.
|
||||
|
||||
Retransmits are triggered by ACKs or timers. So this commit checks
|
||||
for bubbles of app-limited silence upon ACKs or timers.
|
||||
|
||||
Why does this commit check for app-limited state at the start of
|
||||
ACKs and timer handling? Because at that point we know whether
|
||||
inflight was fully using the cwnd. During processing the ACK or
|
||||
timer event we often change the cwnd; after changing the cwnd we
|
||||
can't know whether inflight was fully using the old cwnd.
|
||||
|
||||
Origin-9xx-SHA1: 3fe9b53291e018407780fb8c356adb5666722cbc
|
||||
Change-Id: I37221506f5166877c2b110753d39bb0757985e68
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
net/ipv4/tcp_input.c | 1 +
|
||||
net/ipv4/tcp_timer.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -4003,6 +4003,7 @@ static int tcp_ack(struct sock *sk, cons
|
||||
|
||||
prior_fack = tcp_is_sack(tp) ? tcp_highest_sack_seq(tp) : tp->snd_una;
|
||||
rs.prior_in_flight = tcp_packets_in_flight(tp);
|
||||
+ tcp_rate_check_app_limited(sk);
|
||||
|
||||
/* ts_recent update must be made after we are sure that the packet
|
||||
* is in window.
|
||||
--- a/net/ipv4/tcp_timer.c
|
||||
+++ b/net/ipv4/tcp_timer.c
|
||||
@@ -702,6 +702,7 @@ void tcp_write_timer_handler(struct sock
|
||||
icsk_timeout(icsk));
|
||||
return;
|
||||
}
|
||||
+ tcp_rate_check_app_limited(sk);
|
||||
tcp_mstamp_refresh(tcp_sk(sk));
|
||||
event = icsk->icsk_pending;
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,74 +0,0 @@
|
||||
From e02830baf6c32aceea6c0dfe8a0a4b96db171418 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Sun, 24 Jun 2018 21:55:59 -0400
|
||||
Subject: [PATCH 02/18] net-tcp_bbr: v2: shrink delivered_mstamp,
|
||||
first_tx_mstamp to u32 to free up 8 bytes
|
||||
|
||||
Free up some space for tracking inflight and losses for each
|
||||
bw sample, in upcoming commits.
|
||||
|
||||
These timestamps are in microseconds, and are now stored in 32
|
||||
bits. So they can only hold time intervals up to roughly 2^12 = 4096
|
||||
seconds. But Linux TCP RTT and RTO tracking has the same 32-bit
|
||||
microsecond implementation approach and resulting deployment
|
||||
limitations. So this is not introducing a new limit. And these should
|
||||
not be a limitation for the foreseeable future.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: 238a7e6b5d51625fef1ce7769826a7b21b02ae55
|
||||
Change-Id: I3b779603797263b52a61ad57c565eb91fe42680c
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 9 +++++++--
|
||||
net/ipv4/tcp_rate.c | 7 ++++---
|
||||
2 files changed, 11 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -945,6 +945,11 @@ static inline u32 tcp_stamp_us_delta(u64
|
||||
return max_t(s64, t1 - t0, 0);
|
||||
}
|
||||
|
||||
+static inline u32 tcp_stamp32_us_delta(u32 t1, u32 t0)
|
||||
+{
|
||||
+ return max_t(s32, t1 - t0, 0);
|
||||
+}
|
||||
+
|
||||
/* provide the departure time in us unit */
|
||||
static inline u64 tcp_skb_timestamp_us(const struct sk_buff *skb)
|
||||
{
|
||||
@@ -1043,9 +1048,9 @@ struct tcp_skb_cb {
|
||||
/* pkts S/ACKed so far upon tx of skb, incl retrans: */
|
||||
__u32 delivered;
|
||||
/* start of send pipeline phase */
|
||||
- u64 first_tx_mstamp;
|
||||
+ u32 first_tx_mstamp;
|
||||
/* when we reached the "delivered" count */
|
||||
- u64 delivered_mstamp;
|
||||
+ u32 delivered_mstamp;
|
||||
} tx; /* only used for outgoing skbs */
|
||||
union {
|
||||
struct inet_skb_parm h4;
|
||||
--- a/net/ipv4/tcp_rate.c
|
||||
+++ b/net/ipv4/tcp_rate.c
|
||||
@@ -101,8 +101,9 @@ void tcp_rate_skb_delivered(struct sock
|
||||
/* Record send time of most recently ACKed packet: */
|
||||
tp->first_tx_mstamp = tx_tstamp;
|
||||
/* Find the duration of the "send phase" of this window: */
|
||||
- rs->interval_us = tcp_stamp_us_delta(tp->first_tx_mstamp,
|
||||
- scb->tx.first_tx_mstamp);
|
||||
+ rs->interval_us = tcp_stamp32_us_delta(
|
||||
+ tp->first_tx_mstamp,
|
||||
+ scb->tx.first_tx_mstamp);
|
||||
|
||||
}
|
||||
/* Mark off the skb delivered once it's sacked to avoid being
|
||||
@@ -155,7 +156,7 @@ void tcp_rate_gen(struct sock *sk, u32 d
|
||||
* longer phase.
|
||||
*/
|
||||
snd_us = rs->interval_us; /* send phase */
|
||||
- ack_us = tcp_stamp_us_delta(tp->tcp_mstamp,
|
||||
+ ack_us = tcp_stamp32_us_delta(tp->tcp_mstamp,
|
||||
rs->prior_mstamp); /* ack phase */
|
||||
rs->interval_us = max(snd_us, ack_us);
|
||||
|
@@ -1,109 +0,0 @@
|
||||
From b39e9e473ed0446e4268cffb09f4a260cea7c341 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Sat, 5 Aug 2017 11:49:50 -0400
|
||||
Subject: [PATCH 03/18] net-tcp_bbr: v2: snapshot packets in flight at transmit
|
||||
time and pass in rate_sample
|
||||
|
||||
CC algorithms may want to snapshot the number of packets in flight at
|
||||
transmit time and pass in rate_sample, to understand the relationship
|
||||
between inflight and losses or ECN signals, to try to find the highest
|
||||
inflight value that has acceptable levels of loss/ECN marking.
|
||||
|
||||
We split out the code to set an skb's tx.in_flight field into its own
|
||||
function, so that this code can be used for the TCP_REPAIR "fake send"
|
||||
code path that inserts skbs into the rtx queue without sending them.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: b3eb4f2d20efab4ca001f32c9294739036c493ea
|
||||
Origin-9xx-SHA1: e880fc907d06ea7354333f60f712748ebce9497b
|
||||
Origin-9xx-SHA1: 330f825a08a6fe92cef74d799cc468864c479f63
|
||||
Change-Id: I7314047d0ff14dd261a04b1969a46dc658c8836a
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 6 ++++++
|
||||
net/ipv4/tcp_output.c | 1 +
|
||||
net/ipv4/tcp_rate.c | 20 ++++++++++++++++++++
|
||||
3 files changed, 27 insertions(+)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1051,6 +1051,10 @@ struct tcp_skb_cb {
|
||||
u32 first_tx_mstamp;
|
||||
/* when we reached the "delivered" count */
|
||||
u32 delivered_mstamp;
|
||||
+#define TCPCB_IN_FLIGHT_BITS 20
|
||||
+#define TCPCB_IN_FLIGHT_MAX ((1U << TCPCB_IN_FLIGHT_BITS) - 1)
|
||||
+ u32 in_flight:20, /* packets in flight at transmit */
|
||||
+ unused2:12;
|
||||
} tx; /* only used for outgoing skbs */
|
||||
union {
|
||||
struct inet_skb_parm h4;
|
||||
@@ -1207,6 +1211,7 @@ struct rate_sample {
|
||||
u64 prior_mstamp; /* starting timestamp for interval */
|
||||
u32 prior_delivered; /* tp->delivered at "prior_mstamp" */
|
||||
u32 prior_delivered_ce;/* tp->delivered_ce at "prior_mstamp" */
|
||||
+ u32 tx_in_flight; /* packets in flight at starting timestamp */
|
||||
s32 delivered; /* number of packets delivered over interval */
|
||||
s32 delivered_ce; /* number of packets delivered w/ CE marks*/
|
||||
long interval_us; /* time for tp->delivered to incr "delivered" */
|
||||
@@ -1329,6 +1334,7 @@ static inline void tcp_ca_event(struct s
|
||||
void tcp_set_ca_state(struct sock *sk, const u8 ca_state);
|
||||
|
||||
/* From tcp_rate.c */
|
||||
+void tcp_set_tx_in_flight(struct sock *sk, struct sk_buff *skb);
|
||||
void tcp_rate_skb_sent(struct sock *sk, struct sk_buff *skb);
|
||||
void tcp_rate_skb_delivered(struct sock *sk, struct sk_buff *skb,
|
||||
struct rate_sample *rs);
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -2777,6 +2777,7 @@ static bool tcp_write_xmit(struct sock *
|
||||
skb_set_delivery_time(skb, tp->tcp_wstamp_ns, SKB_CLOCK_MONOTONIC);
|
||||
list_move_tail(&skb->tcp_tsorted_anchor, &tp->tsorted_sent_queue);
|
||||
tcp_init_tso_segs(skb, mss_now);
|
||||
+ tcp_set_tx_in_flight(sk, skb);
|
||||
goto repair; /* Skip network transmission */
|
||||
}
|
||||
|
||||
--- a/net/ipv4/tcp_rate.c
|
||||
+++ b/net/ipv4/tcp_rate.c
|
||||
@@ -34,6 +34,24 @@
|
||||
* ready to send in the write queue.
|
||||
*/
|
||||
|
||||
+void tcp_set_tx_in_flight(struct sock *sk, struct sk_buff *skb)
|
||||
+{
|
||||
+ struct tcp_sock *tp = tcp_sk(sk);
|
||||
+ u32 in_flight;
|
||||
+
|
||||
+ /* Check, sanitize, and record packets in flight after skb was sent. */
|
||||
+ in_flight = tcp_packets_in_flight(tp) + tcp_skb_pcount(skb);
|
||||
+ if (WARN_ONCE(in_flight > TCPCB_IN_FLIGHT_MAX,
|
||||
+ "insane in_flight %u cc %s mss %u "
|
||||
+ "cwnd %u pif %u %u %u %u\n",
|
||||
+ in_flight, inet_csk(sk)->icsk_ca_ops->name,
|
||||
+ tp->mss_cache, tp->snd_cwnd,
|
||||
+ tp->packets_out, tp->retrans_out,
|
||||
+ tp->sacked_out, tp->lost_out))
|
||||
+ in_flight = TCPCB_IN_FLIGHT_MAX;
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight = in_flight;
|
||||
+}
|
||||
+
|
||||
/* Snapshot the current delivery information in the skb, to generate
|
||||
* a rate sample later when the skb is (s)acked in tcp_rate_skb_delivered().
|
||||
*/
|
||||
@@ -67,6 +85,7 @@ void tcp_rate_skb_sent(struct sock *sk,
|
||||
TCP_SKB_CB(skb)->tx.delivered = tp->delivered;
|
||||
TCP_SKB_CB(skb)->tx.delivered_ce = tp->delivered_ce;
|
||||
TCP_SKB_CB(skb)->tx.is_app_limited = tp->app_limited ? 1 : 0;
|
||||
+ tcp_set_tx_in_flight(sk, skb);
|
||||
}
|
||||
|
||||
/* When an skb is sacked or acked, we fill in the rate sample with the (prior)
|
||||
@@ -96,6 +115,7 @@ void tcp_rate_skb_delivered(struct sock
|
||||
rs->prior_mstamp = scb->tx.delivered_mstamp;
|
||||
rs->is_app_limited = scb->tx.is_app_limited;
|
||||
rs->is_retrans = scb->sacked & TCPCB_RETRANS;
|
||||
+ rs->tx_in_flight = scb->tx.in_flight;
|
||||
rs->last_end_seq = scb->end_seq;
|
||||
|
||||
/* Record send time of most recently ACKed packet: */
|
@@ -1,70 +0,0 @@
|
||||
From e4c82a08a05eeee9341511f35e922914520dd401 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Thu, 12 Oct 2017 23:44:27 -0400
|
||||
Subject: [PATCH 04/18] net-tcp_bbr: v2: count packets lost over TCP rate
|
||||
sampling interval
|
||||
|
||||
For understanding the relationship between inflight and packet loss
|
||||
signals, to try to find the highest inflight value that has acceptable
|
||||
levels of packet losses.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: 4527e26b2bd7756a88b5b9ef1ada3da33dd609ab
|
||||
Change-Id: I594c2500868d9c530770e7ddd68ffc87c57f4fd5
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 5 ++++-
|
||||
net/ipv4/tcp_rate.c | 3 +++
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1055,6 +1055,7 @@ struct tcp_skb_cb {
|
||||
#define TCPCB_IN_FLIGHT_MAX ((1U << TCPCB_IN_FLIGHT_BITS) - 1)
|
||||
u32 in_flight:20, /* packets in flight at transmit */
|
||||
unused2:12;
|
||||
+ u32 lost; /* packets lost so far upon tx of skb */
|
||||
} tx; /* only used for outgoing skbs */
|
||||
union {
|
||||
struct inet_skb_parm h4;
|
||||
@@ -1209,11 +1210,13 @@ struct ack_sample {
|
||||
*/
|
||||
struct rate_sample {
|
||||
u64 prior_mstamp; /* starting timestamp for interval */
|
||||
+ u32 prior_lost; /* tp->lost at "prior_mstamp" */
|
||||
u32 prior_delivered; /* tp->delivered at "prior_mstamp" */
|
||||
u32 prior_delivered_ce;/* tp->delivered_ce at "prior_mstamp" */
|
||||
u32 tx_in_flight; /* packets in flight at starting timestamp */
|
||||
+ s32 lost; /* number of packets lost over interval */
|
||||
s32 delivered; /* number of packets delivered over interval */
|
||||
- s32 delivered_ce; /* number of packets delivered w/ CE marks*/
|
||||
+ s32 delivered_ce; /* packets delivered w/ CE mark over interval */
|
||||
long interval_us; /* time for tp->delivered to incr "delivered" */
|
||||
u32 snd_interval_us; /* snd interval for delivered packets */
|
||||
u32 rcv_interval_us; /* rcv interval for delivered packets */
|
||||
--- a/net/ipv4/tcp_rate.c
|
||||
+++ b/net/ipv4/tcp_rate.c
|
||||
@@ -84,6 +84,7 @@ void tcp_rate_skb_sent(struct sock *sk,
|
||||
TCP_SKB_CB(skb)->tx.delivered_mstamp = tp->delivered_mstamp;
|
||||
TCP_SKB_CB(skb)->tx.delivered = tp->delivered;
|
||||
TCP_SKB_CB(skb)->tx.delivered_ce = tp->delivered_ce;
|
||||
+ TCP_SKB_CB(skb)->tx.lost = tp->lost;
|
||||
TCP_SKB_CB(skb)->tx.is_app_limited = tp->app_limited ? 1 : 0;
|
||||
tcp_set_tx_in_flight(sk, skb);
|
||||
}
|
||||
@@ -110,6 +111,7 @@ void tcp_rate_skb_delivered(struct sock
|
||||
if (!rs->prior_delivered ||
|
||||
tcp_skb_sent_after(tx_tstamp, tp->first_tx_mstamp,
|
||||
scb->end_seq, rs->last_end_seq)) {
|
||||
+ rs->prior_lost = scb->tx.lost;
|
||||
rs->prior_delivered_ce = scb->tx.delivered_ce;
|
||||
rs->prior_delivered = scb->tx.delivered;
|
||||
rs->prior_mstamp = scb->tx.delivered_mstamp;
|
||||
@@ -165,6 +167,7 @@ void tcp_rate_gen(struct sock *sk, u32 d
|
||||
return;
|
||||
}
|
||||
rs->delivered = tp->delivered - rs->prior_delivered;
|
||||
+ rs->lost = tp->lost - rs->prior_lost;
|
||||
|
||||
rs->delivered_ce = tp->delivered_ce - rs->prior_delivered_ce;
|
||||
/* delivered_ce occupies less than 32 bits in the skb control block */
|
@@ -1,38 +0,0 @@
|
||||
From 3d3b54d263b6271926e0d9800ca000a529267cfe Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Mon, 19 Nov 2018 13:48:36 -0500
|
||||
Subject: [PATCH 05/18] net-tcp_bbr: v2: export FLAG_ECE in rate_sample.is_ece
|
||||
|
||||
For understanding the relationship between inflight and ECN signals,
|
||||
to try to find the highest inflight value that has acceptable levels
|
||||
ECN marking.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: 3eba998f2898541406c2666781182200934965a8
|
||||
Change-Id: I3a964e04cee83e11649a54507043d2dfe769a3b3
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 1 +
|
||||
net/ipv4/tcp_input.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1228,6 +1228,7 @@ struct rate_sample {
|
||||
bool is_app_limited; /* is sample from packet with bubble in pipe? */
|
||||
bool is_retrans; /* is sample from retransmission? */
|
||||
bool is_ack_delayed; /* is this (likely) a delayed ACK? */
|
||||
+ bool is_ece; /* did this ACK have ECN marked? */
|
||||
};
|
||||
|
||||
struct tcp_congestion_ops {
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -4093,6 +4093,7 @@ static int tcp_ack(struct sock *sk, cons
|
||||
delivered = tcp_newly_delivered(sk, delivered, flag);
|
||||
lost = tp->lost - lost; /* freshly marked lost */
|
||||
rs.is_ack_delayed = !!(flag & FLAG_ACK_MAYBE_DELAYED);
|
||||
+ rs.is_ece = !!(flag & FLAG_ECE);
|
||||
tcp_rate_gen(sk, delivered, lost, is_sack_reneg, sack_state.rate);
|
||||
tcp_cong_control(sk, ack, delivered, flag, sack_state.rate);
|
||||
tcp_xmit_recovery(sk, rexmit);
|
@@ -1,57 +0,0 @@
|
||||
From 6f3ecfa5c713cacd451b876f4190da6d36c512eb Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Tue, 7 Aug 2018 21:52:06 -0400
|
||||
Subject: [PATCH 06/18] net-tcp_bbr: v2: introduce ca_ops->skb_marked_lost() CC
|
||||
module callback API
|
||||
|
||||
For connections experiencing reordering, RACK can mark packets lost
|
||||
long after we receive the SACKs/ACKs hinting that the packets were
|
||||
actually lost.
|
||||
|
||||
This means that CC modules cannot easily learn the volume of inflight
|
||||
data at which packet loss happens by looking at the current inflight
|
||||
or even the packets in flight when the most recently SACKed packet was
|
||||
sent. To learn this, CC modules need to know how many packets were in
|
||||
flight at the time lost packets were sent. This new callback, combined
|
||||
with TCP_SKB_CB(skb)->tx.in_flight, allows them to learn this.
|
||||
|
||||
This also provides a consistent callback that is invoked whether
|
||||
packets are marked lost upon ACK processing, using the RACK reordering
|
||||
timer, or at RTO time.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: afcbebe3374e4632ac6714d39e4dc8a8455956f4
|
||||
Change-Id: I54826ab53df636be537e5d3c618a46145d12d51a
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 3 +++
|
||||
net/ipv4/tcp_input.c | 5 +++++
|
||||
2 files changed, 8 insertions(+)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1255,6 +1255,9 @@ struct tcp_congestion_ops {
|
||||
/* override sysctl_tcp_min_tso_segs */
|
||||
u32 (*min_tso_segs)(struct sock *sk);
|
||||
|
||||
+ /* react to a specific lost skb (optional) */
|
||||
+ void (*skb_marked_lost)(struct sock *sk, const struct sk_buff *skb);
|
||||
+
|
||||
/* call when packets are delivered to update cwnd and pacing rate,
|
||||
* after all the ca_state processing. (optional)
|
||||
*/
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -1135,7 +1135,12 @@ static void tcp_verify_retransmit_hint(s
|
||||
*/
|
||||
static void tcp_notify_skb_loss_event(struct tcp_sock *tp, const struct sk_buff *skb)
|
||||
{
|
||||
+ struct sock *sk = (struct sock *)tp;
|
||||
+ const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
|
||||
+
|
||||
tp->lost += tcp_skb_pcount(skb);
|
||||
+ if (ca_ops->skb_marked_lost)
|
||||
+ ca_ops->skb_marked_lost(sk, skb);
|
||||
}
|
||||
|
||||
void tcp_mark_skb_lost(struct sock *sk, struct sk_buff *skb)
|
@@ -1,59 +0,0 @@
|
||||
From 52b39284416d0d841d4d51db0d3fce1c191a00d7 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Wed, 1 May 2019 20:16:33 -0400
|
||||
Subject: [PATCH 07/18] net-tcp_bbr: v2: adjust skb tx.in_flight upon merge in
|
||||
tcp_shifted_skb()
|
||||
|
||||
When tcp_shifted_skb() updates state as adjacent SACKed skbs are
|
||||
coalesced, previously the tx.in_flight was not adjusted, so we could
|
||||
get contradictory state where the skb's recorded pcount was bigger
|
||||
than the tx.in_flight (the number of segments that were in_flight
|
||||
after sending the skb).
|
||||
|
||||
Normally have a SACKed skb with contradictory pcount/tx.in_flight
|
||||
would not matter. However, with SACK reneging, the SACKed bit is
|
||||
removed, and an skb once again becomes eligible for retransmitting,
|
||||
fragmenting, SACKing, etc. Packetdrill testing verified the following
|
||||
sequence is possible in a kernel that does not have this commit:
|
||||
|
||||
- skb N is SACKed
|
||||
- skb N+1 is SACKed and combined with skb N using tcp_shifted_skb()
|
||||
- tcp_shifted_skb() will increase the pcount of prev,
|
||||
but leave tx.in_flight as-is
|
||||
- so prev skb can have pcount > tx.in_flight
|
||||
- RTO, tcp_timeout_mark_lost(), detect reneg,
|
||||
remove "SACKed" bit, mark skb N as lost
|
||||
- find pcount of skb N is greater than its tx.in_flight
|
||||
|
||||
I suspect this issue iw what caused the bbr2_inflight_hi_from_lost_skb():
|
||||
WARN_ON_ONCE(inflight_prev < 0)
|
||||
to fire in production machines using bbr2.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: 1a3e997e613d2dcf32b947992882854ebe873715
|
||||
Change-Id: I1b0b75c27519953430c7db51c6f358f104c7af55
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
net/ipv4/tcp_input.c | 11 +++++++++++
|
||||
1 file changed, 11 insertions(+)
|
||||
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -1512,6 +1512,17 @@ static bool tcp_shifted_skb(struct sock
|
||||
WARN_ON_ONCE(tcp_skb_pcount(skb) < pcount);
|
||||
tcp_skb_pcount_add(skb, -pcount);
|
||||
|
||||
+ /* Adjust tx.in_flight as pcount is shifted from skb to prev. */
|
||||
+ if (WARN_ONCE(TCP_SKB_CB(skb)->tx.in_flight < pcount,
|
||||
+ "prev in_flight: %u skb in_flight: %u pcount: %u",
|
||||
+ TCP_SKB_CB(prev)->tx.in_flight,
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight,
|
||||
+ pcount))
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight = 0;
|
||||
+ else
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight -= pcount;
|
||||
+ TCP_SKB_CB(prev)->tx.in_flight += pcount;
|
||||
+
|
||||
/* When we're adding to gso_segs == 1, gso_size will be zero,
|
||||
* in theory this shouldn't be necessary but as long as DSACK
|
||||
* code can come after this skb later on it's better to keep
|
@@ -1,97 +0,0 @@
|
||||
From 64570028a478a2249356345127bb3a3c75509d57 Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Wed, 1 May 2019 20:16:25 -0400
|
||||
Subject: [PATCH 08/18] net-tcp_bbr: v2: adjust skb tx.in_flight upon split in
|
||||
tcp_fragment()
|
||||
|
||||
When we fragment an skb that has already been sent, we need to update
|
||||
the tx.in_flight for the first skb in the resulting pair ("buff").
|
||||
|
||||
Because we were not updating the tx.in_flight, the tx.in_flight value
|
||||
was inconsistent with the pcount of the "buff" skb (tx.in_flight would
|
||||
be too high). That meant that if the "buff" skb was lost, then
|
||||
bbr2_inflight_hi_from_lost_skb() would calculate an inflight_hi value
|
||||
that is too high. This could result in longer queues and higher packet
|
||||
loss.
|
||||
|
||||
Packetdrill testing verified that without this commit, when the second
|
||||
half of an skb is SACKed and then later the first half of that skb is
|
||||
marked lost, the calculated inflight_hi was incorrect.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Origin-9xx-SHA1: 385f1ddc610798fab2837f9f372857438b25f874
|
||||
Origin-9xx-SHA1: a0eb099690af net-tcp_bbr: v2: fix tcp_fragment() tx.in_flight recomputation [prod feb 8 2021; use as a fixup]
|
||||
Origin-9xx-SHA1: 885503228153ff0c9114e net-tcp_bbr: v2: introduce tcp_skb_tx_in_flight_is_suspicious() helper for warnings
|
||||
Change-Id: I617f8cab4e9be7a0b8e8d30b047bf8645393354d
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 15 +++++++++++++++
|
||||
net/ipv4/tcp_output.c | 26 +++++++++++++++++++++++++-
|
||||
2 files changed, 40 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1354,6 +1354,21 @@ static inline bool tcp_skb_sent_after(u6
|
||||
return t1 > t2 || (t1 == t2 && after(seq1, seq2));
|
||||
}
|
||||
|
||||
+/* If a retransmit failed due to local qdisc congestion or other local issues,
|
||||
+ * then we may have called tcp_set_skb_tso_segs() to increase the number of
|
||||
+ * segments in the skb without increasing the tx.in_flight. In all other cases,
|
||||
+ * the tx.in_flight should be at least as big as the pcount of the sk_buff. We
|
||||
+ * do not have the state to know whether a retransmit failed due to local qdisc
|
||||
+ * congestion or other local issues, so to avoid spurious warnings we consider
|
||||
+ * that any skb marked lost may have suffered that fate.
|
||||
+ */
|
||||
+static inline bool tcp_skb_tx_in_flight_is_suspicious(u32 skb_pcount,
|
||||
+ u32 skb_sacked_flags,
|
||||
+ u32 tx_in_flight)
|
||||
+{
|
||||
+ return (skb_pcount > tx_in_flight) && !(skb_sacked_flags & TCPCB_LOST);
|
||||
+}
|
||||
+
|
||||
/* These functions determine how the current flow behaves in respect of SACK
|
||||
* handling. SACK is negotiated with the peer, and therefore it can vary
|
||||
* between different flows.
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -1614,7 +1614,7 @@ int tcp_fragment(struct sock *sk, enum t
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
struct sk_buff *buff;
|
||||
- int old_factor;
|
||||
+ int old_factor, inflight_prev;
|
||||
long limit;
|
||||
u16 flags;
|
||||
int nlen;
|
||||
@@ -1689,6 +1689,30 @@ int tcp_fragment(struct sock *sk, enum t
|
||||
|
||||
if (diff)
|
||||
tcp_adjust_pcount(sk, skb, diff);
|
||||
+
|
||||
+ inflight_prev = TCP_SKB_CB(skb)->tx.in_flight - old_factor;
|
||||
+ if (inflight_prev < 0) {
|
||||
+ WARN_ONCE(tcp_skb_tx_in_flight_is_suspicious(
|
||||
+ old_factor,
|
||||
+ TCP_SKB_CB(skb)->sacked,
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight),
|
||||
+ "inconsistent: tx.in_flight: %u "
|
||||
+ "old_factor: %d mss: %u sacked: %u "
|
||||
+ "1st pcount: %d 2nd pcount: %d "
|
||||
+ "1st len: %u 2nd len: %u ",
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight, old_factor,
|
||||
+ mss_now, TCP_SKB_CB(skb)->sacked,
|
||||
+ tcp_skb_pcount(skb), tcp_skb_pcount(buff),
|
||||
+ skb->len, buff->len);
|
||||
+ inflight_prev = 0;
|
||||
+ }
|
||||
+ /* Set 1st tx.in_flight as if 1st were sent by itself: */
|
||||
+ TCP_SKB_CB(skb)->tx.in_flight = inflight_prev +
|
||||
+ tcp_skb_pcount(skb);
|
||||
+ /* Set 2nd tx.in_flight with new 1st and 2nd pcounts: */
|
||||
+ TCP_SKB_CB(buff)->tx.in_flight = inflight_prev +
|
||||
+ tcp_skb_pcount(skb) +
|
||||
+ tcp_skb_pcount(buff);
|
||||
}
|
||||
|
||||
/* Link BUFF into the send queue. */
|
@@ -1,73 +0,0 @@
|
||||
From fb3f903921be91a91b577d3771e5d5c9e9fe3aa9 Mon Sep 17 00:00:00 2001
|
||||
From: Yousuk Seung <ysseung@google.com>
|
||||
Date: Wed, 23 May 2018 17:55:54 -0700
|
||||
Subject: [PATCH 09/18] net-tcp: add new ca opts flag TCP_CONG_WANTS_CE_EVENTS
|
||||
|
||||
Add a a new ca opts flag TCP_CONG_WANTS_CE_EVENTS that allows a
|
||||
congestion control module to receive CE events.
|
||||
|
||||
Currently congestion control modules have to set the TCP_CONG_NEEDS_ECN
|
||||
bit in opts flag to receive CE events but this may incur changes in ECN
|
||||
behavior elsewhere. This patch adds a new bit TCP_CONG_WANTS_CE_EVENTS
|
||||
that allows congestion control modules to receive CE events
|
||||
independently of TCP_CONG_NEEDS_ECN.
|
||||
|
||||
Effort: net-tcp
|
||||
Origin-9xx-SHA1: 9f7e14716cde760bc6c67ef8ef7e1ee48501d95b
|
||||
Change-Id: I2255506985242f376d910c6fd37daabaf4744f24
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 14 +++++++++++++-
|
||||
net/ipv4/tcp_input.c | 4 ++--
|
||||
2 files changed, 15 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1190,7 +1190,11 @@ enum tcp_ca_ack_event_flags {
|
||||
#define TCP_CONG_NON_RESTRICTED BIT(0)
|
||||
/* Requires ECN/ECT set on all packets */
|
||||
#define TCP_CONG_NEEDS_ECN BIT(1)
|
||||
-#define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | TCP_CONG_NEEDS_ECN)
|
||||
+/* Wants notification of CE events (CA_EVENT_ECN_IS_CE, CA_EVENT_ECN_NO_CE). */
|
||||
+#define TCP_CONG_WANTS_CE_EVENTS BIT(2)
|
||||
+#define TCP_CONG_MASK (TCP_CONG_NON_RESTRICTED | \
|
||||
+ TCP_CONG_NEEDS_ECN | \
|
||||
+ TCP_CONG_WANTS_CE_EVENTS)
|
||||
|
||||
union tcp_cc_info;
|
||||
|
||||
@@ -1322,6 +1326,14 @@ static inline char *tcp_ca_get_name_by_k
|
||||
}
|
||||
#endif
|
||||
|
||||
+static inline bool tcp_ca_wants_ce_events(const struct sock *sk)
|
||||
+{
|
||||
+ const struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
+
|
||||
+ return icsk->icsk_ca_ops->flags & (TCP_CONG_NEEDS_ECN |
|
||||
+ TCP_CONG_WANTS_CE_EVENTS);
|
||||
+}
|
||||
+
|
||||
static inline bool tcp_ca_needs_ecn(const struct sock *sk)
|
||||
{
|
||||
const struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -381,7 +381,7 @@ static void tcp_data_ecn_check(struct so
|
||||
tcp_enter_quickack_mode(sk, 2);
|
||||
break;
|
||||
case INET_ECN_CE:
|
||||
- if (tcp_ca_needs_ecn(sk))
|
||||
+ if (tcp_ca_wants_ce_events(sk))
|
||||
tcp_ca_event(sk, CA_EVENT_ECN_IS_CE);
|
||||
|
||||
if (!(tp->ecn_flags & TCP_ECN_DEMAND_CWR)) {
|
||||
@@ -392,7 +392,7 @@ static void tcp_data_ecn_check(struct so
|
||||
tp->ecn_flags |= TCP_ECN_SEEN;
|
||||
break;
|
||||
default:
|
||||
- if (tcp_ca_needs_ecn(sk))
|
||||
+ if (tcp_ca_wants_ce_events(sk))
|
||||
tcp_ca_event(sk, CA_EVENT_ECN_NO_CE);
|
||||
tp->ecn_flags |= TCP_ECN_SEEN;
|
||||
break;
|
@@ -1,139 +0,0 @@
|
||||
From e0ac041e7e63d138d210fe875120447c11d2d4ba Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Fri, 27 Sep 2019 17:10:26 -0400
|
||||
Subject: [PATCH 10/18] net-tcp: re-generalize TSO sizing in TCP CC module API
|
||||
|
||||
Reorganize the API for CC modules so that the CC module once again
|
||||
gets complete control of the TSO sizing decision. This is how the API
|
||||
was set up around 2016 and the initial BBRv1 upstreaming. Later Eric
|
||||
Dumazet simplified it. But with wider testing it now seems that to
|
||||
avoid CPU regressions BBR needs to have a different TSO sizing
|
||||
function.
|
||||
|
||||
This is necessary to handle cases where there are many flows
|
||||
bottlenecked on the sender host's NIC, in which case BBR's pacing rate
|
||||
is much lower than CUBIC/Reno/DCTCP's. Why does this happen? Because
|
||||
BBR's pacing rate adapts to the low bandwidth share each flow sees. By
|
||||
contrast, CUBIC/Reno/DCTCP see no loss or ECN, so they grow a very
|
||||
large cwnd, and thus large pacing rate and large TSO burst size.
|
||||
|
||||
Change-Id: Ic8ccfdbe4010ee8d4bf6a6334c48a2fceb2171ea
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 4 ++--
|
||||
net/ipv4/bpf_tcp_ca.c | 4 ++--
|
||||
net/ipv4/tcp_bbr.c | 37 ++++++++++++++++++++++++++-----------
|
||||
net/ipv4/tcp_output.c | 11 +++++------
|
||||
4 files changed, 35 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1256,8 +1256,8 @@ struct tcp_congestion_ops {
|
||||
/* hook for packet ack accounting (optional) */
|
||||
void (*pkts_acked)(struct sock *sk, const struct ack_sample *sample);
|
||||
|
||||
- /* override sysctl_tcp_min_tso_segs */
|
||||
- u32 (*min_tso_segs)(struct sock *sk);
|
||||
+ /* pick target number of segments per TSO/GSO skb (optional): */
|
||||
+ u32 (*tso_segs)(struct sock *sk, unsigned int mss_now);
|
||||
|
||||
/* react to a specific lost skb (optional) */
|
||||
void (*skb_marked_lost)(struct sock *sk, const struct sk_buff *skb);
|
||||
--- a/net/ipv4/bpf_tcp_ca.c
|
||||
+++ b/net/ipv4/bpf_tcp_ca.c
|
||||
@@ -280,7 +280,7 @@ 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;
|
||||
}
|
||||
@@ -315,7 +315,7 @@ 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,
|
||||
.cong_control = bpf_tcp_ca_cong_control,
|
||||
.undo_cwnd = bpf_tcp_ca_undo_cwnd,
|
||||
.sndbuf_expand = bpf_tcp_ca_sndbuf_expand,
|
||||
--- a/net/ipv4/tcp_bbr.c
|
||||
+++ b/net/ipv4/tcp_bbr.c
|
||||
@@ -301,20 +301,35 @@ __bpf_kfunc static u32 bbr_min_tso_segs(
|
||||
return READ_ONCE(sk->sk_pacing_rate) < (bbr_min_tso_rate >> 3) ? 1 : 2;
|
||||
}
|
||||
|
||||
+/* Return the number of segments BBR would like in a TSO/GSO skb, given
|
||||
+ * a particular max gso size as a constraint.
|
||||
+ */
|
||||
+static u32 bbr_tso_segs_generic(struct sock *sk, unsigned int mss_now,
|
||||
+ u32 gso_max_size)
|
||||
+{
|
||||
+ u32 segs;
|
||||
+ u64 bytes;
|
||||
+
|
||||
+ /* Budget a TSO/GSO burst size allowance based on bw (pacing_rate). */
|
||||
+ bytes = READ_ONCE(sk->sk_pacing_rate) >> READ_ONCE(sk->sk_pacing_shift);
|
||||
+
|
||||
+ bytes = min_t(u32, bytes, gso_max_size - 1 - MAX_TCP_HEADER);
|
||||
+ segs = max_t(u32, bytes / mss_now, bbr_min_tso_segs(sk));
|
||||
+ return segs;
|
||||
+}
|
||||
+
|
||||
+/* Custom tcp_tso_autosize() for BBR, used at transmit time to cap skb size. */
|
||||
+static u32 bbr_tso_segs(struct sock *sk, unsigned int mss_now)
|
||||
+{
|
||||
+ return bbr_tso_segs_generic(sk, mss_now, sk->sk_gso_max_size);
|
||||
+}
|
||||
+
|
||||
+/* Like bbr_tso_segs(), using mss_cache, ignoring driver's sk_gso_max_size. */
|
||||
static u32 bbr_tso_segs_goal(struct sock *sk)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
- u32 segs, bytes;
|
||||
-
|
||||
- /* Sort of tcp_tso_autosize() but ignoring
|
||||
- * driver provided sk_gso_max_size.
|
||||
- */
|
||||
- bytes = min_t(unsigned long,
|
||||
- READ_ONCE(sk->sk_pacing_rate) >> READ_ONCE(sk->sk_pacing_shift),
|
||||
- GSO_LEGACY_MAX_SIZE - 1 - MAX_TCP_HEADER);
|
||||
- segs = max_t(u32, bytes / tp->mss_cache, bbr_min_tso_segs(sk));
|
||||
|
||||
- return min(segs, 0x7FU);
|
||||
+ return bbr_tso_segs_generic(sk, tp->mss_cache, GSO_MAX_SIZE);
|
||||
}
|
||||
|
||||
/* Save "last known good" cwnd so we can restore it after losses or PROBE_RTT */
|
||||
@@ -1150,7 +1165,7 @@ static struct tcp_congestion_ops tcp_bbr
|
||||
.undo_cwnd = bbr_undo_cwnd,
|
||||
.cwnd_event = bbr_cwnd_event,
|
||||
.ssthresh = bbr_ssthresh,
|
||||
- .min_tso_segs = bbr_min_tso_segs,
|
||||
+ .tso_segs = bbr_tso_segs,
|
||||
.get_info = bbr_get_info,
|
||||
.set_state = bbr_set_state,
|
||||
};
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -2069,13 +2069,12 @@ static u32 tcp_tso_autosize(const struct
|
||||
static u32 tcp_tso_segs(struct sock *sk, unsigned int mss_now)
|
||||
{
|
||||
const struct tcp_congestion_ops *ca_ops = inet_csk(sk)->icsk_ca_ops;
|
||||
- u32 min_tso, tso_segs;
|
||||
+ u32 tso_segs;
|
||||
|
||||
- min_tso = ca_ops->min_tso_segs ?
|
||||
- ca_ops->min_tso_segs(sk) :
|
||||
- READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_min_tso_segs);
|
||||
-
|
||||
- tso_segs = tcp_tso_autosize(sk, mss_now, min_tso);
|
||||
+ tso_segs = ca_ops->tso_segs ?
|
||||
+ ca_ops->tso_segs(sk, mss_now) :
|
||||
+ tcp_tso_autosize(sk, mss_now,
|
||||
+ sock_net(sk)->ipv4.sysctl_tcp_min_tso_segs);
|
||||
return min_t(u32, tso_segs, sk->sk_gso_max_segs);
|
||||
}
|
||||
|
@@ -1,73 +0,0 @@
|
||||
From 323945d608bbef5fd3a444f52442bf0154c4ef0b Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Sat, 16 Nov 2019 13:16:25 -0500
|
||||
Subject: [PATCH 11/18] net-tcp: add fast_ack_mode=1: skip rwin check in
|
||||
tcp_fast_ack_mode__tcp_ack_snd_check()
|
||||
|
||||
Add logic for an optional TCP connection behavior, enabled with
|
||||
tp->fast_ack_mode = 1, which disables checking the receive window
|
||||
before sending an ack in __tcp_ack_snd_check(). If this behavior is
|
||||
enabled, the data receiver sends an ACK if the amount of data is >
|
||||
RCV.MSS. TCP congestion control modules can enable this bit if
|
||||
they want to generate ACKs quickly.
|
||||
|
||||
Change-Id: Iaa0a0fd7108221f883137a79d5bfa724f1b096d4
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/tcp.h | 3 ++-
|
||||
net/ipv4/tcp.c | 1 +
|
||||
net/ipv4/tcp_cong.c | 1 +
|
||||
net/ipv4/tcp_input.c | 5 +++--
|
||||
4 files changed, 7 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/include/linux/tcp.h
|
||||
+++ b/include/linux/tcp.h
|
||||
@@ -248,7 +248,8 @@ struct tcp_sock {
|
||||
void (*tcp_clean_acked)(struct sock *sk, u32 acked_seq);
|
||||
#endif
|
||||
u32 snd_ssthresh; /* Slow start size threshold */
|
||||
- u8 recvmsg_inq : 1;/* Indicate # of bytes in queue upon recvmsg */
|
||||
+ u32 recvmsg_inq : 1,/* Indicate # of bytes in queue upon recvmsg */
|
||||
+ fast_ack_mode:1;/* ack ASAP if >1 rcv_mss received? */
|
||||
__cacheline_group_end(tcp_sock_read_rx);
|
||||
|
||||
/* TX read-write hotpath cache lines */
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -3411,6 +3411,7 @@ int tcp_disconnect(struct sock *sk, int
|
||||
tp->rx_opt.dsack = 0;
|
||||
tp->rx_opt.num_sacks = 0;
|
||||
tp->rcv_ooopack = 0;
|
||||
+ tp->fast_ack_mode = 0;
|
||||
|
||||
|
||||
/* Clean up fastopen related fields */
|
||||
--- a/net/ipv4/tcp_cong.c
|
||||
+++ b/net/ipv4/tcp_cong.c
|
||||
@@ -237,6 +237,7 @@ void tcp_init_congestion_control(struct
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
|
||||
tcp_sk(sk)->prior_ssthresh = 0;
|
||||
+ tcp_sk(sk)->fast_ack_mode = 0;
|
||||
if (icsk->icsk_ca_ops->init)
|
||||
icsk->icsk_ca_ops->init(sk);
|
||||
if (tcp_ca_needs_ecn(sk))
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -5811,13 +5811,14 @@ static void __tcp_ack_snd_check(struct s
|
||||
|
||||
/* More than one full frame received... */
|
||||
if (((tp->rcv_nxt - tp->rcv_wup) > inet_csk(sk)->icsk_ack.rcv_mss &&
|
||||
+ (tp->fast_ack_mode == 1 ||
|
||||
/* ... and right edge of window advances far enough.
|
||||
* (tcp_recvmsg() will send ACK otherwise).
|
||||
* If application uses SO_RCVLOWAT, we want send ack now if
|
||||
* we have not received enough bytes to satisfy the condition.
|
||||
*/
|
||||
- (tp->rcv_nxt - tp->copied_seq < sk->sk_rcvlowat ||
|
||||
- __tcp_select_window(sk) >= tp->rcv_wnd)) ||
|
||||
+ (tp->rcv_nxt - tp->copied_seq < sk->sk_rcvlowat ||
|
||||
+ __tcp_select_window(sk) >= tp->rcv_wnd))) ||
|
||||
/* We ACK each frame or... */
|
||||
tcp_in_quickack_mode(sk) ||
|
||||
/* Protocol state mandates a one-time immediate ACK */
|
@@ -1,45 +0,0 @@
|
||||
From 30fc364b7834b5dce9434dfab4adb49d4924ac03 Mon Sep 17 00:00:00 2001
|
||||
From: Jianfeng Wang <jfwang@google.com>
|
||||
Date: Fri, 19 Jun 2020 17:33:45 +0000
|
||||
Subject: [PATCH 12/18] net-tcp_bbr: v2: record app-limited status of
|
||||
TLP-repaired flight
|
||||
|
||||
When sending a TLP retransmit, record whether the outstanding flight
|
||||
of data is application limited. This is important for congestion
|
||||
control modules that want to respond to losses repaired by TLP
|
||||
retransmits. This is important because the following scenarios convey
|
||||
very different information:
|
||||
(1) a packet loss with a small number of packets in flight;
|
||||
(2) a packet loss with the maximum amount of data in flight allowed
|
||||
by the CC module;
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Change-Id: Ic8ae567caa4e4bfd5fd82c3d4be12a5d9171655e
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/linux/tcp.h | 3 ++-
|
||||
net/ipv4/tcp_output.c | 1 +
|
||||
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/linux/tcp.h
|
||||
+++ b/include/linux/tcp.h
|
||||
@@ -306,7 +306,8 @@ struct tcp_sock {
|
||||
*/
|
||||
struct tcp_options_received rx_opt;
|
||||
u8 nonagle : 4,/* Disable Nagle algorithm? */
|
||||
- rate_app_limited:1; /* rate_{delivered,interval_us} limited? */
|
||||
+ rate_app_limited:1, /* rate_{delivered,interval_us} limited? */
|
||||
+ tlp_orig_data_app_limited:1; /* app-limited before TLP rtx? */
|
||||
__cacheline_group_end(tcp_sock_write_txrx);
|
||||
|
||||
/* RX read-write hotpath cache lines */
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -3013,6 +3013,7 @@ void tcp_send_loss_probe(struct sock *sk
|
||||
if (WARN_ON(!skb || !tcp_skb_pcount(skb)))
|
||||
goto rearm_timer;
|
||||
|
||||
+ tp->tlp_orig_data_app_limited = TCP_SKB_CB(skb)->tx.is_app_limited;
|
||||
if (__tcp_retransmit_skb(sk, skb, 1))
|
||||
goto rearm_timer;
|
||||
|
@@ -1,45 +0,0 @@
|
||||
From 0c90659bb5c4af502726a0c71cecc096ece1fc95 Mon Sep 17 00:00:00 2001
|
||||
From: Jianfeng Wang <jfwang@google.com>
|
||||
Date: Tue, 16 Jun 2020 17:41:19 +0000
|
||||
Subject: [PATCH 13/18] net-tcp_bbr: v2: inform CC module of losses repaired by
|
||||
TLP probe
|
||||
|
||||
Before this commit, when there is a packet loss that creates a sequence
|
||||
hole that is filled by a TLP loss probe, then tcp_process_tlp_ack()
|
||||
only informs the congestion control (CC) module via a back-to-back entry
|
||||
and exit of CWR. But some congestion control modules (e.g. BBR) do not
|
||||
respond to CWR events.
|
||||
|
||||
This commit adds a new CA event with which the core TCP stack notifies
|
||||
the CC module when a loss is repaired by a TLP. This will allow CC
|
||||
modules that do not use the CWR mechanism to have a custom handler for
|
||||
such TLP recoveries.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Change-Id: Ieba72332b401b329bff5a641d2b2043a3fb8f632
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 1 +
|
||||
net/ipv4/tcp_input.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1168,6 +1168,7 @@ enum tcp_ca_event {
|
||||
CA_EVENT_LOSS, /* loss timeout */
|
||||
CA_EVENT_ECN_NO_CE, /* ECT set, but not CE marked */
|
||||
CA_EVENT_ECN_IS_CE, /* received CE marked IP packet */
|
||||
+ CA_EVENT_TLP_RECOVERY, /* a lost segment was repaired by TLP probe */
|
||||
};
|
||||
|
||||
/* Information about inbound ACK, passed to cong_ops->in_ack_event() */
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3890,6 +3890,7 @@ static void tcp_process_tlp_ack(struct s
|
||||
/* ACK advances: there was a loss, so reduce cwnd. Reset
|
||||
* tlp_high_seq in tcp_init_cwnd_reduction()
|
||||
*/
|
||||
+ tcp_ca_event(sk, CA_EVENT_TLP_RECOVERY);
|
||||
tcp_init_cwnd_reduction(sk);
|
||||
tcp_set_ca_state(sk, TCP_CA_CWR);
|
||||
tcp_end_cwnd_reduction(sk);
|
@@ -1,73 +0,0 @@
|
||||
From 0c9501f0d0743b7ab6958e064760b773b3bdf19b Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Mon, 21 Sep 2020 14:46:26 -0400
|
||||
Subject: [PATCH 14/18] net-tcp_bbr: v2: introduce is_acking_tlp_retrans_seq
|
||||
into rate_sample
|
||||
|
||||
Introduce is_acking_tlp_retrans_seq into rate_sample. This bool will
|
||||
export to the CC module the knowledge of whether the current ACK
|
||||
matched a TLP retransmit.
|
||||
|
||||
Note that when this bool is true, we cannot yet tell (in general) whether
|
||||
this ACK is for the original or the TLP retransmit.
|
||||
|
||||
Effort: net-tcp_bbr
|
||||
Change-Id: I2e6494332167e75efcbdc99bd5c119034e9c39b4
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 1 +
|
||||
net/ipv4/tcp_input.c | 12 +++++++++---
|
||||
2 files changed, 10 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -1232,6 +1232,7 @@ struct rate_sample {
|
||||
u32 last_end_seq; /* end_seq of most recently ACKed packet */
|
||||
bool is_app_limited; /* is sample from packet with bubble in pipe? */
|
||||
bool is_retrans; /* is sample from retransmission? */
|
||||
+ bool is_acking_tlp_retrans_seq; /* ACKed a TLP retransmit sequence? */
|
||||
bool is_ack_delayed; /* is this (likely) a delayed ACK? */
|
||||
bool is_ece; /* did this ACK have ECN marked? */
|
||||
};
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -3873,7 +3873,8 @@ static int tcp_replace_ts_recent(struct
|
||||
/* This routine deals with acks during a TLP episode and ends an episode by
|
||||
* resetting tlp_high_seq. Ref: TLP algorithm in draft-ietf-tcpm-rack
|
||||
*/
|
||||
-static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag)
|
||||
+static void tcp_process_tlp_ack(struct sock *sk, u32 ack, int flag,
|
||||
+ struct rate_sample *rs)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
@@ -3901,6 +3902,11 @@ static void tcp_process_tlp_ack(struct s
|
||||
FLAG_NOT_DUP | FLAG_DATA_SACKED))) {
|
||||
/* Pure dupack: original and TLP probe arrived; no loss */
|
||||
tp->tlp_high_seq = 0;
|
||||
+ } else {
|
||||
+ /* This ACK matches a TLP retransmit. We cannot yet tell if
|
||||
+ * this ACK is for the original or the TLP retransmit.
|
||||
+ */
|
||||
+ rs->is_acking_tlp_retrans_seq = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4086,7 +4092,7 @@ static int tcp_ack(struct sock *sk, cons
|
||||
tcp_in_ack_event(sk, flag);
|
||||
|
||||
if (tp->tlp_high_seq)
|
||||
- tcp_process_tlp_ack(sk, ack, flag);
|
||||
+ tcp_process_tlp_ack(sk, ack, flag, &rs);
|
||||
|
||||
if (tcp_ack_is_dubious(sk, flag)) {
|
||||
if (!(flag & (FLAG_SND_UNA_ADVANCED |
|
||||
@@ -4131,7 +4137,7 @@ no_queue:
|
||||
tcp_ack_probe(sk);
|
||||
|
||||
if (tp->tlp_high_seq)
|
||||
- tcp_process_tlp_ack(sk, ack, flag);
|
||||
+ tcp_process_tlp_ack(sk, ack, flag, &rs);
|
||||
return 1;
|
||||
|
||||
old_ack:
|
@@ -1,112 +0,0 @@
|
||||
From c70e032f0effa66e1f67ae0a5ed65fac83c6c267 Mon Sep 17 00:00:00 2001
|
||||
From: David Morley <morleyd@google.com>
|
||||
Date: Fri, 14 Jul 2023 11:07:56 -0400
|
||||
Subject: [PATCH 15/18] tcp: introduce per-route feature RTAX_FEATURE_ECN_LOW
|
||||
|
||||
Define and implement a new per-route feature, RTAX_FEATURE_ECN_LOW.
|
||||
|
||||
This feature indicates that the given destination network is a
|
||||
low-latency ECN environment, meaning both that ECN CE marks are
|
||||
applied by the network using a low-latency marking threshold and also
|
||||
that TCP endpoints provide precise per-data-segment ECN feedback in
|
||||
ACKs (where the ACK ECE flag echoes the received CE status of all
|
||||
newly-acknowledged data segments). This feature indication can be used
|
||||
by congestion control algorithms to decide how to interpret ECN
|
||||
signals over the given destination network.
|
||||
|
||||
This feature is appropriate for datacenter-style ECN marking, such as
|
||||
the ECN marking approach expected by DCTCP or BBR congestion control
|
||||
modules.
|
||||
|
||||
Signed-off-by: David Morley <morleyd@google.com>
|
||||
Signed-off-by: Neal Cardwell <ncardwell@google.com>
|
||||
Signed-off-by: Yuchung Cheng <ycheng@google.com>
|
||||
Tested-by: David Morley <morleyd@google.com>
|
||||
Change-Id: I6bc06e9c6cb426fbae7243fc71c9a8c18175f5d3
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 10 ++++++++++
|
||||
include/uapi/linux/rtnetlink.h | 4 +++-
|
||||
net/ipv4/tcp_minisocks.c | 2 ++
|
||||
net/ipv4/tcp_output.c | 6 ++++--
|
||||
4 files changed, 19 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -379,6 +379,7 @@ static inline void tcp_dec_quickack_mode
|
||||
#define TCP_ECN_DEMAND_CWR BIT(2)
|
||||
#define TCP_ECN_SEEN BIT(3)
|
||||
#define TCP_ECN_MODE_ACCECN BIT(4)
|
||||
+#define TCP_ECN_LOW BIT(5)
|
||||
|
||||
#define TCP_ECN_DISABLED 0
|
||||
#define TCP_ECN_MODE_PENDING (TCP_ECN_MODE_RFC3168 | TCP_ECN_MODE_ACCECN)
|
||||
@@ -840,6 +841,15 @@ static inline void tcp_fast_path_check(s
|
||||
|
||||
u32 tcp_delack_max(const struct sock *sk);
|
||||
|
||||
+static inline void tcp_set_ecn_low_from_dst(struct sock *sk,
|
||||
+ const struct dst_entry *dst)
|
||||
+{
|
||||
+ struct tcp_sock *tp = tcp_sk(sk);
|
||||
+
|
||||
+ if (dst_feature(dst, RTAX_FEATURE_ECN_LOW))
|
||||
+ tp->ecn_flags |= TCP_ECN_LOW;
|
||||
+}
|
||||
+
|
||||
/* Compute the actual rto_min value */
|
||||
static inline u32 tcp_rto_min(const struct sock *sk)
|
||||
{
|
||||
--- a/include/uapi/linux/rtnetlink.h
|
||||
+++ b/include/uapi/linux/rtnetlink.h
|
||||
@@ -517,12 +517,14 @@ enum {
|
||||
#define RTAX_FEATURE_TIMESTAMP (1 << 2) /* unused */
|
||||
#define RTAX_FEATURE_ALLFRAG (1 << 3) /* unused */
|
||||
#define RTAX_FEATURE_TCP_USEC_TS (1 << 4)
|
||||
+#define RTAX_FEATURE_ECN_LOW (1 << 5)
|
||||
|
||||
#define RTAX_FEATURE_MASK (RTAX_FEATURE_ECN | \
|
||||
RTAX_FEATURE_SACK | \
|
||||
RTAX_FEATURE_TIMESTAMP | \
|
||||
RTAX_FEATURE_ALLFRAG | \
|
||||
- RTAX_FEATURE_TCP_USEC_TS)
|
||||
+ RTAX_FEATURE_TCP_USEC_TS | \
|
||||
+ RTAX_FEATURE_ECN_LOW)
|
||||
|
||||
struct rta_session {
|
||||
__u8 proto;
|
||||
--- a/net/ipv4/tcp_minisocks.c
|
||||
+++ b/net/ipv4/tcp_minisocks.c
|
||||
@@ -472,6 +472,8 @@ void tcp_ca_openreq_child(struct sock *s
|
||||
u32 ca_key = dst_metric(dst, RTAX_CC_ALGO);
|
||||
bool ca_got_dst = false;
|
||||
|
||||
+ tcp_set_ecn_low_from_dst(sk, dst);
|
||||
+
|
||||
if (ca_key != TCP_CA_UNSPEC) {
|
||||
const struct tcp_congestion_ops *ca;
|
||||
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -339,10 +339,9 @@ static void tcp_ecn_send_syn(struct sock
|
||||
bool bpf_needs_ecn = tcp_bpf_ca_needs_ecn(sk);
|
||||
bool use_ecn = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_ecn) == 1 ||
|
||||
tcp_ca_needs_ecn(sk) || bpf_needs_ecn;
|
||||
+ const struct dst_entry *dst = __sk_dst_get(sk);
|
||||
|
||||
if (!use_ecn) {
|
||||
- const struct dst_entry *dst = __sk_dst_get(sk);
|
||||
-
|
||||
if (dst && dst_feature(dst, RTAX_FEATURE_ECN))
|
||||
use_ecn = true;
|
||||
}
|
||||
@@ -354,6 +353,9 @@ static void tcp_ecn_send_syn(struct sock
|
||||
tcp_ecn_mode_set(tp, TCP_ECN_MODE_RFC3168);
|
||||
if (tcp_ca_needs_ecn(sk) || bpf_needs_ecn)
|
||||
INET_ECN_xmit(sk);
|
||||
+
|
||||
+ if (dst)
|
||||
+ tcp_set_ecn_low_from_dst(sk, dst);
|
||||
}
|
||||
}
|
||||
|
@@ -1,59 +0,0 @@
|
||||
From 45615e9d62a6b0b688a284dc712c243295df9e65 Mon Sep 17 00:00:00 2001
|
||||
From: Adithya Abraham Philip <abrahamphilip@google.com>
|
||||
Date: Fri, 11 Jun 2021 21:56:10 +0000
|
||||
Subject: [PATCH 17/18] net-tcp_bbr: v3: ensure ECN-enabled BBR flows set ECT
|
||||
on retransmits
|
||||
|
||||
Adds a new flag TCP_ECN_ECT_PERMANENT that is used by CCAs to
|
||||
indicate that retransmitted packets and pure ACKs must have the
|
||||
ECT bit set. This is necessary for BBR, which when using
|
||||
ECN expects ECT to be set even on retransmitted packets and ACKs.
|
||||
|
||||
Previous to this addition of TCP_ECN_ECT_PERMANENT, CCAs which can use
|
||||
ECN but don't "need" it did not have a way to indicate that ECT should
|
||||
be set on retransmissions/ACKs.
|
||||
|
||||
Signed-off-by: Adithya Abraham Philip <abrahamphilip@google.com>
|
||||
Signed-off-by: Neal Cardwell <ncardwell@google.com>
|
||||
Change-Id: I8b048eaab35e136fe6501ef6cd89fd9faa15e6d2
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/net/tcp.h | 1 +
|
||||
net/ipv4/tcp_bbr.c | 3 +++
|
||||
net/ipv4/tcp_output.c | 3 ++-
|
||||
3 files changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/include/net/tcp.h
|
||||
+++ b/include/net/tcp.h
|
||||
@@ -380,6 +380,7 @@ static inline void tcp_dec_quickack_mode
|
||||
#define TCP_ECN_SEEN BIT(3)
|
||||
#define TCP_ECN_MODE_ACCECN BIT(4)
|
||||
#define TCP_ECN_LOW BIT(5)
|
||||
+#define TCP_ECN_ECT_PERMANENT BIT(6)
|
||||
|
||||
#define TCP_ECN_DISABLED 0
|
||||
#define TCP_ECN_MODE_PENDING (TCP_ECN_MODE_RFC3168 | TCP_ECN_MODE_ACCECN)
|
||||
--- a/net/ipv4/tcp_bbr.c
|
||||
+++ b/net/ipv4/tcp_bbr.c
|
||||
@@ -2154,6 +2154,9 @@ __bpf_kfunc static void bbr_init(struct
|
||||
bbr->plb.pause_until = 0;
|
||||
|
||||
tp->fast_ack_mode = bbr_fast_ack_mode ? 1 : 0;
|
||||
+
|
||||
+ if (bbr_can_use_ecn(sk))
|
||||
+ tp->ecn_flags |= TCP_ECN_ECT_PERMANENT;
|
||||
}
|
||||
|
||||
/* BBR marks the current round trip as a loss round. */
|
||||
--- a/net/ipv4/tcp_output.c
|
||||
+++ b/net/ipv4/tcp_output.c
|
||||
@@ -393,7 +393,8 @@ static void tcp_ecn_send(struct sock *sk
|
||||
th->cwr = 1;
|
||||
skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
|
||||
}
|
||||
- } else if (!tcp_ca_needs_ecn(sk)) {
|
||||
+ } else if (!(tp->ecn_flags & TCP_ECN_ECT_PERMANENT) &&
|
||||
+ !tcp_ca_needs_ecn(sk)) {
|
||||
/* ACK or retransmitted segment: clear ECT|CE */
|
||||
INET_ECN_dontxmit(sk);
|
||||
}
|
@@ -1,38 +0,0 @@
|
||||
From 461bd4bd12039886127019682ba6e7f372d9fa0b Mon Sep 17 00:00:00 2001
|
||||
From: Neal Cardwell <ncardwell@google.com>
|
||||
Date: Sun, 23 Jul 2023 23:25:34 -0400
|
||||
Subject: [PATCH 18/18] tcp: export TCPI_OPT_ECN_LOW in tcp_info tcpi_options
|
||||
field
|
||||
|
||||
Analogous to other important ECN information, export TCPI_OPT_ECN_LOW
|
||||
in tcp_info tcpi_options field.
|
||||
|
||||
Signed-off-by: Neal Cardwell <ncardwell@google.com>
|
||||
Change-Id: I08d8d8c7e8780e6e37df54038ee50301ac5a0320
|
||||
Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
---
|
||||
include/uapi/linux/tcp.h | 1 +
|
||||
net/ipv4/tcp.c | 2 ++
|
||||
2 files changed, 3 insertions(+)
|
||||
|
||||
--- a/include/uapi/linux/tcp.h
|
||||
+++ b/include/uapi/linux/tcp.h
|
||||
@@ -184,6 +184,7 @@ enum tcp_fastopen_client_fail {
|
||||
#define TCPI_OPT_ECN_SEEN 16 /* we received at least one packet with ECT */
|
||||
#define TCPI_OPT_SYN_DATA 32 /* SYN-ACK acked data in SYN sent or rcvd */
|
||||
#define TCPI_OPT_USEC_TS 64 /* usec timestamps */
|
||||
+#define TCPI_OPT_ECN_LOW 128 /* Low-latency ECN enabled at conn init */
|
||||
|
||||
/*
|
||||
* Sender's congestion state indicating normal or abnormal situations
|
||||
--- a/net/ipv4/tcp.c
|
||||
+++ b/net/ipv4/tcp.c
|
||||
@@ -4159,6 +4159,8 @@ void tcp_get_info(struct sock *sk, struc
|
||||
info->tcpi_options |= TCPI_OPT_ECN;
|
||||
if (tp->ecn_flags & TCP_ECN_SEEN)
|
||||
info->tcpi_options |= TCPI_OPT_ECN_SEEN;
|
||||
+ if (tp->ecn_flags & TCP_ECN_LOW)
|
||||
+ info->tcpi_options |= TCPI_OPT_ECN_LOW;
|
||||
if (tp->syn_data_acked)
|
||||
info->tcpi_options |= TCPI_OPT_SYN_DATA;
|
||||
if (tp->tcp_usec_ts)
|
@@ -1,4 +1,4 @@
|
||||
From 1b7e9ad0803cef8cf087bb67a6e4c8d63a02405b Mon Sep 17 00:00:00 2001
|
||||
From 4941d9d4ebd5acbee74245ce22f32eca2e320d98 Mon Sep 17 00:00:00 2001
|
||||
From: "mfreemon@cloudflare.com" <mfreemon@cloudflare.com>
|
||||
Date: Tue, 1 Mar 2022 17:06:02 -0600
|
||||
Subject: [PATCH] tcp: Add a sysctl to skip tcp collapse processing when the
|
||||
@@ -41,7 +41,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
|
||||
--- a/include/net/netns/ipv4.h
|
||||
+++ b/include/net/netns/ipv4.h
|
||||
@@ -230,6 +230,7 @@ struct netns_ipv4 {
|
||||
@@ -240,6 +240,7 @@ struct netns_ipv4 {
|
||||
|
||||
u8 sysctl_fib_notify_on_flag_change;
|
||||
u8 sysctl_tcp_syn_linear_timeouts;
|
||||
@@ -51,8 +51,8 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
u8 sysctl_udp_l3mdev_accept;
|
||||
--- a/include/trace/events/tcp.h
|
||||
+++ b/include/trace/events/tcp.h
|
||||
@@ -213,6 +213,13 @@ DEFINE_EVENT(tcp_event_sk, tcp_rcv_space
|
||||
TP_ARGS(sk)
|
||||
@@ -286,6 +286,13 @@ TRACE_EVENT(tcp_rcvbuf_grow,
|
||||
__entry->sock_cookie)
|
||||
);
|
||||
|
||||
+DEFINE_EVENT(tcp_event_sk, tcp_collapse_max_bytes_exceeded,
|
||||
@@ -83,7 +83,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
.maxlen = sizeof(u8),
|
||||
--- a/net/ipv4/tcp_input.c
|
||||
+++ b/net/ipv4/tcp_input.c
|
||||
@@ -5693,6 +5693,7 @@ static bool tcp_prune_ofo_queue(struct s
|
||||
@@ -5695,6 +5695,7 @@ static bool tcp_prune_ofo_queue(struct s
|
||||
static int tcp_prune_queue(struct sock *sk, const struct sk_buff *in_skb)
|
||||
{
|
||||
struct tcp_sock *tp = tcp_sk(sk);
|
||||
@@ -91,7 +91,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
|
||||
NET_INC_STATS(sock_net(sk), LINUX_MIB_PRUNECALLED);
|
||||
|
||||
@@ -5704,6 +5705,39 @@ static int tcp_prune_queue(struct sock *
|
||||
@@ -5706,6 +5707,39 @@ static int tcp_prune_queue(struct sock *
|
||||
if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
|
||||
return 0;
|
||||
|
||||
@@ -131,7 +131,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
tcp_collapse_ofo_queue(sk);
|
||||
if (!skb_queue_empty(&sk->sk_receive_queue))
|
||||
tcp_collapse(sk, &sk->sk_receive_queue, NULL,
|
||||
@@ -5722,6 +5756,8 @@ static int tcp_prune_queue(struct sock *
|
||||
@@ -5724,6 +5758,8 @@ static int tcp_prune_queue(struct sock *
|
||||
if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf)
|
||||
return 0;
|
||||
|
||||
@@ -142,7 +142,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
* and hopefully then we'll have sufficient space.
|
||||
--- a/net/ipv4/tcp_ipv4.c
|
||||
+++ b/net/ipv4/tcp_ipv4.c
|
||||
@@ -3541,6 +3541,7 @@ static int __net_init tcp_sk_init(struct
|
||||
@@ -3542,6 +3542,7 @@ static int __net_init tcp_sk_init(struct
|
||||
|
||||
net->ipv4.sysctl_tcp_syn_linear_timeouts = 4;
|
||||
net->ipv4.sysctl_tcp_shrink_window = 0;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From c98d1c0e1f4b119313eb5852ccbf14b748c5d4a4 Mon Sep 17 00:00:00 2001
|
||||
From 0d49c54082a9e3504feb517fc5e0095798bc5f14 Mon Sep 17 00:00:00 2001
|
||||
From: Mark Weiman <mark.weiman@markzz.com>
|
||||
Date: Sun, 12 Aug 2018 11:36:21 -0400
|
||||
Subject: [PATCH] PCI: Enable overrides for missing ACS capabilities
|
||||
@@ -55,7 +55,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
|
||||
--- a/Documentation/admin-guide/kernel-parameters.txt
|
||||
+++ b/Documentation/admin-guide/kernel-parameters.txt
|
||||
@@ -4691,6 +4691,15 @@
|
||||
@@ -4734,6 +4734,15 @@
|
||||
nomsi [MSI] If the PCI_MSI kernel config parameter is
|
||||
enabled, this kernel boot option can be used to
|
||||
disable the use of MSI interrupts system-wide.
|
||||
@@ -73,7 +73,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
should never be necessary.
|
||||
--- a/drivers/pci/quirks.c
|
||||
+++ b/drivers/pci/quirks.c
|
||||
@@ -3749,6 +3749,106 @@ static void quirk_no_bus_reset(struct pc
|
||||
@@ -3745,6 +3745,106 @@ static void quirk_no_bus_reset(struct pc
|
||||
dev->dev_flags |= PCI_DEV_FLAGS_NO_BUS_RESET;
|
||||
}
|
||||
|
||||
@@ -180,7 +180,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
/*
|
||||
* Some NVIDIA GPU devices do not work with bus reset, SBR needs to be
|
||||
* prevented for those affected devices.
|
||||
@@ -5196,6 +5296,8 @@ static const struct pci_dev_acs_enabled
|
||||
@@ -5192,6 +5292,8 @@ static const struct pci_dev_acs_enabled
|
||||
{ PCI_VENDOR_ID_ZHAOXIN, PCI_ANY_ID, pci_quirk_zhaoxin_pcie_ports_acs },
|
||||
/* Wangxun nics */
|
||||
{ PCI_VENDOR_ID_WANGXUN, PCI_ANY_ID, pci_quirk_wangxun_nic_acs },
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 14d0907ef9d3f5c708d6aff478e32c64cda3d488 Mon Sep 17 00:00:00 2001
|
||||
From 2ab619d115fa9b850f95844ab55745d27a637f43 Mon Sep 17 00:00:00 2001
|
||||
From: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
Date: Sun, 27 Feb 2022 14:46:08 -0800
|
||||
Subject: [PATCH 1/6] extcon: Add driver for Steam Deck
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 3c5ff39975ce84f9d395349445a8742d58f16a20 Mon Sep 17 00:00:00 2001
|
||||
From 7da220466b677e5022380e42899e2521d24bb848 Mon Sep 17 00:00:00 2001
|
||||
From: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
Date: Sat, 19 Feb 2022 16:09:45 -0800
|
||||
Subject: [PATCH 2/6] hwmon: Add driver for Steam Deck's EC sensors
|
||||
@@ -17,7 +17,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
|
||||
--- a/drivers/hwmon/Kconfig
|
||||
+++ b/drivers/hwmon/Kconfig
|
||||
@@ -2110,6 +2110,17 @@ config SENSORS_SCH5636
|
||||
@@ -2118,6 +2118,17 @@ config SENSORS_SCH5636
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called sch5636.
|
||||
|
||||
@@ -37,7 +37,7 @@ Signed-off-by: Alexandre Frade <kernel@xanmod.org>
|
||||
depends on I2C
|
||||
--- a/drivers/hwmon/Makefile
|
||||
+++ b/drivers/hwmon/Makefile
|
||||
@@ -213,6 +213,7 @@ obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47
|
||||
@@ -215,6 +215,7 @@ obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47
|
||||
obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
|
||||
obj-$(CONFIG_SENSORS_SPARX5) += sparx5-temp.o
|
||||
obj-$(CONFIG_SENSORS_SPD5118) += spd5118.o
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 5e06cdcc7f6bf61b94a61f5b421573d2e12c0575 Mon Sep 17 00:00:00 2001
|
||||
From d4dabdc6f5c3cedfb4f5bb1601624a6b8721f8f6 Mon Sep 17 00:00:00 2001
|
||||
From: Andrey Smirnov <andrew.smirnov@gmail.com>
|
||||
Date: Sat, 15 Jul 2023 12:58:54 -0700
|
||||
Subject: [PATCH 3/6] hwmon: steamdeck-hwmon: Add support for max battery
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user