diff --git a/patch.sh b/patch.sh index 14b4dd49284101e232c3738f4599bcbebe11fa47..df055210f6a2aa2d6fc33cab3faf397bc97c6321 100644 --- a/patch.sh +++ b/patch.sh @@ -467,13 +467,13 @@ local_patch () { } #external_git -aufs +#aufs wpanusb bcfserial #rt wireless_regdb ti_pm_firmware -beagleboard_dtbs +#beagleboard_dtbs #local_patch pre_backports () { @@ -511,7 +511,7 @@ patch_backports (){ } backports () { - backport_tag="v5.10.150" + backport_tag="v5.10.153" subsystem="uio" #regenerate="enable" @@ -549,7 +549,7 @@ reverts () { drivers () { #https://github.com/raspberrypi/linux/branches #exit 2 - dir 'RPi' + #dir 'RPi' dir 'drivers/ar1021_i2c' dir 'drivers/tps65217' @@ -557,7 +557,7 @@ drivers () { dir 'drivers/ti/tsc' dir 'drivers/ti/gpio' dir 'drivers/greybus' - dir 'drivers/serdev' + #dir 'drivers/serdev' dir 'drivers/fb_ssd1306' #dir 'drivers/mikrobus' } @@ -580,7 +580,7 @@ fixes packaging () { #do_backport="enable" if [ "x${do_backport}" = "xenable" ] ; then - backport_tag="v6.0.5" + backport_tag="v6.0.7" subsystem="bindeb-pkg" #regenerate="enable" diff --git a/patches/backports/uio/0001-backports-uio-from-linux.git.patch b/patches/backports/uio/0001-backports-uio-from-linux.git.patch index 438cc4965050cb4a8b294388bcb4af4b18c225bb..df2de2e584a0fb6819d29ab6b9d60dd39d5e3f8f 100644 --- a/patches/backports/uio/0001-backports-uio-from-linux.git.patch +++ b/patches/backports/uio/0001-backports-uio-from-linux.git.patch @@ -1,9 +1,9 @@ -From 312e6ef1a2ecb46237abc79861dd32688b4dbf3d Mon Sep 17 00:00:00 2001 +From e24d8d74545851750151f4c0c0ad9a83a4791256 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> -Date: Wed, 26 Oct 2022 09:33:22 -0500 +Date: Thu, 3 Nov 2022 11:29:29 -0500 Subject: [PATCH] backports: uio: from: linux.git -Reference: v5.10.150 +Reference: v5.10.153 Signed-off-by: Robert Nelson <robertcnelson@gmail.com> --- drivers/uio/uio_pruss.c | 44 +++++++++++++++++++++++++++++++---------- diff --git a/patches/bcfserial/0001-merge-bcfserial-https-github.com-statropy-bcfserial.patch b/patches/bcfserial/0001-merge-bcfserial-https-github.com-statropy-bcfserial.patch index 9b5f3af73d7d2564ff7ccea01fc7190d33cfc58d..d60e1684c84692dc7230b2994b086e5eb3c83617 100644 --- a/patches/bcfserial/0001-merge-bcfserial-https-github.com-statropy-bcfserial.patch +++ b/patches/bcfserial/0001-merge-bcfserial-https-github.com-statropy-bcfserial.patch @@ -1,6 +1,6 @@ -From 6b1426a8a17624c78b39e2b0376ac78e157c36eb Mon Sep 17 00:00:00 2001 +From 2ddf8096c5b32d861bcfd2d5908bf86b82784906 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> -Date: Wed, 26 Oct 2022 09:05:35 -0500 +Date: Thu, 3 Nov 2022 11:23:36 -0500 Subject: [PATCH] merge: bcfserial: https://github.com/statropy/bcfserial https://github.com/statropy/bcfserial/commit/aded88429a8a00143596b41f4c1f50d9ae3d4069 diff --git a/patches/defconfig b/patches/defconfig index fb8039adaa5e646d6f39f112d050495d1d4f8981..caf0eef84a03807f74cf8ed00174a158a6c0ec1a 100644 --- a/patches/defconfig +++ b/patches/defconfig @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 6.0.5 Kernel Configuration +# Linux/arm 6.1.0-rc3 Kernel Configuration # CONFIG_CC_VERSION_TEXT="arm-linux-gnueabi-gcc (GCC) 11.3.0" CONFIG_CC_IS_GCC=y @@ -156,7 +156,6 @@ CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y # CONFIG_CGROUP_FAVOR_DYNMODS is not set CONFIG_MEMCG=y -CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_KMEM=y CONFIG_BLK_CGROUP=y CONFIG_CGROUP_WRITEBACK=y @@ -248,7 +247,6 @@ CONFIG_TRACEPOINTS=y CONFIG_ARM=y CONFIG_ARM_HAS_GROUP_RELOCS=y -CONFIG_ARM_HAS_SG_CHAIN=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y CONFIG_HAVE_PROC_CPU=y CONFIG_STACKTRACE_SUPPORT=y @@ -271,7 +269,7 @@ CONFIG_ARCH_MMAP_RND_BITS_MAX=16 CONFIG_ARCH_MULTIPLATFORM=y # -# Multiple platform selection +# Platform selection # # @@ -280,7 +278,7 @@ CONFIG_ARCH_MULTIPLATFORM=y # CONFIG_ARCH_MULTI_V6 is not set CONFIG_ARCH_MULTI_V7=y CONFIG_ARCH_MULTI_V6_V7=y -# end of Multiple platform selection +# end of Platform selection # CONFIG_ARCH_VIRT is not set # CONFIG_ARCH_AIROHA is not set @@ -456,7 +454,7 @@ CONFIG_HIGHPTE=y CONFIG_CPU_SW_DOMAIN_PAN=y CONFIG_HW_PERF_EVENTS=y CONFIG_ARM_MODULE_PLTS=y -CONFIG_FORCE_MAX_ZONEORDER=12 +CONFIG_ARCH_FORCE_MAX_ORDER=12 CONFIG_ALIGNMENT_TRAP=y # CONFIG_UACCESS_WITH_MEMCPY is not set # CONFIG_PARAVIRT is not set @@ -581,25 +579,6 @@ CONFIG_ARM_CPU_SUSPEND=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y # end of Power management options -CONFIG_ARM_CRYPTO=y -CONFIG_CRYPTO_SHA1_ARM=m -CONFIG_CRYPTO_SHA1_ARM_NEON=m -# CONFIG_CRYPTO_SHA1_ARM_CE is not set -# CONFIG_CRYPTO_SHA2_ARM_CE is not set -CONFIG_CRYPTO_SHA256_ARM=m -CONFIG_CRYPTO_SHA512_ARM=m -CONFIG_CRYPTO_BLAKE2S_ARM=y -# CONFIG_CRYPTO_BLAKE2B_NEON is not set -CONFIG_CRYPTO_AES_ARM=m -CONFIG_CRYPTO_AES_ARM_BS=m -# CONFIG_CRYPTO_AES_ARM_CE is not set -# CONFIG_CRYPTO_GHASH_ARM_CE is not set -# CONFIG_CRYPTO_CRCT10DIF_ARM_CE is not set -# CONFIG_CRYPTO_CRC32_ARM_CE is not set -CONFIG_CRYPTO_CHACHA20_NEON=m -CONFIG_CRYPTO_POLY1305_ARM=m -CONFIG_CRYPTO_NHPOLY1305_NEON=m -CONFIG_CRYPTO_CURVE25519_NEON=m CONFIG_AS_VFP_VMRS_FPINST=y # @@ -835,6 +814,7 @@ CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_MEMORY_BALLOON=y CONFIG_BALLOON_COMPACTION=y CONFIG_COMPACTION=y +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 CONFIG_PAGE_REPORTING=y CONFIG_MIGRATION=y CONFIG_CONTIG_ALLOC=y @@ -859,6 +839,7 @@ CONFIG_KMAP_LOCAL=y CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y # CONFIG_ANON_VMA_NAME is not set CONFIG_USERFAULTFD=y +# CONFIG_LRU_GEN is not set # # Data Access Monitoring @@ -1409,7 +1390,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_VLAN_8021Q=m CONFIG_VLAN_8021Q_GVRP=y CONFIG_VLAN_8021Q_MVRP=y -# CONFIG_DECNET is not set CONFIG_LLC=m CONFIG_LLC2=m CONFIG_ATALK=m @@ -2190,6 +2170,7 @@ CONFIG_SATA_PMP=y # # CONFIG_SATA_AHCI_PLATFORM is not set # CONFIG_AHCI_DM816 is not set +# CONFIG_AHCI_DWC is not set # CONFIG_AHCI_CEVA is not set # CONFIG_AHCI_QORIQ is not set # CONFIG_ATA_SFF is not set @@ -2319,6 +2300,8 @@ CONFIG_NET_VENDOR_FUNGIBLE=y # CONFIG_NET_VENDOR_HUAWEI is not set # CONFIG_NET_VENDOR_INTEL is not set CONFIG_NET_VENDOR_WANGXUN=y +CONFIG_NET_VENDOR_ADI=y +# CONFIG_ADIN1110 is not set CONFIG_NET_VENDOR_LITEX=y # CONFIG_LITEX_LITEETH is not set # CONFIG_NET_VENDOR_MARVELL is not set @@ -2370,10 +2353,12 @@ CONFIG_WIZNET_W5100=y CONFIG_WIZNET_BUS_ANY=y CONFIG_WIZNET_W5100_SPI=y # CONFIG_NET_VENDOR_XILINX is not set +CONFIG_PHYLINK=m CONFIG_PHYLIB=y CONFIG_SWPHY=y CONFIG_LED_TRIGGER_PHY=y CONFIG_FIXED_PHY=y +# CONFIG_SFP is not set # # MII PHY device drivers @@ -2425,6 +2410,7 @@ CONFIG_DP83867_PHY=y CONFIG_VITESSE_PHY=y # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set +# CONFIG_PSE_CONTROLLER is not set CONFIG_CAN_DEV=y CONFIG_CAN_VCAN=m CONFIG_CAN_VXCAN=m @@ -2788,6 +2774,7 @@ CONFIG_KEYBOARD_MAX7359=m # CONFIG_KEYBOARD_MPR121 is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_PINEPHONE is not set # CONFIG_KEYBOARD_SAMSUNG is not set CONFIG_KEYBOARD_STOWAWAY=m # CONFIG_KEYBOARD_SUNKBD is not set @@ -2942,6 +2929,7 @@ CONFIG_TOUCHSCREEN_SILEAD=m CONFIG_TOUCHSCREEN_TPS6507X=m # CONFIG_TOUCHSCREEN_ZET6223 is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set +# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set # CONFIG_TOUCHSCREEN_IQS5XX is not set # CONFIG_TOUCHSCREEN_ZINITIX is not set @@ -2969,6 +2957,7 @@ CONFIG_INPUT_UINPUT=m # CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set # CONFIG_INPUT_DA7280_HAPTICS is not set # CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IBM_PANEL is not set # CONFIG_INPUT_IMS_PCU is not set # CONFIG_INPUT_IQS269A is not set # CONFIG_INPUT_IQS626A is not set @@ -3198,6 +3187,7 @@ CONFIG_SPI_BITBANG=y CONFIG_SPI_GPIO=y # CONFIG_SPI_FSL_SPI is not set # CONFIG_SPI_MICROCHIP_CORE is not set +# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set # CONFIG_SPI_OC_TINY is not set CONFIG_SPI_OMAP24XX=y # CONFIG_SPI_TI_QSPI is not set @@ -3260,6 +3250,7 @@ CONFIG_GENERIC_PINMUX_FUNCTIONS=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set # CONFIG_PINCTRL_OCELOT is not set @@ -3310,7 +3301,6 @@ CONFIG_GPIO_SYSCON=y # # I2C GPIO expanders # -CONFIG_GPIO_ADP5588=m CONFIG_GPIO_ADNP=m # CONFIG_GPIO_GW_PLD is not set CONFIG_GPIO_MAX7300=m @@ -3480,7 +3470,6 @@ CONFIG_SENSORS_ADT7475=m CONFIG_SENSORS_AS370=m CONFIG_SENSORS_ASC7621=m # CONFIG_SENSORS_AXI_FAN_CONTROL is not set -CONFIG_SENSORS_ASPEED=m CONFIG_SENSORS_ATXP1=m # CONFIG_SENSORS_CORSAIR_CPRO is not set # CONFIG_SENSORS_CORSAIR_PSU is not set @@ -3521,6 +3510,7 @@ CONFIG_SENSORS_MAX1668=m CONFIG_SENSORS_MAX197=m CONFIG_SENSORS_MAX31722=m CONFIG_SENSORS_MAX31730=m +# CONFIG_SENSORS_MAX31760 is not set CONFIG_SENSORS_MAX6620=m CONFIG_SENSORS_MAX6621=m CONFIG_SENSORS_MAX6639=m @@ -3604,6 +3594,7 @@ CONFIG_SENSORS_Q54SJ108A2=m CONFIG_SENSORS_STPDDC60=m CONFIG_SENSORS_TPS40422=m CONFIG_SENSORS_TPS53679=m +# CONFIG_SENSORS_TPS546D24 is not set CONFIG_SENSORS_UCD9000=m CONFIG_SENSORS_UCD9200=m # CONFIG_SENSORS_XDPE152 is not set @@ -3618,10 +3609,10 @@ CONFIG_SENSORS_SHT21=m CONFIG_SENSORS_SHT3x=m CONFIG_SENSORS_SHT4x=m CONFIG_SENSORS_SHTC1=m -# CONFIG_SENSORS_SY7636A is not set CONFIG_SENSORS_DME1737=m CONFIG_SENSORS_EMC1403=m CONFIG_SENSORS_EMC2103=m +# CONFIG_SENSORS_EMC2305 is not set CONFIG_SENSORS_EMC6W201=m CONFIG_SENSORS_SMSC47M1=m CONFIG_SENSORS_SMSC47M192=m @@ -3779,8 +3770,10 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MAX8997 is not set # CONFIG_MFD_MAX8998 is not set # CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6370 is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_OCELOT is not set # CONFIG_EZX_PCAP is not set # CONFIG_MFD_CPCAP is not set # CONFIG_MFD_VIPERBOARD is not set @@ -3788,14 +3781,15 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set # CONFIG_MFD_PM8XXX is not set +# CONFIG_MFD_SY7636A is not set # CONFIG_MFD_RT4831 is not set # CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RT5120 is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RK808 is not set # CONFIG_MFD_RN5T618 is not set # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SI476X_CORE is not set -# CONFIG_MFD_SIMPLE_MFD_I2C is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_STMPE is not set @@ -3903,7 +3897,6 @@ CONFIG_REGULATOR_PWM=y # CONFIG_REGULATOR_RTQ6752 is not set # CONFIG_REGULATOR_SLG51000 is not set CONFIG_REGULATOR_TI_ABB=y -# CONFIG_REGULATOR_SY7636A is not set # CONFIG_REGULATOR_SY8106A is not set # CONFIG_REGULATOR_SY8824X is not set # CONFIG_REGULATOR_SY8827N is not set @@ -3997,8 +3990,6 @@ CONFIG_VIDEO_V4L2_SUBDEV_API=y CONFIG_VIDEO_TUNER=m CONFIG_V4L2_FWNODE=m CONFIG_V4L2_ASYNC=m -CONFIG_VIDEOBUF_GEN=m -CONFIG_VIDEOBUF_VMALLOC=m # end of Video4Linux options # @@ -4030,7 +4021,6 @@ CONFIG_MEDIA_USB_SUPPORT=y # # Webcam devices # -CONFIG_VIDEO_CPIA2=m CONFIG_USB_GSPCA=m CONFIG_USB_GSPCA_BENQ=m CONFIG_USB_GSPCA_CONEX=m @@ -4088,7 +4078,6 @@ CONFIG_USB_S2255=m CONFIG_VIDEO_USBTV=m CONFIG_USB_VIDEO_CLASS=m CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y -CONFIG_USB_ZR364XX=m # # Analog TV USB devices @@ -4115,7 +4104,6 @@ CONFIG_VIDEO_CX231XX=m CONFIG_VIDEO_CX231XX_RC=y CONFIG_VIDEO_CX231XX_ALSA=m CONFIG_VIDEO_CX231XX_DVB=m -# CONFIG_VIDEO_TM6000 is not set # # Digital TV USB devices @@ -4290,6 +4278,10 @@ CONFIG_VIDEO_MUX=m # Texas Instruments drivers # +# +# Verisilicon media platform drivers +# + # # VIA media platform drivers # @@ -4758,7 +4750,7 @@ CONFIG_DRM=y CONFIG_DRM_MIPI_DBI=m CONFIG_DRM_MIPI_DSI=y # CONFIG_DRM_DEBUG_MM is not set -# CONFIG_DRM_DEBUG_SELFTEST is not set +CONFIG_DRM_USE_DYNAMIC_DEBUG=y CONFIG_DRM_KMS_HELPER=y # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set # CONFIG_DRM_DEBUG_MODESET_LOCK is not set @@ -4766,7 +4758,7 @@ CONFIG_DRM_FBDEV_EMULATION=y CONFIG_DRM_FBDEV_OVERALLOC=100 # CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set CONFIG_DRM_LOAD_EDID_FIRMWARE=y -CONFIG_DRM_GEM_CMA_HELPER=y +CONFIG_DRM_GEM_DMA_HELPER=y CONFIG_DRM_GEM_SHMEM_HELPER=y # @@ -5203,6 +5195,7 @@ CONFIG_SND_SOC_CS42L51_I2C=m # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L56 is not set # CONFIG_SND_SOC_CS42L73 is not set +# CONFIG_SND_SOC_CS42L83 is not set # CONFIG_SND_SOC_CS4234 is not set CONFIG_SND_SOC_CS4265=m # CONFIG_SND_SOC_CS4270 is not set @@ -5221,6 +5214,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m # CONFIG_SND_SOC_ES7134 is not set # CONFIG_SND_SOC_ES7241 is not set # CONFIG_SND_SOC_ES8316 is not set +# CONFIG_SND_SOC_ES8326 is not set CONFIG_SND_SOC_ES8328=m CONFIG_SND_SOC_ES8328_I2C=m CONFIG_SND_SOC_ES8328_SPI=m @@ -5265,6 +5259,7 @@ CONFIG_SND_SOC_SIGMADSP_I2C=m # CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set # CONFIG_SND_SOC_SIMPLE_MUX is not set CONFIG_SND_SOC_SPDIF=m +# CONFIG_SND_SOC_SRC4XXX_I2C is not set # CONFIG_SND_SOC_SSM2305 is not set # CONFIG_SND_SOC_SSM2518 is not set # CONFIG_SND_SOC_SSM2602_SPI is not set @@ -5405,6 +5400,7 @@ CONFIG_HID_KYE=m CONFIG_HID_UCLOGIC=m CONFIG_HID_WALTOP=m CONFIG_HID_VIEWSONIC=m +# CONFIG_HID_VRC2 is not set # CONFIG_HID_XIAOMI is not set CONFIG_HID_GYRATION=m CONFIG_HID_ICADE=m @@ -5446,6 +5442,7 @@ CONFIG_HID_PICOLCD_BACKLIGHT=y CONFIG_HID_PICOLCD_LEDS=y CONFIG_HID_PICOLCD_CIR=y CONFIG_HID_PLANTRONICS=m +# CONFIG_HID_PXRC is not set CONFIG_HID_RAZER=m CONFIG_HID_PRIMAX=m CONFIG_HID_RETRODE=m @@ -5838,7 +5835,6 @@ CONFIG_SDIO_UART=m CONFIG_MMC_SDHCI=y CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_OF_ARASAN is not set -# CONFIG_MMC_SDHCI_OF_ASPEED is not set # CONFIG_MMC_SDHCI_OF_AT91 is not set # CONFIG_MMC_SDHCI_OF_DWCMSHC is not set # CONFIG_MMC_SDHCI_CADENCE is not set @@ -6212,12 +6208,6 @@ CONFIG_ADT7316_SPI=m CONFIG_ADT7316_I2C=m # end of Analog digital bi-direction converters -# -# Capacitance to digital converters -# -CONFIG_AD7746=m -# end of Capacitance to digital converters - # # Direct Digital Synthesis # @@ -6249,7 +6239,6 @@ CONFIG_AD2S1210=m # CONFIG_STAGING_MEDIA is not set # CONFIG_STAGING_BOARD is not set # CONFIG_LTE_GDM724X is not set -# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set CONFIG_FB_TFT=m CONFIG_FB_TFT_AGM1264K_FL=m CONFIG_FB_TFT_BD663474=m @@ -6333,9 +6322,11 @@ CONFIG_COMMON_CLK=y # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_RS9_PCIE is not set # CONFIG_COMMON_CLK_VC5 is not set +# CONFIG_COMMON_CLK_VC7 is not set # CONFIG_COMMON_CLK_FIXED_MMIO is not set CONFIG_COMMON_CLK_TI_ADPLL=y # CONFIG_XILINX_VCU is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set CONFIG_HWSPINLOCK=y CONFIG_HWSPINLOCK_OMAP=y @@ -6483,7 +6474,6 @@ CONFIG_EXTCON_GPIO=y # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set CONFIG_EXTCON_USB_GPIO=y -# CONFIG_EXTCON_USBC_TUSB320 is not set CONFIG_MEMORY=y CONFIG_DDR=y CONFIG_TI_EMIF=y @@ -6560,6 +6550,7 @@ CONFIG_MMA8452=m CONFIG_MMA9551_CORE=m CONFIG_MMA9551=m CONFIG_MMA9553=m +# CONFIG_MSA311 is not set CONFIG_MXC4005=m CONFIG_MXC6255=m CONFIG_SCA3000=m @@ -6607,6 +6598,7 @@ CONFIG_LTC2497=m CONFIG_MAX1027=m CONFIG_MAX11100=m CONFIG_MAX1118=m +# CONFIG_MAX11205 is not set CONFIG_MAX1241=m CONFIG_MAX1363=m CONFIG_MAX9611=m @@ -6614,6 +6606,7 @@ CONFIG_MCP320X=m CONFIG_MCP3422=m CONFIG_MCP3911=m CONFIG_NAU7802=m +# CONFIG_RICHTEK_RTQ6056 is not set CONFIG_SD_ADC_MODULATOR=m CONFIG_TI_ADC081C=m CONFIG_TI_ADC0832=m @@ -6659,6 +6652,7 @@ CONFIG_HMC425=m # Capacitance to digital converters # CONFIG_AD7150=m +CONFIG_AD7746=m # end of Capacitance to digital converters # @@ -6850,6 +6844,8 @@ CONFIG_ADIS16480=m CONFIG_BMI160=m CONFIG_BMI160_I2C=m CONFIG_BMI160_SPI=m +# CONFIG_BOSCH_BNO055_SERIAL is not set +# CONFIG_BOSCH_BNO055_I2C is not set CONFIG_FXOS8700=m CONFIG_FXOS8700_I2C=m CONFIG_FXOS8700_SPI=m @@ -6898,6 +6894,7 @@ CONFIG_HID_SENSOR_PROX=m CONFIG_JSA1212=m CONFIG_RPR0521=m CONFIG_LTR501=m +# CONFIG_LTRF216A is not set CONFIG_LV0104CS=m CONFIG_MAX44000=m CONFIG_MAX44009=m @@ -7161,6 +7158,7 @@ CONFIG_RAS=y CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y # CONFIG_NVMEM_RMEM is not set +CONFIG_NVMEM_U_BOOT_ENV=y # # HW tracing support @@ -7205,6 +7203,7 @@ CONFIG_COUNTER=m CONFIG_TI_EQEP=m # CONFIG_FTM_QUADDEC is not set # CONFIG_MICROCHIP_TCB_CAPTURE is not set +CONFIG_TI_ECAP_CAPTURE=m # CONFIG_MOST is not set # CONFIG_PECI is not set # CONFIG_HTE is not set @@ -7416,23 +7415,6 @@ CONFIG_ROMFS_ON_MTD=y # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set # CONFIG_EROFS_FS is not set -CONFIG_AUFS_FS=m -CONFIG_AUFS_BRANCH_MAX_127=y -# CONFIG_AUFS_BRANCH_MAX_511 is not set -# CONFIG_AUFS_BRANCH_MAX_1023 is not set -# CONFIG_AUFS_BRANCH_MAX_32767 is not set -CONFIG_AUFS_SBILIST=y -# CONFIG_AUFS_HNOTIFY is not set -CONFIG_AUFS_EXPORT=y -CONFIG_AUFS_XATTR=y -# CONFIG_AUFS_FHSM is not set -# CONFIG_AUFS_RDU is not set -# CONFIG_AUFS_DIRREN is not set -# CONFIG_AUFS_SHWH is not set -# CONFIG_AUFS_BR_RAMFS is not set -# CONFIG_AUFS_BR_FUSE is not set -CONFIG_AUFS_BDEV_LOOP=y -# CONFIG_AUFS_DEBUG is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y @@ -7686,6 +7668,7 @@ CONFIG_CRYPTO_AUTHENC=y CONFIG_CRYPTO_TEST=m CONFIG_CRYPTO_SIMD=m CONFIG_CRYPTO_ENGINE=y +# end of Crypto core or helper # # Public-key cryptography @@ -7699,58 +7682,76 @@ CONFIG_CRYPTO_ECDH=y # CONFIG_CRYPTO_ECRDSA is not set # CONFIG_CRYPTO_SM2 is not set # CONFIG_CRYPTO_CURVE25519 is not set +# end of Public-key cryptography # -# Authenticated Encryption with Associated Data +# Block ciphers # -CONFIG_CRYPTO_CCM=m -CONFIG_CRYPTO_GCM=m -CONFIG_CRYPTO_CHACHA20POLY1305=m -CONFIG_CRYPTO_AEGIS128=m -CONFIG_CRYPTO_AEGIS128_SIMD=y -CONFIG_CRYPTO_SEQIV=y -CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_AES=y +CONFIG_CRYPTO_AES_TI=m +CONFIG_CRYPTO_ANUBIS=m +# CONFIG_CRYPTO_ARIA is not set +CONFIG_CRYPTO_BLOWFISH=m +CONFIG_CRYPTO_BLOWFISH_COMMON=m +CONFIG_CRYPTO_CAMELLIA=m +CONFIG_CRYPTO_CAST_COMMON=m +CONFIG_CRYPTO_CAST5=m +CONFIG_CRYPTO_CAST6=m +CONFIG_CRYPTO_DES=m +CONFIG_CRYPTO_FCRYPT=m +CONFIG_CRYPTO_KHAZAD=m +CONFIG_CRYPTO_SEED=m +CONFIG_CRYPTO_SERPENT=m +# CONFIG_CRYPTO_SM4_GENERIC is not set +CONFIG_CRYPTO_TEA=m +CONFIG_CRYPTO_TWOFISH=m +CONFIG_CRYPTO_TWOFISH_COMMON=m +# end of Block ciphers # -# Block modes +# Length-preserving ciphers and modes # +CONFIG_CRYPTO_ADIANTUM=m +CONFIG_CRYPTO_ARC4=m +CONFIG_CRYPTO_CHACHA20=m CONFIG_CRYPTO_CBC=y # CONFIG_CRYPTO_CFB is not set CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=y CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_HCTR2 is not set +# CONFIG_CRYPTO_KEYWRAP is not set CONFIG_CRYPTO_LRW=m # CONFIG_CRYPTO_OFB is not set CONFIG_CRYPTO_PCBC=m CONFIG_CRYPTO_XTS=y -# CONFIG_CRYPTO_KEYWRAP is not set CONFIG_CRYPTO_NHPOLY1305=m -CONFIG_CRYPTO_ADIANTUM=m -# CONFIG_CRYPTO_HCTR2 is not set -CONFIG_CRYPTO_ESSIV=m +# end of Length-preserving ciphers and modes # -# Hash modes +# AEAD (authenticated encryption with associated data) ciphers # -CONFIG_CRYPTO_CMAC=m -CONFIG_CRYPTO_HMAC=y -CONFIG_CRYPTO_XCBC=m -CONFIG_CRYPTO_VMAC=m +CONFIG_CRYPTO_AEGIS128=m +CONFIG_CRYPTO_AEGIS128_SIMD=y +CONFIG_CRYPTO_CHACHA20POLY1305=m +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +CONFIG_CRYPTO_SEQIV=y +CONFIG_CRYPTO_ECHAINIV=m +CONFIG_CRYPTO_ESSIV=m +# end of AEAD (authenticated encryption with associated data) ciphers # -# Digest +# Hashes, digests, and MACs # -CONFIG_CRYPTO_CRC32C=y -CONFIG_CRYPTO_CRC32=y -CONFIG_CRYPTO_XXHASH=y CONFIG_CRYPTO_BLAKE2B=y -CONFIG_CRYPTO_CRCT10DIF=y -CONFIG_CRYPTO_CRC64_ROCKSOFT=y +CONFIG_CRYPTO_CMAC=m CONFIG_CRYPTO_GHASH=m -CONFIG_CRYPTO_POLY1305=m +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 @@ -7759,32 +7760,20 @@ CONFIG_CRYPTO_SHA3=m CONFIG_CRYPTO_SM3=m CONFIG_CRYPTO_SM3_GENERIC=m CONFIG_CRYPTO_STREEBOG=m +CONFIG_CRYPTO_VMAC=m CONFIG_CRYPTO_WP512=m +CONFIG_CRYPTO_XCBC=m +CONFIG_CRYPTO_XXHASH=y +# end of Hashes, digests, and MACs # -# Ciphers +# CRCs (cyclic redundancy checks) # -CONFIG_CRYPTO_AES=y -CONFIG_CRYPTO_AES_TI=m -CONFIG_CRYPTO_ANUBIS=m -CONFIG_CRYPTO_ARC4=m -CONFIG_CRYPTO_BLOWFISH=m -CONFIG_CRYPTO_BLOWFISH_COMMON=m -CONFIG_CRYPTO_CAMELLIA=m -CONFIG_CRYPTO_CAST_COMMON=m -CONFIG_CRYPTO_CAST5=m -CONFIG_CRYPTO_CAST6=m -CONFIG_CRYPTO_DES=m -CONFIG_CRYPTO_FCRYPT=m -CONFIG_CRYPTO_KHAZAD=m -CONFIG_CRYPTO_CHACHA20=m -CONFIG_CRYPTO_SEED=m -# CONFIG_CRYPTO_ARIA is not set -CONFIG_CRYPTO_SERPENT=m -# CONFIG_CRYPTO_SM4_GENERIC is not set -CONFIG_CRYPTO_TEA=m -CONFIG_CRYPTO_TWOFISH=m -CONFIG_CRYPTO_TWOFISH_COMMON=m +CONFIG_CRYPTO_CRC32C=y +CONFIG_CRYPTO_CRC32=y +CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_CRC64_ROCKSOFT=y +# end of CRCs (cyclic redundancy checks) # # Compression @@ -7795,9 +7784,10 @@ CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_LZ4=m CONFIG_CRYPTO_LZ4HC=m CONFIG_CRYPTO_ZSTD=y +# end of Compression # -# Random Number Generation +# Random number generation # CONFIG_CRYPTO_ANSI_CPRNG=m CONFIG_CRYPTO_DRBG_MENU=y @@ -7806,6 +7796,11 @@ CONFIG_CRYPTO_DRBG_HMAC=y # CONFIG_CRYPTO_DRBG_CTR is not set CONFIG_CRYPTO_DRBG=y CONFIG_CRYPTO_JITTERENTROPY=y +# end of Random number generation + +# +# Userspace interface +# CONFIG_CRYPTO_USER_API=m CONFIG_CRYPTO_USER_API_HASH=m CONFIG_CRYPTO_USER_API_SKCIPHER=m @@ -7814,7 +7809,33 @@ CONFIG_CRYPTO_USER_API_RNG=m CONFIG_CRYPTO_USER_API_AEAD=m CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y # CONFIG_CRYPTO_STATS is not set +# end of Userspace interface + CONFIG_CRYPTO_HASH_INFO=y + +# +# Accelerated Cryptographic Algorithms for CPU (arm) +# +CONFIG_CRYPTO_CURVE25519_NEON=m +# CONFIG_CRYPTO_GHASH_ARM_CE is not set +CONFIG_CRYPTO_NHPOLY1305_NEON=m +CONFIG_CRYPTO_POLY1305_ARM=m +CONFIG_CRYPTO_BLAKE2S_ARM=y +# CONFIG_CRYPTO_BLAKE2B_NEON is not set +CONFIG_CRYPTO_SHA1_ARM=m +CONFIG_CRYPTO_SHA1_ARM_NEON=m +# CONFIG_CRYPTO_SHA1_ARM_CE is not set +# CONFIG_CRYPTO_SHA2_ARM_CE is not set +CONFIG_CRYPTO_SHA256_ARM=m +CONFIG_CRYPTO_SHA512_ARM=m +CONFIG_CRYPTO_AES_ARM=m +CONFIG_CRYPTO_AES_ARM_BS=m +# CONFIG_CRYPTO_AES_ARM_CE is not set +CONFIG_CRYPTO_CHACHA20_NEON=m +# CONFIG_CRYPTO_CRC32_ARM_CE is not set +# CONFIG_CRYPTO_CRCT10DIF_ARM_CE is not set +# end of Accelerated Cryptographic Algorithms for CPU (arm) + CONFIG_CRYPTO_HW=y CONFIG_CRYPTO_DEV_OMAP=y CONFIG_CRYPTO_DEV_OMAP_SHAM=y @@ -7869,6 +7890,7 @@ CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y # # Crypto library routines # +CONFIG_CRYPTO_LIB_UTILS=y CONFIG_CRYPTO_LIB_AES=y CONFIG_CRYPTO_LIB_ARC4=m CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S=y @@ -7888,7 +7910,6 @@ CONFIG_CRYPTO_LIB_SHA1=y CONFIG_CRYPTO_LIB_SHA256=y # end of Crypto library routines -CONFIG_LIB_MEMNEQ=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y @@ -7915,6 +7936,7 @@ CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_COMPRESS=m CONFIG_LZ4HC_COMPRESS=m CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMMON=y CONFIG_ZSTD_COMPRESS=y CONFIG_ZSTD_DECOMPRESS=y CONFIG_XZ_DEC=y @@ -8165,6 +8187,7 @@ CONFIG_DEBUG_LIST=y # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set CONFIG_BUG_ON_DATA_CORRUPTION=y +# CONFIG_DEBUG_MAPLE_TREE is not set # end of Debug kernel data structures # CONFIG_DEBUG_CREDENTIALS is not set @@ -8279,4 +8302,9 @@ CONFIG_CC_HAS_SANCOV_TRACE_PC=y CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage + +# +# Rust hacking +# +# end of Rust hacking # end of Kernel hacking diff --git a/patches/ref_omap2plus_defconfig b/patches/ref_omap2plus_defconfig index e1ebdf7cd3c4b4fb094a9ec09da205a2631ba348..61d2c35acdeca3ce12c45d9e432843c947fe1c9c 100644 --- a/patches/ref_omap2plus_defconfig +++ b/patches/ref_omap2plus_defconfig @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 6.0.5 Kernel Configuration +# Linux/arm 6.1.0-rc3 Kernel Configuration # CONFIG_CC_VERSION_TEXT="arm-linux-gnueabi-gcc (GCC) 11.3.0" CONFIG_CC_IS_GCC=y @@ -87,7 +87,7 @@ CONFIG_NO_HZ_COMMON=y # CONFIG_HZ_PERIODIC is not set CONFIG_NO_HZ_IDLE=y # CONFIG_NO_HZ_FULL is not set -CONFIG_NO_HZ=y +# CONFIG_NO_HZ is not set CONFIG_HIGH_RES_TIMERS=y # end of Timers subsystem @@ -152,7 +152,6 @@ CONFIG_CGROUPS=y CONFIG_PAGE_COUNTER=y # CONFIG_CGROUP_FAVOR_DYNMODS is not set CONFIG_MEMCG=y -CONFIG_MEMCG_SWAP=y CONFIG_MEMCG_KMEM=y CONFIG_BLK_CGROUP=y CONFIG_CGROUP_WRITEBACK=y @@ -245,7 +244,6 @@ CONFIG_TRACEPOINTS=y CONFIG_ARM=y CONFIG_ARM_HAS_GROUP_RELOCS=y -CONFIG_ARM_HAS_SG_CHAIN=y CONFIG_ARM_DMA_USE_IOMMU=y CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -268,11 +266,9 @@ CONFIG_MMU=y CONFIG_ARCH_MMAP_RND_BITS_MIN=8 CONFIG_ARCH_MMAP_RND_BITS_MAX=16 CONFIG_ARCH_MULTIPLATFORM=y -# CONFIG_ARCH_FOOTBRIDGE is not set -# CONFIG_ARCH_SA1100 is not set # -# Multiple platform selection +# Platform selection # # @@ -281,7 +277,7 @@ CONFIG_ARCH_MULTIPLATFORM=y CONFIG_ARCH_MULTI_V6=y CONFIG_ARCH_MULTI_V7=y CONFIG_ARCH_MULTI_V6_V7=y -# end of Multiple platform selection +# end of Platform selection # CONFIG_ARCH_VIRT is not set # CONFIG_ARCH_AIROHA is not set @@ -507,7 +503,7 @@ CONFIG_HIGHPTE=y CONFIG_CPU_SW_DOMAIN_PAN=y CONFIG_HW_PERF_EVENTS=y CONFIG_ARM_MODULE_PLTS=y -CONFIG_FORCE_MAX_ZONEORDER=12 +CONFIG_ARCH_FORCE_MAX_ORDER=12 CONFIG_ALIGNMENT_TRAP=y # CONFIG_UACCESS_WITH_MEMCPY is not set # CONFIG_PARAVIRT is not set @@ -634,25 +630,6 @@ CONFIG_ARM_CPU_SUSPEND=y CONFIG_ARCH_HIBERNATION_POSSIBLE=y # end of Power management options -CONFIG_ARM_CRYPTO=y -CONFIG_CRYPTO_SHA1_ARM=m -CONFIG_CRYPTO_SHA1_ARM_NEON=m -# CONFIG_CRYPTO_SHA1_ARM_CE is not set -# CONFIG_CRYPTO_SHA2_ARM_CE is not set -CONFIG_CRYPTO_SHA256_ARM=m -CONFIG_CRYPTO_SHA512_ARM=m -# CONFIG_CRYPTO_BLAKE2S_ARM is not set -# CONFIG_CRYPTO_BLAKE2B_NEON is not set -CONFIG_CRYPTO_AES_ARM=m -CONFIG_CRYPTO_AES_ARM_BS=m -# CONFIG_CRYPTO_AES_ARM_CE is not set -CONFIG_CRYPTO_GHASH_ARM_CE=m -# CONFIG_CRYPTO_CRCT10DIF_ARM_CE is not set -# CONFIG_CRYPTO_CRC32_ARM_CE is not set -CONFIG_CRYPTO_CHACHA20_NEON=m -# CONFIG_CRYPTO_POLY1305_ARM is not set -# CONFIG_CRYPTO_NHPOLY1305_NEON is not set -# CONFIG_CRYPTO_CURVE25519_NEON is not set CONFIG_AS_VFP_VMRS_FPINST=y # @@ -867,6 +844,7 @@ CONFIG_ARCH_KEEP_MEMBLOCK=y CONFIG_MEMORY_ISOLATION=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_COMPACTION=y +CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1 # CONFIG_PAGE_REPORTING is not set CONFIG_MIGRATION=y CONFIG_CONTIG_ALLOC=y @@ -889,6 +867,7 @@ CONFIG_KMAP_LOCAL=y CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y # CONFIG_ANON_VMA_NAME is not set # CONFIG_USERFAULTFD is not set +# CONFIG_LRU_GEN is not set # # Data Access Monitoring @@ -1242,7 +1221,6 @@ CONFIG_BRIDGE_VLAN_FILTERING=y CONFIG_VLAN_8021Q=m # CONFIG_VLAN_8021Q_GVRP is not set # CONFIG_VLAN_8021Q_MVRP is not set -# CONFIG_DECNET is not set CONFIG_LLC=m # CONFIG_LLC2 is not set # CONFIG_ATALK is not set @@ -1912,6 +1890,7 @@ CONFIG_EEPROM_93CX6=y # CONFIG_HABANA_AI is not set # CONFIG_UACCE is not set # CONFIG_PVPANIC is not set +# CONFIG_GP_PCI1XXXX is not set # end of Misc devices # @@ -2014,6 +1993,7 @@ CONFIG_SATA_PMP=y # CONFIG_SATA_AHCI is not set CONFIG_SATA_AHCI_PLATFORM=y CONFIG_AHCI_DM816=m +# CONFIG_AHCI_DWC is not set # CONFIG_AHCI_CEVA is not set # CONFIG_AHCI_QORIQ is not set # CONFIG_SATA_INIC162X is not set @@ -2088,7 +2068,7 @@ CONFIG_ATA_BMDMA=y # CONFIG_PATA_MPIIX is not set # CONFIG_PATA_NS87410 is not set # CONFIG_PATA_OPTI is not set -# CONFIG_PATA_PLATFORM is not set +# CONFIG_PATA_OF_PLATFORM is not set # CONFIG_PATA_RZ1000 is not set # @@ -2200,8 +2180,11 @@ CONFIG_NET_VENDOR_GOOGLE=y CONFIG_NET_VENDOR_HUAWEI=y # CONFIG_NET_VENDOR_INTEL is not set CONFIG_NET_VENDOR_WANGXUN=y +# CONFIG_NGBE is not set # CONFIG_TXGBE is not set # CONFIG_JME is not set +CONFIG_NET_VENDOR_ADI=y +# CONFIG_ADIN1110 is not set CONFIG_NET_VENDOR_LITEX=y # CONFIG_LITEX_LITEETH is not set # CONFIG_NET_VENDOR_MARVELL is not set @@ -2300,10 +2283,12 @@ CONFIG_NET_VENDOR_XILINX=y # CONFIG_XILINX_LL_TEMAC is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +CONFIG_PHYLINK=m CONFIG_PHYLIB=y CONFIG_SWPHY=y # CONFIG_LED_TRIGGER_PHY is not set CONFIG_FIXED_PHY=y +# CONFIG_SFP is not set # # MII PHY device drivers @@ -2355,6 +2340,7 @@ CONFIG_DP83867_PHY=y # CONFIG_VITESSE_PHY is not set # CONFIG_XILINX_GMII2RGMII is not set # CONFIG_MICREL_KS8995MA is not set +# CONFIG_PSE_CONTROLLER is not set CONFIG_CAN_DEV=m # CONFIG_CAN_VCAN is not set # CONFIG_CAN_VXCAN is not set @@ -2655,6 +2641,7 @@ CONFIG_KEYBOARD_MATRIX=m # CONFIG_KEYBOARD_MPR121 is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_PINEPHONE is not set # CONFIG_KEYBOARD_SAMSUNG is not set # CONFIG_KEYBOARD_STOWAWAY is not set # CONFIG_KEYBOARD_SUNKBD is not set @@ -2738,6 +2725,7 @@ CONFIG_TOUCHSCREEN_TSC2007=m # CONFIG_TOUCHSCREEN_TPS6507X is not set # CONFIG_TOUCHSCREEN_ZET6223 is not set # CONFIG_TOUCHSCREEN_ZFORCE is not set +# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set # CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set # CONFIG_TOUCHSCREEN_IQS5XX is not set # CONFIG_TOUCHSCREEN_ZINITIX is not set @@ -2947,6 +2935,7 @@ CONFIG_I2C_OMAP=y # # CONFIG_I2C_DIOLAN_U2C is not set # CONFIG_I2C_CP2615 is not set +# CONFIG_I2C_PCI1XXXX is not set # CONFIG_I2C_ROBOTFUZZ_OSIF is not set # CONFIG_I2C_TAOS_EVM is not set # CONFIG_I2C_TINY_USB is not set @@ -2984,6 +2973,7 @@ CONFIG_SPI_BITBANG=m CONFIG_SPI_GPIO=m # CONFIG_SPI_FSL_SPI is not set # CONFIG_SPI_MICROCHIP_CORE is not set +# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set # CONFIG_SPI_OC_TINY is not set CONFIG_SPI_OMAP24XX=y CONFIG_SPI_TI_QSPI=m @@ -3059,6 +3049,7 @@ CONFIG_GENERIC_PINMUX_FUNCTIONS=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set +# CONFIG_PINCTRL_CY8C95X0 is not set # CONFIG_PINCTRL_MCP23S08 is not set # CONFIG_PINCTRL_MICROCHIP_SGPIO is not set # CONFIG_PINCTRL_OCELOT is not set @@ -3110,7 +3101,6 @@ CONFIG_GPIO_OMAP=y # # I2C GPIO expanders # -# CONFIG_GPIO_ADP5588 is not set # CONFIG_GPIO_ADNP is not set # CONFIG_GPIO_GW_PLD is not set # CONFIG_GPIO_MAX7300 is not set @@ -3299,7 +3289,6 @@ CONFIG_HWMON=m # CONFIG_SENSORS_AS370 is not set # CONFIG_SENSORS_ASC7621 is not set # CONFIG_SENSORS_AXI_FAN_CONTROL is not set -# CONFIG_SENSORS_ASPEED is not set # CONFIG_SENSORS_ATXP1 is not set # CONFIG_SENSORS_CORSAIR_CPRO is not set # CONFIG_SENSORS_CORSAIR_PSU is not set @@ -3341,6 +3330,7 @@ CONFIG_SENSORS_GPIO_FAN=m # CONFIG_SENSORS_MAX197 is not set # CONFIG_SENSORS_MAX31722 is not set # CONFIG_SENSORS_MAX31730 is not set +# CONFIG_SENSORS_MAX31760 is not set # CONFIG_SENSORS_MAX6620 is not set # CONFIG_SENSORS_MAX6621 is not set # CONFIG_SENSORS_MAX6639 is not set @@ -3392,10 +3382,10 @@ CONFIG_SENSORS_LM75=m # CONFIG_SENSORS_SHT4x is not set # CONFIG_SENSORS_SHTC1 is not set # CONFIG_SENSORS_SIS5595 is not set -# CONFIG_SENSORS_SY7636A is not set # CONFIG_SENSORS_DME1737 is not set # CONFIG_SENSORS_EMC1403 is not set # CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC2305 is not set # CONFIG_SENSORS_EMC6W201 is not set # CONFIG_SENSORS_SMSC47M1 is not set # CONFIG_SENSORS_SMSC47M192 is not set @@ -3561,8 +3551,10 @@ CONFIG_MFD_CORE=y # CONFIG_MFD_MAX8997 is not set # CONFIG_MFD_MAX8998 is not set # CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6370 is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set +# CONFIG_MFD_OCELOT is not set # CONFIG_EZX_PCAP is not set CONFIG_MFD_CPCAP=y # CONFIG_MFD_VIPERBOARD is not set @@ -3570,15 +3562,16 @@ CONFIG_MFD_CPCAP=y # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set # CONFIG_MFD_PM8XXX is not set +# CONFIG_MFD_SY7636A is not set # CONFIG_MFD_RDC321X is not set # CONFIG_MFD_RT4831 is not set # CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RT5120 is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_RK808 is not set # CONFIG_MFD_RN5T618 is not set # CONFIG_MFD_SEC_CORE is not set # CONFIG_MFD_SI476X_CORE is not set -# CONFIG_MFD_SIMPLE_MFD_I2C is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SKY81452 is not set # CONFIG_MFD_STMPE is not set @@ -3696,7 +3689,6 @@ CONFIG_REGULATOR_PBIAS=y # CONFIG_REGULATOR_RTQ6752 is not set # CONFIG_REGULATOR_SLG51000 is not set CONFIG_REGULATOR_TI_ABB=y -# CONFIG_REGULATOR_SY7636A is not set # CONFIG_REGULATOR_SY8106A is not set # CONFIG_REGULATOR_SY8824X is not set # CONFIG_REGULATOR_SY8827N is not set @@ -3915,6 +3907,10 @@ CONFIG_V4L_PLATFORM_DRIVERS=y CONFIG_VIDEO_OMAP3=m # CONFIG_VIDEO_OMAP3_DEBUG is not set +# +# Verisilicon media platform drivers +# + # # VIA media platform drivers # @@ -4354,7 +4350,6 @@ CONFIG_DVB_SP2=m # CONFIG_IMX_IPUV3_CORE is not set CONFIG_DRM=m CONFIG_DRM_MIPI_DSI=y -# CONFIG_DRM_DEBUG_SELFTEST is not set CONFIG_DRM_KMS_HELPER=m # CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set # CONFIG_DRM_DEBUG_MODESET_LOCK is not set @@ -4367,7 +4362,7 @@ CONFIG_DRM_DISPLAY_HELPER=m CONFIG_DRM_DISPLAY_DP_HELPER=y # CONFIG_DRM_DP_AUX_CHARDEV is not set # CONFIG_DRM_DP_CEC is not set -CONFIG_DRM_GEM_CMA_HELPER=m +CONFIG_DRM_GEM_DMA_HELPER=m # # I2C encoder or helper chips @@ -4910,6 +4905,7 @@ CONFIG_SND_SOC_CPCAP=m # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L56 is not set # CONFIG_SND_SOC_CS42L73 is not set +# CONFIG_SND_SOC_CS42L83 is not set # CONFIG_SND_SOC_CS4234 is not set # CONFIG_SND_SOC_CS4265 is not set # CONFIG_SND_SOC_CS4270 is not set @@ -4927,6 +4923,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m # CONFIG_SND_SOC_ES7134 is not set # CONFIG_SND_SOC_ES7241 is not set # CONFIG_SND_SOC_ES8316 is not set +# CONFIG_SND_SOC_ES8326 is not set # CONFIG_SND_SOC_ES8328_I2C is not set # CONFIG_SND_SOC_ES8328_SPI is not set # CONFIG_SND_SOC_GTM601 is not set @@ -4967,6 +4964,7 @@ CONFIG_SND_SOC_HDMI_CODEC=m # CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not set # CONFIG_SND_SOC_SIMPLE_MUX is not set # CONFIG_SND_SOC_SPDIF is not set +# CONFIG_SND_SOC_SRC4XXX_I2C is not set # CONFIG_SND_SOC_SSM2305 is not set # CONFIG_SND_SOC_SSM2518 is not set # CONFIG_SND_SOC_SSM2602_SPI is not set @@ -5103,6 +5101,7 @@ CONFIG_HID_GENERIC=m # CONFIG_HID_UCLOGIC is not set # CONFIG_HID_WALTOP is not set # CONFIG_HID_VIEWSONIC is not set +# CONFIG_HID_VRC2 is not set # CONFIG_HID_XIAOMI is not set # CONFIG_HID_GYRATION is not set # CONFIG_HID_ICADE is not set @@ -5132,6 +5131,7 @@ CONFIG_HID_GENERIC=m # CONFIG_HID_PETALYNX is not set # CONFIG_HID_PICOLCD is not set # CONFIG_HID_PLANTRONICS is not set +# CONFIG_HID_PXRC is not set # CONFIG_HID_RAZER is not set # CONFIG_HID_PRIMAX is not set # CONFIG_HID_RETRODE is not set @@ -5538,7 +5538,6 @@ CONFIG_MMC_SDHCI=y # CONFIG_MMC_SDHCI_PCI is not set CONFIG_MMC_SDHCI_PLTFM=y # CONFIG_MMC_SDHCI_OF_ARASAN is not set -# CONFIG_MMC_SDHCI_OF_ASPEED is not set # CONFIG_MMC_SDHCI_OF_AT91 is not set # CONFIG_MMC_SDHCI_OF_DWCMSHC is not set # CONFIG_MMC_SDHCI_CADENCE is not set @@ -5879,9 +5878,11 @@ CONFIG_COMMON_CLK_PALMAS=m # CONFIG_COMMON_CLK_PWM is not set # CONFIG_COMMON_CLK_RS9_PCIE is not set # CONFIG_COMMON_CLK_VC5 is not set +# CONFIG_COMMON_CLK_VC7 is not set # CONFIG_COMMON_CLK_FIXED_MMIO is not set CONFIG_COMMON_CLK_TI_ADPLL=y # CONFIG_XILINX_VCU is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set # CONFIG_HWSPINLOCK is not set # @@ -6011,7 +6012,6 @@ CONFIG_EXTCON_PALMAS=m # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set CONFIG_EXTCON_USB_GPIO=m -# CONFIG_EXTCON_USBC_TUSB320 is not set CONFIG_MEMORY=y CONFIG_DDR=y CONFIG_TI_EMIF=m @@ -6072,6 +6072,7 @@ CONFIG_KXCJK1013=m # CONFIG_MMA8452 is not set # CONFIG_MMA9551 is not set # CONFIG_MMA9553 is not set +# CONFIG_MSA311 is not set # CONFIG_MXC4005 is not set # CONFIG_MXC6255 is not set # CONFIG_SCA3000 is not set @@ -6117,6 +6118,7 @@ CONFIG_INA2XX_ADC=m # CONFIG_MAX1027 is not set # CONFIG_MAX11100 is not set # CONFIG_MAX1118 is not set +# CONFIG_MAX11205 is not set # CONFIG_MAX1241 is not set # CONFIG_MAX1363 is not set # CONFIG_MAX9611 is not set @@ -6125,6 +6127,7 @@ CONFIG_INA2XX_ADC=m # CONFIG_MCP3911 is not set # CONFIG_NAU7802 is not set # CONFIG_PALMAS_GPADC is not set +# CONFIG_RICHTEK_RTQ6056 is not set # CONFIG_SD_ADC_MODULATOR is not set # CONFIG_TI_ADC081C is not set # CONFIG_TI_ADC0832 is not set @@ -6172,6 +6175,7 @@ CONFIG_TWL4030_MADC=m # Capacitance to digital converters # # CONFIG_AD7150 is not set +# CONFIG_AD7746 is not set # end of Capacitance to digital converters # @@ -6340,6 +6344,8 @@ CONFIG_IIO_ST_SENSORS_CORE=m # CONFIG_ADIS16480 is not set # CONFIG_BMI160_I2C is not set # CONFIG_BMI160_SPI is not set +# CONFIG_BOSCH_BNO055_SERIAL is not set +# CONFIG_BOSCH_BNO055_I2C is not set # CONFIG_FXOS8700_I2C is not set # CONFIG_FXOS8700_SPI is not set # CONFIG_KMX61 is not set @@ -6376,6 +6382,7 @@ CONFIG_SENSORS_ISL29028=m # CONFIG_JSA1212 is not set # CONFIG_RPR0521 is not set # CONFIG_LTR501 is not set +# CONFIG_LTRF216A is not set # CONFIG_LV0104CS is not set # CONFIG_MAX44000 is not set # CONFIG_MAX44009 is not set @@ -6626,6 +6633,7 @@ CONFIG_ARM_PMU=y CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y # CONFIG_NVMEM_RMEM is not set +# CONFIG_NVMEM_U_BOOT_ENV is not set # # HW tracing support @@ -6647,6 +6655,7 @@ CONFIG_TI_EQEP=m # CONFIG_FTM_QUADDEC is not set # CONFIG_MICROCHIP_TCB_CAPTURE is not set # CONFIG_INTEL_QEP is not set +# CONFIG_TI_ECAP_CAPTURE is not set # CONFIG_MOST is not set # CONFIG_PECI is not set # CONFIG_HTE is not set @@ -6796,7 +6805,6 @@ CONFIG_CRAMFS_BLOCKDEV=y # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set # CONFIG_EROFS_FS is not set -# CONFIG_AUFS_FS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y @@ -6970,6 +6978,7 @@ CONFIG_CRYPTO_CRYPTD=m # CONFIG_CRYPTO_TEST is not set CONFIG_CRYPTO_SIMD=m CONFIG_CRYPTO_ENGINE=m +# end of Crypto core or helper # # Public-key cryptography @@ -6982,55 +6991,66 @@ CONFIG_CRYPTO_ECDH=m # CONFIG_CRYPTO_ECRDSA is not set # CONFIG_CRYPTO_SM2 is not set # CONFIG_CRYPTO_CURVE25519 is not set +# end of Public-key cryptography # -# Authenticated Encryption with Associated Data +# Block ciphers # -CONFIG_CRYPTO_CCM=m -CONFIG_CRYPTO_GCM=m -# CONFIG_CRYPTO_CHACHA20POLY1305 is not set -# CONFIG_CRYPTO_AEGIS128 is not set -# CONFIG_CRYPTO_SEQIV is not set -# CONFIG_CRYPTO_ECHAINIV is not set +CONFIG_CRYPTO_AES=m +# CONFIG_CRYPTO_AES_TI is not set +# CONFIG_CRYPTO_ARIA is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_DES is not set +CONFIG_CRYPTO_FCRYPT=m +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_SM4_GENERIC is not set +# CONFIG_CRYPTO_TWOFISH is not set +# end of Block ciphers # -# Block modes +# Length-preserving ciphers and modes # +# CONFIG_CRYPTO_ADIANTUM is not set +# CONFIG_CRYPTO_CHACHA20 is not set CONFIG_CRYPTO_CBC=m # CONFIG_CRYPTO_CFB is not set CONFIG_CRYPTO_CTR=m # CONFIG_CRYPTO_CTS is not set CONFIG_CRYPTO_ECB=m +# CONFIG_CRYPTO_HCTR2 is not set +# CONFIG_CRYPTO_KEYWRAP is not set # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_OFB is not set CONFIG_CRYPTO_PCBC=m # CONFIG_CRYPTO_XTS is not set -# CONFIG_CRYPTO_KEYWRAP is not set -# CONFIG_CRYPTO_ADIANTUM is not set -# CONFIG_CRYPTO_HCTR2 is not set -# CONFIG_CRYPTO_ESSIV is not set +# end of Length-preserving ciphers and modes # -# Hash modes +# AEAD (authenticated encryption with associated data) ciphers # -CONFIG_CRYPTO_CMAC=m -CONFIG_CRYPTO_HMAC=m -# CONFIG_CRYPTO_XCBC is not set -# CONFIG_CRYPTO_VMAC is not set +# CONFIG_CRYPTO_AEGIS128 is not set +# CONFIG_CRYPTO_CHACHA20POLY1305 is not set +CONFIG_CRYPTO_CCM=m +CONFIG_CRYPTO_GCM=m +# CONFIG_CRYPTO_SEQIV is not set +# CONFIG_CRYPTO_ECHAINIV is not set +# CONFIG_CRYPTO_ESSIV is not set +# end of AEAD (authenticated encryption with associated data) ciphers # -# Digest +# Hashes, digests, and MACs # -CONFIG_CRYPTO_CRC32C=y -# CONFIG_CRYPTO_CRC32 is not set -# CONFIG_CRYPTO_XXHASH is not set # CONFIG_CRYPTO_BLAKE2B is not set -CONFIG_CRYPTO_CRCT10DIF=y +CONFIG_CRYPTO_CMAC=m CONFIG_CRYPTO_GHASH=m -# CONFIG_CRYPTO_POLY1305 is not set +CONFIG_CRYPTO_HMAC=m # CONFIG_CRYPTO_MD4 is not set CONFIG_CRYPTO_MD5=m CONFIG_CRYPTO_MICHAEL_MIC=y +# CONFIG_CRYPTO_POLY1305 is not set # CONFIG_CRYPTO_RMD160 is not set CONFIG_CRYPTO_SHA1=m CONFIG_CRYPTO_SHA256=m @@ -7038,24 +7058,19 @@ CONFIG_CRYPTO_SHA512=m # CONFIG_CRYPTO_SHA3 is not set # CONFIG_CRYPTO_SM3_GENERIC is not set # CONFIG_CRYPTO_STREEBOG is not set +# CONFIG_CRYPTO_VMAC is not set # CONFIG_CRYPTO_WP512 is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_XXHASH is not set +# end of Hashes, digests, and MACs # -# Ciphers +# CRCs (cyclic redundancy checks) # -CONFIG_CRYPTO_AES=m -# CONFIG_CRYPTO_AES_TI is not set -# CONFIG_CRYPTO_BLOWFISH is not set -# CONFIG_CRYPTO_CAMELLIA is not set -# CONFIG_CRYPTO_CAST5 is not set -# CONFIG_CRYPTO_CAST6 is not set -# CONFIG_CRYPTO_DES is not set -CONFIG_CRYPTO_FCRYPT=m -# CONFIG_CRYPTO_CHACHA20 is not set -# CONFIG_CRYPTO_ARIA is not set -# CONFIG_CRYPTO_SERPENT is not set -# CONFIG_CRYPTO_SM4_GENERIC is not set -# CONFIG_CRYPTO_TWOFISH is not set +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CRC32 is not set +CONFIG_CRYPTO_CRCT10DIF=y +# end of CRCs (cyclic redundancy checks) # # Compression @@ -7066,9 +7081,10 @@ CONFIG_CRYPTO_LZO=y # CONFIG_CRYPTO_LZ4 is not set # CONFIG_CRYPTO_LZ4HC is not set CONFIG_CRYPTO_ZSTD=y +# end of Compression # -# Random Number Generation +# Random number generation # # CONFIG_CRYPTO_ANSI_CPRNG is not set CONFIG_CRYPTO_DRBG_MENU=m @@ -7077,11 +7093,42 @@ CONFIG_CRYPTO_DRBG_HMAC=y # CONFIG_CRYPTO_DRBG_CTR is not set CONFIG_CRYPTO_DRBG=m CONFIG_CRYPTO_JITTERENTROPY=m +# end of Random number generation + +# +# Userspace interface +# # CONFIG_CRYPTO_USER_API_HASH is not set # CONFIG_CRYPTO_USER_API_SKCIPHER is not set # CONFIG_CRYPTO_USER_API_RNG is not set # CONFIG_CRYPTO_USER_API_AEAD is not set +# end of Userspace interface + CONFIG_CRYPTO_HASH_INFO=y + +# +# Accelerated Cryptographic Algorithms for CPU (arm) +# +# CONFIG_CRYPTO_CURVE25519_NEON is not set +CONFIG_CRYPTO_GHASH_ARM_CE=m +# CONFIG_CRYPTO_NHPOLY1305_NEON is not set +# CONFIG_CRYPTO_POLY1305_ARM is not set +# CONFIG_CRYPTO_BLAKE2S_ARM is not set +# CONFIG_CRYPTO_BLAKE2B_NEON is not set +CONFIG_CRYPTO_SHA1_ARM=m +CONFIG_CRYPTO_SHA1_ARM_NEON=m +# CONFIG_CRYPTO_SHA1_ARM_CE is not set +# CONFIG_CRYPTO_SHA2_ARM_CE is not set +CONFIG_CRYPTO_SHA256_ARM=m +CONFIG_CRYPTO_SHA512_ARM=m +CONFIG_CRYPTO_AES_ARM=m +CONFIG_CRYPTO_AES_ARM_BS=m +# CONFIG_CRYPTO_AES_ARM_CE is not set +CONFIG_CRYPTO_CHACHA20_NEON=m +# CONFIG_CRYPTO_CRC32_ARM_CE is not set +# CONFIG_CRYPTO_CRCT10DIF_ARM_CE is not set +# end of Accelerated Cryptographic Algorithms for CPU (arm) + CONFIG_CRYPTO_HW=y # CONFIG_CRYPTO_DEV_HIFN_795X is not set CONFIG_CRYPTO_DEV_OMAP=m @@ -7140,6 +7187,7 @@ CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y # # Crypto library routines # +CONFIG_CRYPTO_LIB_UTILS=y CONFIG_CRYPTO_LIB_AES=m CONFIG_CRYPTO_LIB_ARC4=m CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y @@ -7154,7 +7202,6 @@ CONFIG_CRYPTO_LIB_SHA1=y CONFIG_CRYPTO_LIB_SHA256=m # end of Crypto library routines -CONFIG_LIB_MEMNEQ=y CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y @@ -7179,6 +7226,7 @@ CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMMON=y CONFIG_ZSTD_COMPRESS=y CONFIG_ZSTD_DECOMPRESS=y CONFIG_XZ_DEC=y @@ -7233,6 +7281,7 @@ CONFIG_CMA_ALIGNMENT=8 # CONFIG_DMA_API_DEBUG is not set # CONFIG_DMA_MAP_BENCHMARK is not set CONFIG_SGL_ALLOC=y +# CONFIG_FORCE_NR_CPUS is not set CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y @@ -7429,6 +7478,7 @@ CONFIG_STACKTRACE=y # CONFIG_DEBUG_SG is not set # CONFIG_DEBUG_NOTIFIERS is not set # CONFIG_BUG_ON_DATA_CORRUPTION is not set +# CONFIG_DEBUG_MAPLE_TREE is not set # end of Debug kernel data structures # CONFIG_DEBUG_CREDENTIALS is not set @@ -7565,4 +7615,9 @@ CONFIG_RUNTIME_TESTING_MENU=y CONFIG_ARCH_USE_MEMTEST=y # CONFIG_MEMTEST is not set # end of Kernel Testing and Coverage + +# +# Rust hacking +# +# end of Rust hacking # end of Kernel hacking diff --git a/patches/rt/0001-merge-CONFIG_PREEMPT_RT-Patch-Set.patch b/patches/rt/0001-merge-CONFIG_PREEMPT_RT-Patch-Set.patch index 5c37599c2784d3abf438e58ca0dfc6872c438603..94131d5c966a0a4c8e65711d1f42b7d442955a25 100644 --- a/patches/rt/0001-merge-CONFIG_PREEMPT_RT-Patch-Set.patch +++ b/patches/rt/0001-merge-CONFIG_PREEMPT_RT-Patch-Set.patch @@ -1,9 +1,9 @@ -From 5c41e3e2a863a9918b96f8f1bd51ebadeab1bc1a Mon Sep 17 00:00:00 2001 +From b3283c1c5c48980f350532c05e14ce1444f97f5f Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> -Date: Wed, 26 Oct 2022 08:59:29 -0500 +Date: Thu, 3 Nov 2022 11:24:01 -0500 Subject: [PATCH] merge: CONFIG_PREEMPT_RT Patch Set -patch-6.0.3-rt12.patch.xz +patch-6.1-rc3-rt2.patch.xz Signed-off-by: Robert Nelson <robertcnelson@gmail.com> --- @@ -28,11 +28,9 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> arch/x86/Kconfig | 2 + arch/x86/include/asm/preempt.h | 33 +- arch/x86/include/asm/thread_info.h | 5 + - drivers/bcma/driver_gpio.c | 2 +- drivers/block/zram/zram_drv.c | 36 + drivers/block/zram/zram_drv.h | 3 + drivers/char/tpm/tpm_tis.c | 29 +- - drivers/gpio/gpio-mlxbf2.c | 6 +- drivers/gpu/drm/i915/Kconfig | 1 - drivers/gpu/drm/i915/display/intel_crtc.c | 15 +- drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 5 +- @@ -87,6 +85,7 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> drivers/net/ethernet/ti/am65-cpsw-nuss.c | 4 +- drivers/net/ethernet/ti/netcp_core.c | 8 +- drivers/net/ethernet/via/via-rhine.c | 8 +- + .../net/ethernet/xilinx/xilinx_axienet_main.c | 8 +- drivers/net/hyperv/netvsc_drv.c | 32 +- drivers/net/ifb.c | 12 +- drivers/net/ipvlan/ipvlan_main.c | 4 +- @@ -103,11 +102,8 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> drivers/net/vxlan/vxlan_vnifilter.c | 4 +- drivers/net/wwan/mhi_wwan_mbim.c | 8 +- drivers/net/xen-netfront.c | 8 +- - drivers/pinctrl/pinctrl-amd.c | 2 +- - drivers/platform/x86/intel/int0002_vgpio.c | 3 +- drivers/spi/spi.c | 4 +- - drivers/ssb/driver_gpio.c | 6 +- - drivers/tty/serial/8250/8250.h | 66 +- + drivers/tty/serial/8250/8250.h | 41 +- drivers/tty/serial/8250/8250_aspeed_vuart.c | 2 +- drivers/tty/serial/8250/8250_bcm7271.c | 21 +- drivers/tty/serial/8250/8250_core.c | 24 +- @@ -116,48 +112,38 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> drivers/tty/serial/8250/8250_ingenic.c | 3 +- drivers/tty/serial/8250/8250_mtk.c | 32 +- drivers/tty/serial/8250/8250_omap.c | 20 +- - drivers/tty/serial/8250/8250_port.c | 151 ++- + drivers/tty/serial/8250/8250_port.c | 158 +++- drivers/tty/serial/8250/Kconfig | 1 + drivers/tty/serial/amba-pl011.c | 17 +- drivers/tty/serial/omap-serial.c | 12 +- drivers/tty/sysrq.c | 2 + drivers/vdpa/vdpa_user/iova_domain.h | 1 - - fs/dcache.c | 13 +- include/linux/console.h | 33 +- include/linux/entry-common.h | 8 +- include/linux/interrupt.h | 29 + - include/linux/irqdesc.h | 1 + include/linux/lockdep.h | 1 - - include/linux/mmdebug.h | 6 + include/linux/netdevice.h | 4 + - include/linux/preempt.h | 96 +- - include/linux/printk.h | 16 + - include/linux/rwlock.h | 2 +- + include/linux/preempt.h | 54 +- + include/linux/printk.h | 15 + include/linux/sched.h | 37 + include/linux/serial_8250.h | 5 + - include/linux/spinlock.h | 2 + - include/linux/spinlock_api_smp.h | 2 +- - include/linux/spinlock_api_up.h | 2 +- - include/linux/spinlock_rt.h | 2 +- - include/linux/spinlock_up.h | 2 +- include/linux/thread_info.h | 12 +- include/linux/trace_events.h | 10 +- - include/linux/u64_stats_sync.h | 141 ++- + include/linux/u64_stats_sync.h | 12 - init/Kconfig | 4 + kernel/Kconfig.preempt | 6 + kernel/bpf/syscall.c | 4 +- kernel/entry/common.c | 4 +- kernel/hung_task.c | 11 +- - kernel/irq/irqdesc.c | 24 + kernel/ksysfs.c | 12 + kernel/panic.c | 12 +- kernel/printk/internal.h | 2 + - kernel/printk/printk.c | 891 ++++++++++++++++-- + kernel/printk/printk.c | 890 ++++++++++++++++-- kernel/printk/printk_safe.c | 32 + kernel/rcu/rcutorture.c | 6 + kernel/rcu/tree_stall.h | 2 + kernel/reboot.c | 16 +- - kernel/sched/core.c | 155 ++- + kernel/sched/core.c | 160 +++- kernel/sched/fair.c | 16 +- kernel/sched/features.h | 3 + kernel/sched/sched.h | 9 + @@ -171,14 +157,6 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> kernel/trace/trace_output.c | 18 +- kernel/watchdog.c | 4 + kernel/watchdog_hld.c | 4 + - lib/Kconfig.debug | 3 + - lib/flex_proportions.c | 2 + - lib/vsprintf.c | 47 +- - mm/Kconfig | 6 + - mm/compaction.c | 6 +- - mm/memcontrol.c | 19 +- - mm/slub.c | 473 ++++++---- - mm/vmstat.c | 36 +- net/8021q/vlan_dev.c | 4 +- net/bridge/br_multicast.c | 4 +- net/bridge/br_vlan.c | 4 +- @@ -196,13 +174,13 @@ Signed-off-by: Robert Nelson <robertcnelson@gmail.com> net/netfilter/nf_tables_api.c | 4 +- net/openvswitch/datapath.c | 4 +- net/openvswitch/flow_table.c | 9 +- - 189 files changed, 2786 insertions(+), 976 deletions(-) + 167 files changed, 2310 insertions(+), 607 deletions(-) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig -index 11ecf09aadc8..98aa5a478719 100644 +index a08c9d092a33..4ce79eb994a6 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig -@@ -33,6 +33,7 @@ config ARM +@@ -32,6 +32,7 @@ config ARM select ARCH_OPTIONAL_KERNEL_RWX_DEFAULT if CPU_V7 select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_HUGETLBFS if ARM_LPAE @@ -219,22 +197,15 @@ index 11ecf09aadc8..98aa5a478719 100644 select HAVE_ARCH_KFENCE if MMU && !XIP_KERNEL select HAVE_ARCH_KGDB if !CPU_ENDIAN_BE32 && MMU select HAVE_ARCH_KASAN if MMU && !XIP_KERNEL -@@ -113,6 +114,7 @@ config ARM +@@ -114,6 +115,8 @@ config ARM select HAVE_PERF_EVENTS select HAVE_PERF_REGS select HAVE_PERF_USER_STACK_DUMP ++ select HAVE_POSIX_CPU_TIMERS_TASK_WORK if !KVM + select HAVE_PREEMPT_LAZY select MMU_GATHER_RCU_TABLE_FREE if SMP && ARM_LPAE select HAVE_REGS_AND_STACK_ACCESS_API select HAVE_RSEQ -@@ -128,6 +130,7 @@ config ARM - select OLD_SIGSUSPEND3 - select PCI_SYSCALL if PCI - select PERF_USE_VMALLOC -+ select HAVE_POSIX_CPU_TIMERS_TASK_WORK if !KVM - select RTC_LIB - select SYS_SUPPORTS_APM_EMULATION - select THREAD_INFO_IN_TASK diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index aecc403b2880..1b56e56f8f41 100644 --- a/arch/arm/include/asm/thread_info.h @@ -327,7 +298,7 @@ index c39303e5c234..cfb4660e9fea 100644 __und_fault: diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c -index ea128e32e8ca..3671a4214d6f 100644 +index e07f359254c3..b50a3248e79f 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c @@ -607,7 +607,8 @@ do_work_pending(struct pt_regs *regs, unsigned int thread_flags, int syscall) @@ -365,7 +336,7 @@ index 46cccd6bf705..480a1976a9dc 100644 return 0; } diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig -index 3795eb5ba1cd..6922949e61b7 100644 +index 505c8a1ccbe0..6c01b2b970c7 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -93,6 +93,7 @@ config ARM64 @@ -493,10 +464,10 @@ index 9ad911f1647c..545c41a84411 100644 local_daif_restore(DAIF_PROCCTX_NOIRQ); diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig -index cbe7bb029aec..ad5bcc255f4e 100644 +index 699df27b0e2f..1a8283cb28c8 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig -@@ -149,6 +149,7 @@ config PPC +@@ -150,6 +150,7 @@ config PPC select ARCH_STACKWALK select ARCH_SUPPORTS_ATOMIC_RMW select ARCH_SUPPORTS_DEBUG_PAGEALLOC if PPC_BOOK3S || PPC_8xx || 40x @@ -504,7 +475,7 @@ index cbe7bb029aec..ad5bcc255f4e 100644 select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_CMPXCHG_LOCKREF if PPC64 select ARCH_USE_MEMTEST -@@ -241,8 +242,10 @@ config PPC +@@ -242,8 +243,10 @@ config PPC select HAVE_PERF_EVENTS_NMI if PPC64 select HAVE_PERF_REGS select HAVE_PERF_USER_STACK_DUMP @@ -590,7 +561,7 @@ index af58f1ed3952..520864de8bb2 100644 /* Bits in local_flags */ /* Don't move TLF_NAPPING without adjusting the code in entry_32.S */ diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c -index f9db0a172401..38aa3d06c632 100644 +index fc6631a80527..6cb6a3b79663 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -184,7 +184,7 @@ interrupt_exit_user_prepare_main(unsigned long ret, struct pt_regs *regs) @@ -602,7 +573,7 @@ index f9db0a172401..38aa3d06c632 100644 schedule(); } else { /* -@@ -388,11 +388,15 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) +@@ -396,11 +396,15 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) /* Returning to a kernel context with local irqs enabled. */ WARN_ON_ONCE(!(regs->msr & MSR_EE)); again: @@ -620,10 +591,10 @@ index f9db0a172401..38aa3d06c632 100644 } diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c -index dadfcef5d6db..3bfe55d82b04 100644 +index 9bdd79aa51cf..038f8355b29c 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c -@@ -260,12 +260,17 @@ static char *get_mmu_str(void) +@@ -261,12 +261,17 @@ static char *get_mmu_str(void) static int __die(const char *str, struct pt_regs *regs, long err) { @@ -643,13 +614,13 @@ index dadfcef5d6db..3bfe55d82b04 100644 IS_ENABLED(CONFIG_SMP) ? (" NR_CPUS=" __stringify(NR_CPUS)) : "", debug_pagealloc_enabled() ? " DEBUG_PAGEALLOC" : "", diff --git a/arch/powerpc/kvm/Kconfig b/arch/powerpc/kvm/Kconfig -index dcb398d5e009..2cfa432afdb1 100644 +index a9f57dad6d91..a0b528d4bb7c 100644 --- a/arch/powerpc/kvm/Kconfig +++ b/arch/powerpc/kvm/Kconfig -@@ -221,6 +221,7 @@ config KVM_E500MC +@@ -225,6 +225,7 @@ config KVM_E500MC config KVM_MPIC bool "KVM in-kernel MPIC emulation" - depends on KVM && E500 + depends on KVM && PPC_E500 + depends on !PREEMPT_RT select HAVE_KVM_IRQCHIP select HAVE_KVM_IRQFD @@ -750,18 +721,18 @@ index 561adac69022..61c4c0610aa6 100644 } diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 159c025ebb03..4d62ceece1bb 100644 +index 67745ceab0db..34d36d1f269a 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -109,6 +109,7 @@ config X86 - select ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP if NR_CPUS <= 4096 +@@ -112,6 +112,7 @@ config X86 + select ARCH_USES_CFI_TRAPS if X86_64 && CFI_CLANG select ARCH_SUPPORTS_LTO_CLANG select ARCH_SUPPORTS_LTO_CLANG_THIN + select ARCH_SUPPORTS_RT select ARCH_USE_BUILTIN_BSWAP select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS -@@ -243,6 +244,7 @@ config X86 +@@ -249,6 +250,7 @@ config X86 select HAVE_PCI select HAVE_PERF_REGS select HAVE_PERF_USER_STACK_DUMP @@ -860,24 +831,11 @@ index f0cb881c1d69..fd8fb76f324f 100644 #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) #define _TIF_IO_BITMAP (1 << TIF_IO_BITMAP) #define _TIF_SPEC_FORCE_UPDATE (1 << TIF_SPEC_FORCE_UPDATE) -diff --git a/drivers/bcma/driver_gpio.c b/drivers/bcma/driver_gpio.c -index fac8ff983aec..65fb9bad1577 100644 ---- a/drivers/bcma/driver_gpio.c -+++ b/drivers/bcma/driver_gpio.c -@@ -115,7 +115,7 @@ static irqreturn_t bcma_gpio_irq_handler(int irq, void *dev_id) - return IRQ_NONE; - - for_each_set_bit(gpio, &irqs, gc->ngpio) -- generic_handle_irq(irq_find_mapping(gc->irq.domain, gpio)); -+ generic_handle_domain_irq_safe(gc->irq.domain, gpio); - bcma_chipco_gpio_polarity(cc, irqs, val & irqs); - - return IRQ_HANDLED; diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c -index 226ea76cc819..4043d909d41b 100644 +index 966aab902d19..ee69e4443691 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c -@@ -60,6 +60,40 @@ static void zram_free_page(struct zram *zram, size_t index); +@@ -57,6 +57,40 @@ static void zram_free_page(struct zram *zram, size_t index); static int zram_bvec_read(struct zram *zram, struct bio_vec *bvec, u32 index, int offset, struct bio *bio); @@ -918,7 +876,7 @@ index 226ea76cc819..4043d909d41b 100644 static int zram_slot_trylock(struct zram *zram, u32 index) { -@@ -75,6 +109,7 @@ static void zram_slot_unlock(struct zram *zram, u32 index) +@@ -72,6 +106,7 @@ static void zram_slot_unlock(struct zram *zram, u32 index) { bit_spin_unlock(ZRAM_LOCK, &zram->table[index].flags); } @@ -926,7 +884,7 @@ index 226ea76cc819..4043d909d41b 100644 static inline bool init_done(struct zram *zram) { -@@ -1198,6 +1233,7 @@ static bool zram_meta_alloc(struct zram *zram, u64 disksize) +@@ -1187,6 +1222,7 @@ static bool zram_meta_alloc(struct zram *zram, u64 disksize) if (!huge_class_size) huge_class_size = zs_huge_class_size(zram->mem_pool); @@ -935,10 +893,10 @@ index 226ea76cc819..4043d909d41b 100644 } diff --git a/drivers/block/zram/zram_drv.h b/drivers/block/zram/zram_drv.h -index 80c3b43b4828..ff021a9728d1 100644 +index a2bda53020fd..ae7950b26db5 100644 --- a/drivers/block/zram/zram_drv.h +++ b/drivers/block/zram/zram_drv.h -@@ -63,6 +63,9 @@ struct zram_table_entry { +@@ -62,6 +62,9 @@ struct zram_table_entry { unsigned long element; }; unsigned long flags; @@ -999,25 +957,8 @@ index bcff6429e0b4..4a9ae338a2bd 100644 break; } -diff --git a/drivers/gpio/gpio-mlxbf2.c b/drivers/gpio/gpio-mlxbf2.c -index 64cb060d9d75..77a41151c921 100644 ---- a/drivers/gpio/gpio-mlxbf2.c -+++ b/drivers/gpio/gpio-mlxbf2.c -@@ -273,10 +273,8 @@ static irqreturn_t mlxbf2_gpio_irq_handler(int irq, void *ptr) - pending = readl(gs->gpio_io + YU_GPIO_CAUSE_OR_CAUSE_EVTEN0); - writel(pending, gs->gpio_io + YU_GPIO_CAUSE_OR_CLRCAUSE); - -- for_each_set_bit(level, &pending, gc->ngpio) { -- int gpio_irq = irq_find_mapping(gc->irq.domain, level); -- generic_handle_irq(gpio_irq); -- } -+ for_each_set_bit(level, &pending, gc->ngpio) -+ generic_handle_domain_irq_safe(gc->irq.domain, level); - - return IRQ_RETVAL(pending); - } diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig -index 7ae3b7d67fcf..844f54f1daea 100644 +index 3efce05d7b57..392d51703096 100644 --- a/drivers/gpu/drm/i915/Kconfig +++ b/drivers/gpu/drm/i915/Kconfig @@ -3,7 +3,6 @@ config DRM_I915 @@ -1029,10 +970,10 @@ index 7ae3b7d67fcf..844f54f1daea 100644 select INTERVAL_TREE # we need shmfs for the swappable backing store, and in particular diff --git a/drivers/gpu/drm/i915/display/intel_crtc.c b/drivers/gpu/drm/i915/display/intel_crtc.c -index 4442aa355f86..23085e82c3ed 100644 +index 6792a9056f46..43cedfef104f 100644 --- a/drivers/gpu/drm/i915/display/intel_crtc.c +++ b/drivers/gpu/drm/i915/display/intel_crtc.c -@@ -522,7 +522,8 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state) +@@ -521,7 +521,8 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state) */ intel_psr_wait_for_idle_locked(new_crtc_state); @@ -1042,7 +983,7 @@ index 4442aa355f86..23085e82c3ed 100644 crtc->debug.min_vbl = min; crtc->debug.max_vbl = max; -@@ -547,11 +548,13 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state) +@@ -546,11 +547,13 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state) break; } @@ -1058,7 +999,7 @@ index 4442aa355f86..23085e82c3ed 100644 } finish_wait(wq, &wait); -@@ -584,7 +587,8 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state) +@@ -583,7 +586,8 @@ void intel_pipe_update_start(struct intel_crtc_state *new_crtc_state) return; irq_disable: @@ -1068,7 +1009,7 @@ index 4442aa355f86..23085e82c3ed 100644 } #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_VBLANK_EVADE) -@@ -685,7 +689,8 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state) +@@ -684,7 +688,8 @@ void intel_pipe_update_end(struct intel_crtc_state *new_crtc_state) */ intel_vrr_send_push(new_crtc_state); @@ -1159,7 +1100,7 @@ index c718e6dc40b5..0e592999b7d6 100644 } diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c -index 73cebc6aa650..98305fb39341 100644 +index 86a42d9e8041..1bedfe061865 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -917,7 +917,8 @@ static bool i915_get_crtc_scanoutpos(struct drm_crtc *_crtc, @@ -1227,7 +1168,7 @@ index 37b5c9e9d260..73f29d8008f0 100644 TP_PROTO(struct i915_request *rq), TP_ARGS(rq) diff --git a/drivers/gpu/drm/i915/i915_utils.h b/drivers/gpu/drm/i915/i915_utils.h -index c10d68cdc3ca..593f3a7e0e4f 100644 +index 6c14d13364bf..de58855e6926 100644 --- a/drivers/gpu/drm/i915/i915_utils.h +++ b/drivers/gpu/drm/i915/i915_utils.h @@ -294,7 +294,7 @@ wait_remaining_ms_from_jiffies(unsigned long timestamp_jiffies, int to_wait_ms) @@ -1264,7 +1205,7 @@ index 4eecbdfff3ff..82071d0e5f7f 100644 struct slic_upr { diff --git a/drivers/net/ethernet/amazon/ena/ena_ethtool.c b/drivers/net/ethernet/amazon/ena/ena_ethtool.c -index 39242c5a1729..8f81d288c488 100644 +index 98d6386b7f39..48ae6d810f8f 100644 --- a/drivers/net/ethernet/amazon/ena/ena_ethtool.c +++ b/drivers/net/ethernet/amazon/ena/ena_ethtool.c @@ -118,9 +118,9 @@ static void ena_safe_update_stat(u64 *src, u64 *dst, @@ -1280,10 +1221,10 @@ index 39242c5a1729..8f81d288c488 100644 static void ena_queue_stats(struct ena_adapter *adapter, u64 **data) diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c -index 6a356a6cee15..1c5d48299080 100644 +index d350eeec8bad..df83f04b0980 100644 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c -@@ -3270,10 +3270,10 @@ static void ena_get_stats64(struct net_device *netdev, +@@ -3268,10 +3268,10 @@ static void ena_get_stats64(struct net_device *netdev, tx_ring = &adapter->tx_ring[i]; do { @@ -1296,7 +1237,7 @@ index 6a356a6cee15..1c5d48299080 100644 stats->tx_packets += packets; stats->tx_bytes += bytes; -@@ -3281,20 +3281,20 @@ static void ena_get_stats64(struct net_device *netdev, +@@ -3279,20 +3279,20 @@ static void ena_get_stats64(struct net_device *netdev, rx_ring = &adapter->rx_ring[i]; do { @@ -1354,7 +1295,7 @@ index 25129e723b57..1e8d902e1c8e 100644 return ++count; diff --git a/drivers/net/ethernet/asix/ax88796c_main.c b/drivers/net/ethernet/asix/ax88796c_main.c -index 6ba5b024a7be..25e7beb68e51 100644 +index 8b7cdf015a16..21376c79f671 100644 --- a/drivers/net/ethernet/asix/ax88796c_main.c +++ b/drivers/net/ethernet/asix/ax88796c_main.c @@ -662,12 +662,12 @@ static void ax88796c_get_stats64(struct net_device *ndev, @@ -1373,7 +1314,7 @@ index 6ba5b024a7be..25e7beb68e51 100644 stats->rx_packets += rx_packets; stats->rx_bytes += rx_bytes; diff --git a/drivers/net/ethernet/broadcom/b44.c b/drivers/net/ethernet/broadcom/b44.c -index e5857e88c207..caf1714f36a1 100644 +index 7f876721596c..b751dc8486dc 100644 --- a/drivers/net/ethernet/broadcom/b44.c +++ b/drivers/net/ethernet/broadcom/b44.c @@ -1680,7 +1680,7 @@ static void b44_get_stats64(struct net_device *dev, @@ -1410,7 +1351,7 @@ index e5857e88c207..caf1714f36a1 100644 static void b44_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol) diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c -index 47fc8e6963d5..98d5bd15ee43 100644 +index 425d6ccd5413..f8b1adc389b3 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c @@ -457,10 +457,10 @@ static void bcm_sysport_update_tx_stats(struct bcm_sysport_priv *priv, @@ -1452,7 +1393,7 @@ index 47fc8e6963d5..98d5bd15ee43 100644 static void bcm_sysport_netif_start(struct net_device *dev) diff --git a/drivers/net/ethernet/cortina/gemini.c b/drivers/net/ethernet/cortina/gemini.c -index 6dae768671e3..9e6de2f968fa 100644 +index fdf10318758b..5715b9ab2712 100644 --- a/drivers/net/ethernet/cortina/gemini.c +++ b/drivers/net/ethernet/cortina/gemini.c @@ -1919,7 +1919,7 @@ static void gmac_get_stats64(struct net_device *netdev, @@ -1545,7 +1486,7 @@ index 6dae768671e3..9e6de2f968fa 100644 static int gmac_get_ksettings(struct net_device *netdev, diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c -index bd0df189d871..39e7a4a3c15e 100644 +index 77edc3d9b505..a29de29bdf23 100644 --- a/drivers/net/ethernet/emulex/benet/be_ethtool.c +++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c @@ -389,10 +389,10 @@ static void be_get_ethtool_stats(struct net_device *netdev, @@ -1586,7 +1527,7 @@ index bd0df189d871..39e7a4a3c15e 100644 } } diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c -index 414362febbb9..9350c901aa27 100644 +index a92a74761546..46fe3d74e2e9 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -665,10 +665,10 @@ static void be_get_stats64(struct net_device *netdev, @@ -1715,7 +1656,7 @@ index 7b9a2d9d9624..50b384910c83 100644 data[i++] = tmp_tx_bytes; data[i++] = tx->wake_queue; diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c -index 044db3ebb071..6cafee55efc3 100644 +index d3e3ac242bfc..5a229a01f49d 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -51,10 +51,10 @@ static void gve_get_stats(struct net_device *dev, struct rtnl_link_stats64 *s) @@ -1744,7 +1685,7 @@ index 044db3ebb071..6cafee55efc3 100644 start)); s->tx_packets += packets; s->tx_bytes += bytes; -@@ -1274,9 +1274,9 @@ void gve_handle_report_stats(struct gve_priv *priv) +@@ -1273,9 +1273,9 @@ void gve_handle_report_stats(struct gve_priv *priv) } do { @@ -1757,7 +1698,7 @@ index 044db3ebb071..6cafee55efc3 100644 .stat_name = cpu_to_be32(TX_WAKE_CNT), .value = cpu_to_be64(priv->tx[idx].wake_queue), diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c -index 35d70041b9e8..f82e98263307 100644 +index 4cb2421e71a7..813d5b3d7b58 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c @@ -2486,7 +2486,7 @@ static void hns3_fetch_stats(struct rtnl_link_stats64 *stats, @@ -1779,7 +1720,7 @@ index 35d70041b9e8..f82e98263307 100644 static void hns3_nic_get_stats64(struct net_device *netdev, diff --git a/drivers/net/ethernet/huawei/hinic/hinic_rx.c b/drivers/net/ethernet/huawei/hinic/hinic_rx.c -index e5828a658caf..a866bea65110 100644 +index d649c6e323c8..ceec8be2a73b 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_rx.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_rx.c @@ -74,14 +74,14 @@ void hinic_rxq_get_stats(struct hinic_rxq *rxq, struct hinic_rxq_stats *stats) @@ -1800,7 +1741,7 @@ index e5828a658caf..a866bea65110 100644 /** diff --git a/drivers/net/ethernet/huawei/hinic/hinic_tx.c b/drivers/net/ethernet/huawei/hinic/hinic_tx.c -index 3b6c7b585737..5051cdff2384 100644 +index e91476c8ff8b..ad47ac51a139 100644 --- a/drivers/net/ethernet/huawei/hinic/hinic_tx.c +++ b/drivers/net/ethernet/huawei/hinic/hinic_tx.c @@ -99,14 +99,14 @@ void hinic_txq_get_stats(struct hinic_txq *txq, struct hinic_txq_stats *stats) @@ -1851,7 +1792,7 @@ index 2cca9e84e31e..34ab5ff9823b 100644 stats->tx_packets += packets; stats->tx_bytes += bytes; diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c -index e9cd0fa6a0d2..90f2eee78a3e 100644 +index 4a6a6e48c615..cc269f9db99f 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c +++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c @@ -154,7 +154,7 @@ __i40e_add_ethtool_stats(u64 **data, void *pointer, @@ -1884,10 +1825,10 @@ index e9cd0fa6a0d2..90f2eee78a3e 100644 /* Once we successfully copy the stats in, update the data pointer */ *data += size; diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c -index e3d9804aeb25..09a9f67d9ebc 100644 +index b5dcd15ced36..1a1fab94205d 100644 --- a/drivers/net/ethernet/intel/i40e/i40e_main.c +++ b/drivers/net/ethernet/intel/i40e/i40e_main.c -@@ -418,10 +418,10 @@ static void i40e_get_netdev_stats_struct_tx(struct i40e_ring *ring, +@@ -419,10 +419,10 @@ static void i40e_get_netdev_stats_struct_tx(struct i40e_ring *ring, unsigned int start; do { @@ -1900,7 +1841,7 @@ index e3d9804aeb25..09a9f67d9ebc 100644 stats->tx_packets += packets; stats->tx_bytes += bytes; -@@ -471,10 +471,10 @@ static void i40e_get_netdev_stats_struct(struct net_device *netdev, +@@ -472,10 +472,10 @@ static void i40e_get_netdev_stats_struct(struct net_device *netdev, if (!ring) continue; do { @@ -1913,7 +1854,7 @@ index e3d9804aeb25..09a9f67d9ebc 100644 stats->rx_packets += packets; stats->rx_bytes += bytes; -@@ -896,10 +896,10 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) +@@ -897,10 +897,10 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) continue; do { @@ -1926,7 +1867,7 @@ index e3d9804aeb25..09a9f67d9ebc 100644 tx_b += bytes; tx_p += packets; tx_restart += p->tx_stats.restart_queue; -@@ -914,10 +914,10 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) +@@ -915,10 +915,10 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) continue; do { @@ -1939,7 +1880,7 @@ index e3d9804aeb25..09a9f67d9ebc 100644 rx_b += bytes; rx_p += packets; rx_buf += p->rx_stats.alloc_buff_failed; -@@ -934,10 +934,10 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) +@@ -935,10 +935,10 @@ static void i40e_update_vsi_stats(struct i40e_vsi *vsi) continue; do { @@ -1953,7 +1894,7 @@ index e3d9804aeb25..09a9f67d9ebc 100644 tx_p += packets; tx_restart += p->tx_stats.restart_queue; diff --git a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c -index e535d4c3da49..fafa3406e0bc 100644 +index a056e1545615..d79ead5e8d0c 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_ethtool.c +++ b/drivers/net/ethernet/intel/iavf/iavf_ethtool.c @@ -147,7 +147,7 @@ __iavf_add_ethtool_stats(u64 **data, void *pointer, @@ -1984,10 +1925,10 @@ index e535d4c3da49..fafa3406e0bc 100644 /* Once we successfully copy the stats in, update the data pointer */ *data += size; diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c -index e109cb93886b..b7394c7e5eed 100644 +index 0f6718719453..73e02a8ffa9a 100644 --- a/drivers/net/ethernet/intel/ice/ice_main.c +++ b/drivers/net/ethernet/intel/ice/ice_main.c -@@ -6295,10 +6295,10 @@ ice_fetch_u64_stats_per_ring(struct u64_stats_sync *syncp, +@@ -6370,10 +6370,10 @@ ice_fetch_u64_stats_per_ring(struct u64_stats_sync *syncp, unsigned int start; do { @@ -2001,7 +1942,7 @@ index e109cb93886b..b7394c7e5eed 100644 /** diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c -index c14fc871dd41..23c6fcfcb905 100644 +index e5f3e7680dc6..36acec89d3d4 100644 --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c @@ -2311,15 +2311,15 @@ static void igb_get_ethtool_stats(struct net_device *netdev, @@ -2041,10 +1982,10 @@ index c14fc871dd41..23c6fcfcb905 100644 } spin_unlock(&adapter->stats64_lock); diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c -index 2796e81d2726..98df55dc1e93 100644 +index f8e32833226c..d6c1c2e66f26 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c -@@ -6633,10 +6633,10 @@ void igb_update_stats(struct igb_adapter *adapter) +@@ -6632,10 +6632,10 @@ void igb_update_stats(struct igb_adapter *adapter) } do { @@ -2057,7 +1998,7 @@ index 2796e81d2726..98df55dc1e93 100644 bytes += _bytes; packets += _packets; } -@@ -6649,10 +6649,10 @@ void igb_update_stats(struct igb_adapter *adapter) +@@ -6648,10 +6648,10 @@ void igb_update_stats(struct igb_adapter *adapter) for (i = 0; i < adapter->num_tx_queues; i++) { struct igb_ring *ring = adapter->tx_ring[i]; do { @@ -2111,10 +2052,10 @@ index 8cc077b712ad..5a26a7805ef8 100644 } spin_unlock(&adapter->stats64_lock); diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c -index ebff0e04045d..944299b06cc3 100644 +index 34889be63e78..5d307b6e660b 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c -@@ -4645,10 +4645,10 @@ void igc_update_stats(struct igc_adapter *adapter) +@@ -4682,10 +4682,10 @@ void igc_update_stats(struct igc_adapter *adapter) } do { @@ -2127,7 +2068,7 @@ index ebff0e04045d..944299b06cc3 100644 bytes += _bytes; packets += _packets; } -@@ -4662,10 +4662,10 @@ void igc_update_stats(struct igc_adapter *adapter) +@@ -4699,10 +4699,10 @@ void igc_update_stats(struct igc_adapter *adapter) struct igc_ring *ring = adapter->tx_ring[i]; do { @@ -2141,7 +2082,7 @@ index ebff0e04045d..944299b06cc3 100644 packets += _packets; } diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c -index 04f453eabef6..51bcf0df3adc 100644 +index e88e3dfac8c2..eda7188e8df4 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -1335,10 +1335,10 @@ static void ixgbe_get_ethtool_stats(struct net_device *netdev, @@ -2171,7 +2112,7 @@ index 04f453eabef6..51bcf0df3adc 100644 } diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c -index d1e430b8c8aa..01c5548f181d 100644 +index 298cfbfcb7b6..ab8370c413f3 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -9041,10 +9041,10 @@ static void ixgbe_get_ring_stats64(struct rtnl_link_stats64 *stats, @@ -2201,7 +2142,7 @@ index d1e430b8c8aa..01c5548f181d 100644 stats->rx_bytes += bytes; } diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c -index fed46872af2b..b4632b67ab14 100644 +index ccfa6b91aac6..296915414a7c 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c +++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c @@ -458,10 +458,10 @@ static void ixgbevf_get_ethtool_stats(struct net_device *netdev, @@ -2244,7 +2185,7 @@ index fed46872af2b..b4632b67ab14 100644 } } diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c -index 2f12fbe229c1..1d31b8cff4f1 100644 +index 99933e89717a..be733677bdc8 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -4350,10 +4350,10 @@ static void ixgbevf_get_tx_ring_stats(struct rtnl_link_stats64 *stats, @@ -2274,7 +2215,7 @@ index 2f12fbe229c1..1d31b8cff4f1 100644 stats->rx_packets += packets; } diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c -index 0caa2df87c04..89ea3ef0ee16 100644 +index ff3e361e06e7..81dc57a69fd0 100644 --- a/drivers/net/ethernet/marvell/mvneta.c +++ b/drivers/net/ethernet/marvell/mvneta.c @@ -813,14 +813,14 @@ mvneta_get_stats64(struct net_device *dev, @@ -2313,7 +2254,7 @@ index 0caa2df87c04..89ea3ef0ee16 100644 es->skb_alloc_error += skb_alloc_error; es->refill_error += refill_error; diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c -index eaa51cd7456b..9dd8e0315dd4 100644 +index eb0fb8128096..116e53172072 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -2008,7 +2008,7 @@ mvpp2_get_xdp_stats(struct mvpp2_port *port, struct mvpp2_pcpu_stats *xdp_stats) @@ -2350,7 +2291,7 @@ index eaa51cd7456b..9dd8e0315dd4 100644 stats->rx_packets += rx_packets; stats->rx_bytes += rx_bytes; diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c -index bbea5458000b..c9bb92187719 100644 +index ab33ba1c3023..ff97b140886a 100644 --- a/drivers/net/ethernet/marvell/sky2.c +++ b/drivers/net/ethernet/marvell/sky2.c @@ -3894,19 +3894,19 @@ static void sky2_get_stats(struct net_device *dev, @@ -2378,10 +2319,10 @@ index bbea5458000b..c9bb92187719 100644 stats->tx_packets = _packets; stats->tx_bytes = _bytes; diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c -index b344632beadd..988927f8c5d7 100644 +index 7cd381530aa4..789268b15106 100644 --- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c +++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c -@@ -853,7 +853,7 @@ static void mtk_get_stats64(struct net_device *dev, +@@ -865,7 +865,7 @@ static void mtk_get_stats64(struct net_device *dev, } do { @@ -2390,7 +2331,7 @@ index b344632beadd..988927f8c5d7 100644 storage->rx_packets = hw_stats->rx_packets; storage->tx_packets = hw_stats->tx_packets; storage->rx_bytes = hw_stats->rx_bytes; -@@ -865,7 +865,7 @@ static void mtk_get_stats64(struct net_device *dev, +@@ -877,7 +877,7 @@ static void mtk_get_stats64(struct net_device *dev, storage->rx_crc_errors = hw_stats->rx_fcs_errors; storage->rx_errors = hw_stats->rx_checksum_errors; storage->tx_aborted_errors = hw_stats->tx_skip; @@ -2399,7 +2340,7 @@ index b344632beadd..988927f8c5d7 100644 storage->tx_errors = dev->stats.tx_errors; storage->rx_dropped = dev->stats.rx_dropped; -@@ -3664,13 +3664,13 @@ static void mtk_get_ethtool_stats(struct net_device *dev, +@@ -3684,13 +3684,13 @@ static void mtk_get_ethtool_stats(struct net_device *dev, do { data_dst = data; @@ -2416,7 +2357,7 @@ index b344632beadd..988927f8c5d7 100644 static int mtk_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd, diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c -index 30c7b0e15721..fa2753318cdf 100644 +index 5bcf5bceff71..6ed496f6cbfb 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -827,12 +827,12 @@ mlxsw_sp_port_get_sw_stats64(const struct net_device *dev, @@ -2499,10 +2440,10 @@ index c530db76880f..96d55c91c969 100644 data[i++] = packets; data[i++] = bytes; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c -index 349a2b1a19a2..cf4d6f1129fa 100644 +index 27f4786ace4f..a5ca5c4a7896 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c -@@ -1630,21 +1630,21 @@ static void nfp_net_stat64(struct net_device *netdev, +@@ -1631,21 +1631,21 @@ static void nfp_net_stat64(struct net_device *netdev, unsigned int start; do { @@ -2529,10 +2470,10 @@ index 349a2b1a19a2..cf4d6f1129fa 100644 stats->tx_bytes += data[1]; stats->tx_errors += data[2]; diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c -index b1b1b648e40c..eeb1455a4e5d 100644 +index 22a5d2419084..f6b09eed73dc 100644 --- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c +++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c -@@ -649,7 +649,7 @@ static u64 *nfp_vnic_get_sw_stats(struct net_device *netdev, u64 *data) +@@ -686,7 +686,7 @@ static u64 *nfp_vnic_get_sw_stats(struct net_device *netdev, u64 *data) unsigned int start; do { @@ -2541,7 +2482,7 @@ index b1b1b648e40c..eeb1455a4e5d 100644 data[0] = nn->r_vecs[i].rx_pkts; tmp[0] = nn->r_vecs[i].hw_csum_rx_ok; tmp[1] = nn->r_vecs[i].hw_csum_rx_inner_ok; -@@ -657,10 +657,10 @@ static u64 *nfp_vnic_get_sw_stats(struct net_device *netdev, u64 *data) +@@ -694,10 +694,10 @@ static u64 *nfp_vnic_get_sw_stats(struct net_device *netdev, u64 *data) tmp[3] = nn->r_vecs[i].hw_csum_rx_error; tmp[4] = nn->r_vecs[i].rx_replace_buf_alloc_fail; tmp[5] = nn->r_vecs[i].hw_tls_rx; @@ -2554,7 +2495,7 @@ index b1b1b648e40c..eeb1455a4e5d 100644 data[1] = nn->r_vecs[i].tx_pkts; data[2] = nn->r_vecs[i].tx_busy; tmp[6] = nn->r_vecs[i].hw_csum_tx; -@@ -670,7 +670,7 @@ static u64 *nfp_vnic_get_sw_stats(struct net_device *netdev, u64 *data) +@@ -707,7 +707,7 @@ static u64 *nfp_vnic_get_sw_stats(struct net_device *netdev, u64 *data) tmp[10] = nn->r_vecs[i].hw_tls_tx; tmp[11] = nn->r_vecs[i].tls_tx_fallback; tmp[12] = nn->r_vecs[i].tls_tx_no_fallback; @@ -2584,7 +2525,7 @@ index 8b77582bdfa0..a6b6ca1fd55e 100644 stats->tx_bytes += tbytes; stats->tx_packets += tpkts; diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c -index 5116badaf091..50ebbd7e91c4 100644 +index daa028729d44..0605d1ee490d 100644 --- a/drivers/net/ethernet/nvidia/forcedeth.c +++ b/drivers/net/ethernet/nvidia/forcedeth.c @@ -1734,12 +1734,12 @@ static void nv_get_stats(int cpu, struct fe_priv *np, @@ -2633,7 +2574,7 @@ index 1b2119b1d48a..3f5e6572d20e 100644 total_stats.rx_pkts += snapshot.rx_pkts; total_stats.rx_bytes += snapshot.rx_bytes; diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c -index 15b40fd93cd2..82bd0eb61463 100644 +index 469e2e229c6e..9ce0e8a64ba8 100644 --- a/drivers/net/ethernet/realtek/8139too.c +++ b/drivers/net/ethernet/realtek/8139too.c @@ -2532,16 +2532,16 @@ rtl8139_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) @@ -2658,10 +2599,10 @@ index 15b40fd93cd2..82bd0eb61463 100644 /* Set or clear the multicast filter for this adaptor. diff --git a/drivers/net/ethernet/socionext/sni_ave.c b/drivers/net/ethernet/socionext/sni_ave.c -index f0c8de2c6075..d4f7238333bb 100644 +index d2c6a5dfdc0e..b7e24ae92525 100644 --- a/drivers/net/ethernet/socionext/sni_ave.c +++ b/drivers/net/ethernet/socionext/sni_ave.c -@@ -1506,16 +1506,16 @@ static void ave_get_stats64(struct net_device *ndev, +@@ -1508,16 +1508,16 @@ static void ave_get_stats64(struct net_device *ndev, unsigned int start; do { @@ -2683,10 +2624,10 @@ index f0c8de2c6075..d4f7238333bb 100644 stats->rx_errors = priv->stats_rx.errors; stats->tx_errors = priv->stats_tx.errors; diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c -index f4a6b590a1e3..1b62400c1904 100644 +index 7f86068f3ff6..8800c8a010ff 100644 --- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c +++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c -@@ -1365,12 +1365,12 @@ static void am65_cpsw_nuss_ndo_get_stats(struct net_device *dev, +@@ -1362,12 +1362,12 @@ static void am65_cpsw_nuss_ndo_get_stats(struct net_device *dev, cpu_stats = per_cpu_ptr(ndev_priv->stats, cpu); do { @@ -2702,7 +2643,7 @@ index f4a6b590a1e3..1b62400c1904 100644 stats->rx_packets += rx_packets; stats->rx_bytes += rx_bytes; diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c -index b15d44261e76..68c7b2c05aab 100644 +index aba70bef4894..8b776f9cdb3f 100644 --- a/drivers/net/ethernet/ti/netcp_core.c +++ b/drivers/net/ethernet/ti/netcp_core.c @@ -1916,16 +1916,16 @@ netcp_get_stats(struct net_device *ndev, struct rtnl_link_stats64 *stats) @@ -2727,7 +2668,7 @@ index b15d44261e76..68c7b2c05aab 100644 stats->rx_packets = rxpackets; stats->rx_bytes = rxbytes; diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c -index 509c5e9b29df..5301c907b5ae 100644 +index 0fb15a17b547..d716e6fe26e1 100644 --- a/drivers/net/ethernet/via/via-rhine.c +++ b/drivers/net/ethernet/via/via-rhine.c @@ -2217,16 +2217,16 @@ rhine_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) @@ -2751,8 +2692,33 @@ index 509c5e9b29df..5301c907b5ae 100644 } static void rhine_set_rx_mode(struct net_device *dev) +diff --git a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +index d1d772580da9..441e1058104f 100644 +--- a/drivers/net/ethernet/xilinx/xilinx_axienet_main.c ++++ b/drivers/net/ethernet/xilinx/xilinx_axienet_main.c +@@ -1305,16 +1305,16 @@ axienet_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) + netdev_stats_to_stats64(stats, &dev->stats); + + do { +- start = u64_stats_fetch_begin_irq(&lp->rx_stat_sync); ++ start = u64_stats_fetch_begin(&lp->rx_stat_sync); + stats->rx_packets = u64_stats_read(&lp->rx_packets); + stats->rx_bytes = u64_stats_read(&lp->rx_bytes); +- } while (u64_stats_fetch_retry_irq(&lp->rx_stat_sync, start)); ++ } while (u64_stats_fetch_retry(&lp->rx_stat_sync, start)); + + do { +- start = u64_stats_fetch_begin_irq(&lp->tx_stat_sync); ++ start = u64_stats_fetch_begin(&lp->tx_stat_sync); + stats->tx_packets = u64_stats_read(&lp->tx_packets); + stats->tx_bytes = u64_stats_read(&lp->tx_bytes); +- } while (u64_stats_fetch_retry_irq(&lp->tx_stat_sync, start)); ++ } while (u64_stats_fetch_retry(&lp->tx_stat_sync, start)); + } + + static const struct net_device_ops axienet_netdev_ops = { diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c -index 8113ac17ab70..2fd8b9c51e83 100644 +index 89eb4f179a3c..f9b219e6cd58 100644 --- a/drivers/net/hyperv/netvsc_drv.c +++ b/drivers/net/hyperv/netvsc_drv.c @@ -1264,12 +1264,12 @@ static void netvsc_get_vf_stats(struct net_device *net, @@ -2908,7 +2874,7 @@ index 1c64d5347b8e..78253ad57b2e 100644 *data += IFB_Q_STATS_LEN; } diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c -index 49ba8a50dfb1..8a58d74638cd 100644 +index 54c94a69c2bb..b6bfa9fdca62 100644 --- a/drivers/net/ipvlan/ipvlan_main.c +++ b/drivers/net/ipvlan/ipvlan_main.c @@ -299,13 +299,13 @@ static void ipvlan_get_stats64(struct net_device *dev, @@ -2945,10 +2911,10 @@ index 14e8d04cb434..c4ad98d39ea6 100644 *packets += tpackets; } diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c -index c6d271e5687e..5056f3cd5699 100644 +index c891b60937a7..ad38fadd0d89 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c -@@ -2823,9 +2823,9 @@ static void get_rx_sc_stats(struct net_device *dev, +@@ -2795,9 +2795,9 @@ static void get_rx_sc_stats(struct net_device *dev, stats = per_cpu_ptr(rx_sc->stats, cpu); do { @@ -2960,7 +2926,7 @@ index c6d271e5687e..5056f3cd5699 100644 sum->InOctetsValidated += tmp.InOctetsValidated; sum->InOctetsDecrypted += tmp.InOctetsDecrypted; -@@ -2904,9 +2904,9 @@ static void get_tx_sc_stats(struct net_device *dev, +@@ -2876,9 +2876,9 @@ static void get_tx_sc_stats(struct net_device *dev, stats = per_cpu_ptr(macsec_priv(dev)->secy.tx_sc.stats, cpu); do { @@ -2972,7 +2938,7 @@ index c6d271e5687e..5056f3cd5699 100644 sum->OutPktsProtected += tmp.OutPktsProtected; sum->OutPktsEncrypted += tmp.OutPktsEncrypted; -@@ -2960,9 +2960,9 @@ static void get_secy_stats(struct net_device *dev, struct macsec_dev_stats *sum) +@@ -2932,9 +2932,9 @@ static void get_secy_stats(struct net_device *dev, struct macsec_dev_stats *sum) stats = per_cpu_ptr(macsec_priv(dev)->stats, cpu); do { @@ -2985,7 +2951,7 @@ index c6d271e5687e..5056f3cd5699 100644 sum->OutPktsUntagged += tmp.OutPktsUntagged; sum->InPktsUntagged += tmp.InPktsUntagged; diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c -index 1080d6ebff63..a1c7823f0ba6 100644 +index c5cfe8555199..c58fea63be7d 100644 --- a/drivers/net/macvlan.c +++ b/drivers/net/macvlan.c @@ -948,13 +948,13 @@ static void macvlan_dev_get_stats64(struct net_device *dev, @@ -3050,7 +3016,7 @@ index 9a1a5b203624..e470e3398abc 100644 static int diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c -index 154a3c0a6dfd..3de937141c16 100644 +index 62ade69295a9..d10606f257c4 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1865,13 +1865,13 @@ team_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats) @@ -3086,7 +3052,7 @@ index b095a4b4957b..18d99fda997c 100644 } diff --git a/drivers/net/veth.c b/drivers/net/veth.c -index 466da01ba2e3..2da7cfcfe1c3 100644 +index 09682ea3354e..740506c44427 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -182,12 +182,12 @@ static void veth_get_ethtool_stats(struct net_device *dev, @@ -3136,10 +3102,10 @@ index 466da01ba2e3..2da7cfcfe1c3 100644 result->xdp_tx_err += xdp_tx_err; result->xdp_packets += packets; diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c -index 9cce7dec7366..a94d9d8f67fd 100644 +index 7106932c6f88..56dbd645d7c8 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c -@@ -2066,18 +2066,18 @@ static void virtnet_stats(struct net_device *dev, +@@ -2069,18 +2069,18 @@ static void virtnet_stats(struct net_device *dev, struct send_queue *sq = &vi->sq[i]; do { @@ -3162,7 +3128,7 @@ index 9cce7dec7366..a94d9d8f67fd 100644 tot->rx_packets += rpackets; tot->tx_packets += tpackets; -@@ -2688,12 +2688,12 @@ static void virtnet_get_ethtool_stats(struct net_device *dev, +@@ -2691,12 +2691,12 @@ static void virtnet_get_ethtool_stats(struct net_device *dev, stats_base = (u8 *)&rq->stats; do { @@ -3177,7 +3143,7 @@ index 9cce7dec7366..a94d9d8f67fd 100644 idx += VIRTNET_RQ_STATS_LEN; } -@@ -2702,12 +2702,12 @@ static void virtnet_get_ethtool_stats(struct net_device *dev, +@@ -2705,12 +2705,12 @@ static void virtnet_get_ethtool_stats(struct net_device *dev, stats_base = (u8 *)&sq->stats; do { @@ -3193,7 +3159,7 @@ index 9cce7dec7366..a94d9d8f67fd 100644 } } diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c -index 5df7a0abc39d..191ebc482f0c 100644 +index badf6f09ae51..6b5a4d036d15 100644 --- a/drivers/net/vrf.c +++ b/drivers/net/vrf.c @@ -159,13 +159,13 @@ static void vrf_get_stats64(struct net_device *dev, @@ -3257,7 +3223,7 @@ index 6872782e8dd8..22b5939a42bb 100644 static void mhi_mbim_ul_callback(struct mhi_device *mhi_dev, diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c -index 27a11cc08c61..df4dc02638a0 100644 +index 9af2b027c19c..ef4e53bf5604 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c @@ -1392,16 +1392,16 @@ static void xennet_get_stats64(struct net_device *dev, @@ -3281,35 +3247,8 @@ index 27a11cc08c61..df4dc02638a0 100644 tot->rx_packets += rx_packets; tot->tx_packets += tx_packets; -diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c -index 4691a33bc374..4ed2b4ba9568 100644 ---- a/drivers/pinctrl/pinctrl-amd.c -+++ b/drivers/pinctrl/pinctrl-amd.c -@@ -639,7 +639,7 @@ static bool do_amd_gpio_irq_handler(int irq, void *dev_id) - if (!(regval & PIN_IRQ_PENDING) || - !(regval & BIT(INTERRUPT_MASK_OFF))) - continue; -- generic_handle_domain_irq(gc->irq.domain, irqnr + i); -+ generic_handle_domain_irq_safe(gc->irq.domain, irqnr + i); - - /* Clear interrupt. - * We must read the pin register again, in case the -diff --git a/drivers/platform/x86/intel/int0002_vgpio.c b/drivers/platform/x86/intel/int0002_vgpio.c -index 617dbf98980e..97cfbc520a02 100644 ---- a/drivers/platform/x86/intel/int0002_vgpio.c -+++ b/drivers/platform/x86/intel/int0002_vgpio.c -@@ -125,8 +125,7 @@ static irqreturn_t int0002_irq(int irq, void *data) - if (!(gpe_sts_reg & GPE0A_PME_B0_STS_BIT)) - return IRQ_NONE; - -- generic_handle_irq(irq_find_mapping(chip->irq.domain, -- GPE0A_PME_B0_VIRT_GPIO_PIN)); -+ generic_handle_domain_irq_safe(chip->irq.domain, GPE0A_PME_B0_VIRT_GPIO_PIN); - - pm_wakeup_hard_event(chip->parent); - diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c -index 4b42f2302a8a..d4f77f6688cf 100644 +index 5f9aedd1f0b6..dabe89666efd 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -127,10 +127,10 @@ do { \ @@ -3325,35 +3264,11 @@ index 4b42f2302a8a..d4f77f6688cf 100644 &pcpu_stats->syncp, start)); \ ret += inc; \ } \ -diff --git a/drivers/ssb/driver_gpio.c b/drivers/ssb/driver_gpio.c -index 2de3896489c8..897cb8db5084 100644 ---- a/drivers/ssb/driver_gpio.c -+++ b/drivers/ssb/driver_gpio.c -@@ -132,7 +132,8 @@ static irqreturn_t ssb_gpio_irq_chipco_handler(int irq, void *dev_id) - return IRQ_NONE; - - for_each_set_bit(gpio, &irqs, bus->gpio.ngpio) -- generic_handle_irq(ssb_gpio_to_irq(&bus->gpio, gpio)); -+ generic_handle_domain_irq_safe(bus->irq_domain, gpio); -+ - ssb_chipco_gpio_polarity(chipco, irqs, val & irqs); - - return IRQ_HANDLED; -@@ -330,7 +331,8 @@ static irqreturn_t ssb_gpio_irq_extif_handler(int irq, void *dev_id) - return IRQ_NONE; - - for_each_set_bit(gpio, &irqs, bus->gpio.ngpio) -- generic_handle_irq(ssb_gpio_to_irq(&bus->gpio, gpio)); -+ generic_handle_domain_irq_safe(bus->irq_domain, gpio); -+ - ssb_extif_gpio_polarity(extif, irqs, val & irqs); - - return IRQ_HANDLED; diff --git a/drivers/tty/serial/8250/8250.h b/drivers/tty/serial/8250/8250.h -index 287153d32536..81f5fce6e895 100644 +index 287153d32536..82cbe22a9633 100644 --- a/drivers/tty/serial/8250/8250.h +++ b/drivers/tty/serial/8250/8250.h -@@ -177,12 +177,74 @@ static inline void serial_dl_write(struct uart_8250_port *up, int value) +@@ -177,12 +177,49 @@ static inline void serial_dl_write(struct uart_8250_port *up, int value) up->dl_write(up, value); } @@ -3393,31 +3308,6 @@ index 287153d32536..81f5fce6e895 100644 + if (is_console) + printk_cpu_sync_put_irqrestore(flags); +} -+ -+static inline int serial8250_clear_IER(struct uart_8250_port *up) -+{ -+ struct uart_port *port = &up->port; -+ unsigned int clearval = 0; -+ unsigned long flags; -+ bool is_console; -+ int prior; -+ -+ is_console = uart_console(port); -+ -+ if (up->capabilities & UART_CAP_UUE) -+ clearval = UART_IER_UUE; -+ -+ if (is_console) -+ printk_cpu_sync_get_irqsave(flags); -+ -+ prior = serial_in(up, UART_IER); -+ serial_out(up, UART_IER, clearval); -+ -+ if (is_console) -+ printk_cpu_sync_put_irqrestore(flags); -+ -+ return prior; -+} + static inline bool serial8250_set_THRI(struct uart_8250_port *up) { @@ -3429,7 +3319,7 @@ index 287153d32536..81f5fce6e895 100644 return true; } -@@ -191,7 +253,7 @@ static inline bool serial8250_clear_THRI(struct uart_8250_port *up) +@@ -191,7 +228,7 @@ static inline bool serial8250_clear_THRI(struct uart_8250_port *up) if (!(up->ier & UART_IER_THRI)) return false; up->ier &= ~UART_IER_THRI; @@ -3452,7 +3342,7 @@ index 9d2a7856784f..7cc6b527c088 100644 static void aspeed_vuart_set_throttle(struct uart_port *port, bool throttle) { diff --git a/drivers/tty/serial/8250/8250_bcm7271.c b/drivers/tty/serial/8250/8250_bcm7271.c -index 8efdc271eb75..d30c74618411 100644 +index fa8ccf204d86..ccf63c001e56 100644 --- a/drivers/tty/serial/8250/8250_bcm7271.c +++ b/drivers/tty/serial/8250/8250_bcm7271.c @@ -609,7 +609,7 @@ static int brcmuart_startup(struct uart_port *port) @@ -3662,7 +3552,7 @@ index 2b2f5d8d24b9..2b78e6c394fb 100644 if (ier & UART_IER_MSI) value |= UART_MCR_MDCE | UART_MCR_FCM; diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c -index 54051ec7b499..6092c75808fb 100644 +index fb1d5ec0940e..3e7203909d6a 100644 --- a/drivers/tty/serial/8250/8250_mtk.c +++ b/drivers/tty/serial/8250/8250_mtk.c @@ -222,12 +222,40 @@ static void mtk8250_shutdown(struct uart_port *port) @@ -3709,7 +3599,7 @@ index 54051ec7b499..6092c75808fb 100644 static void mtk8250_set_flow_ctrl(struct uart_8250_port *up, int mode) diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c -index 38ee3e42251a..8dc983a8cad1 100644 +index 41b8c6b27136..835b63793dd3 100644 --- a/drivers/tty/serial/8250/8250_omap.c +++ b/drivers/tty/serial/8250/8250_omap.c @@ -325,7 +325,7 @@ static void omap8250_restore_regs(struct uart_8250_port *up) @@ -3784,7 +3674,7 @@ index 38ee3e42251a..8dc983a8cad1 100644 } goto out; } -@@ -1148,12 +1148,12 @@ static void am654_8250_handle_rx_dma(struct uart_8250_port *up, u8 iir, +@@ -1146,12 +1146,12 @@ static void am654_8250_handle_rx_dma(struct uart_8250_port *up, u8 iir, * periodic timeouts, re-enable interrupts. */ up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); @@ -3800,7 +3690,7 @@ index 38ee3e42251a..8dc983a8cad1 100644 } diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c -index 2030a92ac66e..326549603740 100644 +index fe8662cd9402..2fc63f17deb1 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -743,7 +743,7 @@ static void serial8250_set_sleep(struct uart_8250_port *p, int sleep) @@ -3812,7 +3702,41 @@ index 2030a92ac66e..326549603740 100644 if (p->capabilities & UART_CAP_EFR) { serial_out(p, UART_LCR, UART_LCR_CONF_MODE_B); serial_out(p, UART_EFR, efr); -@@ -1017,8 +1017,11 @@ static int broken_efr(struct uart_8250_port *up) +@@ -754,12 +754,29 @@ static void serial8250_set_sleep(struct uart_8250_port *p, int sleep) + serial8250_rpm_put(p); + } + +-static void serial8250_clear_IER(struct uart_8250_port *up) ++static unsigned int serial8250_clear_IER(struct uart_8250_port *up) + { ++ struct uart_port *port = &up->port; ++ unsigned int clearval = 0; ++ unsigned long flags; ++ bool is_console; ++ unsigned int prior; ++ ++ is_console = uart_console(port); ++ + if (up->capabilities & UART_CAP_UUE) +- serial_out(up, UART_IER, UART_IER_UUE); +- else +- serial_out(up, UART_IER, 0); ++ clearval = UART_IER_UUE; ++ ++ if (is_console) ++ printk_cpu_sync_get_irqsave(flags); ++ ++ prior = serial_in(up, UART_IER); ++ serial_out(up, UART_IER, clearval); ++ ++ if (is_console) ++ printk_cpu_sync_put_irqrestore(flags); ++ ++ return prior; + } + + #ifdef CONFIG_SERIAL_8250_RSA +@@ -1025,8 +1042,11 @@ static int broken_efr(struct uart_8250_port *up) */ static void autoconfig_16550a(struct uart_8250_port *up) { @@ -3824,7 +3748,7 @@ index 2030a92ac66e..326549603740 100644 up->port.type = PORT_16550A; up->capabilities |= UART_CAP_FIFO; -@@ -1130,6 +1133,11 @@ static void autoconfig_16550a(struct uart_8250_port *up) +@@ -1138,6 +1158,11 @@ static void autoconfig_16550a(struct uart_8250_port *up) return; } @@ -3836,7 +3760,7 @@ index 2030a92ac66e..326549603740 100644 /* * Try writing and reading the UART_IER_UUE bit (b6). * If it works, this is probably one of the Xscale platform's -@@ -1165,6 +1173,9 @@ static void autoconfig_16550a(struct uart_8250_port *up) +@@ -1173,6 +1198,9 @@ static void autoconfig_16550a(struct uart_8250_port *up) } serial_out(up, UART_IER, iersave); @@ -3846,7 +3770,7 @@ index 2030a92ac66e..326549603740 100644 /* * We distinguish between 16550A and U6 16550A by counting * how many bytes are in the FIFO. -@@ -1187,8 +1198,10 @@ static void autoconfig(struct uart_8250_port *up) +@@ -1195,8 +1223,10 @@ static void autoconfig(struct uart_8250_port *up) unsigned char status1, scratch, scratch2, scratch3; unsigned char save_lcr, save_mcr; struct uart_port *port = &up->port; @@ -3857,7 +3781,7 @@ index 2030a92ac66e..326549603740 100644 if (!port->iobase && !port->mapbase && !port->membase) return; -@@ -1206,6 +1219,11 @@ static void autoconfig(struct uart_8250_port *up) +@@ -1214,6 +1244,11 @@ static void autoconfig(struct uart_8250_port *up) up->bugs = 0; if (!(port->flags & UPF_BUGGY_UART)) { @@ -3869,7 +3793,7 @@ index 2030a92ac66e..326549603740 100644 /* * Do a simple existence test first; if we fail this, * there's no point trying anything else. -@@ -1235,6 +1253,10 @@ static void autoconfig(struct uart_8250_port *up) +@@ -1243,6 +1278,10 @@ static void autoconfig(struct uart_8250_port *up) #endif scratch3 = serial_in(up, UART_IER) & 0x0f; serial_out(up, UART_IER, scratch); @@ -3880,19 +3804,7 @@ index 2030a92ac66e..326549603740 100644 if (scratch2 != 0 || scratch3 != 0x0F) { /* * We failed; there's nothing here -@@ -1332,10 +1354,7 @@ static void autoconfig(struct uart_8250_port *up) - serial8250_out_MCR(up, save_mcr); - serial8250_clear_fifos(up); - serial_in(up, UART_RX); -- if (up->capabilities & UART_CAP_UUE) -- serial_out(up, UART_IER, UART_IER_UUE); -- else -- serial_out(up, UART_IER, 0); -+ serial8250_clear_IER(up); - - out_unlock: - spin_unlock_irqrestore(&port->lock, flags); -@@ -1361,7 +1380,9 @@ static void autoconfig_irq(struct uart_8250_port *up) +@@ -1366,7 +1405,9 @@ static void autoconfig_irq(struct uart_8250_port *up) unsigned char save_mcr, save_ier; unsigned char save_ICP = 0; unsigned int ICP = 0; @@ -3902,7 +3814,7 @@ index 2030a92ac66e..326549603740 100644 int irq; if (port->flags & UPF_FOURPORT) { -@@ -1371,8 +1392,12 @@ static void autoconfig_irq(struct uart_8250_port *up) +@@ -1376,8 +1417,12 @@ static void autoconfig_irq(struct uart_8250_port *up) inb_p(ICP); } @@ -3916,7 +3828,7 @@ index 2030a92ac66e..326549603740 100644 /* forget possible initially masked and pending IRQ */ probe_irq_off(probe_irq_on()); -@@ -1404,8 +1429,10 @@ static void autoconfig_irq(struct uart_8250_port *up) +@@ -1409,8 +1454,10 @@ static void autoconfig_irq(struct uart_8250_port *up) if (port->flags & UPF_FOURPORT) outb_p(save_ICP, ICP); @@ -3928,7 +3840,7 @@ index 2030a92ac66e..326549603740 100644 port->irq = (irq > 0) ? irq : 0; } -@@ -1418,7 +1445,7 @@ static void serial8250_stop_rx(struct uart_port *port) +@@ -1423,7 +1470,7 @@ static void serial8250_stop_rx(struct uart_port *port) up->ier &= ~(UART_IER_RLSI | UART_IER_RDI); up->port.read_status_mask &= ~UART_LSR_DR; @@ -3937,7 +3849,7 @@ index 2030a92ac66e..326549603740 100644 serial8250_rpm_put(up); } -@@ -1448,7 +1475,7 @@ void serial8250_em485_stop_tx(struct uart_8250_port *p) +@@ -1453,7 +1500,7 @@ void serial8250_em485_stop_tx(struct uart_8250_port *p) serial8250_clear_and_reinit_fifos(p); p->ier |= UART_IER_RLSI | UART_IER_RDI; @@ -3946,7 +3858,7 @@ index 2030a92ac66e..326549603740 100644 } } EXPORT_SYMBOL_GPL(serial8250_em485_stop_tx); -@@ -1697,7 +1724,7 @@ static void serial8250_disable_ms(struct uart_port *port) +@@ -1702,7 +1749,7 @@ static void serial8250_disable_ms(struct uart_port *port) mctrl_gpio_disable_ms(up->gpios); up->ier &= ~UART_IER_MSI; @@ -3955,7 +3867,7 @@ index 2030a92ac66e..326549603740 100644 } static void serial8250_enable_ms(struct uart_port *port) -@@ -1713,7 +1740,7 @@ static void serial8250_enable_ms(struct uart_port *port) +@@ -1718,7 +1765,7 @@ static void serial8250_enable_ms(struct uart_port *port) up->ier |= UART_IER_MSI; serial8250_rpm_get(up); @@ -3964,23 +3876,17 @@ index 2030a92ac66e..326549603740 100644 serial8250_rpm_put(up); } -@@ -2144,14 +2171,7 @@ static void serial8250_put_poll_char(struct uart_port *port, - struct uart_8250_port *up = up_to_u8250p(port); - - serial8250_rpm_get(up); -- /* -- * First save the IER then disable the interrupts -- */ +@@ -2152,8 +2199,7 @@ static void serial8250_put_poll_char(struct uart_port *port, + /* + * First save the IER then disable the interrupts + */ - ier = serial_port_in(port, UART_IER); -- if (up->capabilities & UART_CAP_UUE) -- serial_port_out(port, UART_IER, UART_IER_UUE); -- else -- serial_port_out(port, UART_IER, 0); +- serial8250_clear_IER(up); + ier = serial8250_clear_IER(up); wait_for_xmitr(up, UART_LSR_BOTH_EMPTY); /* -@@ -2164,7 +2184,7 @@ static void serial8250_put_poll_char(struct uart_port *port, +@@ -2166,7 +2212,7 @@ static void serial8250_put_poll_char(struct uart_port *port, * and restore the IER */ wait_for_xmitr(up, UART_LSR_BOTH_EMPTY); @@ -3989,7 +3895,7 @@ index 2030a92ac66e..326549603740 100644 serial8250_rpm_put(up); } -@@ -2173,8 +2193,10 @@ static void serial8250_put_poll_char(struct uart_port *port, +@@ -2175,8 +2221,10 @@ static void serial8250_put_poll_char(struct uart_port *port, int serial8250_do_startup(struct uart_port *port) { struct uart_8250_port *up = up_to_u8250p(port); @@ -4000,7 +3906,7 @@ index 2030a92ac66e..326549603740 100644 int retval; u16 lsr; -@@ -2195,7 +2217,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2197,7 +2245,7 @@ int serial8250_do_startup(struct uart_port *port) up->acr = 0; serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); serial_port_out(port, UART_EFR, UART_EFR_ECB); @@ -4009,7 +3915,7 @@ index 2030a92ac66e..326549603740 100644 serial_port_out(port, UART_LCR, 0); serial_icr_write(up, UART_CSR, 0); /* Reset the UART */ serial_port_out(port, UART_LCR, UART_LCR_CONF_MODE_B); -@@ -2205,7 +2227,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2207,7 +2255,7 @@ int serial8250_do_startup(struct uart_port *port) if (port->type == PORT_DA830) { /* Reset the port */ @@ -4018,7 +3924,7 @@ index 2030a92ac66e..326549603740 100644 serial_port_out(port, UART_DA830_PWREMU_MGMT, 0); mdelay(10); -@@ -2304,6 +2326,8 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2306,6 +2354,8 @@ int serial8250_do_startup(struct uart_port *port) if (retval) goto out; @@ -4027,7 +3933,7 @@ index 2030a92ac66e..326549603740 100644 if (port->irq && !(up->port.flags & UPF_NO_THRE_TEST)) { unsigned char iir1; -@@ -2320,6 +2344,9 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2322,6 +2372,9 @@ int serial8250_do_startup(struct uart_port *port) */ spin_lock_irqsave(&port->lock, flags); @@ -4037,7 +3943,7 @@ index 2030a92ac66e..326549603740 100644 wait_for_xmitr(up, UART_LSR_THRE); serial_port_out_sync(port, UART_IER, UART_IER_THRI); udelay(1); /* allow THRE to set */ -@@ -2330,6 +2357,9 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2332,6 +2385,9 @@ int serial8250_do_startup(struct uart_port *port) iir = serial_port_in(port, UART_IIR); serial_port_out(port, UART_IER, 0); @@ -4047,7 +3953,7 @@ index 2030a92ac66e..326549603740 100644 spin_unlock_irqrestore(&port->lock, flags); if (port->irqflags & IRQF_SHARED) -@@ -2384,10 +2414,14 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2386,10 +2442,14 @@ int serial8250_do_startup(struct uart_port *port) * Do a quick test to see if we receive an interrupt when we enable * the TX irq. */ @@ -4062,7 +3968,7 @@ index 2030a92ac66e..326549603740 100644 if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) { if (!(up->bugs & UART_BUG_TXEN)) { -@@ -2419,7 +2453,7 @@ int serial8250_do_startup(struct uart_port *port) +@@ -2421,7 +2481,7 @@ int serial8250_do_startup(struct uart_port *port) if (up->dma) { const char *msg = NULL; @@ -4071,7 +3977,7 @@ index 2030a92ac66e..326549603740 100644 msg = "forbid DMA for kernel console"; else if (serial8250_request_dma(up)) msg = "failed to request DMA"; -@@ -2470,7 +2504,7 @@ void serial8250_do_shutdown(struct uart_port *port) +@@ -2472,7 +2532,7 @@ void serial8250_do_shutdown(struct uart_port *port) */ spin_lock_irqsave(&port->lock, flags); up->ier = 0; @@ -4080,7 +3986,7 @@ index 2030a92ac66e..326549603740 100644 spin_unlock_irqrestore(&port->lock, flags); synchronize_irq(port->irq); -@@ -2836,7 +2870,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, +@@ -2838,7 +2898,7 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, if (up->capabilities & UART_CAP_RTOIE) up->ier |= UART_IER_RTOIE; @@ -4089,7 +3995,7 @@ index 2030a92ac66e..326549603740 100644 if (up->capabilities & UART_CAP_EFR) { unsigned char efr = 0; -@@ -3301,7 +3335,7 @@ EXPORT_SYMBOL_GPL(serial8250_set_defaults); +@@ -3303,7 +3363,7 @@ EXPORT_SYMBOL_GPL(serial8250_set_defaults); #ifdef CONFIG_SERIAL_8250_CONSOLE @@ -4098,7 +4004,7 @@ index 2030a92ac66e..326549603740 100644 { struct uart_8250_port *up = up_to_u8250p(port); -@@ -3309,6 +3343,18 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) +@@ -3311,6 +3371,18 @@ static void serial8250_console_putchar(struct uart_port *port, unsigned char ch) serial_port_out(port, UART_TX, ch); } @@ -4117,7 +4023,7 @@ index 2030a92ac66e..326549603740 100644 /* * Restore serial console when h/w power-off detected */ -@@ -3335,6 +3381,32 @@ static void serial8250_console_restore(struct uart_8250_port *up) +@@ -3337,6 +3409,32 @@ static void serial8250_console_restore(struct uart_8250_port *up) serial8250_out_MCR(up, up->mcr | UART_MCR_DTR | UART_MCR_RTS); } @@ -4150,7 +4056,7 @@ index 2030a92ac66e..326549603740 100644 /* * Print a string to the serial port using the device FIFO * -@@ -3380,24 +3452,12 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3382,20 +3480,15 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, struct uart_port *port = &up->port; unsigned long flags; unsigned int ier, use_fifo; @@ -4162,22 +4068,18 @@ index 2030a92ac66e..326549603740 100644 - locked = spin_trylock_irqsave(&port->lock, flags); - else - spin_lock_irqsave(&port->lock, flags); -- -- /* -- * First save the IER then disable the interrupts -- */ -- ier = serial_port_in(port, UART_IER); + spin_lock_irqsave(&port->lock, flags); -- if (up->capabilities & UART_CAP_UUE) -- serial_port_out(port, UART_IER, UART_IER_UUE); -- else -- serial_port_out(port, UART_IER, 0); + /* + * First save the IER then disable the interrupts + */ +- ier = serial_port_in(port, UART_IER); +- serial8250_clear_IER(up); + ier = serial8250_clear_IER(up); /* check scratch reg to see if port powered off during system sleep */ if (up->canary && (up->canary != serial_port_in(port, UART_SCR))) { -@@ -3431,10 +3491,12 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3429,10 +3522,12 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, */ !(up->port.flags & UPF_CONS_FLOW); @@ -4190,7 +4092,7 @@ index 2030a92ac66e..326549603740 100644 /* * Finally, wait for transmitter to become empty -@@ -3447,8 +3509,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3445,8 +3540,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, if (em485->tx_stopped) up->rs485_stop_tx(up); } @@ -4200,7 +4102,7 @@ index 2030a92ac66e..326549603740 100644 /* * The receive handling will happen properly because the -@@ -3460,8 +3521,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, +@@ -3458,8 +3552,7 @@ void serial8250_console_write(struct uart_8250_port *up, const char *s, if (up->msr_saved_flags) serial8250_modem_status(up); @@ -4210,7 +4112,7 @@ index 2030a92ac66e..326549603740 100644 } static unsigned int probe_baud(struct uart_port *port) -@@ -3481,6 +3541,7 @@ static unsigned int probe_baud(struct uart_port *port) +@@ -3479,6 +3572,7 @@ static unsigned int probe_baud(struct uart_port *port) int serial8250_console_setup(struct uart_port *port, char *options, bool probe) { @@ -4218,7 +4120,7 @@ index 2030a92ac66e..326549603740 100644 int baud = 9600; int bits = 8; int parity = 'n'; -@@ -3490,6 +3551,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) +@@ -3488,6 +3582,8 @@ int serial8250_console_setup(struct uart_port *port, char *options, bool probe) if (!port->iobase && !port->membase) return -ENODEV; @@ -4240,7 +4142,7 @@ index d0b49e15fbf5..02c308467339 100644 This selects whether you want to include the driver for the standard serial ports. The standard answer is Y. People who might say N diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c -index 15f0e4d88c5a..ffdb001e3d10 100644 +index 5cdced39eafd..f991b18dda30 100644 --- a/drivers/tty/serial/amba-pl011.c +++ b/drivers/tty/serial/amba-pl011.c @@ -2308,18 +2308,24 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) @@ -4283,10 +4185,10 @@ index 15f0e4d88c5a..ffdb001e3d10 100644 clk_disable(uap->clk); } diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c -index 0aa666e247d5..d7130d1ae64c 100644 +index 7d0d2718ef59..aa216fdbcb1d 100644 --- a/drivers/tty/serial/omap-serial.c +++ b/drivers/tty/serial/omap-serial.c -@@ -1240,13 +1240,10 @@ serial_omap_console_write(struct console *co, const char *s, +@@ -1241,13 +1241,10 @@ serial_omap_console_write(struct console *co, const char *s, unsigned int ier; int locked = 1; @@ -4303,7 +4205,7 @@ index 0aa666e247d5..d7130d1ae64c 100644 /* * First save the IER then disable the interrupts -@@ -1273,8 +1270,7 @@ serial_omap_console_write(struct console *co, const char *s, +@@ -1274,8 +1271,7 @@ serial_omap_console_write(struct console *co, const char *s, check_modem_status(up); if (locked) @@ -4345,37 +4247,6 @@ index 4e0e50e7ac15..173e979b84a9 100644 #define IOVA_START_PFN 1 -diff --git a/fs/dcache.c b/fs/dcache.c -index 1a3b40ebc12b..772ae769f805 100644 ---- a/fs/dcache.c -+++ b/fs/dcache.c -@@ -2598,15 +2598,7 @@ EXPORT_SYMBOL(d_rehash); - - static inline unsigned start_dir_add(struct inode *dir) - { -- /* -- * The caller holds a spinlock (dentry::d_lock). On !PREEMPT_RT -- * kernels spin_lock() implicitly disables preemption, but not on -- * PREEMPT_RT. So for RT it has to be done explicitly to protect -- * the sequence count write side critical section against a reader -- * or another writer preempting, which would result in a live lock. -- */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - for (;;) { - unsigned n = dir->i_dir_seq; - if (!(n & 1) && cmpxchg(&dir->i_dir_seq, n, n + 1) == n) -@@ -2619,8 +2611,7 @@ static inline void end_dir_add(struct inode *dir, unsigned int n, - wait_queue_head_t *d_wait) - { - smp_store_release(&dir->i_dir_seq, n + 2); -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - wake_up_all(d_wait); - } - diff --git a/include/linux/console.h b/include/linux/console.h index 8c1686e2c233..8a813cbaf928 100644 --- a/include/linux/console.h @@ -4445,7 +4316,7 @@ index 8c1686e2c233..8a813cbaf928 100644 CONSOLE_REPLAY_ALL, }; diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h -index 84a466b176cf..df6d17bc30aa 100644 +index d95ab85f96ba..3dc3704a3cdb 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -57,9 +57,15 @@ @@ -4505,23 +4376,11 @@ index a92bce40b04b..bf82980f569d 100644 DECLARE_PER_CPU(struct task_struct *, ksoftirqd); static inline struct task_struct *this_cpu_ksoftirqd(void) -diff --git a/include/linux/irqdesc.h b/include/linux/irqdesc.h -index 1cd4e36890fb..844a8e30e6de 100644 ---- a/include/linux/irqdesc.h -+++ b/include/linux/irqdesc.h -@@ -169,6 +169,7 @@ int generic_handle_irq_safe(unsigned int irq); - * conversion failed. - */ - int generic_handle_domain_irq(struct irq_domain *domain, unsigned int hwirq); -+int generic_handle_domain_irq_safe(struct irq_domain *domain, unsigned int hwirq); - int generic_handle_domain_nmi(struct irq_domain *domain, unsigned int hwirq); - #endif - diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h -index 81d10b8e9dc0..8de40ae43082 100644 +index 1f1099dac3f0..1023f349af71 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h -@@ -437,7 +437,6 @@ enum xhlock_context_t { +@@ -435,7 +435,6 @@ enum xhlock_context_t { XHLOCK_CTX_NR, }; @@ -4529,25 +4388,8 @@ index 81d10b8e9dc0..8de40ae43082 100644 /* * To initialize a lockdep_map statically use this macro. * Note that _name must not be NULL. -diff --git a/include/linux/mmdebug.h b/include/linux/mmdebug.h -index 15ae78cd2853..b8728d11c949 100644 ---- a/include/linux/mmdebug.h -+++ b/include/linux/mmdebug.h -@@ -94,6 +94,12 @@ void dump_mm(const struct mm_struct *mm); - #define VM_WARN(cond, format...) BUILD_BUG_ON_INVALID(cond) - #endif - -+#ifdef CONFIG_DEBUG_VM_IRQSOFF -+#define VM_WARN_ON_IRQS_ENABLED() WARN_ON_ONCE(!irqs_disabled()) -+#else -+#define VM_WARN_ON_IRQS_ENABLED() do { } while (0) -+#endif -+ - #ifdef CONFIG_DEBUG_VIRTUAL - #define VIRTUAL_BUG_ON(cond) BUG_ON(cond) - #else diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index 05d6f3facd5a..5e6b840f5a9a 100644 +index eddf8ee270e7..46cc24349426 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -3156,7 +3156,11 @@ struct softnet_data { @@ -4563,7 +4405,7 @@ index 05d6f3facd5a..5e6b840f5a9a 100644 static inline void input_queue_head_incr(struct softnet_data *sd) diff --git a/include/linux/preempt.h b/include/linux/preempt.h -index b4381f255a5c..12f59cdaaedd 100644 +index 0df425bf9bd7..12f59cdaaedd 100644 --- a/include/linux/preempt.h +++ b/include/linux/preempt.h @@ -196,6 +196,20 @@ extern void preempt_count_sub(int val); @@ -4651,7 +4493,7 @@ index b4381f255a5c..12f59cdaaedd 100644 set_preempt_need_resched(); \ } while (0) -@@ -416,9 +457,58 @@ extern void migrate_enable(void); +@@ -416,8 +457,15 @@ extern void migrate_enable(void); #else @@ -4669,66 +4511,21 @@ index b4381f255a5c..12f59cdaaedd 100644 #endif /* CONFIG_SMP */ -+/** -+ * preempt_disable_nested - Disable preemption inside a normally preempt disabled section -+ * -+ * Use for code which requires preemption protection inside a critical -+ * section which has preemption disabled implicitly on non-PREEMPT_RT -+ * enabled kernels, by e.g.: -+ * - holding a spinlock/rwlock -+ * - soft interrupt context -+ * - regular interrupt handlers -+ * -+ * On PREEMPT_RT enabled kernels spinlock/rwlock held sections, soft -+ * interrupt context and regular interrupt handlers are preemptible and -+ * only prevent migration. preempt_disable_nested() ensures that preemption -+ * is disabled for cases which require CPU local serialization even on -+ * PREEMPT_RT. For non-PREEMPT_RT kernels this is a NOP. -+ * -+ * The use cases are code sequences which are not serialized by a -+ * particular lock instance, e.g.: -+ * - seqcount write side critical sections where the seqcount is not -+ * associated to a particular lock and therefore the automatic -+ * protection mechanism does not work. This prevents a live lock -+ * against a preempting high priority reader. -+ * - RMW per CPU variable updates like vmstat. -+ */ -+/* Macro to avoid header recursion hell vs. lockdep */ -+#define preempt_disable_nested() \ -+do { \ -+ if (IS_ENABLED(CONFIG_PREEMPT_RT)) \ -+ preempt_disable(); \ -+ else \ -+ lockdep_assert_preemption_disabled(); \ -+} while (0) -+ -+/** -+ * preempt_enable_nested - Undo the effect of preempt_disable_nested() -+ */ -+static __always_inline void preempt_enable_nested(void) -+{ -+ if (IS_ENABLED(CONFIG_PREEMPT_RT)) -+ preempt_enable(); -+} -+ - #endif /* __LINUX_PREEMPT_H */ diff --git a/include/linux/printk.h b/include/linux/printk.h -index cf7d666ab1f8..f88ec15f83dc 100644 +index 8c81806c2e99..f8c4e4fa6d7d 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h -@@ -169,7 +169,11 @@ extern void __printk_safe_exit(void); +@@ -168,6 +168,9 @@ extern void __printk_safe_exit(void); + */ #define printk_deferred_enter __printk_safe_enter #define printk_deferred_exit __printk_safe_exit - +extern void printk_prefer_direct_enter(void); +extern void printk_prefer_direct_exit(void); -+ - extern bool pr_flush(int timeout_ms, bool reset_on_progress); +extern void try_block_console_kthreads(int timeout_ms); /* * Please don't use printk_ratelimit(), because it shares ratelimiting state -@@ -221,11 +225,23 @@ static inline void printk_deferred_exit(void) +@@ -219,6 +222,18 @@ static inline void printk_deferred_exit(void) { } @@ -4740,11 +4537,6 @@ index cf7d666ab1f8..f88ec15f83dc 100644 +{ +} + - static inline bool pr_flush(int timeout_ms, bool reset_on_progress) - { - return true; - } - +static inline void try_block_console_kthreads(int timeout_ms) +{ +} @@ -4752,24 +4544,11 @@ index cf7d666ab1f8..f88ec15f83dc 100644 static inline int printk_ratelimit(void) { return 0; -diff --git a/include/linux/rwlock.h b/include/linux/rwlock.h -index 8f416c5e929e..c0ef596f340b 100644 ---- a/include/linux/rwlock.h -+++ b/include/linux/rwlock.h -@@ -1,7 +1,7 @@ - #ifndef __LINUX_RWLOCK_H - #define __LINUX_RWLOCK_H - --#ifndef __LINUX_SPINLOCK_H -+#ifndef __LINUX_INSIDE_SPINLOCK_H - # error "please don't include this file directly" - #endif - diff --git a/include/linux/sched.h b/include/linux/sched.h -index 8d82d6d32670..e1623b3001c5 100644 +index ffb6eb55cd13..a4c1e3638cb1 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h -@@ -2038,6 +2038,43 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) +@@ -2059,6 +2059,43 @@ static inline int test_tsk_need_resched(struct task_struct *tsk) return unlikely(test_tsk_thread_flag(tsk,TIF_NEED_RESCHED)); } @@ -4814,7 +4593,7 @@ index 8d82d6d32670..e1623b3001c5 100644 * cond_resched() and cond_resched_lock(): latency reduction via * explicit rescheduling in places that are safe. The return diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h -index 16e3d75a324c..ee1f719a2167 100644 +index 19376bee9667..4be94aa44d43 100644 --- a/include/linux/serial_8250.h +++ b/include/linux/serial_8250.h @@ -7,6 +7,7 @@ @@ -4843,76 +4622,6 @@ index 16e3d75a324c..ee1f719a2167 100644 int serial8250_console_setup(struct uart_port *port, char *options, bool probe); int serial8250_console_exit(struct uart_port *port); -diff --git a/include/linux/spinlock.h b/include/linux/spinlock.h -index 5c0c5174155d..1341f7d62da4 100644 ---- a/include/linux/spinlock.h -+++ b/include/linux/spinlock.h -@@ -1,6 +1,7 @@ - /* SPDX-License-Identifier: GPL-2.0 */ - #ifndef __LINUX_SPINLOCK_H - #define __LINUX_SPINLOCK_H -+#define __LINUX_INSIDE_SPINLOCK_H - - /* - * include/linux/spinlock.h - generic spinlock/rwlock declarations -@@ -492,4 +493,5 @@ int __alloc_bucket_spinlocks(spinlock_t **locks, unsigned int *lock_mask, - - void free_bucket_spinlocks(spinlock_t *locks); - -+#undef __LINUX_INSIDE_SPINLOCK_H - #endif /* __LINUX_SPINLOCK_H */ -diff --git a/include/linux/spinlock_api_smp.h b/include/linux/spinlock_api_smp.h -index 51fa0dab68c4..89eb6f4c659c 100644 ---- a/include/linux/spinlock_api_smp.h -+++ b/include/linux/spinlock_api_smp.h -@@ -1,7 +1,7 @@ - #ifndef __LINUX_SPINLOCK_API_SMP_H - #define __LINUX_SPINLOCK_API_SMP_H - --#ifndef __LINUX_SPINLOCK_H -+#ifndef __LINUX_INSIDE_SPINLOCK_H - # error "please don't include this file directly" - #endif - -diff --git a/include/linux/spinlock_api_up.h b/include/linux/spinlock_api_up.h -index b8ba00ccccde..819aeba1c87e 100644 ---- a/include/linux/spinlock_api_up.h -+++ b/include/linux/spinlock_api_up.h -@@ -1,7 +1,7 @@ - #ifndef __LINUX_SPINLOCK_API_UP_H - #define __LINUX_SPINLOCK_API_UP_H - --#ifndef __LINUX_SPINLOCK_H -+#ifndef __LINUX_INSIDE_SPINLOCK_H - # error "please don't include this file directly" - #endif - -diff --git a/include/linux/spinlock_rt.h b/include/linux/spinlock_rt.h -index 835aedaf68ac..61c49b16f69a 100644 ---- a/include/linux/spinlock_rt.h -+++ b/include/linux/spinlock_rt.h -@@ -2,7 +2,7 @@ - #ifndef __LINUX_SPINLOCK_RT_H - #define __LINUX_SPINLOCK_RT_H - --#ifndef __LINUX_SPINLOCK_H -+#ifndef __LINUX_INSIDE_SPINLOCK_H - #error Do not include directly. Use spinlock.h - #endif - -diff --git a/include/linux/spinlock_up.h b/include/linux/spinlock_up.h -index 16521074b6f7..c87204247592 100644 ---- a/include/linux/spinlock_up.h -+++ b/include/linux/spinlock_up.h -@@ -1,7 +1,7 @@ - #ifndef __LINUX_SPINLOCK_UP_H - #define __LINUX_SPINLOCK_UP_H - --#ifndef __LINUX_SPINLOCK_H -+#ifndef __LINUX_INSIDE_SPINLOCK_H - # error "please don't include this file directly" - #endif - diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index 9f392ec76f2b..779e0e96b9cb 100644 --- a/include/linux/thread_info.h @@ -4975,237 +4684,31 @@ index 20749bd9db71..224bf60d6563 100644 TRACE_FLAG_BH_OFF = 0x80, }; diff --git a/include/linux/u64_stats_sync.h b/include/linux/u64_stats_sync.h -index 6ad4e9032d53..ffe48e69b3f3 100644 +index 46040d66334a..ffe48e69b3f3 100644 --- a/include/linux/u64_stats_sync.h +++ b/include/linux/u64_stats_sync.h -@@ -8,7 +8,7 @@ - * - * Key points : - * -- * - Use a seqcount on 32-bit SMP, only disable preemption for 32-bit UP. -+ * - Use a seqcount on 32-bit - * - The whole thing is a no-op on 64-bit architectures. - * - * Usage constraints: -@@ -20,7 +20,8 @@ - * writer and also spin forever. - * - * 3) Write side must use the _irqsave() variant if other writers, or a reader, -- * can be invoked from an IRQ context. -+ * can be invoked from an IRQ context. On 64bit systems this variant does not -+ * disable interrupts. - * - * 4) If reader fetches several counters, there is no guarantee the whole values - * are consistent w.r.t. each other (remember point #2: seqcounts are not -@@ -29,11 +30,6 @@ - * 5) Readers are allowed to sleep or be preempted/interrupted: they perform - * pure reads. - * -- * 6) Readers must use both u64_stats_fetch_{begin,retry}_irq() if the stats -- * might be updated from a hardirq or softirq context (remember point #1: -- * seqcounts are not used for UP kernels). 32-bit UP stat readers could read -- * corrupted 64-bit values otherwise. -- * - * Usage : - * - * Stats producer (writer) should use following template granted it already got -@@ -66,7 +62,7 @@ - #include <linux/seqlock.h> - - struct u64_stats_sync { --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) -+#if BITS_PER_LONG == 32 - seqcount_t seq; - #endif - }; -@@ -98,7 +94,22 @@ static inline void u64_stats_inc(u64_stats_t *p) - local64_inc(&p->v); - } - --#else -+static inline void u64_stats_init(struct u64_stats_sync *syncp) { } -+static inline void __u64_stats_update_begin(struct u64_stats_sync *syncp) { } -+static inline void __u64_stats_update_end(struct u64_stats_sync *syncp) { } -+static inline unsigned long __u64_stats_irqsave(void) { return 0; } -+static inline void __u64_stats_irqrestore(unsigned long flags) { } -+static inline unsigned int __u64_stats_fetch_begin(const struct u64_stats_sync *syncp) -+{ -+ return 0; -+} -+static inline bool __u64_stats_fetch_retry(const struct u64_stats_sync *syncp, -+ unsigned int start) -+{ -+ return false; -+} -+ -+#else /* 64 bit */ - - typedef struct { - u64 v; -@@ -123,122 +134,82 @@ static inline void u64_stats_inc(u64_stats_t *p) - { - p->v++; - } --#endif - --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) --#define u64_stats_init(syncp) seqcount_init(&(syncp)->seq) --#else - static inline void u64_stats_init(struct u64_stats_sync *syncp) - { -+ seqcount_init(&syncp->seq); - } --#endif - --static inline void u64_stats_update_begin(struct u64_stats_sync *syncp) -+static inline void __u64_stats_update_begin(struct u64_stats_sync *syncp) - { --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - write_seqcount_begin(&syncp->seq); --#endif - } - --static inline void u64_stats_update_end(struct u64_stats_sync *syncp) -+static inline void __u64_stats_update_end(struct u64_stats_sync *syncp) - { --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) - write_seqcount_end(&syncp->seq); -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); --#endif -+ preempt_enable_nested(); - } - --static inline unsigned long --u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) -+static inline unsigned long __u64_stats_irqsave(void) - { -- unsigned long flags = 0; -+ unsigned long flags; - --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -- else -- local_irq_save(flags); -- write_seqcount_begin(&syncp->seq); --#endif -+ local_irq_save(flags); - return flags; - } - --static inline void --u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, -- unsigned long flags) -+static inline void __u64_stats_irqrestore(unsigned long flags) - { --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) -- write_seqcount_end(&syncp->seq); -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -- else -- local_irq_restore(flags); --#endif -+ local_irq_restore(flags); - } - - static inline unsigned int __u64_stats_fetch_begin(const struct u64_stats_sync *syncp) - { --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) - return read_seqcount_begin(&syncp->seq); --#else -- return 0; --#endif - } - --static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp) -+static inline bool __u64_stats_fetch_retry(const struct u64_stats_sync *syncp, -+ unsigned int start) - { --#if BITS_PER_LONG == 32 && (!defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT_RT)) -- preempt_disable(); --#endif -- return __u64_stats_fetch_begin(syncp); -+ return read_seqcount_retry(&syncp->seq, start); - } -+#endif /* !64 bit */ - --static inline bool __u64_stats_fetch_retry(const struct u64_stats_sync *syncp, -- unsigned int start) -+static inline void u64_stats_update_begin(struct u64_stats_sync *syncp) - { --#if BITS_PER_LONG == 32 && (defined(CONFIG_SMP) || defined(CONFIG_PREEMPT_RT)) -- return read_seqcount_retry(&syncp->seq, start); --#else -- return false; --#endif -+ __u64_stats_update_begin(syncp); - } - --static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, -- unsigned int start) -+static inline void u64_stats_update_end(struct u64_stats_sync *syncp) - { --#if BITS_PER_LONG == 32 && (!defined(CONFIG_SMP) && !defined(CONFIG_PREEMPT_RT)) -- preempt_enable(); --#endif -- return __u64_stats_fetch_retry(syncp, start); -+ __u64_stats_update_end(syncp); +@@ -213,16 +213,4 @@ static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, + return __u64_stats_fetch_retry(syncp, start); } --/* -- * In case irq handlers can update u64 counters, readers can use following helpers -- * - SMP 32bit arches use seqcount protection, irq safe. -- * - UP 32bit must disable irqs. -- * - 64bit have no problem atomically reading u64 values, irq safe. -- */ +-/* Obsolete interfaces */ -static inline unsigned int u64_stats_fetch_begin_irq(const struct u64_stats_sync *syncp) -+static inline unsigned long u64_stats_update_begin_irqsave(struct u64_stats_sync *syncp) -+{ -+ unsigned long flags = __u64_stats_irqsave(); -+ -+ __u64_stats_update_begin(syncp); -+ return flags; -+} -+ -+static inline void u64_stats_update_end_irqrestore(struct u64_stats_sync *syncp, -+ unsigned long flags) -+{ -+ __u64_stats_update_end(syncp); -+ __u64_stats_irqrestore(flags); -+} -+ -+static inline unsigned int u64_stats_fetch_begin(const struct u64_stats_sync *syncp) - { --#if BITS_PER_LONG == 32 && defined(CONFIG_PREEMPT_RT) -- preempt_disable(); --#elif BITS_PER_LONG == 32 && !defined(CONFIG_SMP) -- local_irq_disable(); --#endif - return __u64_stats_fetch_begin(syncp); - } - +-{ +- return u64_stats_fetch_begin(syncp); +-} +- -static inline bool u64_stats_fetch_retry_irq(const struct u64_stats_sync *syncp, - unsigned int start) -+static inline bool u64_stats_fetch_retry(const struct u64_stats_sync *syncp, -+ unsigned int start) - { --#if BITS_PER_LONG == 32 && defined(CONFIG_PREEMPT_RT) -- preempt_enable(); --#elif BITS_PER_LONG == 32 && !defined(CONFIG_SMP) -- local_irq_enable(); --#endif - return __u64_stats_fetch_retry(syncp, start); - } - +-{ +- return u64_stats_fetch_retry(syncp, start); +-} +- + #endif /* _LINUX_U64_STATS_SYNC_H */ diff --git a/init/Kconfig b/init/Kconfig -index 532362fcfe31..08ec5f25e664 100644 +index abf65098f1b6..d7287004b853 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -1574,6 +1574,10 @@ config PRINTK +@@ -1581,6 +1581,10 @@ config PRINTK very difficult to diagnose system problems, saying N here is strongly discouraged. @@ -5233,10 +4736,10 @@ index c2f1fd95a821..260c08efeb48 100644 bool diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c -index 22e7a805c672..b492e482b63a 100644 +index 7b373a5e861f..71d8eb131928 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c -@@ -2107,11 +2107,11 @@ static void bpf_prog_get_stats(const struct bpf_prog *prog, +@@ -2117,11 +2117,11 @@ static void bpf_prog_get_stats(const struct bpf_prog *prog, st = per_cpu_ptr(prog->stats, cpu); do { @@ -5251,10 +4754,10 @@ index 22e7a805c672..b492e482b63a 100644 cnt += tcnt; misses += tmisses; diff --git a/kernel/entry/common.c b/kernel/entry/common.c -index 063068a9ea9b..26b772720b22 100644 +index 846add8394c4..51de1080cb93 100644 --- a/kernel/entry/common.c +++ b/kernel/entry/common.c -@@ -153,7 +153,7 @@ static unsigned long exit_to_user_mode_loop(struct pt_regs *regs, +@@ -155,7 +155,7 @@ static unsigned long exit_to_user_mode_loop(struct pt_regs *regs, local_irq_enable_exit_to_user(ti_work); @@ -5263,7 +4766,7 @@ index 063068a9ea9b..26b772720b22 100644 schedule(); if (ti_work & _TIF_UPROBE) -@@ -381,7 +381,7 @@ void raw_irqentry_exit_cond_resched(void) +@@ -385,7 +385,7 @@ void raw_irqentry_exit_cond_resched(void) rcu_irq_exit_check_preempt(); if (IS_ENABLED(CONFIG_DEBUG_ENTRY)) WARN_ON_ONCE(!on_thread_stack()); @@ -5273,7 +4776,7 @@ index 063068a9ea9b..26b772720b22 100644 } } diff --git a/kernel/hung_task.c b/kernel/hung_task.c -index bb2354f73ded..19c9de825d24 100644 +index c71889f3f3fc..e2d2344cb9f4 100644 --- a/kernel/hung_task.c +++ b/kernel/hung_task.c @@ -127,6 +127,8 @@ static void check_hung_task(struct task_struct *t, unsigned long timeout) @@ -5294,7 +4797,7 @@ index bb2354f73ded..19c9de825d24 100644 } touch_nmi_watchdog(); -@@ -204,12 +208,17 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout) +@@ -212,12 +216,17 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout) } unlock: rcu_read_unlock(); @@ -5313,46 +4816,11 @@ index bb2354f73ded..19c9de825d24 100644 } if (hung_task_call_panic) -diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c -index 5db0230aa6b5..476a3fecb8c5 100644 ---- a/kernel/irq/irqdesc.c -+++ b/kernel/irq/irqdesc.c -@@ -705,6 +705,30 @@ int generic_handle_domain_irq(struct irq_domain *domain, unsigned int hwirq) - } - EXPORT_SYMBOL_GPL(generic_handle_domain_irq); - -+ /** -+ * generic_handle_irq_safe - Invoke the handler for a HW irq belonging -+ * to a domain from any context. -+ * @domain: The domain where to perform the lookup -+ * @hwirq: The HW irq number to convert to a logical one -+ * -+ * Returns: 0 on success, a negative value on error. -+ * -+ * This function can be called from any context (IRQ or process context). It -+ * will report an error if not invoked from IRQ context and the irq has been -+ * marked to enforce IRQ-context only. -+ */ -+int generic_handle_domain_irq_safe(struct irq_domain *domain, unsigned int hwirq) -+{ -+ unsigned long flags; -+ int ret; -+ -+ local_irq_save(flags); -+ ret = handle_irq_desc(irq_resolve_mapping(domain, hwirq)); -+ local_irq_restore(flags); -+ return ret; -+} -+EXPORT_SYMBOL_GPL(generic_handle_domain_irq_safe); -+ - /** - * generic_handle_domain_nmi - Invoke the handler for a HW nmi belonging - * to a domain. diff --git a/kernel/ksysfs.c b/kernel/ksysfs.c -index b1292a57c2a5..a6514db7ef58 100644 +index 65dba9076f31..ab18048e2186 100644 --- a/kernel/ksysfs.c +++ b/kernel/ksysfs.c -@@ -137,6 +137,15 @@ KERNEL_ATTR_RO(vmcoreinfo); +@@ -142,6 +142,15 @@ KERNEL_ATTR_RO(vmcoreinfo); #endif /* CONFIG_CRASH_CORE */ @@ -5368,7 +4836,7 @@ index b1292a57c2a5..a6514db7ef58 100644 /* whether file capabilities are enabled */ static ssize_t fscaps_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf) -@@ -227,6 +236,9 @@ static struct attribute * kernel_attrs[] = { +@@ -232,6 +241,9 @@ static struct attribute * kernel_attrs[] = { #ifndef CONFIG_TINY_RCU &rcu_expedited_attr.attr, &rcu_normal_attr.attr, @@ -5379,7 +4847,7 @@ index b1292a57c2a5..a6514db7ef58 100644 NULL }; diff --git a/kernel/panic.c b/kernel/panic.c -index c6eb8f8db0c0..c4e8896e3cab 100644 +index da323209f583..dbd61a2cc6b1 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -257,7 +257,6 @@ void panic(const char *fmt, ...) @@ -5418,7 +4886,7 @@ index c6eb8f8db0c0..c4e8896e3cab 100644 crash_smp_send_stop(); } -@@ -604,6 +610,8 @@ void __warn(const char *file, int line, void *caller, unsigned taint, +@@ -601,6 +607,8 @@ void __warn(const char *file, int line, void *caller, unsigned taint, { disable_trace_on_warning(); @@ -5427,7 +4895,7 @@ index c6eb8f8db0c0..c4e8896e3cab 100644 if (file) pr_warn("WARNING: CPU: %d PID: %d at %s:%d %pS\n", raw_smp_processor_id(), current->pid, file, line, -@@ -633,6 +641,8 @@ void __warn(const char *file, int line, void *caller, unsigned taint, +@@ -630,6 +638,8 @@ void __warn(const char *file, int line, void *caller, unsigned taint, /* Just a warning, don't kill lockdep. */ add_taint(taint, LOCKDEP_STILL_OK); @@ -5450,7 +4918,7 @@ index d947ca6c84f9..e7d8578860ad 100644 int vprintk_store(int facility, int level, const struct dev_printk_info *dev_info, diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c -index a1a81fd9889b..f1f9ce9b23f6 100644 +index e4f1e7478b52..581f92acf05a 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -44,6 +44,7 @@ @@ -5461,9 +4929,9 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 #include <linux/sched/clock.h> #include <linux/sched/debug.h> #include <linux/sched/task_stack.h> -@@ -223,6 +224,36 @@ int devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, - /* Number of registered extended console drivers. */ - static int nr_ext_console_drivers; +@@ -220,6 +221,36 @@ int devkmsg_sysctl_set_loglvl(struct ctl_table *table, int write, + } + #endif /* CONFIG_PRINTK && CONFIG_SYSCTL */ +/* + * Used to synchronize printing kthreads against direct printing via @@ -5498,7 +4966,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /* * Helper macros to handle lockdep when locking/unlocking console_sem. We use * macros instead of functions so that _RET_IP_ contains useful information. -@@ -271,14 +302,49 @@ static bool panic_in_progress(void) +@@ -268,14 +299,49 @@ static bool panic_in_progress(void) } /* @@ -5555,7 +5023,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /* * Array of consoles built from command line options (console=) -@@ -361,7 +427,75 @@ static int console_msg_format = MSG_FORMAT_DEFAULT; +@@ -358,7 +424,75 @@ static int console_msg_format = MSG_FORMAT_DEFAULT; /* syslog_lock protects syslog_* variables and write access to clear_seq. */ static DEFINE_MUTEX(syslog_lock); @@ -5631,7 +5099,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 DECLARE_WAIT_QUEUE_HEAD(log_wait); /* All 3 protected by @syslog_lock. */ /* the next printk record to read by syslog(READ) or /proc/kmsg */ -@@ -1850,6 +1984,7 @@ static int console_lock_spinning_disable_and_check(void) +@@ -1847,6 +1981,7 @@ static int console_lock_spinning_disable_and_check(void) return 1; } @@ -5639,7 +5107,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /** * console_trylock_spinning - try to get console_lock by busy waiting * -@@ -1923,6 +2058,7 @@ static int console_trylock_spinning(void) +@@ -1920,6 +2055,7 @@ static int console_trylock_spinning(void) return 1; } @@ -5647,7 +5115,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /* * Call the specified console driver, asking it to write out the specified -@@ -1930,19 +2066,28 @@ static int console_trylock_spinning(void) +@@ -1927,19 +2063,28 @@ static int console_trylock_spinning(void) * dropped, a dropped message will be written out first. */ static void call_console_driver(struct console *con, const char *text, size_t len, @@ -5682,7 +5150,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } /* -@@ -2252,10 +2397,22 @@ asmlinkage int vprintk_emit(int facility, int level, +@@ -2249,10 +2394,22 @@ asmlinkage int vprintk_emit(int facility, int level, printed_len = vprintk_store(facility, level, dev_info, fmt, args); /* If called from the scheduler, we can not call up(). */ @@ -5707,7 +5175,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 * printing of all remaining records to all consoles so that * this context can return as soon as possible. Hopefully * another printk() caller will take over the printing. -@@ -2270,6 +2427,7 @@ asmlinkage int vprintk_emit(int facility, int level, +@@ -2267,6 +2424,7 @@ asmlinkage int vprintk_emit(int facility, int level, if (console_trylock_spinning()) console_unlock(); preempt_enable(); @@ -5715,7 +5183,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } wake_up_klogd(); -@@ -2296,8 +2454,80 @@ asmlinkage __visible int _printk(const char *fmt, ...) +@@ -2293,9 +2451,81 @@ asmlinkage __visible int _printk(const char *fmt, ...) } EXPORT_SYMBOL(_printk); @@ -5789,6 +5257,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 +} +#endif /* CONFIG_HAVE_ATOMIC_CONSOLE */ + + static bool pr_flush(int timeout_ms, bool reset_on_progress); static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress); +static void printk_start_kthread(struct console *con); @@ -5796,7 +5265,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 #else /* CONFIG_PRINTK */ #define CONSOLE_LOG_MAX 0 -@@ -2308,6 +2538,8 @@ static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progre +@@ -2306,6 +2536,8 @@ static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progre #define prb_first_valid_seq(rb) 0 #define prb_next_seq(rb) 0 @@ -5805,7 +5274,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 static u64 syslog_seq; static size_t record_print_text(const struct printk_record *r, -@@ -2326,11 +2558,13 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, +@@ -2324,12 +2556,14 @@ static ssize_t msg_print_ext_body(char *buf, size_t size, static void console_lock_spinning_enable(void) { } static int console_lock_spinning_disable_and_check(void) { return 0; } static void call_console_driver(struct console *con, const char *text, size_t len, @@ -5814,13 +5283,14 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 { } static bool suppress_message_printing(int level) { return false; } + static bool pr_flush(int timeout_ms, bool reset_on_progress) { return true; } static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress) { return true; } +static void printk_start_kthread(struct console *con) { } +static bool allow_direct_printing(void) { return true; } #endif /* CONFIG_PRINTK */ -@@ -2549,6 +2783,14 @@ static int console_cpu_notify(unsigned int cpu) +@@ -2548,6 +2782,14 @@ static int console_cpu_notify(unsigned int cpu) /* If trylock fails, someone else is doing the printing */ if (console_trylock()) console_unlock(); @@ -5835,7 +5305,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } return 0; } -@@ -2568,7 +2810,7 @@ void console_lock(void) +@@ -2567,7 +2809,7 @@ void console_lock(void) down_console_sem(); if (console_suspended) return; @@ -5844,7 +5314,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 console_may_schedule = 1; } EXPORT_SYMBOL(console_lock); -@@ -2589,15 +2831,30 @@ int console_trylock(void) +@@ -2588,15 +2830,30 @@ int console_trylock(void) up_console_sem(); return 0; } @@ -5877,7 +5347,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } EXPORT_SYMBOL(is_console_locked); -@@ -2620,18 +2877,9 @@ static bool abandon_console_lock_in_panic(void) +@@ -2619,18 +2876,9 @@ static bool abandon_console_lock_in_panic(void) return atomic_read(&panic_cpu) != raw_smp_processor_id(); } @@ -5898,7 +5368,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 return false; /* -@@ -2640,18 +2888,116 @@ static inline bool console_is_usable(struct console *con) +@@ -2639,18 +2887,116 @@ static inline bool console_is_usable(struct console *con) * cope (CON_ANYTIME) don't call them until this CPU is officially up. */ if (!cpu_online(raw_smp_processor_id()) && @@ -6017,7 +5487,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /* * Print one record for the given console. The record printed is whatever * record is the next available record for the given console. -@@ -2664,36 +3010,47 @@ static void __console_unlock(void) +@@ -2663,36 +3009,47 @@ static void __console_unlock(void) * If dropped messages should be printed, @dropped_text is a buffer of size * DROPPED_TEXT_MAX. Otherwise @dropped_text must be NULL. * @@ -6056,10 +5526,10 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 - *handover = false; + if (handover) + *handover = false; ++ ++ seq = read_console_seq(con); - if (!prb_read_valid(prb, con->seq, &r)) -+ seq = read_console_seq(con); -+ + if (!prb_read_valid(prb, seq, &r)) return false; @@ -6076,7 +5546,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 suppress_panic_printk = 1; pr_warn_once("Too many dropped messages. Suppress messages on non-panic CPUs to prevent livelock.\n"); } -@@ -2701,7 +3058,7 @@ static bool console_emit_next_record(struct console *con, char *text, char *ext_ +@@ -2700,7 +3057,7 @@ static bool console_emit_next_record(struct console *con, char *text, char *ext_ /* Skip record that has level above the console loglevel. */ if (suppress_message_printing(r.info->level)) { @@ -6085,7 +5555,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 goto skip; } -@@ -2715,31 +3072,65 @@ static bool console_emit_next_record(struct console *con, char *text, char *ext_ +@@ -2714,31 +3071,65 @@ static bool console_emit_next_record(struct console *con, char *text, char *ext_ len = record_print_text(&r, console_msg_format & MSG_FORMAT_SYSLOG, printk_time); } @@ -6169,7 +5639,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /* * Print out all remaining records to all consoles. * -@@ -2758,8 +3149,8 @@ static bool console_emit_next_record(struct console *con, char *text, char *ext_ +@@ -2757,8 +3148,8 @@ static bool console_emit_next_record(struct console *con, char *text, char *ext_ * were flushed to all usable consoles. A returned false informs the caller * that everything was not flushed (either there were no usable consoles or * another context has taken over printing or it is a panic situation and this @@ -6180,7 +5650,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 * * Requires the console_lock. */ -@@ -2776,24 +3167,26 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove +@@ -2775,24 +3166,26 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove *handover = false; do { @@ -6214,7 +5684,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } if (*handover) return false; -@@ -2818,6 +3211,68 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove +@@ -2817,6 +3210,68 @@ static bool console_flush_all(bool do_cond_resched, u64 *next_seq, bool *handove return any_usable; } @@ -6283,7 +5753,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /** * console_unlock - unlock the console system * -@@ -2908,10 +3363,13 @@ void console_unblank(void) +@@ -2907,10 +3362,13 @@ void console_unblank(void) if (oops_in_progress) { if (down_trylock_console_sem() != 0) return; @@ -6298,7 +5768,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 console_may_schedule = 0; for_each_console(c) if ((c->flags & CON_ENABLED) && c->unblank) -@@ -2930,6 +3388,11 @@ void console_unblank(void) +@@ -2929,6 +3387,11 @@ void console_unblank(void) */ void console_flush_on_panic(enum con_flush_mode mode) { @@ -6310,7 +5780,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 /* * If someone else is holding the console lock, trylock will fail * and may_schedule may be set. Ignore and proceed to unlock so -@@ -2946,7 +3409,7 @@ void console_flush_on_panic(enum con_flush_mode mode) +@@ -2945,7 +3408,7 @@ void console_flush_on_panic(enum con_flush_mode mode) seq = prb_first_valid_seq(prb); for_each_console(c) @@ -6319,9 +5789,9 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } console_unlock(); } -@@ -3189,16 +3652,27 @@ void register_console(struct console *newcon) - if (newcon->flags & CON_EXTENDED) - nr_ext_console_drivers++; +@@ -3185,16 +3648,27 @@ void register_console(struct console *newcon) + console_drivers->next = newcon; + } - newcon->dropped = 0; + atomic_long_set(&newcon->dropped, 0); @@ -6350,7 +5820,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 console_unlock(); console_sysfs_notify(); -@@ -3225,6 +3699,7 @@ EXPORT_SYMBOL(register_console); +@@ -3218,6 +3692,7 @@ EXPORT_SYMBOL(register_console); int unregister_console(struct console *console) { @@ -6358,7 +5828,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 struct console *con; int res; -@@ -3265,9 +3740,26 @@ int unregister_console(struct console *console) +@@ -3255,9 +3730,26 @@ int unregister_console(struct console *console) console_drivers->flags |= CON_CONSDEV; console->flags &= ~CON_ENABLED; @@ -6385,7 +5855,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 if (console->exit) res = console->exit(console); -@@ -3361,6 +3853,20 @@ static int __init printk_late_init(void) +@@ -3351,6 +3843,20 @@ static int __init printk_late_init(void) } late_initcall(printk_late_init); @@ -6406,7 +5876,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 #if defined CONFIG_PRINTK /* If @con is specified, only wait for that console. Otherwise wait for all. */ static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progress) -@@ -3384,7 +3890,7 @@ static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progre +@@ -3374,7 +3880,7 @@ static bool __pr_flush(struct console *con, int timeout_ms, bool reset_on_progre for_each_console(c) { if (con && con != c) continue; @@ -6415,9 +5885,9 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 continue; printk_seq = c->seq; if (printk_seq < seq) -@@ -3444,11 +3950,215 @@ bool pr_flush(int timeout_ms, bool reset_on_progress) +@@ -3433,11 +3939,214 @@ static bool pr_flush(int timeout_ms, bool reset_on_progress) + return __pr_flush(NULL, timeout_ms, reset_on_progress); } - EXPORT_SYMBOL(pr_flush); +static void __printk_fallback_preferred_direct(void) +{ @@ -6522,7 +5992,6 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 + } + + con_printk(KERN_INFO, con, "printing thread started\n"); -+ + for (;;) { + /* + * Guarantee this task is visible on the waitqueue before @@ -6535,7 +6004,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 + * This pairs with __wake_up_klogd:A. + */ + error = wait_event_interruptible(log_wait, -+ printer_should_wake(con, seq)); /* LMM(printk_kthread_func:A) */ ++ printer_should_wake(con, seq)); /* LMM(printk_kthread_func:A) */ + + if (kthread_should_stop() || !printk_kthreads_available) + break; @@ -6633,7 +6102,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 static DEFINE_PER_CPU(int, printk_pending); -@@ -3456,10 +4166,14 @@ static void wake_up_klogd_work_func(struct irq_work *irq_work) +@@ -3445,10 +4154,14 @@ static void wake_up_klogd_work_func(struct irq_work *irq_work) { int pending = this_cpu_xchg(printk_pending, 0); @@ -6649,7 +6118,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 } if (pending & PRINTK_PENDING_WAKEUP) -@@ -3484,10 +4198,11 @@ static void __wake_up_klogd(int val) +@@ -3473,10 +4186,11 @@ static void __wake_up_klogd(int val) * prepare_to_wait_event(), which is called after ___wait_event() adds * the waiter but before it has checked the wait condition. * @@ -6663,7 +6132,7 @@ index a1a81fd9889b..f1f9ce9b23f6 100644 this_cpu_or(printk_pending, val); irq_work_queue(this_cpu_ptr(&wake_up_klogd_work)); } -@@ -3505,7 +4220,17 @@ void defer_console_output(void) +@@ -3494,7 +4208,17 @@ void defer_console_output(void) * New messages may have been added directly to the ringbuffer * using vprintk_store(), so wake any waiters as well. */ @@ -6731,10 +6200,10 @@ index ef0f9a2044da..caac4de1ea59 100644 + } +} diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c -index d8e1b270a065..257cb6f5ea62 100644 +index 503c2aa845a4..dcd8c0e44c00 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c -@@ -2157,6 +2157,12 @@ static int rcutorture_booster_init(unsigned int cpu) +@@ -2363,6 +2363,12 @@ static int rcutorture_booster_init(unsigned int cpu) WARN_ON_ONCE(!t); sp.sched_priority = 2; sched_setscheduler_nocheck(t, SCHED_FIFO, &sp); @@ -6748,10 +6217,10 @@ index d8e1b270a065..257cb6f5ea62 100644 /* Don't allow time recalculation while creating a new task. */ diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h -index c3fbbcc09327..195cad14742d 100644 +index 5653560573e2..dcbbcf93d608 100644 --- a/kernel/rcu/tree_stall.h +++ b/kernel/rcu/tree_stall.h -@@ -643,6 +643,7 @@ static void print_cpu_stall(unsigned long gps) +@@ -642,6 +642,7 @@ static void print_cpu_stall(unsigned long gps) * See Documentation/RCU/stallwarn.rst for info on how to debug * RCU CPU stall warnings. */ @@ -6759,7 +6228,7 @@ index c3fbbcc09327..195cad14742d 100644 trace_rcu_stall_warning(rcu_state.name, TPS("SelfDetected")); pr_err("INFO: %s self-detected stall on CPU\n", rcu_state.name); raw_spin_lock_irqsave_rcu_node(rdp->mynode, flags); -@@ -677,6 +678,7 @@ static void print_cpu_stall(unsigned long gps) +@@ -676,6 +677,7 @@ static void print_cpu_stall(unsigned long gps) */ set_tsk_need_resched(current); set_preempt_need_resched(); @@ -6768,7 +6237,7 @@ index c3fbbcc09327..195cad14742d 100644 static void check_cpu_stall(struct rcu_data *rdp) diff --git a/kernel/reboot.c b/kernel/reboot.c -index 3c35445bf5ad..80564ffafabf 100644 +index 3bba88c7ffc6..57cedc330660 100644 --- a/kernel/reboot.c +++ b/kernel/reboot.c @@ -82,6 +82,7 @@ void kernel_restart_prepare(char *cmd) @@ -6779,7 +6248,7 @@ index 3c35445bf5ad..80564ffafabf 100644 usermodehelper_disable(); device_shutdown(); } -@@ -270,6 +271,7 @@ static void kernel_shutdown_prepare(enum system_states state) +@@ -282,6 +283,7 @@ static void kernel_shutdown_prepare(enum system_states state) blocking_notifier_call_chain(&reboot_notifier_list, (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); system_state = state; @@ -6787,7 +6256,7 @@ index 3c35445bf5ad..80564ffafabf 100644 usermodehelper_disable(); device_shutdown(); } -@@ -819,9 +821,11 @@ static int __orderly_reboot(void) +@@ -836,9 +838,11 @@ static int __orderly_reboot(void) ret = run_cmd(reboot_cmd); if (ret) { @@ -6799,7 +6268,7 @@ index 3c35445bf5ad..80564ffafabf 100644 } return ret; -@@ -834,6 +838,7 @@ static int __orderly_poweroff(bool force) +@@ -851,6 +855,7 @@ static int __orderly_poweroff(bool force) ret = run_cmd(poweroff_cmd); if (ret && force) { @@ -6807,7 +6276,7 @@ index 3c35445bf5ad..80564ffafabf 100644 pr_warn("Failed to start orderly shutdown: forcing the issue\n"); /* -@@ -843,6 +848,7 @@ static int __orderly_poweroff(bool force) +@@ -860,6 +865,7 @@ static int __orderly_poweroff(bool force) */ emergency_sync(); kernel_power_off(); @@ -6815,7 +6284,7 @@ index 3c35445bf5ad..80564ffafabf 100644 } return ret; -@@ -900,6 +906,8 @@ EXPORT_SYMBOL_GPL(orderly_reboot); +@@ -917,6 +923,8 @@ EXPORT_SYMBOL_GPL(orderly_reboot); */ static void hw_failure_emergency_poweroff_func(struct work_struct *work) { @@ -6824,7 +6293,7 @@ index 3c35445bf5ad..80564ffafabf 100644 /* * We have reached here after the emergency shutdown waiting period has * expired. This means orderly_poweroff has not been able to shut off -@@ -916,6 +924,8 @@ static void hw_failure_emergency_poweroff_func(struct work_struct *work) +@@ -933,6 +941,8 @@ static void hw_failure_emergency_poweroff_func(struct work_struct *work) */ pr_emerg("Hardware protection shutdown failed. Trying emergency restart\n"); emergency_restart(); @@ -6833,7 +6302,7 @@ index 3c35445bf5ad..80564ffafabf 100644 } static DECLARE_DELAYED_WORK(hw_failure_emergency_poweroff_work, -@@ -954,11 +964,13 @@ void hw_protection_shutdown(const char *reason, int ms_until_forced) +@@ -971,11 +981,13 @@ void hw_protection_shutdown(const char *reason, int ms_until_forced) { static atomic_t allow_proceed = ATOMIC_INIT(1); @@ -6848,7 +6317,7 @@ index 3c35445bf5ad..80564ffafabf 100644 /* * Queue a backup emergency shutdown in the event of -@@ -966,6 +978,8 @@ void hw_protection_shutdown(const char *reason, int ms_until_forced) +@@ -983,6 +995,8 @@ void hw_protection_shutdown(const char *reason, int ms_until_forced) */ hw_failure_emergency_poweroff(ms_until_forced); orderly_poweroff(true); @@ -6858,10 +6327,10 @@ index 3c35445bf5ad..80564ffafabf 100644 EXPORT_SYMBOL_GPL(hw_protection_shutdown); diff --git a/kernel/sched/core.c b/kernel/sched/core.c -index ee28253c9ac0..2ce515d3e6f8 100644 +index cb2aa2b54c7a..f202b258230a 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c -@@ -1046,6 +1046,46 @@ void resched_curr(struct rq *rq) +@@ -1040,6 +1040,46 @@ void resched_curr(struct rq *rq) trace_sched_wake_idle_without_ipi(cpu); } @@ -6908,7 +6377,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 void resched_cpu(int cpu) { struct rq *rq = cpu_rq(cpu); -@@ -2227,6 +2267,7 @@ void migrate_disable(void) +@@ -2221,6 +2261,7 @@ void migrate_disable(void) preempt_disable(); this_rq()->nr_pinned++; p->migration_disabled = 1; @@ -6916,7 +6385,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 preempt_enable(); } EXPORT_SYMBOL_GPL(migrate_disable); -@@ -2258,6 +2299,7 @@ void migrate_enable(void) +@@ -2252,6 +2293,7 @@ void migrate_enable(void) barrier(); p->migration_disabled = 0; this_rq()->nr_pinned--; @@ -6924,7 +6393,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 preempt_enable(); } EXPORT_SYMBOL_GPL(migrate_enable); -@@ -3251,6 +3293,70 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p, +@@ -3245,6 +3287,76 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p, } #endif /* CONFIG_NUMA_BALANCING */ @@ -6965,37 +6434,43 @@ index ee28253c9ac0..2ce515d3e6f8 100644 + bool mismatch; + + raw_spin_lock_irqsave(&p->pi_lock, flags); -+ mismatch = READ_ONCE(p->__state) != match_state && -+ READ_ONCE(p->saved_state) != match_state; ++ if (READ_ONCE(p->__state) & match_state) ++ mismatch = false; ++ else if (READ_ONCE(p->saved_state) & match_state) ++ mismatch = false; ++ else ++ mismatch = true; ++ + raw_spin_unlock_irqrestore(&p->pi_lock, flags); + return mismatch; +} +static __always_inline bool state_match(struct task_struct *p, unsigned int match_state, + bool *wait) +{ -+ if (READ_ONCE(p->__state) == match_state) ++ if (READ_ONCE(p->__state) & match_state) + return true; -+ if (READ_ONCE(p->saved_state) != match_state) -+ return false; -+ *wait = true; -+ return true; ++ if (READ_ONCE(p->saved_state) & match_state) { ++ *wait = true; ++ return true; ++ } ++ return false; +} +#else +static __always_inline bool state_mismatch(struct task_struct *p, unsigned int match_state) +{ -+ return READ_ONCE(p->__state) != match_state; ++ return !(READ_ONCE(p->__state) & match_state); +} +static __always_inline bool state_match(struct task_struct *p, unsigned int match_state, + bool *wait) +{ -+ return READ_ONCE(p->__state) == match_state; ++ return (READ_ONCE(p->__state) & match_state); +} +#endif + /* * wait_task_inactive - wait for a thread to unschedule. * -@@ -3269,7 +3375,7 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p, +@@ -3263,7 +3375,7 @@ int migrate_swap(struct task_struct *cur, struct task_struct *p, */ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state) { @@ -7004,31 +6479,29 @@ index ee28253c9ac0..2ce515d3e6f8 100644 struct rq_flags rf; unsigned long ncsw; struct rq *rq; -@@ -3295,7 +3401,7 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state +@@ -3289,7 +3401,7 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state * is actually now running somewhere else! */ - while (task_running(rq, p)) { -- if (match_state && unlikely(READ_ONCE(p->__state) != match_state)) -+ if (match_state && state_mismatch(p, match_state)) + while (task_on_cpu(rq, p)) { +- if (!(READ_ONCE(p->__state) & match_state)) ++ if (state_mismatch(p, match_state)) return 0; cpu_relax(); } -@@ -3308,10 +3414,12 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state +@@ -3302,9 +3414,10 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state rq = task_rq_lock(p, &rf); trace_sched_wait_task(p); - running = task_running(rq, p); + running = task_on_cpu(rq, p); - queued = task_on_rq_queued(p); + wait = task_on_rq_queued(p); ncsw = 0; -- if (!match_state || READ_ONCE(p->__state) == match_state) +- if (READ_ONCE(p->__state) & match_state) + -+ if (!match_state || state_match(p, match_state, &wait)) ++ if (state_match(p, match_state, &wait)) ncsw = p->nvcsw | LONG_MIN; /* sets MSB */ -+ task_rq_unlock(rq, p, &rf); - /* -@@ -3340,7 +3448,7 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state +@@ -3334,7 +3447,7 @@ unsigned long wait_task_inactive(struct task_struct *p, unsigned int match_state * running right now), it's preempted, and we should * yield - it could be a while. */ @@ -7037,7 +6510,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 ktime_t to = NSEC_PER_SEC / HZ; set_current_state(TASK_UNINTERRUPTIBLE); -@@ -4589,6 +4697,9 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) +@@ -4597,6 +4710,9 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p) p->on_cpu = 0; #endif init_task_preempt_count(p); @@ -7047,7 +6520,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 #ifdef CONFIG_SMP plist_node_init(&p->pushable_tasks, MAX_PRIO); RB_CLEAR_NODE(&p->pushable_dl_tasks); -@@ -6457,6 +6568,7 @@ static void __sched notrace __schedule(unsigned int sched_mode) +@@ -6466,6 +6582,7 @@ static void __sched notrace __schedule(unsigned int sched_mode) next = pick_next_task(rq, prev, &rf); clear_tsk_need_resched(prev); @@ -7055,7 +6528,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 clear_preempt_need_resched(); #ifdef CONFIG_SCHED_DEBUG rq->last_seen_need_resched_ns = 0; -@@ -6671,6 +6783,30 @@ static void __sched notrace preempt_schedule_common(void) +@@ -6680,6 +6797,30 @@ static void __sched notrace preempt_schedule_common(void) } while (need_resched()); } @@ -7086,7 +6559,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 #ifdef CONFIG_PREEMPTION /* * This is the entry point to schedule() from in-kernel preemption -@@ -6684,6 +6820,8 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) +@@ -6693,6 +6834,8 @@ asmlinkage __visible void __sched notrace preempt_schedule(void) */ if (likely(!preemptible())) return; @@ -7095,7 +6568,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 preempt_schedule_common(); } NOKPROBE_SYMBOL(preempt_schedule); -@@ -6731,6 +6869,9 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) +@@ -6740,6 +6883,9 @@ asmlinkage __visible void __sched notrace preempt_schedule_notrace(void) if (likely(!preemptible())) return; @@ -7105,7 +6578,7 @@ index ee28253c9ac0..2ce515d3e6f8 100644 do { /* * Because the function tracer can trace preempt_count_sub() -@@ -8988,7 +9129,9 @@ void __init init_idle(struct task_struct *idle, int cpu) +@@ -8997,7 +9143,9 @@ void __init init_idle(struct task_struct *idle, int cpu) /* Set the preempt count _outside_ the spinlocks! */ init_idle_preempt_count(idle, cpu); @@ -7117,10 +6590,10 @@ index ee28253c9ac0..2ce515d3e6f8 100644 * The idle tasks have their own, simple scheduling class: */ diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c -index 914096c5b1ae..3cb55e6ede33 100644 +index e4a0b8bd941c..7f1d2c0b744d 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c -@@ -4576,7 +4576,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) +@@ -4756,7 +4756,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) ideal_runtime = sched_slice(cfs_rq, curr); delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; if (delta_exec > ideal_runtime) { @@ -7129,7 +6602,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 /* * The current task ran long enough, ensure it doesn't get * re-elected due to buddy favours. -@@ -4600,7 +4600,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) +@@ -4780,7 +4780,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) return; if (delta > ideal_runtime) @@ -7138,7 +6611,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 } static void -@@ -4746,7 +4746,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) +@@ -4926,7 +4926,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued) * validating it and just reschedule. */ if (queued) { @@ -7147,7 +6620,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 return; } /* -@@ -4895,7 +4895,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) +@@ -5075,7 +5075,7 @@ static void __account_cfs_rq_runtime(struct cfs_rq *cfs_rq, u64 delta_exec) * hierarchy can be throttled */ if (!assign_cfs_rq_runtime(cfs_rq) && likely(cfs_rq->curr)) @@ -7156,7 +6629,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 } static __always_inline -@@ -5646,7 +5646,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) +@@ -5826,7 +5826,7 @@ static void hrtick_start_fair(struct rq *rq, struct task_struct *p) if (delta < 0) { if (task_current(rq, p)) @@ -7165,7 +6638,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 return; } hrtick_start(rq, delta); -@@ -7307,7 +7307,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ +@@ -7473,7 +7473,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ return; preempt: @@ -7174,7 +6647,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 /* * Only set the backward buddy when the current task is still * on the rq. This can happen when a wakeup gets interleaved -@@ -11454,7 +11454,7 @@ static void task_fork_fair(struct task_struct *p) +@@ -11622,7 +11622,7 @@ static void task_fork_fair(struct task_struct *p) * 'current' within the tree based on its new key value. */ swap(curr->vruntime, se->vruntime); @@ -7183,7 +6656,7 @@ index 914096c5b1ae..3cb55e6ede33 100644 } se->vruntime -= cfs_rq->min_vruntime; -@@ -11481,7 +11481,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) +@@ -11649,7 +11649,7 @@ prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio) */ if (task_current(rq, p)) { if (p->prio > oldprio) @@ -7207,10 +6680,10 @@ index ee7f23c76bd3..e13090e33f3c 100644 /* diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h -index e26688d387ae..5b889de29e3c 100644 +index a4a20046e586..f0451bf28b6f 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h -@@ -2356,6 +2356,15 @@ extern void reweight_task(struct task_struct *p, int prio); +@@ -2350,6 +2350,15 @@ extern void reweight_task(struct task_struct *p, int prio); extern void resched_curr(struct rq *rq); extern void resched_cpu(int cpu); @@ -7227,10 +6700,10 @@ index e26688d387ae..5b889de29e3c 100644 extern void init_rt_bandwidth(struct rt_bandwidth *rt_b, u64 period, u64 runtime); extern bool sched_rt_bandwidth_account(struct rt_rq *rt_rq); diff --git a/kernel/signal.c b/kernel/signal.c -index 6f86fda5e432..139b965e4faf 100644 +index d140672185a4..aebe0d5b2006 100644 --- a/kernel/signal.c +++ b/kernel/signal.c -@@ -2297,13 +2297,13 @@ static int ptrace_stop(int exit_code, int why, unsigned long message, +@@ -2298,13 +2298,13 @@ static int ptrace_stop(int exit_code, int why, unsigned long message, /* * Don't want to allow preemption here, because * sys_ptrace() needs this task to be inactive. @@ -7245,7 +6718,7 @@ index 6f86fda5e432..139b965e4faf 100644 - preempt_enable_no_resched(); + if (!IS_ENABLED(CONFIG_PREEMPT_RT)) + preempt_enable_no_resched(); - freezable_schedule(); + schedule(); cgroup_leave_frozen(true); diff --git a/kernel/softirq.c b/kernel/softirq.c @@ -7366,7 +6839,7 @@ index c8a6913c067d..ab1fe34326ba 100644 } early_initcall(spawn_ksoftirqd); diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c -index 23af5eca11b1..b0b4e44dd096 100644 +index 3ae661ab6260..0a56c61710ea 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -1805,7 +1805,7 @@ void hrtimer_interrupt(struct clock_event_device *dev) @@ -7414,7 +6887,7 @@ index 717fcb9fb14a..e6219da89933 100644 /* diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c -index cc65887b31bd..1d0175675267 100644 +index 47a44b055a1d..ff803b85010c 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -2640,11 +2640,19 @@ unsigned int tracing_gen_ctx_irq_test(unsigned int irqs_status) @@ -7610,1123 +7083,8 @@ index 247bf0b1582c..701f35f0e2d4 100644 __this_cpu_write(hard_watchdog_warn, true); return; } -diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug -index cb131fad117c..c65e69bf4eeb 100644 ---- a/lib/Kconfig.debug -+++ b/lib/Kconfig.debug -@@ -811,6 +811,9 @@ config ARCH_HAS_DEBUG_VM_PGTABLE - An architecture should select this when it can successfully - build and run DEBUG_VM_PGTABLE. - -+config DEBUG_VM_IRQSOFF -+ def_bool DEBUG_VM && !PREEMPT_RT -+ - config DEBUG_VM - bool "Debug VM" - depends on DEBUG_KERNEL -diff --git a/lib/flex_proportions.c b/lib/flex_proportions.c -index 05cccbcf1661..83332fefa6f4 100644 ---- a/lib/flex_proportions.c -+++ b/lib/flex_proportions.c -@@ -70,6 +70,7 @@ bool fprop_new_period(struct fprop_global *p, int periods) - */ - if (events <= 1) - return false; -+ preempt_disable_nested(); - write_seqcount_begin(&p->sequence); - if (periods < 64) - events -= events >> periods; -@@ -77,6 +78,7 @@ bool fprop_new_period(struct fprop_global *p, int periods) - percpu_counter_add(&p->events, -events); - p->period += periods; - write_seqcount_end(&p->sequence); -+ preempt_enable_nested(); - - return true; - } -diff --git a/lib/vsprintf.c b/lib/vsprintf.c -index 3c1853a9d1c0..ffaba68e6a29 100644 ---- a/lib/vsprintf.c -+++ b/lib/vsprintf.c -@@ -750,37 +750,42 @@ static int __init debug_boot_weak_hash_enable(char *str) - } - early_param("debug_boot_weak_hash", debug_boot_weak_hash_enable); - --static DEFINE_STATIC_KEY_FALSE(filled_random_ptr_key); -+static bool filled_random_ptr_key; -+static siphash_key_t ptr_key __read_mostly; -+static void fill_ptr_key_workfn(struct work_struct *work); -+static DECLARE_DELAYED_WORK(fill_ptr_key_work, fill_ptr_key_workfn); - --static void enable_ptr_key_workfn(struct work_struct *work) -+static void fill_ptr_key_workfn(struct work_struct *work) - { -- static_branch_enable(&filled_random_ptr_key); -+ if (!rng_is_initialized()) { -+ queue_delayed_work(system_unbound_wq, &fill_ptr_key_work, HZ * 2); -+ return; -+ } -+ -+ get_random_bytes(&ptr_key, sizeof(ptr_key)); -+ -+ /* Pairs with smp_rmb() before reading ptr_key. */ -+ smp_wmb(); -+ WRITE_ONCE(filled_random_ptr_key, true); -+} -+ -+static int __init vsprintf_init_hashval(void) -+{ -+ fill_ptr_key_workfn(NULL); -+ return 0; - } -+subsys_initcall(vsprintf_init_hashval) - - /* Maps a pointer to a 32 bit unique identifier. */ - static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out) - { -- static siphash_key_t ptr_key __read_mostly; - unsigned long hashval; - -- if (!static_branch_likely(&filled_random_ptr_key)) { -- static bool filled = false; -- static DEFINE_SPINLOCK(filling); -- static DECLARE_WORK(enable_ptr_key_work, enable_ptr_key_workfn); -- unsigned long flags; -- -- if (!system_unbound_wq || !rng_is_initialized() || -- !spin_trylock_irqsave(&filling, flags)) -- return -EAGAIN; -- -- if (!filled) { -- get_random_bytes(&ptr_key, sizeof(ptr_key)); -- queue_work(system_unbound_wq, &enable_ptr_key_work); -- filled = true; -- } -- spin_unlock_irqrestore(&filling, flags); -- } -+ if (!READ_ONCE(filled_random_ptr_key)) -+ return -EBUSY; - -+ /* Pairs with smp_wmb() after writing ptr_key. */ -+ smp_rmb(); - - #ifdef CONFIG_64BIT - hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key); -diff --git a/mm/Kconfig b/mm/Kconfig -index 0331f1461f81..3897e924e40f 100644 ---- a/mm/Kconfig -+++ b/mm/Kconfig -@@ -579,6 +579,12 @@ config COMPACTION - it and then we would be really interested to hear about that at - linux-mm@kvack.org. - -+config COMPACT_UNEVICTABLE_DEFAULT -+ int -+ depends on COMPACTION -+ default 0 if PREEMPT_RT -+ default 1 -+ - # - # support for free page reporting - config PAGE_REPORTING -diff --git a/mm/compaction.c b/mm/compaction.c -index 640fa76228dd..10561cb1aaad 100644 ---- a/mm/compaction.c -+++ b/mm/compaction.c -@@ -1727,11 +1727,7 @@ typedef enum { - * Allow userspace to control policy on scanning the unevictable LRU for - * compactable pages. - */ --#ifdef CONFIG_PREEMPT_RT --int sysctl_compact_unevictable_allowed __read_mostly = 0; --#else --int sysctl_compact_unevictable_allowed __read_mostly = 1; --#endif -+int sysctl_compact_unevictable_allowed __read_mostly = CONFIG_COMPACT_UNEVICTABLE_DEFAULT; - - static inline void - update_fast_start_pfn(struct compact_control *cc, unsigned long pfn) -diff --git a/mm/memcontrol.c b/mm/memcontrol.c -index b69979c9ced5..d35b6fa560f0 100644 ---- a/mm/memcontrol.c -+++ b/mm/memcontrol.c -@@ -597,25 +597,18 @@ static u64 flush_next_time; - */ - static void memcg_stats_lock(void) - { --#ifdef CONFIG_PREEMPT_RT -- preempt_disable(); --#else -- VM_BUG_ON(!irqs_disabled()); --#endif -+ preempt_disable_nested(); -+ VM_WARN_ON_IRQS_ENABLED(); - } - - static void __memcg_stats_lock(void) - { --#ifdef CONFIG_PREEMPT_RT -- preempt_disable(); --#endif -+ preempt_disable_nested(); - } - - static void memcg_stats_unlock(void) - { --#ifdef CONFIG_PREEMPT_RT -- preempt_enable(); --#endif -+ preempt_enable_nested(); - } - - static inline void memcg_rstat_updated(struct mem_cgroup *memcg, int val) -@@ -715,7 +708,7 @@ void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, - * interrupt context while other caller need to have disabled interrupt. - */ - __memcg_stats_lock(); -- if (IS_ENABLED(CONFIG_DEBUG_VM) && !IS_ENABLED(CONFIG_PREEMPT_RT)) { -+ if (IS_ENABLED(CONFIG_DEBUG_VM)) { - switch (idx) { - case NR_ANON_MAPPED: - case NR_FILE_MAPPED: -@@ -725,7 +718,7 @@ void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, - WARN_ON_ONCE(!in_task()); - break; - default: -- WARN_ON_ONCE(!irqs_disabled()); -+ VM_WARN_ON_IRQS_ENABLED(); - } - } - -diff --git a/mm/slub.c b/mm/slub.c -index 4b98dff9be8e..59173fa5901a 100644 ---- a/mm/slub.c -+++ b/mm/slub.c -@@ -50,7 +50,7 @@ - * 1. slab_mutex (Global Mutex) - * 2. node->list_lock (Spinlock) - * 3. kmem_cache->cpu_slab->lock (Local lock) -- * 4. slab_lock(slab) (Only on some arches or for debugging) -+ * 4. slab_lock(slab) (Only on some arches) - * 5. object_map_lock (Only for debugging) - * - * slab_mutex -@@ -64,8 +64,9 @@ - * The slab_lock is a wrapper around the page lock, thus it is a bit - * spinlock. - * -- * The slab_lock is only used for debugging and on arches that do not -- * have the ability to do a cmpxchg_double. It only protects: -+ * The slab_lock is only used on arches that do not have the ability -+ * to do a cmpxchg_double. It only protects: -+ * - * A. slab->freelist -> List of free objects in a slab - * B. slab->inuse -> Number of objects in use - * C. slab->objects -> Number of objects in slab -@@ -94,15 +95,20 @@ - * allocating a long series of objects that fill up slabs does not require - * the list lock. - * -+ * For debug caches, all allocations are forced to go through a list_lock -+ * protected region to serialize against concurrent validation. -+ * - * cpu_slab->lock local lock - * - * This locks protect slowpath manipulation of all kmem_cache_cpu fields - * except the stat counters. This is a percpu structure manipulated only by - * the local cpu, so the lock protects against being preempted or interrupted - * by an irq. Fast path operations rely on lockless operations instead. -- * On PREEMPT_RT, the local lock does not actually disable irqs (and thus -- * prevent the lockless operations), so fastpath operations also need to take -- * the lock and are no longer lockless. -+ * -+ * On PREEMPT_RT, the local lock neither disables interrupts nor preemption -+ * which means the lockless fastpath cannot be used as it might interfere with -+ * an in-progress slow path operations. In this case the local lock is always -+ * taken but it still utilizes the freelist for the common operations. - * - * lockless fastpaths - * -@@ -163,8 +169,9 @@ - * function call even on !PREEMPT_RT, use inline preempt_disable() there. - */ - #ifndef CONFIG_PREEMPT_RT --#define slub_get_cpu_ptr(var) get_cpu_ptr(var) --#define slub_put_cpu_ptr(var) put_cpu_ptr(var) -+#define slub_get_cpu_ptr(var) get_cpu_ptr(var) -+#define slub_put_cpu_ptr(var) put_cpu_ptr(var) -+#define USE_LOCKLESS_FAST_PATH() (true) - #else - #define slub_get_cpu_ptr(var) \ - ({ \ -@@ -176,6 +183,7 @@ do { \ - (void)(var); \ - migrate_enable(); \ - } while (0) -+#define USE_LOCKLESS_FAST_PATH() (false) - #endif - - #ifdef CONFIG_SLUB_DEBUG -@@ -447,7 +455,7 @@ slub_set_cpu_partial(struct kmem_cache *s, unsigned int nr_objects) - /* - * Per slab locking using the pagelock - */ --static __always_inline void __slab_lock(struct slab *slab) -+static __always_inline void slab_lock(struct slab *slab) - { - struct page *page = slab_page(slab); - -@@ -455,7 +463,7 @@ static __always_inline void __slab_lock(struct slab *slab) - bit_spin_lock(PG_locked, &page->flags); - } - --static __always_inline void __slab_unlock(struct slab *slab) -+static __always_inline void slab_unlock(struct slab *slab) - { - struct page *page = slab_page(slab); - -@@ -463,31 +471,19 @@ static __always_inline void __slab_unlock(struct slab *slab) - __bit_spin_unlock(PG_locked, &page->flags); - } - --static __always_inline void slab_lock(struct slab *slab, unsigned long *flags) --{ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- local_irq_save(*flags); -- __slab_lock(slab); --} -- --static __always_inline void slab_unlock(struct slab *slab, unsigned long *flags) --{ -- __slab_unlock(slab); -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- local_irq_restore(*flags); --} -- - /* - * Interrupts must be disabled (for the fallback code to work right), typically -- * by an _irqsave() lock variant. Except on PREEMPT_RT where locks are different -- * so we disable interrupts as part of slab_[un]lock(). -+ * by an _irqsave() lock variant. Except on PREEMPT_RT where these variants do -+ * not actually disable interrupts. On the other hand the migrate_disable() -+ * done by bit_spin_lock() is sufficient on PREEMPT_RT thanks to its threaded -+ * interrupts. - */ - static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct slab *slab, - void *freelist_old, unsigned long counters_old, - void *freelist_new, unsigned long counters_new, - const char *n) - { -- if (!IS_ENABLED(CONFIG_PREEMPT_RT)) -+ if (USE_LOCKLESS_FAST_PATH()) - lockdep_assert_irqs_disabled(); - #if defined(CONFIG_HAVE_CMPXCHG_DOUBLE) && \ - defined(CONFIG_HAVE_ALIGNED_STRUCT_PAGE) -@@ -499,18 +495,15 @@ static inline bool __cmpxchg_double_slab(struct kmem_cache *s, struct slab *slab - } else - #endif - { -- /* init to 0 to prevent spurious warnings */ -- unsigned long flags = 0; -- -- slab_lock(slab, &flags); -+ slab_lock(slab); - if (slab->freelist == freelist_old && - slab->counters == counters_old) { - slab->freelist = freelist_new; - slab->counters = counters_new; -- slab_unlock(slab, &flags); -+ slab_unlock(slab); - return true; - } -- slab_unlock(slab, &flags); -+ slab_unlock(slab); - } - - cpu_relax(); -@@ -541,16 +534,16 @@ static inline bool cmpxchg_double_slab(struct kmem_cache *s, struct slab *slab, - unsigned long flags; - - local_irq_save(flags); -- __slab_lock(slab); -+ slab_lock(slab); - if (slab->freelist == freelist_old && - slab->counters == counters_old) { - slab->freelist = freelist_new; - slab->counters = counters_new; -- __slab_unlock(slab); -+ slab_unlock(slab); - local_irq_restore(flags); - return true; - } -- __slab_unlock(slab); -+ slab_unlock(slab); - local_irq_restore(flags); - } - -@@ -566,7 +559,7 @@ static inline bool cmpxchg_double_slab(struct kmem_cache *s, struct slab *slab, - - #ifdef CONFIG_SLUB_DEBUG - static unsigned long object_map[BITS_TO_LONGS(MAX_OBJS_PER_PAGE)]; --static DEFINE_RAW_SPINLOCK(object_map_lock); -+static DEFINE_SPINLOCK(object_map_lock); - - static void __fill_map(unsigned long *obj_map, struct kmem_cache *s, - struct slab *slab) -@@ -600,30 +593,6 @@ static bool slab_add_kunit_errors(void) - static inline bool slab_add_kunit_errors(void) { return false; } - #endif - --/* -- * Determine a map of objects in use in a slab. -- * -- * Node listlock must be held to guarantee that the slab does -- * not vanish from under us. -- */ --static unsigned long *get_map(struct kmem_cache *s, struct slab *slab) -- __acquires(&object_map_lock) --{ -- VM_BUG_ON(!irqs_disabled()); -- -- raw_spin_lock(&object_map_lock); -- -- __fill_map(object_map, s, slab); -- -- return object_map; --} -- --static void put_map(unsigned long *map) __releases(&object_map_lock) --{ -- VM_BUG_ON(map != object_map); -- raw_spin_unlock(&object_map_lock); --} -- - static inline unsigned int size_from_object(struct kmem_cache *s) - { - if (s->flags & SLAB_RED_ZONE) -@@ -1329,17 +1298,14 @@ static inline int alloc_consistency_checks(struct kmem_cache *s, - } - - static noinline int alloc_debug_processing(struct kmem_cache *s, -- struct slab *slab, -- void *object, unsigned long addr) -+ struct slab *slab, void *object) - { - if (s->flags & SLAB_CONSISTENCY_CHECKS) { - if (!alloc_consistency_checks(s, slab, object)) - goto bad; - } - -- /* Success perform special debug activities for allocs */ -- if (s->flags & SLAB_STORE_USER) -- set_track(s, object, TRACK_ALLOC, addr); -+ /* Success. Perform special debug activities for allocs */ - trace(s, slab, object, 1); - init_object(s, object, SLUB_RED_ACTIVE); - return 1; -@@ -1390,63 +1356,6 @@ static inline int free_consistency_checks(struct kmem_cache *s, - return 1; - } - --/* Supports checking bulk free of a constructed freelist */ --static noinline int free_debug_processing( -- struct kmem_cache *s, struct slab *slab, -- void *head, void *tail, int bulk_cnt, -- unsigned long addr) --{ -- struct kmem_cache_node *n = get_node(s, slab_nid(slab)); -- void *object = head; -- int cnt = 0; -- unsigned long flags, flags2; -- int ret = 0; -- depot_stack_handle_t handle = 0; -- -- if (s->flags & SLAB_STORE_USER) -- handle = set_track_prepare(); -- -- spin_lock_irqsave(&n->list_lock, flags); -- slab_lock(slab, &flags2); -- -- if (s->flags & SLAB_CONSISTENCY_CHECKS) { -- if (!check_slab(s, slab)) -- goto out; -- } -- --next_object: -- cnt++; -- -- if (s->flags & SLAB_CONSISTENCY_CHECKS) { -- if (!free_consistency_checks(s, slab, object, addr)) -- goto out; -- } -- -- if (s->flags & SLAB_STORE_USER) -- set_track_update(s, object, TRACK_FREE, addr, handle); -- trace(s, slab, object, 0); -- /* Freepointer not overwritten by init_object(), SLAB_POISON moved it */ -- init_object(s, object, SLUB_RED_INACTIVE); -- -- /* Reached end of constructed freelist yet? */ -- if (object != tail) { -- object = get_freepointer(s, object); -- goto next_object; -- } -- ret = 1; -- --out: -- if (cnt != bulk_cnt) -- slab_err(s, slab, "Bulk freelist count(%d) invalid(%d)\n", -- bulk_cnt, cnt); -- -- slab_unlock(slab, &flags2); -- spin_unlock_irqrestore(&n->list_lock, flags); -- if (!ret) -- slab_fix(s, "Object at 0x%p not freed", object); -- return ret; --} -- - /* - * Parse a block of slub_debug options. Blocks are delimited by ';' - * -@@ -1666,16 +1575,18 @@ static inline - void setup_slab_debug(struct kmem_cache *s, struct slab *slab, void *addr) {} - - static inline int alloc_debug_processing(struct kmem_cache *s, -- struct slab *slab, void *object, unsigned long addr) { return 0; } -+ struct slab *slab, void *object) { return 0; } - --static inline int free_debug_processing( -+static inline void free_debug_processing( - struct kmem_cache *s, struct slab *slab, - void *head, void *tail, int bulk_cnt, -- unsigned long addr) { return 0; } -+ unsigned long addr) {} - - static inline void slab_pad_check(struct kmem_cache *s, struct slab *slab) {} - static inline int check_object(struct kmem_cache *s, struct slab *slab, - void *object, u8 val) { return 1; } -+static inline void set_track(struct kmem_cache *s, void *object, -+ enum track_item alloc, unsigned long addr) {} - static inline void add_full(struct kmem_cache *s, struct kmem_cache_node *n, - struct slab *slab) {} - static inline void remove_full(struct kmem_cache *s, struct kmem_cache_node *n, -@@ -1981,11 +1892,13 @@ static struct slab *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) - */ - slab = alloc_slab_page(alloc_gfp, node, oo); - if (unlikely(!slab)) -- goto out; -+ return NULL; - stat(s, ORDER_FALLBACK); - } - - slab->objects = oo_objects(oo); -+ slab->inuse = 0; -+ slab->frozen = 0; - - account_slab(slab, oo_order(oo), s, flags); - -@@ -2012,15 +1925,6 @@ static struct slab *allocate_slab(struct kmem_cache *s, gfp_t flags, int node) - set_freepointer(s, p, NULL); - } - -- slab->inuse = slab->objects; -- slab->frozen = 1; -- --out: -- if (!slab) -- return NULL; -- -- inc_slabs_node(s, slab_nid(slab), slab->objects); -- - return slab; - } - -@@ -2107,6 +2011,75 @@ static inline void remove_partial(struct kmem_cache_node *n, - n->nr_partial--; - } - -+/* -+ * Called only for kmem_cache_debug() caches instead of acquire_slab(), with a -+ * slab from the n->partial list. Remove only a single object from the slab, do -+ * the alloc_debug_processing() checks and leave the slab on the list, or move -+ * it to full list if it was the last free object. -+ */ -+static void *alloc_single_from_partial(struct kmem_cache *s, -+ struct kmem_cache_node *n, struct slab *slab) -+{ -+ void *object; -+ -+ lockdep_assert_held(&n->list_lock); -+ -+ object = slab->freelist; -+ slab->freelist = get_freepointer(s, object); -+ slab->inuse++; -+ -+ if (!alloc_debug_processing(s, slab, object)) { -+ remove_partial(n, slab); -+ return NULL; -+ } -+ -+ if (slab->inuse == slab->objects) { -+ remove_partial(n, slab); -+ add_full(s, n, slab); -+ } -+ -+ return object; -+} -+ -+/* -+ * Called only for kmem_cache_debug() caches to allocate from a freshly -+ * allocated slab. Allocate a single object instead of whole freelist -+ * and put the slab to the partial (or full) list. -+ */ -+static void *alloc_single_from_new_slab(struct kmem_cache *s, -+ struct slab *slab) -+{ -+ int nid = slab_nid(slab); -+ struct kmem_cache_node *n = get_node(s, nid); -+ unsigned long flags; -+ void *object; -+ -+ -+ object = slab->freelist; -+ slab->freelist = get_freepointer(s, object); -+ slab->inuse = 1; -+ -+ if (!alloc_debug_processing(s, slab, object)) -+ /* -+ * It's not really expected that this would fail on a -+ * freshly allocated slab, but a concurrent memory -+ * corruption in theory could cause that. -+ */ -+ return NULL; -+ -+ spin_lock_irqsave(&n->list_lock, flags); -+ -+ if (slab->inuse == slab->objects) -+ add_full(s, n, slab); -+ else -+ add_partial(n, slab, DEACTIVATE_TO_HEAD); -+ -+ inc_slabs_node(s, nid, slab->objects); -+ spin_unlock_irqrestore(&n->list_lock, flags); -+ -+ return object; -+} -+ - /* - * Remove slab from the partial list, freeze it and - * return the pointer to the freelist. -@@ -2187,6 +2160,13 @@ static void *get_partial_node(struct kmem_cache *s, struct kmem_cache_node *n, - if (!pfmemalloc_match(slab, gfpflags)) - continue; - -+ if (kmem_cache_debug(s)) { -+ object = alloc_single_from_partial(s, n, slab); -+ if (object) -+ break; -+ continue; -+ } -+ - t = acquire_slab(s, n, slab, object == NULL); - if (!t) - break; -@@ -2793,6 +2773,109 @@ static inline unsigned long node_nr_objs(struct kmem_cache_node *n) - { - return atomic_long_read(&n->total_objects); - } -+ -+/* Supports checking bulk free of a constructed freelist */ -+static noinline void free_debug_processing( -+ struct kmem_cache *s, struct slab *slab, -+ void *head, void *tail, int bulk_cnt, -+ unsigned long addr) -+{ -+ struct kmem_cache_node *n = get_node(s, slab_nid(slab)); -+ struct slab *slab_free = NULL; -+ void *object = head; -+ int cnt = 0; -+ unsigned long flags; -+ bool checks_ok = false; -+ depot_stack_handle_t handle = 0; -+ -+ if (s->flags & SLAB_STORE_USER) -+ handle = set_track_prepare(); -+ -+ spin_lock_irqsave(&n->list_lock, flags); -+ -+ if (s->flags & SLAB_CONSISTENCY_CHECKS) { -+ if (!check_slab(s, slab)) -+ goto out; -+ } -+ -+ if (slab->inuse < bulk_cnt) { -+ slab_err(s, slab, "Slab has %d allocated objects but %d are to be freed\n", -+ slab->inuse, bulk_cnt); -+ goto out; -+ } -+ -+next_object: -+ -+ if (++cnt > bulk_cnt) -+ goto out_cnt; -+ -+ if (s->flags & SLAB_CONSISTENCY_CHECKS) { -+ if (!free_consistency_checks(s, slab, object, addr)) -+ goto out; -+ } -+ -+ if (s->flags & SLAB_STORE_USER) -+ set_track_update(s, object, TRACK_FREE, addr, handle); -+ trace(s, slab, object, 0); -+ /* Freepointer not overwritten by init_object(), SLAB_POISON moved it */ -+ init_object(s, object, SLUB_RED_INACTIVE); -+ -+ /* Reached end of constructed freelist yet? */ -+ if (object != tail) { -+ object = get_freepointer(s, object); -+ goto next_object; -+ } -+ checks_ok = true; -+ -+out_cnt: -+ if (cnt != bulk_cnt) -+ slab_err(s, slab, "Bulk free expected %d objects but found %d\n", -+ bulk_cnt, cnt); -+ -+out: -+ if (checks_ok) { -+ void *prior = slab->freelist; -+ -+ /* Perform the actual freeing while we still hold the locks */ -+ slab->inuse -= cnt; -+ set_freepointer(s, tail, prior); -+ slab->freelist = head; -+ -+ /* Do we need to remove the slab from full or partial list? */ -+ if (!prior) { -+ remove_full(s, n, slab); -+ } else if (slab->inuse == 0) { -+ remove_partial(n, slab); -+ stat(s, FREE_REMOVE_PARTIAL); -+ } -+ -+ /* Do we need to discard the slab or add to partial list? */ -+ if (slab->inuse == 0) { -+ slab_free = slab; -+ } else if (!prior) { -+ add_partial(n, slab, DEACTIVATE_TO_TAIL); -+ stat(s, FREE_ADD_PARTIAL); -+ } -+ } -+ -+ if (slab_free) { -+ /* -+ * Update the counters while still holding n->list_lock to -+ * prevent spurious validation warnings -+ */ -+ dec_slabs_node(s, slab_nid(slab_free), slab_free->objects); -+ } -+ -+ spin_unlock_irqrestore(&n->list_lock, flags); -+ -+ if (!checks_ok) -+ slab_fix(s, "Object at 0x%p not freed", object); -+ -+ if (slab_free) { -+ stat(s, FREE_SLAB); -+ free_slab(s, slab_free); -+ } -+} - #endif /* CONFIG_SLUB_DEBUG */ - - #if defined(CONFIG_SLUB_DEBUG) || defined(CONFIG_SYSFS) -@@ -3041,36 +3124,52 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, - return NULL; - } - -+ stat(s, ALLOC_SLAB); -+ -+ if (kmem_cache_debug(s)) { -+ freelist = alloc_single_from_new_slab(s, slab); -+ -+ if (unlikely(!freelist)) -+ goto new_objects; -+ -+ if (s->flags & SLAB_STORE_USER) -+ set_track(s, freelist, TRACK_ALLOC, addr); -+ -+ return freelist; -+ } -+ - /* - * No other reference to the slab yet so we can - * muck around with it freely without cmpxchg - */ - freelist = slab->freelist; - slab->freelist = NULL; -+ slab->inuse = slab->objects; -+ slab->frozen = 1; - -- stat(s, ALLOC_SLAB); -+ inc_slabs_node(s, slab_nid(slab), slab->objects); - - check_new_slab: - - if (kmem_cache_debug(s)) { -- if (!alloc_debug_processing(s, slab, freelist, addr)) { -- /* Slab failed checks. Next slab needed */ -- goto new_slab; -- } else { -- /* -- * For debug case, we don't load freelist so that all -- * allocations go through alloc_debug_processing() -- */ -- goto return_single; -- } -+ /* -+ * For debug caches here we had to go through -+ * alloc_single_from_partial() so just store the tracking info -+ * and return the object -+ */ -+ if (s->flags & SLAB_STORE_USER) -+ set_track(s, freelist, TRACK_ALLOC, addr); -+ return freelist; - } - -- if (unlikely(!pfmemalloc_match(slab, gfpflags))) -+ if (unlikely(!pfmemalloc_match(slab, gfpflags))) { - /* - * For !pfmemalloc_match() case we don't load freelist so that - * we don't make further mismatched allocations easier. - */ -- goto return_single; -+ deactivate_slab(s, slab, get_freepointer(s, freelist)); -+ return freelist; -+ } - - retry_load_slab: - -@@ -3094,11 +3193,6 @@ static void *___slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, - c->slab = slab; - - goto load_freelist; -- --return_single: -- -- deactivate_slab(s, slab, get_freepointer(s, freelist)); -- return freelist; - } - - /* -@@ -3202,14 +3296,8 @@ static __always_inline void *slab_alloc_node(struct kmem_cache *s, struct list_l - - object = c->freelist; - slab = c->slab; -- /* -- * We cannot use the lockless fastpath on PREEMPT_RT because if a -- * slowpath has taken the local_lock_irqsave(), it is not protected -- * against a fast path operation in an irq handler. So we need to take -- * the slow path which uses local_lock. It is still relatively fast if -- * there is a suitable cpu freelist. -- */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT) || -+ -+ if (!USE_LOCKLESS_FAST_PATH() || - unlikely(!object || !slab || !node_match(slab, node))) { - object = __slab_alloc(s, gfpflags, node, addr, c); - } else { -@@ -3346,9 +3434,10 @@ static void __slab_free(struct kmem_cache *s, struct slab *slab, - if (kfence_free(head)) - return; - -- if (kmem_cache_debug(s) && -- !free_debug_processing(s, slab, head, tail, cnt, addr)) -+ if (kmem_cache_debug(s)) { -+ free_debug_processing(s, slab, head, tail, cnt, addr); - return; -+ } - - do { - if (unlikely(n)) { -@@ -3468,6 +3557,7 @@ static __always_inline void do_slab_free(struct kmem_cache *s, - void *tail_obj = tail ? : head; - struct kmem_cache_cpu *c; - unsigned long tid; -+ void **freelist; - - redo: - /* -@@ -3482,9 +3572,13 @@ static __always_inline void do_slab_free(struct kmem_cache *s, - /* Same with comment on barrier() in slab_alloc_node() */ - barrier(); - -- if (likely(slab == c->slab)) { --#ifndef CONFIG_PREEMPT_RT -- void **freelist = READ_ONCE(c->freelist); -+ if (unlikely(slab != c->slab)) { -+ __slab_free(s, slab, head, tail_obj, cnt, addr); -+ return; -+ } -+ -+ if (USE_LOCKLESS_FAST_PATH()) { -+ freelist = READ_ONCE(c->freelist); - - set_freepointer(s, tail_obj, freelist); - -@@ -3496,16 +3590,8 @@ static __always_inline void do_slab_free(struct kmem_cache *s, - note_cmpxchg_failure("slab_free", s, tid); - goto redo; - } --#else /* CONFIG_PREEMPT_RT */ -- /* -- * We cannot use the lockless fastpath on PREEMPT_RT because if -- * a slowpath has taken the local_lock_irqsave(), it is not -- * protected against a fast path operation in an irq handler. So -- * we need to take the local_lock. We shouldn't simply defer to -- * __slab_free() as that wouldn't use the cpu freelist at all. -- */ -- void **freelist; -- -+ } else { -+ /* Update the free list under the local lock */ - local_lock(&s->cpu_slab->lock); - c = this_cpu_ptr(s->cpu_slab); - if (unlikely(slab != c->slab)) { -@@ -3520,11 +3606,8 @@ static __always_inline void do_slab_free(struct kmem_cache *s, - c->tid = next_tid(tid); - - local_unlock(&s->cpu_slab->lock); --#endif -- stat(s, FREE_FASTPATH); -- } else -- __slab_free(s, slab, head, tail_obj, cnt, addr); -- -+ } -+ stat(s, FREE_FASTPATH); - } - - static __always_inline void slab_free(struct kmem_cache *s, struct slab *slab, -@@ -3941,6 +4024,7 @@ static void early_kmem_cache_node_alloc(int node) - slab = new_slab(kmem_cache_node, GFP_NOWAIT, node); - - BUG_ON(!slab); -+ inc_slabs_node(kmem_cache_node, slab_nid(slab), slab->objects); - if (slab_nid(slab) != node) { - pr_err("SLUB: Unable to allocate memory from node %d\n", node); - pr_err("SLUB: Allocating a useless per node structure in order to be able to continue\n"); -@@ -3955,7 +4039,6 @@ static void early_kmem_cache_node_alloc(int node) - n = kasan_slab_alloc(kmem_cache_node, n, GFP_KERNEL, false); - slab->freelist = get_freepointer(kmem_cache_node, n); - slab->inuse = 1; -- slab->frozen = 0; - kmem_cache_node->node[node] = n; - init_kmem_cache_node(n); - inc_slabs_node(kmem_cache_node, node, slab->objects); -@@ -4242,23 +4325,21 @@ static void list_slab_objects(struct kmem_cache *s, struct slab *slab, - { - #ifdef CONFIG_SLUB_DEBUG - void *addr = slab_address(slab); -- unsigned long flags; -- unsigned long *map; - void *p; - - slab_err(s, slab, text, s->name); -- slab_lock(slab, &flags); - -- map = get_map(s, slab); -+ spin_lock(&object_map_lock); -+ __fill_map(object_map, s, slab); -+ - for_each_object(p, s, addr, slab->objects) { - -- if (!test_bit(__obj_to_index(s, addr, p), map)) { -+ if (!test_bit(__obj_to_index(s, addr, p), object_map)) { - pr_err("Object 0x%p @offset=%tu\n", p, p - addr); - print_tracking(s, p); - } - } -- put_map(map); -- slab_unlock(slab, &flags); -+ spin_unlock(&object_map_lock); - #endif - } - -@@ -4616,6 +4697,7 @@ static int __kmem_cache_do_shrink(struct kmem_cache *s) - if (free == slab->objects) { - list_move(&slab->slab_list, &discard); - n->nr_partial--; -+ dec_slabs_node(s, node, slab->objects); - } else if (free <= SHRINK_PROMOTE_MAX) - list_move(&slab->slab_list, promote + free - 1); - } -@@ -4631,7 +4713,7 @@ static int __kmem_cache_do_shrink(struct kmem_cache *s) - - /* Release empty slabs */ - list_for_each_entry_safe(slab, t, &discard, slab_list) -- discard_slab(s, slab); -+ free_slab(s, slab); - - if (slabs_node(s, node)) - ret = 1; -@@ -4991,12 +5073,9 @@ static void validate_slab(struct kmem_cache *s, struct slab *slab, - { - void *p; - void *addr = slab_address(slab); -- unsigned long flags; -- -- slab_lock(slab, &flags); - - if (!check_slab(s, slab) || !on_freelist(s, slab, NULL)) -- goto unlock; -+ return; - - /* Now we know that a valid freelist exists */ - __fill_map(obj_map, s, slab); -@@ -5007,8 +5086,6 @@ static void validate_slab(struct kmem_cache *s, struct slab *slab, - if (!check_object(s, slab, p, val)) - break; - } --unlock: -- slab_unlock(slab, &flags); - } - - static int validate_slab_node(struct kmem_cache *s, -@@ -5612,7 +5689,7 @@ static ssize_t validate_store(struct kmem_cache *s, - { - int ret = -EINVAL; - -- if (buf[0] == '1') { -+ if (buf[0] == '1' && kmem_cache_debug(s)) { - ret = validate_slab_cache(s); - if (ret >= 0) - ret = length; -diff --git a/mm/vmstat.c b/mm/vmstat.c -index 90af9a8572f5..7a2d73f15230 100644 ---- a/mm/vmstat.c -+++ b/mm/vmstat.c -@@ -355,8 +355,7 @@ void __mod_zone_page_state(struct zone *zone, enum zone_stat_item item, - * CPU migrations and preemption potentially corrupts a counter so - * disable preemption. - */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - - x = delta + __this_cpu_read(*p); - -@@ -368,8 +367,7 @@ void __mod_zone_page_state(struct zone *zone, enum zone_stat_item item, - } - __this_cpu_write(*p, x); - -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - } - EXPORT_SYMBOL(__mod_zone_page_state); - -@@ -393,8 +391,7 @@ void __mod_node_page_state(struct pglist_data *pgdat, enum node_stat_item item, - } - - /* See __mod_node_page_state */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - - x = delta + __this_cpu_read(*p); - -@@ -406,8 +403,7 @@ void __mod_node_page_state(struct pglist_data *pgdat, enum node_stat_item item, - } - __this_cpu_write(*p, x); - -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - } - EXPORT_SYMBOL(__mod_node_page_state); - -@@ -441,8 +437,7 @@ void __inc_zone_state(struct zone *zone, enum zone_stat_item item) - s8 v, t; - - /* See __mod_node_page_state */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - - v = __this_cpu_inc_return(*p); - t = __this_cpu_read(pcp->stat_threshold); -@@ -453,8 +448,7 @@ void __inc_zone_state(struct zone *zone, enum zone_stat_item item) - __this_cpu_write(*p, -overstep); - } - -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - } - - void __inc_node_state(struct pglist_data *pgdat, enum node_stat_item item) -@@ -466,8 +460,7 @@ void __inc_node_state(struct pglist_data *pgdat, enum node_stat_item item) - VM_WARN_ON_ONCE(vmstat_item_in_bytes(item)); - - /* See __mod_node_page_state */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - - v = __this_cpu_inc_return(*p); - t = __this_cpu_read(pcp->stat_threshold); -@@ -478,8 +471,7 @@ void __inc_node_state(struct pglist_data *pgdat, enum node_stat_item item) - __this_cpu_write(*p, -overstep); - } - -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - } - - void __inc_zone_page_state(struct page *page, enum zone_stat_item item) -@@ -501,8 +493,7 @@ void __dec_zone_state(struct zone *zone, enum zone_stat_item item) - s8 v, t; - - /* See __mod_node_page_state */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - - v = __this_cpu_dec_return(*p); - t = __this_cpu_read(pcp->stat_threshold); -@@ -513,8 +504,7 @@ void __dec_zone_state(struct zone *zone, enum zone_stat_item item) - __this_cpu_write(*p, overstep); - } - -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - } - - void __dec_node_state(struct pglist_data *pgdat, enum node_stat_item item) -@@ -526,8 +516,7 @@ void __dec_node_state(struct pglist_data *pgdat, enum node_stat_item item) - VM_WARN_ON_ONCE(vmstat_item_in_bytes(item)); - - /* See __mod_node_page_state */ -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_disable(); -+ preempt_disable_nested(); - - v = __this_cpu_dec_return(*p); - t = __this_cpu_read(pcp->stat_threshold); -@@ -538,8 +527,7 @@ void __dec_node_state(struct pglist_data *pgdat, enum node_stat_item item) - __this_cpu_write(*p, overstep); - } - -- if (IS_ENABLED(CONFIG_PREEMPT_RT)) -- preempt_enable(); -+ preempt_enable_nested(); - } - - void __dec_zone_page_state(struct page *page, enum zone_stat_item item) diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c -index 035812b0461c..ecdb47712d95 100644 +index e1bb41a443c4..296d0145932f 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c @@ -712,13 +712,13 @@ static void vlan_dev_get_stats64(struct net_device *dev, @@ -8781,7 +7139,7 @@ index 6e53dc991409..f2fc284abab3 100644 u64_stats_add(&stats->rx_packets, rxpackets); u64_stats_add(&stats->rx_bytes, rxbytes); diff --git a/net/core/dev.c b/net/core/dev.c -index 56c8b0921c9f..d96506980d2f 100644 +index 3be256051e99..097233895eb8 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -4582,15 +4582,6 @@ static void rps_trigger_softirq(void *data) @@ -8800,7 +7158,7 @@ index 56c8b0921c9f..d96506980d2f 100644 /* * Check if this softnet_data structure is another cpu one * If yes, queue it to our IPI list and return 1 -@@ -6661,6 +6652,30 @@ static void skb_defer_free_flush(struct softnet_data *sd) +@@ -6648,6 +6639,30 @@ static void skb_defer_free_flush(struct softnet_data *sd) } } @@ -8831,7 +7189,7 @@ index 56c8b0921c9f..d96506980d2f 100644 static __latent_entropy void net_rx_action(struct softirq_action *h) { struct softnet_data *sd = this_cpu_ptr(&softnet_data); -@@ -10492,12 +10507,12 @@ void dev_fetch_sw_netstats(struct rtnl_link_stats64 *s, +@@ -10477,12 +10492,12 @@ void dev_fetch_sw_netstats(struct rtnl_link_stats64 *s, stats = per_cpu_ptr(netstats, cpu); do { @@ -8846,7 +7204,7 @@ index 56c8b0921c9f..d96506980d2f 100644 s->rx_packets += rx_packets; s->rx_bytes += rx_bytes; -@@ -11412,7 +11427,11 @@ static int __init net_dev_init(void) +@@ -11397,7 +11412,11 @@ static int __init net_dev_init(void) INIT_CSD(&sd->csd, rps_trigger_softirq, sd); sd->cpu = i; #endif @@ -8859,10 +7217,10 @@ index 56c8b0921c9f..d96506980d2f 100644 init_gro_hash(&sd->backlog); diff --git a/net/core/devlink.c b/net/core/devlink.c -index b50bcc18b8d9..cfa6a099457a 100644 +index 89baa7c0938b..0a16ad45520e 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c -@@ -8268,10 +8268,10 @@ static void devlink_trap_stats_read(struct devlink_stats __percpu *trap_stats, +@@ -8304,10 +8304,10 @@ static void devlink_trap_stats_read(struct devlink_stats __percpu *trap_stats, cpu_stats = per_cpu_ptr(trap_stats, i); do { @@ -8876,7 +7234,7 @@ index b50bcc18b8d9..cfa6a099457a 100644 u64_stats_add(&stats->rx_packets, rx_packets); u64_stats_add(&stats->rx_bytes, rx_bytes); diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c -index 75501e1bdd25..dfcaf61d972c 100644 +index f084a4a6b7ab..11aa6e8a3098 100644 --- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c @@ -1432,9 +1432,9 @@ static void net_dm_stats_read(struct net_dm_stats *stats) @@ -8960,10 +7318,10 @@ index c8d137ef5980..b71ccaec0991 100644 static int diff --git a/net/core/skbuff.c b/net/core/skbuff.c -index 417463da4fac..505c72a9b153 100644 +index d1a3fa6f3f12..b90816ea8f92 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c -@@ -6555,6 +6555,11 @@ nodefer: __kfree_skb(skb); +@@ -6658,6 +6658,11 @@ nodefer: __kfree_skb(skb); /* Make sure to trigger NET_RX_SOFTIRQ on the remote CPU * if we are unlucky enough (this seems very unlikely). */ @@ -8977,10 +7335,10 @@ index 417463da4fac..505c72a9b153 100644 + } } diff --git a/net/dsa/slave.c b/net/dsa/slave.c -index 1291c2431d44..dcc550b87162 100644 +index a9fde48cffd4..83e419afa89e 100644 --- a/net/dsa/slave.c +++ b/net/dsa/slave.c -@@ -934,12 +934,12 @@ static void dsa_slave_get_ethtool_stats(struct net_device *dev, +@@ -976,12 +976,12 @@ static void dsa_slave_get_ethtool_stats(struct net_device *dev, s = per_cpu_ptr(dev->tstats, i); do { @@ -8996,10 +7354,10 @@ index 1291c2431d44..dcc550b87162 100644 data[1] += tx_bytes; data[2] += rx_packets; diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c -index 3ca0cc467886..dbae0c79d5cf 100644 +index 3dd02396517d..585f13b6fef6 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c -@@ -1684,9 +1684,9 @@ u64 snmp_get_cpu_field64(void __percpu *mib, int cpu, int offt, +@@ -1706,9 +1706,9 @@ u64 snmp_get_cpu_field64(void __percpu *mib, int cpu, int offt, bhptr = per_cpu_ptr(mib, cpu); syncp = (struct u64_stats_sync *)(bhptr + syncp_offset); do { @@ -9012,10 +7370,10 @@ index 3ca0cc467886..dbae0c79d5cf 100644 return v; } diff --git a/net/ipv6/seg6_local.c b/net/ipv6/seg6_local.c -index b7de5e46fdd8..f84da849819c 100644 +index 8370726ae7bf..487f8e98deaa 100644 --- a/net/ipv6/seg6_local.c +++ b/net/ipv6/seg6_local.c -@@ -1508,13 +1508,13 @@ static int put_nla_counters(struct sk_buff *skb, struct seg6_local_lwt *slwt) +@@ -1644,13 +1644,13 @@ static int put_nla_counters(struct sk_buff *skb, struct seg6_local_lwt *slwt) pcounters = per_cpu_ptr(slwt->pcpu_counters, i); do { @@ -9032,10 +7390,10 @@ index b7de5e46fdd8..f84da849819c 100644 counters.packets += packets; counters.bytes += bytes; diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c -index 9d7b238a6737..965b9cb2ef3f 100644 +index cebfd148bb40..1e922f95a98d 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c -@@ -2316,9 +2316,9 @@ static inline u64 sta_get_tidstats_msdu(struct ieee80211_sta_rx_stats *rxstats, +@@ -2396,9 +2396,9 @@ static inline u64 sta_get_tidstats_msdu(struct ieee80211_sta_rx_stats *rxstats, u64 value; do { @@ -9047,7 +7405,7 @@ index 9d7b238a6737..965b9cb2ef3f 100644 return value; } -@@ -2384,9 +2384,9 @@ static inline u64 sta_get_stats_bytes(struct ieee80211_sta_rx_stats *rxstats) +@@ -2464,9 +2464,9 @@ static inline u64 sta_get_stats_bytes(struct ieee80211_sta_rx_stats *rxstats) u64 value; do { @@ -9076,7 +7434,7 @@ index b52afe316dc4..35b5f806fdda 100644 stats->rx_packets += local.rx_packets; stats->rx_bytes += local.rx_bytes; diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c -index efab2b06d373..5a7349002508 100644 +index 988222fff9f0..4d62059a6021 100644 --- a/net/netfilter/ipvs/ip_vs_ctl.c +++ b/net/netfilter/ipvs/ip_vs_ctl.c @@ -2296,13 +2296,13 @@ static int ip_vs_stats_percpu_show(struct seq_file *seq, void *v) @@ -9096,7 +7454,7 @@ index efab2b06d373..5a7349002508 100644 seq_printf(seq, "%3X %8LX %8LX %8LX %16LX %16LX\n", i, (u64)conns, (u64)inpkts, diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c -index 63c70141b3e5..cde0d9f0d838 100644 +index 58d9cbc9ccdc..f093c787fdc0 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -1534,10 +1534,10 @@ static int nft_dump_stats(struct sk_buff *skb, struct nft_stats __percpu *stats) @@ -9113,10 +7471,10 @@ index 63c70141b3e5..cde0d9f0d838 100644 total.bytes += bytes; } diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c -index 93c596e3b22b..b05458c17048 100644 +index 155263e73512..f95b716ea96d 100644 --- a/net/openvswitch/datapath.c +++ b/net/openvswitch/datapath.c -@@ -715,9 +715,9 @@ static void get_dp_stats(const struct datapath *dp, struct ovs_dp_stats *stats, +@@ -716,9 +716,9 @@ static void get_dp_stats(const struct datapath *dp, struct ovs_dp_stats *stats, percpu_stats = per_cpu_ptr(dp->stats_percpu, i); do { diff --git a/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch b/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch index ffa7e6a16636248e0631b1cab68c2763670b4531..4db87d2606ad5edbe3e631da9689e1ec3d2920e7 100644 --- a/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch +++ b/patches/wireless_regdb/0001-Add-wireless-regdb-regulatory-database-file.patch @@ -1,6 +1,6 @@ -From 05c2f5a6fd748066c72c9f335cfef4336ac8a7ba Mon Sep 17 00:00:00 2001 +From e3b70d90c3a29dc7e62b8f6bb131e052216a5b70 Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> -Date: Wed, 26 Oct 2022 09:06:06 -0500 +Date: Thu, 3 Nov 2022 11:24:25 -0500 Subject: [PATCH] Add wireless-regdb regulatory database file https://git.kernel.org/pub/scm/linux/kernel/git/sforshee/wireless-regdb.git/commit/?id=c04fd9bcfe49ee1071882cc543ed518f65070204 diff --git a/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch b/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch index ca21b628adc6ab26966577d6d8c7e09dca5f6074..1fc966994ea3ae8353bf4bd48f4dc53cef112f2c 100644 --- a/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch +++ b/patches/wpanusb/0001-merge-wpanusb-https-github.com-statropy-wpanusb.patch @@ -1,6 +1,6 @@ -From 5fbe7d9fa0209f0dad196dd5b012d684d82b9a0d Mon Sep 17 00:00:00 2001 +From 969d96eb4d92485ccd5ab294009f5d5e5e2bc8bc Mon Sep 17 00:00:00 2001 From: Robert Nelson <robertcnelson@gmail.com> -Date: Wed, 26 Oct 2022 09:05:11 -0500 +Date: Thu, 3 Nov 2022 11:22:02 -0500 Subject: [PATCH] merge: wpanusb: https://github.com/statropy/wpanusb https://github.com/statropy/wpanusb/commit/251f0167545bf2dcaa3cad991a59dbf5ab05490a diff --git a/repo_maintenance/push-bb.org.sh b/repo_maintenance/push-bb.org.sh index 72ebde12a6a50c3ca87a167393d4407a4bc40f99..d7196d72551ba00f1088fcf8d24b0853e4da6d7f 100755 --- a/repo_maintenance/push-bb.org.sh +++ b/repo_maintenance/push-bb.org.sh @@ -53,12 +53,17 @@ cat_files () { if [ -f ../patches/git/WIRELESS_REGDB ] ; then cat ../patches/git/WIRELESS_REGDB >> ${wfile} fi + + if [ -f ../patches/git/KSMBD ] ; then + cat ../patches/git/KSMBD >> ${wfile} + fi } DIR=$PWD git_bin=$(which git) -repo="git@github.com:beagleboard/linux.git" +repo_github="git@github.com:beagleboard/linux.git" +repo_gitlab="git@git.beagleboard.org:beagleboard/linux.git" example="bb.org" compare="https://github.com/RobertCNelson/ti-linux-kernel/compare" @@ -73,15 +78,18 @@ if [ -e ${DIR}/version.sh ]; then make ARCH=${KERNEL_ARCH} savedefconfig cp ${DIR}/KERNEL/defconfig ${DIR}/KERNEL/arch/${KERNEL_ARCH}/configs/${example}_defconfig ${git_bin} add arch/${KERNEL_ARCH}/configs/${example}_defconfig + #${git_bin} add arch/${KERNEL_ARCH}/configs/ti_sdk_am3x_release_defconfig + #${git_bin} add arch/${KERNEL_ARCH}/configs/ti_sdk_dra7x_release_defconfig + #${git_bin} add arch/${KERNEL_ARCH}/configs/ti_sdk_arm64_release_defconfig - if [ "x${ti_git_old_release}" = "x${ti_git_post}" ] ; then + if [ "x${ti_git_old_release}" = "x${ti_git_new_release}" ] ; then echo "${KERNEL_TAG}${BUILD}" > ${wfile} echo "${KERNEL_TAG}${BUILD} ${example}_defconfig" >> ${wfile} cat_files else echo "${KERNEL_TAG}${BUILD}" > ${wfile} echo "${KERNEL_TAG}${BUILD} ${example}_defconfig" >> ${wfile} - echo "${KERNEL_REL} TI Delta: ${compare}/${ti_git_old_release}...${ti_git_post}" >> ${wfile} + echo "${KERNEL_REL} TI Delta: ${compare}/${ti_git_old_release}...${ti_git_new_release}" >> ${wfile} cat_files fi ${git_bin} commit -a -F ${wfile} -s @@ -89,7 +97,13 @@ if [ -e ${DIR}/version.sh ]; then ${git_bin} tag -a "${KERNEL_TAG}${BUILD}" -F ${wfile} -f #push tag - ${git_bin} push -f ${repo} "${KERNEL_TAG}${BUILD}" + echo "log: git: pushing tags..." + + echo "log: git push -f ${repo_github} ${KERNEL_TAG}${BUILD}" + ${git_bin} push -f ${repo_github} "${KERNEL_TAG}${BUILD}" + + echo "log: git push -f ${repo_gitlab} ${KERNEL_TAG}${BUILD}" + ${git_bin} push -f ${repo_gitlab} "${KERNEL_TAG}${BUILD}" echo "debug: pushing ${bborg_branch}" @@ -98,8 +112,13 @@ if [ -e ${DIR}/version.sh ]; then ${git_bin} branch -m v${KERNEL_TAG}${BUILD} ${bborg_branch} #push branch - echo "log: git push -f ${repo} ${bborg_branch}" - ${git_bin} push -f ${repo} ${bborg_branch} + echo "log: git: pushing branch..." + + echo "log: git push -f ${repo_github} ${bborg_branch}" + ${git_bin} push -f ${repo_github} ${bborg_branch} + + echo "log: git push -f ${repo_gitlab} ${bborg_branch}" + ${git_bin} push -f ${repo_gitlab} ${bborg_branch} cd ${DIR}/ fi diff --git a/version.sh b/version.sh index 1a771c8562c7a2a3822ee7cd8c12f6b788570cc7..e9d358cc5bcacda2593467bae044d00ab23a7b6e 100644 --- a/version.sh +++ b/version.sh @@ -8,7 +8,7 @@ build_prefix="-bone" branch_prefix="am33x-v" branch_postfix="" -#https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/process/changes.rst?h=v6.0-rc1 +#https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/Documentation/process/changes.rst?h=v6.1-rc1 #arm KERNEL_ARCH=arm DEBARCH=armhf @@ -40,11 +40,11 @@ toolchain="gcc_11_arm" #toolchain="gcc_12_riscv64" #Kernel -KERNEL_REL=6.0 -KERNEL_TAG=${KERNEL_REL}.5 -kernel_rt=".3-rt12" +KERNEL_REL=6.1 +KERNEL_TAG=${KERNEL_REL}-rc3 +kernel_rt="-rc3-rt2" #Kernel Build -BUILD=${build_prefix}7 +BUILD=${build_prefix}0.1 #v6.X-rcX + upto SHA #prev_KERNEL_SHA=""