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=""