]> git.ipfire.org Git - ipfire-3.x.git/commitdiff
kernel: Update to 3.18.2
authorMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Jan 2015 14:23:22 +0000 (15:23 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Tue, 13 Jan 2015 14:23:22 +0000 (15:23 +0100)
kernel/config-arm-generic
kernel/config-armv5tel-default
kernel/config-armv7hl-default
kernel/config-armv7hl-lpae
kernel/config-generic
kernel/config-i686-legacy
kernel/config-x86-generic
kernel/config-x86_64-default
kernel/kernel.nm
kernel/patches/grsecurity-3.0-3.18.2-201501120821.patch [moved from kernel/patches/grsecurity-3.0-3.17.4-201411220955.patch with 94% similarity]

index c31b8ca221e6f9719c5a7a65237fb93cda2b8b80..2d1f04e31f5a4b0244007730ab18f3a1ef4788cd 100644 (file)
@@ -9,7 +9,7 @@ CONFIG_ARM_PATCH_PHYS_VIRT=y
 # IRQ subsystem
 #
 CONFIG_HARDIRQS_SW_RESEND=y
 # IRQ subsystem
 #
 CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_CHIP=y
+CONFIG_HANDLE_DOMAIN_IRQ=y
 
 #
 # Timers subsystem
 
 #
 # Timers subsystem
@@ -80,7 +80,6 @@ CONFIG_ARCH_MULTIPLATFORM=y
 # CPU Core family selection
 #
 # CONFIG_ARCH_MULTI_V6 is not set
 # CPU Core family selection
 #
 # CONFIG_ARCH_MULTI_V6 is not set
-CONFIG_ARCH_HISI=y
 
 #
 # Hisilicon platform type
 
 #
 # Hisilicon platform type
@@ -93,11 +92,6 @@ CONFIG_ARCH_MXC=y
 #
 # CONFIG_PLAT_SPEAR is not set
 
 #
 # CONFIG_PLAT_SPEAR is not set
 
-#
-# CSR SiRF atlas6/primaII/Marco/Polo Specific Features
-#
-CONFIG_ARM_TIMER_SP804=y
-
 #
 # Processor Type
 #
 #
 # Processor Type
 #
@@ -120,7 +114,6 @@ CONFIG_MULTI_IRQ_HANDLER=y
 #
 # Bus support
 #
 #
 # Bus support
 #
-CONFIG_ARM_AMBA=y
 CONFIG_PCI_SYSCALL=y
 # CONFIG_PCI_MSI is not set
 # CONFIG_PCI_STUB is not set
 CONFIG_PCI_SYSCALL=y
 # CONFIG_PCI_MSI is not set
 # CONFIG_PCI_STUB is not set
@@ -142,7 +135,6 @@ CONFIG_VMSPLIT_3G=y
 # CONFIG_VMSPLIT_1G is not set
 CONFIG_PAGE_OFFSET=0xC0000000
 CONFIG_AEABI=y
 # CONFIG_VMSPLIT_1G is not set
 CONFIG_PAGE_OFFSET=0xC0000000
 CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
 # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
 # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
 CONFIG_HIGHMEM=y
 # CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
 # CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
 CONFIG_HIGHMEM=y
@@ -173,7 +165,7 @@ CONFIG_AUTO_ZRELADDR=y
 #
 CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
 #
 CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
-# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
+CONFIG_CPUFREQ_DT=m
 
 #
 # ARM CPU frequency scaling drivers
 
 #
 # ARM CPU frequency scaling drivers
@@ -309,7 +301,9 @@ CONFIG_MII=y
 #
 CONFIG_AMD8111_ETH=y
 CONFIG_AMD_XGBE=m
 #
 CONFIG_AMD8111_ETH=y
 CONFIG_AMD_XGBE=m
+CONFIG_ARC_EMAC_CORE=m
 CONFIG_ARC_EMAC=m
 CONFIG_ARC_EMAC=m
+CONFIG_EMAC_ROCKCHIP=m
 CONFIG_NET_CADENCE=y
 CONFIG_BCMGENET=m
 CONFIG_SYSTEMPORT=m
 CONFIG_NET_CADENCE=y
 CONFIG_BCMGENET=m
 CONFIG_SYSTEMPORT=m
@@ -354,11 +348,6 @@ CONFIG_WIL6210_TRACING=y
 # CONFIG_IPW2200_MONITOR is not set
 # CONFIG_IPW2200_QOS is not set
 
 # CONFIG_IPW2200_MONITOR is not set
 # CONFIG_IPW2200_QOS is not set
 
-#
-# Input device support
-#
-# CONFIG_INPUT_FF_MEMLESS is not set
-
 #
 # Userland interfaces
 #
 #
 # Userland interfaces
 #
@@ -376,6 +365,7 @@ CONFIG_KEYBOARD_OMAP4=m
 CONFIG_KEYBOARD_CAP1106=m
 # CONFIG_INPUT_PM8XXX_VIBRATOR is not set
 CONFIG_INPUT_PMIC8XXX_PWRKEY=m
 CONFIG_KEYBOARD_CAP1106=m
 # CONFIG_INPUT_PM8XXX_VIBRATOR is not set
 CONFIG_INPUT_PMIC8XXX_PWRKEY=m
+CONFIG_INPUT_MAX77693_HAPTIC=m
 # CONFIG_INPUT_MAX8997_HAPTIC is not set
 # CONFIG_INPUT_GPIO_BEEPER is not set
 # CONFIG_INPUT_TWL4030_PWRBUTTON is not set
 # CONFIG_INPUT_MAX8997_HAPTIC is not set
 # CONFIG_INPUT_GPIO_BEEPER is not set
 # CONFIG_INPUT_TWL4030_PWRBUTTON is not set
@@ -405,8 +395,6 @@ CONFIG_SERIAL_8250_EM=m
 #
 # Non-8250 serial port support
 #
 #
 # Non-8250 serial port support
 #
-CONFIG_SERIAL_AMBA_PL010=m
-CONFIG_SERIAL_AMBA_PL011=m
 CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
 CONFIG_SERIAL_IMX=m
 # CONFIG_SERIAL_JSM is not set
 CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST=y
 CONFIG_SERIAL_IMX=m
 # CONFIG_SERIAL_JSM is not set
@@ -446,7 +434,6 @@ CONFIG_I2C_RK3X=m
 CONFIG_PINMUX=y
 CONFIG_PINCONF=y
 # CONFIG_PINCTRL_AS3722 is not set
 CONFIG_PINMUX=y
 CONFIG_PINCONF=y
 # CONFIG_PINCTRL_AS3722 is not set
-# CONFIG_PINCTRL_BCM281XX is not set
 # CONFIG_PINCTRL_PALMAS is not set
 CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
 # CONFIG_PINCTRL_PALMAS is not set
 CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
@@ -480,11 +467,6 @@ CONFIG_GPIO_ADNP=m
 #
 # CONFIG_GPIO_MCP23S08 is not set
 
 #
 # CONFIG_GPIO_MCP23S08 is not set
 
-#
-# MODULbus GPIO expanders:
-#
-CONFIG_GPIO_BCM_KONA=y
-
 #
 # 1-wire Slaves
 #
 #
 # 1-wire Slaves
 #
@@ -504,9 +486,12 @@ CONFIG_GPIO_BCM_KONA=y
 # CONFIG_CHARGER_TPS65090 is not set
 CONFIG_POWER_RESET_AS3722=y
 CONFIG_POWER_RESET_GPIO=y
 # CONFIG_CHARGER_TPS65090 is not set
 CONFIG_POWER_RESET_AS3722=y
 CONFIG_POWER_RESET_GPIO=y
-CONFIG_POWER_RESET_HISI=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
+CONFIG_POWER_RESET_LTC2952=y
 CONFIG_POWER_RESET_RESTART=y
 CONFIG_POWER_RESET_RESTART=y
+CONFIG_POWER_RESET_VERSATILE=y
 CONFIG_POWER_RESET_VEXPRESS=y
 CONFIG_POWER_RESET_VEXPRESS=y
+CONFIG_POWER_RESET_SYSCON=y
 
 #
 # Native drivers
 
 #
 # Native drivers
@@ -520,7 +505,7 @@ CONFIG_THERMAL_OF=y
 # Watchdog Device Drivers
 #
 CONFIG_GPIO_WATCHDOG=m
 # Watchdog Device Drivers
 #
 CONFIG_GPIO_WATCHDOG=m
-CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_CADENCE_WATCHDOG=m
 CONFIG_MAX63XX_WATCHDOG=m
 CONFIG_IMX2_WDT=m
 
 CONFIG_MAX63XX_WATCHDOG=m
 CONFIG_IMX2_WDT=m
 
@@ -535,11 +520,13 @@ CONFIG_IMX2_WDT=m
 #
 CONFIG_MFD_AS3722=y
 # CONFIG_MFD_ASIC3 is not set
 #
 CONFIG_MFD_AS3722=y
 # CONFIG_MFD_ASIC3 is not set
+CONFIG_MFD_HI6421_PMIC=m
 # CONFIG_HTC_EGPIO is not set
 # CONFIG_LPC_ICH is not set
 CONFIG_MFD_PM8XXX=m
 CONFIG_MFD_PM8921_CORE=m
 # CONFIG_MFD_RTSX_PCI is not set
 # CONFIG_HTC_EGPIO is not set
 # CONFIG_LPC_ICH is not set
 CONFIG_MFD_PM8XXX=m
 CONFIG_MFD_PM8921_CORE=m
 # CONFIG_MFD_RTSX_PCI is not set
+CONFIG_MFD_RK808=m
 CONFIG_MFD_STMPE=y
 
 #
 CONFIG_MFD_STMPE=y
 
 #
@@ -555,6 +542,9 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
 # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
 # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
 CONFIG_REGULATOR_AS3722=m
 # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
 # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
 CONFIG_REGULATOR_AS3722=m
+CONFIG_REGULATOR_HI6421=m
+CONFIG_REGULATOR_PWM=m
+CONFIG_REGULATOR_RK808=m
 CONFIG_REGULATOR_TPS65218=m
 CONFIG_REGULATOR_VEXPRESS=m
 
 CONFIG_REGULATOR_TPS65218=m
 CONFIG_REGULATOR_VEXPRESS=m
 
@@ -679,7 +669,6 @@ CONFIG_SND_COMPRESS_OFFLOAD=m
 # HD-Audio
 #
 CONFIG_SND_ARM=y
 # HD-Audio
 #
 CONFIG_SND_ARM=y
-CONFIG_SND_ARMAACI=m
 CONFIG_SND_SOC=m
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 CONFIG_SND_ATMEL_SOC=m
 CONFIG_SND_SOC=m
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
 CONFIG_SND_ATMEL_SOC=m
@@ -704,8 +693,10 @@ CONFIG_SND_SOC_IMX_SSI=m
 #
 CONFIG_SND_SOC_EUKREA_TLV320=m
 CONFIG_SND_SOC_IMX_WM8962=m
 #
 CONFIG_SND_SOC_EUKREA_TLV320=m
 CONFIG_SND_SOC_IMX_WM8962=m
+CONFIG_SND_SOC_IMX_ES8328=m
 CONFIG_SND_SOC_IMX_SGTL5000=m
 CONFIG_SND_SOC_IMX_SPDIF=m
 CONFIG_SND_SOC_IMX_SGTL5000=m
 CONFIG_SND_SOC_IMX_SPDIF=m
+CONFIG_SND_SOC_FSL_ASOC_CARD=m
 
 #
 # SoC Audio support for SuperH
 
 #
 # SoC Audio support for SuperH
@@ -720,6 +711,7 @@ CONFIG_SND_SOC_AK4554=m
 CONFIG_SND_SOC_AK4642=m
 CONFIG_SND_SOC_AK5386=m
 CONFIG_SND_SOC_ALC5623=m
 CONFIG_SND_SOC_AK4642=m
 CONFIG_SND_SOC_AK5386=m
 CONFIG_SND_SOC_ALC5623=m
+CONFIG_SND_SOC_CS35L32=m
 CONFIG_SND_SOC_CS42L52=m
 CONFIG_SND_SOC_CS42L56=m
 CONFIG_SND_SOC_CS42L73=m
 CONFIG_SND_SOC_CS42L52=m
 CONFIG_SND_SOC_CS42L56=m
 CONFIG_SND_SOC_CS42L73=m
@@ -729,6 +721,8 @@ CONFIG_SND_SOC_CS4271=m
 CONFIG_SND_SOC_CS42XX8=m
 CONFIG_SND_SOC_CS42XX8_I2C=m
 CONFIG_SND_SOC_HDMI_CODEC=m
 CONFIG_SND_SOC_CS42XX8=m
 CONFIG_SND_SOC_CS42XX8_I2C=m
 CONFIG_SND_SOC_HDMI_CODEC=m
+CONFIG_SND_SOC_ES8328=m
+CONFIG_SND_SOC_ES8328_I2C=m
 CONFIG_SND_SOC_PCM1681=m
 CONFIG_SND_SOC_PCM512x=m
 CONFIG_SND_SOC_PCM512x_I2C=m
 CONFIG_SND_SOC_PCM1681=m
 CONFIG_SND_SOC_PCM512x=m
 CONFIG_SND_SOC_PCM512x_I2C=m
@@ -737,6 +731,9 @@ CONFIG_SND_SOC_SIGMADSP=m
 CONFIG_SND_SOC_SIGMADSP_I2C=m
 CONFIG_SND_SOC_SIRF_AUDIO_CODEC=m
 CONFIG_SND_SOC_SPDIF=m
 CONFIG_SND_SOC_SIGMADSP_I2C=m
 CONFIG_SND_SOC_SIRF_AUDIO_CODEC=m
 CONFIG_SND_SOC_SPDIF=m
+CONFIG_SND_SOC_SSM2602=m
+CONFIG_SND_SOC_SSM2602_I2C=m
+CONFIG_SND_SOC_SSM4567=m
 CONFIG_SND_SOC_STA350=m
 CONFIG_SND_SOC_TAS2552=m
 CONFIG_SND_SOC_TAS5086=m
 CONFIG_SND_SOC_STA350=m
 CONFIG_SND_SOC_TAS2552=m
 CONFIG_SND_SOC_TAS5086=m
@@ -758,6 +755,7 @@ CONFIG_SND_SOC_WM8776=m
 CONFIG_SND_SOC_WM8804=m
 CONFIG_SND_SOC_WM8903=m
 CONFIG_SND_SOC_WM8962=m
 CONFIG_SND_SOC_WM8804=m
 CONFIG_SND_SOC_WM8903=m
 CONFIG_SND_SOC_WM8962=m
+CONFIG_SND_SOC_WM8978=m
 CONFIG_SND_SOC_TPA6130A2=m
 CONFIG_SND_SIMPLE_CARD=m
 
 CONFIG_SND_SOC_TPA6130A2=m
 CONFIG_SND_SIMPLE_CARD=m
 
@@ -778,7 +776,6 @@ CONFIG_USB_ULPI=y
 #
 # MMC/SD/SDIO Host Controller Drivers
 #
 #
 # MMC/SD/SDIO Host Controller Drivers
 #
-CONFIG_MMC_ARMMMCI=m
 CONFIG_MMC_SDHCI_IO_ACCESSORS=y
 CONFIG_MMC_SDHCI_OF_ARASAN=m
 CONFIG_MMC_SDHCI_ESDHC_IMX=m
 CONFIG_MMC_SDHCI_IO_ACCESSORS=y
 CONFIG_MMC_SDHCI_OF_ARASAN=m
 CONFIG_MMC_SDHCI_ESDHC_IMX=m
@@ -790,6 +787,11 @@ CONFIG_MMC_DW_EXYNOS=m
 CONFIG_MMC_DW_K3=m
 CONFIG_MMC_DW_PCI=m
 
 CONFIG_MMC_DW_K3=m
 CONFIG_MMC_DW_PCI=m
 
+#
+# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
+#
+CONFIG_LEDS_SYSCON=y
+
 #
 # iptables trigger is under Netfilter config (LED target)
 #
 #
 # iptables trigger is under Netfilter config (LED target)
 #
@@ -800,13 +802,12 @@ CONFIG_MMC_DW_PCI=m
 #
 CONFIG_RTC_DRV_AS3722=m
 CONFIG_RTC_DRV_HYM8563=m
 #
 CONFIG_RTC_DRV_AS3722=m
 CONFIG_RTC_DRV_HYM8563=m
+CONFIG_RTC_DRV_RK808=m
 
 #
 # on-CPU RTC drivers
 #
 CONFIG_RTC_DRV_IMXDI=m
 
 #
 # on-CPU RTC drivers
 #
 CONFIG_RTC_DRV_IMXDI=m
-CONFIG_RTC_DRV_PL030=m
-CONFIG_RTC_DRV_PL031=m
 CONFIG_RTC_DRV_PM8XXX=m
 CONFIG_RTC_DRV_MXC=m
 CONFIG_RTC_DRV_SNVS=m
 CONFIG_RTC_DRV_PM8XXX=m
 CONFIG_RTC_DRV_MXC=m
 CONFIG_RTC_DRV_SNVS=m
@@ -819,11 +820,13 @@ CONFIG_MX3_IPU=y
 CONFIG_MX3_IPU_IRQS=4
 CONFIG_FSL_EDMA=m
 CONFIG_NBPFAXI_DMA=m
 CONFIG_MX3_IPU_IRQS=4
 CONFIG_FSL_EDMA=m
 CONFIG_NBPFAXI_DMA=m
+CONFIG_DMA_VIRTUAL_CHANNELS=m
 CONFIG_DMA_OF=y
 
 #
 # Common Clock Framework
 #
 CONFIG_DMA_OF=y
 
 #
 # Common Clock Framework
 #
+CONFIG_COMMON_CLK_RK808=m
 CONFIG_COMMON_CLK_SI570=m
 CONFIG_COMMON_CLK_QCOM=m
 CONFIG_APQ_GCC_8084=m
 CONFIG_COMMON_CLK_SI570=m
 CONFIG_COMMON_CLK_QCOM=m
 CONFIG_APQ_GCC_8084=m
@@ -848,13 +851,17 @@ CONFIG_OF_IOMMU=y
 #
 CONFIG_VF610_ADC=m
 
 #
 CONFIG_VF610_ADC=m
 
+#
+# Digital to analog converters
+#
+CONFIG_MAX5821=m
+
 #
 # Temperature sensors
 #
 CONFIG_PWM=y
 CONFIG_PWM_SYSFS=y
 CONFIG_IRQCHIP=y
 #
 # Temperature sensors
 #
 CONFIG_PWM=y
 CONFIG_PWM_SYSFS=y
 CONFIG_IRQCHIP=y
-CONFIG_ARM_GIC=y
 
 #
 # Memory Debugging
 
 #
 # Memory Debugging
@@ -871,15 +878,12 @@ CONFIG_ARM_GIC=y
 #
 # CONFIG_ARM_PTDUMP is not set
 CONFIG_ARM_UNWIND=y
 #
 # CONFIG_ARM_PTDUMP is not set
 CONFIG_ARM_UNWIND=y
-CONFIG_OLD_MCOUNT=y
 # CONFIG_DEBUG_USER is not set
 # CONFIG_DEBUG_LL is not set
 CONFIG_DEBUG_IMX_UART_PORT=1
 # CONFIG_DEBUG_USER is not set
 # CONFIG_DEBUG_LL is not set
 CONFIG_DEBUG_IMX_UART_PORT=1
-CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
 # CONFIG_DEBUG_UART_PL01X is not set
 # CONFIG_DEBUG_UART_8250 is not set
 CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
 # CONFIG_DEBUG_UART_PL01X is not set
 # CONFIG_DEBUG_UART_8250 is not set
 CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
-# CONFIG_OC_ETM is not set
 # CONFIG_DEBUG_SET_MODULE_RONX is not set
 
 #
 # CONFIG_DEBUG_SET_MODULE_RONX is not set
 
 #
index 081090b6c8dd9150b98b3a219d7448c0aff9d4b5..da3b39e7573a49b6028607ce172bca5660307870 100644 (file)
@@ -46,12 +46,9 @@ CONFIG_MACH_NETXBIG=y
 # MX27 platforms:
 #
 # CONFIG_MACH_MX27ADS is not set
 # MX27 platforms:
 #
 # CONFIG_MACH_MX27ADS is not set
-# CONFIG_MACH_PCM038 is not set
-# CONFIG_MACH_CPUIMX27 is not set
 # CONFIG_MACH_MX27_3DS is not set
 # CONFIG_MACH_IMX27_VISSTRIM_M10 is not set
 # CONFIG_MACH_PCA100 is not set
 # CONFIG_MACH_MX27_3DS is not set
 # CONFIG_MACH_IMX27_VISSTRIM_M10 is not set
 # CONFIG_MACH_PCA100 is not set
-# CONFIG_MACH_MXT_TD60 is not set
 # CONFIG_MACH_IMX27_DT is not set
 # CONFIG_ARCH_MXS is not set
 # CONFIG_ARCH_NOMADIK is not set
 # CONFIG_MACH_IMX27_DT is not set
 # CONFIG_ARCH_MXS is not set
 # CONFIG_ARCH_NOMADIK is not set
@@ -100,6 +97,7 @@ CONFIG_HZ_300=y
 # CONFIG_HZ_500 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=300
 # CONFIG_HZ_500 is not set
 # CONFIG_HZ_1000 is not set
 CONFIG_HZ=300
+# CONFIG_OABI_COMPAT is not set
 CONFIG_SPLIT_PTLOCK_CPUS=999999
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_FORCE_MAX_ZONEORDER=11
 CONFIG_SPLIT_PTLOCK_CPUS=999999
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_FORCE_MAX_ZONEORDER=11
@@ -173,16 +171,6 @@ CONFIG_INPUT_MATRIXKMAP=m
 #
 CONFIG_KEYBOARD_SAMSUNG=m
 
 #
 CONFIG_KEYBOARD_SAMSUNG=m
 
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO_AMBAKMI=m
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-CONFIG_I2C_NOMADIK=m
-
 #
 # PPS support
 #
 #
 # PPS support
 #
@@ -204,7 +192,6 @@ CONFIG_PINCTRL_KIRKWOOD=y
 # Memory mapped GPIO drivers:
 #
 CONFIG_GPIO_MVEBU=y
 # Memory mapped GPIO drivers:
 #
 CONFIG_GPIO_MVEBU=y
-# CONFIG_GPIO_PL061 is not set
 
 #
 # 1-wire Bus Masters
 
 #
 # 1-wire Bus Masters
@@ -286,8 +273,6 @@ CONFIG_FB_MODE_HELPERS=y
 #
 # Frame buffer hardware drivers
 #
 #
 # Frame buffer hardware drivers
 #
-CONFIG_FB_ARMCLCD=m
-# CONFIG_PLAT_VERSATILE_CLCD is not set
 CONFIG_FB_IMX=m
 CONFIG_FB_MX3=m
 CONFIG_LCD_PLATFORM=m
 CONFIG_FB_IMX=m
 CONFIG_FB_MX3=m
 CONFIG_LCD_PLATFORM=m
@@ -351,13 +336,10 @@ CONFIG_RTC_DRV_MV=m
 # DMA Devices
 #
 CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
 # DMA Devices
 #
 CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y
-CONFIG_AMBA_PL08X=y
 CONFIG_DW_DMAC_PCI=m
 CONFIG_MV_XOR=y
 CONFIG_DW_DMAC_PCI=m
 CONFIG_MV_XOR=y
-CONFIG_PL330_DMA=m
 CONFIG_IMX_SDMA=m
 CONFIG_IMX_DMA=m
 CONFIG_IMX_SDMA=m
 CONFIG_IMX_DMA=m
-CONFIG_DMA_VIRTUAL_CHANNELS=y
 
 #
 # DMA Clients
 
 #
 # DMA Clients
@@ -398,10 +380,9 @@ CONFIG_KIRKWOOD_CLK=y
 #
 CONFIG_ORION_TIMER=y
 # CONFIG_SH_TIMER_TMU is not set
 #
 CONFIG_ORION_TIMER=y
 # CONFIG_SH_TIMER_TMU is not set
-# CONFIG_PL320_MBOX is not set
 
 #
 
 #
-# Rpmsg drivers
+# DEVFREQ Drivers
 #
 CONFIG_MVEBU_DEVBUS=y
 
 #
 CONFIG_MVEBU_DEVBUS=y
 
@@ -430,6 +411,23 @@ CONFIG_PHY_MVEBU_SATA=y
 # CONFIG_PHY_EXYNOS4X12_USB2 is not set
 # CONFIG_PHY_EXYNOS5250_USB2 is not set
 
 # CONFIG_PHY_EXYNOS4X12_USB2 is not set
 # CONFIG_PHY_EXYNOS5250_USB2 is not set
 
+#
+# Compile-time checks and compiler options
+#
+CONFIG_FRAME_POINTER=y
+
+#
+# RCU Debugging
+#
+CONFIG_FUNCTION_GRAPH_TRACER=y
+
+#
+# Runtime Testing
+#
+CONFIG_OLD_MCOUNT=y
+CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
+# CONFIG_DEBUG_UART_BCM63XX is not set
+
 #
 # Random Number Generation
 #
 #
 # Random Number Generation
 #
index f1c0b366feb745789ec8ea36272d8ae25efd3d94..6c38fcd941852ad0aded3db119fd0eb78e12b147 100644 (file)
@@ -35,6 +35,7 @@ CONFIG_RCU_FANOUT_LEAF=16
 # CONFIG_RCU_FANOUT_EXACT is not set
 # CONFIG_RCU_FAST_NO_HZ is not set
 # CONFIG_RCU_NOCB_CPU is not set
 # CONFIG_RCU_FANOUT_EXACT is not set
 # CONFIG_RCU_FAST_NO_HZ is not set
 # CONFIG_RCU_NOCB_CPU is not set
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 
 #
 # Kernel Performance Events And Counters
 
 #
 # Kernel Performance Events And Counters
@@ -58,19 +59,24 @@ CONFIG_ARCH_VIRT=y
 CONFIG_ARCH_BCM=y
 # CONFIG_ARCH_BCM_MOBILE is not set
 CONFIG_ARCH_BCM_5301X=y
 CONFIG_ARCH_BCM=y
 # CONFIG_ARCH_BCM_MOBILE is not set
 CONFIG_ARCH_BCM_5301X=y
+CONFIG_ARCH_BCM_63XX=y
 CONFIG_ARCH_BRCMSTB=y
 CONFIG_ARCH_BERLIN=y
 # CONFIG_MACH_BERLIN_BG2 is not set
 # CONFIG_MACH_BERLIN_BG2CD is not set
 # CONFIG_MACH_BERLIN_BG2Q is not set
 CONFIG_ARCH_HIGHBANK=y
 CONFIG_ARCH_BRCMSTB=y
 CONFIG_ARCH_BERLIN=y
 # CONFIG_MACH_BERLIN_BG2 is not set
 # CONFIG_MACH_BERLIN_BG2CD is not set
 # CONFIG_MACH_BERLIN_BG2Q is not set
 CONFIG_ARCH_HIGHBANK=y
+CONFIG_ARCH_HISI=y
 
 #
 # Hisilicon platform type
 #
 CONFIG_ARCH_HI3xxx=y
 
 #
 # Hisilicon platform type
 #
 CONFIG_ARCH_HI3xxx=y
+CONFIG_ARCH_HIP04=y
 CONFIG_ARCH_HIX5HD2=y
 CONFIG_ARCH_KEYSTONE=y
 CONFIG_ARCH_HIX5HD2=y
 CONFIG_ARCH_KEYSTONE=y
+CONFIG_ARCH_MESON=y
+CONFIG_MACH_MESON6=y
 
 #
 # Device tree only
 
 #
 # Device tree only
@@ -186,12 +192,16 @@ CONFIG_S5P_DEV_MFC=y
 #
 # CONFIG_SAMSUNG_PM_CHECK is not set
 CONFIG_ARCH_SHMOBILE=y
 #
 # CONFIG_SAMSUNG_PM_CHECK is not set
 CONFIG_ARCH_SHMOBILE=y
+CONFIG_PM_RCAR=y
+CONFIG_ARCH_RCAR_GEN1=y
 CONFIG_ARCH_SHMOBILE_MULTI=y
 # CONFIG_ARCH_EMEV2 is not set
 # CONFIG_ARCH_R7S72100 is not set
 CONFIG_ARCH_SHMOBILE_MULTI=y
 # CONFIG_ARCH_EMEV2 is not set
 # CONFIG_ARCH_R7S72100 is not set
+# CONFIG_ARCH_R8A7740 is not set
 CONFIG_ARCH_R8A7779=y
 # CONFIG_ARCH_R8A7790 is not set
 # CONFIG_ARCH_R8A7791 is not set
 CONFIG_ARCH_R8A7779=y
 # CONFIG_ARCH_R8A7790 is not set
 # CONFIG_ARCH_R8A7791 is not set
+# CONFIG_ARCH_R8A7794 is not set
 
 #
 # Renesas ARM SoCs Board Type
 
 #
 # Renesas ARM SoCs Board Type
@@ -241,6 +251,7 @@ CONFIG_ARCH_VT8500=y
 CONFIG_ARCH_WM8850=y
 CONFIG_ARCH_ZYNQ=y
 CONFIG_PLAT_VERSATILE=y
 CONFIG_ARCH_WM8850=y
 CONFIG_ARCH_ZYNQ=y
 CONFIG_PLAT_VERSATILE=y
+CONFIG_ARM_TIMER_SP804=y
 CONFIG_ARCH_SUPPORTS_FIRMWARE=y
 CONFIG_ARCH_SUPPORTS_TRUSTED_FOUNDATIONS=y
 
 CONFIG_ARCH_SUPPORTS_FIRMWARE=y
 CONFIG_ARCH_SUPPORTS_TRUSTED_FOUNDATIONS=y
 
@@ -298,6 +309,7 @@ CONFIG_TI_PRIV_EDMA=y
 #
 # Bus support
 #
 #
 # Bus support
 #
+CONFIG_ARM_AMBA=y
 CONFIG_PCI_DOMAINS=y
 
 #
 CONFIG_PCI_DOMAINS=y
 
 #
@@ -309,6 +321,8 @@ CONFIG_PCI_IMX6=y
 CONFIG_PCI_TEGRA=y
 CONFIG_PCI_RCAR_GEN2=y
 CONFIG_PCI_RCAR_GEN2_PCIE=y
 CONFIG_PCI_TEGRA=y
 CONFIG_PCI_RCAR_GEN2=y
 CONFIG_PCI_RCAR_GEN2_PCIE=y
+CONFIG_PCI_KEYSTONE=y
+CONFIG_PCIE_XILINX=y
 CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEAER=y
 # CONFIG_PCIE_ECRC is not set
 CONFIG_PCIEPORTBUS=y
 CONFIG_PCIEAER=y
 # CONFIG_PCIE_ECRC is not set
@@ -329,6 +343,7 @@ CONFIG_ARM_CPU_TOPOLOGY=y
 # CONFIG_SCHED_MC is not set
 # CONFIG_SCHED_SMT is not set
 CONFIG_MCPM=y
 # CONFIG_SCHED_MC is not set
 # CONFIG_SCHED_SMT is not set
 CONFIG_MCPM=y
+CONFIG_MCPM_QUAD_CLUSTER=y
 CONFIG_BIG_LITTLE=y
 # CONFIG_BL_SWITCHER is not set
 CONFIG_NR_CPUS=4
 CONFIG_BIG_LITTLE=y
 # CONFIG_BL_SWITCHER is not set
 CONFIG_NR_CPUS=4
@@ -338,6 +353,8 @@ CONFIG_ARCH_NR_GPIO=1024
 CONFIG_HZ_FIXED=200
 CONFIG_HZ=200
 CONFIG_THUMB2_KERNEL=y
 CONFIG_HZ_FIXED=200
 CONFIG_HZ=200
 CONFIG_THUMB2_KERNEL=y
+CONFIG_THUMB2_AVOID_R_ARM_THM_JUMP11=y
+CONFIG_ARM_ASM_UNIFIED=y
 CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_MMU_NOTIFIER=y
 CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
 CONFIG_SPLIT_PTLOCK_CPUS=4
 CONFIG_MMU_NOTIFIER=y
@@ -364,6 +381,7 @@ CONFIG_ARM_EXYNOS4X12_CPUFREQ=y
 CONFIG_ARM_EXYNOS5250_CPUFREQ=y
 CONFIG_ARM_EXYNOS5440_CPUFREQ=y
 # CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW is not set
 CONFIG_ARM_EXYNOS5250_CPUFREQ=y
 CONFIG_ARM_EXYNOS5440_CPUFREQ=y
 # CONFIG_ARM_EXYNOS_CPU_FREQ_BOOST_SW is not set
+CONFIG_ARM_HIGHBANK_CPUFREQ=m
 # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
 CONFIG_ARM_OMAP2PLUS_CPUFREQ=y
 CONFIG_ARM_TEGRA_CPUFREQ=y
 # CONFIG_ARM_KIRKWOOD_CPUFREQ is not set
 CONFIG_ARM_OMAP2PLUS_CPUFREQ=y
 CONFIG_ARM_TEGRA_CPUFREQ=y
@@ -392,6 +410,7 @@ CONFIG_PM_SLEEP_SMP=y
 CONFIG_PM_GENERIC_DOMAINS=y
 CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
 CONFIG_PM_GENERIC_DOMAINS_RUNTIME=y
 CONFIG_PM_GENERIC_DOMAINS=y
 CONFIG_PM_GENERIC_DOMAINS_SLEEP=y
 CONFIG_PM_GENERIC_DOMAINS_RUNTIME=y
+CONFIG_PM_GENERIC_DOMAINS_OF=y
 
 #
 # Classification
 
 #
 # Classification
@@ -405,6 +424,7 @@ CONFIG_NET_FLOW_LIMIT=y
 # Generic Driver Options
 #
 CONFIG_SYS_HYPERVISOR=y
 # Generic Driver Options
 #
 CONFIG_SYS_HYPERVISOR=y
+CONFIG_REGMAP_SPMI=m
 
 #
 # Bus devices
 
 #
 # Bus devices
@@ -431,6 +451,11 @@ CONFIG_VIRTIO_BLK=m
 #
 # CONFIG_EEPROM_SUNXI_SID is not set
 
 #
 # CONFIG_EEPROM_SUNXI_SID is not set
 
+#
+# SCSI Transports
+#
+CONFIG_XEN_SCSI_FRONTEND=m
+
 #
 # Controllers with non-SFF native interface
 #
 #
 # Controllers with non-SFF native interface
 #
@@ -451,7 +476,9 @@ CONFIG_NET_VENDOR_ALLWINNER=y
 CONFIG_SUN4I_EMAC=m
 # CONFIG_MACB is not set
 CONFIG_NET_CALXEDA_XGMAC=m
 CONFIG_SUN4I_EMAC=m
 # CONFIG_MACB is not set
 CONFIG_NET_CALXEDA_XGMAC=m
+CONFIG_PXA168_ETH=m
 CONFIG_SH_ETH=m
 CONFIG_SH_ETH=m
+CONFIG_DWMAC_MESON=y
 CONFIG_DWMAC_SUNXI=y
 CONFIG_DWMAC_STI=y
 CONFIG_TI_DAVINCI_EMAC=m
 CONFIG_DWMAC_SUNXI=y
 CONFIG_DWMAC_STI=y
 CONFIG_TI_DAVINCI_EMAC=m
@@ -497,9 +524,17 @@ CONFIG_INPUT_SIRFSOC_ONKEY=y
 #
 # CONFIG_SERIO_AMBAKMI is not set
 
 #
 # CONFIG_SERIO_AMBAKMI is not set
 
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250_MT6577=y
+
 #
 # Non-8250 serial port support
 #
 #
 # Non-8250 serial port support
 #
+CONFIG_SERIAL_AMBA_PL010=m
+CONFIG_SERIAL_AMBA_PL011=m
+CONFIG_SERIAL_MESON=m
 CONFIG_SERIAL_SAMSUNG=m
 CONFIG_SERIAL_SAMSUNG_UARTS_4=y
 CONFIG_SERIAL_SAMSUNG_UARTS=4
 CONFIG_SERIAL_SAMSUNG=m
 CONFIG_SERIAL_SAMSUNG_UARTS_4=y
 CONFIG_SERIAL_SAMSUNG_UARTS=4
@@ -519,6 +554,11 @@ CONFIG_HW_RANDOM_OMAP3_ROM=y
 CONFIG_HW_RANDOM_EXYNOS=y
 CONFIG_HW_RANDOM_MSM=m
 
 CONFIG_HW_RANDOM_EXYNOS=y
 CONFIG_HW_RANDOM_MSM=m
 
+#
+# PC SMBus host controller drivers
+#
+CONFIG_I2C_HIX5HD2=m
+
 #
 # I2C system bus drivers (mostly embedded / system-on-chip)
 #
 #
 # I2C system bus drivers (mostly embedded / system-on-chip)
 #
@@ -564,11 +604,6 @@ CONFIG_PTP_1588_CLOCK=y
 # Pin controllers
 #
 CONFIG_GENERIC_PINCONF=y
 # Pin controllers
 #
 CONFIG_GENERIC_PINCONF=y
-CONFIG_PINCTRL_IMX=y
-CONFIG_PINCTRL_IMX6Q=y
-CONFIG_PINCTRL_IMX6SL=y
-CONFIG_PINCTRL_IMX6SX=y
-CONFIG_PINCTRL_VF610=y
 CONFIG_PINCTRL_ROCKCHIP=y
 CONFIG_PINCTRL_SINGLE=y
 CONFIG_PINCTRL_SIRF=y
 CONFIG_PINCTRL_ROCKCHIP=y
 CONFIG_PINCTRL_SINGLE=y
 CONFIG_PINCTRL_SIRF=y
@@ -579,6 +614,11 @@ CONFIG_PINCTRL_TEGRA30=y
 CONFIG_PINCTRL_TEGRA114=y
 CONFIG_PINCTRL_TEGRA124=y
 CONFIG_PINCTRL_TEGRA_XUSB=y
 CONFIG_PINCTRL_TEGRA114=y
 CONFIG_PINCTRL_TEGRA124=y
 CONFIG_PINCTRL_TEGRA_XUSB=y
+CONFIG_PINCTRL_IMX=y
+CONFIG_PINCTRL_IMX6Q=y
+CONFIG_PINCTRL_IMX6SL=y
+CONFIG_PINCTRL_IMX6SX=y
+CONFIG_PINCTRL_VF610=y
 CONFIG_PINCTRL_ABX500=y
 CONFIG_PINCTRL_AB8500=y
 CONFIG_PINCTRL_AB8540=y
 CONFIG_PINCTRL_ABX500=y
 CONFIG_PINCTRL_AB8500=y
 CONFIG_PINCTRL_AB8540=y
@@ -589,6 +629,7 @@ CONFIG_PINCTRL_DB8500=y
 CONFIG_PINCTRL_DB8540=y
 CONFIG_PINCTRL_MSM=y
 CONFIG_PINCTRL_APQ8064=y
 CONFIG_PINCTRL_DB8540=y
 CONFIG_PINCTRL_MSM=y
 CONFIG_PINCTRL_APQ8064=y
+CONFIG_PINCTRL_APQ8084=y
 CONFIG_PINCTRL_IPQ8064=y
 CONFIG_PINCTRL_MSM8960=m
 CONFIG_PINCTRL_MSM8X74=m
 CONFIG_PINCTRL_IPQ8064=y
 CONFIG_PINCTRL_MSM8960=m
 CONFIG_PINCTRL_MSM8X74=m
@@ -630,9 +671,12 @@ CONFIG_GPIO_ZYNQ=m
 # 1-wire Slaves
 #
 CONFIG_POWER_RESET_BRCMSTB=y
 # 1-wire Slaves
 #
 CONFIG_POWER_RESET_BRCMSTB=y
+CONFIG_POWER_RESET_HISI=y
 # CONFIG_POWER_RESET_MSM is not set
 CONFIG_POWER_RESET_SUN6I=y
 # CONFIG_POWER_RESET_MSM is not set
 CONFIG_POWER_RESET_SUN6I=y
+CONFIG_POWER_RESET_ST=y
 CONFIG_POWER_RESET_KEYSTONE=y
 CONFIG_POWER_RESET_KEYSTONE=y
+# CONFIG_ROCKCHIP_IODOMAIN is not set
 
 #
 # Native drivers
 
 #
 # Native drivers
@@ -661,6 +705,7 @@ CONFIG_ST_THERMAL_MEMMAP=m
 #
 # Watchdog Device Drivers
 #
 #
 # Watchdog Device Drivers
 #
+CONFIG_ARM_SP805_WATCHDOG=m
 CONFIG_S3C2410_WATCHDOG=m
 CONFIG_OMAP_WATCHDOG=m
 CONFIG_DAVINCI_WATCHDOG=m
 CONFIG_S3C2410_WATCHDOG=m
 CONFIG_OMAP_WATCHDOG=m
 CONFIG_DAVINCI_WATCHDOG=m
@@ -668,6 +713,8 @@ CONFIG_SUNXI_WATCHDOG=m
 CONFIG_UX500_WATCHDOG=y
 CONFIG_SIRFSOC_WATCHDOG=y
 CONFIG_TEGRA_WATCHDOG=m
 CONFIG_UX500_WATCHDOG=y
 CONFIG_SIRFSOC_WATCHDOG=y
 CONFIG_TEGRA_WATCHDOG=m
+CONFIG_QCOM_WDT=m
+CONFIG_MESON_WATCHDOG=m
 # CONFIG_XEN_WDT is not set
 
 #
 # CONFIG_XEN_WDT is not set
 
 #
@@ -678,6 +725,7 @@ CONFIG_TEGRA_WATCHDOG=m
 #
 # Multifunction device drivers
 #
 #
 # Multifunction device drivers
 #
+CONFIG_MFD_SPMI_PMIC=m
 CONFIG_ABX500_CORE=y
 # CONFIG_AB3100_CORE is not set
 CONFIG_AB8500_CORE=y
 CONFIG_ABX500_CORE=y
 # CONFIG_AB3100_CORE is not set
 CONFIG_AB8500_CORE=y
@@ -697,7 +745,6 @@ CONFIG_REGULATOR_GPIO=y
 CONFIG_REGULATOR_LP872X=y
 CONFIG_REGULATOR_LP8788=y
 CONFIG_REGULATOR_PBIAS=m
 CONFIG_REGULATOR_LP872X=y
 CONFIG_REGULATOR_LP8788=y
 CONFIG_REGULATOR_PBIAS=m
-CONFIG_REGULATOR_ST_PWM=m
 CONFIG_REGULATOR_TI_ABB=m
 CONFIG_REGULATOR_TWL4030=y
 
 CONFIG_REGULATOR_TI_ABB=m
 CONFIG_REGULATOR_TWL4030=y
 
@@ -711,7 +758,6 @@ CONFIG_IR_SUNXI=m
 # Media digital TV PCI Adapters
 #
 # CONFIG_VIDEO_CAFE_CCIC is not set
 # Media digital TV PCI Adapters
 #
 # CONFIG_VIDEO_CAFE_CCIC is not set
-# CONFIG_VIDEO_DM6446_CCDC is not set
 # CONFIG_VIDEO_OMAP2_VOUT is not set
 # CONFIG_VIDEO_SH_VOU is not set
 CONFIG_VIDEO_OMAP3=m
 # CONFIG_VIDEO_OMAP2_VOUT is not set
 # CONFIG_VIDEO_SH_VOU is not set
 CONFIG_VIDEO_OMAP3=m
@@ -725,6 +771,7 @@ CONFIG_VIDEO_SAMSUNG_S5P_G2D=m
 CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
 CONFIG_VIDEO_SAMSUNG_S5P_MFC=m
 CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
 CONFIG_VIDEO_SAMSUNG_S5P_JPEG=m
 CONFIG_VIDEO_SAMSUNG_S5P_MFC=m
 CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=m
+CONFIG_VIDEO_RENESAS_VSP1=m
 # CONFIG_VIDEO_TI_VPE is not set
 
 #
 # CONFIG_VIDEO_TI_VPE is not set
 
 #
@@ -793,6 +840,7 @@ CONFIG_EXYNOS_VIDEO=y
 # HD-Audio
 #
 CONFIG_SND_HDA_TEGRA=m
 # HD-Audio
 #
 CONFIG_SND_HDA_TEGRA=m
+CONFIG_SND_ARMAACI=m
 # CONFIG_SND_SOC_ADI is not set
 CONFIG_SND_EDMA_SOC=m
 CONFIG_SND_DAVINCI_SOC_MCASP=m
 # CONFIG_SND_SOC_ADI is not set
 CONFIG_SND_EDMA_SOC=m
 CONFIG_SND_DAVINCI_SOC_MCASP=m
@@ -803,7 +851,6 @@ CONFIG_SND_AM33XX_SOC_EVM=m
 # SoC Audio support for Freescale i.MX boards:
 #
 CONFIG_SND_SOC_ROCKCHIP=m
 # SoC Audio support for Freescale i.MX boards:
 #
 CONFIG_SND_SOC_ROCKCHIP=m
-CONFIG_SND_ROCKCHIP_I2S=m
 CONFIG_SND_SOC_SAMSUNG=m
 CONFIG_SND_SAMSUNG_PCM=m
 CONFIG_SND_SAMSUNG_SPDIF=m
 CONFIG_SND_SOC_SAMSUNG=m
 CONFIG_SND_SAMSUNG_PCM=m
 CONFIG_SND_SAMSUNG_SPDIF=m
@@ -840,9 +887,11 @@ CONFIG_SND_SOC_WM8994=m
 CONFIG_USB_XHCI_RCAR=m
 CONFIG_USB_EHCI_MXC=y
 CONFIG_USB_EHCI_HCD_OMAP=y
 CONFIG_USB_XHCI_RCAR=m
 CONFIG_USB_EHCI_MXC=y
 CONFIG_USB_EHCI_HCD_OMAP=y
+CONFIG_USB_EHCI_HCD_STI=m
 CONFIG_USB_EHCI_MSM=y
 CONFIG_USB_EHCI_TEGRA=y
 CONFIG_USB_EHCI_EXYNOS=y
 CONFIG_USB_EHCI_MSM=y
 CONFIG_USB_EHCI_TEGRA=y
 CONFIG_USB_EHCI_EXYNOS=y
+CONFIG_USB_OHCI_HCD_STI=m
 CONFIG_USB_OHCI_HCD_OMAP3=y
 CONFIG_USB_OHCI_EXYNOS=y
 CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC=y
 CONFIG_USB_OHCI_HCD_OMAP3=y
 CONFIG_USB_OHCI_EXYNOS=y
 CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC=y
@@ -863,6 +912,8 @@ CONFIG_USB_MUSB_AM35X=m
 #
 CONFIG_USB_DWC3_EXYNOS=m
 CONFIG_USB_DWC3_KEYSTONE=m
 #
 CONFIG_USB_DWC3_EXYNOS=m
 CONFIG_USB_DWC3_KEYSTONE=m
+CONFIG_USB_DWC3_ST=m
+CONFIG_USB_DWC3_QCOM=m
 
 #
 # USB Physical Layer drivers
 
 #
 # USB Physical Layer drivers
@@ -883,6 +934,7 @@ CONFIG_MMC_BLOCK=y
 #
 # MMC/SD/SDIO Host Controller Drivers
 #
 #
 # MMC/SD/SDIO Host Controller Drivers
 #
+CONFIG_MMC_ARMMMCI=m
 # CONFIG_MMC_RICOH_MMC is not set
 CONFIG_MMC_SDHCI_TEGRA=m
 CONFIG_MMC_SDHCI_S3C=m
 # CONFIG_MMC_RICOH_MMC is not set
 CONFIG_MMC_SDHCI_TEGRA=m
 CONFIG_MMC_SDHCI_S3C=m
@@ -894,6 +946,7 @@ CONFIG_MMC_OMAP_HS=m
 CONFIG_MMC_SDHCI_MSM=m
 CONFIG_MMC_TMIO_CORE=m
 CONFIG_MMC_SDHI=m
 CONFIG_MMC_SDHCI_MSM=m
 CONFIG_MMC_TMIO_CORE=m
 CONFIG_MMC_SDHI=m
+CONFIG_MMC_DW_ROCKCHIP=m
 CONFIG_MMC_SH_MMCIF=m
 CONFIG_MMC_WMT=y
 CONFIG_MMC_SUNXI=m
 CONFIG_MMC_SH_MMCIF=m
 CONFIG_MMC_WMT=y
 CONFIG_MMC_SUNXI=m
@@ -913,7 +966,10 @@ CONFIG_MMC_SUNXI=m
 #
 CONFIG_RTC_DRV_OMAP=m
 CONFIG_RTC_DRV_S3C=m
 #
 CONFIG_RTC_DRV_OMAP=m
 CONFIG_RTC_DRV_S3C=m
+CONFIG_RTC_DRV_PL030=m
+CONFIG_RTC_DRV_PL031=m
 # CONFIG_RTC_DRV_VT8500 is not set
 # CONFIG_RTC_DRV_VT8500 is not set
+CONFIG_RTC_DRV_SUN6I=m
 CONFIG_RTC_DRV_SUNXI=m
 CONFIG_RTC_DRV_TEGRA=m
 CONFIG_RTC_DRV_SIRFSOC=m
 CONFIG_RTC_DRV_SUNXI=m
 CONFIG_RTC_DRV_TEGRA=m
 CONFIG_RTC_DRV_SIRFSOC=m
@@ -941,7 +997,6 @@ CONFIG_SH_DMAE_BASE=y
 # CONFIG_K3_DMA is not set
 CONFIG_XILINX_VDMA=m
 CONFIG_DMA_SUN6I=m
 # CONFIG_K3_DMA is not set
 CONFIG_XILINX_VDMA=m
 CONFIG_DMA_SUN6I=m
-CONFIG_DMA_VIRTUAL_CHANNELS=m
 
 #
 # DMA Clients
 
 #
 # DMA Clients
@@ -984,12 +1039,13 @@ CONFIG_XEN_PRIVCMD=y
 # Android
 #
 # CONFIG_DRM_IMX is not set
 # Android
 #
 # CONFIG_DRM_IMX is not set
-# CONFIG_BT_NOKIA_H4P is not set
 
 #
 # SOC (System On Chip) specific Drivers
 #
 CONFIG_QCOM_GSBI=m
 
 #
 # SOC (System On Chip) specific Drivers
 #
 CONFIG_QCOM_GSBI=m
+CONFIG_KEYSTONE_NAVIGATOR_QMSS=m
+CONFIG_KEYSTONE_NAVIGATOR_DMA=m
 
 #
 # Common Clock Framework
 
 #
 # Common Clock Framework
@@ -1014,6 +1070,7 @@ CONFIG_COMMON_CLK_SAMSUNG=y
 #
 CONFIG_DW_APB_TIMER=y
 CONFIG_DW_APB_TIMER_OF=y
 #
 CONFIG_DW_APB_TIMER=y
 CONFIG_DW_APB_TIMER_OF=y
+CONFIG_MESON6_TIMER=y
 CONFIG_SUN4I_TIMER=y
 CONFIG_SUN5I_HSTIMER=y
 CONFIG_VT8500_TIMER=y
 CONFIG_SUN4I_TIMER=y
 CONFIG_SUN5I_HSTIMER=y
 CONFIG_VT8500_TIMER=y
@@ -1052,6 +1109,11 @@ CONFIG_OMAP_REMOTEPROC=m
 # Rpmsg drivers
 #
 CONFIG_RPMSG=m
 # Rpmsg drivers
 #
 CONFIG_RPMSG=m
+
+#
+# DEVFREQ Drivers
+#
+CONFIG_ARM_EXYNOS5_BUS_DEVFREQ=m
 # CONFIG_TI_AEMIF is not set
 # CONFIG_TI_EMIF is not set
 CONFIG_TEGRA20_MC=y
 # CONFIG_TI_AEMIF is not set
 # CONFIG_TI_EMIF is not set
 CONFIG_TEGRA20_MC=y
@@ -1062,6 +1124,7 @@ CONFIG_TEGRA30_MC=y
 #
 # CONFIG_EXYNOS_ADC is not set
 # CONFIG_LP8788_ADC is not set
 #
 # CONFIG_EXYNOS_ADC is not set
 # CONFIG_LP8788_ADC is not set
+CONFIG_ROCKCHIP_SARADC=m
 # CONFIG_TWL6030_GPADC is not set
 # CONFIG_XILINX_XADC is not set
 
 # CONFIG_TWL6030_GPADC is not set
 # CONFIG_XILINX_XADC is not set
 
@@ -1083,11 +1146,14 @@ CONFIG_PWM_STI=m
 # CONFIG_PWM_TWL is not set
 # CONFIG_PWM_TWL_LED is not set
 # CONFIG_PWM_VT8500 is not set
 # CONFIG_PWM_TWL is not set
 # CONFIG_PWM_TWL_LED is not set
 # CONFIG_PWM_VT8500 is not set
+CONFIG_ARM_GIC=y
 CONFIG_GIC_NON_BANKED=y
 CONFIG_BRCMSTB_L2_IRQ=y
 CONFIG_DW_APB_ICTL=y
 CONFIG_GIC_NON_BANKED=y
 CONFIG_BRCMSTB_L2_IRQ=y
 CONFIG_DW_APB_ICTL=y
+CONFIG_OMAP_IRQCHIP=y
 CONFIG_RENESAS_INTC_IRQPIN=y
 CONFIG_IRQ_CROSSBAR=y
 CONFIG_RENESAS_INTC_IRQPIN=y
 CONFIG_IRQ_CROSSBAR=y
+# CONFIG_KEYSTONE_IRQ is not set
 CONFIG_ARCH_HAS_RESET_CONTROLLER=y
 CONFIG_STI_RESET_SYSCFG=y
 CONFIG_STIH415_RESET=y
 CONFIG_ARCH_HAS_RESET_CONTROLLER=y
 CONFIG_STI_RESET_SYSCFG=y
 CONFIG_STIH415_RESET=y
@@ -1099,6 +1165,7 @@ CONFIG_STIH416_RESET=y
 CONFIG_PHY_BERLIN_SATA=m
 CONFIG_PHY_EXYNOS_MIPI_VIDEO=y
 CONFIG_PHY_MIPHY365X=m
 CONFIG_PHY_BERLIN_SATA=m
 CONFIG_PHY_EXYNOS_MIPI_VIDEO=y
 CONFIG_PHY_MIPHY365X=m
+CONFIG_PHY_RCAR_GEN2=m
 CONFIG_OMAP_CONTROL_PHY=m
 CONFIG_TWL4030_USB=m
 CONFIG_PHY_EXYNOS_DP_VIDEO=y
 CONFIG_OMAP_CONTROL_PHY=m
 CONFIG_TWL4030_USB=m
 CONFIG_PHY_EXYNOS_DP_VIDEO=y
@@ -1111,6 +1178,8 @@ CONFIG_PHY_EXYNOS5250_USB2=y
 CONFIG_PHY_EXYNOS5_USBDRD=m
 CONFIG_PHY_QCOM_APQ8064_SATA=m
 CONFIG_PHY_QCOM_IPQ806X_SATA=m
 CONFIG_PHY_EXYNOS5_USBDRD=m
 CONFIG_PHY_QCOM_APQ8064_SATA=m
 CONFIG_PHY_QCOM_IPQ806X_SATA=m
+CONFIG_PHY_STIH407_USB=m
+CONFIG_PHY_STIH41X_USB=m
 CONFIG_RAS=y
 
 #
 CONFIG_RAS=y
 
 #
@@ -1133,6 +1202,11 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=21
 # Runtime Testing
 #
 CONFIG_DEBUG_VF_UART_PORT=1
 # Runtime Testing
 #
 CONFIG_DEBUG_VF_UART_PORT=1
+CONFIG_DEBUG_LL_INCLUDE="debug/bcm63xx.S"
+CONFIG_DEBUG_UART_BCM63XX=y
+CONFIG_DEBUG_UART_PHYS=0xfffe8600
+CONFIG_DEBUG_UART_VIRT=0xfcfe8600
+# CONFIG_OC_ETM is not set
 # CONFIG_PID_IN_CONTEXTIDR is not set
 
 #
 # CONFIG_PID_IN_CONTEXTIDR is not set
 
 #
index a3d1c3efccaaa086b9c8f2aff023916c02a399ac..449f34635810e36fbef1c4022172642808367abc 100644 (file)
@@ -27,10 +27,16 @@ CONFIG_SYS_SUPPORTS_HUGETLBFS=y
 CONFIG_PHYS_ADDR_T_64BIT=y
 # CONFIG_TRANSPARENT_HUGEPAGE is not set
 
 CONFIG_PHYS_ADDR_T_64BIT=y
 # CONFIG_TRANSPARENT_HUGEPAGE is not set
 
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+CONFIG_I2C_AXXIA=m
+
 #
 # 1-wire Slaves
 #
 CONFIG_POWER_RESET_AXXIA=y
 #
 # 1-wire Slaves
 #
 CONFIG_POWER_RESET_AXXIA=y
+CONFIG_ROCKCHIP_IODOMAIN=m
 
 #
 # Media drivers
 
 #
 # Media drivers
@@ -44,6 +50,16 @@ CONFIG_POWER_RESET_AXXIA=y
 # CONFIG_IPMMU_VMSA is not set
 # CONFIG_ARM_SMMU is not set
 
 # CONFIG_IPMMU_VMSA is not set
 # CONFIG_ARM_SMMU is not set
 
+#
+# Analog to digital converters
+#
+# CONFIG_ROCKCHIP_SARADC is not set
+
+#
+# Digital to analog converters
+#
+# CONFIG_MAX5821 is not set
+
 #
 # Pseudo filesystems
 #
 #
 # Pseudo filesystems
 #
index e21033fada7b4edb32051955852b7c2803cf8a8d..9c9dc5e0c0d6a4c34348a05527973587ac580b77 100644 (file)
@@ -54,6 +54,7 @@ CONFIG_AUDIT_TREE=y
 #
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
 #
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_IRQ_CHIP=y
 CONFIG_IRQ_DOMAIN=y
 # CONFIG_IRQ_DOMAIN_DEBUG is not set
 CONFIG_IRQ_FORCED_THREADING=y
 CONFIG_IRQ_DOMAIN=y
 # CONFIG_IRQ_DOMAIN_DEBUG is not set
 CONFIG_IRQ_FORCED_THREADING=y
@@ -84,11 +85,11 @@ CONFIG_TASK_IO_ACCOUNTING=y
 # RCU Subsystem
 #
 # CONFIG_PREEMPT_RCU is not set
 # RCU Subsystem
 #
 # CONFIG_PREEMPT_RCU is not set
+# CONFIG_TASKS_RCU is not set
 # CONFIG_TREE_RCU_TRACE is not set
 # CONFIG_BUILD_BIN2C is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=18
 # CONFIG_TREE_RCU_TRACE is not set
 # CONFIG_BUILD_BIN2C is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=18
-CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_FREEZER=y
 CONFIG_CGROUPS=y
 # CONFIG_CGROUP_DEBUG is not set
 CONFIG_CGROUP_FREEZER=y
@@ -126,6 +127,7 @@ CONFIG_RD_LZ4=y
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
 CONFIG_SYSCTL=y
 CONFIG_ANON_INODES=y
 CONFIG_HAVE_UID16=y
+CONFIG_BPF=y
 CONFIG_EXPERT=y
 CONFIG_UID16=y
 CONFIG_SGETMASK_SYSCALL=y
 CONFIG_EXPERT=y
 CONFIG_UID16=y
 CONFIG_SGETMASK_SYSCALL=y
@@ -142,8 +144,10 @@ CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
 CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SIGNALFD=y
 CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
+CONFIG_BPF_SYSCALL=y
 CONFIG_SHMEM=y
 CONFIG_AIO=y
 CONFIG_SHMEM=y
 CONFIG_AIO=y
+CONFIG_ADVISE_SYSCALLS=y
 CONFIG_PCI_QUIRKS=y
 CONFIG_EMBEDDED=y
 CONFIG_HAVE_PERF_EVENTS=y
 CONFIG_PCI_QUIRKS=y
 CONFIG_EMBEDDED=y
 CONFIG_HAVE_PERF_EVENTS=y
@@ -204,6 +208,7 @@ CONFIG_MODULE_UNLOAD=y
 # CONFIG_MODVERSIONS is not set
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
 # CONFIG_MODVERSIONS is not set
 CONFIG_MODULE_SRCVERSION_ALL=y
 # CONFIG_MODULE_SIG is not set
+# CONFIG_MODULE_COMPRESS is not set
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_BLK_DEV_BSG=y
 CONFIG_STOP_MACHINE=y
 CONFIG_BLOCK=y
 CONFIG_BLK_DEV_BSG=y
@@ -248,7 +253,7 @@ CONFIG_CFQ_GROUP_IOSCHED=y
 CONFIG_DEFAULT_CFQ=y
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="cfq"
 CONFIG_DEFAULT_CFQ=y
 # CONFIG_DEFAULT_NOOP is not set
 CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_ASN1=m
+CONFIG_ASN1=y
 CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
 CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
 CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
 CONFIG_INLINE_READ_UNLOCK=y
 CONFIG_INLINE_READ_UNLOCK_IRQ=y
@@ -271,6 +276,7 @@ CONFIG_HAVE_MEMBLOCK=y
 CONFIG_MEMORY_ISOLATION=y
 # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 CONFIG_PAGEFLAGS_EXTENDED=y
 CONFIG_MEMORY_ISOLATION=y
 # CONFIG_HAVE_BOOTMEM_INFO_NODE is not set
 CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_MEMORY_BALLOON=y
 CONFIG_BALLOON_COMPACTION=y
 CONFIG_COMPACTION=y
 CONFIG_MIGRATION=y
 CONFIG_BALLOON_COMPACTION=y
 CONFIG_COMPACTION=y
 CONFIG_MIGRATION=y
@@ -401,6 +407,8 @@ CONFIG_IP_PIMSM_V2=y
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_NET_UDP_TUNNEL=m
 CONFIG_SYN_COOKIES=y
 CONFIG_NET_IPVTI=m
 CONFIG_NET_UDP_TUNNEL=m
+CONFIG_NET_FOU=m
+# CONFIG_GENEVE is not set
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
 CONFIG_INET_AH=m
 CONFIG_INET_ESP=m
 CONFIG_INET_IPCOMP=m
@@ -426,6 +434,7 @@ CONFIG_TCP_CONG_LP=m
 CONFIG_TCP_CONG_VENO=m
 CONFIG_TCP_CONG_YEAH=m
 CONFIG_TCP_CONG_ILLINOIS=m
 CONFIG_TCP_CONG_VENO=m
 CONFIG_TCP_CONG_YEAH=m
 CONFIG_TCP_CONG_ILLINOIS=m
+CONFIG_TCP_CONG_DCTCP=m
 CONFIG_DEFAULT_CUBIC=y
 # CONFIG_DEFAULT_RENO is not set
 CONFIG_DEFAULT_TCP_CONG="cubic"
 CONFIG_DEFAULT_CUBIC=y
 # CONFIG_DEFAULT_RENO is not set
 CONFIG_DEFAULT_TCP_CONG="cubic"
@@ -521,6 +530,7 @@ CONFIG_NFT_HASH=m
 CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
 CONFIG_NFT_LIMIT=m
 CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
 CONFIG_NFT_LIMIT=m
+CONFIG_NFT_MASQ=m
 CONFIG_NFT_NAT=m
 CONFIG_NFT_QUEUE=m
 CONFIG_NFT_REJECT=m
 CONFIG_NFT_NAT=m
 CONFIG_NFT_QUEUE=m
 CONFIG_NFT_REJECT=m
@@ -624,6 +634,7 @@ CONFIG_IP_SET_HASH_IPMARK=m
 CONFIG_IP_SET_HASH_IPPORT=m
 CONFIG_IP_SET_HASH_IPPORTIP=m
 CONFIG_IP_SET_HASH_IPPORTNET=m
 CONFIG_IP_SET_HASH_IPPORT=m
 CONFIG_IP_SET_HASH_IPPORTIP=m
 CONFIG_IP_SET_HASH_IPPORTNET=m
+CONFIG_IP_SET_HASH_MAC=m
 CONFIG_IP_SET_HASH_NETPORTNET=m
 CONFIG_IP_SET_HASH_NET=m
 CONFIG_IP_SET_HASH_NETNET=m
 CONFIG_IP_SET_HASH_NETPORTNET=m
 CONFIG_IP_SET_HASH_NET=m
 CONFIG_IP_SET_HASH_NETNET=m
@@ -652,6 +663,7 @@ CONFIG_IP_VS_RR=m
 CONFIG_IP_VS_WRR=m
 CONFIG_IP_VS_LC=m
 CONFIG_IP_VS_WLC=m
 CONFIG_IP_VS_WRR=m
 CONFIG_IP_VS_LC=m
 CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_FO=m
 CONFIG_IP_VS_LBLC=m
 CONFIG_IP_VS_LBLCR=m
 CONFIG_IP_VS_DH=m
 CONFIG_IP_VS_LBLC=m
 CONFIG_IP_VS_LBLCR=m
 CONFIG_IP_VS_DH=m
@@ -681,10 +693,13 @@ CONFIG_NF_LOG_ARP=m
 CONFIG_NF_LOG_IPV4=m
 CONFIG_NF_TABLES_IPV4=m
 CONFIG_NFT_CHAIN_ROUTE_IPV4=m
 CONFIG_NF_LOG_IPV4=m
 CONFIG_NF_TABLES_IPV4=m
 CONFIG_NFT_CHAIN_ROUTE_IPV4=m
-CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NF_REJECT_IPV4=m
 CONFIG_NFT_REJECT_IPV4=m
 CONFIG_NF_TABLES_ARP=m
 CONFIG_NF_NAT_IPV4=m
 CONFIG_NFT_REJECT_IPV4=m
 CONFIG_NF_TABLES_ARP=m
 CONFIG_NF_NAT_IPV4=m
+CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NF_NAT_MASQUERADE_IPV4=m
+CONFIG_NFT_MASQ_IPV4=m
 CONFIG_NF_NAT_SNMP_BASIC=m
 CONFIG_NF_NAT_PROTO_GRE=m
 CONFIG_NF_NAT_PPTP=m
 CONFIG_NF_NAT_SNMP_BASIC=m
 CONFIG_NF_NAT_PROTO_GRE=m
 CONFIG_NF_NAT_PPTP=m
@@ -718,10 +733,13 @@ CONFIG_NF_DEFRAG_IPV6=y
 CONFIG_NF_CONNTRACK_IPV6=y
 CONFIG_NF_TABLES_IPV6=m
 CONFIG_NFT_CHAIN_ROUTE_IPV6=m
 CONFIG_NF_CONNTRACK_IPV6=y
 CONFIG_NF_TABLES_IPV6=m
 CONFIG_NFT_CHAIN_ROUTE_IPV6=m
-CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NF_REJECT_IPV6=m
 CONFIG_NFT_REJECT_IPV6=m
 CONFIG_NF_LOG_IPV6=m
 CONFIG_NF_NAT_IPV6=m
 CONFIG_NFT_REJECT_IPV6=m
 CONFIG_NF_LOG_IPV6=m
 CONFIG_NF_NAT_IPV6=m
+CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NF_NAT_MASQUERADE_IPV6=m
+CONFIG_NFT_MASQ_IPV6=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
@@ -795,6 +813,7 @@ CONFIG_BRIDGE_IGMP_SNOOPING=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_HAVE_NET_DSA=y
 CONFIG_NET_DSA=y
 CONFIG_BRIDGE_VLAN_FILTERING=y
 CONFIG_HAVE_NET_DSA=y
 CONFIG_NET_DSA=y
+CONFIG_NET_DSA_TAG_BRCM=y
 CONFIG_NET_DSA_TAG_DSA=y
 CONFIG_NET_DSA_TAG_EDSA=y
 CONFIG_NET_DSA_TAG_TRAILER=y
 CONFIG_NET_DSA_TAG_DSA=y
 CONFIG_NET_DSA_TAG_EDSA=y
 CONFIG_NET_DSA_TAG_TRAILER=y
@@ -991,6 +1010,7 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
 CONFIG_FW_LOADER=y
 CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
 CONFIG_FW_LOADER=y
 CONFIG_EXTRA_FIRMWARE=""
 # CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_GENERIC_CPU_DEVICES is not set
 # CONFIG_DEBUG_DRIVER is not set
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_GENERIC_CPU_DEVICES is not set
@@ -1086,6 +1106,7 @@ CONFIG_ALTERA_STAPL=m
 # Intel MIC Card Driver
 #
 # CONFIG_ECHO is not set
 # Intel MIC Card Driver
 #
 # CONFIG_ECHO is not set
+# CONFIG_CXL_BASE is not set
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
 CONFIG_HAVE_IDE=y
 # CONFIG_IDE is not set
 
@@ -1097,6 +1118,7 @@ CONFIG_RAID_ATTRS=m
 CONFIG_SCSI=y
 CONFIG_SCSI_DMA=y
 CONFIG_SCSI_NETLINK=y
 CONFIG_SCSI=y
 CONFIG_SCSI_DMA=y
 CONFIG_SCSI_NETLINK=y
+# CONFIG_SCSI_MQ_DEFAULT is not set
 CONFIG_SCSI_PROC_FS=y
 
 #
 CONFIG_SCSI_PROC_FS=y
 
 #
@@ -1382,12 +1404,16 @@ CONFIG_NET_DSA_MV88E6060=y
 CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
 CONFIG_NET_DSA_MV88E6131=y
 CONFIG_NET_DSA_MV88E6123_61_65=y
 CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y
 CONFIG_NET_DSA_MV88E6131=y
 CONFIG_NET_DSA_MV88E6123_61_65=y
+CONFIG_NET_DSA_MV88E6171=m
+CONFIG_NET_DSA_BCM_SF2=m
 CONFIG_ETHERNET=y
 CONFIG_MDIO=m
 CONFIG_NET_VENDOR_3COM=y
 CONFIG_TYPHOON=m
 CONFIG_NET_VENDOR_ADAPTEC=y
 CONFIG_ADAPTEC_STARFIRE=m
 CONFIG_ETHERNET=y
 CONFIG_MDIO=m
 CONFIG_NET_VENDOR_3COM=y
 CONFIG_TYPHOON=m
 CONFIG_NET_VENDOR_ADAPTEC=y
 CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_NET_VENDOR_AGERE=y
+CONFIG_ET131X=m
 CONFIG_NET_VENDOR_ALTEON=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
 CONFIG_NET_VENDOR_ALTEON=y
 CONFIG_ACENIC=m
 # CONFIG_ACENIC_OMIT_TIGON_I is not set
@@ -1492,6 +1518,7 @@ CONFIG_QLCNIC=m
 CONFIG_QLCNIC_HWMON=y
 CONFIG_QLGE=m
 CONFIG_NETXEN_NIC=m
 CONFIG_QLCNIC_HWMON=y
 CONFIG_QLGE=m
 CONFIG_NETXEN_NIC=m
+CONFIG_NET_VENDOR_QUALCOMM=y
 CONFIG_NET_VENDOR_REALTEK=y
 CONFIG_8139CP=m
 CONFIG_8139TOO=m
 CONFIG_NET_VENDOR_REALTEK=y
 CONFIG_8139CP=m
 CONFIG_8139TOO=m
@@ -1566,6 +1593,7 @@ CONFIG_MICREL_PHY=m
 CONFIG_FIXED_PHY=y
 CONFIG_MDIO_BITBANG=m
 # CONFIG_MDIO_GPIO is not set
 CONFIG_FIXED_PHY=y
 CONFIG_MDIO_BITBANG=m
 # CONFIG_MDIO_GPIO is not set
+CONFIG_MDIO_BCM_UNIMAC=m
 CONFIG_PPP=m
 CONFIG_PPP_BSDCOMP=m
 CONFIG_PPP_DEFLATE=m
 CONFIG_PPP=m
 CONFIG_PPP_BSDCOMP=m
 CONFIG_PPP_DEFLATE=m
@@ -1649,8 +1677,10 @@ CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
+CONFIG_ATH9K_DYNACK=y
 CONFIG_ATH9K_WOW=y
 CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_WOW=y
 CONFIG_ATH9K_RFKILL=y
+CONFIG_ATH9K_CHANNEL_CONTEXT=y
 CONFIG_ATH9K_HTC=m
 # CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
 CONFIG_ATH9K_HTC=m
 # CONFIG_ATH9K_HTC_DEBUGFS is not set
 CONFIG_CARL9170=m
@@ -1772,6 +1802,8 @@ CONFIG_RTL8192DE=m
 CONFIG_RTL8723AE=m
 CONFIG_RTL8723BE=m
 CONFIG_RTL8188EE=m
 CONFIG_RTL8723AE=m
 CONFIG_RTL8723BE=m
 CONFIG_RTL8188EE=m
+CONFIG_RTL8192EE=m
+CONFIG_RTL8821AE=m
 CONFIG_RTL8192CU=m
 CONFIG_RTLWIFI=m
 CONFIG_RTLWIFI_PCI=m
 CONFIG_RTL8192CU=m
 CONFIG_RTLWIFI=m
 CONFIG_RTLWIFI_PCI=m
@@ -1902,6 +1934,7 @@ CONFIG_ISDN_HDLC=m
 # Input device support
 #
 CONFIG_INPUT=y
 # Input device support
 #
 CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_POLLDEV=m
 CONFIG_INPUT_SPARSEKMAP=m
 
 CONFIG_INPUT_POLLDEV=m
 CONFIG_INPUT_SPARSEKMAP=m
 
@@ -1981,6 +2014,7 @@ CONFIG_INPUT_YEALINK=m
 CONFIG_INPUT_CM109=m
 CONFIG_INPUT_RETU_PWRBUTTON=m
 CONFIG_INPUT_UINPUT=m
 CONFIG_INPUT_CM109=m
 CONFIG_INPUT_RETU_PWRBUTTON=m
 CONFIG_INPUT_UINPUT=m
+CONFIG_INPUT_PALMAS_PWRBUTTON=m
 # CONFIG_INPUT_PCF8574 is not set
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_DA9052_ONKEY is not set
 # CONFIG_INPUT_PCF8574 is not set
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_DA9052_ONKEY is not set
@@ -1990,6 +2024,8 @@ CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
 # CONFIG_INPUT_IMS_PCU is not set
 # CONFIG_INPUT_CMA3000 is not set
 CONFIG_INPUT_SOC_BUTTON_ARRAY=m
 # CONFIG_INPUT_IMS_PCU is not set
 # CONFIG_INPUT_CMA3000 is not set
 CONFIG_INPUT_SOC_BUTTON_ARRAY=m
+CONFIG_INPUT_DRV260X_HAPTICS=m
+CONFIG_INPUT_DRV2667_HAPTICS=m
 
 #
 # Hardware I/O ports
 
 #
 # Hardware I/O ports
@@ -2070,6 +2106,7 @@ CONFIG_R3964=m
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=8192
 # CONFIG_TCG_TPM is not set
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=8192
 # CONFIG_TCG_TPM is not set
+# CONFIG_XILLYBUS is not set
 
 #
 # I2C support
 
 #
 # I2C support
@@ -2371,6 +2408,7 @@ CONFIG_SENSORS_MAX6650=m
 CONFIG_SENSORS_MAX6697=m
 CONFIG_SENSORS_HTU21=m
 CONFIG_SENSORS_MCP3021=m
 CONFIG_SENSORS_MAX6697=m
 CONFIG_SENSORS_HTU21=m
 CONFIG_SENSORS_MCP3021=m
+CONFIG_SENSORS_MENF21BMC_HWMON=m
 CONFIG_SENSORS_LM63=m
 CONFIG_SENSORS_LM73=m
 CONFIG_SENSORS_LM75=m
 CONFIG_SENSORS_LM63=m
 CONFIG_SENSORS_LM73=m
 CONFIG_SENSORS_LM75=m
@@ -2457,6 +2495,7 @@ CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
 # CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
 CONFIG_THERMAL_GOV_FAIR_SHARE=y
 CONFIG_THERMAL_GOV_STEP_WISE=y
+CONFIG_THERMAL_GOV_BANG_BANG=y
 CONFIG_THERMAL_GOV_USER_SPACE=y
 CONFIG_THERMAL_EMULATION=y
 
 CONFIG_THERMAL_GOV_USER_SPACE=y
 CONFIG_THERMAL_EMULATION=y
 
@@ -2473,10 +2512,13 @@ CONFIG_WATCHDOG_NOWAYOUT=y
 CONFIG_SOFT_WATCHDOG=m
 CONFIG_DA9052_WATCHDOG=m
 CONFIG_DA9055_WATCHDOG=m
 CONFIG_SOFT_WATCHDOG=m
 CONFIG_DA9052_WATCHDOG=m
 CONFIG_DA9055_WATCHDOG=m
+CONFIG_DA9063_WATCHDOG=m
+CONFIG_MENF21BMC_WATCHDOG=m
 CONFIG_WM831X_WATCHDOG=m
 CONFIG_WM8350_WATCHDOG=m
 CONFIG_XILINX_WATCHDOG=m
 CONFIG_DW_WATCHDOG=m
 CONFIG_WM831X_WATCHDOG=m
 CONFIG_WM8350_WATCHDOG=m
 CONFIG_XILINX_WATCHDOG=m
 CONFIG_DW_WATCHDOG=m
+CONFIG_RN5T618_WATCHDOG=m
 CONFIG_TWL4030_WATCHDOG=m
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ALIM7101_WDT=m
 CONFIG_TWL4030_WATCHDOG=m
 CONFIG_RETU_WATCHDOG=m
 CONFIG_ALIM7101_WDT=m
@@ -2555,6 +2597,7 @@ CONFIG_MFD_MAX8907=m
 CONFIG_MFD_MAX8925=y
 CONFIG_MFD_MAX8997=y
 CONFIG_MFD_MAX8998=y
 CONFIG_MFD_MAX8925=y
 CONFIG_MFD_MAX8997=y
 CONFIG_MFD_MAX8998=y
+CONFIG_MFD_MENF21BMC=m
 CONFIG_MFD_VIPERBOARD=m
 CONFIG_MFD_RETU=m
 # CONFIG_MFD_PCF50633 is not set
 CONFIG_MFD_VIPERBOARD=m
 CONFIG_MFD_RETU=m
 # CONFIG_MFD_PCF50633 is not set
@@ -2562,6 +2605,7 @@ CONFIG_MFD_RETU=m
 # CONFIG_MFD_RDC321X is not set
 CONFIG_MFD_RTSX_USB=m
 CONFIG_MFD_RC5T583=y
 # CONFIG_MFD_RDC321X is not set
 CONFIG_MFD_RTSX_USB=m
 CONFIG_MFD_RC5T583=y
+CONFIG_MFD_RN5T618=y
 CONFIG_MFD_SEC_CORE=y
 # CONFIG_MFD_SI476X_CORE is not set
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SEC_CORE=y
 # CONFIG_MFD_SI476X_CORE is not set
 CONFIG_MFD_SM501=m
@@ -2614,6 +2658,7 @@ CONFIG_REGULATOR_DA9063=m
 CONFIG_REGULATOR_DA9210=m
 CONFIG_REGULATOR_DA9211=m
 CONFIG_REGULATOR_FAN53555=m
 CONFIG_REGULATOR_DA9210=m
 CONFIG_REGULATOR_DA9211=m
 CONFIG_REGULATOR_FAN53555=m
+CONFIG_REGULATOR_ISL9305=m
 CONFIG_REGULATOR_ISL6271A=m
 CONFIG_REGULATOR_LP3971=m
 CONFIG_REGULATOR_LP3972=m
 CONFIG_REGULATOR_ISL6271A=m
 CONFIG_REGULATOR_LP3971=m
 CONFIG_REGULATOR_LP3972=m
@@ -2631,9 +2676,11 @@ CONFIG_REGULATOR_MAX8997=m
 CONFIG_REGULATOR_MAX8998=m
 CONFIG_REGULATOR_MAX77686=m
 CONFIG_REGULATOR_MAX77693=m
 CONFIG_REGULATOR_MAX8998=m
 CONFIG_REGULATOR_MAX77686=m
 CONFIG_REGULATOR_MAX77693=m
+CONFIG_REGULATOR_MAX77802=m
 CONFIG_REGULATOR_PALMAS=m
 CONFIG_REGULATOR_PFUZE100=m
 CONFIG_REGULATOR_RC5T583=m
 CONFIG_REGULATOR_PALMAS=m
 CONFIG_REGULATOR_PFUZE100=m
 CONFIG_REGULATOR_RC5T583=m
+CONFIG_REGULATOR_RN5T618=m
 CONFIG_REGULATOR_S2MPA01=m
 CONFIG_REGULATOR_S2MPS11=m
 CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_S2MPA01=m
 CONFIG_REGULATOR_S2MPS11=m
 CONFIG_REGULATOR_S5M8767=m
@@ -2700,6 +2747,7 @@ CONFIG_IR_MCE_KBD_DECODER=m
 CONFIG_IR_XMP_DECODER=m
 CONFIG_RC_DEVICES=y
 # CONFIG_RC_ATI_REMOTE is not set
 CONFIG_IR_XMP_DECODER=m
 CONFIG_RC_DEVICES=y
 # CONFIG_RC_ATI_REMOTE is not set
+# CONFIG_IR_HIX5HD2 is not set
 CONFIG_IR_IMON=m
 CONFIG_IR_MCEUSB=m
 CONFIG_IR_REDRAT3=m
 CONFIG_IR_IMON=m
 CONFIG_IR_MCEUSB=m
 CONFIG_IR_REDRAT3=m
@@ -2852,9 +2900,11 @@ CONFIG_DVB_USB_GL861=m
 CONFIG_DVB_USB_LME2510=m
 # CONFIG_DVB_USB_MXL111SF is not set
 CONFIG_DVB_USB_RTL28XXU=m
 CONFIG_DVB_USB_LME2510=m
 # CONFIG_DVB_USB_MXL111SF is not set
 CONFIG_DVB_USB_RTL28XXU=m
+CONFIG_DVB_USB_DVBSKY=m
 CONFIG_SMS_USB_DRV=m
 CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
 CONFIG_SMS_USB_DRV=m
 CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
+CONFIG_DVB_AS102=m
 
 #
 # Webcam, TV (analog/digital) USB devices
 
 #
 # Webcam, TV (analog/digital) USB devices
@@ -2869,6 +2919,7 @@ CONFIG_VIDEO_EM28XX_RC=m
 # Software defined radio USB devices
 #
 CONFIG_USB_AIRSPY=m
 # Software defined radio USB devices
 #
 CONFIG_USB_AIRSPY=m
+CONFIG_USB_HACKRF=m
 CONFIG_MEDIA_PCI_SUPPORT=y
 
 #
 CONFIG_MEDIA_PCI_SUPPORT=y
 
 #
@@ -2883,6 +2934,7 @@ CONFIG_MEDIA_PCI_SUPPORT=y
 # CONFIG_VIDEO_HEXIUM_ORION is not set
 # CONFIG_VIDEO_MXB is not set
 # CONFIG_VIDEO_SOLO6X10 is not set
 # CONFIG_VIDEO_HEXIUM_ORION is not set
 # CONFIG_VIDEO_MXB is not set
 # CONFIG_VIDEO_SOLO6X10 is not set
+# CONFIG_VIDEO_TW68 is not set
 
 #
 # Media capture/analog/hybrid TV support
 
 #
 # Media capture/analog/hybrid TV support
@@ -2891,6 +2943,7 @@ CONFIG_MEDIA_PCI_SUPPORT=y
 #
 # Media digital TV PCI Adapters
 #
 #
 # Media digital TV PCI Adapters
 #
+CONFIG_DVB_PT3=m
 # CONFIG_DVB_DDBRIDGE is not set
 CONFIG_V4L_PLATFORM_DRIVERS=y
 CONFIG_SOC_CAMERA=m
 # CONFIG_DVB_DDBRIDGE is not set
 CONFIG_V4L_PLATFORM_DRIVERS=y
 CONFIG_SOC_CAMERA=m
@@ -2898,7 +2951,6 @@ CONFIG_SOC_CAMERA_PLATFORM=m
 CONFIG_V4L_MEM2MEM_DRIVERS=y
 CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
 CONFIG_VIDEO_SH_VEU=m
 CONFIG_V4L_MEM2MEM_DRIVERS=y
 CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
 CONFIG_VIDEO_SH_VEU=m
-CONFIG_VIDEO_RENESAS_VSP1=m
 # CONFIG_V4L_TEST_DRIVERS is not set
 
 #
 # CONFIG_V4L_TEST_DRIVERS is not set
 
 #
@@ -3026,6 +3078,8 @@ CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_SI2157=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
 CONFIG_MEDIA_TUNER_SI2157=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
+CONFIG_MEDIA_TUNER_MXL301RF=m
+CONFIG_MEDIA_TUNER_QM1D1C0042=m
 
 #
 # Multistandard (satellite) frontends
 
 #
 # Multistandard (satellite) frontends
@@ -3084,6 +3138,7 @@ CONFIG_DVB_RTL2830=m
 CONFIG_DVB_RTL2832=m
 CONFIG_DVB_RTL2832_SDR=m
 CONFIG_DVB_SI2168=m
 CONFIG_DVB_RTL2832=m
 CONFIG_DVB_RTL2832_SDR=m
 CONFIG_DVB_SI2168=m
+CONFIG_DVB_AS102_FE=m
 
 #
 # DVB-C (cable) frontends
 
 #
 # DVB-C (cable) frontends
@@ -3109,6 +3164,7 @@ CONFIG_DVB_S5H1411=m
 CONFIG_DVB_S921=m
 CONFIG_DVB_DIB8000=m
 CONFIG_DVB_MB86A20S=m
 CONFIG_DVB_S921=m
 CONFIG_DVB_DIB8000=m
 CONFIG_DVB_MB86A20S=m
+CONFIG_DVB_TC90522=m
 
 #
 # Digital terrestrial only tuners/PLL
 
 #
 # Digital terrestrial only tuners/PLL
@@ -3145,7 +3201,6 @@ CONFIG_VGA_ARB_MAX_GPUS=16
 # Direct Rendering Manager
 #
 CONFIG_DRM=m
 # Direct Rendering Manager
 #
 CONFIG_DRM=m
-CONFIG_DRM_USB=m
 CONFIG_DRM_KMS_HELPER=m
 CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
 CONFIG_DRM_KMS_HELPER=m
 CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
@@ -3174,6 +3229,7 @@ CONFIG_DRM_BOCHS=m
 #
 CONFIG_FB=y
 CONFIG_FIRMWARE_EDID=y
 #
 CONFIG_FB=y
 CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_CMDLINE=y
 # CONFIG_FB_DDC is not set
 # CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=m
 # CONFIG_FB_DDC is not set
 # CONFIG_FB_BOOT_VESA_SUPPORT is not set
 CONFIG_FB_CFB_FILLRECT=m
@@ -3461,6 +3517,7 @@ CONFIG_HID_MONTEREY=y
 # CONFIG_HID_NTRIG is not set
 CONFIG_HID_ORTEK=m
 # CONFIG_HID_PANTHERLORD is not set
 # CONFIG_HID_NTRIG is not set
 CONFIG_HID_ORTEK=m
 # CONFIG_HID_PANTHERLORD is not set
+CONFIG_HID_PENMOUNT=m
 CONFIG_HID_PETALYNX=m
 CONFIG_HID_PICOLCD=m
 CONFIG_HID_PICOLCD_FB=y
 CONFIG_HID_PETALYNX=m
 CONFIG_HID_PICOLCD=m
 CONFIG_HID_PICOLCD_FB=y
@@ -3526,6 +3583,7 @@ CONFIG_USB_WUSB_CBAF=m
 #
 # CONFIG_USB_C67X00_HCD is not set
 CONFIG_USB_XHCI_HCD=y
 #
 # CONFIG_USB_C67X00_HCD is not set
 CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_XHCI_PCI=y
 CONFIG_USB_XHCI_PLATFORM=m
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
 CONFIG_USB_XHCI_PLATFORM=m
 CONFIG_USB_EHCI_HCD=y
 CONFIG_USB_EHCI_ROOT_HUB_TT=y
@@ -3674,7 +3732,6 @@ CONFIG_USB_SERIAL_OPTION=m
 # CONFIG_USB_SERIAL_OPTICON is not set
 # CONFIG_USB_SERIAL_XSENS_MT is not set
 # CONFIG_USB_SERIAL_WISHBONE is not set
 # CONFIG_USB_SERIAL_OPTICON is not set
 # CONFIG_USB_SERIAL_XSENS_MT is not set
 # CONFIG_USB_SERIAL_WISHBONE is not set
-CONFIG_USB_SERIAL_ZTE=m
 CONFIG_USB_SERIAL_SSU100=m
 CONFIG_USB_SERIAL_QT2=m
 # CONFIG_USB_SERIAL_DEBUG is not set
 CONFIG_USB_SERIAL_SSU100=m
 CONFIG_USB_SERIAL_QT2=m
 # CONFIG_USB_SERIAL_DEBUG is not set
@@ -3717,12 +3774,10 @@ CONFIG_USB_XUSBATM=m
 # USB Physical Layer drivers
 #
 CONFIG_USB_PHY=y
 # USB Physical Layer drivers
 #
 CONFIG_USB_PHY=y
-CONFIG_SAMSUNG_USBPHY=m
-CONFIG_SAMSUNG_USB2PHY=m
-CONFIG_SAMSUNG_USB3PHY=m
 CONFIG_USB_GPIO_VBUS=m
 CONFIG_USB_ISP1301=m
 # CONFIG_USB_GADGET is not set
 CONFIG_USB_GPIO_VBUS=m
 CONFIG_USB_ISP1301=m
 # CONFIG_USB_GADGET is not set
+CONFIG_USB_LED_TRIG=y
 # CONFIG_UWB is not set
 # CONFIG_MMC_DEBUG is not set
 # CONFIG_MMC_CLKGATE is not set
 # CONFIG_UWB is not set
 # CONFIG_MMC_DEBUG is not set
 # CONFIG_MMC_CLKGATE is not set
@@ -3799,6 +3854,7 @@ CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_TCA6507=m
 CONFIG_LEDS_MAX8997=m
 CONFIG_LEDS_LM355x=m
 CONFIG_LEDS_TCA6507=m
 CONFIG_LEDS_MAX8997=m
 CONFIG_LEDS_LM355x=m
+CONFIG_LEDS_MENF21BMC=m
 
 #
 # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
 
 #
 # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
@@ -3856,6 +3912,7 @@ CONFIG_RTC_DRV_MAX8925=m
 CONFIG_RTC_DRV_MAX8998=m
 CONFIG_RTC_DRV_MAX8997=m
 CONFIG_RTC_DRV_MAX77686=m
 CONFIG_RTC_DRV_MAX8998=m
 CONFIG_RTC_DRV_MAX8997=m
 CONFIG_RTC_DRV_MAX77686=m
+CONFIG_RTC_DRV_MAX77802=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
@@ -3955,7 +4012,6 @@ CONFIG_VIRTIO_BALLOON=m
 # Xen driver support
 #
 CONFIG_STAGING=y
 # Xen driver support
 #
 CONFIG_STAGING=y
-CONFIG_ET131X=m
 # CONFIG_PRISM2_USB is not set
 # CONFIG_COMEDI is not set
 # CONFIG_RTL8192U is not set
 # CONFIG_PRISM2_USB is not set
 # CONFIG_COMEDI is not set
 # CONFIG_RTL8192U is not set
@@ -3966,13 +4022,10 @@ CONFIG_RTLLIB_CRYPTO_WEP=m
 # CONFIG_RTL8192E is not set
 # CONFIG_R8712U is not set
 # CONFIG_R8188EU is not set
 # CONFIG_RTL8192E is not set
 # CONFIG_R8712U is not set
 # CONFIG_R8188EU is not set
-CONFIG_R8192EE=m
 CONFIG_R8723AU=m
 CONFIG_8723AU_AP_MODE=y
 CONFIG_8723AU_BT_COEXIST=y
 CONFIG_R8723AU=m
 CONFIG_8723AU_AP_MODE=y
 CONFIG_8723AU_BT_COEXIST=y
-CONFIG_R8821AE=m
 CONFIG_RTS5208=m
 CONFIG_RTS5208=m
-# CONFIG_RTS5208_DEBUG is not set
 # CONFIG_LINE6_USB is not set
 # CONFIG_VT6655 is not set
 # CONFIG_VT6656 is not set
 # CONFIG_LINE6_USB is not set
 # CONFIG_VT6655 is not set
 # CONFIG_VT6656 is not set
@@ -4063,7 +4116,6 @@ CONFIG_SENSORS_HMC5843_I2C=m
 # CONFIG_WIMAX_GDM72XX is not set
 # CONFIG_LTE_GDM724X is not set
 # CONFIG_LUSTRE_FS is not set
 # CONFIG_WIMAX_GDM72XX is not set
 # CONFIG_LTE_GDM724X is not set
 # CONFIG_LUSTRE_FS is not set
-# CONFIG_XILLYBUS is not set
 # CONFIG_DGNC is not set
 # CONFIG_DGAP is not set
 # CONFIG_GS_FPGABOOT is not set
 # CONFIG_DGNC is not set
 # CONFIG_DGAP is not set
 # CONFIG_GS_FPGABOOT is not set
@@ -4071,6 +4123,7 @@ CONFIG_SENSORS_HMC5843_I2C=m
 #
 # SOC (System On Chip) specific Drivers
 #
 #
 # SOC (System On Chip) specific Drivers
 #
+CONFIG_SOC_TI=y
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
 CONFIG_CLKDEV_LOOKUP=y
 CONFIG_HAVE_CLK_PREPARE=y
 CONFIG_COMMON_CLK=y
@@ -4078,10 +4131,13 @@ CONFIG_COMMON_CLK=y
 #
 # Common Clock Framework
 #
 #
 # Common Clock Framework
 #
+CONFIG_COMMON_CLK_MAX_GEN=y
+CONFIG_COMMON_CLK_MAX77802=m
 CONFIG_COMMON_CLK_SI5351=m
 CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_PALMAS=m
 CONFIG_COMMON_CLK_SI5351=m
 CONFIG_COMMON_CLK_S2MPS11=m
 CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_PALMAS=m
+# CONFIG_COMMON_CLK_PXA is not set
 
 #
 # Hardware Spinlock drivers
 
 #
 # Hardware Spinlock drivers
@@ -4090,6 +4146,7 @@ CONFIG_COMMON_CLK_PALMAS=m
 #
 # Clock Source drivers
 #
 #
 # Clock Source drivers
 #
+# CONFIG_ATMEL_PIT is not set
 # CONFIG_SH_TIMER_CMT is not set
 # CONFIG_SH_TIMER_MTU2 is not set
 # CONFIG_EM_TIMER_STI is not set
 # CONFIG_SH_TIMER_CMT is not set
 # CONFIG_SH_TIMER_MTU2 is not set
 # CONFIG_EM_TIMER_STI is not set
@@ -4104,7 +4161,23 @@ CONFIG_IOMMU_SUPPORT=y
 #
 # Rpmsg drivers
 #
 #
 # Rpmsg drivers
 #
-# CONFIG_PM_DEVFREQ is not set
+
+#
+# SOC (System On Chip) specific Drivers
+#
+CONFIG_PM_DEVFREQ=y
+
+#
+# DEVFREQ Governors
+#
+CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
+CONFIG_DEVFREQ_GOV_PERFORMANCE=m
+CONFIG_DEVFREQ_GOV_POWERSAVE=m
+CONFIG_DEVFREQ_GOV_USERSPACE=m
+
+#
+# DEVFREQ Drivers
+#
 # CONFIG_EXTCON is not set
 CONFIG_MEMORY=y
 CONFIG_IIO=m
 # CONFIG_EXTCON is not set
 CONFIG_MEMORY=y
 CONFIG_IIO=m
@@ -4119,6 +4192,7 @@ CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
 # Accelerometers
 #
 # CONFIG_BMA180 is not set
 # Accelerometers
 #
 # CONFIG_BMA180 is not set
+# CONFIG_BMC150_ACCEL is not set
 # CONFIG_HID_SENSOR_ACCEL_3D is not set
 # CONFIG_IIO_ST_ACCEL_3AXIS is not set
 # CONFIG_MMA8452 is not set
 # CONFIG_HID_SENSOR_ACCEL_3D is not set
 # CONFIG_IIO_ST_ACCEL_3AXIS is not set
 # CONFIG_MMA8452 is not set
@@ -4172,6 +4246,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
 #
 # Digital gyroscope sensors
 #
 #
 # Digital gyroscope sensors
 #
+# CONFIG_BMG160 is not set
 # CONFIG_HID_SENSOR_GYRO_3D is not set
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
 # CONFIG_HID_SENSOR_GYRO_3D is not set
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
@@ -4191,6 +4266,7 @@ CONFIG_DHT11=m
 # Light sensors
 #
 # CONFIG_ADJD_S311 is not set
 # Light sensors
 #
 # CONFIG_ADJD_S311 is not set
+# CONFIG_AL3320A is not set
 # CONFIG_APDS9300 is not set
 CONFIG_CM32181=m
 # CONFIG_CM36651 is not set
 # CONFIG_APDS9300 is not set
 CONFIG_CM32181=m
 # CONFIG_CM36651 is not set
@@ -4323,6 +4399,7 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
+CONFIG_OVERLAY_FS=m
 
 #
 # Caches
 
 #
 # Caches
@@ -4420,6 +4497,7 @@ CONFIG_NFSD_V3_ACL=y
 CONFIG_NFSD_V4=y
 CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
 CONFIG_NFSD_V4=y
 CONFIG_NFSD_V4_SECURITY_LABEL=y
 # CONFIG_NFSD_FAULT_INJECTION is not set
+CONFIG_GRACE_PERIOD=m
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
 CONFIG_NFS_ACL_SUPPORT=m
 CONFIG_LOCKD=m
 CONFIG_LOCKD_V4=y
 CONFIG_NFS_ACL_SUPPORT=m
@@ -4525,7 +4603,6 @@ CONFIG_STRIP_ASM_SYMS=y
 CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
 CONFIG_DEBUG_FS=y
 CONFIG_HEADERS_CHECK=y
 # CONFIG_DEBUG_SECTION_MISMATCH is not set
-CONFIG_FRAME_POINTER=y
 # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
 # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
@@ -4557,6 +4634,7 @@ CONFIG_PANIC_ON_OOPS_VALUE=0
 CONFIG_PANIC_TIMEOUT=120
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
 CONFIG_PANIC_TIMEOUT=120
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
+CONFIG_SCHED_STACK_END_CHECK=y
 CONFIG_TIMER_STATS=y
 
 #
 CONFIG_TIMER_STATS=y
 
 #
@@ -4593,7 +4671,6 @@ CONFIG_DEBUG_LIST=y
 # CONFIG_FAULT_INJECTION is not set
 CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
 # CONFIG_FAULT_INJECTION is not set
 CONFIG_NOP_TRACER=y
 CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
 CONFIG_HAVE_DYNAMIC_FTRACE=y
 CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
 CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
 CONFIG_HAVE_DYNAMIC_FTRACE=y
 CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
 CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
@@ -4608,7 +4685,6 @@ CONFIG_GENERIC_TRACER=y
 CONFIG_TRACING_SUPPORT=y
 CONFIG_FTRACE=y
 CONFIG_FUNCTION_TRACER=y
 CONFIG_TRACING_SUPPORT=y
 CONFIG_FTRACE=y
 CONFIG_FUNCTION_TRACER=y
-CONFIG_FUNCTION_GRAPH_TRACER=y
 # CONFIG_IRQSOFF_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_TRACER_SNAPSHOT=y
 # CONFIG_IRQSOFF_TRACER is not set
 CONFIG_SCHED_TRACER=y
 CONFIG_TRACER_SNAPSHOT=y
@@ -4644,7 +4720,7 @@ CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_RHASHTABLE is not set
 # CONFIG_BUILD_DOCSRC is not set
 # CONFIG_DMA_API_DEBUG is not set
 # CONFIG_TEST_RHASHTABLE is not set
 # CONFIG_BUILD_DOCSRC is not set
 # CONFIG_DMA_API_DEBUG is not set
-# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_LKM is not set
 # CONFIG_TEST_USER_COPY is not set
 # CONFIG_TEST_BPF is not set
 # CONFIG_TEST_FIRMWARE is not set
 # CONFIG_TEST_USER_COPY is not set
 # CONFIG_TEST_BPF is not set
 # CONFIG_TEST_FIRMWARE is not set
@@ -4826,6 +4902,10 @@ CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
 # CONFIG_SECURITY_SMACK is not set
 # CONFIG_SECURITY_TOMOYO is not set
 # CONFIG_SECURITY_APPARMOR is not set
 # CONFIG_SECURITY_SMACK is not set
 # CONFIG_SECURITY_TOMOYO is not set
 # CONFIG_SECURITY_APPARMOR is not set
+CONFIG_INTEGRITY=y
+CONFIG_INTEGRITY_SIGNATURE=y
+CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
+CONFIG_INTEGRITY_AUDIT=y
 # CONFIG_IMA is not set
 # CONFIG_EVM is not set
 CONFIG_DEFAULT_SECURITY_SELINUX=y
 # CONFIG_IMA is not set
 # CONFIG_EVM is not set
 CONFIG_DEFAULT_SECURITY_SELINUX=y
@@ -4861,6 +4941,7 @@ CONFIG_CRYPTO_MANAGER2=y
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_WORKQUEUE=y
 CONFIG_CRYPTO_CRYPTD=y
 CONFIG_CRYPTO_NULL=m
 CONFIG_CRYPTO_WORKQUEUE=y
 CONFIG_CRYPTO_CRYPTD=y
+CONFIG_CRYPTO_MCRYPTD=m
 CONFIG_CRYPTO_AUTHENC=m
 CONFIG_CRYPTO_TEST=m
 
 CONFIG_CRYPTO_AUTHENC=m
 CONFIG_CRYPTO_TEST=m
 
@@ -4902,7 +4983,7 @@ CONFIG_CRYPTO_RMD128=m
 CONFIG_CRYPTO_RMD160=m
 CONFIG_CRYPTO_RMD256=m
 CONFIG_CRYPTO_RMD320=m
 CONFIG_CRYPTO_RMD160=m
 CONFIG_CRYPTO_RMD256=m
 CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA1=y
 CONFIG_CRYPTO_SHA256=y
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_TGR192=m
 CONFIG_CRYPTO_SHA256=y
 CONFIG_CRYPTO_SHA512=m
 CONFIG_CRYPTO_TGR192=m
@@ -4949,10 +5030,10 @@ CONFIG_CRYPTO_USER_API_HASH=y
 CONFIG_CRYPTO_USER_API_SKCIPHER=y
 CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
 CONFIG_CRYPTO_USER_API_SKCIPHER=y
 CONFIG_CRYPTO_HASH_INFO=y
 CONFIG_CRYPTO_HW=y
-CONFIG_ASYMMETRIC_KEY_TYPE=m
-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
-CONFIG_PUBLIC_KEY_ALGO_RSA=m
-CONFIG_X509_CERTIFICATE_PARSER=m
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_PUBLIC_KEY_ALGO_RSA=y
+CONFIG_X509_CERTIFICATE_PARSER=y
 CONFIG_PKCS7_MESSAGE_PARSER=m
 # CONFIG_PKCS7_TEST_KEY is not set
 CONFIG_VIRTUALIZATION=y
 CONFIG_PKCS7_MESSAGE_PARSER=m
 # CONFIG_PKCS7_TEST_KEY is not set
 CONFIG_VIRTUALIZATION=y
@@ -5023,8 +5104,9 @@ CONFIG_ARCH_HAS_ATOMIC64_DEC_IF_POSITIVE=y
 CONFIG_AVERAGE=y
 CONFIG_CLZ_TAB=y
 CONFIG_CORDIC=m
 CONFIG_AVERAGE=y
 CONFIG_CLZ_TAB=y
 CONFIG_CORDIC=m
-CONFIG_MPILIB=m
-CONFIG_OID_REGISTRY=m
+CONFIG_MPILIB=y
+CONFIG_SIGNATURE=y
+CONFIG_OID_REGISTRY=y
 CONFIG_FONT_SUPPORT=y
 # CONFIG_FONTS is not set
 CONFIG_FONT_8x8=y
 CONFIG_FONT_SUPPORT=y
 # CONFIG_FONTS is not set
 CONFIG_FONT_8x8=y
index b7b4954a3041a3805834e4830ed82ee859793d77..388fbff087e645ecab51829a0f67f68d17f929a1 100644 (file)
@@ -13,10 +13,15 @@ CONFIG_HIGHMEM4G=y
 # CONFIG_VMSPLIT_2G_OPT is not set
 # CONFIG_PHYS_ADDR_T_64BIT is not set
 
 # CONFIG_VMSPLIT_2G_OPT is not set
 # CONFIG_PHYS_ADDR_T_64BIT is not set
 
+#
+# Power management and ACPI options
+#
+CONFIG_PM_OPP=y
+
 #
 # CPU Frequency scaling
 #
 #
 # CPU Frequency scaling
 #
-# CONFIG_GENERIC_CPUFREQ_CPU0 is not set
+CONFIG_CPUFREQ_DT=m
 
 #
 # Bus options (PCI etc.)
 
 #
 # Bus options (PCI etc.)
@@ -70,7 +75,9 @@ CONFIG_OF_PCI_IRQ=y
 # Distributed Switch Architecture drivers
 #
 CONFIG_AMD_XGBE=m
 # Distributed Switch Architecture drivers
 #
 CONFIG_AMD_XGBE=m
+CONFIG_ARC_EMAC_CORE=m
 # CONFIG_ARC_EMAC is not set
 # CONFIG_ARC_EMAC is not set
+CONFIG_EMAC_ROCKCHIP=m
 CONFIG_BCMGENET=m
 CONFIG_SYSTEMPORT=m
 
 CONFIG_BCMGENET=m
 CONFIG_SYSTEMPORT=m
 
@@ -89,6 +96,7 @@ CONFIG_KEYBOARD_STMPE=m
 CONFIG_KEYBOARD_OMAP4=m
 CONFIG_KEYBOARD_CAP1106=m
 CONFIG_MOUSE_PS2_OLPC=y
 CONFIG_KEYBOARD_OMAP4=m
 CONFIG_KEYBOARD_CAP1106=m
 CONFIG_MOUSE_PS2_OLPC=y
+CONFIG_INPUT_MAX77693_HAPTIC=m
 CONFIG_INPUT_MAX8997_HAPTIC=m
 # CONFIG_INPUT_GPIO_BEEPER is not set
 CONFIG_INPUT_PWM_BEEPER=m
 CONFIG_INPUT_MAX8997_HAPTIC=m
 # CONFIG_INPUT_GPIO_BEEPER is not set
 CONFIG_INPUT_PWM_BEEPER=m
@@ -129,7 +137,6 @@ CONFIG_PINMUX=y
 CONFIG_PINCONF=y
 CONFIG_GENERIC_PINCONF=y
 CONFIG_PINCTRL_AS3722=y
 CONFIG_PINCONF=y
 CONFIG_GENERIC_PINCONF=y
 CONFIG_PINCTRL_AS3722=y
-CONFIG_PINCTRL_BCM281XX=y
 # CONFIG_PINCTRL_SINGLE is not set
 CONFIG_PINCTRL_PALMAS=y
 CONFIG_OF_GPIO=y
 # CONFIG_PINCTRL_SINGLE is not set
 CONFIG_PINCTRL_PALMAS=y
 CONFIG_OF_GPIO=y
@@ -158,17 +165,15 @@ CONFIG_GPIO_CS5535=y
 #
 # CONFIG_GPIO_MCP23S08 is not set
 
 #
 # CONFIG_GPIO_MCP23S08 is not set
 
-#
-# MODULbus GPIO expanders:
-#
-# CONFIG_GPIO_BCM_KONA is not set
-
 #
 # 1-wire Slaves
 #
 CONFIG_BATTERY_OLPC=y
 CONFIG_POWER_RESET_AS3722=y
 CONFIG_POWER_RESET_GPIO=y
 #
 # 1-wire Slaves
 #
 CONFIG_BATTERY_OLPC=y
 CONFIG_POWER_RESET_AS3722=y
 CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
+CONFIG_POWER_RESET_LTC2952=y
+CONFIG_POWER_RESET_SYSCON=y
 
 #
 # Native drivers
 
 #
 # Native drivers
@@ -189,6 +194,8 @@ CONFIG_SENSORS_PWM_FAN=m
 # Multifunction device drivers
 #
 CONFIG_MFD_AS3722=y
 # Multifunction device drivers
 #
 CONFIG_MFD_AS3722=y
+CONFIG_MFD_HI6421_PMIC=m
+CONFIG_MFD_RK808=y
 CONFIG_MFD_STMPE=y
 
 #
 CONFIG_MFD_STMPE=y
 
 #
@@ -196,6 +203,9 @@ CONFIG_MFD_STMPE=y
 #
 CONFIG_STMPE_I2C=y
 CONFIG_REGULATOR_AS3722=m
 #
 CONFIG_STMPE_I2C=y
 CONFIG_REGULATOR_AS3722=m
+CONFIG_REGULATOR_HI6421=m
+CONFIG_REGULATOR_PWM=m
+CONFIG_REGULATOR_RK808=m
 CONFIG_REGULATOR_TPS65218=m
 
 #
 CONFIG_REGULATOR_TPS65218=m
 
 #
@@ -224,11 +234,17 @@ CONFIG_MMC_SDHCI_OF_ARASAN=m
 #
 CONFIG_LEDS_PWM=m
 
 #
 CONFIG_LEDS_PWM=m
 
+#
+# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
+#
+CONFIG_LEDS_SYSCON=y
+
 #
 # I2C RTC drivers
 #
 CONFIG_RTC_DRV_AS3722=m
 CONFIG_RTC_DRV_HYM8563=m
 #
 # I2C RTC drivers
 #
 CONFIG_RTC_DRV_AS3722=m
 CONFIG_RTC_DRV_HYM8563=m
+CONFIG_RTC_DRV_RK808=m
 
 #
 # on-CPU RTC drivers
 
 #
 # on-CPU RTC drivers
@@ -256,6 +272,7 @@ CONFIG_XO1_RFKILL=m
 #
 # Common Clock Framework
 #
 #
 # Common Clock Framework
 #
+CONFIG_COMMON_CLK_RK808=m
 # CONFIG_COMMON_CLK_SI5351 is not set
 CONFIG_COMMON_CLK_SI570=m
 CONFIG_COMMON_CLK_QCOM=m
 # CONFIG_COMMON_CLK_SI5351 is not set
 CONFIG_COMMON_CLK_SI570=m
 CONFIG_COMMON_CLK_QCOM=m
@@ -278,6 +295,11 @@ CONFIG_OF_IOMMU=y
 #
 CONFIG_VF610_ADC=m
 
 #
 CONFIG_VF610_ADC=m
 
+#
+# Digital to analog converters
+#
+CONFIG_MAX5821=m
+
 #
 # Temperature sensors
 #
 #
 # Temperature sensors
 #
@@ -286,6 +308,8 @@ CONFIG_PWM_SYSFS=y
 CONFIG_PWM_FSL_FTM=m
 CONFIG_PWM_LP3943=m
 CONFIG_PWM_LPSS=m
 CONFIG_PWM_FSL_FTM=m
 CONFIG_PWM_LP3943=m
 CONFIG_PWM_LPSS=m
+CONFIG_PWM_LPSS_PCI=m
+CONFIG_PWM_LPSS_PLATFORM=m
 CONFIG_PWM_PCA9685=m
 CONFIG_PWM_TWL=m
 CONFIG_PWM_TWL_LED=m
 CONFIG_PWM_PCA9685=m
 CONFIG_PWM_TWL=m
 CONFIG_PWM_TWL_LED=m
index 31c2a243dc7abc8b55daf1dc606e9f767847e1d5..0764a317f845a433eb11c60d9404253871d0d2b4 100644 (file)
@@ -1,5 +1,6 @@
 CONFIG_X86=y
 CONFIG_INSTRUCTION_DECODER=y
 CONFIG_X86=y
 CONFIG_INSTRUCTION_DECODER=y
+CONFIG_PERF_EVENTS_INTEL_UNCORE=y
 CONFIG_NEED_SG_DMA_LENGTH=y
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
 CONFIG_NEED_SG_DMA_LENGTH=y
 CONFIG_GENERIC_ISA_DMA=y
 CONFIG_ARCH_MAY_HAVE_PC_FDC=y
@@ -43,7 +44,7 @@ CONFIG_RCU_NOCB_CPU=y
 # CONFIG_RCU_NOCB_CPU_NONE is not set
 # CONFIG_RCU_NOCB_CPU_ZERO is not set
 CONFIG_RCU_NOCB_CPU_ALL=y
 # CONFIG_RCU_NOCB_CPU_NONE is not set
 # CONFIG_RCU_NOCB_CPU_ZERO is not set
 CONFIG_RCU_NOCB_CPU_ALL=y
-CONFIG_ARCH_WANTS_PROT_NUMA_PROT_NONE=y
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
 CONFIG_SYSCTL_EXCEPTION_TRACE=y
 CONFIG_PCSPKR_PLATFORM=y
 
 CONFIG_SYSCTL_EXCEPTION_TRACE=y
 CONFIG_PCSPKR_PLATFORM=y
 
@@ -69,10 +70,13 @@ CONFIG_QUEUE_RWLOCK=y
 # Processor type and features
 #
 CONFIG_SMP=y
 # Processor type and features
 #
 CONFIG_SMP=y
+CONFIG_X86_FEATURE_NAMES=y
 CONFIG_X86_MPPARSE=y
 CONFIG_X86_EXTENDED_PLATFORM=y
 # CONFIG_X86_GOLDFISH is not set
 CONFIG_X86_INTEL_LPSS=y
 CONFIG_X86_MPPARSE=y
 CONFIG_X86_EXTENDED_PLATFORM=y
 # CONFIG_X86_GOLDFISH is not set
 CONFIG_X86_INTEL_LPSS=y
+CONFIG_IOSF_MBI=m
+# CONFIG_IOSF_MBI_DEBUG is not set
 CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
 CONFIG_SCHED_OMIT_FRAME_POINTER=y
 CONFIG_HYPERVISOR_GUEST=y
 CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
 CONFIG_SCHED_OMIT_FRAME_POINTER=y
 CONFIG_HYPERVISOR_GUEST=y
@@ -116,7 +120,6 @@ CONFIG_X86_MCE_AMD=y
 CONFIG_X86_MCE_THRESHOLD=y
 # CONFIG_X86_MCE_INJECT is not set
 CONFIG_X86_THERMAL_VECTOR=y
 CONFIG_X86_MCE_THRESHOLD=y
 # CONFIG_X86_MCE_INJECT is not set
 CONFIG_X86_THERMAL_VECTOR=y
-# CONFIG_X86_16BIT is not set
 CONFIG_I8K=m
 CONFIG_MICROCODE=m
 CONFIG_MICROCODE_INTEL=y
 CONFIG_I8K=m
 CONFIG_MICROCODE=m
 CONFIG_MICROCODE_INTEL=y
@@ -298,7 +301,6 @@ CONFIG_HOTPLUG_PCI_ACPI_IBM=m
 #
 # Executable file formats / Emulations
 #
 #
 # Executable file formats / Emulations
 #
-CONFIG_IOSF_MBI=m
 CONFIG_PMC_ATOM=y
 
 #
 CONFIG_PMC_ATOM=y
 
 #
@@ -394,6 +396,7 @@ CONFIG_MEGARAID_MM=m
 CONFIG_MEGARAID_MAILBOX=m
 CONFIG_SCSI_BUSLOGIC=m
 CONFIG_VMWARE_PVSCSI=m
 CONFIG_MEGARAID_MAILBOX=m
 CONFIG_SCSI_BUSLOGIC=m
 CONFIG_VMWARE_PVSCSI=m
+CONFIG_XEN_SCSI_FRONTEND=m
 CONFIG_FCOE_FNIC=m
 CONFIG_SCSI_EATA=m
 CONFIG_SCSI_EATA_TAGGED_QUEUE=y
 CONFIG_FCOE_FNIC=m
 CONFIG_SCSI_EATA=m
 CONFIG_SCSI_EATA_TAGGED_QUEUE=y
@@ -473,6 +476,8 @@ CONFIG_IXGBE_DCA=y
 CONFIG_IXGBEVF=m
 CONFIG_I40E_VXLAN=y
 CONFIG_I40EVF=m
 CONFIG_IXGBEVF=m
 CONFIG_I40E_VXLAN=y
 CONFIG_I40EVF=m
+CONFIG_FM10K=m
+CONFIG_FM10K_VXLAN=y
 CONFIG_SKGE_GENESIS=y
 CONFIG_MYRI10GE_DCA=y
 CONFIG_QLCNIC_SRIOV=y
 CONFIG_SKGE_GENESIS=y
 CONFIG_MYRI10GE_DCA=y
 CONFIG_QLCNIC_SRIOV=y
@@ -514,7 +519,6 @@ CONFIG_XEN_NETDEV_BACKEND=m
 #
 # Input device support
 #
 #
 # Input device support
 #
-CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_MATRIXKMAP=m
 
 #
 CONFIG_INPUT_MATRIXKMAP=m
 
 #
@@ -557,6 +561,7 @@ CONFIG_NOZOMI=m
 # Serial drivers
 #
 CONFIG_SERIAL_8250_PNP=y
 # Serial drivers
 #
 CONFIG_SERIAL_8250_PNP=y
+CONFIG_SERIAL_8250_FINTEK=m
 
 #
 # Non-8250 serial port support
 
 #
 # Non-8250 serial port support
@@ -626,11 +631,13 @@ CONFIG_PTP_1588_CLOCK=m
 #
 # CONFIG_PINCTRL_BAYTRAIL is not set
 CONFIG_GPIO_ACPI=y
 #
 # CONFIG_PINCTRL_BAYTRAIL is not set
 CONFIG_GPIO_ACPI=y
+CONFIG_GPIO_GENERIC=m
 
 #
 # Memory mapped GPIO drivers:
 #
 # CONFIG_GPIO_GENERIC_PLATFORM is not set
 
 #
 # Memory mapped GPIO drivers:
 #
 # CONFIG_GPIO_GENERIC_PLATFORM is not set
+CONFIG_GPIO_DWAPB=m
 # CONFIG_GPIO_IT8761E is not set
 # CONFIG_GPIO_F7188X is not set
 CONFIG_GPIO_SCH=m
 # CONFIG_GPIO_IT8761E is not set
 # CONFIG_GPIO_F7188X is not set
 CONFIG_GPIO_SCH=m
@@ -642,6 +649,11 @@ CONFIG_GPIO_ICH=m
 #
 # CONFIG_GPIO_INTEL_MID is not set
 
 #
 # CONFIG_GPIO_INTEL_MID is not set
 
+#
+# SPI GPIO expanders:
+#
+CONFIG_GPIO_MCP23S08=m
+
 #
 # 1-wire Slaves
 #
 #
 # 1-wire Slaves
 #
@@ -682,8 +694,9 @@ CONFIG_SENSORS_ACPI_POWER=m
 CONFIG_SENSORS_ATK0110=m
 CONFIG_INTEL_POWERCLAMP=m
 CONFIG_X86_PKG_TEMP_THERMAL=m
 CONFIG_SENSORS_ATK0110=m
 CONFIG_INTEL_POWERCLAMP=m
 CONFIG_X86_PKG_TEMP_THERMAL=m
-CONFIG_ACPI_INT3403_THERMAL=m
 CONFIG_INTEL_SOC_DTS_THERMAL=m
 CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INT340X_THERMAL=m
+CONFIG_ACPI_THERMAL_REL=m
 
 #
 # Watchdog Device Drivers
 
 #
 # Watchdog Device Drivers
@@ -802,11 +815,13 @@ CONFIG_VIDEO_SAA7134=m
 CONFIG_VIDEO_SAA7134_ALSA=m
 CONFIG_VIDEO_SAA7134_RC=y
 CONFIG_VIDEO_SAA7134_DVB=m
 CONFIG_VIDEO_SAA7134_ALSA=m
 CONFIG_VIDEO_SAA7134_RC=y
 CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_SAA7134_GO7007=m
 CONFIG_VIDEO_SAA7164=m
 
 #
 # Media digital TV PCI Adapters
 #
 CONFIG_VIDEO_SAA7164=m
 
 #
 # Media digital TV PCI Adapters
 #
+CONFIG_DVB_AV7110_IR=y
 CONFIG_DVB_AV7110=m
 CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
 CONFIG_DVB_AV7110=m
 CONFIG_DVB_AV7110_OSD=y
 CONFIG_DVB_BUDGET_CORE=m
@@ -1045,11 +1060,6 @@ CONFIG_EDAC_I5000=m
 CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I7300=m
 
 CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I7300=m
 
-#
-# Platform RTC drivers
-#
-CONFIG_RTC_DRV_EFI=m
-
 #
 # DMA Devices
 #
 #
 # DMA Devices
 #
@@ -1241,6 +1251,7 @@ CONFIG_EFIVAR_FS=m
 # Compile-time checks and compiler options
 #
 CONFIG_ARCH_WANT_FRAME_POINTERS=y
 # Compile-time checks and compiler options
 #
 CONFIG_ARCH_WANT_FRAME_POINTERS=y
+CONFIG_FRAME_POINTER=y
 
 #
 # Memory Debugging
 
 #
 # Memory Debugging
@@ -1264,6 +1275,7 @@ CONFIG_RCU_CPU_STALL_TIMEOUT=60
 CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y
 # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
 CONFIG_USER_STACKTRACE_SUPPORT=y
 CONFIG_ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS=y
 # CONFIG_DEBUG_STRICT_USER_COPY_CHECKS is not set
 CONFIG_USER_STACKTRACE_SUPPORT=y
+CONFIG_FUNCTION_GRAPH_TRACER=y
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
 # CONFIG_MMIOTRACE is not set
 CONFIG_FTRACE_SYSCALLS=y
 CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
 # CONFIG_MMIOTRACE is not set
index db5fd40505856c81160ca58e9e361b59ddb9cd65..ac1488d18a2e7f6b365cf8c3c3dd386e82861e7b 100644 (file)
@@ -244,6 +244,7 @@ CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
 CONFIG_CRYPTO_SHA1_SSSE3=m
 CONFIG_CRYPTO_SHA256_SSSE3=m
 CONFIG_CRYPTO_SHA512_SSSE3=m
 CONFIG_CRYPTO_SHA1_SSSE3=m
 CONFIG_CRYPTO_SHA256_SSSE3=m
 CONFIG_CRYPTO_SHA512_SSSE3=m
+# CONFIG_CRYPTO_SHA1_MB is not set
 CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
 
 #
 CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
 
 #
index eec42b0ee336813f8665b923da4081648ea80dad..d6c33e07ecf980a7b58b0127482cecaee72575da 100644 (file)
@@ -4,8 +4,8 @@
 ###############################################################################
 
 name       = kernel
 ###############################################################################
 
 name       = kernel
-version    = 3.17.4
-release    = 2
+version    = 3.18.2
+release    = 1
 thisapp    = linux-%{version}
 
 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
 thisapp    = linux-%{version}
 
 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
@@ -57,6 +57,7 @@ build
                python-devel
                slang-devel
                xmlto
                python-devel
                slang-devel
                xmlto
+               xz
 
                /sbin/depmod
                %{kernel_logo}
 
                /sbin/depmod
                %{kernel_logo}
@@ -289,7 +290,7 @@ build
                                %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
 
                        find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
                                %{BUILDROOT}/usr/lib/modules/${fullversion}/build/include/config/auto.conf
 
                        find %{BUILDROOT}/usr/lib/modules/${fullversion} -name "*.ko" -type f | \
-                               xargs chmod u+x
+                               xargs --no-run-if-empty chmod u+x
 
                        # Move all development files to /usr/src.
                        mkdir -p %{BUILDROOT}/usr/src/kernels
 
                        # Move all development files to /usr/src.
                        mkdir -p %{BUILDROOT}/usr/src/kernels
similarity index 94%
rename from kernel/patches/grsecurity-3.0-3.17.4-201411220955.patch
rename to kernel/patches/grsecurity-3.0-3.18.2-201501120821.patch
index 8d9a2849b75343b77d5febce5f94019bc5a7d2b7..34d077be60776cdf346652347e3edc0bdf2d3938 100644 (file)
@@ -235,7 +235,7 @@ index 9de9813..1462492 100644
 +zconf.lex.c
  zoffset.h
 diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
 +zconf.lex.c
  zoffset.h
 diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt
-index 764f599..c600e2f 100644
+index a311db8..415b28c 100644
 --- a/Documentation/kbuild/makefiles.txt
 +++ b/Documentation/kbuild/makefiles.txt
 @@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles.
 --- a/Documentation/kbuild/makefiles.txt
 +++ b/Documentation/kbuild/makefiles.txt
 @@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles.
@@ -313,10 +313,10 @@ index 764f599..c600e2f 100644
        A typical pattern in a Kbuild file looks like this:
  
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
        A typical pattern in a Kbuild file looks like this:
  
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 1edd5fd..107ff46 100644
+index 479f332..2475ac2 100644
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
-@@ -1155,6 +1155,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -1182,6 +1182,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0.
                        Default: 1024
  
                        Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0.
                        Default: 1024
  
@@ -327,7 +327,7 @@ index 1edd5fd..107ff46 100644
        hashdist=       [KNL,NUMA] Large hashes allocated during boot
                        are distributed across NUMA nodes.  Defaults on
                        for 64-bit NUMA, off otherwise.
        hashdist=       [KNL,NUMA] Large hashes allocated during boot
                        are distributed across NUMA nodes.  Defaults on
                        for 64-bit NUMA, off otherwise.
-@@ -2175,6 +2179,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2259,6 +2263,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        noexec=on: enable non-executable mappings (default)
                        noexec=off: disable non-executable mappings
  
                        noexec=on: enable non-executable mappings (default)
                        noexec=off: disable non-executable mappings
  
@@ -338,7 +338,7 @@ index 1edd5fd..107ff46 100644
        nosmap          [X86]
                        Disable SMAP (Supervisor Mode Access Prevention)
                        even if it is supported by processor.
        nosmap          [X86]
                        Disable SMAP (Supervisor Mode Access Prevention)
                        even if it is supported by processor.
-@@ -2467,6 +2475,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2551,6 +2559,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        the specified number of seconds.  This is to be used if
                        your oopses keep scrolling off the screen.
  
                        the specified number of seconds.  This is to be used if
                        your oopses keep scrolling off the screen.
  
@@ -370,22 +370,21 @@ index 1edd5fd..107ff46 100644
  
        pcd.            [PARIDE]
 diff --git a/Makefile b/Makefile
  
        pcd.            [PARIDE]
 diff --git a/Makefile b/Makefile
-index b60b64d..33b7ec8 100644
+index 8f73b41..320950a 100644
 --- a/Makefile
 +++ b/Makefile
 --- a/Makefile
 +++ b/Makefile
-@@ -303,8 +303,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
+@@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
  HOSTCC       = gcc
  HOSTCXX      = g++
  HOSTCC       = gcc
  HOSTCXX      = g++
--HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
+ HOSTCFLAGS   = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89
 -HOSTCXXFLAGS = -O2
 -HOSTCXXFLAGS = -O2
-+HOSTCFLAGS   = -Wall -W -Wmissing-prototypes -Wstrict-prototypes -Wno-unused-parameter -Wno-missing-field-initializers -O2 -fomit-frame-pointer -fno-delete-null-pointer-checks
++HOSTCFLAGS   = -Wall -W -Wmissing-prototypes -Wstrict-prototypes -Wno-unused-parameter -Wno-missing-field-initializers -O2 -fomit-frame-pointer -std=gnu89 -fno-delete-null-pointer-checks
 +HOSTCFLAGS  += $(call cc-option, -Wno-empty-body)
 +HOSTCXXFLAGS = -O2 -Wall -W -Wno-array-bounds
  
  ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
  HOSTCFLAGS  += -Wno-unused-value -Wno-unused-parameter \
 +HOSTCFLAGS  += $(call cc-option, -Wno-empty-body)
 +HOSTCXXFLAGS = -O2 -Wall -W -Wno-array-bounds
  
  ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1)
  HOSTCFLAGS  += -Wno-unused-value -Wno-unused-parameter \
-@@ -450,8 +451,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
+@@ -445,8 +447,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
  # Rules shared between *config targets and build targets
  
  # Basic helpers built in scripts/
  # Rules shared between *config targets and build targets
  
  # Basic helpers built in scripts/
@@ -396,7 +395,7 @@ index b60b64d..33b7ec8 100644
        $(Q)$(MAKE) $(build)=scripts/basic
        $(Q)rm -f .tmp_quiet_recordmcount
  
        $(Q)$(MAKE) $(build)=scripts/basic
        $(Q)rm -f .tmp_quiet_recordmcount
  
-@@ -625,6 +626,72 @@ endif
+@@ -620,6 +622,72 @@ endif
  # Tell gcc to never replace conditional load with a non-conditional one
  KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
  
  # Tell gcc to never replace conditional load with a non-conditional one
  KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
  
@@ -469,7 +468,7 @@ index b60b64d..33b7ec8 100644
  ifdef CONFIG_READABLE_ASM
  # Disable optimizations that make assembler listings hard to read.
  # reorder blocks reorders the control in the function
  ifdef CONFIG_READABLE_ASM
  # Disable optimizations that make assembler listings hard to read.
  # reorder blocks reorders the control in the function
-@@ -717,7 +784,7 @@ KBUILD_CFLAGS   += $(call cc-option, -gsplit-dwarf, -g)
+@@ -712,7 +780,7 @@ KBUILD_CFLAGS   += $(call cc-option, -gsplit-dwarf, -g)
  else
  KBUILD_CFLAGS += -g
  endif
  else
  KBUILD_CFLAGS += -g
  endif
@@ -478,7 +477,7 @@ index b60b64d..33b7ec8 100644
  endif
  ifdef CONFIG_DEBUG_INFO_DWARF4
  KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
  endif
  ifdef CONFIG_DEBUG_INFO_DWARF4
  KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,)
-@@ -867,7 +934,7 @@ export mod_sign_cmd
+@@ -877,7 +945,7 @@ export mod_sign_cmd
  
  
  ifeq ($(KBUILD_EXTMOD),)
  
  
  ifeq ($(KBUILD_EXTMOD),)
@@ -487,7 +486,7 @@ index b60b64d..33b7ec8 100644
  
  vmlinux-dirs  := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
                     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
  
  vmlinux-dirs  := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
                     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-@@ -916,6 +983,8 @@ endif
+@@ -924,6 +992,8 @@ endif
  
  # The actual objects are generated when descending,
  # make sure no implicit rule kicks in
  
  # The actual objects are generated when descending,
  # make sure no implicit rule kicks in
@@ -496,7 +495,7 @@ index b60b64d..33b7ec8 100644
  $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
  
  # Handle descending into subdirectories listed in $(vmlinux-dirs)
  $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
  
  # Handle descending into subdirectories listed in $(vmlinux-dirs)
-@@ -925,7 +994,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
+@@ -933,7 +1003,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
  # Error messages still appears in the original language
  
  PHONY += $(vmlinux-dirs)
  # Error messages still appears in the original language
  
  PHONY += $(vmlinux-dirs)
@@ -505,7 +504,7 @@ index b60b64d..33b7ec8 100644
        $(Q)$(MAKE) $(build)=$@
  
  define filechk_kernel.release
        $(Q)$(MAKE) $(build)=$@
  
  define filechk_kernel.release
-@@ -968,10 +1037,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
+@@ -976,10 +1046,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
  
  archprepare: archheaders archscripts prepare1 scripts_basic
  
  
  archprepare: archheaders archscripts prepare1 scripts_basic
  
@@ -519,7 +518,7 @@ index b60b64d..33b7ec8 100644
  prepare: prepare0
  
  # Generate some files
  prepare: prepare0
  
  # Generate some files
-@@ -1086,6 +1158,8 @@ all: modules
+@@ -1094,6 +1167,8 @@ all: modules
  # using awk while concatenating to the final file.
  
  PHONY += modules
  # using awk while concatenating to the final file.
  
  PHONY += modules
@@ -528,7 +527,7 @@ index b60b64d..33b7ec8 100644
  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
        $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
        @$(kecho) '  Building modules, stage 2.';
  modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
        $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
        @$(kecho) '  Building modules, stage 2.';
-@@ -1101,7 +1175,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
+@@ -1109,7 +1184,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
  
  # Target to prepare building external modules
  PHONY += modules_prepare
  
  # Target to prepare building external modules
  PHONY += modules_prepare
@@ -537,7 +536,7 @@ index b60b64d..33b7ec8 100644
  
  # Target to install modules
  PHONY += modules_install
  
  # Target to install modules
  PHONY += modules_install
-@@ -1167,7 +1241,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \
+@@ -1175,7 +1250,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \
                  Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
                  signing_key.priv signing_key.x509 x509.genkey         \
                  extra_certificates signing_key.x509.keyid             \
                  Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \
                  signing_key.priv signing_key.x509 x509.genkey         \
                  extra_certificates signing_key.x509.keyid             \
@@ -549,7 +548,7 @@ index b60b64d..33b7ec8 100644
  
  # clean - Delete most, but leave enough to build external modules
  #
  
  # clean - Delete most, but leave enough to build external modules
  #
-@@ -1206,7 +1283,7 @@ distclean: mrproper
+@@ -1214,7 +1292,7 @@ distclean: mrproper
        @find $(srctree) $(RCS_FIND_IGNORE) \
                \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
                -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
        @find $(srctree) $(RCS_FIND_IGNORE) \
                \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
                -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
@@ -558,7 +557,7 @@ index b60b64d..33b7ec8 100644
                -type f -print | xargs rm -f
  
  
                -type f -print | xargs rm -f
  
  
-@@ -1372,6 +1449,8 @@ PHONY += $(module-dirs) modules
+@@ -1380,6 +1458,8 @@ PHONY += $(module-dirs) modules
  $(module-dirs): crmodverdir $(objtree)/Module.symvers
        $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
  
  $(module-dirs): crmodverdir $(objtree)/Module.symvers
        $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
  
@@ -567,7 +566,7 @@ index b60b64d..33b7ec8 100644
  modules: $(module-dirs)
        @$(kecho) '  Building modules, stage 2.';
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
  modules: $(module-dirs)
        @$(kecho) '  Building modules, stage 2.';
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
-@@ -1512,17 +1591,21 @@ else
+@@ -1520,17 +1600,21 @@ else
          target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
  endif
  
          target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
  endif
  
@@ -593,10 +592,10 @@ index b60b64d..33b7ec8 100644
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
  %.symtypes: %.c prepare scripts FORCE
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
  %.symtypes: %.c prepare scripts FORCE
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
-@@ -1532,11 +1615,15 @@ endif
-       $(cmd_crmodverdir)
-       $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
+@@ -1542,11 +1626,15 @@ endif
        $(build)=$(build-dir)
        $(build)=$(build-dir)
+ # Make sure the latest headers are built for Documentation
+ Documentation/: headers_install
 -%/: prepare scripts FORCE
 +%/: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS)
 +%/: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS)
 -%/: prepare scripts FORCE
 +%/: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS)
 +%/: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS)
@@ -612,10 +611,10 @@ index b60b64d..33b7ec8 100644
        $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
        $(build)=$(build-dir) $(@:.ko=.o)
 diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h
        $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1)   \
        $(build)=$(build-dir) $(@:.ko=.o)
 diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h
-index ed60a1e..47f1a55 100644
+index 8f8eafb..3405f46 100644
 --- a/arch/alpha/include/asm/atomic.h
 +++ b/arch/alpha/include/asm/atomic.h
 --- a/arch/alpha/include/asm/atomic.h
 +++ b/arch/alpha/include/asm/atomic.h
-@@ -292,4 +292,14 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
+@@ -239,4 +239,14 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
  #define atomic_dec(v) atomic_sub(1,(v))
  #define atomic64_dec(v) atomic64_sub(1,(v))
  
  #define atomic_dec(v) atomic_sub(1,(v))
  #define atomic64_dec(v) atomic64_sub(1,(v))
  
@@ -727,10 +726,10 @@ index 2fd00b7..cfd5069 100644
  
        for (i = 0; i < n; i++) {
 diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
  
        for (i = 0; i < n; i++) {
 diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c
-index 1402fcc..0b1abd2 100644
+index f9c732e..78fbb0f 100644
 --- a/arch/alpha/kernel/osf_sys.c
 +++ b/arch/alpha/kernel/osf_sys.c
 --- a/arch/alpha/kernel/osf_sys.c
 +++ b/arch/alpha/kernel/osf_sys.c
-@@ -1298,10 +1298,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
+@@ -1295,10 +1295,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
     generic version except that we know how to honor ADDR_LIMIT_32BIT.  */
  
  static unsigned long
     generic version except that we know how to honor ADDR_LIMIT_32BIT.  */
  
  static unsigned long
@@ -744,7 +743,7 @@ index 1402fcc..0b1abd2 100644
  
        info.flags = 0;
        info.length = len;
  
        info.flags = 0;
        info.length = len;
-@@ -1309,6 +1310,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len,
+@@ -1306,6 +1307,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len,
        info.high_limit = limit;
        info.align_mask = 0;
        info.align_offset = 0;
        info.high_limit = limit;
        info.align_mask = 0;
        info.align_offset = 0;
@@ -752,7 +751,7 @@ index 1402fcc..0b1abd2 100644
        return vm_unmapped_area(&info);
  }
  
        return vm_unmapped_area(&info);
  }
  
-@@ -1341,20 +1343,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1338,20 +1340,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
           merely specific addresses, but regions of memory -- perhaps
           this feature should be incorporated into all ports?  */
  
           merely specific addresses, but regions of memory -- perhaps
           this feature should be incorporated into all ports?  */
  
@@ -941,27 +940,11 @@ index 98838a0..b304fb4 100644
        } else if (!cause) {
                /* Allow reads even for write-only mappings */
                if (!(vma->vm_flags & (VM_READ | VM_WRITE)))
        } else if (!cause) {
                /* Allow reads even for write-only mappings */
                if (!(vma->vm_flags & (VM_READ | VM_WRITE)))
-diff --git a/arch/arc/kernel/kgdb.c b/arch/arc/kernel/kgdb.c
-index a2ff5c5..ecf6a78 100644
---- a/arch/arc/kernel/kgdb.c
-+++ b/arch/arc/kernel/kgdb.c
-@@ -158,11 +158,6 @@ int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,
-       return -1;
- }
--unsigned long kgdb_arch_pc(int exception, struct pt_regs *regs)
--{
--      return instruction_pointer(regs);
--}
--
- int kgdb_arch_init(void)
- {
-       single_step_data.armed = 0;
 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index 32cbbd5..c102df9 100644
+index 89c4b5c..847a7be 100644
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1719,7 +1719,7 @@ config ALIGNMENT_TRAP
+@@ -1740,7 +1740,7 @@ config ALIGNMENT_TRAP
  
  config UACCESS_WITH_MEMCPY
        bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
  
  config UACCESS_WITH_MEMCPY
        bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
@@ -970,7 +953,7 @@ index 32cbbd5..c102df9 100644
        default y if CPU_FEROCEON
        help
          Implement faster copy_to_user and clear_user methods for CPU
        default y if CPU_FEROCEON
        help
          Implement faster copy_to_user and clear_user methods for CPU
-@@ -1983,6 +1983,7 @@ config XIP_PHYS_ADDR
+@@ -2004,6 +2004,7 @@ config XIP_PHYS_ADDR
  config KEXEC
        bool "Kexec system call (EXPERIMENTAL)"
        depends on (!SMP || PM_SLEEP_SMP)
  config KEXEC
        bool "Kexec system call (EXPERIMENTAL)"
        depends on (!SMP || PM_SLEEP_SMP)
@@ -979,7 +962,7 @@ index 32cbbd5..c102df9 100644
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
 diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
 diff --git a/arch/arm/include/asm/atomic.h b/arch/arm/include/asm/atomic.h
-index 3040359..a494fa3 100644
+index e22c119..8fa9957 100644
 --- a/arch/arm/include/asm/atomic.h
 +++ b/arch/arm/include/asm/atomic.h
 @@ -18,17 +18,41 @@
 --- a/arch/arm/include/asm/atomic.h
 +++ b/arch/arm/include/asm/atomic.h
 @@ -18,17 +18,41 @@
@@ -1011,10 +994,10 @@ index 3040359..a494fa3 100644
   * strex/ldrex monitor on some implementations. The reason we can use it for
   * atomic_set() is the clrex or dummy strex done on every exception return.
   */
   * strex/ldrex monitor on some implementations. The reason we can use it for
   * atomic_set() is the clrex or dummy strex done on every exception return.
   */
- #define atomic_read(v)        (*(volatile int *)&(v)->counter)
+ #define atomic_read(v)        ACCESS_ONCE((v)->counter)
 +static inline int atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
 +static inline int atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
-+      return v->counter;
++      return ACCESS_ONCE(v->counter);
 +}
  #define atomic_set(v,i)       (((v)->counter) = (i))
 +static inline void atomic_set_unchecked(atomic_unchecked_t *v, int i)
 +}
  #define atomic_set(v,i)       (((v)->counter) = (i))
 +static inline void atomic_set_unchecked(atomic_unchecked_t *v, int i)
@@ -1024,153 +1007,91 @@ index 3040359..a494fa3 100644
  
  #if __LINUX_ARM_ARCH__ >= 6
  
  
  #if __LINUX_ARM_ARCH__ >= 6
  
-@@ -44,6 +68,36 @@ static inline void atomic_add(int i, atomic_t *v)
-       prefetchw(&v->counter);
-       __asm__ __volatile__("@ atomic_add\n"
-+"1:   ldrex   %1, [%3]\n"
-+"     adds    %0, %1, %4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
-+"     strex   %1, %0, [%3]\n"
-+"     teq     %1, #0\n"
-+"     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+      : "r" (&v->counter), "Ir" (i)
-+      : "cc");
-+}
-+
-+static inline void atomic_add_unchecked(int i, atomic_unchecked_t *v)
-+{
-+      unsigned long tmp;
-+      int result;
-+
-+      prefetchw(&v->counter);
-+      __asm__ __volatile__("@ atomic_add_unchecked\n"
- "1:   ldrex   %0, [%3]\n"
- "     add     %0, %0, %4\n"
- "     strex   %1, %0, [%3]\n"
-@@ -63,6 +117,43 @@ static inline int atomic_add_return(int i, atomic_t *v)
-       prefetchw(&v->counter);
-       __asm__ __volatile__("@ atomic_add_return\n"
-+"1:   ldrex   %1, [%3]\n"
-+"     adds    %0, %1, %4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"     mov     %0, %1\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
-+"     strex   %1, %0, [%3]\n"
-+"     teq     %1, #0\n"
-+"     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+      : "r" (&v->counter), "Ir" (i)
-+      : "cc");
-+
-+      smp_mb();
-+
-+      return result;
-+}
-+
-+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
-+{
-+      unsigned long tmp;
-+      int result;
-+
-+      smp_mb();
-+      prefetchw(&v->counter);
-+
-+      __asm__ __volatile__("@ atomic_add_return_unchecked\n"
- "1:   ldrex   %0, [%3]\n"
- "     add     %0, %0, %4\n"
- "     strex   %1, %0, [%3]\n"
-@@ -84,6 +175,36 @@ static inline void atomic_sub(int i, atomic_t *v)
+@@ -38,26 +62,50 @@
+  * to ensure that the update happens.
+  */
  
  
-       prefetchw(&v->counter);
-       __asm__ __volatile__("@ atomic_sub\n"
-+"1:   ldrex   %1, [%3]\n"
-+"     subs    %0, %1, %4\n"
-+
+-#define ATOMIC_OP(op, c_op, asm_op)                                   \
+-static inline void atomic_##op(int i, atomic_t *v)                    \
 +#ifdef CONFIG_PAX_REFCOUNT
 +#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
-+"     strex   %1, %0, [%3]\n"
-+"     teq     %1, #0\n"
-+"     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
++#define __OVERFLOW_POST                       \
++      "       bvc     3f\n"           \
++      "2:     " REFCOUNT_TRAP_INSN "\n"\
++      "3:\n"
++#define __OVERFLOW_POST_RETURN                \
++      "       bvc     3f\n"           \
++"     mov     %0, %1\n"               \
++      "2:     " REFCOUNT_TRAP_INSN "\n"\
++      "3:\n"
++#define __OVERFLOW_EXTABLE            \
++      "4:\n"                          \
 +      _ASM_EXTABLE(2b, 4b)
 +      _ASM_EXTABLE(2b, 4b)
++#else
++#define __OVERFLOW_POST
++#define __OVERFLOW_POST_RETURN
++#define __OVERFLOW_EXTABLE
 +#endif
 +
 +#endif
 +
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+      : "r" (&v->counter), "Ir" (i)
-+      : "cc");
-+}
-+
-+static inline void atomic_sub_unchecked(int i, atomic_unchecked_t *v)
-+{
-+      unsigned long tmp;
-+      int result;
-+
-+      prefetchw(&v->counter);
-+      __asm__ __volatile__("@ atomic_sub_unchecked\n"
- "1:   ldrex   %0, [%3]\n"
- "     sub     %0, %0, %4\n"
- "     strex   %1, %0, [%3]\n"
-@@ -103,11 +224,25 @@ static inline int atomic_sub_return(int i, atomic_t *v)
-       prefetchw(&v->counter);
++#define __ATOMIC_OP(op, suffix, c_op, asm_op, post_op, extable)               \
++static inline void atomic_##op##suffix(int i, atomic##suffix##_t *v)  \
+ {                                                                     \
+       unsigned long tmp;                                              \
+       int result;                                                     \
+                                                                       \
+       prefetchw(&v->counter);                                         \
+-      __asm__ __volatile__("@ atomic_" #op "\n"                       \
++      __asm__ __volatile__("@ atomic_" #op #suffix "\n"               \
+ "1:   ldrex   %0, [%3]\n"                                             \
+ "     " #asm_op "     %0, %0, %4\n"                                   \
++      post_op                                                         \
+ "     strex   %1, %0, [%3]\n"                                         \
+ "     teq     %1, #0\n"                                               \
+-"     bne     1b"                                                     \
++"     bne     1b\n"                                                   \
++      extable                                                         \
+       : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)               \
+       : "r" (&v->counter), "Ir" (i)                                   \
+       : "cc");                                                        \
+ }                                                                     \
  
  
-       __asm__ __volatile__("@ atomic_sub_return\n"
--"1:   ldrex   %0, [%3]\n"
--"     sub     %0, %0, %4\n"
-+"1:   ldrex   %1, [%3]\n"
-+"     subs    %0, %1, %4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"     mov     %0, %1\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
- "     strex   %1, %0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
+-#define ATOMIC_OP_RETURN(op, c_op, asm_op)                            \
+-static inline int atomic_##op##_return(int i, atomic_t *v)            \
++#define ATOMIC_OP(op, c_op, asm_op) __ATOMIC_OP(op, , c_op, asm_op, , )\
++                                  __ATOMIC_OP(op, _unchecked, c_op, asm_op##s, __OVERFLOW_POST, __OVERFLOW_EXTABLE)
 +
 +
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-       : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "Ir" (i)
-       : "cc");
-@@ -152,12 +287,24 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
++#define __ATOMIC_OP_RETURN(op, suffix, c_op, asm_op, post_op, extable)        \
++static inline int atomic_##op##_return##suffix(int i, atomic##suffix##_t *v)\
+ {                                                                     \
+       unsigned long tmp;                                              \
+       int result;                                                     \
+@@ -65,12 +113,14 @@ static inline int atomic_##op##_return(int i, atomic_t *v)                \
+       smp_mb();                                                       \
+       prefetchw(&v->counter);                                         \
+                                                                       \
+-      __asm__ __volatile__("@ atomic_" #op "_return\n"                \
++      __asm__ __volatile__("@ atomic_" #op "_return" #suffix "\n"     \
+ "1:   ldrex   %0, [%3]\n"                                             \
+ "     " #asm_op "     %0, %0, %4\n"                                   \
++      post_op                                                         \
+ "     strex   %1, %0, [%3]\n"                                         \
+ "     teq     %1, #0\n"                                               \
+-"     bne     1b"                                                     \
++"     bne     1b\n"                                                   \
++      extable                                                         \
+       : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)               \
+       : "r" (&v->counter), "Ir" (i)                                   \
+       : "cc");                                                        \
+@@ -80,6 +130,9 @@ static inline int atomic_##op##_return(int i, atomic_t *v)          \
+       return result;                                                  \
+ }
++#define ATOMIC_OP_RETURN(op, c_op, asm_op) __ATOMIC_OP_RETURN(op, , c_op, asm_op, , )\
++                                         __ATOMIC_OP_RETURN(op, _unchecked, c_op, asm_op##s, __OVERFLOW_POST_RETURN, __OVERFLOW_EXTABLE)
++
+ static inline int atomic_cmpxchg(atomic_t *ptr, int old, int new)
+ {
+       int oldval;
+@@ -115,12 +168,24 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
        __asm__ __volatile__ ("@ atomic_add_unless\n"
  "1:   ldrex   %0, [%4]\n"
  "     teq     %0, %5\n"
        __asm__ __volatile__ ("@ atomic_add_unless\n"
  "1:   ldrex   %0, [%4]\n"
  "     teq     %0, %5\n"
@@ -1198,7 +1119,7 @@ index 3040359..a494fa3 100644
        : "=&r" (oldval), "=&r" (newval), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "r" (u), "r" (a)
        : "cc");
        : "=&r" (oldval), "=&r" (newval), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "r" (u), "r" (a)
        : "cc");
-@@ -168,6 +315,28 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -131,14 +196,36 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
        return oldval;
  }
  
        return oldval;
  }
  
@@ -1227,49 +1148,59 @@ index 3040359..a494fa3 100644
  #else /* ARM_ARCH_6 */
  
  #ifdef CONFIG_SMP
  #else /* ARM_ARCH_6 */
  
  #ifdef CONFIG_SMP
-@@ -186,7 +355,17 @@ static inline int atomic_add_return(int i, atomic_t *v)
+ #error SMP not supported on pre-ARMv6 CPUs
+ #endif
  
  
-       return val;
- }
-+
-+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
-+{
-+      return atomic_add_return(i, v);
-+}
-+
- #define atomic_add(i, v)      (void) atomic_add_return(i, v)
-+static inline void atomic_add_unchecked(int i, atomic_unchecked_t *v)
-+{
-+      (void) atomic_add_return(i, v);
-+}
+-#define ATOMIC_OP(op, c_op, asm_op)                                   \
+-static inline void atomic_##op(int i, atomic_t *v)                    \
++#define __ATOMIC_OP(op, suffix, c_op, asm_op)                         \
++static inline void atomic_##op##suffix(int i, atomic##suffix##_t *v)  \
+ {                                                                     \
+       unsigned long flags;                                            \
+                                                                       \
+@@ -147,8 +234,11 @@ static inline void atomic_##op(int i, atomic_t *v)                        \
+       raw_local_irq_restore(flags);                                   \
+ }                                                                     \
  
  
- static inline int atomic_sub_return(int i, atomic_t *v)
- {
-@@ -201,6 +380,10 @@ static inline int atomic_sub_return(int i, atomic_t *v)
-       return val;
+-#define ATOMIC_OP_RETURN(op, c_op, asm_op)                            \
+-static inline int atomic_##op##_return(int i, atomic_t *v)            \
++#define ATOMIC_OP(op, c_op, asm_op) __ATOMIC_OP(op, , c_op, asm_op)   \
++                                  __ATOMIC_OP(op, _unchecked, c_op, asm_op)
++
++#define __ATOMIC_OP_RETURN(op, suffix, c_op, asm_op)                  \
++static inline int atomic_##op##_return##suffix(int i, atomic##suffix##_t *v)\
+ {                                                                     \
+       unsigned long flags;                                            \
+       int val;                                                        \
+@@ -161,6 +251,9 @@ static inline int atomic_##op##_return(int i, atomic_t *v)         \
+       return val;                                                     \
  }
  }
- #define atomic_sub(i, v)      (void) atomic_sub_return(i, v)
-+static inline void atomic_sub_unchecked(int i, atomic_unchecked_t *v)
-+{
-+      (void) atomic_sub_return(i, v);
-+}
  
  
++#define ATOMIC_OP_RETURN(op, c_op, asm_op) __ATOMIC_OP_RETURN(op, , c_op, asm_op)\
++                                         __ATOMIC_OP_RETURN(op, _unchecked, c_op, asm_op)
++
  static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
  {
  static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
  {
-@@ -216,6 +399,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
+       int ret;
+@@ -175,6 +268,11 @@ static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
        return ret;
  }
  
 +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new)
 +{
        return ret;
  }
  
 +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new)
 +{
-+      return atomic_cmpxchg(v, old, new);
++      return atomic_cmpxchg((atomic_t *)v, old, new);
 +}
 +
  static inline int __atomic_add_unless(atomic_t *v, int a, int u)
  {
        int c, old;
 +}
 +
  static inline int __atomic_add_unless(atomic_t *v, int a, int u)
  {
        int c, old;
-@@ -229,13 +417,33 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
- #endif /* __LINUX_ARM_ARCH__ */
+@@ -196,16 +294,38 @@ ATOMIC_OPS(sub, -=, sub)
+ #undef ATOMIC_OPS
+ #undef ATOMIC_OP_RETURN
++#undef __ATOMIC_OP_RETURN
+ #undef ATOMIC_OP
++#undef __ATOMIC_OP
  
  #define atomic_xchg(v, new) (xchg(&((v)->counter), new))
 +static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new)
  
  #define atomic_xchg(v, new) (xchg(&((v)->counter), new))
 +static inline int atomic_xchg_unchecked(atomic_unchecked_t *v, int new)
@@ -1302,7 +1233,7 @@ index 3040359..a494fa3 100644
  #define atomic_dec_return(v)    (atomic_sub_return(1, v))
  #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
  
  #define atomic_dec_return(v)    (atomic_sub_return(1, v))
  #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
  
-@@ -246,6 +454,14 @@ typedef struct {
+@@ -216,6 +336,14 @@ typedef struct {
        long long counter;
  } atomic64_t;
  
        long long counter;
  } atomic64_t;
  
@@ -1317,7 +1248,7 @@ index 3040359..a494fa3 100644
  #define ATOMIC64_INIT(i) { (i) }
  
  #ifdef CONFIG_ARM_LPAE
  #define ATOMIC64_INIT(i) { (i) }
  
  #ifdef CONFIG_ARM_LPAE
-@@ -262,6 +478,19 @@ static inline long long atomic64_read(const atomic64_t *v)
+@@ -232,6 +360,19 @@ static inline long long atomic64_read(const atomic64_t *v)
        return result;
  }
  
        return result;
  }
  
@@ -1337,7 +1268,7 @@ index 3040359..a494fa3 100644
  static inline void atomic64_set(atomic64_t *v, long long i)
  {
        __asm__ __volatile__("@ atomic64_set\n"
  static inline void atomic64_set(atomic64_t *v, long long i)
  {
        __asm__ __volatile__("@ atomic64_set\n"
-@@ -270,6 +499,15 @@ static inline void atomic64_set(atomic64_t *v, long long i)
+@@ -240,6 +381,15 @@ static inline void atomic64_set(atomic64_t *v, long long i)
        : "r" (&v->counter), "r" (i)
        );
  }
        : "r" (&v->counter), "r" (i)
        );
  }
@@ -1353,7 +1284,7 @@ index 3040359..a494fa3 100644
  #else
  static inline long long atomic64_read(const atomic64_t *v)
  {
  #else
  static inline long long atomic64_read(const atomic64_t *v)
  {
-@@ -284,6 +522,19 @@ static inline long long atomic64_read(const atomic64_t *v)
+@@ -254,6 +404,19 @@ static inline long long atomic64_read(const atomic64_t *v)
        return result;
  }
  
        return result;
  }
  
@@ -1373,7 +1304,7 @@ index 3040359..a494fa3 100644
  static inline void atomic64_set(atomic64_t *v, long long i)
  {
        long long tmp;
  static inline void atomic64_set(atomic64_t *v, long long i)
  {
        long long tmp;
-@@ -298,6 +549,21 @@ static inline void atomic64_set(atomic64_t *v, long long i)
+@@ -268,29 +431,57 @@ static inline void atomic64_set(atomic64_t *v, long long i)
        : "r" (&v->counter), "r" (i)
        : "cc");
  }
        : "r" (&v->counter), "r" (i)
        : "cc");
  }
@@ -1394,156 +1325,91 @@ index 3040359..a494fa3 100644
 +}
  #endif
  
 +}
  #endif
  
- static inline void atomic64_add(long long i, atomic64_t *v)
-@@ -309,6 +575,37 @@ static inline void atomic64_add(long long i, atomic64_t *v)
-       __asm__ __volatile__("@ atomic64_add\n"
- "1:   ldrexd  %0, %H0, [%3]\n"
- "     adds    %Q0, %Q0, %Q4\n"
-+"     adcs    %R0, %R0, %R4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
-+"     strexd  %1, %0, %H0, [%3]\n"
-+"     teq     %1, #0\n"
-+"     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+      : "r" (&v->counter), "r" (i)
-+      : "cc");
-+}
-+
-+static inline void atomic64_add_unchecked(long long i, atomic64_unchecked_t *v)
-+{
-+      long long result;
-+      unsigned long tmp;
-+
-+      prefetchw(&v->counter);
-+      __asm__ __volatile__("@ atomic64_add_unchecked\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     adds    %Q0, %Q0, %Q4\n"
- "     adc     %R0, %R0, %R4\n"
- "     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
-@@ -329,6 +626,44 @@ static inline long long atomic64_add_return(long long i, atomic64_t *v)
-       __asm__ __volatile__("@ atomic64_add_return\n"
- "1:   ldrexd  %0, %H0, [%3]\n"
- "     adds    %Q0, %Q0, %Q4\n"
-+"     adcs    %R0, %R0, %R4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"     mov     %0, %1\n"
-+"     mov     %H0, %H1\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
-+"     strexd  %1, %0, %H0, [%3]\n"
-+"     teq     %1, #0\n"
-+"     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+      : "r" (&v->counter), "r" (i)
-+      : "cc");
-+
-+      smp_mb();
-+
-+      return result;
-+}
-+
-+static inline long long atomic64_add_return_unchecked(long long i, atomic64_unchecked_t *v)
-+{
-+      long long result;
-+      unsigned long tmp;
-+
-+      smp_mb();
-+
-+      __asm__ __volatile__("@ atomic64_add_return_unchecked\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     adds    %Q0, %Q0, %Q4\n"
- "     adc     %R0, %R0, %R4\n"
- "     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
-@@ -351,6 +686,37 @@ static inline void atomic64_sub(long long i, atomic64_t *v)
-       __asm__ __volatile__("@ atomic64_sub\n"
- "1:   ldrexd  %0, %H0, [%3]\n"
- "     subs    %Q0, %Q0, %Q4\n"
-+"     sbcs    %R0, %R0, %R4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
-+"     strexd  %1, %0, %H0, [%3]\n"
-+"     teq     %1, #0\n"
-+"     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-+      : "r" (&v->counter), "r" (i)
-+      : "cc");
-+}
-+
-+static inline void atomic64_sub_unchecked(long long i, atomic64_unchecked_t *v)
-+{
-+      long long result;
-+      unsigned long tmp;
-+
-+      prefetchw(&v->counter);
-+      __asm__ __volatile__("@ atomic64_sub_unchecked\n"
-+"1:   ldrexd  %0, %H0, [%3]\n"
-+"     subs    %Q0, %Q0, %Q4\n"
- "     sbc     %R0, %R0, %R4\n"
- "     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
-@@ -371,10 +737,25 @@ static inline long long atomic64_sub_return(long long i, atomic64_t *v)
-       __asm__ __volatile__("@ atomic64_sub_return\n"
- "1:   ldrexd  %0, %H0, [%3]\n"
- "     subs    %Q0, %Q0, %Q4\n"
--"     sbc     %R0, %R0, %R4\n"
-+"     sbcs    %R0, %R0, %R4\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     bvc     3f\n"
-+"     mov     %0, %1\n"
-+"     mov     %H0, %H1\n"
-+"2:   " REFCOUNT_TRAP_INSN "\n"
-+"3:\n"
-+#endif
-+
- "     strexd  %1, %0, %H0, [%3]\n"
- "     teq     %1, #0\n"
- "     bne     1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
+-#define ATOMIC64_OP(op, op1, op2)                                     \
+-static inline void atomic64_##op(long long i, atomic64_t *v)          \
++#undef __OVERFLOW_POST_RETURN
++#define __OVERFLOW_POST_RETURN                \
++      "       bvc     3f\n"           \
++"     mov     %0, %1\n"               \
++"     mov     %H0, %H1\n"             \
++      "2:     " REFCOUNT_TRAP_INSN "\n"\
++      "3:\n"
++
++#define __ATOMIC64_OP(op, suffix, op1, op2, post_op, extable)         \
++static inline void atomic64_##op##suffix(long long i, atomic64##suffix##_t *v)\
+ {                                                                     \
+       long long result;                                               \
+       unsigned long tmp;                                              \
+                                                                       \
+       prefetchw(&v->counter);                                         \
+-      __asm__ __volatile__("@ atomic64_" #op "\n"                     \
++      __asm__ __volatile__("@ atomic64_" #op #suffix "\n"             \
+ "1:   ldrexd  %0, %H0, [%3]\n"                                        \
+ "     " #op1 " %Q0, %Q0, %Q4\n"                                       \
+ "     " #op2 " %R0, %R0, %R4\n"                                       \
++      post_op                                                         \
+ "     strexd  %1, %0, %H0, [%3]\n"                                    \
+ "     teq     %1, #0\n"                                               \
+-"     bne     1b"                                                     \
++"     bne     1b\n"                                                   \
++      extable                                                         \
+       : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)               \
+       : "r" (&v->counter), "r" (i)                                    \
+       : "cc");                                                        \
+ }                                                                     \
+-#define ATOMIC64_OP_RETURN(op, op1, op2)                              \
+-static inline long long atomic64_##op##_return(long long i, atomic64_t *v) \
++#define ATOMIC64_OP(op, op1, op2) __ATOMIC64_OP(op, , op1, op2, , ) \
++                                __ATOMIC64_OP(op, _unchecked, op1, op2##s, __OVERFLOW_POST, __OVERFLOW_EXTABLE)
 +
 +
-       : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
-       : "r" (&v->counter), "r" (i)
-       : "cc");
-@@ -410,6 +791,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old,
++#define __ATOMIC64_OP_RETURN(op, suffix, op1, op2, post_op, extable)          \
++static inline long long atomic64_##op##_return##suffix(long long i, atomic64##suffix##_t *v) \
+ {                                                                     \
+       long long result;                                               \
+       unsigned long tmp;                                              \
+@@ -298,13 +489,15 @@ static inline long long atomic64_##op##_return(long long i, atomic64_t *v) \
+       smp_mb();                                                       \
+       prefetchw(&v->counter);                                         \
+                                                                       \
+-      __asm__ __volatile__("@ atomic64_" #op "_return\n"              \
++      __asm__ __volatile__("@ atomic64_" #op "_return" #suffix "\n"   \
+ "1:   ldrexd  %0, %H0, [%3]\n"                                        \
+ "     " #op1 " %Q0, %Q0, %Q4\n"                                       \
+ "     " #op2 " %R0, %R0, %R4\n"                                       \
++      post_op                                                         \
+ "     strexd  %1, %0, %H0, [%3]\n"                                    \
+ "     teq     %1, #0\n"                                               \
+-"     bne     1b"                                                     \
++"     bne     1b\n"                                                   \
++      extable                                                         \
+       : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)               \
+       : "r" (&v->counter), "r" (i)                                    \
+       : "cc");                                                        \
+@@ -314,6 +507,9 @@ static inline long long atomic64_##op##_return(long long i, atomic64_t *v) \
+       return result;                                                  \
+ }
++#define ATOMIC64_OP_RETURN(op, op1, op2) __ATOMIC64_OP_RETURN(op, , op1, op2, , ) \
++                                       __ATOMIC64_OP_RETURN(op, _unchecked, op1, op2##s, __OVERFLOW_POST_RETURN, __OVERFLOW_EXTABLE)
++
+ #define ATOMIC64_OPS(op, op1, op2)                                    \
+       ATOMIC64_OP(op, op1, op2)                                       \
+       ATOMIC64_OP_RETURN(op, op1, op2)
+@@ -323,7 +519,12 @@ ATOMIC64_OPS(sub, subs, sbc)
+ #undef ATOMIC64_OPS
+ #undef ATOMIC64_OP_RETURN
++#undef __ATOMIC64_OP_RETURN
+ #undef ATOMIC64_OP
++#undef __ATOMIC64_OP
++#undef __OVERFLOW_EXTABLE
++#undef __OVERFLOW_POST_RETURN
++#undef __OVERFLOW_POST
+ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old,
+                                       long long new)
+@@ -351,6 +552,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old,
        return oldval;
  }
  
        return oldval;
  }
  
@@ -1575,7 +1441,7 @@ index 3040359..a494fa3 100644
  static inline long long atomic64_xchg(atomic64_t *ptr, long long new)
  {
        long long result;
  static inline long long atomic64_xchg(atomic64_t *ptr, long long new)
  {
        long long result;
-@@ -435,21 +841,35 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new)
+@@ -376,21 +602,35 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new)
  static inline long long atomic64_dec_if_positive(atomic64_t *v)
  {
        long long result;
  static inline long long atomic64_dec_if_positive(atomic64_t *v)
  {
        long long result;
@@ -1617,7 +1483,7 @@ index 3040359..a494fa3 100644
        : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter)
        : "cc");
        : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter)
        : "cc");
-@@ -473,13 +893,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
+@@ -414,13 +654,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
  "     teq     %0, %5\n"
  "     teqeq   %H0, %H5\n"
  "     moveq   %1, #0\n"
  "     teq     %0, %5\n"
  "     teqeq   %H0, %H5\n"
  "     moveq   %1, #0\n"
@@ -1646,7 +1512,7 @@ index 3040359..a494fa3 100644
        : "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "r" (u), "r" (a)
        : "cc");
        : "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "r" (u), "r" (a)
        : "cc");
-@@ -492,10 +924,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
+@@ -433,10 +685,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
  
  #define atomic64_add_negative(a, v)   (atomic64_add_return((a), (v)) < 0)
  #define atomic64_inc(v)                       atomic64_add(1LL, (v))
  
  #define atomic64_add_negative(a, v)   (atomic64_add_return((a), (v)) < 0)
  #define atomic64_inc(v)                       atomic64_add(1LL, (v))
@@ -2097,7 +1963,7 @@ index 5cfba15..f415e1a 100644
  #define PTE_EXT_AP0           (_AT(pteval_t, 1) << 4)
  #define PTE_EXT_AP1           (_AT(pteval_t, 2) << 4)
 diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
  #define PTE_EXT_AP0           (_AT(pteval_t, 1) << 4)
  #define PTE_EXT_AP1           (_AT(pteval_t, 2) << 4)
 diff --git a/arch/arm/include/asm/pgtable-2level.h b/arch/arm/include/asm/pgtable-2level.h
-index 219ac88..73ec32a 100644
+index f027941..f36ce30 100644
 --- a/arch/arm/include/asm/pgtable-2level.h
 +++ b/arch/arm/include/asm/pgtable-2level.h
 @@ -126,6 +126,9 @@
 --- a/arch/arm/include/asm/pgtable-2level.h
 +++ b/arch/arm/include/asm/pgtable-2level.h
 @@ -126,6 +126,9 @@
@@ -2123,7 +1989,7 @@ index 9fd61c7..f8f1cff 100644
  
  /*
 diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
  
  /*
 diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
-index 06e0bc0..c65bca8 100644
+index a31ecdad..95e98d4 100644
 --- a/arch/arm/include/asm/pgtable-3level.h
 +++ b/arch/arm/include/asm/pgtable-3level.h
 @@ -81,6 +81,7 @@
 --- a/arch/arm/include/asm/pgtable-3level.h
 +++ b/arch/arm/include/asm/pgtable-3level.h
 @@ -81,6 +81,7 @@
@@ -2148,7 +2014,7 @@ index 06e0bc0..c65bca8 100644
  #define L_PTE_DIRTY_HIGH      (1 << (55 - 32))
  
 diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
  #define L_PTE_DIRTY_HIGH      (1 << (55 - 32))
  
 diff --git a/arch/arm/include/asm/pgtable.h b/arch/arm/include/asm/pgtable.h
-index 01baef0..73c156e 100644
+index 3b30062..01a5f9d 100644
 --- a/arch/arm/include/asm/pgtable.h
 +++ b/arch/arm/include/asm/pgtable.h
 @@ -33,6 +33,9 @@
 --- a/arch/arm/include/asm/pgtable.h
 +++ b/arch/arm/include/asm/pgtable.h
 @@ -33,6 +33,9 @@
@@ -2231,7 +2097,7 @@ index 01baef0..73c156e 100644
   */
  #define _L_PTE_DEFAULT        L_PTE_PRESENT | L_PTE_YOUNG
  
   */
  #define _L_PTE_DEFAULT        L_PTE_PRESENT | L_PTE_YOUNG
  
-@@ -269,7 +317,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
+@@ -267,7 +315,7 @@ PTE_BIT_FUNC(mknexec,   |= L_PTE_XN);
  static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
  {
        const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER |
  static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
  {
        const pteval_t mask = L_PTE_XN | L_PTE_RDONLY | L_PTE_USER |
@@ -2254,10 +2120,10 @@ index c25ef3e..735f14b 100644
  extern struct psci_operations psci_ops;
  extern struct smp_operations psci_smp_ops;
 diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h
  extern struct psci_operations psci_ops;
  extern struct smp_operations psci_smp_ops;
 diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h
-index 2ec765c..beb1fe16 100644
+index 18f5a55..5072a40 100644
 --- a/arch/arm/include/asm/smp.h
 +++ b/arch/arm/include/asm/smp.h
 --- a/arch/arm/include/asm/smp.h
 +++ b/arch/arm/include/asm/smp.h
-@@ -113,7 +113,7 @@ struct smp_operations {
+@@ -107,7 +107,7 @@ struct smp_operations {
        int  (*cpu_disable)(unsigned int cpu);
  #endif
  #endif
        int  (*cpu_disable)(unsigned int cpu);
  #endif
  #endif
@@ -2267,10 +2133,10 @@ index 2ec765c..beb1fe16 100644
  struct of_cpu_method {
        const char *method;
 diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
  struct of_cpu_method {
        const char *method;
 diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h
-index fc44d37..acc63c4 100644
+index ce73ab6..7310f8a 100644
 --- a/arch/arm/include/asm/thread_info.h
 +++ b/arch/arm/include/asm/thread_info.h
 --- a/arch/arm/include/asm/thread_info.h
 +++ b/arch/arm/include/asm/thread_info.h
-@@ -89,9 +89,9 @@ struct thread_info {
+@@ -78,9 +78,9 @@ struct thread_info {
        .flags          = 0,                                            \
        .preempt_count  = INIT_PREEMPT_COUNT,                           \
        .addr_limit     = KERNEL_DS,                                    \
        .flags          = 0,                                            \
        .preempt_count  = INIT_PREEMPT_COUNT,                           \
        .addr_limit     = KERNEL_DS,                                    \
@@ -2283,7 +2149,7 @@ index fc44d37..acc63c4 100644
        .restart_block  = {                                             \
                .fn     = do_no_restart_syscall,                        \
        },                                                              \
        .restart_block  = {                                             \
                .fn     = do_no_restart_syscall,                        \
        },                                                              \
-@@ -165,7 +165,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -154,7 +154,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
  #define TIF_SYSCALL_AUDIT     9
  #define TIF_SYSCALL_TRACEPOINT        10
  #define TIF_SECCOMP           11      /* seccomp syscall filtering active */
  #define TIF_SYSCALL_AUDIT     9
  #define TIF_SYSCALL_TRACEPOINT        10
  #define TIF_SECCOMP           11      /* seccomp syscall filtering active */
@@ -2296,7 +2162,7 @@ index fc44d37..acc63c4 100644
  #define TIF_USING_IWMMXT      17
  #define TIF_MEMDIE            18      /* is terminating due to OOM killer */
  #define TIF_RESTORE_SIGMASK   20
  #define TIF_USING_IWMMXT      17
  #define TIF_MEMDIE            18      /* is terminating due to OOM killer */
  #define TIF_RESTORE_SIGMASK   20
-@@ -179,10 +183,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
+@@ -168,10 +172,11 @@ extern int vfp_restore_user_hwstate(struct user_vfp __user *,
  #define _TIF_SYSCALL_TRACEPOINT       (1 << TIF_SYSCALL_TRACEPOINT)
  #define _TIF_SECCOMP          (1 << TIF_SECCOMP)
  #define _TIF_USING_IWMMXT     (1 << TIF_USING_IWMMXT)
  #define _TIF_SYSCALL_TRACEPOINT       (1 << TIF_SYSCALL_TRACEPOINT)
  #define _TIF_SECCOMP          (1 << TIF_SECCOMP)
  #define _TIF_USING_IWMMXT     (1 << TIF_USING_IWMMXT)
@@ -2563,7 +2429,7 @@ index a88671c..1cc895e 100644
  EXPORT_SYMBOL(__get_user_1);
  EXPORT_SYMBOL(__get_user_2);
 diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
  EXPORT_SYMBOL(__get_user_1);
  EXPORT_SYMBOL(__get_user_2);
 diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
-index 36276cd..9d7b13b 100644
+index 2f5555d..d493c91 100644
 --- a/arch/arm/kernel/entry-armv.S
 +++ b/arch/arm/kernel/entry-armv.S
 @@ -47,6 +47,87 @@
 --- a/arch/arm/kernel/entry-armv.S
 +++ b/arch/arm/kernel/entry-armv.S
 @@ -47,6 +47,87 @@
@@ -2671,7 +2537,7 @@ index 36276cd..9d7b13b 100644
        .endm
  
 @@ -149,7 +234,11 @@ ENDPROC(__und_invalid)
        .endm
  
 @@ -149,7 +234,11 @@ ENDPROC(__und_invalid)
-       .macro  svc_entry, stack_hole=0
+       .macro  svc_entry, stack_hole=0, trace=1
   UNWIND(.fnstart              )
   UNWIND(.save {r0 - pc}               )
 +
   UNWIND(.fnstart              )
   UNWIND(.save {r0 - pc}               )
 +
@@ -2695,8 +2561,8 @@ index 36276cd..9d7b13b 100644
   SPFIX(       addeq   r2, r2, #4      )
        str     r3, [sp, #-4]!          @ save the "real" r0 copied
                                        @ from the exception stack
   SPFIX(       addeq   r2, r2, #4      )
        str     r3, [sp, #-4]!          @ save the "real" r0 copied
                                        @ from the exception stack
-@@ -317,6 +411,9 @@ ENDPROC(__pabt_svc)
-       .macro  usr_entry
+@@ -368,6 +462,9 @@ ENDPROC(__fiq_abt)
+       .macro  usr_entry, trace=1
   UNWIND(.fnstart      )
   UNWIND(.cantunwind   )       @ don't unwind the user space
 +
   UNWIND(.fnstart      )
   UNWIND(.cantunwind   )       @ don't unwind the user space
 +
@@ -2705,7 +2571,7 @@ index 36276cd..9d7b13b 100644
        sub     sp, sp, #S_FRAME_SIZE
   ARM( stmib   sp, {r1 - r12}  )
   THUMB(       stmia   sp, {r0 - r12}  )
        sub     sp, sp, #S_FRAME_SIZE
   ARM( stmib   sp, {r1 - r12}  )
   THUMB(       stmia   sp, {r0 - r12}  )
-@@ -421,7 +518,9 @@ __und_usr:
+@@ -478,7 +575,9 @@ __und_usr:
        tst     r3, #PSR_T_BIT                  @ Thumb mode?
        bne     __und_usr_thumb
        sub     r4, r2, #4                      @ ARM instr at LR - 4
        tst     r3, #PSR_T_BIT                  @ Thumb mode?
        bne     __und_usr_thumb
        sub     r4, r2, #4                      @ ARM instr at LR - 4
@@ -2715,7 +2581,7 @@ index 36276cd..9d7b13b 100644
   ARM_BE8(rev  r0, r0)                         @ little endian instruction
  
        @ r0 = 32-bit ARM instruction which caused the exception
   ARM_BE8(rev  r0, r0)                         @ little endian instruction
  
        @ r0 = 32-bit ARM instruction which caused the exception
-@@ -455,11 +554,15 @@ __und_usr_thumb:
+@@ -512,11 +611,15 @@ __und_usr_thumb:
   */
        .arch   armv6t2
  #endif
   */
        .arch   armv6t2
  #endif
@@ -2731,7 +2597,7 @@ index 36276cd..9d7b13b 100644
  ARM_BE8(rev16 r0, r0)                         @ little endian instruction
        add     r2, r2, #2                      @ r2 is PC + 2, make it PC + 4
        str     r2, [sp, #S_PC]                 @ it's a 2x16bit instr, update
  ARM_BE8(rev16 r0, r0)                         @ little endian instruction
        add     r2, r2, #2                      @ r2 is PC + 2, make it PC + 4
        str     r2, [sp, #S_PC]                 @ it's a 2x16bit instr, update
-@@ -489,7 +592,8 @@ ENDPROC(__und_usr)
+@@ -546,7 +649,8 @@ ENDPROC(__und_usr)
   */
        .pushsection .fixup, "ax"
        .align  2
   */
        .pushsection .fixup, "ax"
        .align  2
@@ -2741,7 +2607,7 @@ index 36276cd..9d7b13b 100644
        ret     r9
        .popsection
        .pushsection __ex_table,"a"
        ret     r9
        .popsection
        .pushsection __ex_table,"a"
-@@ -698,7 +802,7 @@ ENTRY(__switch_to)
+@@ -766,7 +870,7 @@ ENTRY(__switch_to)
   THUMB(       str     lr, [ip], #4               )
        ldr     r4, [r2, #TI_TP_VALUE]
        ldr     r5, [r2, #TI_TP_VALUE + 4]
   THUMB(       str     lr, [ip], #4               )
        ldr     r4, [r2, #TI_TP_VALUE]
        ldr     r5, [r2, #TI_TP_VALUE + 4]
@@ -2750,7 +2616,7 @@ index 36276cd..9d7b13b 100644
        ldr     r6, [r2, #TI_CPU_DOMAIN]
  #endif
        switch_tls r1, r4, r5, r3, r7
        ldr     r6, [r2, #TI_CPU_DOMAIN]
  #endif
        switch_tls r1, r4, r5, r3, r7
-@@ -707,7 +811,7 @@ ENTRY(__switch_to)
+@@ -775,7 +879,7 @@ ENTRY(__switch_to)
        ldr     r8, =__stack_chk_guard
        ldr     r7, [r7, #TSK_STACK_CANARY]
  #endif
        ldr     r8, =__stack_chk_guard
        ldr     r7, [r7, #TSK_STACK_CANARY]
  #endif
@@ -2760,7 +2626,7 @@ index 36276cd..9d7b13b 100644
  #endif
        mov     r5, r0
 diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
  #endif
        mov     r5, r0
 diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S
-index e52fe5a..1b0a924 100644
+index 6bb09d4..113e875 100644
 --- a/arch/arm/kernel/entry-common.S
 +++ b/arch/arm/kernel/entry-common.S
 @@ -11,18 +11,46 @@
 --- a/arch/arm/kernel/entry-common.S
 +++ b/arch/arm/kernel/entry-common.S
 @@ -11,18 +11,46 @@
@@ -2827,10 +2693,10 @@ index e52fe5a..1b0a924 100644
  
  #if defined(CONFIG_OABI_COMPAT)
 diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
  
  #if defined(CONFIG_OABI_COMPAT)
 diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S
-index 2fdf867..6e909e4 100644
+index 4176df7..a901f8d 100644
 --- a/arch/arm/kernel/entry-header.S
 +++ b/arch/arm/kernel/entry-header.S
 --- a/arch/arm/kernel/entry-header.S
 +++ b/arch/arm/kernel/entry-header.S
-@@ -188,6 +188,60 @@
+@@ -196,6 +196,60 @@
        msr     cpsr_c, \rtemp                  @ switch back to the SVC mode
        .endm
  
        msr     cpsr_c, \rtemp                  @ switch back to the SVC mode
        .endm
  
@@ -2891,7 +2757,7 @@ index 2fdf867..6e909e4 100644
  #ifndef CONFIG_THUMB2_KERNEL
        .macro  svc_exit, rpsr, irq = 0
        .if     \irq != 0
  #ifndef CONFIG_THUMB2_KERNEL
        .macro  svc_exit, rpsr, irq = 0
        .if     \irq != 0
-@@ -207,6 +261,9 @@
+@@ -215,6 +269,9 @@
        blne    trace_hardirqs_off
  #endif
        .endif
        blne    trace_hardirqs_off
  #endif
        .endif
@@ -2901,7 +2767,7 @@ index 2fdf867..6e909e4 100644
        msr     spsr_cxsf, \rpsr
  #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_32v6K)
        @ We must avoid clrex due to Cortex-A15 erratum #830321
        msr     spsr_cxsf, \rpsr
  #if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_32v6K)
        @ We must avoid clrex due to Cortex-A15 erratum #830321
-@@ -254,6 +311,9 @@
+@@ -290,6 +347,9 @@
        blne    trace_hardirqs_off
  #endif
        .endif
        blne    trace_hardirqs_off
  #endif
        .endif
@@ -2912,10 +2778,10 @@ index 2fdf867..6e909e4 100644
        ldrd    r0, r1, [sp, #S_LR]             @ calling lr and pc
  
 diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c
        ldrd    r0, r1, [sp, #S_LR]             @ calling lr and pc
  
 diff --git a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c
-index 918875d..cd5fa27 100644
+index b37752a..ff5cb72 100644
 --- a/arch/arm/kernel/fiq.c
 +++ b/arch/arm/kernel/fiq.c
 --- a/arch/arm/kernel/fiq.c
 +++ b/arch/arm/kernel/fiq.c
-@@ -87,7 +87,10 @@ void set_fiq_handler(void *start, unsigned int length)
+@@ -95,7 +95,10 @@ void set_fiq_handler(void *start, unsigned int length)
        void *base = vectors_page;
        unsigned offset = FIQ_OFFSET;
  
        void *base = vectors_page;
        unsigned offset = FIQ_OFFSET;
  
@@ -3006,10 +2872,10 @@ index 07314af..c46655c 100644
        flush_icache_range((uintptr_t)(addr),
                           (uintptr_t)(addr) + size);
 diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
        flush_icache_range((uintptr_t)(addr),
                           (uintptr_t)(addr) + size);
 diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
-index a35f6eb..7af43a0 100644
+index fe972a2..a772d83 100644
 --- a/arch/arm/kernel/process.c
 +++ b/arch/arm/kernel/process.c
 --- a/arch/arm/kernel/process.c
 +++ b/arch/arm/kernel/process.c
-@@ -212,6 +212,7 @@ void machine_power_off(void)
+@@ -207,6 +207,7 @@ void machine_power_off(void)
  
        if (pm_power_off)
                pm_power_off();
  
        if (pm_power_off)
                pm_power_off();
@@ -3017,7 +2883,7 @@ index a35f6eb..7af43a0 100644
  }
  
  /*
  }
  
  /*
-@@ -225,7 +226,7 @@ void machine_power_off(void)
+@@ -220,7 +221,7 @@ void machine_power_off(void)
   * executing pre-reset code, and using RAM that the primary CPU's code wishes
   * to use. Implementing such co-ordination would be essentially impossible.
   */
   * executing pre-reset code, and using RAM that the primary CPU's code wishes
   * to use. Implementing such co-ordination would be essentially impossible.
   */
@@ -3026,7 +2892,7 @@ index a35f6eb..7af43a0 100644
  {
        local_irq_disable();
        smp_send_stop();
  {
        local_irq_disable();
        smp_send_stop();
-@@ -248,8 +249,8 @@ void __show_regs(struct pt_regs *regs)
+@@ -246,8 +247,8 @@ void __show_regs(struct pt_regs *regs)
  
        show_regs_print_info(KERN_DEFAULT);
  
  
        show_regs_print_info(KERN_DEFAULT);
  
@@ -3037,7 +2903,7 @@ index a35f6eb..7af43a0 100644
        printk("pc : [<%08lx>]    lr : [<%08lx>]    psr: %08lx\n"
               "sp : %08lx  ip : %08lx  fp : %08lx\n",
                regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr,
        printk("pc : [<%08lx>]    lr : [<%08lx>]    psr: %08lx\n"
               "sp : %08lx  ip : %08lx  fp : %08lx\n",
                regs->ARM_pc, regs->ARM_lr, regs->ARM_cpsr,
-@@ -427,12 +428,6 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -424,12 +425,6 @@ unsigned long get_wchan(struct task_struct *p)
        return 0;
  }
  
        return 0;
  }
  
@@ -3050,7 +2916,7 @@ index a35f6eb..7af43a0 100644
  #ifdef CONFIG_MMU
  #ifdef CONFIG_KUSER_HELPERS
  /*
  #ifdef CONFIG_MMU
  #ifdef CONFIG_KUSER_HELPERS
  /*
-@@ -448,7 +443,7 @@ static struct vm_area_struct gate_vma = {
+@@ -445,7 +440,7 @@ static struct vm_area_struct gate_vma = {
  
  static int __init gate_vma_init(void)
  {
  
  static int __init gate_vma_init(void)
  {
@@ -3059,24 +2925,58 @@ index a35f6eb..7af43a0 100644
        return 0;
  }
  arch_initcall(gate_vma_init);
        return 0;
  }
  arch_initcall(gate_vma_init);
-@@ -474,41 +469,16 @@ int in_gate_area_no_mm(unsigned long addr)
- const char *arch_vma_name(struct vm_area_struct *vma)
- {
--      return is_gate_vma(vma) ? "[vectors]" :
--              (vma->vm_mm && vma->vm_start == vma->vm_mm->context.sigpage) ?
--               "[sigpage]" : NULL;
-+      return is_gate_vma(vma) ? "[vectors]" : NULL;
+@@ -474,81 +469,13 @@ const char *arch_vma_name(struct vm_area_struct *vma)
+       return is_gate_vma(vma) ? "[vectors]" : NULL;
  }
  
  }
  
+-/* If possible, provide a placement hint at a random offset from the
+- * stack for the signal page.
+- */
+-static unsigned long sigpage_addr(const struct mm_struct *mm,
+-                                unsigned int npages)
+-{
+-      unsigned long offset;
+-      unsigned long first;
+-      unsigned long last;
+-      unsigned long addr;
+-      unsigned int slots;
+-
+-      first = PAGE_ALIGN(mm->start_stack);
+-
+-      last = TASK_SIZE - (npages << PAGE_SHIFT);
+-
+-      /* No room after stack? */
+-      if (first > last)
+-              return 0;
+-
+-      /* Just enough room? */
+-      if (first == last)
+-              return first;
+-
+-      slots = ((last - first) >> PAGE_SHIFT) + 1;
+-
+-      offset = get_random_int() % slots;
+-
+-      addr = first + (offset << PAGE_SHIFT);
+-
+-      return addr;
+-}
+-
 -static struct page *signal_page;
 -extern struct page *get_signal_page(void);
 -static struct page *signal_page;
 -extern struct page *get_signal_page(void);
+-
+-static const struct vm_special_mapping sigpage_mapping = {
+-      .name = "[sigpage]",
+-      .pages = &signal_page,
+-};
 -
  int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
  {
        struct mm_struct *mm = current->mm;
 -
  int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
  {
        struct mm_struct *mm = current->mm;
+-      struct vm_area_struct *vma;
 -      unsigned long addr;
 -      unsigned long addr;
--      int ret;
+-      unsigned long hint;
+-      int ret = 0;
 -
 -      if (!signal_page)
 -              signal_page = get_signal_page();
 -
 -      if (!signal_page)
 -              signal_page = get_signal_page();
@@ -3084,18 +2984,23 @@ index a35f6eb..7af43a0 100644
 -              return -ENOMEM;
  
        down_write(&mm->mmap_sem);
 -              return -ENOMEM;
  
        down_write(&mm->mmap_sem);
--      addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0);
+-      hint = sigpage_addr(mm, 1);
+-      addr = get_unmapped_area(NULL, hint, PAGE_SIZE, 0, 0);
 -      if (IS_ERR_VALUE(addr)) {
 -              ret = addr;
 -              goto up_fail;
 -      }
 -
 -      if (IS_ERR_VALUE(addr)) {
 -              ret = addr;
 -              goto up_fail;
 -      }
 -
--      ret = install_special_mapping(mm, addr, PAGE_SIZE,
+-      vma = _install_special_mapping(mm, addr, PAGE_SIZE,
 -              VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
 -              VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC,
--              &signal_page);
+-              &sigpage_mapping);
+-
+-      if (IS_ERR(vma)) {
+-              ret = PTR_ERR(vma);
+-              goto up_fail;
+-      }
 -
 -
--      if (ret == 0)
--              mm->context.sigpage = addr;
+-      mm->context.sigpage = addr;
 -
 - up_fail:
 +      mm->context.sigpage = (PAGE_OFFSET + (get_random_int() % 0x3FFEFFE0)) & 0xFFFFFFFC;
 -
 - up_fail:
 +      mm->context.sigpage = (PAGE_OFFSET + (get_random_int() % 0x3FFEFFE0)) & 0xFFFFFFFC;
@@ -3118,7 +3023,7 @@ index f73891b..cf3004e 100644
  static int (*invoke_psci_fn)(u32, u32, u32, u32);
  typedef int (*psci_initcall_t)(const struct device_node *);
 diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
  static int (*invoke_psci_fn)(u32, u32, u32, u32);
  typedef int (*psci_initcall_t)(const struct device_node *);
 diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c
-index 0c27ed6..b67388e 100644
+index ef9119f..31995a3 100644
 --- a/arch/arm/kernel/ptrace.c
 +++ b/arch/arm/kernel/ptrace.c
 @@ -928,10 +928,19 @@ static void tracehook_report_syscall(struct pt_regs *regs,
 --- a/arch/arm/kernel/ptrace.c
 +++ b/arch/arm/kernel/ptrace.c
 @@ -928,10 +928,19 @@ static void tracehook_report_syscall(struct pt_regs *regs,
@@ -3139,10 +3044,10 @@ index 0c27ed6..b67388e 100644
 +#endif
 +
        /* Do the secure computing check first; failures should be fast. */
 +#endif
 +
        /* Do the secure computing check first; failures should be fast. */
-       if (secure_computing(scno) == -1)
-               return -1;
+ #ifdef CONFIG_HAVE_ARCH_SECCOMP_FILTER
+       if (secure_computing() == -1)
 diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
 diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index 84db893d..bd8213a 100644
+index c031063..e277ab8 100644
 --- a/arch/arm/kernel/setup.c
 +++ b/arch/arm/kernel/setup.c
 @@ -104,21 +104,23 @@ EXPORT_SYMBOL(elf_hwcap);
 --- a/arch/arm/kernel/setup.c
 +++ b/arch/arm/kernel/setup.c
 @@ -104,21 +104,23 @@ EXPORT_SYMBOL(elf_hwcap);
@@ -3174,7 +3079,7 @@ index 84db893d..bd8213a 100644
  EXPORT_SYMBOL(outer_cache);
  #endif
  
  EXPORT_SYMBOL(outer_cache);
  #endif
  
-@@ -251,9 +253,13 @@ static int __get_cpu_architecture(void)
+@@ -252,9 +254,13 @@ static int __get_cpu_architecture(void)
                asm("mrc        p15, 0, %0, c0, c1, 4"
                    : "=r" (mmfr0));
                if ((mmfr0 & 0x0000000f) >= 0x00000003 ||
                asm("mrc        p15, 0, %0, c0, c1, 4"
                    : "=r" (mmfr0));
                if ((mmfr0 & 0x0000000f) >= 0x00000003 ||
@@ -3248,7 +3153,7 @@ index bd19834..e4d8c66 100644
 -      return page;
 -}
 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
 -      return page;
 -}
 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index bbe22fc..d7737f5 100644
+index 13396d3..589d615 100644
 --- a/arch/arm/kernel/smp.c
 +++ b/arch/arm/kernel/smp.c
 @@ -76,7 +76,7 @@ enum ipi_msg_type {
 --- a/arch/arm/kernel/smp.c
 +++ b/arch/arm/kernel/smp.c
 @@ -76,7 +76,7 @@ enum ipi_msg_type {
@@ -3284,10 +3189,10 @@ index 7a3be1d..b00c7de 100644
                         start, end);
                itcm_present = true;
 diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
                         start, end);
                itcm_present = true;
 diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
-index a964c9f..cf2a5b1 100644
+index 9f5d818..e013427 100644
 --- a/arch/arm/kernel/traps.c
 +++ b/arch/arm/kernel/traps.c
 --- a/arch/arm/kernel/traps.c
 +++ b/arch/arm/kernel/traps.c
-@@ -64,7 +64,7 @@ static void dump_mem(const char *, const char *, unsigned long, unsigned long);
+@@ -65,7 +65,7 @@ static void dump_mem(const char *, const char *, unsigned long, unsigned long);
  void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame)
  {
  #ifdef CONFIG_KALLSYMS
  void dump_backtrace_entry(unsigned long where, unsigned long from, unsigned long frame)
  {
  #ifdef CONFIG_KALLSYMS
@@ -3296,7 +3201,7 @@ index a964c9f..cf2a5b1 100644
  #else
        printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from);
  #endif
  #else
        printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from);
  #endif
-@@ -266,6 +266,8 @@ static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED;
+@@ -267,6 +267,8 @@ static arch_spinlock_t die_lock = __ARCH_SPIN_LOCK_UNLOCKED;
  static int die_owner = -1;
  static unsigned int die_nest_count;
  
  static int die_owner = -1;
  static unsigned int die_nest_count;
  
@@ -3305,7 +3210,7 @@ index a964c9f..cf2a5b1 100644
  static unsigned long oops_begin(void)
  {
        int cpu;
  static unsigned long oops_begin(void)
  {
        int cpu;
-@@ -308,6 +310,9 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
+@@ -309,6 +311,9 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
                panic("Fatal exception in interrupt");
        if (panic_on_oops)
                panic("Fatal exception");
                panic("Fatal exception in interrupt");
        if (panic_on_oops)
                panic("Fatal exception");
@@ -3315,7 +3220,7 @@ index a964c9f..cf2a5b1 100644
        if (signr)
                do_exit(signr);
  }
        if (signr)
                do_exit(signr);
  }
-@@ -887,7 +892,11 @@ void __init early_trap_init(void *vectors_base)
+@@ -880,7 +885,11 @@ void __init early_trap_init(void *vectors_base)
        kuser_init(vectors_base);
  
        flush_icache_range(vectors, vectors + PAGE_SIZE * 2);
        kuser_init(vectors_base);
  
        flush_icache_range(vectors, vectors + PAGE_SIZE * 2);
@@ -3329,7 +3234,7 @@ index a964c9f..cf2a5b1 100644
        /*
         * on V7-M there is no need to copy the vector table to a dedicated
 diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
        /*
         * on V7-M there is no need to copy the vector table to a dedicated
 diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
-index 6f57cb9..645f8c4 100644
+index 8e95aa4..595dfc8 100644
 --- a/arch/arm/kernel/vmlinux.lds.S
 +++ b/arch/arm/kernel/vmlinux.lds.S
 @@ -8,7 +8,11 @@
 --- a/arch/arm/kernel/vmlinux.lds.S
 +++ b/arch/arm/kernel/vmlinux.lds.S
 @@ -8,7 +8,11 @@
@@ -3386,20 +3291,20 @@ index 6f57cb9..645f8c4 100644
  
  #ifndef CONFIG_XIP_KERNEL
        . = ALIGN(PAGE_SIZE);
  
  #ifndef CONFIG_XIP_KERNEL
        . = ALIGN(PAGE_SIZE);
-@@ -220,6 +233,11 @@ SECTIONS
-       . = PAGE_OFFSET + TEXT_OFFSET;
+@@ -221,6 +234,11 @@ SECTIONS
  #else
  #else
+       . = ALIGN(THREAD_SIZE);
        __init_end = .;
 +
 +#ifdef CONFIG_PAX_KERNEXEC
 +      . = ALIGN(1<<SECTION_SHIFT);
 +#endif
 +
        __init_end = .;
 +
 +#ifdef CONFIG_PAX_KERNEXEC
 +      . = ALIGN(1<<SECTION_SHIFT);
 +#endif
 +
-       . = ALIGN(THREAD_SIZE);
        __data_loc = .;
  #endif
        __data_loc = .;
  #endif
 diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
 diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index a99e0cd..ab56421d 100644
+index 9e193c8..3560fe6 100644
 --- a/arch/arm/kvm/arm.c
 +++ b/arch/arm/kvm/arm.c
 @@ -57,7 +57,7 @@ static unsigned long hyp_default_vectors;
 --- a/arch/arm/kvm/arm.c
 +++ b/arch/arm/kvm/arm.c
 @@ -57,7 +57,7 @@ static unsigned long hyp_default_vectors;
@@ -3411,7 +3316,7 @@ index a99e0cd..ab56421d 100644
  static u8 kvm_next_vmid;
  static DEFINE_SPINLOCK(kvm_vmid_lock);
  
  static u8 kvm_next_vmid;
  static DEFINE_SPINLOCK(kvm_vmid_lock);
  
-@@ -372,7 +372,7 @@ void force_vm_exit(const cpumask_t *mask)
+@@ -354,7 +354,7 @@ void force_vm_exit(const cpumask_t *mask)
   */
  static bool need_new_vmid_gen(struct kvm *kvm)
  {
   */
  static bool need_new_vmid_gen(struct kvm *kvm)
  {
@@ -3420,7 +3325,7 @@ index a99e0cd..ab56421d 100644
  }
  
  /**
  }
  
  /**
-@@ -405,7 +405,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -387,7 +387,7 @@ static void update_vttbr(struct kvm *kvm)
  
        /* First user of a new VMID generation? */
        if (unlikely(kvm_next_vmid == 0)) {
  
        /* First user of a new VMID generation? */
        if (unlikely(kvm_next_vmid == 0)) {
@@ -3429,7 +3334,7 @@ index a99e0cd..ab56421d 100644
                kvm_next_vmid = 1;
  
                /*
                kvm_next_vmid = 1;
  
                /*
-@@ -422,7 +422,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -404,7 +404,7 @@ static void update_vttbr(struct kvm *kvm)
                kvm_call_hyp(__kvm_flush_vm_context);
        }
  
                kvm_call_hyp(__kvm_flush_vm_context);
        }
  
@@ -3438,7 +3343,7 @@ index a99e0cd..ab56421d 100644
        kvm->arch.vmid = kvm_next_vmid;
        kvm_next_vmid++;
  
        kvm->arch.vmid = kvm_next_vmid;
        kvm_next_vmid++;
  
-@@ -997,7 +997,7 @@ static void check_kvm_target_cpu(void *ret)
+@@ -980,7 +980,7 @@ static void check_kvm_target_cpu(void *ret)
  /**
   * Initialize Hyp-mode and memory mappings on all CPUs.
   */
  /**
   * Initialize Hyp-mode and memory mappings on all CPUs.
   */
@@ -3594,17 +3499,17 @@ index 3e58d71..029817c 100644
        /* See rational for this in __copy_to_user() above. */
        if (n < 64)
 diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c
        /* See rational for this in __copy_to_user() above. */
        if (n < 64)
 diff --git a/arch/arm/mach-at91/setup.c b/arch/arm/mach-at91/setup.c
-index f7a07a5..258e1f7 100644
+index 9610792..4dfb851 100644
 --- a/arch/arm/mach-at91/setup.c
 +++ b/arch/arm/mach-at91/setup.c
 --- a/arch/arm/mach-at91/setup.c
 +++ b/arch/arm/mach-at91/setup.c
-@@ -81,7 +81,7 @@ void __init at91_init_sram(int bank, unsigned long base, unsigned int length)
+@@ -83,7 +83,7 @@ void __init at91_init_sram(int bank, unsigned long base, unsigned int length)
  
        desc->pfn = __phys_to_pfn(base);
        desc->length = length;
 -      desc->type = MT_MEMORY_RWX_NONCACHED;
 +      desc->type = MT_MEMORY_RW_NONCACHED;
  
  
        desc->pfn = __phys_to_pfn(base);
        desc->length = length;
 -      desc->type = MT_MEMORY_RWX_NONCACHED;
 +      desc->type = MT_MEMORY_RW_NONCACHED;
  
-       pr_info("AT91: sram at 0x%lx of 0x%x mapped at 0x%lx\n",
+       pr_info("sram at 0x%lx of 0x%x mapped at 0x%lx\n",
                base, length, desc->virtual);
 diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
 index 7f352de..6dc0929 100644
                base, length, desc->virtual);
 diff --git a/arch/arm/mach-keystone/keystone.c b/arch/arm/mach-keystone/keystone.c
 index 7f352de..6dc0929 100644
@@ -3620,7 +3525,7 @@ index 7f352de..6dc0929 100644
  
  static int keystone_platform_notifier(struct notifier_block *nb,
 diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
  
  static int keystone_platform_notifier(struct notifier_block *nb,
 diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
-index 2bdc323..cf1c607 100644
+index c31f4c0..c86224d 100644
 --- a/arch/arm/mach-mvebu/coherency.c
 +++ b/arch/arm/mach-mvebu/coherency.c
 @@ -316,7 +316,7 @@ static void __init armada_370_coherency_init(struct device_node *np)
 --- a/arch/arm/mach-mvebu/coherency.c
 +++ b/arch/arm/mach-mvebu/coherency.c
 @@ -316,7 +316,7 @@ static void __init armada_370_coherency_init(struct device_node *np)
@@ -3642,20 +3547,20 @@ index 2bdc323..cf1c607 100644
        return __arm_ioremap_caller(phys_addr, size, mtype, caller);
  }
 diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
        return __arm_ioremap_caller(phys_addr, size, mtype, caller);
  }
 diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
-index aead77a..a2253fa 100644
+index 97767a2..9233746 100644
 --- a/arch/arm/mach-omap2/board-n8x0.c
 +++ b/arch/arm/mach-omap2/board-n8x0.c
 --- a/arch/arm/mach-omap2/board-n8x0.c
 +++ b/arch/arm/mach-omap2/board-n8x0.c
-@@ -568,7 +568,7 @@ static int n8x0_menelaus_late_init(struct device *dev)
+@@ -569,7 +569,7 @@ static int n8x0_menelaus_late_init(struct device *dev)
  }
  #endif
  
  }
  #endif
  
--static struct menelaus_platform_data n8x0_menelaus_platform_data __initdata = {
-+static struct menelaus_platform_data n8x0_menelaus_platform_data __initconst = {
+-struct menelaus_platform_data n8x0_menelaus_platform_data __initdata = {
++struct menelaus_platform_data n8x0_menelaus_platform_data __initconst = {
        .late_init = n8x0_menelaus_late_init,
  };
  
 diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
        .late_init = n8x0_menelaus_late_init,
  };
  
 diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
-index 2f97228..6ce10e1 100644
+index 5fa3755..1e8c247 100644
 --- a/arch/arm/mach-omap2/gpmc.c
 +++ b/arch/arm/mach-omap2/gpmc.c
 @@ -151,7 +151,6 @@ struct omap3_gpmc_regs {
 --- a/arch/arm/mach-omap2/gpmc.c
 +++ b/arch/arm/mach-omap2/gpmc.c
 @@ -151,7 +151,6 @@ struct omap3_gpmc_regs {
@@ -3702,19 +3607,19 @@ index 2f97228..6ce10e1 100644
        gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT;
  
 diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
        gpmc_client_irq[1].bitmask = GPMC_IRQ_COUNT_EVENT;
  
 diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
-index 4001325..b14e2a0 100644
+index 6944ae3..bc587ca 100644
 --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c
 +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
 --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c
 +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
-@@ -84,7 +84,7 @@ struct cpu_pm_ops {
-       int (*finish_suspend)(unsigned long cpu_state);
+@@ -86,7 +86,7 @@ struct cpu_pm_ops {
        void (*resume)(void);
        void (*scu_prepare)(unsigned int cpu_id, unsigned int cpu_state);
        void (*resume)(void);
        void (*scu_prepare)(unsigned int cpu_id, unsigned int cpu_state);
+       void (*hotplug_restart)(void);
 -};
 +} __no_const;
  
  static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info);
  static struct powerdomain *mpuss_pd;
 -};
 +} __no_const;
  
  static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info);
  static struct powerdomain *mpuss_pd;
-@@ -102,7 +102,7 @@ static void dummy_cpu_resume(void)
+@@ -105,7 +105,7 @@ static void dummy_cpu_resume(void)
  static void dummy_scu_prepare(unsigned int cpu_id, unsigned int cpu_state)
  {}
  
  static void dummy_scu_prepare(unsigned int cpu_id, unsigned int cpu_state)
  {}
  
@@ -3724,10 +3629,10 @@ index 4001325..b14e2a0 100644
        .resume                 = dummy_cpu_resume,
        .scu_prepare            = dummy_scu_prepare,
 diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
        .resume                 = dummy_cpu_resume,
        .scu_prepare            = dummy_scu_prepare,
 diff --git a/arch/arm/mach-omap2/omap-wakeupgen.c b/arch/arm/mach-omap2/omap-wakeupgen.c
-index 37843a7..a98df13 100644
+index f961c46..4a453dc 100644
 --- a/arch/arm/mach-omap2/omap-wakeupgen.c
 +++ b/arch/arm/mach-omap2/omap-wakeupgen.c
 --- a/arch/arm/mach-omap2/omap-wakeupgen.c
 +++ b/arch/arm/mach-omap2/omap-wakeupgen.c
-@@ -343,7 +343,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self,
+@@ -344,7 +344,7 @@ static int irq_cpu_hotplug_notify(struct notifier_block *self,
        return NOTIFY_OK;
  }
  
        return NOTIFY_OK;
  }
  
@@ -3737,7 +3642,7 @@ index 37843a7..a98df13 100644
  };
  
 diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
  };
  
 diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
-index d22c30d..23697a1 100644
+index 8c58b71..95b655f 100644
 --- a/arch/arm/mach-omap2/omap_device.c
 +++ b/arch/arm/mach-omap2/omap_device.c
 @@ -510,7 +510,7 @@ void omap_device_delete(struct omap_device *od)
 --- a/arch/arm/mach-omap2/omap_device.c
 +++ b/arch/arm/mach-omap2/omap_device.c
 @@ -510,7 +510,7 @@ void omap_device_delete(struct omap_device *od)
@@ -3778,7 +3683,7 @@ index 78c02b3..c94109a 100644
  struct omap_device *omap_device_alloc(struct platform_device *pdev,
                                      struct omap_hwmod **ohs, int oh_cnt);
 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
  struct omap_device *omap_device_alloc(struct platform_device *pdev,
                                      struct omap_hwmod **ohs, int oh_cnt);
 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
-index 9e91a4e..357ed0d 100644
+index 716247e..8df346d 100644
 --- a/arch/arm/mach-omap2/omap_hwmod.c
 +++ b/arch/arm/mach-omap2/omap_hwmod.c
 @@ -194,10 +194,10 @@ struct omap_hwmod_soc_ops {
 --- a/arch/arm/mach-omap2/omap_hwmod.c
 +++ b/arch/arm/mach-omap2/omap_hwmod.c
 @@ -194,10 +194,10 @@ struct omap_hwmod_soc_ops {
@@ -3818,7 +3723,7 @@ index 95fee54..cfa9cf1 100644
        pwrdm_register_pwrdms(powerdomains_am43xx);
        pwrdm_complete_init();
 diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c
        pwrdm_register_pwrdms(powerdomains_am43xx);
        pwrdm_complete_init();
 diff --git a/arch/arm/mach-omap2/wd_timer.c b/arch/arm/mach-omap2/wd_timer.c
-index 97d6607..8429d14 100644
+index ff0a68c..b312aa0 100644
 --- a/arch/arm/mach-omap2/wd_timer.c
 +++ b/arch/arm/mach-omap2/wd_timer.c
 @@ -110,7 +110,9 @@ static int __init omap_init_wdt(void)
 --- a/arch/arm/mach-omap2/wd_timer.c
 +++ b/arch/arm/mach-omap2/wd_timer.c
 @@ -110,7 +110,9 @@ static int __init omap_init_wdt(void)
@@ -3976,10 +3881,10 @@ index 83792f4..c25d36b 100644
                        goto fault;                             \
        } while (0)
 diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
                        goto fault;                             \
        } while (0)
 diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
-index 5f2c988..221412d 100644
+index 5e65ca8..879e7b3 100644
 --- a/arch/arm/mm/cache-l2x0.c
 +++ b/arch/arm/mm/cache-l2x0.c
 --- a/arch/arm/mm/cache-l2x0.c
 +++ b/arch/arm/mm/cache-l2x0.c
-@@ -41,7 +41,7 @@ struct l2c_init_data {
+@@ -42,7 +42,7 @@ struct l2c_init_data {
        void (*fixup)(void __iomem *, u32, struct outer_cache_fns *);
        void (*save)(void __iomem *);
        struct outer_cache_fns outer_cache;
        void (*fixup)(void __iomem *, u32, struct outer_cache_fns *);
        void (*save)(void __iomem *);
        struct outer_cache_fns outer_cache;
@@ -4287,7 +4192,7 @@ index cf08bdf..772656c 100644
  unsigned long search_exception_table(unsigned long addr);
  
 diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
  unsigned long search_exception_table(unsigned long addr);
  
 diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
-index 659c75d..6f8c029 100644
+index 9481f85..6dae261 100644
 --- a/arch/arm/mm/init.c
 +++ b/arch/arm/mm/init.c
 @@ -31,6 +31,8 @@
 --- a/arch/arm/mm/init.c
 +++ b/arch/arm/mm/init.c
 @@ -31,6 +31,8 @@
@@ -4474,7 +4379,7 @@ index 5e85ed3..b10a7ed 100644
        }
  }
 diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
        }
  }
 diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
-index 8348ed6..b73a807 100644
+index 9f98cec..115fcb6 100644
 --- a/arch/arm/mm/mmu.c
 +++ b/arch/arm/mm/mmu.c
 @@ -40,6 +40,22 @@
 --- a/arch/arm/mm/mmu.c
 +++ b/arch/arm/mm/mmu.c
 @@ -40,6 +40,22 @@
@@ -4858,10 +4763,18 @@ index 8348ed6..b73a807 100644
  }
  
 diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
  }
  
 diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c
-index a37b989..5c9ae75 100644
+index e1268f9..a9755a7 100644
 --- a/arch/arm/net/bpf_jit_32.c
 +++ b/arch/arm/net/bpf_jit_32.c
 --- a/arch/arm/net/bpf_jit_32.c
 +++ b/arch/arm/net/bpf_jit_32.c
-@@ -71,7 +71,11 @@ struct jit_ctx {
+@@ -20,6 +20,7 @@
+ #include <asm/cacheflush.h>
+ #include <asm/hwcap.h>
+ #include <asm/opcodes.h>
++#include <asm/pgtable.h>
+ #include "bpf_jit_32.h"
+@@ -71,7 +72,11 @@ struct jit_ctx {
  #endif
  };
  
  #endif
  };
  
@@ -4873,14 +4786,17 @@ index a37b989..5c9ae75 100644
  
  static u64 jit_get_skb_b(struct sk_buff *skb, unsigned offset)
  {
  
  static u64 jit_get_skb_b(struct sk_buff *skb, unsigned offset)
  {
-@@ -930,5 +934,6 @@ void bpf_jit_free(struct bpf_prog *fp)
+@@ -178,8 +183,10 @@ static void jit_fill_hole(void *area, unsigned int size)
  {
  {
-       if (fp->jited)
-               module_free(NULL, fp->bpf_func);
--      kfree(fp);
-+
-+      bpf_prog_unlock_free(fp);
+       u32 *ptr;
+       /* We are guaranteed to have aligned memory. */
++      pax_open_kernel();
+       for (ptr = area; size >= sizeof(u32); size -= sizeof(u32))
+               *ptr++ = __opcode_to_mem_arm(ARM_INST_UDF);
++      pax_close_kernel();
  }
  }
+ static void build_prologue(struct jit_ctx *ctx)
 diff --git a/arch/arm/plat-iop/setup.c b/arch/arm/plat-iop/setup.c
 index 5b217f4..c23f40e 100644
 --- a/arch/arm/plat-iop/setup.c
 diff --git a/arch/arm/plat-iop/setup.c b/arch/arm/plat-iop/setup.c
 index 5b217f4..c23f40e 100644
 --- a/arch/arm/plat-iop/setup.c
@@ -5097,7 +5013,7 @@ index 7caf25d..ee65ac5 100644
  #define __read_mostly __attribute__((__section__(".data..read_mostly")))
  
 diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h
  #define __read_mostly __attribute__((__section__(".data..read_mostly")))
  
 diff --git a/arch/frv/include/asm/atomic.h b/arch/frv/include/asm/atomic.h
-index f6c3a16..cd422a4 100644
+index 102190a..5334cea 100644
 --- a/arch/frv/include/asm/atomic.h
 +++ b/arch/frv/include/asm/atomic.h
 @@ -181,6 +181,16 @@ static inline void atomic64_dec(atomic64_t *v)
 --- a/arch/frv/include/asm/atomic.h
 +++ b/arch/frv/include/asm/atomic.h
 @@ -181,6 +181,16 @@ static inline void atomic64_dec(atomic64_t *v)
@@ -5218,10 +5134,10 @@ index 5441b14..039a446 100644
  make_nr_irqs_h: FORCE
        $(Q)$(MAKE) $(build)=arch/ia64/kernel include/generated/nr-irqs.h
 diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h
  make_nr_irqs_h: FORCE
        $(Q)$(MAKE) $(build)=arch/ia64/kernel include/generated/nr-irqs.h
 diff --git a/arch/ia64/include/asm/atomic.h b/arch/ia64/include/asm/atomic.h
-index 0f8bf48..40ea950 100644
+index 0bf0350..2ad1957 100644
 --- a/arch/ia64/include/asm/atomic.h
 +++ b/arch/ia64/include/asm/atomic.h
 --- a/arch/ia64/include/asm/atomic.h
 +++ b/arch/ia64/include/asm/atomic.h
-@@ -209,4 +209,14 @@ atomic64_add_negative (__s64 i, atomic64_t *v)
+@@ -193,4 +193,14 @@ atomic64_add_negative (__s64 i, atomic64_t *v)
  #define atomic64_inc(v)                       atomic64_add(1, (v))
  #define atomic64_dec(v)                       atomic64_sub(1, (v))
  
  #define atomic64_inc(v)                       atomic64_add(1, (v))
  #define atomic64_dec(v)                       atomic64_sub(1, (v))
  
@@ -5789,10 +5705,10 @@ index 4efe96a..60e8699 100644
  #define SMP_CACHE_BYTES       L1_CACHE_BYTES
  
 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
  #define SMP_CACHE_BYTES       L1_CACHE_BYTES
  
 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index 574c430..470200d 100644
+index 9536ef9..9333776 100644
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -2399,6 +2399,7 @@ source "kernel/Kconfig.preempt"
+@@ -2413,6 +2413,7 @@ source "kernel/Kconfig.preempt"
  
  config KEXEC
        bool "Kexec system call"
  
  config KEXEC
        bool "Kexec system call"
@@ -5814,7 +5730,7 @@ index 02f2444..506969c 100644
  
  static dma_addr_t octeon_unity_phys_to_dma(struct device *dev, phys_addr_t paddr)
 diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h
  
  static dma_addr_t octeon_unity_phys_to_dma(struct device *dev, phys_addr_t paddr)
 diff --git a/arch/mips/include/asm/atomic.h b/arch/mips/include/asm/atomic.h
-index 37b2bef..02122b8 100644
+index 6dd6bfc..903b0d6 100644
 --- a/arch/mips/include/asm/atomic.h
 +++ b/arch/mips/include/asm/atomic.h
 @@ -21,15 +21,39 @@
 --- a/arch/mips/include/asm/atomic.h
 +++ b/arch/mips/include/asm/atomic.h
 @@ -21,15 +21,39 @@
@@ -5845,20 +5761,20 @@ index 37b2bef..02122b8 100644
   *
   * Atomically reads the value of @v.
   */
   *
   * Atomically reads the value of @v.
   */
--#define atomic_read(v)                (*(volatile int *)&(v)->counter)
+-#define atomic_read(v)                ACCESS_ONCE((v)->counter)
 +static inline int atomic_read(const atomic_t *v)
 +{
 +static inline int atomic_read(const atomic_t *v)
 +{
-+      return (*(volatile const int *) &v->counter);
++      return ACCESS_ONCE(v->counter);
 +}
 +
 +static inline int atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
 +}
 +
 +static inline int atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
-+      return (*(volatile const int *) &v->counter);
++      return ACCESS_ONCE(v->counter);
 +}
  
  /*
   * atomic_set - set atomic variable
 +}
  
  /*
   * atomic_set - set atomic variable
-@@ -38,7 +62,15 @@
+@@ -38,47 +62,77 @@
   *
   * Atomically sets the value of @v to @i.
   */
   *
   * Atomically sets the value of @v to @i.
   */
@@ -5867,343 +5783,187 @@ index 37b2bef..02122b8 100644
 +{
 +      v->counter = i;
 +}
 +{
 +      v->counter = i;
 +}
-+
+-#define ATOMIC_OP(op, c_op, asm_op)                                           \
+-static __inline__ void atomic_##op(int i, atomic_t * v)                               \
 +static inline void atomic_set_unchecked(atomic_unchecked_t *v, int i)
 +{
 +      v->counter = i;
 +}
 +static inline void atomic_set_unchecked(atomic_unchecked_t *v, int i)
 +{
 +      v->counter = i;
 +}
- /*
-  * atomic_add - add integer to atomic variable
-@@ -47,7 +79,67 @@
-  *
-  * Atomically adds @i to @v.
-  */
--static __inline__ void atomic_add(int i, atomic_t * v)
-+static __inline__ void atomic_add(int i, atomic_t *v)
-+{
-+      int temp;
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %0, %1          # atomic_add            \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "2:     add     %0, %2                                  \n"
-+#else
-+              "       addu    %0, %2                                  \n"
-+#endif
-+              "       sc      %0, %1                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %0, %1          # atomic_add            \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Exception on overflow. */
-+              "2:     add     %0, %2                                  \n"
-+#else
-+              "       addu    %0, %2                                  \n"
-+#endif
-+              "       sc      %0, %1                                  \n"
-+              "       beqz    %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     add     %0, %1                                  \n"
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#else
-+              "       addu    %0, %1                                  \n"
-+#endif
-+              : "+r" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+}
-+
-+static __inline__ void atomic_add_unchecked(int i, atomic_unchecked_t *v)
- {
-       if (kernel_uses_llsc && R10000_LLSC_WAR) {
-               int temp;
-@@ -90,7 +182,67 @@ static __inline__ void atomic_add(int i, atomic_t * v)
-  *
-  * Atomically subtracts @i from @v.
-  */
--static __inline__ void atomic_sub(int i, atomic_t * v)
-+static __inline__ void atomic_sub(int i, atomic_t *v)
-+{
-+      int temp;
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %0, %1          # atomic64_sub          \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Exception on overflow. */
-+              "2:     sub     %0, %2                                  \n"
-+#else
-+              "       subu    %0, %2                                  \n"
-+#endif
-+              "       sc      %0, %1                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %0, %1          # atomic64_sub          \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Exception on overflow. */
-+              "2:     sub     %0, %2                                  \n"
-+#else
-+              "       subu    %0, %2                                  \n"
-+#endif
-+              "       sc      %0, %1                                  \n"
-+              "       beqz    %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     sub     %0, %1                                  \n"
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#else
-+              "       subu    %0, %1                                  \n"
-+#endif
-+              : "+r" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+}
-+
-+static __inline__ void atomic_sub_unchecked(long i, atomic_unchecked_t *v)
- {
-       if (kernel_uses_llsc && R10000_LLSC_WAR) {
-               int temp;
-@@ -129,7 +281,93 @@ static __inline__ void atomic_sub(int i, atomic_t * v)
- /*
-  * Same as above, but return the result value
-  */
--static __inline__ int atomic_add_return(int i, atomic_t * v)
-+static __inline__ int atomic_add_return(int i, atomic_t *v)
-+{
-+      int result;
-+      int temp;
-+
-+      smp_mb__before_llsc();
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %1, %2          # atomic_add_return     \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     add     %0, %1, %3                              \n"
-+#else
-+              "       addu    %0, %1, %3                              \n"
-+#endif
-+              "       sc      %0, %2                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       b       4f                                      \n"
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     addu    %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %1, %2  # atomic_add_return             \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     add     %0, %1, %3                              \n"
-+#else
-+              "       addu    %0, %1, %3                              \n"
-+#endif
-+              "       sc      %0, %2                                  \n"
-+              "       bnez    %0, 4f                                  \n"
-+              "       b       1b                                      \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     addu    %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+              "       lw      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     add     %0, %2                                  \n"
-+#else
-+              "       addu    %0, %2                                  \n"
-+#endif
-+              "       sw      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Note: Dest reg is not modified on overflow */
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#endif
-+              : "=&r" (result), "+m" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+
-+      smp_llsc_mb();
-+
-+      return result;
-+}
-+
-+static __inline__ int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
- {
-       int result;
-@@ -178,7 +416,93 @@ static __inline__ int atomic_add_return(int i, atomic_t * v)
-       return result;
- }
--static __inline__ int atomic_sub_return(int i, atomic_t * v)
-+static __inline__ int atomic_sub_return(int i, atomic_t *v)
-+{
-+      int result;
-+      int temp;
-+
-+      smp_mb__before_llsc();
 +
 +
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %1, %2          # atomic_sub_return     \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     sub     %0, %1, %3                              \n"
-+#else
-+              "       subu    %0, %1, %3                              \n"
-+#endif
-+              "       sc      %0, %2                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       b       4f                                      \n"
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     subu    %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "=m" (v->counter)
-+              : "Ir" (i), "m" (v->counter)
-+              : "memory");
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     ll      %1, %2  # atomic_sub_return             \n"
 +#ifdef CONFIG_PAX_REFCOUNT
 +#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     sub     %0, %1, %3                              \n"
++#define __OVERFLOW_POST                               \
++      "       b       4f              \n"     \
++      "       .set    noreorder       \n"     \
++      "3:     b       5f              \n"     \
++      "       move    %0, %1          \n"     \
++      "       .set    reorder         \n"
++#define __OVERFLOW_EXTABLE    \
++      "3:\n"                  \
++      _ASM_EXTABLE(2b, 3b)
 +#else
 +#else
-+              "       subu    %0, %1, %3                              \n"
-+#endif
-+              "       sc      %0, %2                                  \n"
-+              "       bnez    %0, 4f                                  \n"
-+              "       b       1b                                      \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     subu    %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+              "       lw      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     sub     %0, %2                                  \n"
-+#else
-+              "       subu    %0, %2                                  \n"
-+#endif
-+              "       sw      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Note: Dest reg is not modified on overflow */
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#endif
-+              : "=&r" (result), "+m" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+
-+      smp_llsc_mb();
-+
-+      return result;
-+}
-+static __inline__ int atomic_sub_return_unchecked(int i, atomic_unchecked_t *v)
- {
-       int result;
++#define __OVERFLOW_POST
++#define __OVERFLOW_EXTABLE
++#endif
++
++#define __ATOMIC_OP(op, suffix, asm_op, extable)                              \
++static inline void atomic_##op##suffix(int i, atomic##suffix##_t * v)         \
+ {                                                                             \
+       if (kernel_uses_llsc && R10000_LLSC_WAR) {                              \
+               int temp;                                                       \
+                                                                               \
+               __asm__ __volatile__(                                           \
+-              "       .set    arch=r4000                              \n"     \
+-              "1:     ll      %0, %1          # atomic_" #op "        \n"     \
+-              "       " #asm_op " %0, %2                              \n"     \
++              "       .set    mips3                                   \n"     \
++              "1:     ll      %0, %1          # atomic_" #op #suffix "\n"     \
++              "2:     " #asm_op " %0, %2                              \n"     \
+               "       sc      %0, %1                                  \n"     \
+               "       beqzl   %0, 1b                                  \n"     \
++              extable                                                         \
+               "       .set    mips0                                   \n"     \
+               : "=&r" (temp), "+m" (v->counter)                               \
+               : "Ir" (i));                                                    \
+       } else if (kernel_uses_llsc) {                                          \
+               int temp;                                                       \
+                                                                               \
+-              do {                                                            \
+-                      __asm__ __volatile__(                                   \
+-                      "       .set    arch=r4000                      \n"     \
+-                      "       ll      %0, %1          # atomic_" #op "\n"     \
+-                      "       " #asm_op " %0, %2                      \n"     \
+-                      "       sc      %0, %1                          \n"     \
+-                      "       .set    mips0                           \n"     \
+-                      : "=&r" (temp), "+m" (v->counter)                       \
+-                      : "Ir" (i));                                            \
+-              } while (unlikely(!temp));                                      \
++              __asm__ __volatile__(                                           \
++              "       .set    mips3                                   \n"     \
++              "       ll      %0, %1          # atomic_" #op #suffix "\n"     \
++              "2:     " #asm_op " %0, %2                              \n"     \
++              "       sc      %0, %1                                  \n"     \
++              "       beqz    %0, 1b                                  \n"     \
++                      extable                                                 \
++              "       .set    mips0                                   \n"     \
++              : "=&r" (temp), "+m" (v->counter)                               \
++              : "Ir" (i));                                                    \
+       } else {                                                                \
+               unsigned long flags;                                            \
+                                                                               \
+               raw_local_irq_save(flags);                                      \
+-              v->counter c_op i;                                              \
++              __asm__ __volatile__(                                           \
++              "2:     " #asm_op " %0, %1                              \n"     \
++              extable                                                         \
++              : "+r" (v->counter) : "Ir" (i));                                \
+               raw_local_irq_restore(flags);                                   \
+       }                                                                       \
+ }                                                                             \
+-#define ATOMIC_OP_RETURN(op, c_op, asm_op)                                    \
+-static __inline__ int atomic_##op##_return(int i, atomic_t * v)                       \
++#define ATOMIC_OP(op, asm_op) __ATOMIC_OP(op, , asm_op##u)                    \
++                            __ATOMIC_OP(op, _unchecked, asm_op)
++
++#define __ATOMIC_OP_RETURN(op, suffix, asm_op, post_op, extable)              \
++static inline int atomic_##op##_return##suffix(int i, atomic##suffix##_t * v) \
+ {                                                                             \
+       int result;                                                             \
+                                                                               \
+@@ -88,37 +142,47 @@ static __inline__ int atomic_##op##_return(int i, atomic_t * v)                   \
+               int temp;                                                       \
+                                                                               \
+               __asm__ __volatile__(                                           \
+-              "       .set    arch=r4000                              \n"     \
+-              "1:     ll      %1, %2          # atomic_" #op "_return \n"     \
+-              "       " #asm_op " %0, %1, %3                          \n"     \
++              "       .set    mips3                                   \n"     \
++              "1:     ll      %1, %2  # atomic_" #op "_return" #suffix "\n"   \
++              "2:     " #asm_op " %0, %1, %3                          \n"     \
+               "       sc      %0, %2                                  \n"     \
+               "       beqzl   %0, 1b                                  \n"     \
+-              "       " #asm_op " %0, %1, %3                          \n"     \
++              post_op                                                         \
++              extable                                                         \
++              "4:     " #asm_op " %0, %1, %3                          \n"     \
++              "5:                                                     \n"     \
+               "       .set    mips0                                   \n"     \
+               : "=&r" (result), "=&r" (temp), "+m" (v->counter)               \
+               : "Ir" (i));                                                    \
+       } else if (kernel_uses_llsc) {                                          \
+               int temp;                                                       \
+                                                                               \
+-              do {                                                            \
+-                      __asm__ __volatile__(                                   \
+-                      "       .set    arch=r4000                      \n"     \
+-                      "       ll      %1, %2  # atomic_" #op "_return \n"     \
+-                      "       " #asm_op " %0, %1, %3                  \n"     \
+-                      "       sc      %0, %2                          \n"     \
+-                      "       .set    mips0                           \n"     \
+-                      : "=&r" (result), "=&r" (temp), "+m" (v->counter)       \
+-                      : "Ir" (i));                                            \
+-              } while (unlikely(!result));                                    \
++              __asm__ __volatile__(                                           \
++              "       .set    mips3                                   \n"     \
++              "1:     ll      %1, %2  # atomic_" #op "_return" #suffix "\n"   \
++              "2:     " #asm_op " %0, %1, %3                          \n"     \
++              "       sc      %0, %2                                  \n"     \
++              "       beqz    %0, 1b                                  \n"     \
++              post_op                                                         \
++              extable                                                         \
++              "4:     " #asm_op " %0, %1, %3                          \n"     \
++              "5:                                                     \n"     \
++              "       .set    mips0                                   \n"     \
++              : "=&r" (result), "=&r" (temp), "+m" (v->counter)               \
++              : "Ir" (i));                                                    \
+                                                                               \
+               result = temp; result c_op i;                                   \
+       } else {                                                                \
+               unsigned long flags;                                            \
+                                                                               \
+               raw_local_irq_save(flags);                                      \
+-              result = v->counter;                                            \
+-              result c_op i;                                                  \
+-              v->counter = result;                                            \
++              __asm__ __volatile__(                                           \
++              "       lw      %0, %1                                  \n"     \
++              "2:     " #asm_op " %0, %1, %2                          \n"     \
++              "       sw      %0, %1                                  \n"     \
++              "3:                                                     \n"     \
++              extable                                                         \
++              : "=&r" (result), "+m" (v->counter) : "Ir" (i));                \
+               raw_local_irq_restore(flags);                                   \
+       }                                                                       \
+                                                                               \
+@@ -127,16 +191,21 @@ static __inline__ int atomic_##op##_return(int i, atomic_t * v)                  \
+       return result;                                                          \
+ }
+-#define ATOMIC_OPS(op, c_op, asm_op)                                          \
+-      ATOMIC_OP(op, c_op, asm_op)                                             \
+-      ATOMIC_OP_RETURN(op, c_op, asm_op)
++#define ATOMIC_OP_RETURN(op, asm_op) __ATOMIC_OP_RETURN(op, , asm_op##u, , __OVERFLOW_EXTABLE)        \
++                                   __ATOMIC_OP_RETURN(op, _unchecked, asm_op, __OVERFLOW_POST, __OVERFLOW_EXTABLE)
+-ATOMIC_OPS(add, +=, addu)
+-ATOMIC_OPS(sub, -=, subu)
++#define ATOMIC_OPS(op, asm_op)                                                        \
++      ATOMIC_OP(op, asm_op)                                                   \
++      ATOMIC_OP_RETURN(op, asm_op)
++
++ATOMIC_OPS(add, add)
++ATOMIC_OPS(sub, sub)
+ #undef ATOMIC_OPS
+ #undef ATOMIC_OP_RETURN
++#undef __ATOMIC_OP_RETURN
+ #undef ATOMIC_OP
++#undef __ATOMIC_OP
  
  
-@@ -238,7 +562,7 @@ static __inline__ int atomic_sub_return(int i, atomic_t * v)
+ /*
+  * atomic_sub_if_positive - conditionally subtract integer from atomic variable
+@@ -146,7 +215,7 @@ ATOMIC_OPS(sub, -=, subu)
   * Atomically test @v and subtract @i if @v is greater or equal than @i.
   * The function returns the old value of @v minus @i.
   */
   * Atomically test @v and subtract @i if @v is greater or equal than @i.
   * The function returns the old value of @v minus @i.
   */
@@ -6212,7 +5972,7 @@ index 37b2bef..02122b8 100644
  {
        int result;
  
  {
        int result;
  
-@@ -295,8 +619,26 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v)
+@@ -203,8 +272,26 @@ static __inline__ int atomic_sub_if_positive(int i, atomic_t * v)
        return result;
  }
  
        return result;
  }
  
@@ -6241,7 +6001,7 @@ index 37b2bef..02122b8 100644
  
  /**
   * __atomic_add_unless - add unless the number is a given value
  
  /**
   * __atomic_add_unless - add unless the number is a given value
-@@ -324,6 +666,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -232,6 +319,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
  
  #define atomic_dec_return(v) atomic_sub_return(1, (v))
  #define atomic_inc_return(v) atomic_add_return(1, (v))
  
  #define atomic_dec_return(v) atomic_sub_return(1, (v))
  #define atomic_inc_return(v) atomic_add_return(1, (v))
@@ -6252,7 +6012,7 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic_sub_and_test - subtract value from variable and test result
  
  /*
   * atomic_sub_and_test - subtract value from variable and test result
-@@ -345,6 +691,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -253,6 +344,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
   * other cases.
   */
  #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
   * other cases.
   */
  #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
@@ -6263,7 +6023,7 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic_dec_and_test - decrement by 1 and test
  
  /*
   * atomic_dec_and_test - decrement by 1 and test
-@@ -369,6 +719,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -277,6 +372,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
   * Atomically increments @v by 1.
   */
  #define atomic_inc(v) atomic_add(1, (v))
   * Atomically increments @v by 1.
   */
  #define atomic_inc(v) atomic_add(1, (v))
@@ -6274,7 +6034,7 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic_dec - decrement and test
  
  /*
   * atomic_dec - decrement and test
-@@ -377,6 +731,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -285,6 +384,10 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
   * Atomically decrements @v by 1.
   */
  #define atomic_dec(v) atomic_sub(1, (v))
   * Atomically decrements @v by 1.
   */
  #define atomic_dec(v) atomic_sub(1, (v))
@@ -6285,19 +6045,19 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic_add_negative - add and test if negative
  
  /*
   * atomic_add_negative - add and test if negative
-@@ -398,14 +756,30 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -306,54 +409,77 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
   * @v: pointer of type atomic64_t
   *
   */
   * @v: pointer of type atomic64_t
   *
   */
--#define atomic64_read(v)      (*(volatile long *)&(v)->counter)
+-#define atomic64_read(v)      ACCESS_ONCE((v)->counter)
 +static inline long atomic64_read(const atomic64_t *v)
 +{
 +static inline long atomic64_read(const atomic64_t *v)
 +{
-+      return (*(volatile const long *) &v->counter);
++      return ACCESS_ONCE(v->counter);
 +}
 +
 +static inline long atomic64_read_unchecked(const atomic64_unchecked_t *v)
 +{
 +}
 +
 +static inline long atomic64_read_unchecked(const atomic64_unchecked_t *v)
 +{
-+      return (*(volatile const long *) &v->counter);
++      return ACCESS_ONCE(v->counter);
 +}
  
  /*
 +}
  
  /*
@@ -6310,346 +6070,175 @@ index 37b2bef..02122b8 100644
 +{
 +      v->counter = i;
 +}
 +{
 +      v->counter = i;
 +}
-+
+-#define ATOMIC64_OP(op, c_op, asm_op)                                         \
+-static __inline__ void atomic64_##op(long i, atomic64_t * v)                  \
 +static inline void atomic64_set_unchecked(atomic64_unchecked_t *v, long i)
 +{
 +      v->counter = i;
 +}
 +static inline void atomic64_set_unchecked(atomic64_unchecked_t *v, long i)
 +{
 +      v->counter = i;
 +}
- /*
-  * atomic64_add - add integer to atomic variable
-@@ -414,7 +788,66 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
-  *
-  * Atomically adds @i to @v.
-  */
--static __inline__ void atomic64_add(long i, atomic64_t * v)
-+static __inline__ void atomic64_add(long i, atomic64_t *v)
-+{
-+      long temp;
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %0, %1          # atomic64_add          \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "2:     dadd    %0, %2                                  \n"
-+#else
-+              "       daddu   %0, %2                                  \n"
-+#endif
-+              "       scd     %0, %1                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %0, %1          # atomic64_add          \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "2:     dadd    %0, %2                                  \n"
-+#else
-+              "       daddu   %0, %2                                  \n"
-+#endif
-+              "       scd     %0, %1                                  \n"
-+              "       beqz    %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     dadd    %0, %1                                  \n"
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#else
-+              "       daddu   %0, %1                                  \n"
-+#endif
-+              : "+r" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+}
-+static __inline__ void atomic64_add_unchecked(long i, atomic64_unchecked_t *v)
- {
-       if (kernel_uses_llsc && R10000_LLSC_WAR) {
-               long temp;
-@@ -457,7 +890,67 @@ static __inline__ void atomic64_add(long i, atomic64_t * v)
-  *
-  * Atomically subtracts @i from @v.
-  */
--static __inline__ void atomic64_sub(long i, atomic64_t * v)
-+static __inline__ void atomic64_sub(long i, atomic64_t *v)
-+{
-+      long temp;
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %0, %1          # atomic64_sub          \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Exception on overflow. */
-+              "2:     dsub    %0, %2                                  \n"
-+#else
-+              "       dsubu   %0, %2                                  \n"
-+#endif
-+              "       scd     %0, %1                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %0, %1          # atomic64_sub          \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Exception on overflow. */
-+              "2:     dsub    %0, %2                                  \n"
-+#else
-+              "       dsubu   %0, %2                                  \n"
-+#endif
-+              "       scd     %0, %1                                  \n"
-+              "       beqz    %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "3:                                                     \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     dsub    %0, %1                                  \n"
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#else
-+              "       dsubu   %0, %1                                  \n"
-+#endif
-+              : "+r" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+}
-+
-+static __inline__ void atomic64_sub_unchecked(long i, atomic64_unchecked_t *v)
- {
-       if (kernel_uses_llsc && R10000_LLSC_WAR) {
-               long temp;
-@@ -496,7 +989,93 @@ static __inline__ void atomic64_sub(long i, atomic64_t * v)
- /*
-  * Same as above, but return the result value
-  */
--static __inline__ long atomic64_add_return(long i, atomic64_t * v)
-+static __inline__ long atomic64_add_return(long i, atomic64_t *v)
-+{
-+      long result;
-+      long temp;
-+
-+      smp_mb__before_llsc();
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %1, %2          # atomic64_add_return   \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     dadd    %0, %1, %3                              \n"
-+#else
-+              "       daddu   %0, %1, %3                              \n"
-+#endif
-+              "       scd     %0, %2                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       b       4f                                      \n"
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     daddu   %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "+m" (v->counter)
-+              : "Ir" (i));
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %1, %2  # atomic64_add_return           \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     dadd    %0, %1, %3                              \n"
-+#else
-+              "       daddu   %0, %1, %3                              \n"
-+#endif
-+              "       scd     %0, %2                                  \n"
-+              "       bnez    %0, 4f                                  \n"
-+              "       b       1b                                      \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     daddu   %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "=m" (v->counter)
-+              : "Ir" (i), "m" (v->counter)
-+              : "memory");
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+              "       ld      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     dadd    %0, %2                                  \n"
-+#else
-+              "       daddu   %0, %2                                  \n"
-+#endif
-+              "       sd      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Note: Dest reg is not modified on overflow */
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#endif
-+              : "=&r" (result), "+m" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+
-+      smp_llsc_mb();
-+
-+      return result;
-+}
-+static __inline__ long atomic64_add_return_unchecked(long i, atomic64_unchecked_t *v)
- {
-       long result;
-@@ -546,7 +1125,97 @@ static __inline__ long atomic64_add_return(long i, atomic64_t * v)
-       return result;
- }
--static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
-+static __inline__ long atomic64_sub_return(long i, atomic64_t *v)
-+{
-+      long result;
-+      long temp;
-+
-+      smp_mb__before_llsc();
-+
-+      if (kernel_uses_llsc && R10000_LLSC_WAR) {
-+              long temp;
 +
 +
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %1, %2          # atomic64_sub_return   \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     dsub    %0, %1, %3                              \n"
-+#else
-+              "       dsubu   %0, %1, %3                              \n"
-+#endif
-+              "       scd     %0, %2                                  \n"
-+              "       beqzl   %0, 1b                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       b       4f                                      \n"
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     dsubu   %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "=m" (v->counter)
-+              : "Ir" (i), "m" (v->counter)
-+              : "memory");
-+      } else if (kernel_uses_llsc) {
-+              __asm__ __volatile__(
-+              "       .set    mips3                                   \n"
-+              "1:     lld     %1, %2  # atomic64_sub_return           \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "2:     dsub    %0, %1, %3                              \n"
-+#else
-+              "       dsubu   %0, %1, %3                              \n"
-+#endif
-+              "       scd     %0, %2                                  \n"
-+              "       bnez    %0, 4f                                  \n"
-+              "       b       1b                                      \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "       .set    noreorder                               \n"
-+              "3:     b       5f                                      \n"
-+              "       move    %0, %1                                  \n"
-+              "       .set    reorder                                 \n"
-+              _ASM_EXTABLE(2b, 3b)
-+#endif
-+              "4:     dsubu   %0, %1, %3                              \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              "5:                                                     \n"
-+#endif
-+              "       .set    mips0                                   \n"
-+              : "=&r" (result), "=&r" (temp), "=m" (v->counter)
-+              : "Ir" (i), "m" (v->counter)
-+              : "memory");
-+      } else {
-+              unsigned long flags;
-+
-+              raw_local_irq_save(flags);
-+              __asm__ __volatile__(
-+              "       ld      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+                      /* Exception on overflow. */
-+              "1:     dsub    %0, %2                                  \n"
-+#else
-+              "       dsubu   %0, %2                                  \n"
-+#endif
-+              "       sd      %0, %1                                  \n"
-+#ifdef CONFIG_PAX_REFCOUNT
-+              /* Note: Dest reg is not modified on overflow */
-+              "2:                                                     \n"
-+              _ASM_EXTABLE(1b, 2b)
-+#endif
-+              : "=&r" (result), "+m" (v->counter) : "Ir" (i));
-+              raw_local_irq_restore(flags);
-+      }
-+
-+      smp_llsc_mb();
-+
-+      return result;
-+}
-+
-+static __inline__ long atomic64_sub_return_unchecked(long i, atomic64_unchecked_t *v)
- {
-       long result;
++#define __ATOMIC64_OP(op, suffix, asm_op, extable)                            \
++static inline void atomic64_##op##suffix(long i, atomic64##suffix##_t * v)    \
+ {                                                                             \
+       if (kernel_uses_llsc && R10000_LLSC_WAR) {                              \
+               long temp;                                                      \
+                                                                               \
+               __asm__ __volatile__(                                           \
+-              "       .set    arch=r4000                              \n"     \
+-              "1:     lld     %0, %1          # atomic64_" #op "      \n"     \
+-              "       " #asm_op " %0, %2                              \n"     \
++              "       .set    mips3                                   \n"     \
++              "1:     lld     %0, %1          # atomic64_" #op #suffix "\n"   \
++              "2:     " #asm_op " %0, %2                              \n"     \
+               "       scd     %0, %1                                  \n"     \
+               "       beqzl   %0, 1b                                  \n"     \
++              extable                                                         \
+               "       .set    mips0                                   \n"     \
+               : "=&r" (temp), "+m" (v->counter)                               \
+               : "Ir" (i));                                                    \
+       } else if (kernel_uses_llsc) {                                          \
+               long temp;                                                      \
+                                                                               \
+-              do {                                                            \
+-                      __asm__ __volatile__(                                   \
+-                      "       .set    arch=r4000                      \n"     \
+-                      "       lld     %0, %1          # atomic64_" #op "\n"   \
+-                      "       " #asm_op " %0, %2                      \n"     \
+-                      "       scd     %0, %1                          \n"     \
+-                      "       .set    mips0                           \n"     \
+-                      : "=&r" (temp), "+m" (v->counter)                       \
+-                      : "Ir" (i));                                            \
+-              } while (unlikely(!temp));                                      \
++              __asm__ __volatile__(                                           \
++              "       .set    mips3                                   \n"     \
++              "       lld     %0, %1          # atomic64_" #op #suffix "\n"   \
++              "2:     " #asm_op " %0, %2                              \n"     \
++              "       scd     %0, %1                                  \n"     \
++              "       beqz    %0, 1b                                  \n"     \
++                      extable                                                 \
++              "       .set    mips0                                   \n"     \
++              : "=&r" (temp), "+m" (v->counter)                               \
++              : "Ir" (i));                                                    \
+       } else {                                                                \
+               unsigned long flags;                                            \
+                                                                               \
+               raw_local_irq_save(flags);                                      \
+-              v->counter c_op i;                                              \
++              __asm__ __volatile__(                                           \
++              "2:     " #asm_op " %0, %1                              \n"     \
++              extable                                                         \
++              : "+r" (v->counter) : "Ir" (i));                                \
+               raw_local_irq_restore(flags);                                   \
+       }                                                                       \
+ }                                                                             \
+-#define ATOMIC64_OP_RETURN(op, c_op, asm_op)                                  \
+-static __inline__ long atomic64_##op##_return(long i, atomic64_t * v)         \
++#define ATOMIC64_OP(op, asm_op) __ATOMIC64_OP(op, , asm_op##u)                        \
++                              __ATOMIC64_OP(op, _unchecked, asm_op)
++
++#define __ATOMIC64_OP_RETURN(op, suffix, asm_op, post_op, extable)            \
++static inline long atomic64_##op##_return##suffix(long i, atomic64##suffix##_t * v)\
+ {                                                                             \
+       long result;                                                            \
+                                                                               \
+@@ -363,38 +489,48 @@ static __inline__ long atomic64_##op##_return(long i, atomic64_t * v)            \
+               long temp;                                                      \
+                                                                               \
+               __asm__ __volatile__(                                           \
+-              "       .set    arch=r4000                              \n"     \
++              "       .set    mips3                                   \n"     \
+               "1:     lld     %1, %2          # atomic64_" #op "_return\n"    \
+-              "       " #asm_op " %0, %1, %3                          \n"     \
++              "2:     " #asm_op " %0, %1, %3                          \n"     \
+               "       scd     %0, %2                                  \n"     \
+               "       beqzl   %0, 1b                                  \n"     \
+-              "       " #asm_op " %0, %1, %3                          \n"     \
++              post_op                                                         \
++              extable                                                         \
++              "4:     " #asm_op " %0, %1, %3                          \n"     \
++              "5:                                                     \n"     \
+               "       .set    mips0                                   \n"     \
+               : "=&r" (result), "=&r" (temp), "+m" (v->counter)               \
+               : "Ir" (i));                                                    \
+       } else if (kernel_uses_llsc) {                                          \
+               long temp;                                                      \
+                                                                               \
+-              do {                                                            \
+-                      __asm__ __volatile__(                                   \
+-                      "       .set    arch=r4000                      \n"     \
+-                      "       lld     %1, %2  # atomic64_" #op "_return\n"    \
+-                      "       " #asm_op " %0, %1, %3                  \n"     \
+-                      "       scd     %0, %2                          \n"     \
+-                      "       .set    mips0                           \n"     \
+-                      : "=&r" (result), "=&r" (temp), "=m" (v->counter)       \
+-                      : "Ir" (i), "m" (v->counter)                            \
+-                      : "memory");                                            \
+-              } while (unlikely(!result));                                    \
++              __asm__ __volatile__(                                           \
++              "       .set    mips3                                   \n"     \
++              "1:     lld     %1, %2  # atomic64_" #op "_return" #suffix "\n" \
++              "2:     " #asm_op " %0, %1, %3                          \n"     \
++              "       scd     %0, %2                                  \n"     \
++              "       beqz    %0, 1b                                  \n"     \
++              post_op                                                         \
++              extable                                                         \
++              "4:     " #asm_op " %0, %1, %3                          \n"     \
++              "5:                                                     \n"     \
++              "       .set    mips0                                   \n"     \
++              : "=&r" (result), "=&r" (temp), "=m" (v->counter)               \
++              : "Ir" (i), "m" (v->counter)                                    \
++              : "memory");                                                    \
+                                                                               \
+               result = temp; result c_op i;                                   \
+       } else {                                                                \
+               unsigned long flags;                                            \
+                                                                               \
+               raw_local_irq_save(flags);                                      \
+-              result = v->counter;                                            \
+-              result c_op i;                                                  \
+-              v->counter = result;                                            \
++              __asm__ __volatile__(                                           \
++              "       ld      %0, %1                                  \n"     \
++              "2:     " #asm_op " %0, %1, %2                          \n"     \
++              "       sd      %0, %1                                  \n"     \
++              "3:                                                     \n"     \
++              extable                                                         \
++              : "=&r" (result), "+m" (v->counter) : "Ir" (i));                \
+               raw_local_irq_restore(flags);                                   \
+       }                                                                       \
+                                                                               \
+@@ -403,16 +539,23 @@ static __inline__ long atomic64_##op##_return(long i, atomic64_t * v)            \
+       return result;                                                          \
+ }
+-#define ATOMIC64_OPS(op, c_op, asm_op)                                                \
+-      ATOMIC64_OP(op, c_op, asm_op)                                           \
+-      ATOMIC64_OP_RETURN(op, c_op, asm_op)
++#define ATOMIC64_OP_RETURN(op, asm_op) __ATOMIC64_OP_RETURN(op, , asm_op##u, , __OVERFLOW_EXTABLE)    \
++                                     __ATOMIC64_OP_RETURN(op, _unchecked, asm_op, __OVERFLOW_POST, __OVERFLOW_EXTABLE)
+-ATOMIC64_OPS(add, +=, daddu)
+-ATOMIC64_OPS(sub, -=, dsubu)
++#define ATOMIC64_OPS(op, asm_op)                                              \
++      ATOMIC64_OP(op, asm_op)                                                 \
++      ATOMIC64_OP_RETURN(op, asm_op)
++
++ATOMIC64_OPS(add, dadd)
++ATOMIC64_OPS(sub, dsub)
+ #undef ATOMIC64_OPS
+ #undef ATOMIC64_OP_RETURN
++#undef __ATOMIC64_OP_RETURN
+ #undef ATOMIC64_OP
++#undef __ATOMIC64_OP
++#undef __OVERFLOW_EXTABLE
++#undef __OVERFLOW_POST
  
  
-@@ -605,7 +1274,7 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v)
+ /*
+  * atomic64_sub_if_positive - conditionally subtract integer from atomic variable
+@@ -422,7 +565,7 @@ ATOMIC64_OPS(sub, -=, dsubu)
   * Atomically test @v and subtract @i if @v is greater or equal than @i.
   * The function returns the old value of @v minus @i.
   */
   * Atomically test @v and subtract @i if @v is greater or equal than @i.
   * The function returns the old value of @v minus @i.
   */
@@ -6658,7 +6247,7 @@ index 37b2bef..02122b8 100644
  {
        long result;
  
  {
        long result;
  
-@@ -662,9 +1331,26 @@ static __inline__ long atomic64_sub_if_positive(long i, atomic64_t * v)
+@@ -479,9 +622,26 @@ static __inline__ long atomic64_sub_if_positive(long i, atomic64_t * v)
        return result;
  }
  
        return result;
  }
  
@@ -6688,7 +6277,7 @@ index 37b2bef..02122b8 100644
  
  /**
   * atomic64_add_unless - add unless the number is a given value
  
  /**
   * atomic64_add_unless - add unless the number is a given value
-@@ -694,6 +1380,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
+@@ -511,6 +671,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
  
  #define atomic64_dec_return(v) atomic64_sub_return(1, (v))
  #define atomic64_inc_return(v) atomic64_add_return(1, (v))
  
  #define atomic64_dec_return(v) atomic64_sub_return(1, (v))
  #define atomic64_inc_return(v) atomic64_add_return(1, (v))
@@ -6696,7 +6285,7 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic64_sub_and_test - subtract value from variable and test result
  
  /*
   * atomic64_sub_and_test - subtract value from variable and test result
-@@ -715,6 +1402,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
+@@ -532,6 +693,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
   * other cases.
   */
  #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
   * other cases.
   */
  #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
@@ -6704,7 +6293,7 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic64_dec_and_test - decrement by 1 and test
  
  /*
   * atomic64_dec_and_test - decrement by 1 and test
-@@ -739,6 +1427,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
+@@ -556,6 +718,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
   * Atomically increments @v by 1.
   */
  #define atomic64_inc(v) atomic64_add(1, (v))
   * Atomically increments @v by 1.
   */
  #define atomic64_inc(v) atomic64_add(1, (v))
@@ -6712,7 +6301,7 @@ index 37b2bef..02122b8 100644
  
  /*
   * atomic64_dec - decrement and test
  
  /*
   * atomic64_dec - decrement and test
-@@ -747,6 +1436,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
+@@ -564,6 +727,7 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
   * Atomically decrements @v by 1.
   */
  #define atomic64_dec(v) atomic64_sub(1, (v))
   * Atomically decrements @v by 1.
   */
  #define atomic64_dec(v) atomic64_sub(1, (v))
@@ -6921,7 +6510,7 @@ index b336037..5b874cc 100644
  
  /*
 diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
  
  /*
 diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
-index df49a30..c0d3dd6 100644
+index d6d1928..ce4f822 100644
 --- a/arch/mips/include/asm/pgtable.h
 +++ b/arch/mips/include/asm/pgtable.h
 @@ -20,6 +20,9 @@
 --- a/arch/mips/include/asm/pgtable.h
 +++ b/arch/mips/include/asm/pgtable.h
 @@ -20,6 +20,9 @@
@@ -6977,7 +6566,7 @@ index 7de8658..c109224 100644
  /*
   * We stash processor id into a COP0 register to retrieve it fast
 diff --git a/arch/mips/include/asm/uaccess.h b/arch/mips/include/asm/uaccess.h
  /*
   * We stash processor id into a COP0 register to retrieve it fast
 diff --git a/arch/mips/include/asm/uaccess.h b/arch/mips/include/asm/uaccess.h
-index a109510..0a764f7 100644
+index 22a5624..7c96295 100644
 --- a/arch/mips/include/asm/uaccess.h
 +++ b/arch/mips/include/asm/uaccess.h
 @@ -130,6 +130,7 @@ extern u64 __ua_limit;
 --- a/arch/mips/include/asm/uaccess.h
 +++ b/arch/mips/include/asm/uaccess.h
 @@ -130,6 +130,7 @@ extern u64 __ua_limit;
@@ -6988,32 +6577,6 @@ index a109510..0a764f7 100644
  #define access_ok(type, addr, size)                                   \
        likely(__access_ok((addr), (size), __access_mask))
  
  #define access_ok(type, addr, size)                                   \
        likely(__access_ok((addr), (size), __access_mask))
  
-@@ -301,7 +302,8 @@ do {                                                                       \
-                       __get_kernel_common((x), size, __gu_ptr);       \
-               else                                                    \
-                       __get_user_common((x), size, __gu_ptr);         \
--      }                                                               \
-+      } else                                                          \
-+              (x) = 0;                                                \
-                                                                       \
-       __gu_err;                                                       \
- })
-@@ -316,6 +318,7 @@ do {                                                                       \
-       "       .insn                                           \n"     \
-       "       .section .fixup,\"ax\"                          \n"     \
-       "3:     li      %0, %4                                  \n"     \
-+      "       move    %1, $0                                  \n"     \
-       "       j       2b                                      \n"     \
-       "       .previous                                       \n"     \
-       "       .section __ex_table,\"a\"                       \n"     \
-@@ -630,6 +633,7 @@ do {                                                                       \
-       "       .insn                                           \n"     \
-       "       .section .fixup,\"ax\"                          \n"     \
-       "3:     li      %0, %4                                  \n"     \
-+      "       move    %1, $0                                  \n"     \
-       "       j       2b                                      \n"     \
-       "       .previous                                       \n"     \
-       "       .section __ex_table,\"a\"                       \n"     \
 diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c
 index 1188e00..41cf144 100644
 --- a/arch/mips/kernel/binfmt_elfn32.c
 diff --git a/arch/mips/kernel/binfmt_elfn32.c b/arch/mips/kernel/binfmt_elfn32.c
 index 1188e00..41cf144 100644
 --- a/arch/mips/kernel/binfmt_elfn32.c
@@ -7154,7 +6717,7 @@ index 636b074..8fbb91f 100644
 -      return sp & ALMASK;
 -}
 diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
 -      return sp & ALMASK;
 -}
 diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
-index 645b3c4..909c75a 100644
+index 9d1487d..10c5da5 100644
 --- a/arch/mips/kernel/ptrace.c
 +++ b/arch/mips/kernel/ptrace.c
 @@ -761,6 +761,10 @@ long arch_ptrace(struct task_struct *child, long request,
 --- a/arch/mips/kernel/ptrace.c
 +++ b/arch/mips/kernel/ptrace.c
 @@ -761,6 +761,10 @@ long arch_ptrace(struct task_struct *child, long request,
@@ -7306,10 +6869,10 @@ index 22b19c2..c5cc8c4 100644
        info.si_code = FPE_INTOVF;
        info.si_signo = SIGFPE;
 diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
        info.si_code = FPE_INTOVF;
        info.si_signo = SIGFPE;
 diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
-index cd71141..e02c4df 100644
+index e3b21e5..ea5ff7c 100644
 --- a/arch/mips/kvm/mips.c
 +++ b/arch/mips/kvm/mips.c
 --- a/arch/mips/kvm/mips.c
 +++ b/arch/mips/kvm/mips.c
-@@ -839,7 +839,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
+@@ -805,7 +805,7 @@ long kvm_arch_vm_ioctl(struct file *filp, unsigned int ioctl, unsigned long arg)
        return r;
  }
  
        return r;
  }
  
@@ -7466,18 +7029,6 @@ index f1baadd..5472dca 100644
  int __virt_addr_valid(const volatile void *kaddr)
  {
        return pfn_valid(PFN_DOWN(virt_to_phys(kaddr)));
  int __virt_addr_valid(const volatile void *kaddr)
  {
        return pfn_valid(PFN_DOWN(virt_to_phys(kaddr)));
-diff --git a/arch/mips/net/bpf_jit.c b/arch/mips/net/bpf_jit.c
-index 9f7ecbd..6e370fc 100644
---- a/arch/mips/net/bpf_jit.c
-+++ b/arch/mips/net/bpf_jit.c
-@@ -1428,5 +1428,6 @@ void bpf_jit_free(struct bpf_prog *fp)
- {
-       if (fp->jited)
-               module_free(NULL, fp->bpf_func);
--      kfree(fp);
-+
-+      bpf_prog_unlock_free(fp);
- }
 diff --git a/arch/mips/pci/pci-octeon.c b/arch/mips/pci/pci-octeon.c
 index 59cccd9..f39ac2f 100644
 --- a/arch/mips/pci/pci-octeon.c
 diff --git a/arch/mips/pci/pci-octeon.c b/arch/mips/pci/pci-octeon.c
 index 59cccd9..f39ac2f 100644
 --- a/arch/mips/pci/pci-octeon.c
@@ -7664,10 +7215,10 @@ index 4ce7a01..449202a 100644
  
  #endif /* __ASM_OPENRISC_CACHE_H */
 diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h
  
  #endif /* __ASM_OPENRISC_CACHE_H */
 diff --git a/arch/parisc/include/asm/atomic.h b/arch/parisc/include/asm/atomic.h
-index 0be2db2..1b0f26d 100644
+index 226f8ca..9d9b87d 100644
 --- a/arch/parisc/include/asm/atomic.h
 +++ b/arch/parisc/include/asm/atomic.h
 --- a/arch/parisc/include/asm/atomic.h
 +++ b/arch/parisc/include/asm/atomic.h
-@@ -248,6 +248,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
+@@ -273,6 +273,16 @@ static inline long atomic64_dec_if_positive(atomic64_t *v)
        return dec;
  }
  
        return dec;
  }
  
@@ -7777,10 +7328,10 @@ index 22b89d1..ce34230 100644
  #define PAGE_KERNEL_EXEC      __pgprot(_PAGE_KERNEL_EXEC)
  #define PAGE_KERNEL_RWX       __pgprot(_PAGE_KERNEL_RWX)
 diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h
  #define PAGE_KERNEL_EXEC      __pgprot(_PAGE_KERNEL_EXEC)
  #define PAGE_KERNEL_RWX       __pgprot(_PAGE_KERNEL_RWX)
 diff --git a/arch/parisc/include/asm/uaccess.h b/arch/parisc/include/asm/uaccess.h
-index 4006964..fcb3cc2 100644
+index a5cb070..8604ddc 100644
 --- a/arch/parisc/include/asm/uaccess.h
 +++ b/arch/parisc/include/asm/uaccess.h
 --- a/arch/parisc/include/asm/uaccess.h
 +++ b/arch/parisc/include/asm/uaccess.h
-@@ -246,10 +246,10 @@ static inline unsigned long __must_check copy_from_user(void *to,
+@@ -243,10 +243,10 @@ static inline unsigned long __must_check copy_from_user(void *to,
                                            const void __user *from,
                                            unsigned long n)
  {
                                            const void __user *from,
                                            unsigned long n)
  {
@@ -8157,10 +7708,10 @@ index 3ca9c11..d163ef7 100644
        /*
         * If for any reason at all we couldn't handle the fault, make
 diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
        /*
         * If for any reason at all we couldn't handle the fault, make
 diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
-index 4bc7b62..107e0b2 100644
+index 88eace4..4ba2591 100644
 --- a/arch/powerpc/Kconfig
 +++ b/arch/powerpc/Kconfig
 --- a/arch/powerpc/Kconfig
 +++ b/arch/powerpc/Kconfig
-@@ -399,6 +399,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
+@@ -404,6 +404,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
  config KEXEC
        bool "kexec system call"
        depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
  config KEXEC
        bool "kexec system call"
        depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
@@ -8169,7 +7720,7 @@ index 4bc7b62..107e0b2 100644
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
 diff --git a/arch/powerpc/include/asm/atomic.h b/arch/powerpc/include/asm/atomic.h
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
 diff --git a/arch/powerpc/include/asm/atomic.h b/arch/powerpc/include/asm/atomic.h
-index 28992d0..434c881 100644
+index 512d278..d31fadd 100644
 --- a/arch/powerpc/include/asm/atomic.h
 +++ b/arch/powerpc/include/asm/atomic.h
 @@ -12,6 +12,11 @@
 --- a/arch/powerpc/include/asm/atomic.h
 +++ b/arch/powerpc/include/asm/atomic.h
 @@ -12,6 +12,11 @@
@@ -8184,7 +7735,7 @@ index 28992d0..434c881 100644
  static __inline__ int atomic_read(const atomic_t *v)
  {
        int t;
  static __inline__ int atomic_read(const atomic_t *v)
  {
        int t;
-@@ -21,16 +26,61 @@ static __inline__ int atomic_read(const atomic_t *v)
+@@ -21,39 +26,80 @@ static __inline__ int atomic_read(const atomic_t *v)
        return t;
  }
  
        return t;
  }
  
@@ -8202,199 +7753,102 @@ index 28992d0..434c881 100644
        __asm__ __volatile__("stw%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
  }
  
        __asm__ __volatile__("stw%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
  }
  
+-#define ATOMIC_OP(op, asm_op)                                         \
+-static __inline__ void atomic_##op(int a, atomic_t *v)                        \
 +static __inline__ void atomic_set_unchecked(atomic_unchecked_t *v, int i)
 +{
 +      __asm__ __volatile__("stw%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
 +}
 +static __inline__ void atomic_set_unchecked(atomic_unchecked_t *v, int i)
 +{
 +      __asm__ __volatile__("stw%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
 +}
-+
- static __inline__ void atomic_add(int a, atomic_t *v)
- {
-       int t;
-       __asm__ __volatile__(
-+"1:   lwarx   %0,0,%3         # atomic_add\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     addo.   %0,%2,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     add     %0,%2,%0\n"
-+#endif
-+
-+"3:\n"
-+      PPC405_ERR77(0,%3)
-+"     stwcx.  %0,0,%3 \n\
-+      bne-    1b"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"\n4:\n"
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t), "+m" (v->counter)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc");
-+}
-+
-+static __inline__ void atomic_add_unchecked(int a, atomic_unchecked_t *v)
-+{
-+      int t;
-+
-+      __asm__ __volatile__(
- "1:   lwarx   %0,0,%3         # atomic_add\n\
-       add     %0,%2,%0\n"
-       PPC405_ERR77(0,%3)
-@@ -41,12 +91,49 @@ static __inline__ void atomic_add(int a, atomic_t *v)
-       : "cc");
- }
-+/* Same as atomic_add but return the value */
- static __inline__ int atomic_add_return(int a, atomic_t *v)
- {
-       int t;
-       __asm__ __volatile__(
-       PPC_ATOMIC_ENTRY_BARRIER
-+"1:   lwarx   %0,0,%2         # atomic_add_return\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     addo.   %0,%1,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     add     %0,%1,%0\n"
-+#endif
-+
-+"3:\n"
-+      PPC405_ERR77(0,%2)
-+"     stwcx.  %0,0,%2 \n\
-+      bne-    1b\n"
-+"4:"
 +
 +#ifdef CONFIG_PAX_REFCOUNT
 +
 +#ifdef CONFIG_PAX_REFCOUNT
++#define __REFCOUNT_OP(op) op##o.
++#define __OVERFLOW_PRE                        \
++      "       mcrxr   cr0\n"
++#define __OVERFLOW_POST                       \
++      "       bf 4*cr0+so, 3f\n"      \
++      "2:     .long 0x00c00b00\n"     \
++      "3:\n"
++#define __OVERFLOW_EXTABLE \
++      "\n4:\n"
 +      _ASM_EXTABLE(2b, 4b)
 +      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      PPC_ATOMIC_EXIT_BARRIER
-+      : "=&r" (t)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc", "memory");
-+
-+      return t;
-+}
-+
-+/* Same as atomic_add_unchecked but return the value */
-+static __inline__ int atomic_add_return_unchecked(int a, atomic_unchecked_t *v)
-+{
-+      int t;
-+
-+      __asm__ __volatile__(
-+      PPC_ATOMIC_ENTRY_BARRIER
- "1:   lwarx   %0,0,%2         # atomic_add_return\n\
-       add     %0,%1,%0\n"
-       PPC405_ERR77(0,%2)
-@@ -67,6 +154,37 @@ static __inline__ void atomic_sub(int a, atomic_t *v)
-       int t;
-       __asm__ __volatile__(
-+"1:   lwarx   %0,0,%3         # atomic_sub\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     subfo.  %0,%2,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
 +#else
 +#else
-+"     subf    %0,%2,%0\n"
++#define __REFCOUNT_OP(op) op
++#define __OVERFLOW_PRE
++#define __OVERFLOW_POST
++#define __OVERFLOW_EXTABLE
 +#endif
 +
 +#endif
 +
-+"3:\n"
-+      PPC405_ERR77(0,%3)
-+"     stwcx.  %0,0,%3 \n\
-+      bne-    1b\n"
-+"4:"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t), "+m" (v->counter)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc");
-+}
-+
-+static __inline__ void atomic_sub_unchecked(int a, atomic_unchecked_t *v)
-+{
-+      int t;
-+
-+      __asm__ __volatile__(
- "1:   lwarx   %0,0,%3         # atomic_sub\n\
-       subf    %0,%2,%0\n"
-       PPC405_ERR77(0,%3)
-@@ -77,12 +195,49 @@ static __inline__ void atomic_sub(int a, atomic_t *v)
-       : "cc");
- }
-+/* Same as atomic_sub but return the value */
- static __inline__ int atomic_sub_return(int a, atomic_t *v)
- {
-       int t;
++#define __ATOMIC_OP(op, suffix, pre_op, asm_op, post_op, extable)     \
++static inline void atomic_##op##suffix(int a, atomic##suffix##_t *v)  \
+ {                                                                     \
+       int t;                                                          \
+                                                                       \
+       __asm__ __volatile__(                                           \
+-"1:   lwarx   %0,0,%3         # atomic_" #op "\n"                     \
++"1:   lwarx   %0,0,%3         # atomic_" #op #suffix "\n"             \
++      pre_op                                                          \
+       #asm_op " %0,%2,%0\n"                                           \
++      post_op                                                         \
+       PPC405_ERR77(0,%3)                                              \
+ "     stwcx.  %0,0,%3 \n"                                             \
+ "     bne-    1b\n"                                                   \
++      extable                                                         \
+       : "=&r" (t), "+m" (v->counter)                                  \
+       : "r" (a), "r" (&v->counter)                                    \
+       : "cc");                                                        \
+ }                                                                     \
  
  
-       __asm__ __volatile__(
-       PPC_ATOMIC_ENTRY_BARRIER
-+"1:   lwarx   %0,0,%2         # atomic_sub_return\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     subfo.  %0,%1,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     subf    %0,%1,%0\n"
-+#endif
-+
-+"3:\n"
-+      PPC405_ERR77(0,%2)
-+"     stwcx.  %0,0,%2 \n\
-+      bne-    1b\n"
-+      PPC_ATOMIC_EXIT_BARRIER
-+"4:"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc", "memory");
-+
-+      return t;
-+}
-+
-+/* Same as atomic_sub_unchecked but return the value */
-+static __inline__ int atomic_sub_return_unchecked(int a, atomic_unchecked_t *v)
-+{
-+      int t;
+-#define ATOMIC_OP_RETURN(op, asm_op)                                  \
+-static __inline__ int atomic_##op##_return(int a, atomic_t *v)                \
++#define ATOMIC_OP(op, asm_op) __ATOMIC_OP(op, , , asm_op, , )         \
++                            __ATOMIC_OP(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE)
 +
 +
-+      __asm__ __volatile__(
-+      PPC_ATOMIC_ENTRY_BARRIER
- "1:   lwarx   %0,0,%2         # atomic_sub_return\n\
-       subf    %0,%1,%0\n"
-       PPC405_ERR77(0,%2)
-@@ -96,38 +251,23 @@ static __inline__ int atomic_sub_return(int a, atomic_t *v)
-       return t;
- }
++#define __ATOMIC_OP_RETURN(op, suffix, pre_op, asm_op, post_op, extable)\
++static inline int atomic_##op##_return##suffix(int a, atomic##suffix##_t *v)\
+ {                                                                     \
+       int t;                                                          \
+                                                                       \
+       __asm__ __volatile__(                                           \
+       PPC_ATOMIC_ENTRY_BARRIER                                        \
+-"1:   lwarx   %0,0,%2         # atomic_" #op "_return\n"              \
++"1:   lwarx   %0,0,%2         # atomic_" #op "_return" #suffix "\n"   \
++      pre_op                                                          \
+       #asm_op " %0,%1,%0\n"                                           \
++      post_op                                                         \
+       PPC405_ERR77(0,%2)                                              \
+ "     stwcx.  %0,0,%2 \n"                                             \
+ "     bne-    1b\n"                                                   \
++      extable                                                         \
+       PPC_ATOMIC_EXIT_BARRIER                                         \
+       : "=&r" (t)                                                     \
+       : "r" (a), "r" (&v->counter)                                    \
+@@ -62,6 +108,9 @@ static __inline__ int atomic_##op##_return(int a, atomic_t *v)              \
+       return t;                                                       \
+ }
++#define ATOMIC_OP_RETURN(op, asm_op) __ATOMIC_OP_RETURN(op, , , asm_op, , )\
++                                   __ATOMIC_OP_RETURN(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE)
++
+ #define ATOMIC_OPS(op, asm_op) ATOMIC_OP(op, asm_op) ATOMIC_OP_RETURN(op, asm_op)
+ ATOMIC_OPS(add, add)
+@@ -69,42 +118,29 @@ ATOMIC_OPS(sub, subf)
+ #undef ATOMIC_OPS
+ #undef ATOMIC_OP_RETURN
++#undef __ATOMIC_OP_RETURN
+ #undef ATOMIC_OP
++#undef __ATOMIC_OP
+ #define atomic_add_negative(a, v)     (atomic_add_return((a), (v)) < 0)
  
 -static __inline__ void atomic_inc(atomic_t *v)
 -{
 -      int t;
  
 -static __inline__ void atomic_inc(atomic_t *v)
 -{
 -      int t;
-+/* 
++/*
 + * atomic_inc - increment atomic variable
 + * @v: pointer of type atomic_t
 + * atomic_inc - increment atomic variable
 + * @v: pointer of type atomic_t
-+ * 
++ *
 + * Automatically increments @v by 1
 + */
 +#define atomic_inc(v) atomic_add(1, (v))
 + * Automatically increments @v by 1
 + */
 +#define atomic_inc(v) atomic_add(1, (v))
@@ -8409,13 +7863,13 @@ index 28992d0..434c881 100644
 -      : "=&r" (t), "+m" (v->counter)
 -      : "r" (&v->counter)
 -      : "cc", "xer");
 -      : "=&r" (t), "+m" (v->counter)
 -      : "r" (&v->counter)
 -      : "cc", "xer");
-+static __inline__ void atomic_inc_unchecked(atomic_unchecked_t *v)
++static inline void atomic_inc_unchecked(atomic_unchecked_t *v)
 +{
 +      atomic_add_unchecked(1, v);
  }
  
 -static __inline__ int atomic_inc_return(atomic_t *v)
 +{
 +      atomic_add_unchecked(1, v);
  }
  
 -static __inline__ int atomic_inc_return(atomic_t *v)
-+static __inline__ int atomic_inc_return_unchecked(atomic_unchecked_t *v)
++static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v)
  {
 -      int t;
 -
  {
 -      int t;
 -
@@ -8436,7 +7890,7 @@ index 28992d0..434c881 100644
  }
  
  /*
  }
  
  /*
-@@ -140,43 +280,38 @@ static __inline__ int atomic_inc_return(atomic_t *v)
+@@ -117,43 +153,38 @@ static __inline__ int atomic_inc_return(atomic_t *v)
   */
  #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
  
   */
  #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
  
@@ -8503,7 +7957,37 @@ index 28992d0..434c881 100644
  /**
   * __atomic_add_unless - add unless the number is a given value
   * @v: pointer of type atomic_t
  /**
   * __atomic_add_unless - add unless the number is a given value
   * @v: pointer of type atomic_t
-@@ -271,6 +406,11 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v)
+@@ -171,11 +202,27 @@ static __inline__ int __atomic_add_unless(atomic_t *v, int a, int u)
+       PPC_ATOMIC_ENTRY_BARRIER
+ "1:   lwarx   %0,0,%1         # __atomic_add_unless\n\
+       cmpw    0,%0,%3 \n\
+-      beq-    2f \n\
+-      add     %0,%2,%0 \n"
++      beq-    2f \n"
++
++#ifdef CONFIG_PAX_REFCOUNT
++"     mcrxr   cr0\n"
++"     addo.   %0,%2,%0\n"
++"     bf 4*cr0+so, 4f\n"
++"3:.long " "0x00c00b00""\n"
++"4:\n"
++#else
++      "add    %0,%2,%0 \n"
++#endif
++
+       PPC405_ERR77(0,%2)
+ "     stwcx.  %0,0,%1 \n\
+       bne-    1b \n"
++"5:"
++
++#ifdef CONFIG_PAX_REFCOUNT
++      _ASM_EXTABLE(3b, 5b)
++#endif
++
+       PPC_ATOMIC_EXIT_BARRIER
+ "     subf    %0,%2,%0 \n\
+ 2:"
+@@ -248,6 +295,11 @@ static __inline__ int atomic_dec_if_positive(atomic_t *v)
  }
  #define atomic_dec_if_positive atomic_dec_if_positive
  
  }
  #define atomic_dec_if_positive atomic_dec_if_positive
  
@@ -8515,7 +7999,7 @@ index 28992d0..434c881 100644
  #ifdef __powerpc64__
  
  #define ATOMIC64_INIT(i)      { (i) }
  #ifdef __powerpc64__
  
  #define ATOMIC64_INIT(i)      { (i) }
-@@ -284,11 +424,25 @@ static __inline__ long atomic64_read(const atomic64_t *v)
+@@ -261,37 +313,60 @@ static __inline__ long atomic64_read(const atomic64_t *v)
        return t;
  }
  
        return t;
  }
  
@@ -8533,180 +8017,84 @@ index 28992d0..434c881 100644
        __asm__ __volatile__("std%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
  }
  
        __asm__ __volatile__("std%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
  }
  
+-#define ATOMIC64_OP(op, asm_op)                                               \
+-static __inline__ void atomic64_##op(long a, atomic64_t *v)           \
 +static __inline__ void atomic64_set_unchecked(atomic64_unchecked_t *v, long i)
 +{
 +      __asm__ __volatile__("std%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
 +}
 +
 +static __inline__ void atomic64_set_unchecked(atomic64_unchecked_t *v, long i)
 +{
 +      __asm__ __volatile__("std%U0%X0 %1,%0" : "=m"(v->counter) : "r"(i));
 +}
 +
- static __inline__ void atomic64_add(long a, atomic64_t *v)
- {
-       long t;
-@@ -303,12 +457,76 @@ static __inline__ void atomic64_add(long a, atomic64_t *v)
-       : "cc");
- }
-+static __inline__ void atomic64_add_unchecked(long a, atomic64_unchecked_t *v)
-+{
-+      long t;
-+
-+      __asm__ __volatile__(
-+"1:   ldarx   %0,0,%3         # atomic64_add\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     addo.   %0,%2,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     add     %0,%2,%0\n"
-+#endif
-+
-+"3:\n"
-+"     stdcx.  %0,0,%3 \n\
-+      bne-    1b\n"
-+"4:"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t), "+m" (v->counter)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc");
-+}
-+
- static __inline__ long atomic64_add_return(long a, atomic64_t *v)
- {
-       long t;
-       __asm__ __volatile__(
-       PPC_ATOMIC_ENTRY_BARRIER
-+"1:   ldarx   %0,0,%2         # atomic64_add_return\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     addo.   %0,%1,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     add     %0,%1,%0\n"
-+#endif
-+
-+"3:\n"
-+"     stdcx.  %0,0,%2 \n\
-+      bne-    1b\n"
-+      PPC_ATOMIC_EXIT_BARRIER
-+"4:"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc", "memory");
-+
-+      return t;
-+}
-+
-+static __inline__ long atomic64_add_return_unchecked(long a, atomic64_unchecked_t *v)
-+{
-+      long t;
-+
-+      __asm__ __volatile__(
-+      PPC_ATOMIC_ENTRY_BARRIER
- "1:   ldarx   %0,0,%2         # atomic64_add_return\n\
-       add     %0,%1,%0\n\
-       stdcx.  %0,0,%2 \n\
-@@ -328,6 +546,36 @@ static __inline__ void atomic64_sub(long a, atomic64_t *v)
-       long t;
-       __asm__ __volatile__(
-+"1:   ldarx   %0,0,%3         # atomic64_sub\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     subfo.  %0,%2,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     subf    %0,%2,%0\n"
-+#endif
-+
-+"3:\n"
-+"     stdcx.  %0,0,%3 \n\
-+      bne-    1b"
-+"4:"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t), "+m" (v->counter)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc");
-+}
-+
-+static __inline__ void atomic64_sub_unchecked(long a, atomic64_unchecked_t *v)
-+{
-+      long t;
-+
-+      __asm__ __volatile__(
- "1:   ldarx   %0,0,%3         # atomic64_sub\n\
-       subf    %0,%2,%0\n\
-       stdcx.  %0,0,%3 \n\
-@@ -343,6 +591,40 @@ static __inline__ long atomic64_sub_return(long a, atomic64_t *v)
++#define __ATOMIC64_OP(op, suffix, pre_op, asm_op, post_op, extable)   \
++static inline void atomic64_##op##suffix(long a, atomic64##suffix##_t *v)\
+ {                                                                     \
+       long t;                                                         \
+                                                                       \
+       __asm__ __volatile__(                                           \
+ "1:   ldarx   %0,0,%3         # atomic64_" #op "\n"                   \
++      pre_op                                                          \
+       #asm_op " %0,%2,%0\n"                                           \
++      post_op                                                         \
+ "     stdcx.  %0,0,%3 \n"                                             \
+ "     bne-    1b\n"                                                   \
++      extable                                                         \
+       : "=&r" (t), "+m" (v->counter)                                  \
+       : "r" (a), "r" (&v->counter)                                    \
+       : "cc");                                                        \
+ }
+-#define ATOMIC64_OP_RETURN(op, asm_op)                                        \
+-static __inline__ long atomic64_##op##_return(long a, atomic64_t *v)  \
++#define ATOMIC64_OP(op, asm_op) __ATOMIC64_OP(op, , , asm_op, , )             \
++                              __ATOMIC64_OP(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE)
++
++#define __ATOMIC64_OP_RETURN(op, suffix, pre_op, asm_op, post_op, extable)\
++static inline long atomic64_##op##_return##suffix(long a, atomic64##suffix##_t *v)\
+ {                                                                     \
+       long t;                                                         \
+                                                                       \
+       __asm__ __volatile__(                                           \
+       PPC_ATOMIC_ENTRY_BARRIER                                        \
+ "1:   ldarx   %0,0,%2         # atomic64_" #op "_return\n"            \
++      pre_op                                                          \
+       #asm_op " %0,%1,%0\n"                                           \
++      post_op                                                         \
+ "     stdcx.  %0,0,%2 \n"                                             \
+ "     bne-    1b\n"                                                   \
++      extable                                                         \
+       PPC_ATOMIC_EXIT_BARRIER                                         \
+       : "=&r" (t)                                                     \
+       : "r" (a), "r" (&v->counter)                                    \
+@@ -300,6 +375,9 @@ static __inline__ long atomic64_##op##_return(long a, atomic64_t *v)       \
+       return t;                                                       \
+ }
++#define ATOMIC64_OP_RETURN(op, asm_op) __ATOMIC64_OP_RETURN(op, , , asm_op, , )\
++                                     __ATOMIC64_OP_RETURN(op, _unchecked, __OVERFLOW_PRE, __REFCOUNT_OP(asm_op), __OVERFLOW_POST, __OVERFLOW_EXTABLE)
++
+ #define ATOMIC64_OPS(op, asm_op) ATOMIC64_OP(op, asm_op) ATOMIC64_OP_RETURN(op, asm_op)
+ ATOMIC64_OPS(add, add)
+@@ -307,40 +385,33 @@ ATOMIC64_OPS(sub, subf)
+ #undef ATOMIC64_OPS
+ #undef ATOMIC64_OP_RETURN
++#undef __ATOMIC64_OP_RETURN
+ #undef ATOMIC64_OP
++#undef __ATOMIC64_OP
++#undef __OVERFLOW_EXTABLE
++#undef __OVERFLOW_POST
++#undef __OVERFLOW_PRE
++#undef __REFCOUNT_OP
  
  
-       __asm__ __volatile__(
-       PPC_ATOMIC_ENTRY_BARRIER
-+"1:   ldarx   %0,0,%2         # atomic64_sub_return\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+"     mcrxr   cr0\n"
-+"     subfo.  %0,%1,%0\n"
-+"     bf 4*cr0+so, 3f\n"
-+"2:.long " "0x00c00b00""\n"
-+#else
-+"     subf    %0,%1,%0\n"
-+#endif
-+
-+"3:\n"
-+"     stdcx.  %0,0,%2 \n\
-+      bne-    1b\n"
-+      PPC_ATOMIC_EXIT_BARRIER
-+"4:"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      _ASM_EXTABLE(2b, 4b)
-+#endif
-+
-+      : "=&r" (t)
-+      : "r" (a), "r" (&v->counter)
-+      : "cc", "memory");
-+
-+      return t;
-+}
-+
-+static __inline__ long atomic64_sub_return_unchecked(long a, atomic64_unchecked_t *v)
-+{
-+      long t;
-+
-+      __asm__ __volatile__(
-+      PPC_ATOMIC_ENTRY_BARRIER
- "1:   ldarx   %0,0,%2         # atomic64_sub_return\n\
-       subf    %0,%1,%0\n\
-       stdcx.  %0,0,%2 \n\
-@@ -355,36 +637,23 @@ static __inline__ long atomic64_sub_return(long a, atomic64_t *v)
-       return t;
- }
+ #define atomic64_add_negative(a, v)   (atomic64_add_return((a), (v)) < 0)
  
 -static __inline__ void atomic64_inc(atomic64_t *v)
 -{
 -      long t;
  
 -static __inline__ void atomic64_inc(atomic64_t *v)
 -{
 -      long t;
-+/* 
++/*
 + * atomic64_inc - increment atomic variable
 + * @v: pointer of type atomic64_t
 + * atomic64_inc - increment atomic variable
 + * @v: pointer of type atomic64_t
-+ * 
++ *
 + * Automatically increments @v by 1
 + */
 +#define atomic64_inc(v) atomic64_add(1, (v))
 + * Automatically increments @v by 1
 + */
 +#define atomic64_inc(v) atomic64_add(1, (v))
@@ -8720,13 +8108,13 @@ index 28992d0..434c881 100644
 -      : "=&r" (t), "+m" (v->counter)
 -      : "r" (&v->counter)
 -      : "cc", "xer");
 -      : "=&r" (t), "+m" (v->counter)
 -      : "r" (&v->counter)
 -      : "cc", "xer");
-+static __inline__ void atomic64_inc_unchecked(atomic64_unchecked_t *v)
++static inline void atomic64_inc_unchecked(atomic64_unchecked_t *v)
 +{
 +      atomic64_add_unchecked(1, v);
  }
  
 -static __inline__ long atomic64_inc_return(atomic64_t *v)
 +{
 +      atomic64_add_unchecked(1, v);
  }
  
 -static __inline__ long atomic64_inc_return(atomic64_t *v)
-+static __inline__ int atomic64_inc_return_unchecked(atomic64_unchecked_t *v)
++static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v)
  {
 -      long t;
 -
  {
 -      long t;
 -
@@ -8746,7 +8134,7 @@ index 28992d0..434c881 100644
  }
  
  /*
  }
  
  /*
-@@ -397,36 +666,18 @@ static __inline__ long atomic64_inc_return(atomic64_t *v)
+@@ -353,36 +424,18 @@ static __inline__ long atomic64_inc_return(atomic64_t *v)
   */
  #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
  
   */
  #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
  
@@ -8794,7 +8182,7 @@ index 28992d0..434c881 100644
  }
  
  #define atomic64_sub_and_test(a, v)   (atomic64_sub_return((a), (v)) == 0)
  }
  
  #define atomic64_sub_and_test(a, v)   (atomic64_sub_return((a), (v)) == 0)
-@@ -459,6 +710,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v)
+@@ -415,6 +468,16 @@ static __inline__ long atomic64_dec_if_positive(atomic64_t *v)
  #define atomic64_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n)))
  #define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
  
  #define atomic64_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n)))
  #define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
  
@@ -8811,6 +8199,39 @@ index 28992d0..434c881 100644
  /**
   * atomic64_add_unless - add unless the number is a given value
   * @v: pointer of type atomic64_t
  /**
   * atomic64_add_unless - add unless the number is a given value
   * @v: pointer of type atomic64_t
+@@ -430,13 +493,29 @@ static __inline__ int atomic64_add_unless(atomic64_t *v, long a, long u)
+       __asm__ __volatile__ (
+       PPC_ATOMIC_ENTRY_BARRIER
+-"1:   ldarx   %0,0,%1         # __atomic_add_unless\n\
++"1:   ldarx   %0,0,%1         # atomic64_add_unless\n\
+       cmpd    0,%0,%3 \n\
+-      beq-    2f \n\
+-      add     %0,%2,%0 \n"
++      beq-    2f \n"
++
++#ifdef CONFIG_PAX_REFCOUNT
++"     mcrxr   cr0\n"
++"     addo.   %0,%2,%0\n"
++"     bf 4*cr0+so, 4f\n"
++"3:.long " "0x00c00b00""\n"
++"4:\n"
++#else
++      "add    %0,%2,%0 \n"
++#endif
++
+ "     stdcx.  %0,0,%1 \n\
+       bne-    1b \n"
+       PPC_ATOMIC_EXIT_BARRIER
++"5:"
++
++#ifdef CONFIG_PAX_REFCOUNT
++      _ASM_EXTABLE(3b, 5b)
++#endif
++
+ "     subf    %0,%2,%0 \n\
+ 2:"
+       : "=&r" (t)
 diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h
 index bab79a1..4a3eabc 100644
 --- a/arch/powerpc/include/asm/barrier.h
 diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h
 index bab79a1..4a3eabc 100644
 --- a/arch/powerpc/include/asm/barrier.h
@@ -9026,10 +8447,10 @@ index 26fe1ae..987ffc5 100644
  /*
   * Use the top bit of the higher-level page table entries to indicate whether
 diff --git a/arch/powerpc/include/asm/page_64.h b/arch/powerpc/include/asm/page_64.h
  /*
   * Use the top bit of the higher-level page table entries to indicate whether
 diff --git a/arch/powerpc/include/asm/page_64.h b/arch/powerpc/include/asm/page_64.h
-index 88693ce..ac6f9ab 100644
+index d908a46..3753f71 100644
 --- a/arch/powerpc/include/asm/page_64.h
 +++ b/arch/powerpc/include/asm/page_64.h
 --- a/arch/powerpc/include/asm/page_64.h
 +++ b/arch/powerpc/include/asm/page_64.h
-@@ -153,15 +153,18 @@ do {                                             \
+@@ -172,15 +172,18 @@ do {                                             \
   * stack by default, so in the absence of a PT_GNU_STACK program header
   * we turn execute permission off.
   */
   * stack by default, so in the absence of a PT_GNU_STACK program header
   * we turn execute permission off.
   */
@@ -9083,7 +8504,7 @@ index 4b0be20..c15a27d 100644
  static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
                                       pte_t *pte)
 diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h
  static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
                                       pte_t *pte)
 diff --git a/arch/powerpc/include/asm/pgtable.h b/arch/powerpc/include/asm/pgtable.h
-index d98c1ec..9f61569 100644
+index 316f9a5..ba05c77 100644
 --- a/arch/powerpc/include/asm/pgtable.h
 +++ b/arch/powerpc/include/asm/pgtable.h
 @@ -2,6 +2,7 @@
 --- a/arch/powerpc/include/asm/pgtable.h
 +++ b/arch/powerpc/include/asm/pgtable.h
 @@ -2,6 +2,7 @@
@@ -9093,7 +8514,7 @@ index d98c1ec..9f61569 100644
 +#include <linux/const.h>
  #ifndef __ASSEMBLY__
  #include <linux/mmdebug.h>
 +#include <linux/const.h>
  #ifndef __ASSEMBLY__
  #include <linux/mmdebug.h>
- #include <asm/processor.h>            /* For TASK_SIZE */
+ #include <linux/mmzone.h>
 diff --git a/arch/powerpc/include/asm/pte-hash32.h b/arch/powerpc/include/asm/pte-hash32.h
 index 4aad413..85d86bf 100644
 --- a/arch/powerpc/include/asm/pte-hash32.h
 diff --git a/arch/powerpc/include/asm/pte-hash32.h b/arch/powerpc/include/asm/pte-hash32.h
 index 4aad413..85d86bf 100644
 --- a/arch/powerpc/include/asm/pte-hash32.h
@@ -9107,7 +8528,7 @@ index 4aad413..85d86bf 100644
  #define _PAGE_NO_CACHE        0x020   /* I: cache inhibit */
  #define _PAGE_WRITETHRU       0x040   /* W: cache write-through */
 diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
  #define _PAGE_NO_CACHE        0x020   /* I: cache inhibit */
  #define _PAGE_WRITETHRU       0x040   /* W: cache write-through */
 diff --git a/arch/powerpc/include/asm/reg.h b/arch/powerpc/include/asm/reg.h
-index 0c05059..7e056e4 100644
+index c998279..d13a9f8 100644
 --- a/arch/powerpc/include/asm/reg.h
 +++ b/arch/powerpc/include/asm/reg.h
 @@ -251,6 +251,7 @@
 --- a/arch/powerpc/include/asm/reg.h
 +++ b/arch/powerpc/include/asm/reg.h
 @@ -251,6 +251,7 @@
@@ -9404,7 +8825,7 @@ index 9485b43..3bd3c16 100644
  
  static inline unsigned long clear_user(void __user *addr, unsigned long size)
 diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
  
  static inline unsigned long clear_user(void __user *addr, unsigned long size)
 diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
-index 670c312..60c2b52 100644
+index 502cf69..822e63b 100644
 --- a/arch/powerpc/kernel/Makefile
 +++ b/arch/powerpc/kernel/Makefile
 @@ -27,6 +27,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog
 --- a/arch/powerpc/kernel/Makefile
 +++ b/arch/powerpc/kernel/Makefile
 @@ -27,6 +27,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog
@@ -9417,7 +8838,7 @@ index 670c312..60c2b52 100644
                                   irq.o align.o signal_32.o pmc.o vdso.o \
                                   process.o systbl.o idle.o \
 diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
                                   irq.o align.o signal_32.o pmc.o vdso.o \
                                   process.o systbl.o idle.o \
 diff --git a/arch/powerpc/kernel/exceptions-64e.S b/arch/powerpc/kernel/exceptions-64e.S
-index bb9cac6..5181202 100644
+index 3e68d1c..72a5ee6 100644
 --- a/arch/powerpc/kernel/exceptions-64e.S
 +++ b/arch/powerpc/kernel/exceptions-64e.S
 @@ -1010,6 +1010,7 @@ storage_fault_common:
 --- a/arch/powerpc/kernel/exceptions-64e.S
 +++ b/arch/powerpc/kernel/exceptions-64e.S
 @@ -1010,6 +1010,7 @@ storage_fault_common:
@@ -9439,10 +8860,10 @@ index bb9cac6..5181202 100644
        ld      r4,_DAR(r1)
        bl      bad_page_fault
 diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
        ld      r4,_DAR(r1)
        bl      bad_page_fault
 diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
-index 050f79a..f385bfe 100644
+index 72e783e..fe058e2 100644
 --- a/arch/powerpc/kernel/exceptions-64s.S
 +++ b/arch/powerpc/kernel/exceptions-64s.S
 --- a/arch/powerpc/kernel/exceptions-64s.S
 +++ b/arch/powerpc/kernel/exceptions-64s.S
-@@ -1593,10 +1593,10 @@ handle_page_fault:
+@@ -1588,10 +1588,10 @@ handle_page_fault:
  11:   ld      r4,_DAR(r1)
        ld      r5,_DSISR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
  11:   ld      r4,_DAR(r1)
        ld      r5,_DSISR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
@@ -9455,7 +8876,7 @@ index 050f79a..f385bfe 100644
        addi    r3,r1,STACK_FRAME_OVERHEAD
        lwz     r4,_DAR(r1)
 diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
        addi    r3,r1,STACK_FRAME_OVERHEAD
        lwz     r4,_DAR(r1)
 diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
-index 4c5891d..a5d88bb 100644
+index c143835..5a9697f 100644
 --- a/arch/powerpc/kernel/irq.c
 +++ b/arch/powerpc/kernel/irq.c
 @@ -461,6 +461,8 @@ void migrate_irqs(void)
 --- a/arch/powerpc/kernel/irq.c
 +++ b/arch/powerpc/kernel/irq.c
 @@ -461,6 +461,8 @@ void migrate_irqs(void)
@@ -9468,7 +8889,7 @@ index 4c5891d..a5d88bb 100644
  {
  #ifdef CONFIG_DEBUG_STACKOVERFLOW
 @@ -473,6 +475,7 @@ static inline void check_stack_overflow(void)
  {
  #ifdef CONFIG_DEBUG_STACKOVERFLOW
 @@ -473,6 +475,7 @@ static inline void check_stack_overflow(void)
-               printk("do_IRQ: stack overflow: %ld\n",
+               pr_err("do_IRQ: stack overflow: %ld\n",
                        sp - sizeof(struct thread_info));
                dump_stack();
 +              gr_handle_kernel_exploit();
                        sp - sizeof(struct thread_info));
                dump_stack();
 +              gr_handle_kernel_exploit();
@@ -9476,21 +8897,21 @@ index 4c5891d..a5d88bb 100644
  #endif
  }
 diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c
  #endif
  }
 diff --git a/arch/powerpc/kernel/module_32.c b/arch/powerpc/kernel/module_32.c
-index 6cff040..74ac5d1b 100644
+index c94d2e0..992a9ce 100644
 --- a/arch/powerpc/kernel/module_32.c
 +++ b/arch/powerpc/kernel/module_32.c
 --- a/arch/powerpc/kernel/module_32.c
 +++ b/arch/powerpc/kernel/module_32.c
-@@ -161,7 +161,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr,
+@@ -158,7 +158,7 @@ int module_frob_arch_sections(Elf32_Ehdr *hdr,
                        me->arch.core_plt_section = i;
        }
        if (!me->arch.core_plt_section || !me->arch.init_plt_section) {
                        me->arch.core_plt_section = i;
        }
        if (!me->arch.core_plt_section || !me->arch.init_plt_section) {
--              printk("Module doesn't contain .plt or .init.plt sections.\n");
-+              printk("Module %s doesn't contain .plt or .init.plt sections.\n", me->name);
+-              pr_err("Module doesn't contain .plt or .init.plt sections.\n");
++              pr_err("Module $s doesn't contain .plt or .init.plt sections.\n", me->name);
                return -ENOEXEC;
        }
  
                return -ENOEXEC;
        }
  
-@@ -191,11 +191,16 @@ static uint32_t do_plt_call(void *location,
+@@ -188,11 +188,16 @@ static uint32_t do_plt_call(void *location,
  
  
-       DEBUGP("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location);
+       pr_debug("Doing plt for call to 0x%x at 0x%x\n", val, (unsigned int)location);
        /* Init, or core PLT? */
 -      if (location >= mod->module_core
 -          && location < mod->module_core + mod->core_size)
        /* Init, or core PLT? */
 -      if (location >= mod->module_core
 -          && location < mod->module_core + mod->core_size)
@@ -9508,7 +8929,7 @@ index 6cff040..74ac5d1b 100644
  
        /* Find this entry, or if that fails, the next avail. entry */
        while (entry->jump[0]) {
  
        /* Find this entry, or if that fails, the next avail. entry */
        while (entry->jump[0]) {
-@@ -299,7 +304,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
+@@ -296,7 +301,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
        }
  #ifdef CONFIG_DYNAMIC_FTRACE
        module->arch.tramp =
        }
  #ifdef CONFIG_DYNAMIC_FTRACE
        module->arch.tramp =
@@ -9518,10 +8939,10 @@ index 6cff040..74ac5d1b 100644
                            sechdrs, module);
  #endif
 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
                            sechdrs, module);
  #endif
 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index bf44ae9..6d2ce71 100644
+index 923cd2d..ae782a9 100644
 --- a/arch/powerpc/kernel/process.c
 +++ b/arch/powerpc/kernel/process.c
 --- a/arch/powerpc/kernel/process.c
 +++ b/arch/powerpc/kernel/process.c
-@@ -1039,8 +1039,8 @@ void show_regs(struct pt_regs * regs)
+@@ -1040,8 +1040,8 @@ void show_regs(struct pt_regs * regs)
         * Lookup NIP late so we have the best change of getting the
         * above info out without failing
         */
         * Lookup NIP late so we have the best change of getting the
         * above info out without failing
         */
@@ -9532,7 +8953,7 @@ index bf44ae9..6d2ce71 100644
  #endif
        show_stack(current, (unsigned long *) regs->gpr[1]);
        if (!user_mode(regs))
  #endif
        show_stack(current, (unsigned long *) regs->gpr[1]);
        if (!user_mode(regs))
-@@ -1558,10 +1558,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1560,10 +1560,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
                newsp = stack[0];
                ip = stack[STACK_FRAME_LR_SAVE];
                if (!firstframe || ip != lr) {
                newsp = stack[0];
                ip = stack[STACK_FRAME_LR_SAVE];
                if (!firstframe || ip != lr) {
@@ -9545,7 +8966,7 @@ index bf44ae9..6d2ce71 100644
                                       (void *)current->ret_stack[curr_frame].ret);
                                curr_frame--;
                        }
                                       (void *)current->ret_stack[curr_frame].ret);
                                curr_frame--;
                        }
-@@ -1581,7 +1581,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1583,7 +1583,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
                        struct pt_regs *regs = (struct pt_regs *)
                                (sp + STACK_FRAME_OVERHEAD);
                        lr = regs->link;
                        struct pt_regs *regs = (struct pt_regs *)
                                (sp + STACK_FRAME_OVERHEAD);
                        lr = regs->link;
@@ -9554,7 +8975,7 @@ index bf44ae9..6d2ce71 100644
                               regs->trap, (void *)regs->nip, (void *)lr);
                        firstframe = 1;
                }
                               regs->trap, (void *)regs->nip, (void *)lr);
                        firstframe = 1;
                }
-@@ -1617,58 +1617,3 @@ void notrace __ppc64_runlatch_off(void)
+@@ -1619,58 +1619,3 @@ void notrace __ppc64_runlatch_off(void)
        mtspr(SPRN_CTRLT, ctrl);
  }
  #endif /* CONFIG_PPC64 */
        mtspr(SPRN_CTRLT, ctrl);
  }
  #endif /* CONFIG_PPC64 */
@@ -9614,7 +9035,7 @@ index bf44ae9..6d2ce71 100644
 -      return ret;
 -}
 diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
 -      return ret;
 -}
 diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
-index 2e3d2bf..35df241 100644
+index f21897b..28c0428 100644
 --- a/arch/powerpc/kernel/ptrace.c
 +++ b/arch/powerpc/kernel/ptrace.c
 @@ -1762,6 +1762,10 @@ long arch_ptrace(struct task_struct *child, long request,
 --- a/arch/powerpc/kernel/ptrace.c
 +++ b/arch/powerpc/kernel/ptrace.c
 @@ -1762,6 +1762,10 @@ long arch_ptrace(struct task_struct *child, long request,
@@ -9640,7 +9061,7 @@ index 2e3d2bf..35df241 100644
        if (test_thread_flag(TIF_SYSCALL_TRACE) &&
            tracehook_report_syscall_entry(regs))
                /*
        if (test_thread_flag(TIF_SYSCALL_TRACE) &&
            tracehook_report_syscall_entry(regs))
                /*
-@@ -1808,6 +1817,11 @@ void do_syscall_trace_leave(struct pt_regs *regs)
+@@ -1805,6 +1814,11 @@ void do_syscall_trace_leave(struct pt_regs *regs)
  {
        int step;
  
  {
        int step;
  
@@ -9767,10 +9188,10 @@ index f174351..5722009 100644
                rc = vdso_base;
                goto fail_mmapsem;
 diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
                rc = vdso_base;
                goto fail_mmapsem;
 diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
-index 4c79284..0e462c3 100644
+index c1f8f53..71a3b96 100644
 --- a/arch/powerpc/kvm/powerpc.c
 +++ b/arch/powerpc/kvm/powerpc.c
 --- a/arch/powerpc/kvm/powerpc.c
 +++ b/arch/powerpc/kvm/powerpc.c
-@@ -1338,7 +1338,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param)
+@@ -1409,7 +1409,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param)
  }
  EXPORT_SYMBOL_GPL(kvmppc_init_lpid);
  
  }
  EXPORT_SYMBOL_GPL(kvmppc_init_lpid);
  
@@ -9815,13 +9236,13 @@ index 5eea6f3..5d10396 100644
  EXPORT_SYMBOL(copy_in_user);
  
 diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
  EXPORT_SYMBOL(copy_in_user);
  
 diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
-index 51ab9e7..7d3c78b 100644
+index 08d659a..ab329f4 100644
 --- a/arch/powerpc/mm/fault.c
 +++ b/arch/powerpc/mm/fault.c
 @@ -33,6 +33,10 @@
 --- a/arch/powerpc/mm/fault.c
 +++ b/arch/powerpc/mm/fault.c
 @@ -33,6 +33,10 @@
- #include <linux/magic.h>
  #include <linux/ratelimit.h>
  #include <linux/context_tracking.h>
  #include <linux/ratelimit.h>
  #include <linux/context_tracking.h>
+ #include <linux/hugetlb.h>
 +#include <linux/slab.h>
 +#include <linux/pagemap.h>
 +#include <linux/compiler.h>
 +#include <linux/slab.h>
 +#include <linux/pagemap.h>
 +#include <linux/compiler.h>
@@ -9863,7 +9284,7 @@ index 51ab9e7..7d3c78b 100644
  /*
   * Check whether the instruction at regs->nip is a store using
   * an update addressing form which will update r1.
  /*
   * Check whether the instruction at regs->nip is a store using
   * an update addressing form which will update r1.
-@@ -216,7 +247,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
+@@ -228,7 +259,7 @@ int __kprobes do_page_fault(struct pt_regs *regs, unsigned long address,
         * indicate errors in DSISR but can validly be set in SRR1.
         */
        if (trap == 0x400)
         * indicate errors in DSISR but can validly be set in SRR1.
         */
        if (trap == 0x400)
@@ -9872,7 +9293,7 @@ index 51ab9e7..7d3c78b 100644
        else
                is_write = error_code & DSISR_ISSTORE;
  #else
        else
                is_write = error_code & DSISR_ISSTORE;
  #else
-@@ -378,7 +409,7 @@ good_area:
+@@ -390,7 +421,7 @@ good_area:
           * "undefined".  Of those that can be set, this is the only
           * one which seems bad.
           */
           * "undefined".  Of those that can be set, this is the only
           * one which seems bad.
           */
@@ -9881,7 +9302,7 @@ index 51ab9e7..7d3c78b 100644
                  /* Guarded storage error. */
                goto bad_area;
  #endif /* CONFIG_8xx */
                  /* Guarded storage error. */
                goto bad_area;
  #endif /* CONFIG_8xx */
-@@ -393,7 +424,7 @@ good_area:
+@@ -405,7 +436,7 @@ good_area:
                 * processors use the same I/D cache coherency mechanism
                 * as embedded.
                 */
                 * processors use the same I/D cache coherency mechanism
                 * as embedded.
                 */
@@ -9890,7 +9311,7 @@ index 51ab9e7..7d3c78b 100644
                        goto bad_area;
  #endif /* CONFIG_PPC_STD_MMU */
  
                        goto bad_area;
  #endif /* CONFIG_PPC_STD_MMU */
  
-@@ -483,6 +514,23 @@ bad_area:
+@@ -495,6 +526,23 @@ bad_area:
  bad_area_nosemaphore:
        /* User mode accesses cause a SIGSEGV */
        if (user_mode(regs)) {
  bad_area_nosemaphore:
        /* User mode accesses cause a SIGSEGV */
        if (user_mode(regs)) {
@@ -9976,10 +9397,10 @@ index cb8bdbe..cde4bc7 100644
        }
  }
 diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
        }
  }
 diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
-index b0c75cc..ef7fb93 100644
+index ded0ea1..f213a9b 100644
 --- a/arch/powerpc/mm/slice.c
 +++ b/arch/powerpc/mm/slice.c
 --- a/arch/powerpc/mm/slice.c
 +++ b/arch/powerpc/mm/slice.c
-@@ -103,7 +103,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
+@@ -105,7 +105,7 @@ static int slice_area_is_free(struct mm_struct *mm, unsigned long addr,
        if ((mm->task_size - len) < addr)
                return 0;
        vma = find_vma(mm, addr);
        if ((mm->task_size - len) < addr)
                return 0;
        vma = find_vma(mm, addr);
@@ -10013,18 +9434,6 @@ index b0c75cc..ef7fb93 100644
        /* If hint, make sure it matches our alignment restrictions */
        if (!fixed && addr) {
                addr = _ALIGN_UP(addr, 1ul << pshift);
        /* If hint, make sure it matches our alignment restrictions */
        if (!fixed && addr) {
                addr = _ALIGN_UP(addr, 1ul << pshift);
-diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c
-index 3afa6f4..40c53ff 100644
---- a/arch/powerpc/net/bpf_jit_comp.c
-+++ b/arch/powerpc/net/bpf_jit_comp.c
-@@ -697,5 +697,6 @@ void bpf_jit_free(struct bpf_prog *fp)
- {
-       if (fp->jited)
-               module_free(NULL, fp->bpf_func);
--      kfree(fp);
-+
-+      bpf_prog_unlock_free(fp);
- }
 diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c
 index 4278acf..67fd0e6 100644
 --- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c
 diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c
 index 4278acf..67fd0e6 100644
 --- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c
@@ -10076,10 +9485,10 @@ index fa934fe..c296056 100644
 +
  #endif /* __ARCH_S390_ATOMIC__  */
 diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h
 +
  #endif /* __ARCH_S390_ATOMIC__  */
 diff --git a/arch/s390/include/asm/barrier.h b/arch/s390/include/asm/barrier.h
-index 19ff956..8d39cb1 100644
+index b5dce65..8aca09a 100644
 --- a/arch/s390/include/asm/barrier.h
 +++ b/arch/s390/include/asm/barrier.h
 --- a/arch/s390/include/asm/barrier.h
 +++ b/arch/s390/include/asm/barrier.h
-@@ -37,7 +37,7 @@
+@@ -39,7 +39,7 @@
  do {                                                                  \
        compiletime_assert_atomic_type(*p);                             \
        barrier();                                                      \
  do {                                                                  \
        compiletime_assert_atomic_type(*p);                             \
        barrier();                                                      \
@@ -10105,10 +9514,10 @@ index 4d7ccac..d03d0ad 100644
  
  #define __read_mostly __attribute__((__section__(".data..read_mostly")))
 diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
  
  #define __read_mostly __attribute__((__section__(".data..read_mostly")))
 diff --git a/arch/s390/include/asm/elf.h b/arch/s390/include/asm/elf.h
-index 78f4f87..598ce39 100644
+index f6e43d3..5f57681 100644
 --- a/arch/s390/include/asm/elf.h
 +++ b/arch/s390/include/asm/elf.h
 --- a/arch/s390/include/asm/elf.h
 +++ b/arch/s390/include/asm/elf.h
-@@ -162,8 +162,14 @@ extern unsigned int vdso_enabled;
+@@ -163,8 +163,14 @@ extern unsigned int vdso_enabled;
     the loader.  We need to make sure that it is out of the way of the program
     that it will "exec", and that there is sufficient room for the brk.  */
  
     the loader.  We need to make sure that it is out of the way of the program
     that it will "exec", and that there is sufficient room for the brk.  */
  
@@ -10125,14 +9534,14 @@ index 78f4f87..598ce39 100644
  
  /* This yields a mask that user programs can use to figure out what
     instruction set this CPU supports. */
  
  /* This yields a mask that user programs can use to figure out what
     instruction set this CPU supports. */
-@@ -222,9 +228,6 @@ struct linux_binprm;
+@@ -223,9 +229,6 @@ struct linux_binprm;
  #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
  int arch_setup_additional_pages(struct linux_binprm *, int);
  
 -extern unsigned long arch_randomize_brk(struct mm_struct *mm);
 -#define arch_randomize_brk arch_randomize_brk
 -
  #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
  int arch_setup_additional_pages(struct linux_binprm *, int);
  
 -extern unsigned long arch_randomize_brk(struct mm_struct *mm);
 -#define arch_randomize_brk arch_randomize_brk
 -
- void *fill_cpu_elf_notes(void *ptr, struct save_area *sa);
+ void *fill_cpu_elf_notes(void *ptr, struct save_area *sa, __vector128 *vxrs);
  
  #endif
 diff --git a/arch/s390/include/asm/exec.h b/arch/s390/include/asm/exec.h
  
  #endif
 diff --git a/arch/s390/include/asm/exec.h b/arch/s390/include/asm/exec.h
@@ -10263,10 +9672,10 @@ index b89b591..fd9609d 100644
                if (r_type == R_390_GOTPC)
                        rc = apply_rela_bits(loc, val, 1, 32, 0);
 diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
                if (r_type == R_390_GOTPC)
                        rc = apply_rela_bits(loc, val, 1, 32, 0);
 diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
-index 93b9ca4..4ea1454 100644
+index ed84cc2..c05a9d2 100644
 --- a/arch/s390/kernel/process.c
 +++ b/arch/s390/kernel/process.c
 --- a/arch/s390/kernel/process.c
 +++ b/arch/s390/kernel/process.c
-@@ -242,37 +242,3 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -218,37 +218,3 @@ unsigned long get_wchan(struct task_struct *p)
        }
        return 0;
  }
        }
        return 0;
  }
@@ -10352,17 +9761,6 @@ index 9b436c2..54fbf0a 100644
                mm->get_unmapped_area = s390_get_unmapped_area_topdown;
        }
  }
                mm->get_unmapped_area = s390_get_unmapped_area_topdown;
        }
  }
-diff --git a/arch/s390/net/bpf_jit_comp.c b/arch/s390/net/bpf_jit_comp.c
-index 61e45b7..f2833c5 100644
---- a/arch/s390/net/bpf_jit_comp.c
-+++ b/arch/s390/net/bpf_jit_comp.c
-@@ -887,5 +887,5 @@ void bpf_jit_free(struct bpf_prog *fp)
-       module_free(NULL, header);
- free_filter:
--      kfree(fp);
-+      bpf_prog_unlock_free(fp);
- }
 diff --git a/arch/score/include/asm/cache.h b/arch/score/include/asm/cache.h
 index ae3d59f..f65f075 100644
 --- a/arch/score/include/asm/cache.h
 diff --git a/arch/score/include/asm/cache.h b/arch/score/include/asm/cache.h
 index ae3d59f..f65f075 100644
 --- a/arch/score/include/asm/cache.h
@@ -10503,21 +9901,21 @@ index 6777177..cb5e44f 100644
                addr = vm_unmapped_area(&info);
        }
 diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h
                addr = vm_unmapped_area(&info);
        }
 diff --git a/arch/sparc/include/asm/atomic_64.h b/arch/sparc/include/asm/atomic_64.h
-index bb894c8..8141d5c 100644
+index 4082749..fd97781 100644
 --- a/arch/sparc/include/asm/atomic_64.h
 +++ b/arch/sparc/include/asm/atomic_64.h
 --- a/arch/sparc/include/asm/atomic_64.h
 +++ b/arch/sparc/include/asm/atomic_64.h
-@@ -15,18 +15,40 @@
+@@ -15,18 +15,38 @@
  #define ATOMIC64_INIT(i)      { (i) }
  
  #define ATOMIC64_INIT(i)      { (i) }
  
- #define atomic_read(v)                (*(volatile int *)&(v)->counter)
+ #define atomic_read(v)                ACCESS_ONCE((v)->counter)
 +static inline int atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
 +static inline int atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
-+      return v->counter;
++      return ACCESS_ONCE(v->counter);
 +}
 +}
- #define atomic64_read(v)      (*(volatile long *)&(v)->counter)
+ #define atomic64_read(v)      ACCESS_ONCE((v)->counter)
 +static inline long atomic64_read_unchecked(const atomic64_unchecked_t *v)
 +{
 +static inline long atomic64_read_unchecked(const atomic64_unchecked_t *v)
 +{
-+      return v->counter;
++      return ACCESS_ONCE(v->counter);
 +}
  
  #define atomic_set(v, i)      (((v)->counter) = i)
 +}
  
  #define atomic_set(v, i)      (((v)->counter) = i)
@@ -10531,53 +9929,51 @@ index bb894c8..8141d5c 100644
 +      v->counter = i;
 +}
  
 +      v->counter = i;
 +}
  
- void atomic_add(int, atomic_t *);
-+void atomic_add_unchecked(int, atomic_unchecked_t *);
- void atomic64_add(long, atomic64_t *);
-+void atomic64_add_unchecked(long, atomic64_unchecked_t *);
- void atomic_sub(int, atomic_t *);
-+void atomic_sub_unchecked(int, atomic_unchecked_t *);
- void atomic64_sub(long, atomic64_t *);
-+void atomic64_sub_unchecked(long, atomic64_unchecked_t *);
+-#define ATOMIC_OP(op)                                                 \
+-void atomic_##op(int, atomic_t *);                                    \
+-void atomic64_##op(long, atomic64_t *);
++#define __ATOMIC_OP(op, suffix)                                               \
++void atomic_##op##suffix(int, atomic##suffix##_t *);                  \
++void atomic64_##op##suffix(long, atomic64##suffix##_t *);
  
  
- int atomic_add_ret(int, atomic_t *);
-+int atomic_add_ret_unchecked(int, atomic_unchecked_t *);
- long atomic64_add_ret(long, atomic64_t *);
-+long atomic64_add_ret_unchecked(long, atomic64_unchecked_t *);
- int atomic_sub_ret(int, atomic_t *);
- long atomic64_sub_ret(long, atomic64_t *);
+-#define ATOMIC_OP_RETURN(op)                                          \
+-int atomic_##op##_return(int, atomic_t *);                            \
+-long atomic64_##op##_return(long, atomic64_t *);
++#define ATOMIC_OP(op) __ATOMIC_OP(op, ) __ATOMIC_OP(op, _unchecked)
++
++#define __ATOMIC_OP_RETURN(op, suffix)                                        \
++int atomic_##op##_return##suffix(int, atomic##suffix##_t *);          \
++long atomic64_##op##_return##suffix(long, atomic64##suffix##_t *);
++
++#define ATOMIC_OP_RETURN(op) __ATOMIC_OP_RETURN(op, ) __ATOMIC_OP_RETURN(op, _unchecked)
  
  
-@@ -34,13 +56,29 @@ long atomic64_sub_ret(long, atomic64_t *);
- #define atomic64_dec_return(v) atomic64_sub_ret(1, v)
+ #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op)
  
  
- #define atomic_inc_return(v) atomic_add_ret(1, v)
-+static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v)
-+{
-+      return atomic_add_ret_unchecked(1, v);
-+}
- #define atomic64_inc_return(v) atomic64_add_ret(1, v)
-+static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v)
-+{
-+      return atomic64_add_ret_unchecked(1, v);
-+}
+@@ -35,13 +55,23 @@ ATOMIC_OPS(sub)
  
  
- #define atomic_sub_return(i, v) atomic_sub_ret(i, v)
- #define atomic64_sub_return(i, v) atomic64_sub_ret(i, v)
+ #undef ATOMIC_OPS
+ #undef ATOMIC_OP_RETURN
++#undef __ATOMIC_OP_RETURN
+ #undef ATOMIC_OP
++#undef __ATOMIC_OP
  
  
- #define atomic_add_return(i, v) atomic_add_ret(i, v)
-+static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
+ #define atomic_dec_return(v)   atomic_sub_return(1, v)
+ #define atomic64_dec_return(v) atomic64_sub_return(1, v)
+ #define atomic_inc_return(v)   atomic_add_return(1, v)
++static inline int atomic_inc_return_unchecked(atomic_unchecked_t *v)
 +{
 +{
-+      return atomic_add_ret_unchecked(i, v);
++      return atomic_add_return_unchecked(1, v);
 +}
 +}
- #define atomic64_add_return(i, v) atomic64_add_ret(i, v)
-+static inline long atomic64_add_return_unchecked(long i, atomic64_unchecked_t *v)
+ #define atomic64_inc_return(v) atomic64_add_return(1, v)
++static inline long atomic64_inc_return_unchecked(atomic64_unchecked_t *v)
 +{
 +{
-+      return atomic64_add_ret_unchecked(i, v);
++      return atomic64_add_return_unchecked(1, v);
 +}
  
  /*
   * atomic_inc_and_test - increment and test
 +}
  
  /*
   * atomic_inc_and_test - increment and test
-@@ -51,6 +89,10 @@ long atomic64_sub_ret(long, atomic64_t *);
+@@ -52,6 +82,10 @@ ATOMIC_OPS(sub)
   * other cases.
   */
  #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
   * other cases.
   */
  #define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
@@ -10587,9 +9983,9 @@ index bb894c8..8141d5c 100644
 +}
  #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
  
 +}
  #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0)
  
- #define atomic_sub_and_test(i, v) (atomic_sub_ret(i, v) == 0)
-@@ -60,25 +102,60 @@ long atomic64_sub_ret(long, atomic64_t *);
- #define atomic64_dec_and_test(v) (atomic64_sub_ret(1, v) == 0)
+ #define atomic_sub_and_test(i, v) (atomic_sub_return(i, v) == 0)
+@@ -61,25 +95,60 @@ ATOMIC_OPS(sub)
+ #define atomic64_dec_and_test(v) (atomic64_sub_return(1, v) == 0)
  
  #define atomic_inc(v) atomic_add(1, v)
 +static inline void atomic_inc_unchecked(atomic_unchecked_t *v)
  
  #define atomic_inc(v) atomic_add(1, v)
 +static inline void atomic_inc_unchecked(atomic_unchecked_t *v)
@@ -10613,8 +10009,8 @@ index bb894c8..8141d5c 100644
 +      atomic64_sub_unchecked(1, v);
 +}
  
 +      atomic64_sub_unchecked(1, v);
 +}
  
- #define atomic_add_negative(i, v) (atomic_add_ret(i, v) < 0)
- #define atomic64_add_negative(i, v) (atomic64_add_ret(i, v) < 0)
+ #define atomic_add_negative(i, v) (atomic_add_return(i, v) < 0)
+ #define atomic64_add_negative(i, v) (atomic64_add_return(i, v) < 0)
  
  #define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n)))
 +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new)
  
  #define atomic_cmpxchg(v, o, n) (cmpxchg(&((v)->counter), (o), (n)))
 +static inline int atomic_cmpxchg_unchecked(atomic_unchecked_t *v, int old, int new)
@@ -10652,7 +10048,7 @@ index bb894c8..8141d5c 100644
                if (likely(old == c))
                        break;
                c = old;
                if (likely(old == c))
                        break;
                c = old;
-@@ -89,20 +166,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
+@@ -90,20 +159,35 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
  #define atomic64_cmpxchg(v, o, n) \
        ((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
  #define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
  #define atomic64_cmpxchg(v, o, n) \
        ((__typeof__((v)->counter))cmpxchg(&((v)->counter), (o), (n)))
  #define atomic64_xchg(v, new) (xchg(&((v)->counter), new))
@@ -10772,10 +10168,18 @@ index a3890da..f6a408e 100644
  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm,
                                   unsigned long address)
 diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h
  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm,
                                   unsigned long address)
 diff --git a/arch/sparc/include/asm/pgalloc_64.h b/arch/sparc/include/asm/pgalloc_64.h
-index 5e31871..b71c9d7 100644
+index 5e31871..13469c6 100644
 --- a/arch/sparc/include/asm/pgalloc_64.h
 +++ b/arch/sparc/include/asm/pgalloc_64.h
 --- a/arch/sparc/include/asm/pgalloc_64.h
 +++ b/arch/sparc/include/asm/pgalloc_64.h
-@@ -38,6 +38,7 @@ static inline void __pud_populate(pud_t *pud, pmd_t *pmd)
+@@ -21,6 +21,7 @@ static inline void __pgd_populate(pgd_t *pgd, pud_t *pud)
+ }
+ #define pgd_populate(MM, PGD, PUD)    __pgd_populate(PGD, PUD)
++#define pgd_populate_kernel(MM, PGD, PMD)     pgd_populate((MM), (PGD), (PMD))
+ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
+ {
+@@ -38,6 +39,7 @@ static inline void __pud_populate(pud_t *pud, pmd_t *pmd)
  }
  
  #define pud_populate(MM, PUD, PMD)    __pud_populate(PUD, PMD)
  }
  
  #define pud_populate(MM, PUD, PMD)    __pud_populate(PUD, PMD)
@@ -10968,7 +10372,7 @@ index 9689176..63c18ea 100644
        unsigned long mask, tmp1, tmp2, result;
  
 diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h
        unsigned long mask, tmp1, tmp2, result;
  
 diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h
-index 96efa7a..16858bf 100644
+index 025c984..a216504 100644
 --- a/arch/sparc/include/asm/thread_info_32.h
 +++ b/arch/sparc/include/asm/thread_info_32.h
 @@ -49,6 +49,8 @@ struct thread_info {
 --- a/arch/sparc/include/asm/thread_info_32.h
 +++ b/arch/sparc/include/asm/thread_info_32.h
 @@ -49,6 +49,8 @@ struct thread_info {
@@ -10981,7 +10385,7 @@ index 96efa7a..16858bf 100644
  
  /*
 diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h
  
  /*
 diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h
-index cc6275c..7eb8e21 100644
+index 798f027..b009941 100644
 --- a/arch/sparc/include/asm/thread_info_64.h
 +++ b/arch/sparc/include/asm/thread_info_64.h
 @@ -63,6 +63,8 @@ struct thread_info {
 --- a/arch/sparc/include/asm/thread_info_64.h
 +++ b/arch/sparc/include/asm/thread_info_64.h
 @@ -63,6 +63,8 @@ struct thread_info {
@@ -11008,7 +10412,7 @@ index cc6275c..7eb8e21 100644
  /* NOTE: Thread flags >= 12 should be ones we have no interest
   *       in using in assembly, else we can't use the mask as
   *       an immediate value in instructions such as andcc.
  /* NOTE: Thread flags >= 12 should be ones we have no interest
   *       in using in assembly, else we can't use the mask as
   *       an immediate value in instructions such as andcc.
-@@ -215,12 +218,18 @@ register struct thread_info *current_thread_info_reg asm("g6");
+@@ -215,12 +218,17 @@ register struct thread_info *current_thread_info_reg asm("g6");
  #define _TIF_SYSCALL_AUDIT    (1<<TIF_SYSCALL_AUDIT)
  #define _TIF_SYSCALL_TRACEPOINT       (1<<TIF_SYSCALL_TRACEPOINT)
  #define _TIF_POLLING_NRFLAG   (1<<TIF_POLLING_NRFLAG)
  #define _TIF_SYSCALL_AUDIT    (1<<TIF_SYSCALL_AUDIT)
  #define _TIF_SYSCALL_TRACEPOINT       (1<<TIF_SYSCALL_TRACEPOINT)
  #define _TIF_POLLING_NRFLAG   (1<<TIF_POLLING_NRFLAG)
@@ -11023,10 +10427,9 @@ index cc6275c..7eb8e21 100644
 +      (_TIF_SYSCALL_TRACE | _TIF_SECCOMP | _TIF_SYSCALL_AUDIT | \
 +       _TIF_SYSCALL_TRACEPOINT | _TIF_NOHZ | _TIF_GRSEC_SETXID)
 +
 +      (_TIF_SYSCALL_TRACE | _TIF_SECCOMP | _TIF_SYSCALL_AUDIT | \
 +       _TIF_SYSCALL_TRACEPOINT | _TIF_NOHZ | _TIF_GRSEC_SETXID)
 +
-+
+ #define is_32bit_task()       (test_thread_flag(TIF_32BIT))
  /*
  /*
-  * Thread-synchronous status.
-  *
 diff --git a/arch/sparc/include/asm/uaccess.h b/arch/sparc/include/asm/uaccess.h
 index bd56c28..4b63d83 100644
 --- a/arch/sparc/include/asm/uaccess.h
 diff --git a/arch/sparc/include/asm/uaccess.h b/arch/sparc/include/asm/uaccess.h
 index bd56c28..4b63d83 100644
 --- a/arch/sparc/include/asm/uaccess.h
@@ -11236,7 +10639,7 @@ index 79cc0d1..ec62734 100644
        .getproplen = prom_getproplen,
        .getproperty = prom_getproperty,
 diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
        .getproplen = prom_getproplen,
        .getproperty = prom_getproperty,
 diff --git a/arch/sparc/kernel/ptrace_64.c b/arch/sparc/kernel/ptrace_64.c
-index c13c9f2..d572c34 100644
+index 9ddc492..27a5619 100644
 --- a/arch/sparc/kernel/ptrace_64.c
 +++ b/arch/sparc/kernel/ptrace_64.c
 @@ -1060,6 +1060,10 @@ long arch_ptrace(struct task_struct *child, long request,
 --- a/arch/sparc/kernel/ptrace_64.c
 +++ b/arch/sparc/kernel/ptrace_64.c
 @@ -1060,6 +1060,10 @@ long arch_ptrace(struct task_struct *child, long request,
@@ -11262,7 +10665,7 @@ index c13c9f2..d572c34 100644
        if (test_thread_flag(TIF_SYSCALL_TRACE))
                ret = tracehook_report_syscall_entry(regs);
  
        if (test_thread_flag(TIF_SYSCALL_TRACE))
                ret = tracehook_report_syscall_entry(regs);
  
-@@ -1093,6 +1102,11 @@ asmlinkage void syscall_trace_leave(struct pt_regs *regs)
+@@ -1088,6 +1097,11 @@ asmlinkage void syscall_trace_leave(struct pt_regs *regs)
        if (test_thread_flag(TIF_NOHZ))
                user_exit();
  
        if (test_thread_flag(TIF_NOHZ))
                user_exit();
  
@@ -11275,7 +10678,7 @@ index c13c9f2..d572c34 100644
  
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
 diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
  
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
 diff --git a/arch/sparc/kernel/smp_64.c b/arch/sparc/kernel/smp_64.c
-index 81954ee..6cfaa98 100644
+index da6f1a7..e5dea8f 100644
 --- a/arch/sparc/kernel/smp_64.c
 +++ b/arch/sparc/kernel/smp_64.c
 @@ -887,7 +887,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
 --- a/arch/sparc/kernel/smp_64.c
 +++ b/arch/sparc/kernel/smp_64.c
 @@ -887,7 +887,7 @@ void smp_flush_dcache_page_impl(struct page *page, int cpu)
@@ -11790,242 +11193,150 @@ index 3269b02..64f5231 100644
  lib-$(CONFIG_SPARC32) += ashrdi3.o
  lib-$(CONFIG_SPARC32) += memcpy.o memset.o
 diff --git a/arch/sparc/lib/atomic_64.S b/arch/sparc/lib/atomic_64.S
  lib-$(CONFIG_SPARC32) += ashrdi3.o
  lib-$(CONFIG_SPARC32) += memcpy.o memset.o
 diff --git a/arch/sparc/lib/atomic_64.S b/arch/sparc/lib/atomic_64.S
-index 85c233d..68500e0 100644
+index 05dac43..76f8ed4 100644
 --- a/arch/sparc/lib/atomic_64.S
 +++ b/arch/sparc/lib/atomic_64.S
 --- a/arch/sparc/lib/atomic_64.S
 +++ b/arch/sparc/lib/atomic_64.S
-@@ -17,7 +17,12 @@
- ENTRY(atomic_add) /* %o0 = increment, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    lduw    [%o1], %g1
--      add     %g1, %o0, %g7
-+      addcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %icc, 6
-+#endif
-+
-       cas     [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %icc, BACKOFF_LABEL(2f, 1b)
-@@ -27,10 +32,28 @@ ENTRY(atomic_add) /* %o0 = increment, %o1 = atomic_ptr */
- 2:    BACKOFF_SPIN(%o2, %o3, 1b)
- ENDPROC(atomic_add)
-+ENTRY(atomic_add_unchecked) /* %o0 = increment, %o1 = atomic_ptr */
-+      BACKOFF_SETUP(%o2)
-+1:    lduw    [%o1], %g1
-+      add     %g1, %o0, %g7
-+      cas     [%o1], %g1, %g7
-+      cmp     %g1, %g7
-+      bne,pn  %icc, 2f
-+       nop
-+      retl
-+       nop
-+2:    BACKOFF_SPIN(%o2, %o3, 1b)
-+ENDPROC(atomic_add_unchecked)
-+
- ENTRY(atomic_sub) /* %o0 = decrement, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    lduw    [%o1], %g1
--      sub     %g1, %o0, %g7
-+      subcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %icc, 6
-+#endif
-+
-       cas     [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %icc, BACKOFF_LABEL(2f, 1b)
-@@ -40,10 +63,28 @@ ENTRY(atomic_sub) /* %o0 = decrement, %o1 = atomic_ptr */
- 2:    BACKOFF_SPIN(%o2, %o3, 1b)
- ENDPROC(atomic_sub)
-+ENTRY(atomic_sub_unchecked) /* %o0 = decrement, %o1 = atomic_ptr */
-+      BACKOFF_SETUP(%o2)
-+1:    lduw    [%o1], %g1
-+      sub     %g1, %o0, %g7
-+      cas     [%o1], %g1, %g7
-+      cmp     %g1, %g7
-+      bne,pn  %icc, 2f
-+       nop
-+      retl
-+       nop
-+2:    BACKOFF_SPIN(%o2, %o3, 1b)
-+ENDPROC(atomic_sub_unchecked)
-+
- ENTRY(atomic_add_ret) /* %o0 = increment, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    lduw    [%o1], %g1
--      add     %g1, %o0, %g7
-+      addcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %icc, 6
-+#endif
-+
-       cas     [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %icc, BACKOFF_LABEL(2f, 1b)
-@@ -53,10 +94,29 @@ ENTRY(atomic_add_ret) /* %o0 = increment, %o1 = atomic_ptr */
- 2:    BACKOFF_SPIN(%o2, %o3, 1b)
- ENDPROC(atomic_add_ret)
-+ENTRY(atomic_add_ret_unchecked) /* %o0 = increment, %o1 = atomic_ptr */
-+      BACKOFF_SETUP(%o2)
-+1:    lduw    [%o1], %g1
-+      addcc   %g1, %o0, %g7
-+      cas     [%o1], %g1, %g7
-+      cmp     %g1, %g7
-+      bne,pn  %icc, 2f
-+       add    %g7, %o0, %g7
-+      sra     %g7, 0, %o0
-+      retl
-+       nop
-+2:    BACKOFF_SPIN(%o2, %o3, 1b)
-+ENDPROC(atomic_add_ret_unchecked)
-+
- ENTRY(atomic_sub_ret) /* %o0 = decrement, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    lduw    [%o1], %g1
--      sub     %g1, %o0, %g7
-+      subcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %icc, 6
-+#endif
-+
-       cas     [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %icc, BACKOFF_LABEL(2f, 1b)
-@@ -69,7 +129,12 @@ ENDPROC(atomic_sub_ret)
- ENTRY(atomic64_add) /* %o0 = increment, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    ldx     [%o1], %g1
--      add     %g1, %o0, %g7
-+      addcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %xcc, 6
-+#endif
-+
-       casx    [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %xcc, BACKOFF_LABEL(2f, 1b)
-@@ -79,10 +144,28 @@ ENTRY(atomic64_add) /* %o0 = increment, %o1 = atomic_ptr */
- 2:    BACKOFF_SPIN(%o2, %o3, 1b)
- ENDPROC(atomic64_add)
-+ENTRY(atomic64_add_unchecked) /* %o0 = increment, %o1 = atomic_ptr */
-+      BACKOFF_SETUP(%o2)
-+1:    ldx     [%o1], %g1
-+      addcc   %g1, %o0, %g7
-+      casx    [%o1], %g1, %g7
-+      cmp     %g1, %g7
-+      bne,pn  %xcc, 2f
-+       nop
-+      retl
-+       nop
-+2:    BACKOFF_SPIN(%o2, %o3, 1b)
-+ENDPROC(atomic64_add_unchecked)
-+
- ENTRY(atomic64_sub) /* %o0 = decrement, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    ldx     [%o1], %g1
--      sub     %g1, %o0, %g7
-+      subcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %xcc, 6
-+#endif
-+
-       casx    [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %xcc, BACKOFF_LABEL(2f, 1b)
-@@ -92,10 +175,28 @@ ENTRY(atomic64_sub) /* %o0 = decrement, %o1 = atomic_ptr */
- 2:    BACKOFF_SPIN(%o2, %o3, 1b)
- ENDPROC(atomic64_sub)
-+ENTRY(atomic64_sub_unchecked) /* %o0 = decrement, %o1 = atomic_ptr */
-+      BACKOFF_SETUP(%o2)
-+1:    ldx     [%o1], %g1
-+      subcc   %g1, %o0, %g7
-+      casx    [%o1], %g1, %g7
-+      cmp     %g1, %g7
-+      bne,pn  %xcc, 2f
-+       nop
-+      retl
-+       nop
-+2:    BACKOFF_SPIN(%o2, %o3, 1b)
-+ENDPROC(atomic64_sub_unchecked)
-+
- ENTRY(atomic64_add_ret) /* %o0 = increment, %o1 = atomic_ptr */
-       BACKOFF_SETUP(%o2)
- 1:    ldx     [%o1], %g1
--      add     %g1, %o0, %g7
-+      addcc   %g1, %o0, %g7
-+
+@@ -15,11 +15,22 @@
+        * a value and does the barriers.
+        */
+-#define ATOMIC_OP(op)                                                 \
+-ENTRY(atomic_##op) /* %o0 = increment, %o1 = atomic_ptr */            \
 +#ifdef CONFIG_PAX_REFCOUNT
 +#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %xcc, 6
-+#endif
-+
-       casx    [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %xcc, BACKOFF_LABEL(2f, 1b)
-@@ -105,10 +206,29 @@ ENTRY(atomic64_add_ret) /* %o0 = increment, %o1 = atomic_ptr */
- 2:    BACKOFF_SPIN(%o2, %o3, 1b)
- ENDPROC(atomic64_add_ret)
-+ENTRY(atomic64_add_ret_unchecked) /* %o0 = increment, %o1 = atomic_ptr */
-+      BACKOFF_SETUP(%o2)
-+1:    ldx     [%o1], %g1
-+      addcc   %g1, %o0, %g7
-+      casx    [%o1], %g1, %g7
-+      cmp     %g1, %g7
-+      bne,pn  %xcc, 2f
-+       add    %g7, %o0, %g7
-+      mov     %g7, %o0
-+      retl
-+       nop
-+2:    BACKOFF_SPIN(%o2, %o3, 1b)
-+ENDPROC(atomic64_add_ret_unchecked)
-+
- ENTRY(atomic64_sub_ret) /* %o0 = decrement, %o1 = atomic_ptr */
++#define __REFCOUNT_OP(op) op##cc
++#define __OVERFLOW_IOP tvs    %icc, 6;
++#define __OVERFLOW_XOP tvs    %xcc, 6;
++#else
++#define __REFCOUNT_OP(op) op
++#define __OVERFLOW_IOP
++#define __OVERFLOW_XOP
++#endif
++
++#define __ATOMIC_OP(op, suffix, asm_op, post_op)                      \
++ENTRY(atomic_##op##suffix) /* %o0 = increment, %o1 = atomic_ptr */    \
+       BACKOFF_SETUP(%o2);                                             \
+ 1:    lduw    [%o1], %g1;                                             \
+-      op      %g1, %o0, %g7;                                          \
++      asm_op  %g1, %o0, %g7;                                          \
++      post_op                                                         \
+       cas     [%o1], %g1, %g7;                                        \
+       cmp     %g1, %g7;                                               \
+       bne,pn  %icc, BACKOFF_LABEL(2f, 1b);                            \
+@@ -29,11 +40,15 @@ ENTRY(atomic_##op) /* %o0 = increment, %o1 = atomic_ptr */         \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+ ENDPROC(atomic_##op);                                                 \
+-#define ATOMIC_OP_RETURN(op)                                          \
+-ENTRY(atomic_##op##_return) /* %o0 = increment, %o1 = atomic_ptr */   \
++#define ATOMIC_OP(op) __ATOMIC_OP(op, , op, ) \
++                    __ATOMIC_OP(op, _unchecked, __REFCOUNT_OP(op), __OVERFLOW_IOP)
++
++#define __ATOMIC_OP_RETURN(op, suffix, asm_op, post_op)                       \
++ENTRY(atomic_##op##_return##suffix) /* %o0 = increment, %o1 = atomic_ptr */\
+       BACKOFF_SETUP(%o2);                                             \
+ 1:    lduw    [%o1], %g1;                                             \
+-      op      %g1, %o0, %g7;                                          \
++      asm_op  %g1, %o0, %g7;                                          \
++      post_op                                                         \
+       cas     [%o1], %g1, %g7;                                        \
+       cmp     %g1, %g7;                                               \
+       bne,pn  %icc, BACKOFF_LABEL(2f, 1b);                            \
+@@ -43,6 +58,9 @@ ENTRY(atomic_##op##_return) /* %o0 = increment, %o1 = atomic_ptr */  \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+ ENDPROC(atomic_##op##_return);
++#define ATOMIC_OP_RETURN(op) __ATOMIC_OP_RETURN(op, , op, ) \
++                           __ATOMIC_OP_RETURN(op, _unchecked, __REFCOUNT_OP(op), __OVERFLOW_IOP)
++
+ #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op)
+ ATOMIC_OPS(add)
+@@ -50,13 +68,16 @@ ATOMIC_OPS(sub)
+ #undef ATOMIC_OPS
+ #undef ATOMIC_OP_RETURN
++#undef __ATOMIC_OP_RETURN
+ #undef ATOMIC_OP
++#undef __ATOMIC_OP
+-#define ATOMIC64_OP(op)                                                       \
+-ENTRY(atomic64_##op) /* %o0 = increment, %o1 = atomic_ptr */          \
++#define __ATOMIC64_OP(op, suffix, asm_op, post_op)                    \
++ENTRY(atomic64_##op##suffix) /* %o0 = increment, %o1 = atomic_ptr */  \
+       BACKOFF_SETUP(%o2);                                             \
+ 1:    ldx     [%o1], %g1;                                             \
+-      op      %g1, %o0, %g7;                                          \
++      asm_op  %g1, %o0, %g7;                                          \
++      post_op                                                         \
+       casx    [%o1], %g1, %g7;                                        \
+       cmp     %g1, %g7;                                               \
+       bne,pn  %xcc, BACKOFF_LABEL(2f, 1b);                            \
+@@ -66,11 +87,15 @@ ENTRY(atomic64_##op) /* %o0 = increment, %o1 = atomic_ptr */               \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+ ENDPROC(atomic64_##op);                                                       \
+-#define ATOMIC64_OP_RETURN(op)                                                \
+-ENTRY(atomic64_##op##_return) /* %o0 = increment, %o1 = atomic_ptr */ \
++#define ATOMIC64_OP(op) __ATOMIC64_OP(op, , op, ) \
++                      __ATOMIC64_OP(op, _unchecked, __REFCOUNT_OP(op), __OVERFLOW_XOP)
++
++#define __ATOMIC64_OP_RETURN(op, suffix, asm_op, post_op)             \
++ENTRY(atomic64_##op##_return##suffix) /* %o0 = increment, %o1 = atomic_ptr */\
+       BACKOFF_SETUP(%o2);                                             \
+ 1:    ldx     [%o1], %g1;                                             \
+-      op      %g1, %o0, %g7;                                          \
++      asm_op  %g1, %o0, %g7;                                          \
++      post_op                                                         \
+       casx    [%o1], %g1, %g7;                                        \
+       cmp     %g1, %g7;                                               \
+       bne,pn  %xcc, BACKOFF_LABEL(2f, 1b);                            \
+@@ -80,6 +105,9 @@ ENTRY(atomic64_##op##_return) /* %o0 = increment, %o1 = atomic_ptr */       \
+ 2:    BACKOFF_SPIN(%o2, %o3, 1b);                                     \
+ ENDPROC(atomic64_##op##_return);
++#define ATOMIC64_OP_RETURN(op) __ATOMIC64_OP_RETURN(op, , op, ) \
++i                            __ATOMIC64_OP_RETURN(op, _unchecked, __REFCOUNT_OP(op), __OVERFLOW_XOP)
++
+ #define ATOMIC64_OPS(op) ATOMIC64_OP(op) ATOMIC64_OP_RETURN(op)
+ ATOMIC64_OPS(add)
+@@ -87,7 +115,12 @@ ATOMIC64_OPS(sub)
+ #undef ATOMIC64_OPS
+ #undef ATOMIC64_OP_RETURN
++#undef __ATOMIC64_OP_RETURN
+ #undef ATOMIC64_OP
++#undef __ATOMIC64_OP
++#undef __OVERFLOW_XOP
++#undef __OVERFLOW_IOP
++#undef __REFCOUNT_OP
+ ENTRY(atomic64_dec_if_positive) /* %o0 = atomic_ptr */
        BACKOFF_SETUP(%o2)
        BACKOFF_SETUP(%o2)
- 1:    ldx     [%o1], %g1
--      sub     %g1, %o0, %g7
-+      subcc   %g1, %o0, %g7
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      tvs     %xcc, 6
-+#endif
-+
-       casx    [%o1], %g1, %g7
-       cmp     %g1, %g7
-       bne,pn  %xcc, BACKOFF_LABEL(2f, 1b)
 diff --git a/arch/sparc/lib/ksyms.c b/arch/sparc/lib/ksyms.c
 diff --git a/arch/sparc/lib/ksyms.c b/arch/sparc/lib/ksyms.c
-index 323335b..ed85ea2 100644
+index 1d649a9..fbc5bfc 100644
 --- a/arch/sparc/lib/ksyms.c
 +++ b/arch/sparc/lib/ksyms.c
 --- a/arch/sparc/lib/ksyms.c
 +++ b/arch/sparc/lib/ksyms.c
-@@ -100,12 +100,18 @@ EXPORT_SYMBOL(__clear_user);
+@@ -101,7 +101,9 @@ EXPORT_SYMBOL(__clear_user);
  /* Atomic counter implementation. */
  /* Atomic counter implementation. */
- EXPORT_SYMBOL(atomic_add);
-+EXPORT_SYMBOL(atomic_add_unchecked);
- EXPORT_SYMBOL(atomic_add_ret);
+ #define ATOMIC_OP(op)                                                 \
+ EXPORT_SYMBOL(atomic_##op);                                           \
+-EXPORT_SYMBOL(atomic64_##op);
++EXPORT_SYMBOL(atomic_##op##_unchecked);                                       \
++EXPORT_SYMBOL(atomic64_##op);                                         \
++EXPORT_SYMBOL(atomic64_##op##_unchecked);
+ #define ATOMIC_OP_RETURN(op)                                          \
+ EXPORT_SYMBOL(atomic_##op##_return);                                  \
+@@ -110,6 +112,8 @@ EXPORT_SYMBOL(atomic64_##op##_return);
+ #define ATOMIC_OPS(op) ATOMIC_OP(op) ATOMIC_OP_RETURN(op)
+ ATOMIC_OPS(add)
 +EXPORT_SYMBOL(atomic_add_ret_unchecked);
 +EXPORT_SYMBOL(atomic_add_ret_unchecked);
- EXPORT_SYMBOL(atomic_sub);
-+EXPORT_SYMBOL(atomic_sub_unchecked);
- EXPORT_SYMBOL(atomic_sub_ret);
- EXPORT_SYMBOL(atomic64_add);
-+EXPORT_SYMBOL(atomic64_add_unchecked);
- EXPORT_SYMBOL(atomic64_add_ret);
 +EXPORT_SYMBOL(atomic64_add_ret_unchecked);
 +EXPORT_SYMBOL(atomic64_add_ret_unchecked);
- EXPORT_SYMBOL(atomic64_sub);
-+EXPORT_SYMBOL(atomic64_sub_unchecked);
- EXPORT_SYMBOL(atomic64_sub_ret);
- EXPORT_SYMBOL(atomic64_dec_if_positive);
+ ATOMIC_OPS(sub)
  
  
+ #undef ATOMIC_OPS
 diff --git a/arch/sparc/mm/Makefile b/arch/sparc/mm/Makefile
 index 30c3ecc..736f015 100644
 --- a/arch/sparc/mm/Makefile
 diff --git a/arch/sparc/mm/Makefile b/arch/sparc/mm/Makefile
 index 30c3ecc..736f015 100644
 --- a/arch/sparc/mm/Makefile
@@ -12983,7 +12294,7 @@ index d329537..2c3746a 100644
  
  pte_t *huge_pte_alloc(struct mm_struct *mm,
 diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
  
  pte_t *huge_pte_alloc(struct mm_struct *mm,
 diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c
-index 04bc826..0fefab9 100644
+index 2d91c62..17a8fff 100644
 --- a/arch/sparc/mm/init_64.c
 +++ b/arch/sparc/mm/init_64.c
 @@ -186,9 +186,9 @@ unsigned long sparc64_kern_sec_context __read_mostly;
 --- a/arch/sparc/mm/init_64.c
 +++ b/arch/sparc/mm/init_64.c
 @@ -186,9 +186,9 @@ unsigned long sparc64_kern_sec_context __read_mostly;
@@ -13020,23 +12331,11 @@ index 04bc826..0fefab9 100644
  #endif /* CONFIG_SMP */
  #endif /* CONFIG_DEBUG_DCFLUSH */
  }
  #endif /* CONFIG_SMP */
  #endif /* CONFIG_DEBUG_DCFLUSH */
  }
-diff --git a/arch/sparc/net/bpf_jit_comp.c b/arch/sparc/net/bpf_jit_comp.c
-index ece4af0..f04b862 100644
---- a/arch/sparc/net/bpf_jit_comp.c
-+++ b/arch/sparc/net/bpf_jit_comp.c
-@@ -823,5 +823,6 @@ void bpf_jit_free(struct bpf_prog *fp)
- {
-       if (fp->jited)
-               module_free(NULL, fp->bpf_func);
--      kfree(fp);
-+
-+      bpf_prog_unlock_free(fp);
- }
 diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
 diff --git a/arch/tile/Kconfig b/arch/tile/Kconfig
-index 7fcd492..1311074 100644
+index 7cca418..53fc030 100644
 --- a/arch/tile/Kconfig
 +++ b/arch/tile/Kconfig
 --- a/arch/tile/Kconfig
 +++ b/arch/tile/Kconfig
-@@ -191,6 +191,7 @@ source "kernel/Kconfig.hz"
+@@ -192,6 +192,7 @@ source "kernel/Kconfig.hz"
  
  config KEXEC
        bool "kexec system call"
  
  config KEXEC
        bool "kexec system call"
@@ -13237,10 +12536,10 @@ index ad8f795..2c7eec6 100644
  /*
   * Memory returned by kmalloc() may be used for DMA, so we must make
 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
  /*
   * Memory returned by kmalloc() may be used for DMA, so we must make
 diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
-index 3632743..630a8bb 100644
+index 41a503c..cf98b04 100644
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
-@@ -130,7 +130,7 @@ config X86
+@@ -129,7 +129,7 @@ config X86
        select RTC_LIB
        select HAVE_DEBUG_STACKOVERFLOW
        select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
        select RTC_LIB
        select HAVE_DEBUG_STACKOVERFLOW
        select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
@@ -13249,7 +12548,7 @@ index 3632743..630a8bb 100644
        select GENERIC_CPU_AUTOPROBE
        select HAVE_ARCH_AUDITSYSCALL
        select ARCH_SUPPORTS_ATOMIC_RMW
        select GENERIC_CPU_AUTOPROBE
        select HAVE_ARCH_AUDITSYSCALL
        select ARCH_SUPPORTS_ATOMIC_RMW
-@@ -258,7 +258,7 @@ config X86_HT
+@@ -262,7 +262,7 @@ config X86_HT
  
  config X86_32_LAZY_GS
        def_bool y
  
  config X86_32_LAZY_GS
        def_bool y
@@ -13258,7 +12557,7 @@ index 3632743..630a8bb 100644
  
  config ARCH_HWEIGHT_CFLAGS
        string
  
  config ARCH_HWEIGHT_CFLAGS
        string
-@@ -555,6 +555,7 @@ config SCHED_OMIT_FRAME_POINTER
+@@ -600,6 +600,7 @@ config SCHED_OMIT_FRAME_POINTER
  
  menuconfig HYPERVISOR_GUEST
        bool "Linux guest support"
  
  menuconfig HYPERVISOR_GUEST
        bool "Linux guest support"
@@ -13266,7 +12565,15 @@ index 3632743..630a8bb 100644
        ---help---
          Say Y here to enable options for running Linux under various hyper-
          visors. This option enables basic hypervisor detection and platform
        ---help---
          Say Y here to enable options for running Linux under various hyper-
          visors. This option enables basic hypervisor detection and platform
-@@ -1083,6 +1084,7 @@ choice
+@@ -973,6 +974,7 @@ config VM86
+ config X86_16BIT
+       bool "Enable support for 16-bit segments" if EXPERT
++      depends on !GRKERNSEC
+       default y
+       ---help---
+         This option is required by programs like Wine to run 16-bit
+@@ -1128,6 +1130,7 @@ choice
  
  config NOHIGHMEM
        bool "off"
  
  config NOHIGHMEM
        bool "off"
@@ -13274,7 +12581,7 @@ index 3632743..630a8bb 100644
        ---help---
          Linux can use up to 64 Gigabytes of physical memory on x86 systems.
          However, the address space of 32-bit x86 processors is only 4
        ---help---
          Linux can use up to 64 Gigabytes of physical memory on x86 systems.
          However, the address space of 32-bit x86 processors is only 4
-@@ -1119,6 +1121,7 @@ config NOHIGHMEM
+@@ -1164,6 +1167,7 @@ config NOHIGHMEM
  
  config HIGHMEM4G
        bool "4GB"
  
  config HIGHMEM4G
        bool "4GB"
@@ -13282,7 +12589,7 @@ index 3632743..630a8bb 100644
        ---help---
          Select this if you have a 32-bit processor and between 1 and 4
          gigabytes of physical RAM.
        ---help---
          Select this if you have a 32-bit processor and between 1 and 4
          gigabytes of physical RAM.
-@@ -1171,7 +1174,7 @@ config PAGE_OFFSET
+@@ -1216,7 +1220,7 @@ config PAGE_OFFSET
        hex
        default 0xB0000000 if VMSPLIT_3G_OPT
        default 0x80000000 if VMSPLIT_2G
        hex
        default 0xB0000000 if VMSPLIT_3G_OPT
        default 0x80000000 if VMSPLIT_2G
@@ -13291,7 +12598,7 @@ index 3632743..630a8bb 100644
        default 0x40000000 if VMSPLIT_1G
        default 0xC0000000
        depends on X86_32
        default 0x40000000 if VMSPLIT_1G
        default 0xC0000000
        depends on X86_32
-@@ -1586,6 +1589,7 @@ source kernel/Kconfig.hz
+@@ -1631,6 +1635,7 @@ source kernel/Kconfig.hz
  
  config KEXEC
        bool "kexec system call"
  
  config KEXEC
        bool "kexec system call"
@@ -13299,7 +12606,7 @@ index 3632743..630a8bb 100644
        ---help---
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
        ---help---
          kexec is a system call that implements the ability to shutdown your
          current kernel, and to start another kernel.  It is like a reboot
-@@ -1771,7 +1775,9 @@ config X86_NEED_RELOCS
+@@ -1816,7 +1821,9 @@ config X86_NEED_RELOCS
  
  config PHYSICAL_ALIGN
        hex "Alignment value to which kernel should be aligned"
  
  config PHYSICAL_ALIGN
        hex "Alignment value to which kernel should be aligned"
@@ -13310,7 +12617,7 @@ index 3632743..630a8bb 100644
        range 0x2000 0x1000000 if X86_32
        range 0x200000 0x1000000 if X86_64
        ---help---
        range 0x2000 0x1000000 if X86_32
        range 0x200000 0x1000000 if X86_64
        ---help---
-@@ -1854,6 +1860,7 @@ config COMPAT_VDSO
+@@ -1899,6 +1906,7 @@ config COMPAT_VDSO
        def_bool n
        prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)"
        depends on X86_32 || IA32_EMULATION
        def_bool n
        prompt "Disable the 32-bit vDSO (needed for glibc 2.3.3)"
        depends on X86_32 || IA32_EMULATION
@@ -13372,10 +12679,10 @@ index 61bd2ad..50b625d 100644
          This option helps catch unintended modifications to loadable
          kernel module's text and read-only data. It also prevents execution
 diff --git a/arch/x86/Makefile b/arch/x86/Makefile
          This option helps catch unintended modifications to loadable
          kernel module's text and read-only data. It also prevents execution
 diff --git a/arch/x86/Makefile b/arch/x86/Makefile
-index 60087ca..9d9500e 100644
+index 920e616..ac3d4df 100644
 --- a/arch/x86/Makefile
 +++ b/arch/x86/Makefile
 --- a/arch/x86/Makefile
 +++ b/arch/x86/Makefile
-@@ -68,9 +68,6 @@ ifeq ($(CONFIG_X86_32),y)
+@@ -65,9 +65,6 @@ ifeq ($(CONFIG_X86_32),y)
          # CPU-specific tuning. Anything which can be shared with UML should go here.
          include $(srctree)/arch/x86/Makefile_32.cpu
          KBUILD_CFLAGS += $(cflags-y)
          # CPU-specific tuning. Anything which can be shared with UML should go here.
          include $(srctree)/arch/x86/Makefile_32.cpu
          KBUILD_CFLAGS += $(cflags-y)
@@ -13385,7 +12692,7 @@ index 60087ca..9d9500e 100644
  else
          BITS := 64
          UTS_MACHINE := x86_64
  else
          BITS := 64
          UTS_MACHINE := x86_64
-@@ -111,6 +108,9 @@ else
+@@ -107,6 +104,9 @@ else
          KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args)
  endif
  
          KBUILD_CFLAGS += $(call cc-option,-maccumulate-outgoing-args)
  endif
  
@@ -13395,7 +12702,7 @@ index 60087ca..9d9500e 100644
  # Make sure compiler does not have buggy stack-protector support.
  ifdef CONFIG_CC_STACKPROTECTOR
        cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
  # Make sure compiler does not have buggy stack-protector support.
  ifdef CONFIG_CC_STACKPROTECTOR
        cc_has_sp := $(srctree)/scripts/gcc-x86_$(BITS)-has-stack-protector.sh
-@@ -184,6 +184,7 @@ archheaders:
+@@ -180,6 +180,7 @@ archheaders:
        $(Q)$(MAKE) $(build)=arch/x86/syscalls all
  
  archprepare:
        $(Q)$(MAKE) $(build)=arch/x86/syscalls all
  
  archprepare:
@@ -13403,9 +12710,9 @@ index 60087ca..9d9500e 100644
  ifeq ($(CONFIG_KEXEC_FILE),y)
        $(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c
  endif
  ifeq ($(CONFIG_KEXEC_FILE),y)
        $(Q)$(MAKE) $(build)=arch/x86/purgatory arch/x86/purgatory/kexec-purgatory.c
  endif
-@@ -274,3 +275,9 @@ define archhelp
+@@ -263,3 +264,9 @@ define archhelp
+   echo  '                  FDARGS="..."  arguments for the booted kernel'
    echo  '                  FDINITRD=file initrd for the booted kernel'
    echo  '                  FDINITRD=file initrd for the booted kernel'
-   echo  '  kvmconfig  - Enable additional options for guest kernel support'
  endef
 +
 +define OLD_LD
  endef
 +
 +define OLD_LD
@@ -13414,10 +12721,10 @@ index 60087ca..9d9500e 100644
 +*** Please upgrade your binutils to 2.18 or newer
 +endef
 diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
 +*** Please upgrade your binutils to 2.18 or newer
 +endef
 diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
-index dbe8dd2..2f0a98f 100644
+index 5b016e2..04ef69c 100644
 --- a/arch/x86/boot/Makefile
 +++ b/arch/x86/boot/Makefile
 --- a/arch/x86/boot/Makefile
 +++ b/arch/x86/boot/Makefile
-@@ -52,6 +52,9 @@ $(obj)/cpustr.h: $(obj)/mkcpustr FORCE
+@@ -55,6 +55,9 @@ endif
  # ---------------------------------------------------------------------------
  
  KBUILD_CFLAGS := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP
  # ---------------------------------------------------------------------------
  
  KBUILD_CFLAGS := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP
@@ -13463,7 +12770,7 @@ index bd49ec6..94c7f58 100644
  }
  
 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
  }
  
 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
-index 14fe7cb..829b962 100644
+index 45abc36..97bea2d 100644
 --- a/arch/x86/boot/compressed/Makefile
 +++ b/arch/x86/boot/compressed/Makefile
 @@ -16,6 +16,9 @@ KBUILD_CFLAGS += $(cflags-y)
 --- a/arch/x86/boot/compressed/Makefile
 +++ b/arch/x86/boot/compressed/Makefile
 @@ -16,6 +16,9 @@ KBUILD_CFLAGS += $(cflags-y)
@@ -15285,7 +14592,7 @@ index a039d21..524b8b2 100644
        ret
  ENDPROC(twofish_dec_blk)
 diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c
        ret
  ENDPROC(twofish_dec_blk)
 diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c
-index d21ff89..6da8e6e 100644
+index df91466..74b31cb 100644
 --- a/arch/x86/ia32/ia32_aout.c
 +++ b/arch/x86/ia32/ia32_aout.c
 @@ -153,6 +153,8 @@ static int aout_core_dump(struct coredump_params *cprm)
 --- a/arch/x86/ia32/ia32_aout.c
 +++ b/arch/x86/ia32/ia32_aout.c
 @@ -153,6 +153,8 @@ static int aout_core_dump(struct coredump_params *cprm)
@@ -15298,7 +14605,7 @@ index d21ff89..6da8e6e 100644
        set_fs(KERNEL_DS);
        has_dumped = 1;
 diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
        set_fs(KERNEL_DS);
        has_dumped = 1;
 diff --git a/arch/x86/ia32/ia32_signal.c b/arch/x86/ia32/ia32_signal.c
-index f9e181a..db313b5 100644
+index f9e181a..300544c 100644
 --- a/arch/x86/ia32/ia32_signal.c
 +++ b/arch/x86/ia32/ia32_signal.c
 @@ -218,7 +218,7 @@ asmlinkage long sys32_sigreturn(void)
 --- a/arch/x86/ia32/ia32_signal.c
 +++ b/arch/x86/ia32/ia32_signal.c
 @@ -218,7 +218,7 @@ asmlinkage long sys32_sigreturn(void)
@@ -15355,12 +14662,13 @@ index f9e181a..db313b5 100644
  
                if (ksig->ka.sa.sa_flags & SA_RESTORER)
                        restorer = ksig->ka.sa.sa_restorer;
  
                if (ksig->ka.sa.sa_flags & SA_RESTORER)
                        restorer = ksig->ka.sa.sa_restorer;
--              else
 +              else if (current->mm->context.vdso)
 +                      /* Return stub is in 32bit vsyscall page */
 +              else if (current->mm->context.vdso)
 +                      /* Return stub is in 32bit vsyscall page */
-                       restorer = current->mm->context.vdso +
-                               selected_vdso32->sym___kernel_rt_sigreturn;
-+              else
++                      restorer = (void __force_user *)(current->mm->context.vdso +
++                              selected_vdso32->sym___kernel_rt_sigreturn);
+               else
+-                      restorer = current->mm->context.vdso +
+-                              selected_vdso32->sym___kernel_rt_sigreturn;
 +                      restorer = frame->retcode;
                put_user_ex(ptr_to_compat(restorer), &frame->pretcode);
  
 +                      restorer = frame->retcode;
                put_user_ex(ptr_to_compat(restorer), &frame->pretcode);
  
@@ -15374,7 +14682,7 @@ index f9e181a..db313b5 100644
  
        err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
 diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
  
        err |= copy_siginfo_to_user32(&frame->info, &ksig->info);
 diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
-index 92a2e93..cd4d95f 100644
+index ffe7122..899bad3 100644
 --- a/arch/x86/ia32/ia32entry.S
 +++ b/arch/x86/ia32/ia32entry.S
 @@ -15,8 +15,10 @@
 --- a/arch/x86/ia32/ia32entry.S
 +++ b/arch/x86/ia32/ia32entry.S
 @@ -15,8 +15,10 @@
@@ -15538,8 +14846,8 @@ index 92a2e93..cd4d95f 100644
        RESTORE_ARGS 0,24,0,0,0,0
        xorq    %r8,%r8
 @@ -205,6 +254,9 @@ sysexit_from_sys_call:
        RESTORE_ARGS 0,24,0,0,0,0
        xorq    %r8,%r8
 @@ -205,6 +254,9 @@ sysexit_from_sys_call:
-       movl %eax,%esi                  /* 2nd arg: syscall number */
-       movl $AUDIT_ARCH_I386,%edi      /* 1st arg: audit arch */
+       movl %ebx,%esi                  /* 2nd arg: 1st syscall arg */
+       movl %eax,%edi                  /* 1st arg: syscall number */
        call __audit_syscall_entry
 +
 +      pax_erase_kstack
        call __audit_syscall_entry
 +
 +      pax_erase_kstack
@@ -15861,18 +15169,13 @@ index 20370c6..a2eb9b0 100644
                "popl %%ebp\n\t"
                "popl %%edi\n\t"
 diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h
                "popl %%ebp\n\t"
                "popl %%edi\n\t"
 diff --git a/arch/x86/include/asm/atomic.h b/arch/x86/include/asm/atomic.h
-index 6dd1c7dd..2edd216 100644
+index 5e5cd12..3d18208 100644
 --- a/arch/x86/include/asm/atomic.h
 +++ b/arch/x86/include/asm/atomic.h
 --- a/arch/x86/include/asm/atomic.h
 +++ b/arch/x86/include/asm/atomic.h
-@@ -24,7 +24,18 @@
-  */
- static inline int atomic_read(const atomic_t *v)
- {
--      return (*(volatile int *)&(v)->counter);
-+      return (*(volatile const int *)&(v)->counter);
-+}
-+
-+/**
+@@ -28,6 +28,17 @@ static inline int atomic_read(const atomic_t *v)
+ }
+ /**
 + * atomic_read_unchecked - read atomic variable
 + * @v: pointer of type atomic_unchecked_t
 + *
 + * atomic_read_unchecked - read atomic variable
 + * @v: pointer of type atomic_unchecked_t
 + *
@@ -15880,10 +15183,13 @@ index 6dd1c7dd..2edd216 100644
 + */
 +static inline int __intentional_overflow(-1) atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
 + */
 +static inline int __intentional_overflow(-1) atomic_read_unchecked(const atomic_unchecked_t *v)
 +{
-+      return (*(volatile const int *)&(v)->counter);
- }
- /**
++      return ACCESS_ONCE((v)->counter);
++}
++
++/**
+  * atomic_set - set atomic variable
+  * @v: pointer of type atomic_t
+  * @i: required value
 @@ -40,6 +51,18 @@ static inline void atomic_set(atomic_t *v, int i)
  }
  
 @@ -40,6 +51,18 @@ static inline void atomic_set(atomic_t *v, int i)
  }
  
@@ -16072,10 +15378,13 @@ index 6dd1c7dd..2edd216 100644
  }
  
  /**
  }
  
  /**
-@@ -154,6 +274,18 @@ static inline int atomic_add_negative(int i, atomic_t *v)
+@@ -152,7 +272,19 @@ static inline int atomic_add_negative(int i, atomic_t *v)
+  *
+  * Atomically adds @i to @v and returns @i + @v
   */
   */
- static inline int atomic_add_return(int i, atomic_t *v)
- {
+-static inline int atomic_add_return(int i, atomic_t *v)
++static inline int __intentional_overflow(-1) atomic_add_return(int i, atomic_t *v)
++{
 +      return i + xadd_check_overflow(&v->counter, i);
 +}
 +
 +      return i + xadd_check_overflow(&v->counter, i);
 +}
 +
@@ -16087,11 +15396,17 @@ index 6dd1c7dd..2edd216 100644
 + * Atomically adds @i to @v and returns @i + @v
 + */
 +static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
 + * Atomically adds @i to @v and returns @i + @v
 + */
 +static inline int atomic_add_return_unchecked(int i, atomic_unchecked_t *v)
-+{
+ {
        return i + xadd(&v->counter, i);
  }
        return i + xadd(&v->counter, i);
  }
-@@ -170,9 +302,18 @@ static inline int atomic_sub_return(int i, atomic_t *v)
+@@ -164,15 +296,24 @@ static inline int atomic_add_return(int i, atomic_t *v)
+  *
+  * Atomically subtracts @i from @v and returns @v - @i
+  */
+-static inline int atomic_sub_return(int i, atomic_t *v)
++static inline int __intentional_overflow(-1) atomic_sub_return(int i, atomic_t *v)
+ {
+       return atomic_add_return(-i, v);
  }
  
  #define atomic_inc_return(v)  (atomic_add_return(1, v))
  }
  
  #define atomic_inc_return(v)  (atomic_add_return(1, v))
@@ -16205,8 +15520,8 @@ index 6dd1c7dd..2edd216 100644
   * atomic_inc_short - increment of a short integer
   * @v: pointer to type int
   *
   * atomic_inc_short - increment of a short integer
   * @v: pointer to type int
   *
-@@ -235,14 +437,37 @@ static inline void atomic_or_long(unsigned long *v1, unsigned long v2)
- #endif
+@@ -220,14 +422,37 @@ static inline short int atomic_inc_short(short int *v)
+ }
  
  /* These are x86-specific, used by some header files */
 -#define atomic_clear_mask(mask, addr)                         \
  
  /* These are x86-specific, used by some header files */
 -#define atomic_clear_mask(mask, addr)                         \
@@ -16426,18 +15741,13 @@ index b154de7..bf18a5a 100644
   * @i: integer value to subtract
   * @v: pointer to type atomic64_t
 diff --git a/arch/x86/include/asm/atomic64_64.h b/arch/x86/include/asm/atomic64_64.h
   * @i: integer value to subtract
   * @v: pointer to type atomic64_t
 diff --git a/arch/x86/include/asm/atomic64_64.h b/arch/x86/include/asm/atomic64_64.h
-index 46e9052..ae45136 100644
+index f8d273e..02f39f3 100644
 --- a/arch/x86/include/asm/atomic64_64.h
 +++ b/arch/x86/include/asm/atomic64_64.h
 --- a/arch/x86/include/asm/atomic64_64.h
 +++ b/arch/x86/include/asm/atomic64_64.h
-@@ -18,7 +18,19 @@
-  */
- static inline long atomic64_read(const atomic64_t *v)
- {
--      return (*(volatile long *)&(v)->counter);
-+      return (*(volatile const long *)&(v)->counter);
-+}
-+
-+/**
+@@ -22,6 +22,18 @@ static inline long atomic64_read(const atomic64_t *v)
+ }
+ /**
 + * atomic64_read_unchecked - read atomic64 variable
 + * @v: pointer of type atomic64_unchecked_t
 + *
 + * atomic64_read_unchecked - read atomic64 variable
 + * @v: pointer of type atomic64_unchecked_t
 + *
@@ -16446,10 +15756,13 @@ index 46e9052..ae45136 100644
 + */
 +static inline long __intentional_overflow(-1) atomic64_read_unchecked(const atomic64_unchecked_t *v)
 +{
 + */
 +static inline long __intentional_overflow(-1) atomic64_read_unchecked(const atomic64_unchecked_t *v)
 +{
-+      return (*(volatile const long *)&(v)->counter);
- }
- /**
++      return ACCESS_ONCE((v)->counter);
++}
++
++/**
+  * atomic64_set - set atomic64 variable
+  * @v: pointer to type atomic64_t
+  * @i: required value
 @@ -34,6 +46,18 @@ static inline void atomic64_set(atomic64_t *v, long i)
  }
  
 @@ -34,6 +46,18 @@ static inline void atomic64_set(atomic64_t *v, long i)
  }
  
@@ -16862,10 +16175,10 @@ index 9863ee3..4a1f8e1 100644
                return _PAGE_CACHE_WC;
        else if (pg_flags == _PGMT_UC_MINUS)
 diff --git a/arch/x86/include/asm/calling.h b/arch/x86/include/asm/calling.h
                return _PAGE_CACHE_WC;
        else if (pg_flags == _PGMT_UC_MINUS)
 diff --git a/arch/x86/include/asm/calling.h b/arch/x86/include/asm/calling.h
-index cb4c73b..c473c29 100644
+index 76659b6..72b8439 100644
 --- a/arch/x86/include/asm/calling.h
 +++ b/arch/x86/include/asm/calling.h
 --- a/arch/x86/include/asm/calling.h
 +++ b/arch/x86/include/asm/calling.h
-@@ -82,103 +82,113 @@ For 32-bit we have the following conventions - kernel is built with
+@@ -82,107 +82,117 @@ For 32-bit we have the following conventions - kernel is built with
  #define RSP           152
  #define SS            160
  
  #define RSP           152
  #define SS            160
  
@@ -16873,7 +16186,7 @@ index cb4c73b..c473c29 100644
 -#define SWFRAME               ORIG_RAX
 +#define ARGOFFSET     R15
  
 -#define SWFRAME               ORIG_RAX
 +#define ARGOFFSET     R15
  
-       .macro SAVE_ARGS addskip=0, save_rcx=1, save_r891011=1
+       .macro SAVE_ARGS addskip=0, save_rcx=1, save_r891011=1, rax_enosys=0
 -      subq  $9*8+\addskip, %rsp
 -      CFI_ADJUST_CFA_OFFSET   9*8+\addskip
 -      movq_cfi rdi, 8*8
 -      subq  $9*8+\addskip, %rsp
 -      CFI_ADJUST_CFA_OFFSET   9*8+\addskip
 -      movq_cfi rdi, 8*8
@@ -16890,8 +16203,13 @@ index cb4c73b..c473c29 100644
 +      movq_cfi rcx, RCX
        .endif
  
 +      movq_cfi rcx, RCX
        .endif
  
+       .if \rax_enosys
+-      movq $-ENOSYS, 4*8(%rsp)
++      movq $-ENOSYS, RAX(%rsp)
+       .else
 -      movq_cfi rax, 4*8
 +      movq_cfi rax, RAX
 -      movq_cfi rax, 4*8
 +      movq_cfi rax, RAX
+       .endif
  
        .if \save_r891011
 -      movq_cfi r8,  3*8
  
        .if \save_r891011
 -      movq_cfi r8,  3*8
@@ -16984,7 +16302,7 @@ index cb4c73b..c473c29 100644
        .if \skiprax
        .else
 -      movq \offset+72(%rsp), %rax
        .if \skiprax
        .else
 -      movq \offset+72(%rsp), %rax
-+      movq RAX(%rsp), %rax
++      movq ORIG_RAX(%rsp), %rax
        .endif
        .endm
  
        .endif
        .endm
  
@@ -17150,18 +16468,19 @@ index 59c6c40..5e0b22c 100644
  struct compat_timespec {
        compat_time_t   tv_sec;
 diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
  struct compat_timespec {
        compat_time_t   tv_sec;
 diff --git a/arch/x86/include/asm/cpufeature.h b/arch/x86/include/asm/cpufeature.h
-index bb9b258..5fad1bf 100644
+index 0bb1335..8f1aec7 100644
 --- a/arch/x86/include/asm/cpufeature.h
 +++ b/arch/x86/include/asm/cpufeature.h
 --- a/arch/x86/include/asm/cpufeature.h
 +++ b/arch/x86/include/asm/cpufeature.h
-@@ -203,14 +203,14 @@
+@@ -207,7 +207,7 @@
  #define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */
  #define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */
  #define X86_FEATURE_PAUSEFILTER ( 8*32+13) /* AMD filtered pause intercept */
  #define X86_FEATURE_PFTHRESHOLD ( 8*32+14) /* AMD pause filter threshold */
+ #define X86_FEATURE_VMMCALL     ( 8*32+15) /* Prefer vmmcall to vmcall */
 -
 +#define X86_FEATURE_STRONGUDEREF (8*32+31) /* PaX PCID based strong UDEREF */
 -
 +#define X86_FEATURE_STRONGUDEREF (8*32+31) /* PaX PCID based strong UDEREF */
  /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */
  #define X86_FEATURE_FSGSBASE  ( 9*32+ 0) /* {RD/WR}{FS/GS}BASE instructions*/
  /* Intel-defined CPU features, CPUID level 0x00000007:0 (ebx), word 9 */
  #define X86_FEATURE_FSGSBASE  ( 9*32+ 0) /* {RD/WR}{FS/GS}BASE instructions*/
- #define X86_FEATURE_TSC_ADJUST        ( 9*32+ 1) /* TSC adjustment MSR 0x3b */
+@@ -215,7 +215,7 @@
  #define X86_FEATURE_BMI1      ( 9*32+ 3) /* 1st group bit manipulation extensions */
  #define X86_FEATURE_HLE               ( 9*32+ 4) /* Hardware Lock Elision */
  #define X86_FEATURE_AVX2      ( 9*32+ 5) /* AVX2 instructions */
  #define X86_FEATURE_BMI1      ( 9*32+ 3) /* 1st group bit manipulation extensions */
  #define X86_FEATURE_HLE               ( 9*32+ 4) /* Hardware Lock Elision */
  #define X86_FEATURE_AVX2      ( 9*32+ 5) /* AVX2 instructions */
@@ -17170,15 +16489,15 @@ index bb9b258..5fad1bf 100644
  #define X86_FEATURE_BMI2      ( 9*32+ 8) /* 2nd group bit manipulation extensions */
  #define X86_FEATURE_ERMS      ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */
  #define X86_FEATURE_INVPCID   ( 9*32+10) /* Invalidate Processor Context ID */
  #define X86_FEATURE_BMI2      ( 9*32+ 8) /* 2nd group bit manipulation extensions */
  #define X86_FEATURE_ERMS      ( 9*32+ 9) /* Enhanced REP MOVSB/STOSB */
  #define X86_FEATURE_INVPCID   ( 9*32+10) /* Invalidate Processor Context ID */
-@@ -370,6 +370,7 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
- #undef  cpu_has_centaur_mcr
- #define cpu_has_centaur_mcr   0
+@@ -383,6 +383,7 @@ extern const char * const x86_bug_flags[NBUGINTS*32];
+ #define cpu_has_cx16          boot_cpu_has(X86_FEATURE_CX16)
+ #define cpu_has_eager_fpu     boot_cpu_has(X86_FEATURE_EAGER_FPU)
+ #define cpu_has_topoext               boot_cpu_has(X86_FEATURE_TOPOEXT)
 +#define cpu_has_pcid          boot_cpu_has(X86_FEATURE_PCID)
 +#define cpu_has_pcid          boot_cpu_has(X86_FEATURE_PCID)
- #endif /* CONFIG_X86_64 */
  
  #if __GNUC__ >= 4
  
  #if __GNUC__ >= 4
-@@ -422,7 +423,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+ extern void warn_pre_alternatives(void);
+@@ -434,7 +435,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
  
  #ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS
        t_warn:
  
  #ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS
        t_warn:
@@ -17188,7 +16507,7 @@ index bb9b258..5fad1bf 100644
                return false;
  #endif
  
                return false;
  #endif
  
-@@ -442,7 +444,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -454,7 +456,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
                             ".section .discard,\"aw\",@progbits\n"
                             " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
                             ".previous\n"
                             ".section .discard,\"aw\",@progbits\n"
                             " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
                             ".previous\n"
@@ -17197,7 +16516,7 @@ index bb9b258..5fad1bf 100644
                             "3: movb $1,%0\n"
                             "4:\n"
                             ".previous\n"
                             "3: movb $1,%0\n"
                             "4:\n"
                             ".previous\n"
-@@ -479,7 +481,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -491,7 +493,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
                         " .byte 2b - 1b\n"             /* src len */
                         " .byte 4f - 3f\n"             /* repl len */
                         ".previous\n"
                         " .byte 2b - 1b\n"             /* src len */
                         " .byte 4f - 3f\n"             /* repl len */
                         ".previous\n"
@@ -17206,7 +16525,7 @@ index bb9b258..5fad1bf 100644
                         "3: .byte 0xe9\n .long %l[t_no] - 2b\n"
                         "4:\n"
                         ".previous\n"
                         "3: .byte 0xe9\n .long %l[t_no] - 2b\n"
                         "4:\n"
                         ".previous\n"
-@@ -512,7 +514,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -524,7 +526,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
                             ".section .discard,\"aw\",@progbits\n"
                             " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
                             ".previous\n"
                             ".section .discard,\"aw\",@progbits\n"
                             " .byte 0xff + (4f-3f) - (2b-1b)\n" /* size check */
                             ".previous\n"
@@ -17215,7 +16534,7 @@ index bb9b258..5fad1bf 100644
                             "3: movb $0,%0\n"
                             "4:\n"
                             ".previous\n"
                             "3: movb $0,%0\n"
                             "4:\n"
                             ".previous\n"
-@@ -526,7 +528,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -538,7 +540,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
                             ".section .discard,\"aw\",@progbits\n"
                             " .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */
                             ".previous\n"
                             ".section .discard,\"aw\",@progbits\n"
                             " .byte 0xff + (6f-5f) - (4b-3b)\n" /* size check */
                             ".previous\n"
@@ -17611,7 +16930,7 @@ index 1c7eefe..d0e4702 100644
  };
  
 diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
  };
  
 diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
-index 412ecec..c1ea43a 100644
+index e97622f..d0ba77a 100644
 --- a/arch/x86/include/asm/fpu-internal.h
 +++ b/arch/x86/include/asm/fpu-internal.h
 @@ -124,8 +124,11 @@ static inline void sanitize_i387_state(struct task_struct *tsk)
 --- a/arch/x86/include/asm/fpu-internal.h
 +++ b/arch/x86/include/asm/fpu-internal.h
 @@ -124,8 +124,11 @@ static inline void sanitize_i387_state(struct task_struct *tsk)
@@ -17810,10 +17129,10 @@ index 0a8b519..80e7d5b 100644
  #define INTERRUPT_RETURN              iret
  #define ENABLE_INTERRUPTS_SYSEXIT     sti; sysexit
 diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h
  #define INTERRUPT_RETURN              iret
  #define ENABLE_INTERRUPTS_SYSEXIT     sti; sysexit
 diff --git a/arch/x86/include/asm/kprobes.h b/arch/x86/include/asm/kprobes.h
-index 53cdfb2..d1369e6 100644
+index 4421b5d..8543006 100644
 --- a/arch/x86/include/asm/kprobes.h
 +++ b/arch/x86/include/asm/kprobes.h
 --- a/arch/x86/include/asm/kprobes.h
 +++ b/arch/x86/include/asm/kprobes.h
-@@ -38,13 +38,8 @@ typedef u8 kprobe_opcode_t;
+@@ -37,13 +37,8 @@ typedef u8 kprobe_opcode_t;
  #define RELATIVEJUMP_SIZE 5
  #define RELATIVECALL_OPCODE 0xe8
  #define RELATIVE_ADDR_SIZE 4
  #define RELATIVEJUMP_SIZE 5
  #define RELATIVECALL_OPCODE 0xe8
  #define RELATIVE_ADDR_SIZE 4
@@ -17829,6 +17148,18 @@ index 53cdfb2..d1369e6 100644
  
  #define flush_insn_slot(p)    do { } while (0)
  
  
  #define flush_insn_slot(p)    do { } while (0)
  
+diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
+index 6ed0c30..74fb6c3 100644
+--- a/arch/x86/include/asm/kvm_host.h
++++ b/arch/x86/include/asm/kvm_host.h
+@@ -51,6 +51,7 @@
+                         | X86_CR0_NW | X86_CR0_CD | X86_CR0_PG))
+ #define CR3_L_MODE_RESERVED_BITS 0xFFFFFF0000000000ULL
++#define CR3_PCID_INVD          (1UL << 63)
+ #define CR4_RESERVED_BITS                                               \
+       (~(unsigned long)(X86_CR4_VME | X86_CR4_PVI | X86_CR4_TSD | X86_CR4_DE\
+                         | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_MCE     \
 diff --git a/arch/x86/include/asm/local.h b/arch/x86/include/asm/local.h
 index 4ad6560..75c7bdd 100644
 --- a/arch/x86/include/asm/local.h
 diff --git a/arch/x86/include/asm/local.h b/arch/x86/include/asm/local.h
 index 4ad6560..75c7bdd 100644
 --- a/arch/x86/include/asm/local.h
@@ -18880,7 +18211,7 @@ index aa97a07..5c53c32 100644
  static inline int page_level_shift(enum pg_level level)
  {
 diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h
  static inline int page_level_shift(enum pg_level level)
  {
 diff --git a/arch/x86/include/asm/pgtable_32.h b/arch/x86/include/asm/pgtable_32.h
-index 9ee3221..b979c6b 100644
+index b6c0b40..3535d47 100644
 --- a/arch/x86/include/asm/pgtable_32.h
 +++ b/arch/x86/include/asm/pgtable_32.h
 @@ -25,9 +25,6 @@
 --- a/arch/x86/include/asm/pgtable_32.h
 +++ b/arch/x86/include/asm/pgtable_32.h
 @@ -25,9 +25,6 @@
@@ -18893,7 +18224,7 @@ index 9ee3221..b979c6b 100644
  static inline void pgtable_cache_init(void) { }
  static inline void check_pgt_cache(void) { }
  void paging_init(void);
  static inline void pgtable_cache_init(void) { }
  static inline void check_pgt_cache(void) { }
  void paging_init(void);
-@@ -48,6 +45,12 @@ extern void set_pmd_pfn(unsigned long, unsigned long, pgprot_t);
+@@ -45,6 +42,12 @@ void paging_init(void);
  # include <asm/pgtable-2level.h>
  #endif
  
  # include <asm/pgtable-2level.h>
  #endif
  
@@ -18906,7 +18237,7 @@ index 9ee3221..b979c6b 100644
  #if defined(CONFIG_HIGHPTE)
  #define pte_offset_map(dir, address)                                  \
        ((pte_t *)kmap_atomic(pmd_page(*(dir))) +               \
  #if defined(CONFIG_HIGHPTE)
  #define pte_offset_map(dir, address)                                  \
        ((pte_t *)kmap_atomic(pmd_page(*(dir))) +               \
-@@ -62,12 +65,17 @@ extern void set_pmd_pfn(unsigned long, unsigned long, pgprot_t);
+@@ -59,12 +62,17 @@ void paging_init(void);
  /* Clear a kernel PTE and flush it from the TLB */
  #define kpte_clear_flush(ptep, vaddr)         \
  do {                                          \
  /* Clear a kernel PTE and flush it from the TLB */
  #define kpte_clear_flush(ptep, vaddr)         \
  do {                                          \
@@ -18958,7 +18289,7 @@ index ed5903b..c7fe163 100644
  #define MODULES_END   VMALLOC_END
  #define MODULES_LEN   (MODULES_VADDR - MODULES_END)
 diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
  #define MODULES_END   VMALLOC_END
  #define MODULES_LEN   (MODULES_VADDR - MODULES_END)
 diff --git a/arch/x86/include/asm/pgtable_64.h b/arch/x86/include/asm/pgtable_64.h
-index 3874693..d7906ac 100644
+index 4572b2f..4430113 100644
 --- a/arch/x86/include/asm/pgtable_64.h
 +++ b/arch/x86/include/asm/pgtable_64.h
 @@ -16,11 +16,16 @@
 --- a/arch/x86/include/asm/pgtable_64.h
 +++ b/arch/x86/include/asm/pgtable_64.h
 @@ -16,11 +16,16 @@
@@ -19034,10 +18365,10 @@ index 7166e25..baaa6fe 100644
  
  #endif /* _ASM_X86_PGTABLE_64_DEFS_H */
 diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
  
  #endif /* _ASM_X86_PGTABLE_64_DEFS_H */
 diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
-index f216963..6bd7c21 100644
+index 0778964..0e94758 100644
 --- a/arch/x86/include/asm/pgtable_types.h
 +++ b/arch/x86/include/asm/pgtable_types.h
 --- a/arch/x86/include/asm/pgtable_types.h
 +++ b/arch/x86/include/asm/pgtable_types.h
-@@ -111,8 +111,10 @@
+@@ -110,8 +110,10 @@
  
  #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
  #define _PAGE_NX      (_AT(pteval_t, 1) << _PAGE_BIT_NX)
  
  #if defined(CONFIG_X86_64) || defined(CONFIG_X86_PAE)
  #define _PAGE_NX      (_AT(pteval_t, 1) << _PAGE_BIT_NX)
@@ -19049,7 +18380,7 @@ index f216963..6bd7c21 100644
  #endif
  
  #define _PAGE_FILE    (_AT(pteval_t, 1) << _PAGE_BIT_FILE)
  #endif
  
  #define _PAGE_FILE    (_AT(pteval_t, 1) << _PAGE_BIT_FILE)
-@@ -151,6 +153,9 @@
+@@ -150,6 +152,9 @@
  #define PAGE_READONLY_EXEC    __pgprot(_PAGE_PRESENT | _PAGE_USER |   \
                                         _PAGE_ACCESSED)
  
  #define PAGE_READONLY_EXEC    __pgprot(_PAGE_PRESENT | _PAGE_USER |   \
                                         _PAGE_ACCESSED)
  
@@ -19059,7 +18390,7 @@ index f216963..6bd7c21 100644
  #define __PAGE_KERNEL_EXEC                                            \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL)
  #define __PAGE_KERNEL         (__PAGE_KERNEL_EXEC | _PAGE_NX)
  #define __PAGE_KERNEL_EXEC                                            \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL)
  #define __PAGE_KERNEL         (__PAGE_KERNEL_EXEC | _PAGE_NX)
-@@ -161,7 +166,7 @@
+@@ -160,7 +165,7 @@
  #define __PAGE_KERNEL_WC              (__PAGE_KERNEL | _PAGE_CACHE_WC)
  #define __PAGE_KERNEL_NOCACHE         (__PAGE_KERNEL | _PAGE_PCD | _PAGE_PWT)
  #define __PAGE_KERNEL_UC_MINUS                (__PAGE_KERNEL | _PAGE_PCD)
  #define __PAGE_KERNEL_WC              (__PAGE_KERNEL | _PAGE_CACHE_WC)
  #define __PAGE_KERNEL_NOCACHE         (__PAGE_KERNEL | _PAGE_PCD | _PAGE_PWT)
  #define __PAGE_KERNEL_UC_MINUS                (__PAGE_KERNEL | _PAGE_PCD)
@@ -19068,7 +18399,7 @@ index f216963..6bd7c21 100644
  #define __PAGE_KERNEL_VVAR            (__PAGE_KERNEL_RO | _PAGE_USER)
  #define __PAGE_KERNEL_VVAR_NOCACHE    (__PAGE_KERNEL_VVAR | _PAGE_PCD | _PAGE_PWT)
  #define __PAGE_KERNEL_LARGE           (__PAGE_KERNEL | _PAGE_PSE)
  #define __PAGE_KERNEL_VVAR            (__PAGE_KERNEL_RO | _PAGE_USER)
  #define __PAGE_KERNEL_VVAR_NOCACHE    (__PAGE_KERNEL_VVAR | _PAGE_PCD | _PAGE_PWT)
  #define __PAGE_KERNEL_LARGE           (__PAGE_KERNEL | _PAGE_PSE)
-@@ -218,7 +223,7 @@
+@@ -217,7 +222,7 @@
  #ifdef CONFIG_X86_64
  #define __PAGE_KERNEL_IDENT_LARGE_EXEC        __PAGE_KERNEL_LARGE_EXEC
  #else
  #ifdef CONFIG_X86_64
  #define __PAGE_KERNEL_IDENT_LARGE_EXEC        __PAGE_KERNEL_LARGE_EXEC
  #else
@@ -19077,7 +18408,7 @@ index f216963..6bd7c21 100644
  #define PDE_IDENT_ATTR         0x063          /* PRESENT+RW+DIRTY+ACCESSED */
  #define PGD_IDENT_ATTR         0x001          /* PRESENT (no other attributes) */
  #endif
  #define PDE_IDENT_ATTR         0x063          /* PRESENT+RW+DIRTY+ACCESSED */
  #define PGD_IDENT_ATTR         0x001          /* PRESENT (no other attributes) */
  #endif
-@@ -257,7 +262,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd)
+@@ -256,7 +261,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd)
  {
        return native_pgd_val(pgd) & PTE_FLAGS_MASK;
  }
  {
        return native_pgd_val(pgd) & PTE_FLAGS_MASK;
  }
@@ -19095,7 +18426,7 @@ index f216963..6bd7c21 100644
  #if PAGETABLE_LEVELS > 3
  typedef struct { pudval_t pud; } pud_t;
  
  #if PAGETABLE_LEVELS > 3
  typedef struct { pudval_t pud; } pud_t;
  
-@@ -271,8 +286,6 @@ static inline pudval_t native_pud_val(pud_t pud)
+@@ -270,8 +285,6 @@ static inline pudval_t native_pud_val(pud_t pud)
        return pud.pud;
  }
  #else
        return pud.pud;
  }
  #else
@@ -19104,7 +18435,7 @@ index f216963..6bd7c21 100644
  static inline pudval_t native_pud_val(pud_t pud)
  {
        return native_pgd_val(pud.pgd);
  static inline pudval_t native_pud_val(pud_t pud)
  {
        return native_pgd_val(pud.pgd);
-@@ -292,8 +305,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
+@@ -291,8 +304,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
        return pmd.pmd;
  }
  #else
        return pmd.pmd;
  }
  #else
@@ -19113,7 +18444,7 @@ index f216963..6bd7c21 100644
  static inline pmdval_t native_pmd_val(pmd_t pmd)
  {
        return native_pgd_val(pmd.pud.pgd);
  static inline pmdval_t native_pmd_val(pmd_t pmd)
  {
        return native_pgd_val(pmd.pud.pgd);
-@@ -333,7 +344,6 @@ typedef struct page *pgtable_t;
+@@ -346,7 +357,6 @@ typedef struct page *pgtable_t;
  
  extern pteval_t __supported_pte_mask;
  extern void set_nx(void);
  
  extern pteval_t __supported_pte_mask;
  extern void set_nx(void);
@@ -19122,7 +18453,7 @@ index f216963..6bd7c21 100644
  #define pgprot_writecombine   pgprot_writecombine
  extern pgprot_t pgprot_writecombine(pgprot_t prot);
 diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h
  #define pgprot_writecombine   pgprot_writecombine
  extern pgprot_t pgprot_writecombine(pgprot_t prot);
 diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h
-index 7024c12..71c46b9 100644
+index 4008734..48f0d81 100644
 --- a/arch/x86/include/asm/preempt.h
 +++ b/arch/x86/include/asm/preempt.h
 @@ -87,7 +87,7 @@ static __always_inline void __preempt_count_sub(int val)
 --- a/arch/x86/include/asm/preempt.h
 +++ b/arch/x86/include/asm/preempt.h
 @@ -87,7 +87,7 @@ static __always_inline void __preempt_count_sub(int val)
@@ -19330,10 +18661,10 @@ index eb71ec7..f06532a 100644
  void df_debug(struct pt_regs *regs, long error_code);
  #endif /* _ASM_X86_PROCESSOR_H */
 diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
  void df_debug(struct pt_regs *regs, long error_code);
  #endif /* _ASM_X86_PROCESSOR_H */
 diff --git a/arch/x86/include/asm/ptrace.h b/arch/x86/include/asm/ptrace.h
-index 6205f0c..688a3a9 100644
+index 86fc2bb..bd5049a 100644
 --- a/arch/x86/include/asm/ptrace.h
 +++ b/arch/x86/include/asm/ptrace.h
 --- a/arch/x86/include/asm/ptrace.h
 +++ b/arch/x86/include/asm/ptrace.h
-@@ -84,28 +84,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs)
+@@ -89,28 +89,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs)
  }
  
  /*
  }
  
  /*
@@ -19369,7 +18700,7 @@ index 6205f0c..688a3a9 100644
  #endif
  }
  
  #endif
  }
  
-@@ -121,15 +122,16 @@ static inline int v8086_mode(struct pt_regs *regs)
+@@ -126,15 +127,16 @@ static inline int v8086_mode(struct pt_regs *regs)
  #ifdef CONFIG_X86_64
  static inline bool user_64bit_mode(struct pt_regs *regs)
  {
  #ifdef CONFIG_X86_64
  static inline bool user_64bit_mode(struct pt_regs *regs)
  {
@@ -19388,7 +18719,7 @@ index 6205f0c..688a3a9 100644
  #endif
  }
  
  #endif
  }
  
-@@ -180,9 +182,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,
+@@ -185,9 +187,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,
         * Traps from the kernel do not save sp and ss.
         * Use the helper function to retrieve sp.
         */
         * Traps from the kernel do not save sp and ss.
         * Use the helper function to retrieve sp.
         */
@@ -19887,7 +19218,7 @@ index 8d3120f..352b440 100644
  
  static __always_inline void clac(void)
 diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
  
  static __always_inline void clac(void)
 diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h
-index 8cd27e0..7f05ec8 100644
+index 8cd1cc3..827e09e 100644
 --- a/arch/x86/include/asm/smp.h
 +++ b/arch/x86/include/asm/smp.h
 @@ -35,7 +35,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
 --- a/arch/x86/include/asm/smp.h
 +++ b/arch/x86/include/asm/smp.h
 @@ -35,7 +35,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
@@ -19908,7 +19239,7 @@ index 8cd27e0..7f05ec8 100644
  
  /* Globals due to paravirt */
  extern void set_cpu_sibling_map(int cpu);
  
  /* Globals due to paravirt */
  extern void set_cpu_sibling_map(int cpu);
-@@ -190,14 +190,8 @@ extern unsigned disabled_cpus;
+@@ -191,14 +191,8 @@ extern unsigned disabled_cpus;
  extern int safe_smp_processor_id(void);
  
  #elif defined(CONFIG_X86_64_SMP)
  extern int safe_smp_processor_id(void);
  
  #elif defined(CONFIG_X86_64_SMP)
@@ -19925,72 +19256,6 @@ index 8cd27e0..7f05ec8 100644
  #define safe_smp_processor_id()               smp_processor_id()
  
  #endif
  #define safe_smp_processor_id()               smp_processor_id()
  
  #endif
-diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
-index 54f1c80..39362a5 100644
---- a/arch/x86/include/asm/spinlock.h
-+++ b/arch/x86/include/asm/spinlock.h
-@@ -223,6 +223,14 @@ static inline int arch_write_can_lock(arch_rwlock_t *lock)
- static inline void arch_read_lock(arch_rwlock_t *rw)
- {
-       asm volatile(LOCK_PREFIX READ_LOCK_SIZE(dec) " (%0)\n\t"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+                   "jno 0f\n"
-+                   LOCK_PREFIX READ_LOCK_SIZE(inc) " (%0)\n"
-+                   "int $4\n0:\n"
-+                   _ASM_EXTABLE(0b, 0b)
-+#endif
-+
-                    "jns 1f\n"
-                    "call __read_lock_failed\n\t"
-                    "1:\n"
-@@ -232,6 +240,14 @@ static inline void arch_read_lock(arch_rwlock_t *rw)
- static inline void arch_write_lock(arch_rwlock_t *rw)
- {
-       asm volatile(LOCK_PREFIX WRITE_LOCK_SUB(%1) "(%0)\n\t"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+                   "jno 0f\n"
-+                   LOCK_PREFIX WRITE_LOCK_ADD(%1) "(%0)\n"
-+                   "int $4\n0:\n"
-+                   _ASM_EXTABLE(0b, 0b)
-+#endif
-+
-                    "jz 1f\n"
-                    "call __write_lock_failed\n\t"
-                    "1:\n"
-@@ -261,13 +277,29 @@ static inline int arch_write_trylock(arch_rwlock_t *lock)
- static inline void arch_read_unlock(arch_rwlock_t *rw)
- {
--      asm volatile(LOCK_PREFIX READ_LOCK_SIZE(inc) " %0"
-+      asm volatile(LOCK_PREFIX READ_LOCK_SIZE(inc) " %0\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+                   "jno 0f\n"
-+                   LOCK_PREFIX READ_LOCK_SIZE(dec) " %0\n"
-+                   "int $4\n0:\n"
-+                   _ASM_EXTABLE(0b, 0b)
-+#endif
-+
-                    :"+m" (rw->lock) : : "memory");
- }
- static inline void arch_write_unlock(arch_rwlock_t *rw)
- {
--      asm volatile(LOCK_PREFIX WRITE_LOCK_ADD(%1) "%0"
-+      asm volatile(LOCK_PREFIX WRITE_LOCK_ADD(%1) "%0\n"
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+                   "jno 0f\n"
-+                   LOCK_PREFIX WRITE_LOCK_SUB(%1) "%0\n"
-+                   "int $4\n0:\n"
-+                   _ASM_EXTABLE(0b, 0b)
-+#endif
-+
-                    : "+m" (rw->write) : "i" (RW_LOCK_BIAS) : "memory");
- }
- #else
 diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h
 index 6a99859..03cb807 100644
 --- a/arch/x86/include/asm/stackprotector.h
 diff --git a/arch/x86/include/asm/stackprotector.h b/arch/x86/include/asm/stackprotector.h
 index 6a99859..03cb807 100644
 --- a/arch/x86/include/asm/stackprotector.h
@@ -20089,7 +19354,7 @@ index d7f3b3b..3cc39f1 100644
               __switch_canary_iparam                                     \
             : "memory", "cc" __EXTRA_CLOBBER)
 diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
               __switch_canary_iparam                                     \
             : "memory", "cc" __EXTRA_CLOBBER)
 diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
-index 8540538..4b0b5e9 100644
+index 547e344..6be1175 100644
 --- a/arch/x86/include/asm/thread_info.h
 +++ b/arch/x86/include/asm/thread_info.h
 @@ -24,7 +24,6 @@ struct exec_domain;
 --- a/arch/x86/include/asm/thread_info.h
 +++ b/arch/x86/include/asm/thread_info.h
 @@ -24,7 +24,6 @@ struct exec_domain;
@@ -21288,10 +20553,10 @@ index 7e7a79a..0824666 100644
  }
  
 diff --git a/arch/x86/include/uapi/asm/e820.h b/arch/x86/include/uapi/asm/e820.h
  }
  
 diff --git a/arch/x86/include/uapi/asm/e820.h b/arch/x86/include/uapi/asm/e820.h
-index bbae024..e1528f9 100644
+index d993e33..8db1b18 100644
 --- a/arch/x86/include/uapi/asm/e820.h
 +++ b/arch/x86/include/uapi/asm/e820.h
 --- a/arch/x86/include/uapi/asm/e820.h
 +++ b/arch/x86/include/uapi/asm/e820.h
-@@ -63,7 +63,7 @@ struct e820map {
+@@ -58,7 +58,7 @@ struct e820map {
  #define ISA_START_ADDRESS     0xa0000
  #define ISA_END_ADDRESS               0x100000
  
  #define ISA_START_ADDRESS     0xa0000
  #define ISA_END_ADDRESS               0x100000
  
@@ -21313,7 +20578,7 @@ index 7b0a55a..ad115bf 100644
  
  /* top of stack page */
 diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
  
  /* top of stack page */
 diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
-index ada2e2d..ca69e16 100644
+index 8f1e774..9b4c381 100644
 --- a/arch/x86/kernel/Makefile
 +++ b/arch/x86/kernel/Makefile
 @@ -24,7 +24,7 @@ obj-y                        += time.o ioport.o ldt.o dumpstack.o nmi.o
 --- a/arch/x86/kernel/Makefile
 +++ b/arch/x86/kernel/Makefile
 @@ -24,7 +24,7 @@ obj-y                        += time.o ioport.o ldt.o dumpstack.o nmi.o
@@ -21552,7 +20817,7 @@ index 703130f..27a155d 100644
        bp_int3_handler = handler;
        bp_int3_addr = (u8 *)addr + sizeof(int3);
 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
        bp_int3_handler = handler;
        bp_int3_addr = (u8 *)addr + sizeof(int3);
 diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
-index 24b5894..6d9701b 100644
+index ba6cc04..06fd971 100644
 --- a/arch/x86/kernel/apic/apic.c
 +++ b/arch/x86/kernel/apic/apic.c
 @@ -201,7 +201,7 @@ int first_system_vector = 0xfe;
 --- a/arch/x86/kernel/apic/apic.c
 +++ b/arch/x86/kernel/apic/apic.c
 @@ -201,7 +201,7 @@ int first_system_vector = 0xfe;
@@ -21622,7 +20887,7 @@ index c4a8d63..fe893ac 100644
        .name                           = "bigsmp",
        .probe                          = probe_bigsmp,
 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
        .name                           = "bigsmp",
        .probe                          = probe_bigsmp,
 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
-index 337ce5a..c8d98b4 100644
+index 1183d54..6158e47 100644
 --- a/arch/x86/kernel/apic/io_apic.c
 +++ b/arch/x86/kernel/apic/io_apic.c
 @@ -1230,7 +1230,7 @@ out:
 --- a/arch/x86/kernel/apic/io_apic.c
 +++ b/arch/x86/kernel/apic/io_apic.c
 @@ -1230,7 +1230,7 @@ out:
@@ -21675,7 +20940,7 @@ index bda4886..f9c7195 100644
        .name                           = "default",
        .probe                          = probe_default,
 diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
        .name                           = "default",
        .probe                          = probe_default,
 diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
-index 6ce600f..cb44af8 100644
+index e658f21..b695a1a 100644
 --- a/arch/x86/kernel/apic/x2apic_cluster.c
 +++ b/arch/x86/kernel/apic/x2apic_cluster.c
 @@ -182,7 +182,7 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
 --- a/arch/x86/kernel/apic/x2apic_cluster.c
 +++ b/arch/x86/kernel/apic/x2apic_cluster.c
 @@ -182,7 +182,7 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
@@ -21710,10 +20975,10 @@ index 6fae733..5ca17af 100644
        .name                           = "physical x2apic",
        .probe                          = x2apic_phys_probe,
 diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
        .name                           = "physical x2apic",
        .probe                          = x2apic_phys_probe,
 diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
-index 004f017..8fbc8b5 100644
+index 8e9dcfd..c61b3e4 100644
 --- a/arch/x86/kernel/apic/x2apic_uv_x.c
 +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
 --- a/arch/x86/kernel/apic/x2apic_uv_x.c
 +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
-@@ -350,7 +350,7 @@ static int uv_probe(void)
+@@ -348,7 +348,7 @@ static int uv_probe(void)
        return apic == &apic_x2apic_uv_x;
  }
  
        return apic == &apic_x2apic_uv_x;
  }
  
@@ -21850,7 +21115,7 @@ index e7c798b..2b2019b 100644
        BLANK();
  
 diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
        BLANK();
  
 diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
-index 7fd54f0..0691410 100644
+index e27b49d..85b106c 100644
 --- a/arch/x86/kernel/cpu/Makefile
 +++ b/arch/x86/kernel/cpu/Makefile
 @@ -8,10 +8,6 @@ CFLAGS_REMOVE_common.o = -pg
 --- a/arch/x86/kernel/cpu/Makefile
 +++ b/arch/x86/kernel/cpu/Makefile
 @@ -8,10 +8,6 @@ CFLAGS_REMOVE_common.o = -pg
@@ -21862,13 +21127,13 @@ index 7fd54f0..0691410 100644
 -CFLAGS_common.o               := $(nostackp)
 -
  obj-y                 := intel_cacheinfo.o scattered.o topology.o
 -CFLAGS_common.o               := $(nostackp)
 -
  obj-y                 := intel_cacheinfo.o scattered.o topology.o
- obj-y                 += proc.o capflags.o powerflags.o common.o
+ obj-y                 += common.o
  obj-y                 += rdrand.o
 diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
  obj-y                 += rdrand.o
 diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
-index 60e5497..8efbd2f 100644
+index 813d29d..6e542d4 100644
 --- a/arch/x86/kernel/cpu/amd.c
 +++ b/arch/x86/kernel/cpu/amd.c
 --- a/arch/x86/kernel/cpu/amd.c
 +++ b/arch/x86/kernel/cpu/amd.c
-@@ -711,7 +711,7 @@ static void init_amd(struct cpuinfo_x86 *c)
+@@ -718,7 +718,7 @@ static void init_amd(struct cpuinfo_x86 *c)
  static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
  {
        /* AMD errata T13 (order #21922) */
  static unsigned int amd_size_cache(struct cpuinfo_x86 *c, unsigned int size)
  {
        /* AMD errata T13 (order #21922) */
@@ -21878,7 +21143,7 @@ index 60e5497..8efbd2f 100644
                if (c->x86_model == 3 && c->x86_mask == 0)
                        size = 64;
 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
                if (c->x86_model == 3 && c->x86_mask == 0)
                        size = 64;
 diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
-index 3126558..a1028f6 100644
+index cfa9b5b..19b5084 100644
 --- a/arch/x86/kernel/cpu/common.c
 +++ b/arch/x86/kernel/cpu/common.c
 @@ -90,60 +90,6 @@ static const struct cpu_dev default_cpu = {
 --- a/arch/x86/kernel/cpu/common.c
 +++ b/arch/x86/kernel/cpu/common.c
 @@ -90,60 +90,6 @@ static const struct cpu_dev default_cpu = {
@@ -21941,8 +21206,8 @@ index 3126558..a1028f6 100644
 -
  static int __init x86_xsave_setup(char *s)
  {
 -
  static int __init x86_xsave_setup(char *s)
  {
-       setup_clear_cpu_cap(X86_FEATURE_XSAVE);
-@@ -303,6 +249,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
+       if (strlen(s))
+@@ -305,6 +251,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
        }
  }
  
        }
  }
  
@@ -22002,7 +21267,7 @@ index 3126558..a1028f6 100644
  /*
   * Some CPU features depend on higher CPUID levels, which may not always
   * be available due to CPUID level capping or broken virtualization
  /*
   * Some CPU features depend on higher CPUID levels, which may not always
   * be available due to CPUID level capping or broken virtualization
-@@ -403,7 +402,7 @@ void switch_to_new_gdt(int cpu)
+@@ -405,7 +404,7 @@ void switch_to_new_gdt(int cpu)
  {
        struct desc_ptr gdt_descr;
  
  {
        struct desc_ptr gdt_descr;
  
@@ -22011,7 +21276,7 @@ index 3126558..a1028f6 100644
        gdt_descr.size = GDT_SIZE - 1;
        load_gdt(&gdt_descr);
        /* Reload the per-cpu base */
        gdt_descr.size = GDT_SIZE - 1;
        load_gdt(&gdt_descr);
        /* Reload the per-cpu base */
-@@ -893,6 +892,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -895,6 +894,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
        setup_smep(c);
        setup_smap(c);
  
        setup_smep(c);
        setup_smap(c);
  
@@ -22022,7 +21287,7 @@ index 3126558..a1028f6 100644
        /*
         * The vendor-specific functions might have changed features.
         * Now we do "generic changes."
        /*
         * The vendor-specific functions might have changed features.
         * Now we do "generic changes."
-@@ -901,6 +904,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -903,6 +906,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
        /* Filter out anything that depends on CPUID levels we don't have */
        filter_cpuid_features(c, true);
  
        /* Filter out anything that depends on CPUID levels we don't have */
        filter_cpuid_features(c, true);
  
@@ -22033,7 +21298,7 @@ index 3126558..a1028f6 100644
        /* If the model name is still unset, do table lookup. */
        if (!c->x86_model_id[0]) {
                const char *p;
        /* If the model name is still unset, do table lookup. */
        if (!c->x86_model_id[0]) {
                const char *p;
-@@ -981,7 +988,7 @@ static void syscall32_cpu_init(void)
+@@ -985,7 +992,7 @@ static void syscall32_cpu_init(void)
  void enable_sep_cpu(void)
  {
        int cpu = get_cpu();
  void enable_sep_cpu(void)
  {
        int cpu = get_cpu();
@@ -22042,7 +21307,7 @@ index 3126558..a1028f6 100644
  
        if (!boot_cpu_has(X86_FEATURE_SEP)) {
                put_cpu();
  
        if (!boot_cpu_has(X86_FEATURE_SEP)) {
                put_cpu();
-@@ -1121,14 +1128,16 @@ static __init int setup_disablecpuid(char *arg)
+@@ -1125,14 +1132,16 @@ static __init int setup_disablecpuid(char *arg)
  }
  __setup("clearcpuid=", setup_disablecpuid);
  
  }
  __setup("clearcpuid=", setup_disablecpuid);
  
@@ -22063,16 +21328,16 @@ index 3126558..a1028f6 100644
  
  DEFINE_PER_CPU_FIRST(union irq_stack_union,
                     irq_stack_union) __aligned(PAGE_SIZE) __visible;
  
  DEFINE_PER_CPU_FIRST(union irq_stack_union,
                     irq_stack_union) __aligned(PAGE_SIZE) __visible;
-@@ -1291,7 +1300,7 @@ void cpu_init(void)
+@@ -1309,7 +1318,7 @@ void cpu_init(void)
+        */
        load_ucode_ap();
  
        load_ucode_ap();
  
-       cpu = stack_smp_processor_id();
 -      t = &per_cpu(init_tss, cpu);
 +      t = init_tss + cpu;
        oist = &per_cpu(orig_ist, cpu);
  
  #ifdef CONFIG_NUMA
 -      t = &per_cpu(init_tss, cpu);
 +      t = init_tss + cpu;
        oist = &per_cpu(orig_ist, cpu);
  
  #ifdef CONFIG_NUMA
-@@ -1326,7 +1335,6 @@ void cpu_init(void)
+@@ -1341,7 +1350,6 @@ void cpu_init(void)
        wrmsrl(MSR_KERNEL_GS_BASE, 0);
        barrier();
  
        wrmsrl(MSR_KERNEL_GS_BASE, 0);
        barrier();
  
@@ -22080,7 +21345,7 @@ index 3126558..a1028f6 100644
        enable_x2apic();
  
        /*
        enable_x2apic();
  
        /*
-@@ -1378,7 +1386,7 @@ void cpu_init(void)
+@@ -1393,7 +1401,7 @@ void cpu_init(void)
  {
        int cpu = smp_processor_id();
        struct task_struct *curr = current;
  {
        int cpu = smp_processor_id();
        struct task_struct *curr = current;
@@ -22088,7 +21353,7 @@ index 3126558..a1028f6 100644
 +      struct tss_struct *t = init_tss + cpu;
        struct thread_struct *thread = &curr->thread;
  
 +      struct tss_struct *t = init_tss + cpu;
        struct thread_struct *thread = &curr->thread;
  
-       show_ucode_info_early();
+       wait_for_master_cpu(cpu);
 diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
 index c703507..28535e3 100644
 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c
 diff --git a/arch/x86/kernel/cpu/intel_cacheinfo.c b/arch/x86/kernel/cpu/intel_cacheinfo.c
 index c703507..28535e3 100644
 --- a/arch/x86/kernel/cpu/intel_cacheinfo.c
@@ -22181,7 +21446,7 @@ index c703507..28535e3 100644
                                              "index%1lu", i);
                if (unlikely(retval)) {
 diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
                                              "index%1lu", i);
                if (unlikely(retval)) {
 diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
-index bd9ccda..38314e7 100644
+index 61a9668ce..b446a37 100644
 --- a/arch/x86/kernel/cpu/mcheck/mce.c
 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
 @@ -45,6 +45,7 @@
 --- a/arch/x86/kernel/cpu/mcheck/mce.c
 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
 @@ -45,6 +45,7 @@
@@ -22368,10 +21633,10 @@ index 7dc5564..1273569 100644
        wmb();
  
 diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
        wmb();
  
 diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
-index dd9d619..86e1d81 100644
+index 15c2909..2cef20c 100644
 --- a/arch/x86/kernel/cpu/microcode/core.c
 +++ b/arch/x86/kernel/cpu/microcode/core.c
 --- a/arch/x86/kernel/cpu/microcode/core.c
 +++ b/arch/x86/kernel/cpu/microcode/core.c
-@@ -516,7 +516,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu)
+@@ -518,7 +518,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu)
        return NOTIFY_OK;
  }
  
        return NOTIFY_OK;
  }
  
@@ -22381,7 +21646,7 @@ index dd9d619..86e1d81 100644
  };
  
 diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
  };
  
 diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
-index a276fa7..e66810f 100644
+index c6826d1..ad18e14a 100644
 --- a/arch/x86/kernel/cpu/microcode/intel.c
 +++ b/arch/x86/kernel/cpu/microcode/intel.c
 @@ -293,13 +293,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
 --- a/arch/x86/kernel/cpu/microcode/intel.c
 +++ b/arch/x86/kernel/cpu/microcode/intel.c
 @@ -293,13 +293,13 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
@@ -22401,7 +21666,7 @@ index a276fa7..e66810f 100644
  
  static void microcode_fini_cpu(int cpu)
 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
  
  static void microcode_fini_cpu(int cpu)
 diff --git a/arch/x86/kernel/cpu/mtrr/main.c b/arch/x86/kernel/cpu/mtrr/main.c
-index f961de9..8a9d332 100644
+index ea5f363..cb0e905 100644
 --- a/arch/x86/kernel/cpu/mtrr/main.c
 +++ b/arch/x86/kernel/cpu/mtrr/main.c
 @@ -66,7 +66,7 @@ static DEFINE_MUTEX(mtrr_mutex);
 --- a/arch/x86/kernel/cpu/mtrr/main.c
 +++ b/arch/x86/kernel/cpu/mtrr/main.c
 @@ -66,7 +66,7 @@ static DEFINE_MUTEX(mtrr_mutex);
@@ -22427,10 +21692,10 @@ index df5e41f..816c719 100644
  extern int generic_get_free_region(unsigned long base, unsigned long size,
                                   int replace_reg);
 diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
  extern int generic_get_free_region(unsigned long base, unsigned long size,
                                   int replace_reg);
 diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c
-index 2879ecd..bb8c80b 100644
+index 143e5f5..5825081 100644
 --- a/arch/x86/kernel/cpu/perf_event.c
 +++ b/arch/x86/kernel/cpu/perf_event.c
 --- a/arch/x86/kernel/cpu/perf_event.c
 +++ b/arch/x86/kernel/cpu/perf_event.c
-@@ -1372,7 +1372,7 @@ static void __init pmu_check_apic(void)
+@@ -1374,7 +1374,7 @@ static void __init pmu_check_apic(void)
  
  }
  
  
  }
  
@@ -22439,7 +21704,7 @@ index 2879ecd..bb8c80b 100644
        .name = "format",
        .attrs = NULL,
  };
        .name = "format",
        .attrs = NULL,
  };
-@@ -1471,7 +1471,7 @@ static struct attribute *events_attr[] = {
+@@ -1473,7 +1473,7 @@ static struct attribute *events_attr[] = {
        NULL,
  };
  
        NULL,
  };
  
@@ -22448,16 +21713,16 @@ index 2879ecd..bb8c80b 100644
        .name = "events",
        .attrs = events_attr,
  };
        .name = "events",
        .attrs = events_attr,
  };
-@@ -1995,7 +1995,7 @@ static unsigned long get_segment_base(unsigned int segment)
+@@ -1997,7 +1997,7 @@ static unsigned long get_segment_base(unsigned int segment)
                if (idx > GDT_ENTRIES)
                        return 0;
  
                if (idx > GDT_ENTRIES)
                        return 0;
  
--              desc = __this_cpu_ptr(&gdt_page.gdt[0]);
+-              desc = raw_cpu_ptr(gdt_page.gdt);
 +              desc = get_cpu_gdt_table(smp_processor_id());
        }
  
        return get_desc_base(desc + idx);
 +              desc = get_cpu_gdt_table(smp_processor_id());
        }
  
        return get_desc_base(desc + idx);
-@@ -2085,7 +2085,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
+@@ -2087,7 +2087,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
                        break;
  
                perf_callchain_store(entry, frame.return_address);
                        break;
  
                perf_callchain_store(entry, frame.return_address);
@@ -22480,7 +21745,7 @@ index 639d128..e92d7e5 100644
  
        while (amd_iommu_v2_event_descs[i].attr.attr.name)
 diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
  
        while (amd_iommu_v2_event_descs[i].attr.attr.name)
 diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
-index 2502d0d..e5cc05c 100644
+index 944bf01..4a4392f 100644
 --- a/arch/x86/kernel/cpu/perf_event_intel.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel.c
 @@ -2353,10 +2353,10 @@ __init int intel_pmu_init(void)
 --- a/arch/x86/kernel/cpu/perf_event_intel.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel.c
 @@ -2353,10 +2353,10 @@ __init int intel_pmu_init(void)
@@ -22498,7 +21763,7 @@ index 2502d0d..e5cc05c 100644
  
        intel_ds_init();
 diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
  
        intel_ds_init();
 diff --git a/arch/x86/kernel/cpu/perf_event_intel_rapl.c b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
-index 619f769..d510008 100644
+index d64f275..26522ff 100644
 --- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
 @@ -449,7 +449,7 @@ static struct attribute *rapl_events_hsw_attr[] = {
 --- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
 @@ -449,7 +449,7 @@ static struct attribute *rapl_events_hsw_attr[] = {
@@ -22511,10 +21776,10 @@ index 619f769..d510008 100644
        .attrs = NULL, /* patched at runtime */
  };
 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
        .attrs = NULL, /* patched at runtime */
  };
 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.c b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
-index 0939f86..69730af 100644
+index 9762dbd..53d5d21 100644
 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
-@@ -3691,7 +3691,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types)
+@@ -721,7 +721,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types)
  static int __init uncore_type_init(struct intel_uncore_type *type)
  {
        struct intel_uncore_pmu *pmus;
  static int __init uncore_type_init(struct intel_uncore_type *type)
  {
        struct intel_uncore_pmu *pmus;
@@ -22524,18 +21789,18 @@ index 0939f86..69730af 100644
        int i, j;
  
 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
        int i, j;
  
 diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore.h b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
-index 90236f0..54cb20d 100644
+index 18eb78b..18747cc 100644
 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h
 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.h
 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.h
-@@ -503,7 +503,7 @@ struct intel_uncore_box {
+@@ -114,7 +114,7 @@ struct intel_uncore_box {
  struct uncore_event_desc {
        struct kobj_attribute attr;
        const char *config;
 -};
 +} __do_const;
  
  struct uncore_event_desc {
        struct kobj_attribute attr;
        const char *config;
 -};
 +} __do_const;
  
- #define INTEL_UNCORE_EVENT_DESC(_name, _config)                       \
- {                                                             \
+ ssize_t uncore_event_show(struct kobject *kobj,
+                         struct kobj_attribute *attr, char *buf);
 diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c
 index 3225ae6c..ee3c6db 100644
 --- a/arch/x86/kernel/cpuid.c
 diff --git a/arch/x86/kernel/cpuid.c b/arch/x86/kernel/cpuid.c
 index 3225ae6c..ee3c6db 100644
 --- a/arch/x86/kernel/cpuid.c
@@ -22550,7 +21815,7 @@ index 3225ae6c..ee3c6db 100644
        .notifier_call = cpuid_class_cpu_callback,
  };
 diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
        .notifier_call = cpuid_class_cpu_callback,
  };
 diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
-index a618fcd..200e95b 100644
+index f5ab56d..d3b201a 100644
 --- a/arch/x86/kernel/crash.c
 +++ b/arch/x86/kernel/crash.c
 @@ -104,7 +104,7 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
 --- a/arch/x86/kernel/crash.c
 +++ b/arch/x86/kernel/crash.c
 @@ -104,7 +104,7 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
@@ -22861,10 +22126,10 @@ index 5abd4cd..c65733b 100644
 +EXPORT_SYMBOL(pax_check_alloca);
 +#endif
 diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
 +EXPORT_SYMBOL(pax_check_alloca);
 +#endif
 diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c
-index 1abcb50..6c8d702 100644
+index ff86f19..a20c62c 100644
 --- a/arch/x86/kernel/dumpstack_64.c
 +++ b/arch/x86/kernel/dumpstack_64.c
 --- a/arch/x86/kernel/dumpstack_64.c
 +++ b/arch/x86/kernel/dumpstack_64.c
-@@ -154,12 +154,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -153,12 +153,12 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
                const struct stacktrace_ops *ops, void *data)
  {
        const unsigned cpu = get_cpu();
                const struct stacktrace_ops *ops, void *data)
  {
        const unsigned cpu = get_cpu();
@@ -22878,7 +22143,7 @@ index 1abcb50..6c8d702 100644
  
        if (!task)
                task = current;
  
        if (!task)
                task = current;
-@@ -180,7 +180,6 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -179,7 +179,6 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
         * current stack address. If the stacks consist of nested
         * exceptions
         */
         * current stack address. If the stacks consist of nested
         * exceptions
         */
@@ -22886,7 +22151,7 @@ index 1abcb50..6c8d702 100644
        while (!done) {
                unsigned long *stack_end;
                enum stack_type stype;
        while (!done) {
                unsigned long *stack_end;
                enum stack_type stype;
-@@ -203,7 +202,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -202,7 +201,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
                        if (ops->stack(data, id) < 0)
                                break;
  
                        if (ops->stack(data, id) < 0)
                                break;
  
@@ -22895,7 +22160,7 @@ index 1abcb50..6c8d702 100644
                                             data, stack_end, &graph);
                        ops->stack(data, "<EOE>");
                        /*
                                             data, stack_end, &graph);
                        ops->stack(data, "<EOE>");
                        /*
-@@ -211,6 +210,8 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -210,6 +209,8 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
                         * second-to-last pointer (index -2 to end) in the
                         * exception stack:
                         */
                         * second-to-last pointer (index -2 to end) in the
                         * exception stack:
                         */
@@ -22904,7 +22169,7 @@ index 1abcb50..6c8d702 100644
                        stack = (unsigned long *) stack_end[-2];
                        done = 0;
                        break;
                        stack = (unsigned long *) stack_end[-2];
                        done = 0;
                        break;
-@@ -219,7 +220,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -218,7 +219,7 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
  
                        if (ops->stack(data, "IRQ") < 0)
                                break;
  
                        if (ops->stack(data, "IRQ") < 0)
                                break;
@@ -22913,7 +22178,7 @@ index 1abcb50..6c8d702 100644
                                     ops, data, stack_end, &graph);
                        /*
                         * We link to the next stack (which would be
                                     ops, data, stack_end, &graph);
                        /*
                         * We link to the next stack (which would be
-@@ -241,7 +242,9 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
+@@ -240,7 +241,9 @@ void dump_trace(struct task_struct *task, struct pt_regs *regs,
        /*
         * This handles the process stack:
         */
        /*
         * This handles the process stack:
         */
@@ -22924,7 +22189,7 @@ index 1abcb50..6c8d702 100644
        put_cpu();
  }
  EXPORT_SYMBOL(dump_trace);
        put_cpu();
  }
  EXPORT_SYMBOL(dump_trace);
-@@ -350,3 +353,50 @@ int is_valid_bugaddr(unsigned long ip)
+@@ -349,3 +352,50 @@ int is_valid_bugaddr(unsigned long ip)
  
        return ud2 == 0x0b0f;
  }
  
        return ud2 == 0x0b0f;
  }
@@ -22976,10 +22241,10 @@ index 1abcb50..6c8d702 100644
 +EXPORT_SYMBOL(pax_check_alloca);
 +#endif
 diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
 +EXPORT_SYMBOL(pax_check_alloca);
 +#endif
 diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
-index 988c00a..4f673b6 100644
+index 49f8864..1cc6d07 100644
 --- a/arch/x86/kernel/e820.c
 +++ b/arch/x86/kernel/e820.c
 --- a/arch/x86/kernel/e820.c
 +++ b/arch/x86/kernel/e820.c
-@@ -803,8 +803,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void)
+@@ -802,8 +802,8 @@ unsigned long __init e820_end_of_low_ram_pfn(void)
  
  static void early_panic(char *msg)
  {
  
  static void early_panic(char *msg)
  {
@@ -23003,7 +22268,7 @@ index 01d1c18..8073693 100644
  #include <asm/processor.h>
  #include <asm/fcntl.h>
 diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
  #include <asm/processor.h>
  #include <asm/fcntl.h>
 diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S
-index 4b0e1df..884b67e 100644
+index 344b63f..ccdac7a 100644
 --- a/arch/x86/kernel/entry_32.S
 +++ b/arch/x86/kernel/entry_32.S
 @@ -177,13 +177,153 @@
 --- a/arch/x86/kernel/entry_32.S
 +++ b/arch/x86/kernel/entry_32.S
 @@ -177,13 +177,153 @@
@@ -23305,17 +22570,17 @@ index 4b0e1df..884b67e 100644
        PTGS_TO_GS
        ENABLE_INTERRUPTS_SYSEXIT
  
        PTGS_TO_GS
        ENABLE_INTERRUPTS_SYSEXIT
  
-@@ -456,6 +640,9 @@ sysenter_audit:
-       movl %eax,%edx                  /* 2nd arg: syscall number */
-       movl $AUDIT_ARCH_I386,%eax      /* 1st arg: audit arch */
+@@ -453,6 +637,9 @@ sysenter_audit:
+       pushl_cfi PT_ESI(%esp)          /* a3: 5th arg */
+       pushl_cfi PT_EDX+4(%esp)        /* a2: 4th arg */
        call __audit_syscall_entry
 +
 +      pax_erase_kstack
 +
        call __audit_syscall_entry
 +
 +      pax_erase_kstack
 +
-       pushl_cfi %ebx
+       popl_cfi %ecx /* get that remapped edx off the stack */
+       popl_cfi %ecx /* get that remapped esi off the stack */
        movl PT_EAX(%esp),%eax          /* reload syscall number */
        movl PT_EAX(%esp),%eax          /* reload syscall number */
-       jmp sysenter_do_call
-@@ -481,10 +668,16 @@ sysexit_audit:
+@@ -479,10 +666,16 @@ sysexit_audit:
  
        CFI_ENDPROC
  .pushsection .fixup,"ax"
  
        CFI_ENDPROC
  .pushsection .fixup,"ax"
@@ -23334,7 +22599,7 @@ index 4b0e1df..884b67e 100644
        PTGS_TO_GS_EX
  ENDPROC(ia32_sysenter_target)
  
        PTGS_TO_GS_EX
  ENDPROC(ia32_sysenter_target)
  
-@@ -495,6 +688,11 @@ ENTRY(system_call)
+@@ -493,6 +686,11 @@ ENTRY(system_call)
        pushl_cfi %eax                  # save orig_eax
        SAVE_ALL
        GET_THREAD_INFO(%ebp)
        pushl_cfi %eax                  # save orig_eax
        SAVE_ALL
        GET_THREAD_INFO(%ebp)
@@ -23346,7 +22611,7 @@ index 4b0e1df..884b67e 100644
                                        # system call tracing in operation / emulation
        testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
        jnz syscall_trace_entry
                                        # system call tracing in operation / emulation
        testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags(%ebp)
        jnz syscall_trace_entry
-@@ -514,6 +712,15 @@ syscall_exit:
+@@ -512,6 +710,15 @@ syscall_exit:
        testl $_TIF_ALLWORK_MASK, %ecx  # current->work
        jne syscall_exit_work
  
        testl $_TIF_ALLWORK_MASK, %ecx  # current->work
        jne syscall_exit_work
  
@@ -23362,7 +22627,7 @@ index 4b0e1df..884b67e 100644
  restore_all:
        TRACE_IRQS_IRET
  restore_all_notrace:
  restore_all:
        TRACE_IRQS_IRET
  restore_all_notrace:
-@@ -568,14 +775,34 @@ ldt_ss:
+@@ -566,14 +773,34 @@ ldt_ss:
   * compensating for the offset by changing to the ESPFIX segment with
   * a base address that matches for the difference.
   */
   * compensating for the offset by changing to the ESPFIX segment with
   * a base address that matches for the difference.
   */
@@ -23400,7 +22665,7 @@ index 4b0e1df..884b67e 100644
        pushl_cfi $__ESPFIX_SS
        pushl_cfi %eax                  /* new kernel esp */
        /* Disable interrupts, but do not irqtrace this section: we
        pushl_cfi $__ESPFIX_SS
        pushl_cfi %eax                  /* new kernel esp */
        /* Disable interrupts, but do not irqtrace this section: we
-@@ -605,20 +832,18 @@ work_resched:
+@@ -603,20 +830,18 @@ work_resched:
        movl TI_flags(%ebp), %ecx
        andl $_TIF_WORK_MASK, %ecx      # is there any work to be done other
                                        # than syscall tracing?
        movl TI_flags(%ebp), %ecx
        andl $_TIF_WORK_MASK, %ecx      # is there any work to be done other
                                        # than syscall tracing?
@@ -23423,7 +22688,7 @@ index 4b0e1df..884b67e 100644
  #endif
        TRACE_IRQS_ON
        ENABLE_INTERRUPTS(CLBR_NONE)
  #endif
        TRACE_IRQS_ON
        ENABLE_INTERRUPTS(CLBR_NONE)
-@@ -639,7 +864,7 @@ work_notifysig_v86:
+@@ -637,7 +862,7 @@ work_notifysig_v86:
        movl %eax, %esp
        jmp 1b
  #endif
        movl %eax, %esp
        jmp 1b
  #endif
@@ -23432,7 +22697,7 @@ index 4b0e1df..884b67e 100644
  
        # perform syscall exit tracing
        ALIGN
  
        # perform syscall exit tracing
        ALIGN
-@@ -647,11 +872,14 @@ syscall_trace_entry:
+@@ -645,11 +870,14 @@ syscall_trace_entry:
        movl $-ENOSYS,PT_EAX(%esp)
        movl %esp, %eax
        call syscall_trace_enter
        movl $-ENOSYS,PT_EAX(%esp)
        movl %esp, %eax
        call syscall_trace_enter
@@ -23448,7 +22713,7 @@ index 4b0e1df..884b67e 100644
  
        # perform syscall exit tracing
        ALIGN
  
        # perform syscall exit tracing
        ALIGN
-@@ -664,26 +892,30 @@ syscall_exit_work:
+@@ -662,26 +890,30 @@ syscall_exit_work:
        movl %esp, %eax
        call syscall_trace_leave
        jmp resume_userspace
        movl %esp, %eax
        call syscall_trace_leave
        jmp resume_userspace
@@ -23483,7 +22748,7 @@ index 4b0e1df..884b67e 100644
        CFI_ENDPROC
  
  .macro FIXUP_ESPFIX_STACK
        CFI_ENDPROC
  
  .macro FIXUP_ESPFIX_STACK
-@@ -696,8 +928,15 @@ END(sysenter_badsys)
+@@ -694,8 +926,15 @@ END(sysenter_badsys)
   */
  #ifdef CONFIG_X86_ESPFIX32
        /* fixup the stack */
   */
  #ifdef CONFIG_X86_ESPFIX32
        /* fixup the stack */
@@ -23501,7 +22766,7 @@ index 4b0e1df..884b67e 100644
        shl $16, %eax
        addl %esp, %eax                 /* the adjusted stack pointer */
        pushl_cfi $__KERNEL_DS
        shl $16, %eax
        addl %esp, %eax                 /* the adjusted stack pointer */
        pushl_cfi $__KERNEL_DS
-@@ -753,7 +992,7 @@ vector=vector+1
+@@ -751,7 +990,7 @@ vector=vector+1
    .endr
  2:    jmp common_interrupt
  .endr
    .endr
  2:    jmp common_interrupt
  .endr
@@ -23510,7 +22775,7 @@ index 4b0e1df..884b67e 100644
  
  .previous
  END(interrupt)
  
  .previous
  END(interrupt)
-@@ -810,7 +1049,7 @@ ENTRY(coprocessor_error)
+@@ -808,7 +1047,7 @@ ENTRY(coprocessor_error)
        pushl_cfi $do_coprocessor_error
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_coprocessor_error
        jmp error_code
        CFI_ENDPROC
@@ -23519,7 +22784,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(simd_coprocessor_error)
        RING0_INT_FRAME
  
  ENTRY(simd_coprocessor_error)
        RING0_INT_FRAME
-@@ -823,7 +1062,7 @@ ENTRY(simd_coprocessor_error)
+@@ -821,7 +1060,7 @@ ENTRY(simd_coprocessor_error)
  .section .altinstructions,"a"
        altinstruction_entry 661b, 663f, X86_FEATURE_XMM, 662b-661b, 664f-663f
  .previous
  .section .altinstructions,"a"
        altinstruction_entry 661b, 663f, X86_FEATURE_XMM, 662b-661b, 664f-663f
  .previous
@@ -23528,7 +22793,7 @@ index 4b0e1df..884b67e 100644
  663:  pushl $do_simd_coprocessor_error
  664:
  .previous
  663:  pushl $do_simd_coprocessor_error
  664:
  .previous
-@@ -832,7 +1071,7 @@ ENTRY(simd_coprocessor_error)
+@@ -830,7 +1069,7 @@ ENTRY(simd_coprocessor_error)
  #endif
        jmp error_code
        CFI_ENDPROC
  #endif
        jmp error_code
        CFI_ENDPROC
@@ -23537,7 +22802,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(device_not_available)
        RING0_INT_FRAME
  
  ENTRY(device_not_available)
        RING0_INT_FRAME
-@@ -841,18 +1080,18 @@ ENTRY(device_not_available)
+@@ -839,18 +1078,18 @@ ENTRY(device_not_available)
        pushl_cfi $do_device_not_available
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_device_not_available
        jmp error_code
        CFI_ENDPROC
@@ -23559,7 +22824,7 @@ index 4b0e1df..884b67e 100644
  #endif
  
  ENTRY(overflow)
  #endif
  
  ENTRY(overflow)
-@@ -862,7 +1101,7 @@ ENTRY(overflow)
+@@ -860,7 +1099,7 @@ ENTRY(overflow)
        pushl_cfi $do_overflow
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_overflow
        jmp error_code
        CFI_ENDPROC
@@ -23568,7 +22833,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(bounds)
        RING0_INT_FRAME
  
  ENTRY(bounds)
        RING0_INT_FRAME
-@@ -871,7 +1110,7 @@ ENTRY(bounds)
+@@ -869,7 +1108,7 @@ ENTRY(bounds)
        pushl_cfi $do_bounds
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_bounds
        jmp error_code
        CFI_ENDPROC
@@ -23577,7 +22842,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(invalid_op)
        RING0_INT_FRAME
  
  ENTRY(invalid_op)
        RING0_INT_FRAME
-@@ -880,7 +1119,7 @@ ENTRY(invalid_op)
+@@ -878,7 +1117,7 @@ ENTRY(invalid_op)
        pushl_cfi $do_invalid_op
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_invalid_op
        jmp error_code
        CFI_ENDPROC
@@ -23586,7 +22851,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(coprocessor_segment_overrun)
        RING0_INT_FRAME
  
  ENTRY(coprocessor_segment_overrun)
        RING0_INT_FRAME
-@@ -889,7 +1128,7 @@ ENTRY(coprocessor_segment_overrun)
+@@ -887,7 +1126,7 @@ ENTRY(coprocessor_segment_overrun)
        pushl_cfi $do_coprocessor_segment_overrun
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_coprocessor_segment_overrun
        jmp error_code
        CFI_ENDPROC
@@ -23595,7 +22860,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(invalid_TSS)
        RING0_EC_FRAME
  
  ENTRY(invalid_TSS)
        RING0_EC_FRAME
-@@ -897,7 +1136,7 @@ ENTRY(invalid_TSS)
+@@ -895,7 +1134,7 @@ ENTRY(invalid_TSS)
        pushl_cfi $do_invalid_TSS
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_invalid_TSS
        jmp error_code
        CFI_ENDPROC
@@ -23604,7 +22869,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(segment_not_present)
        RING0_EC_FRAME
  
  ENTRY(segment_not_present)
        RING0_EC_FRAME
-@@ -905,7 +1144,7 @@ ENTRY(segment_not_present)
+@@ -903,7 +1142,7 @@ ENTRY(segment_not_present)
        pushl_cfi $do_segment_not_present
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_segment_not_present
        jmp error_code
        CFI_ENDPROC
@@ -23613,7 +22878,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(stack_segment)
        RING0_EC_FRAME
  
  ENTRY(stack_segment)
        RING0_EC_FRAME
-@@ -913,7 +1152,7 @@ ENTRY(stack_segment)
+@@ -911,7 +1150,7 @@ ENTRY(stack_segment)
        pushl_cfi $do_stack_segment
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_stack_segment
        jmp error_code
        CFI_ENDPROC
@@ -23622,7 +22887,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(alignment_check)
        RING0_EC_FRAME
  
  ENTRY(alignment_check)
        RING0_EC_FRAME
-@@ -921,7 +1160,7 @@ ENTRY(alignment_check)
+@@ -919,7 +1158,7 @@ ENTRY(alignment_check)
        pushl_cfi $do_alignment_check
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_alignment_check
        jmp error_code
        CFI_ENDPROC
@@ -23631,7 +22896,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(divide_error)
        RING0_INT_FRAME
  
  ENTRY(divide_error)
        RING0_INT_FRAME
-@@ -930,7 +1169,7 @@ ENTRY(divide_error)
+@@ -928,7 +1167,7 @@ ENTRY(divide_error)
        pushl_cfi $do_divide_error
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_divide_error
        jmp error_code
        CFI_ENDPROC
@@ -23640,7 +22905,7 @@ index 4b0e1df..884b67e 100644
  
  #ifdef CONFIG_X86_MCE
  ENTRY(machine_check)
  
  #ifdef CONFIG_X86_MCE
  ENTRY(machine_check)
-@@ -940,7 +1179,7 @@ ENTRY(machine_check)
+@@ -938,7 +1177,7 @@ ENTRY(machine_check)
        pushl_cfi machine_check_vector
        jmp error_code
        CFI_ENDPROC
        pushl_cfi machine_check_vector
        jmp error_code
        CFI_ENDPROC
@@ -23649,7 +22914,7 @@ index 4b0e1df..884b67e 100644
  #endif
  
  ENTRY(spurious_interrupt_bug)
  #endif
  
  ENTRY(spurious_interrupt_bug)
-@@ -950,7 +1189,7 @@ ENTRY(spurious_interrupt_bug)
+@@ -948,7 +1187,7 @@ ENTRY(spurious_interrupt_bug)
        pushl_cfi $do_spurious_interrupt_bug
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_spurious_interrupt_bug
        jmp error_code
        CFI_ENDPROC
@@ -23658,7 +22923,7 @@ index 4b0e1df..884b67e 100644
  
  #ifdef CONFIG_XEN
  /* Xen doesn't set %esp to be precisely what the normal sysenter
  
  #ifdef CONFIG_XEN
  /* Xen doesn't set %esp to be precisely what the normal sysenter
-@@ -1056,7 +1295,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
+@@ -1054,7 +1293,7 @@ BUILD_INTERRUPT3(hyperv_callback_vector, HYPERVISOR_CALLBACK_VECTOR,
  
  ENTRY(mcount)
        ret
  
  ENTRY(mcount)
        ret
@@ -23667,7 +22932,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(ftrace_caller)
        pushl %eax
  
  ENTRY(ftrace_caller)
        pushl %eax
-@@ -1086,7 +1325,7 @@ ftrace_graph_call:
+@@ -1084,7 +1323,7 @@ ftrace_graph_call:
  .globl ftrace_stub
  ftrace_stub:
        ret
  .globl ftrace_stub
  ftrace_stub:
        ret
@@ -23676,7 +22941,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(ftrace_regs_caller)
        pushf   /* push flags before compare (in cs location) */
  
  ENTRY(ftrace_regs_caller)
        pushf   /* push flags before compare (in cs location) */
-@@ -1184,7 +1423,7 @@ trace:
+@@ -1182,7 +1421,7 @@ trace:
        popl %ecx
        popl %eax
        jmp ftrace_stub
        popl %ecx
        popl %eax
        jmp ftrace_stub
@@ -23685,7 +22950,7 @@ index 4b0e1df..884b67e 100644
  #endif /* CONFIG_DYNAMIC_FTRACE */
  #endif /* CONFIG_FUNCTION_TRACER */
  
  #endif /* CONFIG_DYNAMIC_FTRACE */
  #endif /* CONFIG_FUNCTION_TRACER */
  
-@@ -1202,7 +1441,7 @@ ENTRY(ftrace_graph_caller)
+@@ -1200,7 +1439,7 @@ ENTRY(ftrace_graph_caller)
        popl %ecx
        popl %eax
        ret
        popl %ecx
        popl %eax
        ret
@@ -23694,7 +22959,7 @@ index 4b0e1df..884b67e 100644
  
  .globl return_to_handler
  return_to_handler:
  
  .globl return_to_handler
  return_to_handler:
-@@ -1263,15 +1502,18 @@ error_code:
+@@ -1261,15 +1500,18 @@ error_code:
        movl $-1, PT_ORIG_EAX(%esp)     # no syscall to restart
        REG_TO_PTGS %ecx
        SET_KERNEL_GS %ecx
        movl $-1, PT_ORIG_EAX(%esp)     # no syscall to restart
        REG_TO_PTGS %ecx
        SET_KERNEL_GS %ecx
@@ -23715,7 +22980,7 @@ index 4b0e1df..884b67e 100644
  
  /*
   * Debug traps and NMI can happen at the one SYSENTER instruction
  
  /*
   * Debug traps and NMI can happen at the one SYSENTER instruction
-@@ -1314,7 +1556,7 @@ debug_stack_correct:
+@@ -1312,7 +1554,7 @@ debug_stack_correct:
        call do_debug
        jmp ret_from_exception
        CFI_ENDPROC
        call do_debug
        jmp ret_from_exception
        CFI_ENDPROC
@@ -23724,7 +22989,7 @@ index 4b0e1df..884b67e 100644
  
  /*
   * NMI is doubly nasty. It can happen _while_ we're handling
  
  /*
   * NMI is doubly nasty. It can happen _while_ we're handling
-@@ -1354,6 +1596,9 @@ nmi_stack_correct:
+@@ -1352,6 +1594,9 @@ nmi_stack_correct:
        xorl %edx,%edx          # zero error code
        movl %esp,%eax          # pt_regs pointer
        call do_nmi
        xorl %edx,%edx          # zero error code
        movl %esp,%eax          # pt_regs pointer
        call do_nmi
@@ -23734,7 +22999,7 @@ index 4b0e1df..884b67e 100644
        jmp restore_all_notrace
        CFI_ENDPROC
  
        jmp restore_all_notrace
        CFI_ENDPROC
  
-@@ -1391,13 +1636,16 @@ nmi_espfix_stack:
+@@ -1389,13 +1634,16 @@ nmi_espfix_stack:
        FIXUP_ESPFIX_STACK              # %eax == %esp
        xorl %edx,%edx                  # zero error code
        call do_nmi
        FIXUP_ESPFIX_STACK              # %eax == %esp
        xorl %edx,%edx                  # zero error code
        call do_nmi
@@ -23752,7 +23017,7 @@ index 4b0e1df..884b67e 100644
  
  ENTRY(int3)
        RING0_INT_FRAME
  
  ENTRY(int3)
        RING0_INT_FRAME
-@@ -1410,14 +1658,14 @@ ENTRY(int3)
+@@ -1408,14 +1656,14 @@ ENTRY(int3)
        call do_int3
        jmp ret_from_exception
        CFI_ENDPROC
        call do_int3
        jmp ret_from_exception
        CFI_ENDPROC
@@ -23769,7 +23034,7 @@ index 4b0e1df..884b67e 100644
  
  #ifdef CONFIG_KVM_GUEST
  ENTRY(async_page_fault)
  
  #ifdef CONFIG_KVM_GUEST
  ENTRY(async_page_fault)
-@@ -1426,6 +1674,6 @@ ENTRY(async_page_fault)
+@@ -1424,6 +1672,6 @@ ENTRY(async_page_fault)
        pushl_cfi $do_async_page_fault
        jmp error_code
        CFI_ENDPROC
        pushl_cfi $do_async_page_fault
        jmp error_code
        CFI_ENDPROC
@@ -23778,7 +23043,7 @@ index 4b0e1df..884b67e 100644
  #endif
  
 diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
  #endif
  
 diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
-index 2fac134..b020fca 100644
+index c0226ab..96a8ab7 100644
 --- a/arch/x86/kernel/entry_64.S
 +++ b/arch/x86/kernel/entry_64.S
 @@ -59,6 +59,8 @@
 --- a/arch/x86/kernel/entry_64.S
 +++ b/arch/x86/kernel/entry_64.S
 @@ -59,6 +59,8 @@
@@ -24411,7 +23676,7 @@ index 2fac134..b020fca 100644
  
        movq    %rsp,PER_CPU_VAR(old_rsp)
        movq    PER_CPU_VAR(kernel_stack),%rsp
  
        movq    %rsp,PER_CPU_VAR(old_rsp)
        movq    PER_CPU_VAR(kernel_stack),%rsp
-+      SAVE_ARGS 8*6,0
++      SAVE_ARGS 8*6, 0, rax_enosys=1
 +      pax_enter_kernel_user
 +
 +#ifdef CONFIG_PAX_RANDKSTACK
 +      pax_enter_kernel_user
 +
 +#ifdef CONFIG_PAX_RANDKSTACK
@@ -24423,8 +23688,8 @@ index 2fac134..b020fca 100644
         * and short:
         */
        ENABLE_INTERRUPTS(CLBR_NONE)
         * and short:
         */
        ENABLE_INTERRUPTS(CLBR_NONE)
--      SAVE_ARGS 8,0
-       movq  %rax,ORIG_RAX-ARGOFFSET(%rsp)
+-      SAVE_ARGS 8, 0, rax_enosys=1
+       movq_cfi rax,(ORIG_RAX-ARGOFFSET)
        movq  %rcx,RIP-ARGOFFSET(%rsp)
        CFI_REL_OFFSET rip,RIP-ARGOFFSET
 -      testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
        movq  %rcx,RIP-ARGOFFSET(%rsp)
        CFI_REL_OFFSET rip,RIP-ARGOFFSET
 -      testl $_TIF_WORK_SYSCALL_ENTRY,TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
@@ -24448,35 +23713,33 @@ index 2fac134..b020fca 100644
        /*
         * sysretq will re-enable interrupts:
         */
        /*
         * sysretq will re-enable interrupts:
         */
-@@ -494,6 +963,9 @@ auditsys:
-       movq %rax,%rsi                  /* 2nd arg: syscall number */
-       movl $AUDIT_ARCH_X86_64,%edi    /* 1st arg: audit arch */
-       call __audit_syscall_entry
-+
-+      pax_erase_kstack
-+
-       LOAD_ARGS 0             /* reload call-clobbered registers */
-       jmp system_call_fastpath
+@@ -494,12 +963,15 @@ sysret_audit:
  
  
-@@ -515,7 +987,7 @@ sysret_audit:
        /* Do syscall tracing */
  tracesys:
        /* Do syscall tracing */
  tracesys:
- #ifdef CONFIG_AUDITSYSCALL
--      testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags+THREAD_INFO(%rsp,RIP-ARGOFFSET)
-+      testl $(_TIF_WORK_SYSCALL_ENTRY & ~_TIF_SYSCALL_AUDIT),TI_flags(%rcx)
-       jz auditsys
- #endif
-       SAVE_REST
-@@ -523,12 +995,15 @@ tracesys:
-       FIXUP_TOP_OF_STACK %rdi
-       movq %rsp,%rdi
-       call syscall_trace_enter
+-      leaq -REST_SKIP(%rsp), %rdi
++      movq %rsp, %rdi
+       movq $AUDIT_ARCH_X86_64, %rsi
+       call syscall_trace_enter_phase1
+       test %rax, %rax
+       jnz tracesys_phase2             /* if needed, run the slow path */
+-      LOAD_ARGS 0                     /* else restore clobbered regs */
 +
 +
++      pax_erase_kstack
++
++      LOAD_ARGS                       /* else restore clobbered regs */
+       jmp system_call_fastpath        /*      and return to the fast path */
+ tracesys_phase2:
+@@ -510,12 +982,14 @@ tracesys_phase2:
+       movq %rax,%rdx
+       call syscall_trace_enter_phase2
 +      pax_erase_kstack
 +
        /*
         * Reload arg registers from stack in case ptrace changed them.
 +      pax_erase_kstack
 +
        /*
         * Reload arg registers from stack in case ptrace changed them.
-        * We don't reload %rax because syscall_trace_enter() returned
+        * We don't reload %rax because syscall_trace_entry_phase2() returned
         * the value it wants us to use in the table lookup.
         */
 -      LOAD_ARGS ARGOFFSET, 1
         * the value it wants us to use in the table lookup.
         */
 -      LOAD_ARGS ARGOFFSET, 1
@@ -24484,7 +23747,7 @@ index 2fac134..b020fca 100644
        RESTORE_REST
  #if __SYSCALL_MASK == ~0
        cmpq $__NR_syscall_max,%rax
        RESTORE_REST
  #if __SYSCALL_MASK == ~0
        cmpq $__NR_syscall_max,%rax
-@@ -558,7 +1033,9 @@ GLOBAL(int_with_check)
+@@ -545,7 +1019,9 @@ GLOBAL(int_with_check)
        andl %edi,%edx
        jnz   int_careful
        andl    $~TS_COMPAT,TI_status(%rcx)
        andl %edi,%edx
        jnz   int_careful
        andl    $~TS_COMPAT,TI_status(%rcx)
@@ -24495,7 +23758,7 @@ index 2fac134..b020fca 100644
  
        /* Either reschedule or signal or syscall exit tracking needed. */
        /* First do a reschedule test. */
  
        /* Either reschedule or signal or syscall exit tracking needed. */
        /* First do a reschedule test. */
-@@ -604,7 +1081,7 @@ int_restore_rest:
+@@ -591,7 +1067,7 @@ int_restore_rest:
        TRACE_IRQS_OFF
        jmp int_with_check
        CFI_ENDPROC
        TRACE_IRQS_OFF
        jmp int_with_check
        CFI_ENDPROC
@@ -24504,7 +23767,7 @@ index 2fac134..b020fca 100644
  
        .macro FORK_LIKE func
  ENTRY(stub_\func)
  
        .macro FORK_LIKE func
  ENTRY(stub_\func)
-@@ -617,9 +1094,10 @@ ENTRY(stub_\func)
+@@ -604,9 +1080,10 @@ ENTRY(stub_\func)
        DEFAULT_FRAME 0 8               /* offset 8: return address */
        call sys_\func
        RESTORE_TOP_OF_STACK %r11, 8
        DEFAULT_FRAME 0 8               /* offset 8: return address */
        call sys_\func
        RESTORE_TOP_OF_STACK %r11, 8
@@ -24517,7 +23780,7 @@ index 2fac134..b020fca 100644
        .endm
  
        .macro FIXED_FRAME label,func
        .endm
  
        .macro FIXED_FRAME label,func
-@@ -629,9 +1107,10 @@ ENTRY(\label)
+@@ -616,9 +1093,10 @@ ENTRY(\label)
        FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET
        call \func
        RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET
        FIXUP_TOP_OF_STACK %r11, 8-ARGOFFSET
        call \func
        RESTORE_TOP_OF_STACK %r11, 8-ARGOFFSET
@@ -24529,7 +23792,7 @@ index 2fac134..b020fca 100644
        .endm
  
        FORK_LIKE  clone
        .endm
  
        FORK_LIKE  clone
-@@ -639,19 +1118,6 @@ END(\label)
+@@ -626,19 +1104,6 @@ END(\label)
        FORK_LIKE  vfork
        FIXED_FRAME stub_iopl, sys_iopl
  
        FORK_LIKE  vfork
        FIXED_FRAME stub_iopl, sys_iopl
  
@@ -24549,7 +23812,7 @@ index 2fac134..b020fca 100644
  ENTRY(stub_execve)
        CFI_STARTPROC
        addq $8, %rsp
  ENTRY(stub_execve)
        CFI_STARTPROC
        addq $8, %rsp
-@@ -663,7 +1129,7 @@ ENTRY(stub_execve)
+@@ -650,7 +1115,7 @@ ENTRY(stub_execve)
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
@@ -24558,7 +23821,7 @@ index 2fac134..b020fca 100644
  
  /*
   * sigreturn is special because it needs to restore all registers on return.
  
  /*
   * sigreturn is special because it needs to restore all registers on return.
-@@ -680,7 +1146,7 @@ ENTRY(stub_rt_sigreturn)
+@@ -667,7 +1132,7 @@ ENTRY(stub_rt_sigreturn)
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
@@ -24567,7 +23830,7 @@ index 2fac134..b020fca 100644
  
  #ifdef CONFIG_X86_X32_ABI
  ENTRY(stub_x32_rt_sigreturn)
  
  #ifdef CONFIG_X86_X32_ABI
  ENTRY(stub_x32_rt_sigreturn)
-@@ -694,7 +1160,7 @@ ENTRY(stub_x32_rt_sigreturn)
+@@ -681,7 +1146,7 @@ ENTRY(stub_x32_rt_sigreturn)
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
@@ -24576,7 +23839,7 @@ index 2fac134..b020fca 100644
  
  ENTRY(stub_x32_execve)
        CFI_STARTPROC
  
  ENTRY(stub_x32_execve)
        CFI_STARTPROC
-@@ -708,7 +1174,7 @@ ENTRY(stub_x32_execve)
+@@ -695,7 +1160,7 @@ ENTRY(stub_x32_execve)
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
        RESTORE_REST
        jmp int_ret_from_sys_call
        CFI_ENDPROC
@@ -24585,7 +23848,7 @@ index 2fac134..b020fca 100644
  
  #endif
  
  
  #endif
  
-@@ -745,7 +1211,7 @@ vector=vector+1
+@@ -732,7 +1197,7 @@ vector=vector+1
  2:    jmp common_interrupt
  .endr
        CFI_ENDPROC
  2:    jmp common_interrupt
  .endr
        CFI_ENDPROC
@@ -24594,7 +23857,7 @@ index 2fac134..b020fca 100644
  
  .previous
  END(interrupt)
  
  .previous
  END(interrupt)
-@@ -762,8 +1228,8 @@ END(interrupt)
+@@ -749,8 +1214,8 @@ END(interrupt)
  /* 0(%rsp): ~(interrupt number) */
        .macro interrupt func
        /* reserve pt_regs for scratch regs and rbp */
  /* 0(%rsp): ~(interrupt number) */
        .macro interrupt func
        /* reserve pt_regs for scratch regs and rbp */
@@ -24605,7 +23868,7 @@ index 2fac134..b020fca 100644
        SAVE_ARGS_IRQ
        call \func
        .endm
        SAVE_ARGS_IRQ
        call \func
        .endm
-@@ -786,14 +1252,14 @@ ret_from_intr:
+@@ -773,14 +1238,14 @@ ret_from_intr:
  
        /* Restore saved previous stack */
        popq %rsi
  
        /* Restore saved previous stack */
        popq %rsi
@@ -24624,7 +23887,7 @@ index 2fac134..b020fca 100644
        je retint_kernel
  
        /* Interrupt came from user space */
        je retint_kernel
  
        /* Interrupt came from user space */
-@@ -815,12 +1281,35 @@ retint_swapgs:          /* return to user-space */
+@@ -802,12 +1267,35 @@ retint_swapgs:          /* return to user-space */
         * The iretq could re-enable interrupts:
         */
        DISABLE_INTERRUPTS(CLBR_ANY)
         * The iretq could re-enable interrupts:
         */
        DISABLE_INTERRUPTS(CLBR_ANY)
@@ -24660,32 +23923,37 @@ index 2fac134..b020fca 100644
        /*
         * The iretq could re-enable interrupts:
         */
        /*
         * The iretq could re-enable interrupts:
         */
-@@ -933,7 +1422,7 @@ ENTRY(retint_kernel)
+@@ -845,15 +1333,15 @@ native_irq_return_ldt:
+       SWAPGS
+       movq PER_CPU_VAR(espfix_waddr),%rdi
+       movq %rax,(0*8)(%rdi)   /* RAX */
+-      movq (2*8)(%rsp),%rax   /* RIP */
++      movq (2*8 + RIP-RIP)(%rsp),%rax /* RIP */
+       movq %rax,(1*8)(%rdi)
+-      movq (3*8)(%rsp),%rax   /* CS */
++      movq (2*8 + CS-RIP)(%rsp),%rax  /* CS */
+       movq %rax,(2*8)(%rdi)
+-      movq (4*8)(%rsp),%rax   /* RFLAGS */
++      movq (2*8 + EFLAGS-RIP)(%rsp),%rax      /* RFLAGS */
+       movq %rax,(3*8)(%rdi)
+-      movq (6*8)(%rsp),%rax   /* SS */
++      movq (2*8 + SS-RIP)(%rsp),%rax  /* SS */
+       movq %rax,(5*8)(%rdi)
+-      movq (5*8)(%rsp),%rax   /* RSP */
++      movq (2*8 + RSP-RIP)(%rsp),%rax /* RSP */
+       movq %rax,(4*8)(%rdi)
+       andl $0xffff0000,%eax
+       popq_cfi %rdi
+@@ -907,7 +1395,7 @@ ENTRY(retint_kernel)
        jmp exit_intr
  #endif
        CFI_ENDPROC
 -END(common_interrupt)
 +ENDPROC(common_interrupt)
  
        jmp exit_intr
  #endif
        CFI_ENDPROC
 -END(common_interrupt)
 +ENDPROC(common_interrupt)
  
-       /*
-        * If IRET takes a fault on the espfix stack, then we
-@@ -955,13 +1444,13 @@ __do_double_fault:
-       cmpq $native_irq_return_iret,%rax
-       jne do_double_fault             /* This shouldn't happen... */
-       movq PER_CPU_VAR(kernel_stack),%rax
--      subq $(6*8-KERNEL_STACK_OFFSET),%rax    /* Reset to original stack */
-+      subq $(6*8),%rax                /* Reset to original stack */
-       movq %rax,RSP(%rdi)
-       movq $0,(%rax)                  /* Missing (lost) #GP error code */
-       movq $general_protection,RIP(%rdi)
-       retq
-       CFI_ENDPROC
--END(__do_double_fault)
-+ENDPROC(__do_double_fault)
- #else
- # define __do_double_fault do_double_fault
- #endif
-@@ -978,7 +1467,7 @@ ENTRY(\sym)
+ /*
+  * APIC interrupts.
+@@ -921,7 +1409,7 @@ ENTRY(\sym)
        interrupt \do_sym
        jmp ret_from_intr
        CFI_ENDPROC
        interrupt \do_sym
        jmp ret_from_intr
        CFI_ENDPROC
@@ -24694,7 +23962,7 @@ index 2fac134..b020fca 100644
  .endm
  
  #ifdef CONFIG_TRACING
  .endm
  
  #ifdef CONFIG_TRACING
-@@ -1051,7 +1540,7 @@ apicinterrupt IRQ_WORK_VECTOR \
+@@ -994,7 +1482,7 @@ apicinterrupt IRQ_WORK_VECTOR \
  /*
   * Exception entry points.
   */
  /*
   * Exception entry points.
   */
@@ -24703,7 +23971,7 @@ index 2fac134..b020fca 100644
  
  .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
  ENTRY(\sym)
  
  .macro idtentry sym do_sym has_error_code:req paranoid=0 shift_ist=-1
  ENTRY(\sym)
-@@ -1102,6 +1591,12 @@ ENTRY(\sym)
+@@ -1045,6 +1533,12 @@ ENTRY(\sym)
        .endif
  
        .if \shift_ist != -1
        .endif
  
        .if \shift_ist != -1
@@ -24716,7 +23984,7 @@ index 2fac134..b020fca 100644
        subq $EXCEPTION_STKSZ, INIT_TSS_IST(\shift_ist)
        .endif
  
        subq $EXCEPTION_STKSZ, INIT_TSS_IST(\shift_ist)
        .endif
  
-@@ -1118,7 +1613,7 @@ ENTRY(\sym)
+@@ -1061,7 +1555,7 @@ ENTRY(\sym)
        .endif
  
        CFI_ENDPROC
        .endif
  
        CFI_ENDPROC
@@ -24725,7 +23993,7 @@ index 2fac134..b020fca 100644
  .endm
  
  #ifdef CONFIG_TRACING
  .endm
  
  #ifdef CONFIG_TRACING
-@@ -1159,9 +1654,10 @@ gs_change:
+@@ -1102,9 +1596,10 @@ gs_change:
  2:    mfence          /* workaround */
        SWAPGS
        popfq_cfi
  2:    mfence          /* workaround */
        SWAPGS
        popfq_cfi
@@ -24737,7 +24005,7 @@ index 2fac134..b020fca 100644
  
        _ASM_EXTABLE(gs_change,bad_gs)
        .section .fixup,"ax"
  
        _ASM_EXTABLE(gs_change,bad_gs)
        .section .fixup,"ax"
-@@ -1189,9 +1685,10 @@ ENTRY(do_softirq_own_stack)
+@@ -1132,9 +1627,10 @@ ENTRY(do_softirq_own_stack)
        CFI_DEF_CFA_REGISTER    rsp
        CFI_ADJUST_CFA_OFFSET   -8
        decl PER_CPU_VAR(irq_count)
        CFI_DEF_CFA_REGISTER    rsp
        CFI_ADJUST_CFA_OFFSET   -8
        decl PER_CPU_VAR(irq_count)
@@ -24749,7 +24017,7 @@ index 2fac134..b020fca 100644
  
  #ifdef CONFIG_XEN
  idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
  
  #ifdef CONFIG_XEN
  idtentry xen_hypervisor_callback xen_do_hypervisor_callback has_error_code=0
-@@ -1229,7 +1726,7 @@ ENTRY(xen_do_hypervisor_callback)   # do_hypervisor_callback(struct *pt_regs)
+@@ -1172,7 +1668,7 @@ ENTRY(xen_do_hypervisor_callback)   # do_hypervisor_callback(struct *pt_regs)
        decl PER_CPU_VAR(irq_count)
        jmp  error_exit
        CFI_ENDPROC
        decl PER_CPU_VAR(irq_count)
        jmp  error_exit
        CFI_ENDPROC
@@ -24758,7 +24026,7 @@ index 2fac134..b020fca 100644
  
  /*
   * Hypervisor uses this for application faults while it executes.
  
  /*
   * Hypervisor uses this for application faults while it executes.
-@@ -1288,7 +1785,7 @@ ENTRY(xen_failsafe_callback)
+@@ -1231,7 +1727,7 @@ ENTRY(xen_failsafe_callback)
        SAVE_ALL
        jmp error_exit
        CFI_ENDPROC
        SAVE_ALL
        jmp error_exit
        CFI_ENDPROC
@@ -24767,7 +24035,7 @@ index 2fac134..b020fca 100644
  
  apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
        xen_hvm_callback_vector xen_evtchn_do_upcall
  
  apicinterrupt3 HYPERVISOR_CALLBACK_VECTOR \
        xen_hvm_callback_vector xen_evtchn_do_upcall
-@@ -1335,18 +1832,33 @@ ENTRY(paranoid_exit)
+@@ -1278,18 +1774,33 @@ ENTRY(paranoid_exit)
        DEFAULT_FRAME
        DISABLE_INTERRUPTS(CLBR_NONE)
        TRACE_IRQS_OFF_DEBUG
        DEFAULT_FRAME
        DISABLE_INTERRUPTS(CLBR_NONE)
        TRACE_IRQS_OFF_DEBUG
@@ -24803,7 +24071,7 @@ index 2fac134..b020fca 100644
        jmp irq_return
  paranoid_userspace:
        GET_THREAD_INFO(%rcx)
        jmp irq_return
  paranoid_userspace:
        GET_THREAD_INFO(%rcx)
-@@ -1375,7 +1887,7 @@ paranoid_schedule:
+@@ -1318,7 +1829,7 @@ paranoid_schedule:
        TRACE_IRQS_OFF
        jmp paranoid_userspace
        CFI_ENDPROC
        TRACE_IRQS_OFF
        jmp paranoid_userspace
        CFI_ENDPROC
@@ -24812,7 +24080,7 @@ index 2fac134..b020fca 100644
  
  /*
   * Exception entry point. This expects an error code/orig_rax on the stack.
  
  /*
   * Exception entry point. This expects an error code/orig_rax on the stack.
-@@ -1402,12 +1914,23 @@ ENTRY(error_entry)
+@@ -1345,12 +1856,23 @@ ENTRY(error_entry)
        movq %r14, R14+8(%rsp)
        movq %r15, R15+8(%rsp)
        xorl %ebx,%ebx
        movq %r14, R14+8(%rsp)
        movq %r15, R15+8(%rsp)
        xorl %ebx,%ebx
@@ -24837,16 +24105,16 @@ index 2fac134..b020fca 100644
        ret
  
  /*
        ret
  
  /*
-@@ -1435,7 +1958,7 @@ bstep_iret:
-       movq %rcx,RIP+8(%rsp)
-       jmp error_swapgs
+@@ -1385,7 +1907,7 @@ error_bad_iret:
+       decl %ebx       /* Return to usergs */
+       jmp error_sti
        CFI_ENDPROC
 -END(error_entry)
 +ENDPROC(error_entry)
  
  
  /* ebx:       no swapgs flag (1: don't need swapgs, 0: need it) */
        CFI_ENDPROC
 -END(error_entry)
 +ENDPROC(error_entry)
  
  
  /* ebx:       no swapgs flag (1: don't need swapgs, 0: need it) */
-@@ -1446,7 +1969,7 @@ ENTRY(error_exit)
+@@ -1396,7 +1918,7 @@ ENTRY(error_exit)
        DISABLE_INTERRUPTS(CLBR_NONE)
        TRACE_IRQS_OFF
        GET_THREAD_INFO(%rcx)
        DISABLE_INTERRUPTS(CLBR_NONE)
        TRACE_IRQS_OFF
        GET_THREAD_INFO(%rcx)
@@ -24855,7 +24123,7 @@ index 2fac134..b020fca 100644
        jne retint_kernel
        LOCKDEP_SYS_EXIT_IRQ
        movl TI_flags(%rcx),%edx
        jne retint_kernel
        LOCKDEP_SYS_EXIT_IRQ
        movl TI_flags(%rcx),%edx
-@@ -1455,7 +1978,7 @@ ENTRY(error_exit)
+@@ -1405,7 +1927,7 @@ ENTRY(error_exit)
        jnz retint_careful
        jmp retint_swapgs
        CFI_ENDPROC
        jnz retint_careful
        jmp retint_swapgs
        CFI_ENDPROC
@@ -24864,7 +24132,7 @@ index 2fac134..b020fca 100644
  
  /*
   * Test if a given stack is an NMI stack or not.
  
  /*
   * Test if a given stack is an NMI stack or not.
-@@ -1513,9 +2036,11 @@ ENTRY(nmi)
+@@ -1463,9 +1985,11 @@ ENTRY(nmi)
         * If %cs was not the kernel segment, then the NMI triggered in user
         * space, which means it is definitely not nested.
         */
         * If %cs was not the kernel segment, then the NMI triggered in user
         * space, which means it is definitely not nested.
         */
@@ -24877,7 +24145,7 @@ index 2fac134..b020fca 100644
        /*
         * Check the special variable on the stack to see if NMIs are
         * executing.
        /*
         * Check the special variable on the stack to see if NMIs are
         * executing.
-@@ -1549,8 +2074,7 @@ nested_nmi:
+@@ -1499,8 +2023,7 @@ nested_nmi:
  
  1:
        /* Set up the interrupted NMIs stack to jump to repeat_nmi */
  
  1:
        /* Set up the interrupted NMIs stack to jump to repeat_nmi */
@@ -24887,7 +24155,7 @@ index 2fac134..b020fca 100644
        CFI_ADJUST_CFA_OFFSET 1*8
        leaq -10*8(%rsp), %rdx
        pushq_cfi $__KERNEL_DS
        CFI_ADJUST_CFA_OFFSET 1*8
        leaq -10*8(%rsp), %rdx
        pushq_cfi $__KERNEL_DS
-@@ -1568,6 +2092,7 @@ nested_nmi_out:
+@@ -1518,6 +2041,7 @@ nested_nmi_out:
        CFI_RESTORE rdx
  
        /* No need to check faults here */
        CFI_RESTORE rdx
  
        /* No need to check faults here */
@@ -24895,7 +24163,7 @@ index 2fac134..b020fca 100644
        INTERRUPT_RETURN
  
        CFI_RESTORE_STATE
        INTERRUPT_RETURN
  
        CFI_RESTORE_STATE
-@@ -1664,13 +2189,13 @@ end_repeat_nmi:
+@@ -1614,13 +2138,13 @@ end_repeat_nmi:
        subq $ORIG_RAX-R15, %rsp
        CFI_ADJUST_CFA_OFFSET ORIG_RAX-R15
        /*
        subq $ORIG_RAX-R15, %rsp
        CFI_ADJUST_CFA_OFFSET ORIG_RAX-R15
        /*
@@ -24911,7 +24179,7 @@ index 2fac134..b020fca 100644
        DEFAULT_FRAME 0
  
        /*
        DEFAULT_FRAME 0
  
        /*
-@@ -1680,9 +2205,9 @@ end_repeat_nmi:
+@@ -1630,9 +2154,9 @@ end_repeat_nmi:
         * NMI itself takes a page fault, the page fault that was preempted
         * will read the information from the NMI page fault and not the
         * origin fault. Save it off and restore it if it changes.
         * NMI itself takes a page fault, the page fault that was preempted
         * will read the information from the NMI page fault and not the
         * origin fault. Save it off and restore it if it changes.
@@ -24923,7 +24191,7 @@ index 2fac134..b020fca 100644
  
        /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
        movq %rsp,%rdi
  
        /* paranoidentry do_nmi, 0; without TRACE_IRQS_OFF */
        movq %rsp,%rdi
-@@ -1691,29 +2216,34 @@ end_repeat_nmi:
+@@ -1641,29 +2165,34 @@ end_repeat_nmi:
  
        /* Did the NMI take a page fault? Restore cr2 if it did */
        movq %cr2, %rcx
  
        /* Did the NMI take a page fault? Restore cr2 if it did */
        movq %cr2, %rcx
@@ -24964,10 +24232,42 @@ index 2fac134..b020fca 100644
 +ENDPROC(ignore_sysret)
  
 diff --git a/arch/x86/kernel/espfix_64.c b/arch/x86/kernel/espfix_64.c
 +ENDPROC(ignore_sysret)
  
 diff --git a/arch/x86/kernel/espfix_64.c b/arch/x86/kernel/espfix_64.c
-index 94d857f..bf1f0bf 100644
+index 94d857f..5bce89c 100644
 --- a/arch/x86/kernel/espfix_64.c
 +++ b/arch/x86/kernel/espfix_64.c
 --- a/arch/x86/kernel/espfix_64.c
 +++ b/arch/x86/kernel/espfix_64.c
-@@ -197,7 +197,7 @@ void init_espfix_ap(void)
+@@ -70,8 +70,7 @@ static DEFINE_MUTEX(espfix_init_mutex);
+ #define ESPFIX_MAX_PAGES  DIV_ROUND_UP(CONFIG_NR_CPUS, ESPFIX_STACKS_PER_PAGE)
+ static void *espfix_pages[ESPFIX_MAX_PAGES];
+-static __page_aligned_bss pud_t espfix_pud_page[PTRS_PER_PUD]
+-      __aligned(PAGE_SIZE);
++static pud_t espfix_pud_page[PTRS_PER_PUD] __page_aligned_rodata;
+ static unsigned int page_random, slot_random;
+@@ -122,14 +121,17 @@ static void init_espfix_random(void)
+ void __init init_espfix_bsp(void)
+ {
+       pgd_t *pgd_p;
+-      pteval_t ptemask;
+-
+-      ptemask = __supported_pte_mask;
++      unsigned long index = pgd_index(ESPFIX_BASE_ADDR);
+       /* Install the espfix pud into the kernel page directory */
+-      pgd_p = &init_level4_pgt[pgd_index(ESPFIX_BASE_ADDR)];
++      pgd_p = &init_level4_pgt[index];
+       pgd_populate(&init_mm, pgd_p, (pud_t *)espfix_pud_page);
++#ifdef CONFIG_PAX_PER_CPU_PGD
++      clone_pgd_range(get_cpu_pgd(0, kernel) + index, swapper_pg_dir + index, 1);
++      clone_pgd_range(get_cpu_pgd(0, user) + index, swapper_pg_dir + index, 1);
++#endif
++
+       /* Randomize the locations */
+       init_espfix_random();
+@@ -197,7 +199,7 @@ void init_espfix_ap(void)
                set_pte(&pte_p[n*PTE_STRIDE], pte);
  
        /* Job is done for this CPU and any CPU which shares this page */
                set_pte(&pte_p[n*PTE_STRIDE], pte);
  
        /* Job is done for this CPU and any CPU which shares this page */
@@ -25801,7 +25101,7 @@ index a9a4229..6f4d476 100644
  
  /*
 diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c
  
  /*
 diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c
-index 8af8171..f8c1169 100644
+index e7cc537..67d7372 100644
 --- a/arch/x86/kernel/i8259.c
 +++ b/arch/x86/kernel/i8259.c
 @@ -110,7 +110,7 @@ static int i8259A_irq_pending(unsigned int irq)
 --- a/arch/x86/kernel/i8259.c
 +++ b/arch/x86/kernel/i8259.c
 @@ -110,7 +110,7 @@ static int i8259A_irq_pending(unsigned int irq)
@@ -25810,10 +25110,10 @@ index 8af8171..f8c1169 100644
        disable_irq_nosync(irq);
 -      io_apic_irqs &= ~(1<<irq);
 +      io_apic_irqs &= ~(1UL<<irq);
        disable_irq_nosync(irq);
 -      io_apic_irqs &= ~(1<<irq);
 +      io_apic_irqs &= ~(1UL<<irq);
-       irq_set_chip_and_handler_name(irq, &i8259A_chip, handle_level_irq,
-                                     i8259A_chip.name);
+       irq_set_chip_and_handler(irq, &i8259A_chip, handle_level_irq);
        enable_irq(irq);
        enable_irq(irq);
-@@ -209,7 +209,7 @@ spurious_8259A_irq:
+ }
+@@ -208,7 +208,7 @@ spurious_8259A_irq:
                               "spurious 8259A interrupt: IRQ%d.\n", irq);
                        spurious_irq_mask |= irqmask;
                }
                               "spurious 8259A interrupt: IRQ%d.\n", irq);
                        spurious_irq_mask |= irqmask;
                }
@@ -25822,7 +25122,7 @@ index 8af8171..f8c1169 100644
                /*
                 * Theoretically we do not have to handle this IRQ,
                 * but in Linux this does not cause problems and is
                /*
                 * Theoretically we do not have to handle this IRQ,
                 * but in Linux this does not cause problems and is
-@@ -350,14 +350,16 @@ static void init_8259A(int auto_eoi)
+@@ -349,14 +349,16 @@ static void init_8259A(int auto_eoi)
        /* (slave's support for AEOI in flat mode is to be investigated) */
        outb_pic(SLAVE_ICW4_DEFAULT, PIC_SLAVE_IMR);
  
        /* (slave's support for AEOI in flat mode is to be investigated) */
        outb_pic(SLAVE_ICW4_DEFAULT, PIC_SLAVE_IMR);
  
@@ -26072,7 +25372,7 @@ index 63ce838..2ea3e06 100644
                        print_stack_overflow();
                desc->handle_irq(irq, desc);
 diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c
                        print_stack_overflow();
                desc->handle_irq(irq, desc);
 diff --git a/arch/x86/kernel/irq_64.c b/arch/x86/kernel/irq_64.c
-index 4d1c746..55a22d6 100644
+index e4b503d..824fce8 100644
 --- a/arch/x86/kernel/irq_64.c
 +++ b/arch/x86/kernel/irq_64.c
 @@ -26,6 +26,8 @@ EXPORT_PER_CPU_SYMBOL(irq_stat);
 --- a/arch/x86/kernel/irq_64.c
 +++ b/arch/x86/kernel/irq_64.c
 @@ -26,6 +26,8 @@ EXPORT_PER_CPU_SYMBOL(irq_stat);
@@ -26510,7 +25810,7 @@ index c37886d..d851d32 100644
                error = -EINVAL;
                goto out_unlock;
 diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
                error = -EINVAL;
                goto out_unlock;
 diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c
-index 1667b1d..16492c5 100644
+index 72e8e31..f2f1605 100644
 --- a/arch/x86/kernel/machine_kexec_32.c
 +++ b/arch/x86/kernel/machine_kexec_32.c
 @@ -25,7 +25,7 @@
 --- a/arch/x86/kernel/machine_kexec_32.c
 +++ b/arch/x86/kernel/machine_kexec_32.c
 @@ -25,7 +25,7 @@
@@ -27079,6 +26379,34 @@ index 548d25f..f8fb99c 100644
  };
  
  EXPORT_SYMBOL_GPL(pv_time_ops);
  };
  
  EXPORT_SYMBOL_GPL(pv_time_ops);
+diff --git a/arch/x86/kernel/paravirt_patch_64.c b/arch/x86/kernel/paravirt_patch_64.c
+index a1da673..b6f5831 100644
+--- a/arch/x86/kernel/paravirt_patch_64.c
++++ b/arch/x86/kernel/paravirt_patch_64.c
+@@ -9,7 +9,11 @@ DEF_NATIVE(pv_irq_ops, save_fl, "pushfq; popq %rax");
+ DEF_NATIVE(pv_mmu_ops, read_cr2, "movq %cr2, %rax");
+ DEF_NATIVE(pv_mmu_ops, read_cr3, "movq %cr3, %rax");
+ DEF_NATIVE(pv_mmu_ops, write_cr3, "movq %rdi, %cr3");
++
++#ifndef CONFIG_PAX_MEMORY_UDEREF
+ DEF_NATIVE(pv_mmu_ops, flush_tlb_single, "invlpg (%rdi)");
++#endif
++
+ DEF_NATIVE(pv_cpu_ops, clts, "clts");
+ DEF_NATIVE(pv_cpu_ops, wbinvd, "wbinvd");
+@@ -57,7 +61,11 @@ unsigned native_patch(u8 type, u16 clobbers, void *ibuf,
+               PATCH_SITE(pv_mmu_ops, read_cr3);
+               PATCH_SITE(pv_mmu_ops, write_cr3);
+               PATCH_SITE(pv_cpu_ops, clts);
++
++#ifndef CONFIG_PAX_MEMORY_UDEREF
+               PATCH_SITE(pv_mmu_ops, flush_tlb_single);
++#endif
++
+               PATCH_SITE(pv_cpu_ops, wbinvd);
+       patch_site:
 diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
 index 0497f71..7186c0d 100644
 --- a/arch/x86/kernel/pci-calgary_64.c
 diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c
 index 0497f71..7186c0d 100644
 --- a/arch/x86/kernel/pci-calgary_64.c
@@ -27118,35 +26446,8 @@ index 77dd0ad..9ec4723 100644
        else
                dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs);
  }
        else
                dma_generic_free_coherent(dev, size, vaddr, dma_addr, attrs);
  }
-diff --git a/arch/x86/kernel/preempt.S b/arch/x86/kernel/preempt.S
-index ca7f0d5..8996469 100644
---- a/arch/x86/kernel/preempt.S
-+++ b/arch/x86/kernel/preempt.S
-@@ -3,12 +3,14 @@
- #include <asm/dwarf2.h>
- #include <asm/asm.h>
- #include <asm/calling.h>
-+#include <asm/alternative-asm.h>
- ENTRY(___preempt_schedule)
-       CFI_STARTPROC
-       SAVE_ALL
-       call preempt_schedule
-       RESTORE_ALL
-+      pax_force_retaddr
-       ret
-       CFI_ENDPROC
-@@ -19,6 +21,7 @@ ENTRY(___preempt_schedule_context)
-       SAVE_ALL
-       call preempt_schedule_context
-       RESTORE_ALL
-+      pax_force_retaddr
-       ret
-       CFI_ENDPROC
 diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
 diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
-index f804dc9..7c62095 100644
+index e127dda..94e384d 100644
 --- a/arch/x86/kernel/process.c
 +++ b/arch/x86/kernel/process.c
 @@ -36,7 +36,8 @@
 --- a/arch/x86/kernel/process.c
 +++ b/arch/x86/kernel/process.c
 @@ -36,7 +36,8 @@
@@ -27159,7 +26460,7 @@ index f804dc9..7c62095 100644
  
  #ifdef CONFIG_X86_64
  static DEFINE_PER_CPU(unsigned char, is_idle);
  
  #ifdef CONFIG_X86_64
  static DEFINE_PER_CPU(unsigned char, is_idle);
-@@ -92,7 +93,7 @@ void arch_task_cache_init(void)
+@@ -94,7 +95,7 @@ void arch_task_cache_init(void)
          task_xstate_cachep =
                kmem_cache_create("task_xstate", xstate_size,
                                  __alignof__(union thread_xstate),
          task_xstate_cachep =
                kmem_cache_create("task_xstate", xstate_size,
                                  __alignof__(union thread_xstate),
@@ -27168,7 +26469,7 @@ index f804dc9..7c62095 100644
        setup_xstate_comp();
  }
  
        setup_xstate_comp();
  }
  
-@@ -106,7 +107,7 @@ void exit_thread(void)
+@@ -108,7 +109,7 @@ void exit_thread(void)
        unsigned long *bp = t->io_bitmap_ptr;
  
        if (bp) {
        unsigned long *bp = t->io_bitmap_ptr;
  
        if (bp) {
@@ -27177,7 +26478,7 @@ index f804dc9..7c62095 100644
  
                t->io_bitmap_ptr = NULL;
                clear_thread_flag(TIF_IO_BITMAP);
  
                t->io_bitmap_ptr = NULL;
                clear_thread_flag(TIF_IO_BITMAP);
-@@ -126,6 +127,9 @@ void flush_thread(void)
+@@ -128,6 +129,9 @@ void flush_thread(void)
  {
        struct task_struct *tsk = current;
  
  {
        struct task_struct *tsk = current;
  
@@ -27187,7 +26488,7 @@ index f804dc9..7c62095 100644
        flush_ptrace_hw_breakpoint(tsk);
        memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
        drop_init_fpu(tsk);
        flush_ptrace_hw_breakpoint(tsk);
        memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
        drop_init_fpu(tsk);
-@@ -272,7 +276,7 @@ static void __exit_idle(void)
+@@ -274,7 +278,7 @@ static void __exit_idle(void)
  void exit_idle(void)
  {
        /* idle loop has pid 0 */
  void exit_idle(void)
  {
        /* idle loop has pid 0 */
@@ -27196,7 +26497,7 @@ index f804dc9..7c62095 100644
                return;
        __exit_idle();
  }
                return;
        __exit_idle();
  }
-@@ -325,7 +329,7 @@ bool xen_set_default_idle(void)
+@@ -327,7 +331,7 @@ bool xen_set_default_idle(void)
        return ret;
  }
  #endif
        return ret;
  }
  #endif
@@ -27205,7 +26506,7 @@ index f804dc9..7c62095 100644
  {
        local_irq_disable();
        /*
  {
        local_irq_disable();
        /*
-@@ -454,16 +458,37 @@ static int __init idle_setup(char *str)
+@@ -456,16 +460,37 @@ static int __init idle_setup(char *str)
  }
  early_param("idle", idle_setup);
  
  }
  early_param("idle", idle_setup);
  
@@ -27254,7 +26555,7 @@ index f804dc9..7c62095 100644
 +}
 +#endif
 diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
 +}
 +#endif
 diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
-index 7bc86bb..0ea06e8 100644
+index 8f3ebfe..e6ced5a 100644
 --- a/arch/x86/kernel/process_32.c
 +++ b/arch/x86/kernel/process_32.c
 @@ -64,6 +64,7 @@ asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
 --- a/arch/x86/kernel/process_32.c
 +++ b/arch/x86/kernel/process_32.c
 @@ -64,6 +64,7 @@ asmlinkage void ret_from_kernel_thread(void) __asm__("ret_from_kernel_thread");
@@ -27288,7 +26589,7 @@ index 7bc86bb..0ea06e8 100644
        print_symbol("EIP is at %s\n", regs->ip);
  
        printk(KERN_DEFAULT "EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
        print_symbol("EIP is at %s\n", regs->ip);
  
        printk(KERN_DEFAULT "EAX: %08lx EBX: %08lx ECX: %08lx EDX: %08lx\n",
-@@ -132,20 +132,21 @@ void release_thread(struct task_struct *dead_task)
+@@ -132,21 +132,22 @@ void release_thread(struct task_struct *dead_task)
  int copy_thread(unsigned long clone_flags, unsigned long sp,
        unsigned long arg, struct task_struct *p)
  {
  int copy_thread(unsigned long clone_flags, unsigned long sp,
        unsigned long arg, struct task_struct *p)
  {
@@ -27300,6 +26601,7 @@ index 7bc86bb..0ea06e8 100644
        p->thread.sp = (unsigned long) childregs;
        p->thread.sp0 = (unsigned long) (childregs+1);
 +      p->tinfo.lowest_stack = (unsigned long)task_stack_page(p);
        p->thread.sp = (unsigned long) childregs;
        p->thread.sp0 = (unsigned long) (childregs+1);
 +      p->tinfo.lowest_stack = (unsigned long)task_stack_page(p);
+       memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));
  
        if (unlikely(p->flags & PF_KTHREAD)) {
                /* kernel thread */
  
        if (unlikely(p->flags & PF_KTHREAD)) {
                /* kernel thread */
@@ -27314,7 +26616,7 @@ index 7bc86bb..0ea06e8 100644
                childregs->fs = __KERNEL_PERCPU;
                childregs->bx = sp;     /* function */
                childregs->bp = arg;
                childregs->fs = __KERNEL_PERCPU;
                childregs->bx = sp;     /* function */
                childregs->bp = arg;
-@@ -252,7 +253,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -248,7 +249,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
        struct thread_struct *prev = &prev_p->thread,
                                 *next = &next_p->thread;
        int cpu = smp_processor_id();
        struct thread_struct *prev = &prev_p->thread,
                                 *next = &next_p->thread;
        int cpu = smp_processor_id();
@@ -27323,7 +26625,7 @@ index 7bc86bb..0ea06e8 100644
        fpu_switch_t fpu;
  
        /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
        fpu_switch_t fpu;
  
        /* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
-@@ -276,6 +277,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -272,6 +273,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
         */
        lazy_save_gs(prev->gs);
  
         */
        lazy_save_gs(prev->gs);
  
@@ -27334,7 +26636,7 @@ index 7bc86bb..0ea06e8 100644
        /*
         * Load the per-thread Thread-Local Storage descriptor.
         */
        /*
         * Load the per-thread Thread-Local Storage descriptor.
         */
-@@ -314,9 +319,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -310,9 +315,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
         */
        arch_end_context_switch(next_p);
  
         */
        arch_end_context_switch(next_p);
  
@@ -27347,7 +26649,7 @@ index 7bc86bb..0ea06e8 100644
  
        /*
         * Restore %gs if needed (which is common)
  
        /*
         * Restore %gs if needed (which is common)
-@@ -326,8 +331,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -322,8 +327,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
  
        switch_fpu_finish(next_p, fpu);
  
  
        switch_fpu_finish(next_p, fpu);
  
@@ -27356,13 +26658,13 @@ index 7bc86bb..0ea06e8 100644
        return prev_p;
  }
  
        return prev_p;
  }
  
-@@ -357,4 +360,3 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -353,4 +356,3 @@ unsigned long get_wchan(struct task_struct *p)
        } while (count++ < 16);
        return 0;
  }
 -
 diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
        } while (count++ < 16);
        return 0;
  }
 -
 diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
-index ca5b02d..c0b2f6a 100644
+index 5a2c029..a7f67d3 100644
 --- a/arch/x86/kernel/process_64.c
 +++ b/arch/x86/kernel/process_64.c
 @@ -158,10 +158,11 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
 --- a/arch/x86/kernel/process_64.c
 +++ b/arch/x86/kernel/process_64.c
 @@ -158,10 +158,11 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
@@ -27376,9 +26678,9 @@ index ca5b02d..c0b2f6a 100644
        p->thread.usersp = me->thread.usersp;
 +      p->tinfo.lowest_stack = (unsigned long)task_stack_page(p);
        set_tsk_thread_flag(p, TIF_FORK);
        p->thread.usersp = me->thread.usersp;
 +      p->tinfo.lowest_stack = (unsigned long)task_stack_page(p);
        set_tsk_thread_flag(p, TIF_FORK);
-       p->thread.fpu_counter = 0;
        p->thread.io_bitmap_ptr = NULL;
        p->thread.io_bitmap_ptr = NULL;
-@@ -172,6 +173,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
+@@ -171,6 +172,8 @@ int copy_thread(unsigned long clone_flags, unsigned long sp,
        p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs;
        savesegment(es, p->thread.es);
        savesegment(ds, p->thread.ds);
        p->thread.fs = p->thread.fsindex ? 0 : me->thread.fs;
        savesegment(es, p->thread.es);
        savesegment(ds, p->thread.ds);
@@ -27387,7 +26689,7 @@ index ca5b02d..c0b2f6a 100644
        memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));
  
        if (unlikely(p->flags & PF_KTHREAD)) {
        memset(p->thread.ptrace_bps, 0, sizeof(p->thread.ptrace_bps));
  
        if (unlikely(p->flags & PF_KTHREAD)) {
-@@ -280,7 +283,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -277,7 +280,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
        struct thread_struct *prev = &prev_p->thread;
        struct thread_struct *next = &next_p->thread;
        int cpu = smp_processor_id();
        struct thread_struct *prev = &prev_p->thread;
        struct thread_struct *next = &next_p->thread;
        int cpu = smp_processor_id();
@@ -27396,17 +26698,18 @@ index ca5b02d..c0b2f6a 100644
        unsigned fsindex, gsindex;
        fpu_switch_t fpu;
  
        unsigned fsindex, gsindex;
        fpu_switch_t fpu;
  
-@@ -303,6 +306,9 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -331,6 +334,10 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
        if (unlikely(next->ds | prev->ds))
                loadsegment(ds, next->ds);
  
 +      savesegment(ss, prev->ss);
 +      if (unlikely(next->ss != prev->ss))
 +              loadsegment(ss, next->ss);
        if (unlikely(next->ds | prev->ds))
                loadsegment(ds, next->ds);
  
 +      savesegment(ss, prev->ss);
 +      if (unlikely(next->ss != prev->ss))
 +              loadsegment(ss, next->ss);
-       /* We must save %fs and %gs before load_TLS() because
-        * %fs and %gs may be cleared by load_TLS().
-@@ -362,6 +368,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
++
+       /*
+        * Switch FS and GS.
+        *
+@@ -404,6 +411,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
        prev->usersp = this_cpu_read(old_rsp);
        this_cpu_write(old_rsp, next->usersp);
        this_cpu_write(current_task, next_p);
        prev->usersp = this_cpu_read(old_rsp);
        this_cpu_write(old_rsp, next->usersp);
        this_cpu_write(current_task, next_p);
@@ -27414,7 +26717,7 @@ index ca5b02d..c0b2f6a 100644
  
        /*
         * If it were not for PREEMPT_ACTIVE we could guarantee that the
  
        /*
         * If it were not for PREEMPT_ACTIVE we could guarantee that the
-@@ -371,9 +378,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
+@@ -413,9 +421,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
        task_thread_info(prev_p)->saved_preempt_count = this_cpu_read(__preempt_count);
        this_cpu_write(__preempt_count, task_thread_info(next_p)->saved_preempt_count);
  
        task_thread_info(prev_p)->saved_preempt_count = this_cpu_read(__preempt_count);
        this_cpu_write(__preempt_count, task_thread_info(next_p)->saved_preempt_count);
  
@@ -27425,7 +26728,7 @@ index ca5b02d..c0b2f6a 100644
  
        /*
         * Now maybe reload the debug registers and handle I/O bitmaps
  
        /*
         * Now maybe reload the debug registers and handle I/O bitmaps
-@@ -443,12 +448,11 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -485,12 +491,11 @@ unsigned long get_wchan(struct task_struct *p)
        if (!p || p == current || p->state == TASK_RUNNING)
                return 0;
        stack = (unsigned long)task_stack_page(p);
        if (!p || p == current || p->state == TASK_RUNNING)
                return 0;
        stack = (unsigned long)task_stack_page(p);
@@ -27441,7 +26744,7 @@ index ca5b02d..c0b2f6a 100644
                ip = *(u64 *)(fp+8);
                if (!in_sched_functions(ip))
 diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
                ip = *(u64 *)(fp+8);
                if (!in_sched_functions(ip))
 diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
-index b1a5dfa..ed94526 100644
+index e510618..5165ac0 100644
 --- a/arch/x86/kernel/ptrace.c
 +++ b/arch/x86/kernel/ptrace.c
 @@ -186,10 +186,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs)
 --- a/arch/x86/kernel/ptrace.c
 +++ b/arch/x86/kernel/ptrace.c
 @@ -186,10 +186,10 @@ unsigned long kernel_stack_pointer(struct pt_regs *regs)
@@ -27549,8 +26852,8 @@ index b1a5dfa..ed94526 100644
  }
  
  void user_single_step_siginfo(struct task_struct *tsk,
  }
  
  void user_single_step_siginfo(struct task_struct *tsk,
-@@ -1441,6 +1455,10 @@ void send_sigtrap(struct task_struct *tsk, struct pt_regs *regs,
-       force_sig_info(SIGTRAP, &info, tsk);
+@@ -1455,6 +1469,10 @@ static void do_audit_syscall_entry(struct pt_regs *regs, u32 arch)
+       }
  }
  
 +#ifdef CONFIG_GRKERNSEC_SETXID
  }
  
 +#ifdef CONFIG_GRKERNSEC_SETXID
@@ -27558,11 +26861,11 @@ index b1a5dfa..ed94526 100644
 +#endif
 +
  /*
 +#endif
 +
  /*
-  * We must return the syscall number to actually look up in the table.
-  * This can be -1L to skip running any syscall at all.
-@@ -1451,6 +1469,11 @@ long syscall_trace_enter(struct pt_regs *regs)
+  * We can return 0 to resume the syscall or anything else to go to phase
+  * 2.  If we resume the syscall, we need to put something appropriate in
+@@ -1562,6 +1580,11 @@ long syscall_trace_enter_phase2(struct pt_regs *regs, u32 arch,
  
  
-       user_exit();
+       BUG_ON(regs != task_pt_regs(current));
  
 +#ifdef CONFIG_GRKERNSEC_SETXID
 +      if (unlikely(test_and_clear_thread_flag(TIF_GRSEC_SETXID)))
  
 +#ifdef CONFIG_GRKERNSEC_SETXID
 +      if (unlikely(test_and_clear_thread_flag(TIF_GRSEC_SETXID)))
@@ -27572,7 +26875,7 @@ index b1a5dfa..ed94526 100644
        /*
         * If we stepped into a sysenter/syscall insn, it trapped in
         * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
        /*
         * If we stepped into a sysenter/syscall insn, it trapped in
         * kernel mode; do_debug() cleared TF and set TIF_SINGLESTEP.
-@@ -1506,6 +1529,11 @@ void syscall_trace_leave(struct pt_regs *regs)
+@@ -1620,6 +1643,11 @@ void syscall_trace_leave(struct pt_regs *regs)
         */
        user_exit();
  
         */
        user_exit();
  
@@ -27746,7 +27049,7 @@ index 3fd2c69..a444264 100644
  identity_mapped:
        /* set return address to 0 if not preserving context */
 diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
  identity_mapped:
        /* set return address to 0 if not preserving context */
 diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
-index 41ead8d..7ccde23 100644
+index ab08aa2..6d74a3a 100644
 --- a/arch/x86/kernel/setup.c
 +++ b/arch/x86/kernel/setup.c
 @@ -110,6 +110,7 @@
 --- a/arch/x86/kernel/setup.c
 +++ b/arch/x86/kernel/setup.c
 @@ -110,6 +110,7 @@
@@ -27842,7 +27145,7 @@ index 41ead8d..7ccde23 100644
  
        early_reserve_initrd();
  
  
        early_reserve_initrd();
  
-@@ -946,14 +989,14 @@ void __init setup_arch(char **cmdline_p)
+@@ -955,14 +998,14 @@ void __init setup_arch(char **cmdline_p)
  
        if (!boot_params.hdr.root_flags)
                root_mountflags &= ~MS_RDONLY;
  
        if (!boot_params.hdr.root_flags)
                root_mountflags &= ~MS_RDONLY;
@@ -28032,10 +27335,10 @@ index be8e1bd..a3d93fa 100644
        .smp_prepare_cpus       = native_smp_prepare_cpus,
        .smp_cpus_done          = native_smp_cpus_done,
 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
        .smp_prepare_cpus       = native_smp_prepare_cpus,
        .smp_cpus_done          = native_smp_cpus_done,
 diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
-index 42a2dca..35a07aa 100644
+index 668d8f2..84a9d54 100644
 --- a/arch/x86/kernel/smpboot.c
 +++ b/arch/x86/kernel/smpboot.c
 --- a/arch/x86/kernel/smpboot.c
 +++ b/arch/x86/kernel/smpboot.c
-@@ -226,14 +226,17 @@ static void notrace start_secondary(void *unused)
+@@ -194,14 +194,17 @@ static void notrace start_secondary(void *unused)
  
        enable_start_cpu0 = 0;
  
  
        enable_start_cpu0 = 0;
  
@@ -28057,7 +27360,7 @@ index 42a2dca..35a07aa 100644
        /*
         * Check TSC synchronization with the BP:
         */
        /*
         * Check TSC synchronization with the BP:
         */
-@@ -760,8 +763,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+@@ -765,8 +768,9 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
        alternatives_enable_smp();
  
        idle->thread.sp = (unsigned long) (((struct pt_regs *)
        alternatives_enable_smp();
  
        idle->thread.sp = (unsigned long) (((struct pt_regs *)
@@ -28068,7 +27371,7 @@ index 42a2dca..35a07aa 100644
  
  #ifdef CONFIG_X86_32
        /* Stack for startup_32 can be just as for start_secondary onwards */
  
  #ifdef CONFIG_X86_32
        /* Stack for startup_32 can be just as for start_secondary onwards */
-@@ -770,10 +774,10 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
+@@ -775,10 +779,10 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle)
        clear_tsk_thread_flag(idle, TIF_FORK);
        initial_gs = per_cpu_offset(cpu);
  #endif
        clear_tsk_thread_flag(idle, TIF_FORK);
        initial_gs = per_cpu_offset(cpu);
  #endif
@@ -28082,7 +27385,7 @@ index 42a2dca..35a07aa 100644
        initial_code = (unsigned long)start_secondary;
        stack_start  = idle->thread.sp;
  
        initial_code = (unsigned long)start_secondary;
        stack_start  = idle->thread.sp;
  
-@@ -919,6 +923,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
+@@ -918,6 +922,15 @@ int native_cpu_up(unsigned int cpu, struct task_struct *tidle)
        /* the FPU context is blank, nobody can own it */
        __cpu_disable_lazy_restore(cpu);
  
        /* the FPU context is blank, nobody can own it */
        __cpu_disable_lazy_restore(cpu);
  
@@ -28511,10 +27814,10 @@ index 0fa2960..91eabbe 100644
        return pc;
  }
 diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c
        return pc;
  }
 diff --git a/arch/x86/kernel/tls.c b/arch/x86/kernel/tls.c
-index f7fec09..9991981 100644
+index 4e942f3..d0f623f 100644
 --- a/arch/x86/kernel/tls.c
 +++ b/arch/x86/kernel/tls.c
 --- a/arch/x86/kernel/tls.c
 +++ b/arch/x86/kernel/tls.c
-@@ -84,6 +84,11 @@ int do_set_thread_area(struct task_struct *p, int idx,
+@@ -118,6 +118,11 @@ int do_set_thread_area(struct task_struct *p, int idx,
        if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
                return -EINVAL;
  
        if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
                return -EINVAL;
  
@@ -28526,7 +27829,7 @@ index f7fec09..9991981 100644
        set_tls_desc(p, idx, &info, 1);
  
        return 0;
        set_tls_desc(p, idx, &info, 1);
  
        return 0;
-@@ -200,7 +205,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset,
+@@ -235,7 +240,7 @@ int regset_tls_set(struct task_struct *target, const struct user_regset *regset,
  
        if (kbuf)
                info = kbuf;
  
        if (kbuf)
                info = kbuf;
@@ -28554,7 +27857,7 @@ index 1c113db..287b42e 100644
  static int trace_irq_vector_refcount;
  static DEFINE_MUTEX(irq_vector_mutex);
 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
  static int trace_irq_vector_refcount;
  static DEFINE_MUTEX(irq_vector_mutex);
 diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
-index 0d0e922..0886373 100644
+index 07ab8e9..99c8456 100644
 --- a/arch/x86/kernel/traps.c
 +++ b/arch/x86/kernel/traps.c
 @@ -67,7 +67,7 @@
 --- a/arch/x86/kernel/traps.c
 +++ b/arch/x86/kernel/traps.c
 @@ -67,7 +67,7 @@
@@ -28633,7 +27936,7 @@ index 0d0e922..0886373 100644
                        regs->ip, regs->sp, error_code);
                print_vma_addr(" in ", regs->ip);
                pr_cont("\n");
                        regs->ip, regs->sp, error_code);
                print_vma_addr(" in ", regs->ip);
                pr_cont("\n");
-@@ -266,6 +278,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
+@@ -274,6 +286,11 @@ dotraplinkage void do_double_fault(struct pt_regs *regs, long error_code)
        tsk->thread.error_code = error_code;
        tsk->thread.trap_nr = X86_TRAP_DF;
  
        tsk->thread.error_code = error_code;
        tsk->thread.trap_nr = X86_TRAP_DF;
  
@@ -28645,7 +27948,7 @@ index 0d0e922..0886373 100644
  #ifdef CONFIG_DOUBLEFAULT
        df_debug(regs, error_code);
  #endif
  #ifdef CONFIG_DOUBLEFAULT
        df_debug(regs, error_code);
  #endif
-@@ -288,7 +305,7 @@ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -296,7 +313,7 @@ do_general_protection(struct pt_regs *regs, long error_code)
        conditional_sti(regs);
  
  #ifdef CONFIG_X86_32
        conditional_sti(regs);
  
  #ifdef CONFIG_X86_32
@@ -28654,7 +27957,7 @@ index 0d0e922..0886373 100644
                local_irq_enable();
                handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
                goto exit;
                local_irq_enable();
                handle_vm86_fault((struct kernel_vm86_regs *) regs, error_code);
                goto exit;
-@@ -296,18 +313,42 @@ do_general_protection(struct pt_regs *regs, long error_code)
+@@ -304,18 +321,42 @@ do_general_protection(struct pt_regs *regs, long error_code)
  #endif
  
        tsk = current;
  #endif
  
        tsk = current;
@@ -28699,7 +28002,25 @@ index 0d0e922..0886373 100644
        tsk->thread.error_code = error_code;
        tsk->thread.trap_nr = X86_TRAP_GP;
  
        tsk->thread.error_code = error_code;
        tsk->thread.trap_nr = X86_TRAP_GP;
  
-@@ -481,7 +522,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
+@@ -427,13 +468,16 @@ struct bad_iret_stack *fixup_bad_iret(struct bad_iret_stack *s)
+               container_of(task_pt_regs(current),
+                            struct bad_iret_stack, regs);
++      if ((current->thread.sp0 ^ (unsigned long)s) < THREAD_SIZE)
++              new_stack = s;
++
+       /* Copy the IRET target to the new stack. */
+       memmove(&new_stack->regs.ip, (void *)s->regs.sp, 5*8);
+       /* Copy the remainder of the stack from the current stack. */
+       memmove(new_stack, s, offsetof(struct bad_iret_stack, regs.ip));
+-      BUG_ON(!user_mode_vm(&new_stack->regs));
++      BUG_ON(!user_mode(&new_stack->regs));
+       return new_stack;
+ }
+ NOKPROBE_SYMBOL(fixup_bad_iret);
+@@ -519,7 +563,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
        /* It's safe to allow irq's after DR6 has been saved */
        preempt_conditional_sti(regs);
  
        /* It's safe to allow irq's after DR6 has been saved */
        preempt_conditional_sti(regs);
  
@@ -28708,7 +28029,7 @@ index 0d0e922..0886373 100644
                handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code,
                                        X86_TRAP_DB);
                preempt_conditional_cli(regs);
                handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code,
                                        X86_TRAP_DB);
                preempt_conditional_cli(regs);
-@@ -496,7 +537,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
+@@ -534,7 +578,7 @@ dotraplinkage void do_debug(struct pt_regs *regs, long error_code)
         * We already checked v86 mode above, so we can check for kernel mode
         * by just checking the CPL of CS.
         */
         * We already checked v86 mode above, so we can check for kernel mode
         * by just checking the CPL of CS.
         */
@@ -28717,7 +28038,7 @@ index 0d0e922..0886373 100644
                tsk->thread.debugreg6 &= ~DR_STEP;
                set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
                regs->flags &= ~X86_EFLAGS_TF;
                tsk->thread.debugreg6 &= ~DR_STEP;
                set_tsk_thread_flag(tsk, TIF_SINGLESTEP);
                regs->flags &= ~X86_EFLAGS_TF;
-@@ -529,7 +570,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
+@@ -567,7 +611,7 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
                return;
        conditional_sti(regs);
  
                return;
        conditional_sti(regs);
  
@@ -29106,7 +28427,7 @@ index 49edf2d..c0d1362 100644
  
  #ifdef CONFIG_SMP
 diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
  
  #ifdef CONFIG_SMP
 diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
-index e1e1e80..1400089 100644
+index 957779f..74e405c 100644
 --- a/arch/x86/kernel/vsyscall_64.c
 +++ b/arch/x86/kernel/vsyscall_64.c
 @@ -54,15 +54,13 @@
 --- a/arch/x86/kernel/vsyscall_64.c
 +++ b/arch/x86/kernel/vsyscall_64.c
 @@ -54,15 +54,13 @@
@@ -29252,10 +28573,10 @@ index 4c540c4..0b985b0 100644
                if ((unsigned long)buf % 64 || fx_only) {
                        u64 init_bv = pcntxt_mask & ~XSTATE_FPSSE;
 diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
                if ((unsigned long)buf % 64 || fx_only) {
                        u64 init_bv = pcntxt_mask & ~XSTATE_FPSSE;
 diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
-index 38a0afe..94421a9 100644
+index 976e3a5..8bb998c 100644
 --- a/arch/x86/kvm/cpuid.c
 +++ b/arch/x86/kvm/cpuid.c
 --- a/arch/x86/kvm/cpuid.c
 +++ b/arch/x86/kvm/cpuid.c
-@@ -166,15 +166,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
+@@ -175,15 +175,20 @@ int kvm_vcpu_ioctl_set_cpuid2(struct kvm_vcpu *vcpu,
                              struct kvm_cpuid2 *cpuid,
                              struct kvm_cpuid_entry2 __user *entries)
  {
                              struct kvm_cpuid2 *cpuid,
                              struct kvm_cpuid_entry2 __user *entries)
  {
@@ -29279,7 +28600,7 @@ index 38a0afe..94421a9 100644
        vcpu->arch.cpuid_nent = cpuid->nent;
        kvm_apic_set_version(vcpu);
        kvm_x86_ops->cpuid_update(vcpu);
        vcpu->arch.cpuid_nent = cpuid->nent;
        kvm_apic_set_version(vcpu);
        kvm_x86_ops->cpuid_update(vcpu);
-@@ -189,15 +194,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
+@@ -196,15 +201,19 @@ int kvm_vcpu_ioctl_get_cpuid2(struct kvm_vcpu *vcpu,
                              struct kvm_cpuid2 *cpuid,
                              struct kvm_cpuid_entry2 __user *entries)
  {
                              struct kvm_cpuid2 *cpuid,
                              struct kvm_cpuid_entry2 __user *entries)
  {
@@ -29302,8 +28623,30 @@ index 38a0afe..94421a9 100644
        return 0;
  
  out:
        return 0;
  
  out:
+diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
+index 9f8a2fa..2df3c3f 100644
+--- a/arch/x86/kvm/emulate.c
++++ b/arch/x86/kvm/emulate.c
+@@ -3519,7 +3519,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt)
+       int cr = ctxt->modrm_reg;
+       u64 efer = 0;
+-      static u64 cr_reserved_bits[] = {
++      static const u64 cr_reserved_bits[] = {
+               0xffffffff00000000ULL,
+               0, 0, 0, /* CR3 checked later */
+               CR4_RESERVED_BITS,
+@@ -3554,7 +3554,7 @@ static int check_cr_write(struct x86_emulate_ctxt *ctxt)
+               ctxt->ops->get_msr(ctxt, MSR_EFER, &efer);
+               if (efer & EFER_LMA)
+-                      rsvd = CR3_L_MODE_RESERVED_BITS;
++                      rsvd = CR3_L_MODE_RESERVED_BITS & ~CR3_PCID_INVD;
+               if (new_val & rsvd)
+                       return emulate_gp(ctxt, 0);
 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
 diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
-index 08e8a89..0e9183e 100644
+index b8345dd..f225d71 100644
 --- a/arch/x86/kvm/lapic.c
 +++ b/arch/x86/kvm/lapic.c
 @@ -55,7 +55,7 @@
 --- a/arch/x86/kvm/lapic.c
 +++ b/arch/x86/kvm/lapic.c
 @@ -55,7 +55,7 @@
@@ -29316,10 +28659,10 @@ index 08e8a89..0e9183e 100644
  #define APIC_LVT_NUM                  6
  /* 14 is the version for Xeon and Pentium 8.4.8*/
 diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
  #define APIC_LVT_NUM                  6
  /* 14 is the version for Xeon and Pentium 8.4.8*/
 diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h
-index 4107765..d9eb358 100644
+index fd49c86..77e1aa0 100644
 --- a/arch/x86/kvm/paging_tmpl.h
 +++ b/arch/x86/kvm/paging_tmpl.h
 --- a/arch/x86/kvm/paging_tmpl.h
 +++ b/arch/x86/kvm/paging_tmpl.h
-@@ -331,7 +331,7 @@ retry_walk:
+@@ -343,7 +343,7 @@ retry_walk:
                if (unlikely(kvm_is_error_hva(host_addr)))
                        goto error;
  
                if (unlikely(kvm_is_error_hva(host_addr)))
                        goto error;
  
@@ -29329,10 +28672,10 @@ index 4107765..d9eb358 100644
                        goto error;
                walker->ptep_user[walker->level - 1] = ptep_user;
 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
                        goto error;
                walker->ptep_user[walker->level - 1] = ptep_user;
 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
-index 78dadc3..fd84599 100644
+index 7527cef..c63a838e 100644
 --- a/arch/x86/kvm/svm.c
 +++ b/arch/x86/kvm/svm.c
 --- a/arch/x86/kvm/svm.c
 +++ b/arch/x86/kvm/svm.c
-@@ -3547,7 +3547,11 @@ static void reload_tss(struct kvm_vcpu *vcpu)
+@@ -3564,7 +3564,11 @@ static void reload_tss(struct kvm_vcpu *vcpu)
        int cpu = raw_smp_processor_id();
  
        struct svm_cpu_data *sd = per_cpu(svm_data, cpu);
        int cpu = raw_smp_processor_id();
  
        struct svm_cpu_data *sd = per_cpu(svm_data, cpu);
@@ -29344,7 +28687,7 @@ index 78dadc3..fd84599 100644
        load_TR_desc();
  }
  
        load_TR_desc();
  }
  
-@@ -3948,6 +3952,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -3965,6 +3969,10 @@ static void svm_vcpu_run(struct kvm_vcpu *vcpu)
  #endif
  #endif
  
  #endif
  #endif
  
@@ -29356,10 +28699,10 @@ index 78dadc3..fd84599 100644
  
        local_irq_disable();
 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
  
        local_irq_disable();
 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
-index 41a5426..c0b3c00 100644
+index 3e556c6..08bbf7f 100644
 --- a/arch/x86/kvm/vmx.c
 +++ b/arch/x86/kvm/vmx.c
 --- a/arch/x86/kvm/vmx.c
 +++ b/arch/x86/kvm/vmx.c
-@@ -1341,12 +1341,12 @@ static void vmcs_write64(unsigned long field, u64 value)
+@@ -1366,12 +1366,12 @@ static void vmcs_write64(unsigned long field, u64 value)
  #endif
  }
  
  #endif
  }
  
@@ -29374,7 +28717,7 @@ index 41a5426..c0b3c00 100644
  {
        vmcs_writel(field, vmcs_readl(field) | mask);
  }
  {
        vmcs_writel(field, vmcs_readl(field) | mask);
  }
-@@ -1606,7 +1606,11 @@ static void reload_tss(void)
+@@ -1631,7 +1631,11 @@ static void reload_tss(void)
        struct desc_struct *descs;
  
        descs = (void *)gdt->address;
        struct desc_struct *descs;
  
        descs = (void *)gdt->address;
@@ -29386,7 +28729,7 @@ index 41a5426..c0b3c00 100644
        load_TR_desc();
  }
  
        load_TR_desc();
  }
  
-@@ -1834,6 +1838,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
+@@ -1859,6 +1863,10 @@ static void vmx_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
                vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */
                vmcs_writel(HOST_GDTR_BASE, gdt->address);   /* 22.2.4 */
  
                vmcs_writel(HOST_TR_BASE, kvm_read_tr_base()); /* 22.2.4 */
                vmcs_writel(HOST_GDTR_BASE, gdt->address);   /* 22.2.4 */
  
@@ -29397,7 +28740,7 @@ index 41a5426..c0b3c00 100644
                rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
                vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
                vmx->loaded_vmcs->cpu = cpu;
                rdmsrl(MSR_IA32_SYSENTER_ESP, sysenter_esp);
                vmcs_writel(HOST_IA32_SYSENTER_ESP, sysenter_esp); /* 22.2.3 */
                vmx->loaded_vmcs->cpu = cpu;
-@@ -2123,7 +2131,7 @@ static void setup_msrs(struct vcpu_vmx *vmx)
+@@ -2148,7 +2156,7 @@ static void setup_msrs(struct vcpu_vmx *vmx)
   * reads and returns guest's timestamp counter "register"
   * guest_tsc = host_tsc + tsc_offset    -- 21.3
   */
   * reads and returns guest's timestamp counter "register"
   * guest_tsc = host_tsc + tsc_offset    -- 21.3
   */
@@ -29406,9 +28749,15 @@ index 41a5426..c0b3c00 100644
  {
        u64 host_tsc, tsc_offset;
  
  {
        u64 host_tsc, tsc_offset;
  
-@@ -3114,8 +3122,11 @@ static __init int hardware_setup(void)
-       if (!cpu_has_vmx_flexpriority())
-               flexpriority_enabled = 0;
+@@ -3146,11 +3154,16 @@ static __init int hardware_setup(void)
+                * page upon invalidation.  No need to do anything if the
+                * processor does not have the APIC_ACCESS_ADDR VMCS field.
+                */
+-              kvm_x86_ops->set_apic_access_page_addr = NULL;
++              pax_open_kernel();
++              *(void **)&kvm_x86_ops->set_apic_access_page_addr = NULL;
++              pax_close_kernel();
+       }
  
 -      if (!cpu_has_vmx_tpr_shadow())
 -              kvm_x86_ops->update_cr8_intercept = NULL;
  
 -      if (!cpu_has_vmx_tpr_shadow())
 -              kvm_x86_ops->update_cr8_intercept = NULL;
@@ -29420,7 +28769,7 @@ index 41a5426..c0b3c00 100644
  
        if (enable_ept && !cpu_has_vmx_ept_2m_page())
                kvm_disable_largepages();
  
        if (enable_ept && !cpu_has_vmx_ept_2m_page())
                kvm_disable_largepages();
-@@ -3126,13 +3137,15 @@ static __init int hardware_setup(void)
+@@ -3161,13 +3174,15 @@ static __init int hardware_setup(void)
        if (!cpu_has_vmx_apicv())
                enable_apicv = 0;
  
        if (!cpu_has_vmx_apicv())
                enable_apicv = 0;
  
@@ -29440,7 +28789,7 @@ index 41a5426..c0b3c00 100644
  
        if (nested)
                nested_vmx_setup_ctls_msrs();
  
        if (nested)
                nested_vmx_setup_ctls_msrs();
-@@ -4242,7 +4255,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4274,7 +4289,10 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
        unsigned long cr4;
  
        vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS);  /* 22.2.3 */
        unsigned long cr4;
  
        vmcs_writel(HOST_CR0, read_cr0() & ~X86_CR0_TS);  /* 22.2.3 */
@@ -29451,7 +28800,7 @@ index 41a5426..c0b3c00 100644
  
        /* Save the most likely value for this task's CR4 in the VMCS. */
        cr4 = read_cr4();
  
        /* Save the most likely value for this task's CR4 in the VMCS. */
        cr4 = read_cr4();
-@@ -4269,7 +4285,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
+@@ -4301,7 +4319,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
        vmcs_writel(HOST_IDTR_BASE, dt.address);   /* 22.2.4 */
        vmx->host_idt_base = dt.address;
  
        vmcs_writel(HOST_IDTR_BASE, dt.address);   /* 22.2.4 */
        vmx->host_idt_base = dt.address;
  
@@ -29460,7 +28809,7 @@ index 41a5426..c0b3c00 100644
  
        rdmsr(MSR_IA32_SYSENTER_CS, low32, high32);
        vmcs_write32(HOST_IA32_SYSENTER_CS, low32);
  
        rdmsr(MSR_IA32_SYSENTER_CS, low32, high32);
        vmcs_write32(HOST_IA32_SYSENTER_CS, low32);
-@@ -7475,6 +7491,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -7622,6 +7640,12 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
                "jmp 2f \n\t"
                "1: " __ex(ASM_VMX_VMRESUME) "\n\t"
                "2: "
                "jmp 2f \n\t"
                "1: " __ex(ASM_VMX_VMRESUME) "\n\t"
                "2: "
@@ -29473,7 +28822,7 @@ index 41a5426..c0b3c00 100644
                /* Save guest registers, load host registers, keep flags */
                "mov %0, %c[wordsize](%%" _ASM_SP ") \n\t"
                "pop %0 \n\t"
                /* Save guest registers, load host registers, keep flags */
                "mov %0, %c[wordsize](%%" _ASM_SP ") \n\t"
                "pop %0 \n\t"
-@@ -7527,6 +7549,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -7674,6 +7698,11 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
  #endif
                [cr2]"i"(offsetof(struct vcpu_vmx, vcpu.arch.cr2)),
                [wordsize]"i"(sizeof(ulong))
  #endif
                [cr2]"i"(offsetof(struct vcpu_vmx, vcpu.arch.cr2)),
                [wordsize]"i"(sizeof(ulong))
@@ -29485,7 +28834,7 @@ index 41a5426..c0b3c00 100644
              : "cc", "memory"
  #ifdef CONFIG_X86_64
                , "rax", "rbx", "rdi", "rsi"
              : "cc", "memory"
  #ifdef CONFIG_X86_64
                , "rax", "rbx", "rdi", "rsi"
-@@ -7540,7 +7567,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -7687,7 +7716,7 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
        if (debugctlmsr)
                update_debugctlmsr(debugctlmsr);
  
        if (debugctlmsr)
                update_debugctlmsr(debugctlmsr);
  
@@ -29494,7 +28843,7 @@ index 41a5426..c0b3c00 100644
        /*
         * The sysexit path does not restore ds/es, so we must set them to
         * a reasonable value ourselves.
        /*
         * The sysexit path does not restore ds/es, so we must set them to
         * a reasonable value ourselves.
-@@ -7549,8 +7576,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+@@ -7696,8 +7725,18 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
         * may be executed in interrupt context, which saves and restore segments
         * around it, nullifying its effect.
         */
         * may be executed in interrupt context, which saves and restore segments
         * around it, nullifying its effect.
         */
@@ -29516,10 +28865,19 @@ index 41a5426..c0b3c00 100644
  
        vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP)
 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
  
        vcpu->arch.regs_avail = ~((1 << VCPU_REGS_RIP) | (1 << VCPU_REGS_RSP)
 diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index d6aeccf..cea125a 100644
+index 0033df3..db6236d 100644
 --- a/arch/x86/kvm/x86.c
 +++ b/arch/x86/kvm/x86.c
 --- a/arch/x86/kvm/x86.c
 +++ b/arch/x86/kvm/x86.c
-@@ -1857,8 +1857,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
+@@ -732,6 +732,8 @@ EXPORT_SYMBOL_GPL(kvm_set_cr4);
+ int kvm_set_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
+ {
++      cr3 &= ~CR3_PCID_INVD;
++
+       if (cr3 == kvm_read_cr3(vcpu) && !pdptrs_changed(vcpu)) {
+               kvm_mmu_sync_roots(vcpu);
+               kvm_make_request(KVM_REQ_TLB_FLUSH, vcpu);
+@@ -1878,8 +1880,8 @@ static int xen_hvm_config(struct kvm_vcpu *vcpu, u64 data)
  {
        struct kvm *kvm = vcpu->kvm;
        int lm = is_long_mode(vcpu);
  {
        struct kvm *kvm = vcpu->kvm;
        int lm = is_long_mode(vcpu);
@@ -29530,7 +28888,7 @@ index d6aeccf..cea125a 100644
        u8 blob_size = lm ? kvm->arch.xen_hvm_config.blob_size_64
                : kvm->arch.xen_hvm_config.blob_size_32;
        u32 page_num = data & ~PAGE_MASK;
        u8 blob_size = lm ? kvm->arch.xen_hvm_config.blob_size_64
                : kvm->arch.xen_hvm_config.blob_size_32;
        u32 page_num = data & ~PAGE_MASK;
-@@ -2779,6 +2779,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
+@@ -2806,6 +2808,8 @@ long kvm_arch_dev_ioctl(struct file *filp,
                if (n < msr_list.nmsrs)
                        goto out;
                r = -EFAULT;
                if (n < msr_list.nmsrs)
                        goto out;
                r = -EFAULT;
@@ -29539,7 +28897,7 @@ index d6aeccf..cea125a 100644
                if (copy_to_user(user_msr_list->indices, &msrs_to_save,
                                 num_msrs_to_save * sizeof(u32)))
                        goto out;
                if (copy_to_user(user_msr_list->indices, &msrs_to_save,
                                 num_msrs_to_save * sizeof(u32)))
                        goto out;
-@@ -5639,7 +5641,7 @@ static struct notifier_block pvclock_gtod_notifier = {
+@@ -5670,7 +5674,7 @@ static struct notifier_block pvclock_gtod_notifier = {
  };
  #endif
  
  };
  #endif
  
@@ -30334,18 +29692,27 @@ index f2145cf..cea889d 100644
        .byte (clear_page_c - clear_page) - (2f - 1b)   /* offset */
  2:    .byte 0xeb                                      /* jmp <disp8> */
 diff --git a/arch/x86/lib/cmpxchg16b_emu.S b/arch/x86/lib/cmpxchg16b_emu.S
        .byte (clear_page_c - clear_page) - (2f - 1b)   /* offset */
  2:    .byte 0xeb                                      /* jmp <disp8> */
 diff --git a/arch/x86/lib/cmpxchg16b_emu.S b/arch/x86/lib/cmpxchg16b_emu.S
-index 1e572c5..2a162cd 100644
+index 40a1725..5d12ac4 100644
 --- a/arch/x86/lib/cmpxchg16b_emu.S
 +++ b/arch/x86/lib/cmpxchg16b_emu.S
 --- a/arch/x86/lib/cmpxchg16b_emu.S
 +++ b/arch/x86/lib/cmpxchg16b_emu.S
-@@ -53,11 +53,13 @@ this_cpu_cmpxchg16b_emu:
+@@ -8,6 +8,7 @@
+ #include <linux/linkage.h>
+ #include <asm/dwarf2.h>
+ #include <asm/percpu.h>
++#include <asm/alternative-asm.h>
+ .text
  
  
-       popf
+@@ -46,12 +47,14 @@ CFI_STARTPROC
+       CFI_REMEMBER_STATE
+       popfq_cfi
        mov $1, %al
 +      pax_force_retaddr
        ret
  
        mov $1, %al
 +      pax_force_retaddr
        ret
  
-  not_same:
-       popf
+       CFI_RESTORE_STATE
+ .Lnot_same:
+       popfq_cfi
        xor %al,%al
 +      pax_force_retaddr
        ret
        xor %al,%al
 +      pax_force_retaddr
        ret
@@ -30692,10 +30059,10 @@ index 2419d5f..fe52d0e 100644
        CFI_RESTORE_STATE
  
 diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c
        CFI_RESTORE_STATE
  
 diff --git a/arch/x86/lib/csum-wrappers_64.c b/arch/x86/lib/csum-wrappers_64.c
-index 7609e0e..b449b98 100644
+index 1318f75..44c30fd 100644
 --- a/arch/x86/lib/csum-wrappers_64.c
 +++ b/arch/x86/lib/csum-wrappers_64.c
 --- a/arch/x86/lib/csum-wrappers_64.c
 +++ b/arch/x86/lib/csum-wrappers_64.c
-@@ -53,10 +53,12 @@ csum_partial_copy_from_user(const void __user *src, void *dst,
+@@ -52,10 +52,12 @@ csum_partial_copy_from_user(const void __user *src, void *dst,
                        len -= 2;
                }
        }
                        len -= 2;
                }
        }
@@ -30709,7 +30076,7 @@ index 7609e0e..b449b98 100644
        if (unlikely(*errp))
                goto out_err;
  
        if (unlikely(*errp))
                goto out_err;
  
-@@ -110,10 +112,12 @@ csum_partial_copy_to_user(const void *src, void __user *dst,
+@@ -109,10 +111,12 @@ csum_partial_copy_to_user(const void *src, void __user *dst,
        }
  
        *errp = 0;
        }
  
        *errp = 0;
@@ -31549,80 +30916,6 @@ index fc6ba17..d4d989d 100644
  #endif
        xor %eax,%eax
        EXIT
  #endif
        xor %eax,%eax
        EXIT
-diff --git a/arch/x86/lib/rwlock.S b/arch/x86/lib/rwlock.S
-index 1cad221..de671ee 100644
---- a/arch/x86/lib/rwlock.S
-+++ b/arch/x86/lib/rwlock.S
-@@ -16,13 +16,34 @@ ENTRY(__write_lock_failed)
-       FRAME
- 0:    LOCK_PREFIX
-       WRITE_LOCK_ADD($RW_LOCK_BIAS) (%__lock_ptr)
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      jno 1234f
-+      LOCK_PREFIX
-+      WRITE_LOCK_SUB($RW_LOCK_BIAS) (%__lock_ptr)
-+      int $4
-+1234:
-+      _ASM_EXTABLE(1234b, 1234b)
-+#endif
-+
- 1:    rep; nop
-       cmpl    $WRITE_LOCK_CMP, (%__lock_ptr)
-       jne     1b
-       LOCK_PREFIX
-       WRITE_LOCK_SUB($RW_LOCK_BIAS) (%__lock_ptr)
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      jno 1234f
-+      LOCK_PREFIX
-+      WRITE_LOCK_ADD($RW_LOCK_BIAS) (%__lock_ptr)
-+      int $4
-+1234:
-+      _ASM_EXTABLE(1234b, 1234b)
-+#endif
-+
-       jnz     0b
-       ENDFRAME
-+      pax_force_retaddr
-       ret
-       CFI_ENDPROC
- END(__write_lock_failed)
-@@ -32,13 +53,34 @@ ENTRY(__read_lock_failed)
-       FRAME
- 0:    LOCK_PREFIX
-       READ_LOCK_SIZE(inc) (%__lock_ptr)
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      jno 1234f
-+      LOCK_PREFIX
-+      READ_LOCK_SIZE(dec) (%__lock_ptr)
-+      int $4
-+1234:
-+      _ASM_EXTABLE(1234b, 1234b)
-+#endif
-+
- 1:    rep; nop
-       READ_LOCK_SIZE(cmp) $1, (%__lock_ptr)
-       js      1b
-       LOCK_PREFIX
-       READ_LOCK_SIZE(dec) (%__lock_ptr)
-+
-+#ifdef CONFIG_PAX_REFCOUNT
-+      jno 1234f
-+      LOCK_PREFIX
-+      READ_LOCK_SIZE(inc) (%__lock_ptr)
-+      int $4
-+1234:
-+      _ASM_EXTABLE(1234b, 1234b)
-+#endif
-+
-       js      0b
-       ENDFRAME
-+      pax_force_retaddr
-       ret
-       CFI_ENDPROC
- END(__read_lock_failed)
 diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S
 index 5dff5f0..cadebf4 100644
 --- a/arch/x86/lib/rwsem.S
 diff --git a/arch/x86/lib/rwsem.S b/arch/x86/lib/rwsem.S
 index 5dff5f0..cadebf4 100644
 --- a/arch/x86/lib/rwsem.S
@@ -31662,7 +30955,7 @@ index 5dff5f0..cadebf4 100644
        CFI_ENDPROC
  ENDPROC(call_rwsem_downgrade_wake)
 diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S
        CFI_ENDPROC
  ENDPROC(call_rwsem_downgrade_wake)
 diff --git a/arch/x86/lib/thunk_64.S b/arch/x86/lib/thunk_64.S
-index 92d9fea..b2762c8 100644
+index b30b5eb..2b57052 100644
 --- a/arch/x86/lib/thunk_64.S
 +++ b/arch/x86/lib/thunk_64.S
 @@ -9,6 +9,7 @@
 --- a/arch/x86/lib/thunk_64.S
 +++ b/arch/x86/lib/thunk_64.S
 @@ -9,6 +9,7 @@
@@ -31688,7 +30981,7 @@ index 92d9fea..b2762c8 100644
        .endif
  
        call \func
        .endif
  
        call \func
-@@ -40,9 +41,10 @@
+@@ -47,9 +48,10 @@
  
        /* SAVE_ARGS below is used only for the .cfi directives it contains. */
        CFI_STARTPROC
  
        /* SAVE_ARGS below is used only for the .cfi directives it contains. */
        CFI_STARTPROC
@@ -32411,10 +31704,10 @@ index 903ec1e..c4166b2 100644
  }
  
 diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
  }
  
 diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
-index a241946..d7a04cf 100644
+index d973e61..fb868e9 100644
 --- a/arch/x86/mm/fault.c
 +++ b/arch/x86/mm/fault.c
 --- a/arch/x86/mm/fault.c
 +++ b/arch/x86/mm/fault.c
-@@ -14,12 +14,19 @@
+@@ -13,12 +13,19 @@
  #include <linux/hugetlb.h>            /* hstate_index_to_shift        */
  #include <linux/prefetch.h>           /* prefetchw                    */
  #include <linux/context_tracking.h>   /* exception_enter(), ...       */
  #include <linux/hugetlb.h>            /* hstate_index_to_shift        */
  #include <linux/prefetch.h>           /* prefetchw                    */
  #include <linux/context_tracking.h>   /* exception_enter(), ...       */
@@ -32434,7 +31727,7 @@ index a241946..d7a04cf 100644
  
  #define CREATE_TRACE_POINTS
  #include <asm/trace/exceptions.h>
  
  #define CREATE_TRACE_POINTS
  #include <asm/trace/exceptions.h>
-@@ -60,7 +67,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs)
+@@ -59,7 +66,7 @@ static nokprobe_inline int kprobes_fault(struct pt_regs *regs)
        int ret = 0;
  
        /* kprobe_running() needs smp_processor_id() */
        int ret = 0;
  
        /* kprobe_running() needs smp_processor_id() */
@@ -32443,7 +31736,7 @@ index a241946..d7a04cf 100644
                preempt_disable();
                if (kprobe_running() && kprobe_fault_handler(regs, 14))
                        ret = 1;
                preempt_disable();
                if (kprobe_running() && kprobe_fault_handler(regs, 14))
                        ret = 1;
-@@ -121,7 +128,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr,
+@@ -120,7 +127,10 @@ check_prefetch_opcode(struct pt_regs *regs, unsigned char *instr,
                return !instr_lo || (instr_lo>>1) == 1;
        case 0x00:
                /* Prefetch instruction is 0x0F0D or 0x0F18 */
                return !instr_lo || (instr_lo>>1) == 1;
        case 0x00:
                /* Prefetch instruction is 0x0F0D or 0x0F18 */
@@ -32455,7 +31748,7 @@ index a241946..d7a04cf 100644
                        return 0;
  
                *prefetch = (instr_lo == 0xF) &&
                        return 0;
  
                *prefetch = (instr_lo == 0xF) &&
-@@ -155,7 +165,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
+@@ -154,7 +164,10 @@ is_prefetch(struct pt_regs *regs, unsigned long error_code, unsigned long addr)
        while (instr < max_instr) {
                unsigned char opcode;
  
        while (instr < max_instr) {
                unsigned char opcode;
  
@@ -32467,7 +31760,7 @@ index a241946..d7a04cf 100644
                        break;
  
                instr++;
                        break;
  
                instr++;
-@@ -186,6 +199,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address,
+@@ -185,6 +198,34 @@ force_sig_info_fault(int si_signo, int si_code, unsigned long address,
        force_sig_info(si_signo, &info, tsk);
  }
  
        force_sig_info(si_signo, &info, tsk);
  }
  
@@ -32502,7 +31795,7 @@ index a241946..d7a04cf 100644
  DEFINE_SPINLOCK(pgd_lock);
  LIST_HEAD(pgd_list);
  
  DEFINE_SPINLOCK(pgd_lock);
  LIST_HEAD(pgd_list);
  
-@@ -236,10 +277,27 @@ void vmalloc_sync_all(void)
+@@ -235,10 +276,27 @@ void vmalloc_sync_all(void)
        for (address = VMALLOC_START & PMD_MASK;
             address >= TASK_SIZE && address < FIXADDR_TOP;
             address += PMD_SIZE) {
        for (address = VMALLOC_START & PMD_MASK;
             address >= TASK_SIZE && address < FIXADDR_TOP;
             address += PMD_SIZE) {
@@ -32530,7 +31823,7 @@ index a241946..d7a04cf 100644
                        spinlock_t *pgt_lock;
                        pmd_t *ret;
  
                        spinlock_t *pgt_lock;
                        pmd_t *ret;
  
-@@ -247,8 +305,14 @@ void vmalloc_sync_all(void)
+@@ -246,8 +304,14 @@ void vmalloc_sync_all(void)
                        pgt_lock = &pgd_page_get_mm(page)->page_table_lock;
  
                        spin_lock(pgt_lock);
                        pgt_lock = &pgd_page_get_mm(page)->page_table_lock;
  
                        spin_lock(pgt_lock);
@@ -32546,7 +31839,7 @@ index a241946..d7a04cf 100644
  
                        if (!ret)
                                break;
  
                        if (!ret)
                                break;
-@@ -282,6 +346,12 @@ static noinline int vmalloc_fault(unsigned long address)
+@@ -281,6 +345,12 @@ static noinline int vmalloc_fault(unsigned long address)
         * an interrupt in the middle of a task switch..
         */
        pgd_paddr = read_cr3();
         * an interrupt in the middle of a task switch..
         */
        pgd_paddr = read_cr3();
@@ -32559,7 +31852,7 @@ index a241946..d7a04cf 100644
        pmd_k = vmalloc_sync_one(__va(pgd_paddr), address);
        if (!pmd_k)
                return -1;
        pmd_k = vmalloc_sync_one(__va(pgd_paddr), address);
        if (!pmd_k)
                return -1;
-@@ -378,11 +448,25 @@ static noinline int vmalloc_fault(unsigned long address)
+@@ -377,11 +447,25 @@ static noinline int vmalloc_fault(unsigned long address)
         * happen within a race in page table update. In the later
         * case just flush:
         */
         * happen within a race in page table update. In the later
         * case just flush:
         */
@@ -32586,7 +31879,7 @@ index a241946..d7a04cf 100644
        if (pgd_none(*pgd)) {
                set_pgd(pgd, *pgd_ref);
                arch_flush_lazy_mmu_mode();
        if (pgd_none(*pgd)) {
                set_pgd(pgd, *pgd_ref);
                arch_flush_lazy_mmu_mode();
-@@ -549,7 +633,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address)
+@@ -548,7 +632,7 @@ static int is_errata93(struct pt_regs *regs, unsigned long address)
  static int is_errata100(struct pt_regs *regs, unsigned long address)
  {
  #ifdef CONFIG_X86_64
  static int is_errata100(struct pt_regs *regs, unsigned long address)
  {
  #ifdef CONFIG_X86_64
@@ -32595,7 +31888,7 @@ index a241946..d7a04cf 100644
                return 1;
  #endif
        return 0;
                return 1;
  #endif
        return 0;
-@@ -576,9 +660,9 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address)
+@@ -575,9 +659,9 @@ static int is_f00f_bug(struct pt_regs *regs, unsigned long address)
  }
  
  static const char nx_warning[] = KERN_CRIT
  }
  
  static const char nx_warning[] = KERN_CRIT
@@ -32607,7 +31900,7 @@ index a241946..d7a04cf 100644
  
  static void
  show_fault_oops(struct pt_regs *regs, unsigned long error_code,
  
  static void
  show_fault_oops(struct pt_regs *regs, unsigned long error_code,
-@@ -587,7 +671,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code,
+@@ -586,7 +670,7 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code,
        if (!oops_may_print())
                return;
  
        if (!oops_may_print())
                return;
  
@@ -32616,7 +31909,7 @@ index a241946..d7a04cf 100644
                unsigned int level;
                pgd_t *pgd;
                pte_t *pte;
                unsigned int level;
                pgd_t *pgd;
                pte_t *pte;
-@@ -598,13 +682,25 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code,
+@@ -597,13 +681,25 @@ show_fault_oops(struct pt_regs *regs, unsigned long error_code,
                pte = lookup_address_in_pgd(pgd, address, &level);
  
                if (pte && pte_present(*pte) && !pte_exec(*pte))
                pte = lookup_address_in_pgd(pgd, address, &level);
  
                if (pte && pte_present(*pte) && !pte_exec(*pte))
@@ -32644,7 +31937,7 @@ index a241946..d7a04cf 100644
        printk(KERN_ALERT "BUG: unable to handle kernel ");
        if (address < PAGE_SIZE)
                printk(KERN_CONT "NULL pointer dereference");
        printk(KERN_ALERT "BUG: unable to handle kernel ");
        if (address < PAGE_SIZE)
                printk(KERN_CONT "NULL pointer dereference");
-@@ -785,6 +881,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
+@@ -782,6 +878,22 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
                                return;
                }
  #endif
                                return;
                }
  #endif
@@ -32667,7 +31960,7 @@ index a241946..d7a04cf 100644
                /* Kernel addresses are always protection faults: */
                if (address >= TASK_SIZE)
                        error_code |= PF_PROT;
                /* Kernel addresses are always protection faults: */
                if (address >= TASK_SIZE)
                        error_code |= PF_PROT;
-@@ -870,7 +982,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
+@@ -867,7 +979,7 @@ do_sigbus(struct pt_regs *regs, unsigned long error_code, unsigned long address,
        if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
                printk(KERN_ERR
        "MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n",
        if (fault & (VM_FAULT_HWPOISON|VM_FAULT_HWPOISON_LARGE)) {
                printk(KERN_ERR
        "MCE: Killing %s:%d due to hardware memory corruption fault at %lx\n",
@@ -32676,7 +31969,7 @@ index a241946..d7a04cf 100644
                code = BUS_MCEERR_AR;
        }
  #endif
                code = BUS_MCEERR_AR;
        }
  #endif
-@@ -924,6 +1036,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
+@@ -921,6 +1033,99 @@ static int spurious_fault_check(unsigned long error_code, pte_t *pte)
        return 1;
  }
  
        return 1;
  }
  
@@ -32776,7 +32069,7 @@ index a241946..d7a04cf 100644
  /*
   * Handle a spurious fault caused by a stale TLB entry.
   *
  /*
   * Handle a spurious fault caused by a stale TLB entry.
   *
-@@ -991,6 +1196,9 @@ int show_unhandled_signals = 1;
+@@ -1006,6 +1211,9 @@ int show_unhandled_signals = 1;
  static inline int
  access_error(unsigned long error_code, struct vm_area_struct *vma)
  {
  static inline int
  access_error(unsigned long error_code, struct vm_area_struct *vma)
  {
@@ -32786,7 +32079,7 @@ index a241946..d7a04cf 100644
        if (error_code & PF_WRITE) {
                /* write, present and write, not present: */
                if (unlikely(!(vma->vm_flags & VM_WRITE)))
        if (error_code & PF_WRITE) {
                /* write, present and write, not present: */
                if (unlikely(!(vma->vm_flags & VM_WRITE)))
-@@ -1025,7 +1233,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs)
+@@ -1040,7 +1248,7 @@ static inline bool smap_violation(int error_code, struct pt_regs *regs)
        if (error_code & PF_USER)
                return false;
  
        if (error_code & PF_USER)
                return false;
  
@@ -32795,7 +32088,7 @@ index a241946..d7a04cf 100644
                return false;
  
        return true;
                return false;
  
        return true;
-@@ -1053,6 +1261,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
+@@ -1068,6 +1276,22 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
        tsk = current;
        mm = tsk->mm;
  
        tsk = current;
        mm = tsk->mm;
  
@@ -32818,7 +32111,7 @@ index a241946..d7a04cf 100644
        /*
         * Detect and handle instructions that would cause a page fault for
         * both a tracked kernel page and a userspace page.
        /*
         * Detect and handle instructions that would cause a page fault for
         * both a tracked kernel page and a userspace page.
-@@ -1130,7 +1354,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
+@@ -1145,7 +1369,7 @@ __do_page_fault(struct pt_regs *regs, unsigned long error_code,
         * User-mode registers count as a user access even for any
         * potential system fault or CPU buglet:
         */
         * User-mode registers count as a user access even for any
         * potential system fault or CPU buglet:
         */
@@ -32827,7 +32120,7 @@ index a241946..d7a04cf 100644
                local_irq_enable();
                error_code |= PF_USER;
                flags |= FAULT_FLAG_USER;
                local_irq_enable();
                error_code |= PF_USER;
                flags |= FAULT_FLAG_USER;
-@@ -1177,6 +1401,11 @@ retry:
+@@ -1192,6 +1416,11 @@ retry:
                might_sleep();
        }
  
                might_sleep();
        }
  
@@ -32839,7 +32132,7 @@ index a241946..d7a04cf 100644
        vma = find_vma(mm, address);
        if (unlikely(!vma)) {
                bad_area(regs, error_code, address);
        vma = find_vma(mm, address);
        if (unlikely(!vma)) {
                bad_area(regs, error_code, address);
-@@ -1188,18 +1417,24 @@ retry:
+@@ -1203,18 +1432,24 @@ retry:
                bad_area(regs, error_code, address);
                return;
        }
                bad_area(regs, error_code, address);
                return;
        }
@@ -32875,7 +32168,7 @@ index a241946..d7a04cf 100644
        if (unlikely(expand_stack(vma, address))) {
                bad_area(regs, error_code, address);
                return;
        if (unlikely(expand_stack(vma, address))) {
                bad_area(regs, error_code, address);
                return;
-@@ -1316,3 +1551,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
+@@ -1331,3 +1566,292 @@ trace_do_page_fault(struct pt_regs *regs, unsigned long error_code)
  }
  NOKPROBE_SYMBOL(trace_do_page_fault);
  #endif /* CONFIG_TRACING */
  }
  NOKPROBE_SYMBOL(trace_do_page_fault);
  #endif /* CONFIG_TRACING */
@@ -33511,7 +32804,7 @@ index 66dba36..f8082ec 100644
                        (unsigned long)(&__init_begin),
                        (unsigned long)(&__init_end));
 diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
                        (unsigned long)(&__init_begin),
                        (unsigned long)(&__init_end));
 diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
-index 7d05565..bfc5338 100644
+index c8140e1..59257fc 100644
 --- a/arch/x86/mm/init_32.c
 +++ b/arch/x86/mm/init_32.c
 @@ -62,33 +62,6 @@ static noinline int do_test_wp_bit(void);
 --- a/arch/x86/mm/init_32.c
 +++ b/arch/x86/mm/init_32.c
 @@ -62,33 +62,6 @@ static noinline int do_test_wp_bit(void);
@@ -33720,8 +33013,8 @@ index 7d05565..bfc5338 100644
 +      permanent_kmaps_init(swapper_pg_dir);
  }
  
 +      permanent_kmaps_init(swapper_pg_dir);
  }
  
--pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP);
-+pteval_t __supported_pte_mask __read_only = ~(_PAGE_NX | _PAGE_GLOBAL | _PAGE_IOMAP);
+-pteval_t __supported_pte_mask __read_mostly = ~(_PAGE_NX | _PAGE_GLOBAL);
++pteval_t __supported_pte_mask __read_only = ~(_PAGE_NX | _PAGE_GLOBAL);
  EXPORT_SYMBOL_GPL(__supported_pte_mask);
  
  /* user-defined highmem size */
  EXPORT_SYMBOL_GPL(__supported_pte_mask);
  
  /* user-defined highmem size */
@@ -33764,19 +33057,19 @@ index 7d05565..bfc5338 100644
        printk(KERN_INFO "Write protecting the kernel text: %luk\n",
                size >> 10);
 diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
        printk(KERN_INFO "Write protecting the kernel text: %luk\n",
                size >> 10);
 diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
-index 5621c47..5e17b7390 100644
+index 4e5dfec..6fd6dc5 100644
 --- a/arch/x86/mm/init_64.c
 +++ b/arch/x86/mm/init_64.c
 @@ -151,7 +151,7 @@ early_param("gbpages", parse_direct_gbpages_on);
   * around without checking the pgd every time.
   */
  
 --- a/arch/x86/mm/init_64.c
 +++ b/arch/x86/mm/init_64.c
 @@ -151,7 +151,7 @@ early_param("gbpages", parse_direct_gbpages_on);
   * around without checking the pgd every time.
   */
  
--pteval_t __supported_pte_mask __read_mostly = ~_PAGE_IOMAP;
-+pteval_t __supported_pte_mask __read_only = ~(_PAGE_NX | _PAGE_IOMAP);
+-pteval_t __supported_pte_mask __read_mostly = ~0;
++pteval_t __supported_pte_mask __read_only = ~_PAGE_NX;
  EXPORT_SYMBOL_GPL(__supported_pte_mask);
  
  int force_personality32;
  EXPORT_SYMBOL_GPL(__supported_pte_mask);
  
  int force_personality32;
-@@ -184,12 +184,29 @@ void sync_global_pgds(unsigned long start, unsigned long end)
+@@ -184,7 +184,12 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
  
        for (address = start; address <= end; address += PGDIR_SIZE) {
                const pgd_t *pgd_ref = pgd_offset_k(address);
  
        for (address = start; address <= end; address += PGDIR_SIZE) {
                const pgd_t *pgd_ref = pgd_offset_k(address);
@@ -33787,7 +33080,9 @@ index 5621c47..5e17b7390 100644
                struct page *page;
 +#endif
  
                struct page *page;
 +#endif
  
-               if (pgd_none(*pgd_ref))
+               /*
+                * When it is called after memory hot remove, pgd_none()
+@@ -195,6 +200,25 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
                        continue;
  
                spin_lock(&pgd_lock);
                        continue;
  
                spin_lock(&pgd_lock);
@@ -33796,27 +33091,34 @@ index 5621c47..5e17b7390 100644
 +              for (cpu = 0; cpu < nr_cpu_ids; ++cpu) {
 +                      pgd_t *pgd = pgd_offset_cpu(cpu, user, address);
 +
 +              for (cpu = 0; cpu < nr_cpu_ids; ++cpu) {
 +                      pgd_t *pgd = pgd_offset_cpu(cpu, user, address);
 +
-+                      if (pgd_none(*pgd))
-+                              set_pgd(pgd, *pgd_ref);
-+                      else
++                      if (!pgd_none(*pgd_ref) && !pgd_none(*pgd))
 +                              BUG_ON(pgd_page_vaddr(*pgd)
 +                                     != pgd_page_vaddr(*pgd_ref));
 +                              BUG_ON(pgd_page_vaddr(*pgd)
 +                                     != pgd_page_vaddr(*pgd_ref));
++
++                      if (removed) {
++                              if (pgd_none(*pgd_ref) && !pgd_none(*pgd))
++                                      pgd_clear(pgd);
++                      } else {
++                              if (pgd_none(*pgd))
++                                      set_pgd(pgd, *pgd_ref);
++                      }
++
 +                      pgd = pgd_offset_cpu(cpu, kernel, address);
 +#else
                list_for_each_entry(page, &pgd_list, lru) {
                        pgd_t *pgd;
                        spinlock_t *pgt_lock;
 +                      pgd = pgd_offset_cpu(cpu, kernel, address);
 +#else
                list_for_each_entry(page, &pgd_list, lru) {
                        pgd_t *pgd;
                        spinlock_t *pgt_lock;
-@@ -198,6 +215,7 @@ void sync_global_pgds(unsigned long start, unsigned long end)
+@@ -203,6 +227,7 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
                        /* the pgt_lock only for Xen */
                        pgt_lock = &pgd_page_get_mm(page)->page_table_lock;
                        spin_lock(pgt_lock);
 +#endif
  
                        /* the pgt_lock only for Xen */
                        pgt_lock = &pgd_page_get_mm(page)->page_table_lock;
                        spin_lock(pgt_lock);
 +#endif
  
-                       if (pgd_none(*pgd))
-                               set_pgd(pgd, *pgd_ref);
-@@ -205,7 +223,10 @@ void sync_global_pgds(unsigned long start, unsigned long end)
+                       if (!pgd_none(*pgd_ref) && !pgd_none(*pgd))
                                BUG_ON(pgd_page_vaddr(*pgd)
                                BUG_ON(pgd_page_vaddr(*pgd)
-                                      != pgd_page_vaddr(*pgd_ref));
+@@ -216,7 +241,10 @@ void sync_global_pgds(unsigned long start, unsigned long end, int removed)
+                                       set_pgd(pgd, *pgd_ref);
+                       }
  
 +#ifndef CONFIG_PAX_PER_CPU_PGD
                        spin_unlock(pgt_lock);
  
 +#ifndef CONFIG_PAX_PER_CPU_PGD
                        spin_unlock(pgt_lock);
@@ -33825,7 +33127,7 @@ index 5621c47..5e17b7390 100644
                }
                spin_unlock(&pgd_lock);
        }
                }
                spin_unlock(&pgd_lock);
        }
-@@ -238,7 +259,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
+@@ -249,7 +277,7 @@ static pud_t *fill_pud(pgd_t *pgd, unsigned long vaddr)
  {
        if (pgd_none(*pgd)) {
                pud_t *pud = (pud_t *)spp_getpage();
  {
        if (pgd_none(*pgd)) {
                pud_t *pud = (pud_t *)spp_getpage();
@@ -33834,7 +33136,7 @@ index 5621c47..5e17b7390 100644
                if (pud != pud_offset(pgd, 0))
                        printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n",
                               pud, pud_offset(pgd, 0));
                if (pud != pud_offset(pgd, 0))
                        printk(KERN_ERR "PAGETABLE BUG #00! %p <-> %p\n",
                               pud, pud_offset(pgd, 0));
-@@ -250,7 +271,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
+@@ -261,7 +289,7 @@ static pmd_t *fill_pmd(pud_t *pud, unsigned long vaddr)
  {
        if (pud_none(*pud)) {
                pmd_t *pmd = (pmd_t *) spp_getpage();
  {
        if (pud_none(*pud)) {
                pmd_t *pmd = (pmd_t *) spp_getpage();
@@ -33843,7 +33145,7 @@ index 5621c47..5e17b7390 100644
                if (pmd != pmd_offset(pud, 0))
                        printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n",
                               pmd, pmd_offset(pud, 0));
                if (pmd != pmd_offset(pud, 0))
                        printk(KERN_ERR "PAGETABLE BUG #01! %p <-> %p\n",
                               pmd, pmd_offset(pud, 0));
-@@ -279,7 +300,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte)
+@@ -290,7 +318,9 @@ void set_pte_vaddr_pud(pud_t *pud_page, unsigned long vaddr, pte_t new_pte)
        pmd = fill_pmd(pud, vaddr);
        pte = fill_pte(pmd, vaddr);
  
        pmd = fill_pmd(pud, vaddr);
        pte = fill_pte(pmd, vaddr);
  
@@ -33853,7 +33155,7 @@ index 5621c47..5e17b7390 100644
  
        /*
         * It's enough to flush this one mapping.
  
        /*
         * It's enough to flush this one mapping.
-@@ -338,14 +361,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size,
+@@ -349,14 +379,12 @@ static void __init __init_extra_mapping(unsigned long phys, unsigned long size,
                pgd = pgd_offset_k((unsigned long)__va(phys));
                if (pgd_none(*pgd)) {
                        pud = (pud_t *) spp_getpage();
                pgd = pgd_offset_k((unsigned long)__va(phys));
                if (pgd_none(*pgd)) {
                        pud = (pud_t *) spp_getpage();
@@ -33870,7 +33172,7 @@ index 5621c47..5e17b7390 100644
                }
                pmd = pmd_offset(pud, phys);
                BUG_ON(!pmd_none(*pmd));
                }
                pmd = pmd_offset(pud, phys);
                BUG_ON(!pmd_none(*pmd));
-@@ -586,7 +607,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
+@@ -597,7 +625,7 @@ phys_pud_init(pud_t *pud_page, unsigned long addr, unsigned long end,
                                              prot);
  
                spin_lock(&init_mm.page_table_lock);
                                              prot);
  
                spin_lock(&init_mm.page_table_lock);
@@ -33879,7 +33181,7 @@ index 5621c47..5e17b7390 100644
                spin_unlock(&init_mm.page_table_lock);
        }
        __flush_tlb_all();
                spin_unlock(&init_mm.page_table_lock);
        }
        __flush_tlb_all();
-@@ -627,7 +648,7 @@ kernel_physical_mapping_init(unsigned long start,
+@@ -638,7 +666,7 @@ kernel_physical_mapping_init(unsigned long start,
                                                 page_size_mask);
  
                spin_lock(&init_mm.page_table_lock);
                                                 page_size_mask);
  
                spin_lock(&init_mm.page_table_lock);
@@ -33888,7 +33190,7 @@ index 5621c47..5e17b7390 100644
                spin_unlock(&init_mm.page_table_lock);
                pgd_changed = true;
        }
                spin_unlock(&init_mm.page_table_lock);
                pgd_changed = true;
        }
-@@ -1196,8 +1217,8 @@ static struct vm_operations_struct gate_vma_ops = {
+@@ -1217,8 +1245,8 @@ static struct vm_operations_struct gate_vma_ops = {
  static struct vm_area_struct gate_vma = {
        .vm_start       = VSYSCALL_ADDR,
        .vm_end         = VSYSCALL_ADDR + PAGE_SIZE,
  static struct vm_area_struct gate_vma = {
        .vm_start       = VSYSCALL_ADDR,
        .vm_end         = VSYSCALL_ADDR + PAGE_SIZE,
@@ -33916,7 +33218,7 @@ index 7b179b49..6bd17777 100644
  
        return (void *)vaddr;
 diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
  
        return (void *)vaddr;
 diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
-index baff1da..2816ef4 100644
+index af78e50..0790b03 100644
 --- a/arch/x86/mm/ioremap.c
 +++ b/arch/x86/mm/ioremap.c
 @@ -56,8 +56,8 @@ static int __ioremap_check_ram(unsigned long start_pfn, unsigned long nr_pages,
 --- a/arch/x86/mm/ioremap.c
 +++ b/arch/x86/mm/ioremap.c
 @@ -56,8 +56,8 @@ static int __ioremap_check_ram(unsigned long start_pfn, unsigned long nr_pages,
@@ -33930,7 +33232,7 @@ index baff1da..2816ef4 100644
                        return 1;
  
        WARN_ONCE(1, "ioremap on RAM pfn 0x%lx\n", start_pfn);
                        return 1;
  
        WARN_ONCE(1, "ioremap on RAM pfn 0x%lx\n", start_pfn);
-@@ -268,7 +268,7 @@ EXPORT_SYMBOL(ioremap_prot);
+@@ -280,7 +280,7 @@ EXPORT_SYMBOL(ioremap_prot);
   *
   * Caller must ensure there is only one unmapping for the same pointer.
   */
   *
   * Caller must ensure there is only one unmapping for the same pointer.
   */
@@ -33939,7 +33241,7 @@ index baff1da..2816ef4 100644
  {
        struct vm_struct *p, *o;
  
  {
        struct vm_struct *p, *o;
  
-@@ -322,6 +322,9 @@ void *xlate_dev_mem_ptr(unsigned long phys)
+@@ -334,6 +334,9 @@ void *xlate_dev_mem_ptr(unsigned long phys)
  
        /* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
        if (page_is_ram(start >> PAGE_SHIFT))
  
        /* If page is RAM, we can use __va. Otherwise ioremap and unmap. */
        if (page_is_ram(start >> PAGE_SHIFT))
@@ -33949,7 +33251,7 @@ index baff1da..2816ef4 100644
                return __va(phys);
  
        addr = (void __force *)ioremap_cache(start, PAGE_SIZE);
                return __va(phys);
  
        addr = (void __force *)ioremap_cache(start, PAGE_SIZE);
-@@ -334,13 +337,16 @@ void *xlate_dev_mem_ptr(unsigned long phys)
+@@ -346,13 +349,16 @@ void *xlate_dev_mem_ptr(unsigned long phys)
  void unxlate_dev_mem_ptr(unsigned long phys, void *addr)
  {
        if (page_is_ram(phys >> PAGE_SHIFT))
  void unxlate_dev_mem_ptr(unsigned long phys, void *addr)
  {
        if (page_is_ram(phys >> PAGE_SHIFT))
@@ -33967,7 +33269,7 @@ index baff1da..2816ef4 100644
  
  static inline pmd_t * __init early_ioremap_pmd(unsigned long addr)
  {
  
  static inline pmd_t * __init early_ioremap_pmd(unsigned long addr)
  {
-@@ -376,8 +382,7 @@ void __init early_ioremap_init(void)
+@@ -388,8 +394,7 @@ void __init early_ioremap_init(void)
        early_ioremap_setup();
  
        pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN));
        early_ioremap_setup();
  
        pmd = early_ioremap_pmd(fix_to_virt(FIX_BTMAP_BEGIN));
@@ -33978,7 +33280,7 @@ index baff1da..2816ef4 100644
        /*
         * The boot-ioremap range spans multiple pmds, for which
 diff --git a/arch/x86/mm/kmemcheck/kmemcheck.c b/arch/x86/mm/kmemcheck/kmemcheck.c
        /*
         * The boot-ioremap range spans multiple pmds, for which
 diff --git a/arch/x86/mm/kmemcheck/kmemcheck.c b/arch/x86/mm/kmemcheck/kmemcheck.c
-index dd89a13..d77bdcc 100644
+index b4f2e7e..96c9c3e 100644
 --- a/arch/x86/mm/kmemcheck/kmemcheck.c
 +++ b/arch/x86/mm/kmemcheck/kmemcheck.c
 @@ -628,9 +628,9 @@ bool kmemcheck_fault(struct pt_regs *regs, unsigned long address,
 --- a/arch/x86/mm/kmemcheck/kmemcheck.c
 +++ b/arch/x86/mm/kmemcheck/kmemcheck.c
 @@ -628,9 +628,9 @@ bool kmemcheck_fault(struct pt_regs *regs, unsigned long address,
@@ -34120,11 +33422,11 @@ index 0057a7a..95c7edd 100644
        might_sleep();
        if (is_enabled()) /* recheck and proper locking in *_core() */
 diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
        might_sleep();
        if (is_enabled()) /* recheck and proper locking in *_core() */
 diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c
-index a32b706..efb308b 100644
+index 1a88370..3f598b5 100644
 --- a/arch/x86/mm/numa.c
 +++ b/arch/x86/mm/numa.c
 --- a/arch/x86/mm/numa.c
 +++ b/arch/x86/mm/numa.c
-@@ -478,7 +478,7 @@ static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi)
-       return true;
+@@ -499,7 +499,7 @@ static void __init numa_clear_kernel_node_hotplug(void)
+       }
  }
  
 -static int __init numa_register_memblks(struct numa_meminfo *mi)
  }
  
 -static int __init numa_register_memblks(struct numa_meminfo *mi)
@@ -34610,7 +33912,7 @@ index 6fb6927..4fc13c0 100644
        paravirt_pgd_free(mm, pgd);
        free_page((unsigned long)pgd);
 diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
        paravirt_pgd_free(mm, pgd);
        free_page((unsigned long)pgd);
 diff --git a/arch/x86/mm/pgtable_32.c b/arch/x86/mm/pgtable_32.c
-index 4dd8cf6..f9d143e 100644
+index 75cc097..79a097f 100644
 --- a/arch/x86/mm/pgtable_32.c
 +++ b/arch/x86/mm/pgtable_32.c
 @@ -47,10 +47,13 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pteval)
 --- a/arch/x86/mm/pgtable_32.c
 +++ b/arch/x86/mm/pgtable_32.c
 @@ -47,10 +47,13 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pteval)
@@ -34831,12 +34133,12 @@ index 6440221..f84b5c7 100644
 +      pax_force_retaddr
        ret
 diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
 +      pax_force_retaddr
        ret
 diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
-index c881ba8..71aca2e 100644
+index 3f62734..a57894f 100644
 --- a/arch/x86/net/bpf_jit_comp.c
 +++ b/arch/x86/net/bpf_jit_comp.c
 --- a/arch/x86/net/bpf_jit_comp.c
 +++ b/arch/x86/net/bpf_jit_comp.c
-@@ -15,7 +15,11 @@
+@@ -13,7 +13,11 @@
  #include <linux/if_vlan.h>
  #include <linux/if_vlan.h>
- #include <linux/random.h>
+ #include <asm/cacheflush.h>
  
 +#ifdef CONFIG_GRKERNSEC_BPF_HARDEN
 +int bpf_jit_enable __read_only;
  
 +#ifdef CONFIG_GRKERNSEC_BPF_HARDEN
 +int bpf_jit_enable __read_only;
@@ -34846,55 +34148,17 @@ index c881ba8..71aca2e 100644
  
  /*
   * assembly code in arch/x86/net/bpf_jit.S
  
  /*
   * assembly code in arch/x86/net/bpf_jit.S
-@@ -109,36 +113,32 @@ static inline void bpf_flush_icache(void *start, void *end)
- #define CHOOSE_LOAD_FUNC(K, func) \
-       ((int)K < 0 ? ((int)K >= SKF_LL_OFF ? func##_negative_offset : func) : func##_positive_offset)
--struct bpf_binary_header {
--      unsigned int    pages;
--      /* Note : for security reasons, bpf code will follow a randomly
--       * sized amount of int3 instructions
--       */
--      u8              image[];
--};
--
--static struct bpf_binary_header *bpf_alloc_binary(unsigned int proglen,
-+/* Note : for security reasons, bpf code will follow a randomly
-+ * sized amount of int3 instructions
-+ */
-+static u8 *bpf_alloc_binary(unsigned int proglen,
-                                                 u8 **image_ptr)
+@@ -174,7 +178,9 @@ static inline u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
+ static void jit_fill_hole(void *area, unsigned int size)
  {
  {
-       unsigned int sz, hole;
--      struct bpf_binary_header *header;
-+      u8 *header;
-       /* Most of BPF filters are really small,
-        * but if some of them fill a page, allow at least
-        * 128 extra bytes to insert a random section of int3
-        */
--      sz = round_up(proglen + sizeof(*header) + 128, PAGE_SIZE);
--      header = module_alloc(sz);
-+      sz = round_up(proglen + 128, PAGE_SIZE);
-+      header = module_alloc_exec(sz);
-       if (!header)
-               return NULL;
+       /* fill whole space with int3 instructions */
 +      pax_open_kernel();
 +      pax_open_kernel();
-       memset(header, 0xcc, sz); /* fill whole space with int3 instructions */
+       memset(area, 0xcc, size);
 +      pax_close_kernel();
 +      pax_close_kernel();
--      header->pages = sz / PAGE_SIZE;
--      hole = min(sz - (proglen + sizeof(*header)), PAGE_SIZE - sizeof(*header));
-+      hole = PAGE_SIZE - (proglen & ~PAGE_MASK);
-       /* insert a random number of int3 instructions before BPF code */
--      *image_ptr = &header->image[prandom_u32() % hole];
-+      *image_ptr = &header[prandom_u32() % hole];
-       return header;
  }
  
  }
  
-@@ -864,7 +864,9 @@ common_load:
+ struct jit_context {
+@@ -894,7 +900,9 @@ common_load:
                                pr_err("bpf_jit_compile fatal error\n");
                                return -EFAULT;
                        }
                                pr_err("bpf_jit_compile fatal error\n");
                                return -EFAULT;
                        }
@@ -34904,64 +34168,28 @@ index c881ba8..71aca2e 100644
                }
                proglen += ilen;
                addrs[i] = proglen;
                }
                proglen += ilen;
                addrs[i] = proglen;
-@@ -879,7 +881,7 @@ void bpf_jit_compile(struct bpf_prog *prog)
- void bpf_int_jit_compile(struct bpf_prog *prog)
- {
--      struct bpf_binary_header *header = NULL;
-+      u8 *header = NULL;
-       int proglen, oldproglen = 0;
-       struct jit_context ctx = {};
-       u8 *image = NULL;
-@@ -911,7 +913,7 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
-               if (proglen <= 0) {
-                       image = NULL;
-                       if (header)
--                              module_free(NULL, header);
-+                              module_free_exec(NULL, image);
-                       goto out;
-               }
-               if (image) {
-@@ -935,7 +937,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
+@@ -966,7 +974,6 @@ void bpf_int_jit_compile(struct bpf_prog *prog)
  
        if (image) {
                bpf_flush_icache(header, image + proglen);
 -              set_memory_ro((unsigned long)header, header->pages);
                prog->bpf_func = (void *)image;
  
        if (image) {
                bpf_flush_icache(header, image + proglen);
 -              set_memory_ro((unsigned long)header, header->pages);
                prog->bpf_func = (void *)image;
-               prog->jited = 1;
+               prog->jited = true;
        }
        }
-@@ -943,23 +944,15 @@ out:
-       kfree(addrs);
- }
+@@ -979,12 +986,8 @@ void bpf_jit_free(struct bpf_prog *fp)
+       unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
+       struct bpf_binary_header *header = (void *)addr;
+-      if (!fp->jited)
+-              goto free_filter;
++      if (fp->jited)
++              bpf_jit_binary_free(header);
  
  
--static void bpf_jit_free_deferred(struct work_struct *work)
--{
--      struct bpf_prog *fp = container_of(work, struct bpf_prog, work);
--      unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
--      struct bpf_binary_header *header = (void *)addr;
--
 -      set_memory_rw(addr, header->pages);
 -      set_memory_rw(addr, header->pages);
--      module_free(NULL, header);
--      kfree(fp);
--}
+-      bpf_jit_binary_free(header);
 -
 -
- void bpf_jit_free(struct bpf_prog *fp)
- {
--      if (fp->jited) {
--              INIT_WORK(&fp->work, bpf_jit_free_deferred);
--              schedule_work(&fp->work);
--      } else {
--              kfree(fp);
--      }
-+      unsigned long addr = (unsigned long)fp->bpf_func & PAGE_MASK;
-+
-+      if (!fp->jited)
-+              goto free_filter;
-+
-+      module_free_exec(NULL, (void *)addr);
-+
-+free_filter:
-+      bpf_prog_unlock_free(fp);
+-free_filter:
+       bpf_prog_unlock_free(fp);
  }
 diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c
 index 5d04be5..2beeaa2 100644
  }
 diff --git a/arch/x86/oprofile/backtrace.c b/arch/x86/oprofile/backtrace.c
 index 5d04be5..2beeaa2 100644
@@ -35000,7 +34228,7 @@ index 5d04be5..2beeaa2 100644
                if (depth)
                        dump_trace(NULL, regs, (unsigned long *)stack, 0,
 diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
                if (depth)
                        dump_trace(NULL, regs, (unsigned long *)stack, 0,
 diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c
-index 379e8bd..6386e09 100644
+index 1d2e639..f6ef82a 100644
 --- a/arch/x86/oprofile/nmi_int.c
 +++ b/arch/x86/oprofile/nmi_int.c
 @@ -23,6 +23,7 @@
 --- a/arch/x86/oprofile/nmi_int.c
 +++ b/arch/x86/oprofile/nmi_int.c
 @@ -23,6 +23,7 @@
@@ -35136,19 +34364,19 @@ index eb500c2..eab9e70 100644
                .callback = fix_broken_hp_bios_irq9,
                .ident = "HP Pavilion N5400 Series Laptop",
 diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c
                .callback = fix_broken_hp_bios_irq9,
                .ident = "HP Pavilion N5400 Series Laptop",
 diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c
-index c77b24a..c979855 100644
+index 9b83b90..4112152 100644
 --- a/arch/x86/pci/pcbios.c
 +++ b/arch/x86/pci/pcbios.c
 @@ -79,7 +79,7 @@ union bios32 {
  static struct {
        unsigned long address;
        unsigned short segment;
 --- a/arch/x86/pci/pcbios.c
 +++ b/arch/x86/pci/pcbios.c
 @@ -79,7 +79,7 @@ union bios32 {
  static struct {
        unsigned long address;
        unsigned short segment;
--} bios32_indirect = { 0, __KERNEL_CS };
-+} bios32_indirect __read_only = { 0, __PCIBIOS_CS };
+-} bios32_indirect __initdata = { 0, __KERNEL_CS };
++} bios32_indirect __initconst = { 0, __PCIBIOS_CS };
  
  /*
   * Returns the entry point for the given service, NULL on error
  
  /*
   * Returns the entry point for the given service, NULL on error
-@@ -92,37 +92,80 @@ static unsigned long bios32_service(unsigned long service)
+@@ -92,37 +92,80 @@ static unsigned long __init bios32_service(unsigned long service)
        unsigned long length;           /* %ecx */
        unsigned long entry;            /* %edx */
        unsigned long flags;
        unsigned long length;           /* %ecx */
        unsigned long entry;            /* %edx */
        unsigned long flags;
@@ -35239,9 +34467,9 @@ index c77b24a..c979855 100644
 -static int pci_bios_present;
 +static int pci_bios_present __read_only;
  
 -static int pci_bios_present;
 +static int pci_bios_present __read_only;
  
- static int check_pcibios(void)
+ static int __init check_pcibios(void)
  {
  {
-@@ -131,11 +174,13 @@ static int check_pcibios(void)
+@@ -131,11 +174,13 @@ static int __init check_pcibios(void)
        unsigned long flags, pcibios_entry;
  
        if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
        unsigned long flags, pcibios_entry;
  
        if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
@@ -35258,7 +34486,7 @@ index c77b24a..c979855 100644
                        "jc 1f\n\t"
                        "xor %%ah, %%ah\n"
                        "1:"
                        "jc 1f\n\t"
                        "xor %%ah, %%ah\n"
                        "1:"
-@@ -144,7 +189,8 @@ static int check_pcibios(void)
+@@ -144,7 +189,8 @@ static int __init check_pcibios(void)
                          "=b" (ebx),
                          "=c" (ecx)
                        : "1" (PCIBIOS_PCI_BIOS_PRESENT),
                          "=b" (ebx),
                          "=c" (ecx)
                        : "1" (PCIBIOS_PCI_BIOS_PRESENT),
@@ -35438,10 +34666,10 @@ index c77b24a..c979855 100644
  }
  EXPORT_SYMBOL(pcibios_set_irq_routing);
 diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c
  }
  EXPORT_SYMBOL(pcibios_set_irq_routing);
 diff --git a/arch/x86/platform/efi/efi_32.c b/arch/x86/platform/efi/efi_32.c
-index 9ee3491..872192f 100644
+index 40e7cda..c7e6672 100644
 --- a/arch/x86/platform/efi/efi_32.c
 +++ b/arch/x86/platform/efi/efi_32.c
 --- a/arch/x86/platform/efi/efi_32.c
 +++ b/arch/x86/platform/efi/efi_32.c
-@@ -59,11 +59,22 @@ void efi_call_phys_prelog(void)
+@@ -61,11 +61,22 @@ void __init efi_call_phys_prolog(void)
  {
        struct desc_ptr gdt_descr;
  
  {
        struct desc_ptr gdt_descr;
  
@@ -35464,7 +34692,7 @@ index 9ee3491..872192f 100644
        gdt_descr.address = __pa(get_cpu_gdt_table(0));
        gdt_descr.size = GDT_SIZE - 1;
        load_gdt(&gdt_descr);
        gdt_descr.address = __pa(get_cpu_gdt_table(0));
        gdt_descr.size = GDT_SIZE - 1;
        load_gdt(&gdt_descr);
-@@ -73,11 +84,24 @@ void efi_call_phys_epilog(void)
+@@ -75,11 +86,24 @@ void __init efi_call_phys_epilog(void)
  {
        struct desc_ptr gdt_descr;
  
  {
        struct desc_ptr gdt_descr;
  
@@ -35490,10 +34718,10 @@ index 9ee3491..872192f 100644
  
        local_irq_restore(efi_rt_eflags);
 diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
  
        local_irq_restore(efi_rt_eflags);
 diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
-index 290d397..e09d270 100644
+index 35aecb6..46177db 100644
 --- a/arch/x86/platform/efi/efi_64.c
 +++ b/arch/x86/platform/efi/efi_64.c
 --- a/arch/x86/platform/efi/efi_64.c
 +++ b/arch/x86/platform/efi/efi_64.c
-@@ -99,6 +99,11 @@ void __init efi_call_phys_prelog(void)
+@@ -99,6 +99,11 @@ void __init efi_call_phys_prolog(void)
                vaddress = (unsigned long)__va(pgd * PGDIR_SIZE);
                set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress));
        }
                vaddress = (unsigned long)__va(pgd * PGDIR_SIZE);
                set_pgd(pgd_offset_k(pgd * PGDIR_SIZE), *pgd_offset_k(vaddress));
        }
@@ -35517,7 +34745,7 @@ index 290d397..e09d270 100644
        __flush_tlb_all();
        local_irq_restore(efi_flags);
        early_code_mapping_set_exec(0);
        __flush_tlb_all();
        local_irq_restore(efi_flags);
        early_code_mapping_set_exec(0);
-@@ -146,8 +156,23 @@ int efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
+@@ -146,8 +156,23 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
        unsigned npages;
        pgd_t *pgd;
  
        unsigned npages;
        pgd_t *pgd;
  
@@ -35543,7 +34771,7 @@ index 290d397..e09d270 100644
        efi_scratch.efi_pgt = (pgd_t *)(unsigned long)real_mode_header->trampoline_pgd;
        pgd = __va(efi_scratch.efi_pgt);
 diff --git a/arch/x86/platform/efi/efi_stub_32.S b/arch/x86/platform/efi/efi_stub_32.S
        efi_scratch.efi_pgt = (pgd_t *)(unsigned long)real_mode_header->trampoline_pgd;
        pgd = __va(efi_scratch.efi_pgt);
 diff --git a/arch/x86/platform/efi/efi_stub_32.S b/arch/x86/platform/efi/efi_stub_32.S
-index fbe66e6..eae5e38 100644
+index 040192b..7d3300f 100644
 --- a/arch/x86/platform/efi/efi_stub_32.S
 +++ b/arch/x86/platform/efi/efi_stub_32.S
 @@ -6,7 +6,9 @@
 --- a/arch/x86/platform/efi/efi_stub_32.S
 +++ b/arch/x86/platform/efi/efi_stub_32.S
 @@ -6,7 +6,9 @@
@@ -35566,7 +34794,7 @@ index fbe66e6..eae5e38 100644
        /*
         * 0. The function can only be called in Linux kernel. So CS has been
 @@ -36,10 +38,24 @@ ENTRY(efi_call_phys)
        /*
         * 0. The function can only be called in Linux kernel. So CS has been
 @@ -36,10 +38,24 @@ ENTRY(efi_call_phys)
-        * The mapping of lower virtual memory has been created in prelog and
+        * The mapping of lower virtual memory has been created in prolog and
         * epilog.
         */
 -      movl    $1f, %edx
         * epilog.
         */
 -      movl    $1f, %edx
@@ -35719,20 +34947,16 @@ index 1bbedc4..eb795b5 100644
  
  static unsigned long __init intel_mid_calibrate_tsc(void)
 diff --git a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h
  
  static unsigned long __init intel_mid_calibrate_tsc(void)
 diff --git a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h
-index 46aa25c..59a68ed 100644
+index 3c1c386..59a68ed 100644
 --- a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h
 +++ b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h
 --- a/arch/x86/platform/intel-mid/intel_mid_weak_decls.h
 +++ b/arch/x86/platform/intel-mid/intel_mid_weak_decls.h
-@@ -10,10 +10,9 @@
-  */
--/* __attribute__((weak)) makes these declarations overridable */
+@@ -13,6 +13,6 @@
  /* For every CPU addition a new get_<cpuname>_ops interface needs
   * to be added.
   */
  /* For every CPU addition a new get_<cpuname>_ops interface needs
   * to be added.
   */
--extern void *get_penwell_ops(void) __attribute__((weak));
--extern void *get_cloverview_ops(void) __attribute__((weak));
--extern void *get_tangier_ops(void) __attribute__((weak));
+-extern void *get_penwell_ops(void);
+-extern void *get_cloverview_ops(void);
+-extern void *get_tangier_ops(void);
 +extern const void *get_penwell_ops(void);
 +extern const void *get_cloverview_ops(void);
 +extern const void *get_tangier_ops(void);
 +extern const void *get_penwell_ops(void);
 +extern const void *get_cloverview_ops(void);
 +extern const void *get_tangier_ops(void);
@@ -35963,7 +35187,7 @@ index 604a37e..e49702a 100644
  relocs-objs     := relocs_32.o relocs_64.o relocs_common.o
  PHONY += relocs
 diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
  relocs-objs     := relocs_32.o relocs_64.o relocs_common.o
  PHONY += relocs
 diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
-index bbb1d22..e505211 100644
+index a5efb21..97490e9 100644
 --- a/arch/x86/tools/relocs.c
 +++ b/arch/x86/tools/relocs.c
 @@ -1,5 +1,7 @@
 --- a/arch/x86/tools/relocs.c
 +++ b/arch/x86/tools/relocs.c
 @@ -1,5 +1,7 @@
@@ -36216,6 +35440,19 @@ index 5a4affe..9e2d522 100644
        $(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS)
  GCOV_PROFILE := n
  
        $(call cc-ldoption, -Wl$(comma)--build-id) -Wl,-Bsymbolic $(LTO_CFLAGS)
  GCOV_PROFILE := n
  
+diff --git a/arch/x86/vdso/vdso2c.h b/arch/x86/vdso/vdso2c.h
+index 0224987..c7d65a5 100644
+--- a/arch/x86/vdso/vdso2c.h
++++ b/arch/x86/vdso/vdso2c.h
+@@ -12,7 +12,7 @@ static void BITSFUNC(go)(void *raw_addr, size_t raw_len,
+       unsigned long load_size = -1;  /* Work around bogus warning */
+       unsigned long mapping_size;
+       ELF(Ehdr) *hdr = (ELF(Ehdr) *)raw_addr;
+-      int i;
++      unsigned int i;
+       unsigned long j;
+       ELF(Shdr) *symtab_hdr = NULL, *strtab_hdr, *secstrings_hdr,
+               *alt_sec = NULL;
 diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c
 index e904c27..b9eaa03 100644
 --- a/arch/x86/vdso/vdso32-setup.c
 diff --git a/arch/x86/vdso/vdso32-setup.c b/arch/x86/vdso/vdso32-setup.c
 index e904c27..b9eaa03 100644
 --- a/arch/x86/vdso/vdso32-setup.c
@@ -36351,7 +35588,7 @@ index e88fda8..76ce7ce 100644
          This is the Linux Xen port.  Enabling this will allow the
          kernel to boot in a paravirtualized environment under the
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
          This is the Linux Xen port.  Enabling this will allow the
          kernel to boot in a paravirtualized environment under the
 diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
-index c0cb11f..bed56ff 100644
+index fac5e4f..5b5cf4f 100644
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
 @@ -123,8 +123,6 @@ EXPORT_SYMBOL_GPL(xen_start_info);
 --- a/arch/x86/xen/enlighten.c
 +++ b/arch/x86/xen/enlighten.c
 @@ -123,8 +123,6 @@ EXPORT_SYMBOL_GPL(xen_start_info);
@@ -36439,7 +35676,7 @@ index c0cb11f..bed56ff 100644
  {
        if (pm_power_off)
                pm_power_off();
  {
        if (pm_power_off)
                pm_power_off();
-@@ -1568,7 +1564,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1573,7 +1569,17 @@ asmlinkage __visible void __init xen_start_kernel(void)
        __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
  
        /* Work out if we support NX */
        __userpte_alloc_gfp &= ~__GFP_HIGHMEM;
  
        /* Work out if we support NX */
@@ -36458,7 +35695,7 @@ index c0cb11f..bed56ff 100644
  
        /* Get mfn list */
        xen_build_dynamic_phys_to_machine();
  
        /* Get mfn list */
        xen_build_dynamic_phys_to_machine();
-@@ -1596,13 +1602,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
+@@ -1601,13 +1607,6 @@ asmlinkage __visible void __init xen_start_kernel(void)
  
        machine_ops = xen_machine_ops;
  
  
        machine_ops = xen_machine_ops;
  
@@ -36473,7 +35710,7 @@ index c0cb11f..bed56ff 100644
  
  #ifdef CONFIG_ACPI_NUMA
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
  
  #ifdef CONFIG_ACPI_NUMA
 diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
-index 16fb009..02b7801 100644
+index a8a1a3d..8216142 100644
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
 @@ -379,7 +379,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
 --- a/arch/x86/xen/mmu.c
 +++ b/arch/x86/xen/mmu.c
 @@ -379,7 +379,7 @@ static pteval_t pte_mfn_to_pfn(pteval_t val)
@@ -36485,7 +35722,7 @@ index 16fb009..02b7801 100644
  {
        if (val & _PAGE_PRESENT) {
                unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
  {
        if (val & _PAGE_PRESENT) {
                unsigned long pfn = (val & PTE_PFN_MASK) >> PAGE_SHIFT;
-@@ -1904,7 +1904,11 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
+@@ -1867,7 +1867,11 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
                 * L3_k[511] -> level2_fixmap_pgt */
                convert_pfn_mfn(level3_kernel_pgt);
  
                 * L3_k[511] -> level2_fixmap_pgt */
                convert_pfn_mfn(level3_kernel_pgt);
  
@@ -36497,7 +35734,7 @@ index 16fb009..02b7801 100644
                convert_pfn_mfn(level2_fixmap_pgt);
        }
        /* We get [511][511] and have Xen's version of level2_kernel_pgt */
                convert_pfn_mfn(level2_fixmap_pgt);
        }
        /* We get [511][511] and have Xen's version of level2_kernel_pgt */
-@@ -1929,11 +1933,16 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
+@@ -1892,11 +1896,16 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
                set_page_prot(init_level4_pgt, PAGE_KERNEL_RO);
                set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO);
                set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO);
                set_page_prot(init_level4_pgt, PAGE_KERNEL_RO);
                set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO);
                set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO);
@@ -36514,7 +35751,7 @@ index 16fb009..02b7801 100644
  
                /* Pin down new L4 */
                pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
  
                /* Pin down new L4 */
                pin_pagetable_pfn(MMUEXT_PIN_L4_TABLE,
-@@ -2117,6 +2126,7 @@ static void __init xen_post_allocator_init(void)
+@@ -2080,6 +2089,7 @@ static void __init xen_post_allocator_init(void)
        pv_mmu_ops.set_pud = xen_set_pud;
  #if PAGETABLE_LEVELS == 4
        pv_mmu_ops.set_pgd = xen_set_pgd;
        pv_mmu_ops.set_pud = xen_set_pud;
  #if PAGETABLE_LEVELS == 4
        pv_mmu_ops.set_pgd = xen_set_pgd;
@@ -36522,7 +35759,7 @@ index 16fb009..02b7801 100644
  #endif
  
        /* This will work as long as patching hasn't happened yet
  #endif
  
        /* This will work as long as patching hasn't happened yet
-@@ -2195,6 +2205,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
+@@ -2158,6 +2168,7 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
        .pud_val = PV_CALLEE_SAVE(xen_pud_val),
        .make_pud = PV_CALLEE_SAVE(xen_make_pud),
        .set_pgd = xen_set_pgd_hyper,
        .pud_val = PV_CALLEE_SAVE(xen_pud_val),
        .make_pud = PV_CALLEE_SAVE(xen_make_pud),
        .set_pgd = xen_set_pgd_hyper,
@@ -36531,10 +35768,10 @@ index 16fb009..02b7801 100644
        .alloc_pud = xen_alloc_pmd_init,
        .release_pud = xen_release_pmd_init,
 diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
        .alloc_pud = xen_alloc_pmd_init,
        .release_pud = xen_release_pmd_init,
 diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
-index 7005974..54fb05f 100644
+index 4c071ae..00e7049 100644
 --- a/arch/x86/xen/smp.c
 +++ b/arch/x86/xen/smp.c
 --- a/arch/x86/xen/smp.c
 +++ b/arch/x86/xen/smp.c
-@@ -283,17 +283,13 @@ static void __init xen_smp_prepare_boot_cpu(void)
+@@ -288,17 +288,13 @@ static void __init xen_smp_prepare_boot_cpu(void)
  
        if (xen_pv_domain()) {
                if (!xen_feature(XENFEAT_writable_page_tables))
  
        if (xen_pv_domain()) {
                if (!xen_feature(XENFEAT_writable_page_tables))
@@ -36554,17 +35791,17 @@ index 7005974..54fb05f 100644
  #endif
  
                xen_filter_cpu_maps();
  #endif
  
                xen_filter_cpu_maps();
-@@ -372,7 +368,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
+@@ -379,7 +375,7 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
  #ifdef CONFIG_X86_32
        /* Note: PVH is not yet supported on x86_32. */
        ctxt->user_regs.fs = __KERNEL_PERCPU;
 -      ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
 +      savesegment(gs, ctxt->user_regs.gs);
  #endif
  #ifdef CONFIG_X86_32
        /* Note: PVH is not yet supported on x86_32. */
        ctxt->user_regs.fs = __KERNEL_PERCPU;
 -      ctxt->user_regs.gs = __KERNEL_STACK_CANARY;
 +      savesegment(gs, ctxt->user_regs.gs);
  #endif
-       ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
+       memset(&ctxt->fpu_ctxt, 0, sizeof(ctxt->fpu_ctxt));
  
  
-@@ -381,8 +377,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
-       if (!xen_feature(XENFEAT_auto_translated_physmap)) {
+@@ -387,8 +383,8 @@ cpu_initialize_context(unsigned int cpu, struct task_struct *idle)
+               ctxt->user_regs.eip = (unsigned long)cpu_bringup_and_idle;
                ctxt->flags = VGCF_IN_KERNEL;
                ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */
 -              ctxt->user_regs.ds = __USER_DS;
                ctxt->flags = VGCF_IN_KERNEL;
                ctxt->user_regs.eflags = 0x1000; /* IOPL_RING1 */
 -              ctxt->user_regs.ds = __USER_DS;
@@ -36574,7 +35811,7 @@ index 7005974..54fb05f 100644
                ctxt->user_regs.ss = __KERNEL_DS;
  
                xen_copy_trap_info(ctxt->trap_ctxt);
                ctxt->user_regs.ss = __KERNEL_DS;
  
                xen_copy_trap_info(ctxt->trap_ctxt);
-@@ -437,14 +433,13 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle)
+@@ -446,14 +442,13 @@ static int xen_cpu_up(unsigned int cpu, struct task_struct *idle)
        int rc;
  
        per_cpu(current_task, cpu) = idle;
        int rc;
  
        per_cpu(current_task, cpu) = idle;
@@ -36591,7 +35828,7 @@ index 7005974..54fb05f 100644
  
        xen_setup_runstate_info(cpu);
        xen_setup_timer(cpu);
  
        xen_setup_runstate_info(cpu);
        xen_setup_timer(cpu);
-@@ -720,7 +715,7 @@ static const struct smp_ops xen_smp_ops __initconst = {
+@@ -732,7 +727,7 @@ static const struct smp_ops xen_smp_ops __initconst = {
  
  void __init xen_smp_init(void)
  {
  
  void __init xen_smp_init(void)
  {
@@ -36614,7 +35851,7 @@ index fd92a64..1f72641 100644
  #else
        movl %ss:xen_vcpu, %eax
 diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
  #else
        movl %ss:xen_vcpu, %eax
 diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
-index 485b695..fda3e7c 100644
+index 674b2225..f1f5dc1 100644
 --- a/arch/x86/xen/xen-head.S
 +++ b/arch/x86/xen/xen-head.S
 @@ -39,6 +39,17 @@ ENTRY(startup_xen)
 --- a/arch/x86/xen/xen-head.S
 +++ b/arch/x86/xen/xen-head.S
 @@ -39,6 +39,17 @@ ENTRY(startup_xen)
@@ -36710,10 +35947,10 @@ index af00795..2bb8105 100644
  #define XCHAL_ICACHE_SIZE             32768   /* I-cache size in bytes or 0 */
  #define XCHAL_DCACHE_SIZE             32768   /* D-cache size in bytes or 0 */
 diff --git a/block/bio.c b/block/bio.c
  #define XCHAL_ICACHE_SIZE             32768   /* I-cache size in bytes or 0 */
  #define XCHAL_DCACHE_SIZE             32768   /* D-cache size in bytes or 0 */
 diff --git a/block/bio.c b/block/bio.c
-index 3e6331d..f970433 100644
+index 3e6e198..5c65199 100644
 --- a/block/bio.c
 +++ b/block/bio.c
 --- a/block/bio.c
 +++ b/block/bio.c
-@@ -1160,7 +1160,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
+@@ -1163,7 +1163,7 @@ struct bio *bio_copy_user_iov(struct request_queue *q,
                /*
                 * Overflow, abort
                 */
                /*
                 * Overflow, abort
                 */
@@ -36722,7 +35959,7 @@ index 3e6331d..f970433 100644
                        return ERR_PTR(-EINVAL);
  
                nr_pages += end - start;
                        return ERR_PTR(-EINVAL);
  
                nr_pages += end - start;
-@@ -1294,7 +1294,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q,
+@@ -1297,7 +1297,7 @@ static struct bio *__bio_map_user_iov(struct request_queue *q,
                /*
                 * Overflow, abort
                 */
                /*
                 * Overflow, abort
                 */
@@ -36731,7 +35968,7 @@ index 3e6331d..f970433 100644
                        return ERR_PTR(-EINVAL);
  
                nr_pages += end - start;
                        return ERR_PTR(-EINVAL);
  
                nr_pages += end - start;
-@@ -1556,7 +1556,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err)
+@@ -1559,7 +1559,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err)
        const int read = bio_data_dir(bio) == READ;
        struct bio_map_data *bmd = bio->bi_private;
        int i;
        const int read = bio_data_dir(bio) == READ;
        struct bio_map_data *bmd = bio->bi_private;
        int i;
@@ -36740,28 +35977,6 @@ index 3e6331d..f970433 100644
  
        bio_for_each_segment_all(bvec, bio, i) {
                char *addr = page_address(bvec->bv_page);
  
        bio_for_each_segment_all(bvec, bio, i) {
                char *addr = page_address(bvec->bv_page);
-diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c
-index e17da94..e01cce1 100644
---- a/block/blk-cgroup.c
-+++ b/block/blk-cgroup.c
-@@ -822,7 +822,7 @@ static void blkcg_css_free(struct cgroup_subsys_state *css)
- static struct cgroup_subsys_state *
- blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
- {
--      static atomic64_t id_seq = ATOMIC64_INIT(0);
-+      static atomic64_unchecked_t id_seq = ATOMIC64_INIT(0);
-       struct blkcg *blkcg;
-       if (!parent_css) {
-@@ -836,7 +836,7 @@ blkcg_css_alloc(struct cgroup_subsys_state *parent_css)
-       blkcg->cfq_weight = CFQ_WEIGHT_DEFAULT;
-       blkcg->cfq_leaf_weight = CFQ_WEIGHT_DEFAULT;
--      blkcg->id = atomic64_inc_return(&id_seq); /* root is 0, start from 1 */
-+      blkcg->id = atomic64_inc_return_unchecked(&id_seq); /* root is 0, start from 1 */
- done:
-       spin_lock_init(&blkcg->lock);
-       INIT_RADIX_TREE(&blkcg->blkg_tree, GFP_ATOMIC);
 diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c
 index 0736729..2ec3b48 100644
 --- a/block/blk-iopoll.c
 diff --git a/block/blk-iopoll.c b/block/blk-iopoll.c
 index 0736729..2ec3b48 100644
 --- a/block/blk-iopoll.c
@@ -36802,7 +36017,7 @@ index 53b1737..08177d2e 100644
        struct list_head *cpu_list, local_list;
  
 diff --git a/block/bsg.c b/block/bsg.c
        struct list_head *cpu_list, local_list;
  
 diff --git a/block/bsg.c b/block/bsg.c
-index ff46add..c4ba8ee 100644
+index 276e869..6fe4c61 100644
 --- a/block/bsg.c
 +++ b/block/bsg.c
 @@ -176,16 +176,24 @@ static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq,
 --- a/block/bsg.c
 +++ b/block/bsg.c
 @@ -176,16 +176,24 @@ static int blk_fill_sgv4_hdr_rq(struct request_queue *q, struct request *rq,
@@ -36833,7 +36048,7 @@ index ff46add..c4ba8ee 100644
                if (blk_verify_command(rq->cmd, has_write_perm))
                        return -EPERM;
 diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c
                if (blk_verify_command(rq->cmd, has_write_perm))
                        return -EPERM;
 diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c
-index 18b282c..050dbe5 100644
+index f678c73..f35aa18 100644
 --- a/block/compat_ioctl.c
 +++ b/block/compat_ioctl.c
 @@ -156,7 +156,7 @@ static int compat_cdrom_generic_command(struct block_device *bdev, fmode_t mode,
 --- a/block/compat_ioctl.c
 +++ b/block/compat_ioctl.c
 @@ -156,7 +156,7 @@ static int compat_cdrom_generic_command(struct block_device *bdev, fmode_t mode,
@@ -36855,7 +36070,7 @@ index 18b282c..050dbe5 100644
                        err = -EFAULT;
                        goto out;
 diff --git a/block/genhd.c b/block/genhd.c
                        err = -EFAULT;
                        goto out;
 diff --git a/block/genhd.c b/block/genhd.c
-index e6723bd..703e4ac 100644
+index bd30606..bbc9b90 100644
 --- a/block/genhd.c
 +++ b/block/genhd.c
 @@ -469,21 +469,24 @@ static char *bdevt_str(dev_t devt, char *buf)
 --- a/block/genhd.c
 +++ b/block/genhd.c
 @@ -469,21 +469,24 @@ static char *bdevt_str(dev_t devt, char *buf)
@@ -36912,7 +36127,7 @@ index 56d08fd..2e07090 100644
                        (u8 *) pte, count) < count) {
                kfree(pte);
 diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
                        (u8 *) pte, count) < count) {
                kfree(pte);
 diff --git a/block/scsi_ioctl.c b/block/scsi_ioctl.c
-index a6d6270..c4bb72f 100644
+index b0c2a61..10bb6ec 100644
 --- a/block/scsi_ioctl.c
 +++ b/block/scsi_ioctl.c
 @@ -67,7 +67,7 @@ static int scsi_get_bus(struct request_queue *q, int __user *p)
 --- a/block/scsi_ioctl.c
 +++ b/block/scsi_ioctl.c
 @@ -67,7 +67,7 @@ static int scsi_get_bus(struct request_queue *q, int __user *p)
@@ -36946,7 +36161,7 @@ index a6d6270..c4bb72f 100644
        if (blk_verify_command(rq->cmd, mode & FMODE_WRITE))
                return -EPERM;
  
        if (blk_verify_command(rq->cmd, mode & FMODE_WRITE))
                return -EPERM;
  
-@@ -432,6 +444,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
+@@ -431,6 +443,8 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
        int err;
        unsigned int in_len, out_len, bytes, opcode, cmdlen;
        char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE];
        int err;
        unsigned int in_len, out_len, bytes, opcode, cmdlen;
        char *buffer = NULL, sense[SCSI_SENSE_BUFFERSIZE];
@@ -36955,7 +36170,7 @@ index a6d6270..c4bb72f 100644
  
        if (!sic)
                return -EINVAL;
  
        if (!sic)
                return -EINVAL;
-@@ -470,9 +484,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
+@@ -469,9 +483,18 @@ int sg_scsi_ioctl(struct request_queue *q, struct gendisk *disk, fmode_t mode,
         */
        err = -EFAULT;
        rq->cmd_len = cmdlen;
         */
        err = -EFAULT;
        rq->cmd_len = cmdlen;
@@ -36997,20 +36212,6 @@ index e592c90..c566114 100644
  
  static void cryptd_queue_worker(struct work_struct *work);
  
  
  static void cryptd_queue_worker(struct work_struct *work);
  
-diff --git a/crypto/cts.c b/crypto/cts.c
-index 042223f..133f087 100644
---- a/crypto/cts.c
-+++ b/crypto/cts.c
-@@ -202,7 +202,8 @@ static int cts_cbc_decrypt(struct crypto_cts_ctx *ctx,
-       /* 5. Append the tail (BB - Ln) bytes of Xn (tmp) to Cn to create En */
-       memcpy(s + bsize + lastn, tmp + lastn, bsize - lastn);
-       /* 6. Decrypt En to create Pn-1 */
--      memset(iv, 0, sizeof(iv));
-+      memzero_explicit(iv, sizeof(iv));
-+
-       sg_set_buf(&sgsrc[0], s + bsize, bsize);
-       sg_set_buf(&sgdst[0], d, bsize);
-       err = crypto_blkcipher_decrypt_iv(&lcldesc, sgdst, sgsrc, bsize);
 diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c
 index 309d345..1632720 100644
 --- a/crypto/pcrypt.c
 diff --git a/crypto/pcrypt.c b/crypto/pcrypt.c
 index 309d345..1632720 100644
 --- a/crypto/pcrypt.c
@@ -37024,118 +36225,6 @@ index 309d345..1632720 100644
        if (!ret)
                kobject_uevent(&pinst->kobj, KOBJ_ADD);
  
        if (!ret)
                kobject_uevent(&pinst->kobj, KOBJ_ADD);
  
-diff --git a/crypto/sha1_generic.c b/crypto/sha1_generic.c
-index 4279480..7bb0474 100644
---- a/crypto/sha1_generic.c
-+++ b/crypto/sha1_generic.c
-@@ -64,7 +64,7 @@ int crypto_sha1_update(struct shash_desc *desc, const u8 *data,
-                       src = data + done;
-               } while (done + SHA1_BLOCK_SIZE <= len);
--              memset(temp, 0, sizeof(temp));
-+              memzero_explicit(temp, sizeof(temp));
-               partial = 0;
-       }
-       memcpy(sctx->buffer + partial, src, len - done);
-diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c
-index 5433667..32c5e5e 100644
---- a/crypto/sha256_generic.c
-+++ b/crypto/sha256_generic.c
-@@ -210,10 +210,9 @@ static void sha256_transform(u32 *state, const u8 *input)
-       /* clear any sensitive info... */
-       a = b = c = d = e = f = g = h = t1 = t2 = 0;
--      memset(W, 0, 64 * sizeof(u32));
-+      memzero_explicit(W, 64 * sizeof(u32));
- }
--
- static int sha224_init(struct shash_desc *desc)
- {
-       struct sha256_state *sctx = shash_desc_ctx(desc);
-@@ -316,7 +315,7 @@ static int sha224_final(struct shash_desc *desc, u8 *hash)
-       sha256_final(desc, D);
-       memcpy(hash, D, SHA224_DIGEST_SIZE);
--      memset(D, 0, SHA256_DIGEST_SIZE);
-+      memzero_explicit(D, SHA256_DIGEST_SIZE);
-       return 0;
- }
-diff --git a/crypto/sha512_generic.c b/crypto/sha512_generic.c
-index 6ed124f..04d295a 100644
---- a/crypto/sha512_generic.c
-+++ b/crypto/sha512_generic.c
-@@ -238,7 +238,7 @@ static int sha384_final(struct shash_desc *desc, u8 *hash)
-       sha512_final(desc, D);
-       memcpy(hash, D, 48);
--      memset(D, 0, 64);
-+      memzero_explicit(D, 64);
-       return 0;
- }
-diff --git a/crypto/tgr192.c b/crypto/tgr192.c
-index 8740355..3c7af0d 100644
---- a/crypto/tgr192.c
-+++ b/crypto/tgr192.c
-@@ -612,7 +612,7 @@ static int tgr160_final(struct shash_desc *desc, u8 * out)
-       tgr192_final(desc, D);
-       memcpy(out, D, TGR160_DIGEST_SIZE);
--      memset(D, 0, TGR192_DIGEST_SIZE);
-+      memzero_explicit(D, TGR192_DIGEST_SIZE);
-       return 0;
- }
-@@ -623,7 +623,7 @@ static int tgr128_final(struct shash_desc *desc, u8 * out)
-       tgr192_final(desc, D);
-       memcpy(out, D, TGR128_DIGEST_SIZE);
--      memset(D, 0, TGR192_DIGEST_SIZE);
-+      memzero_explicit(D, TGR192_DIGEST_SIZE);
-       return 0;
- }
-diff --git a/crypto/vmac.c b/crypto/vmac.c
-index 2eb11a3..d84c24b 100644
---- a/crypto/vmac.c
-+++ b/crypto/vmac.c
-@@ -613,7 +613,7 @@ static int vmac_final(struct shash_desc *pdesc, u8 *out)
-       }
-       mac = vmac(ctx->partial, ctx->partial_size, nonce, NULL, ctx);
-       memcpy(out, &mac, sizeof(vmac_t));
--      memset(&mac, 0, sizeof(vmac_t));
-+      memzero_explicit(&mac, sizeof(vmac_t));
-       memset(&ctx->__vmac_ctx, 0, sizeof(struct vmac_ctx));
-       ctx->partial_size = 0;
-       return 0;
-diff --git a/crypto/wp512.c b/crypto/wp512.c
-index 180f1d6..ec64e77 100644
---- a/crypto/wp512.c
-+++ b/crypto/wp512.c
-@@ -1102,8 +1102,8 @@ static int wp384_final(struct shash_desc *desc, u8 *out)
-       u8 D[64];
-       wp512_final(desc, D);
--      memcpy (out, D, WP384_DIGEST_SIZE);
--      memset (D, 0, WP512_DIGEST_SIZE);
-+      memcpy(out, D, WP384_DIGEST_SIZE);
-+      memzero_explicit(D, WP512_DIGEST_SIZE);
-       return 0;
- }
-@@ -1113,8 +1113,8 @@ static int wp256_final(struct shash_desc *desc, u8 *out)
-       u8 D[64];
-       wp512_final(desc, D);
--      memcpy (out, D, WP256_DIGEST_SIZE);
--      memset (D, 0, WP512_DIGEST_SIZE);
-+      memcpy(out, D, WP256_DIGEST_SIZE);
-+      memzero_explicit(D, WP512_DIGEST_SIZE);
-       return 0;
- }
 diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c
 index 6921c7f..78e1af7 100644
 --- a/drivers/acpi/acpica/hwxfsleep.c
 diff --git a/drivers/acpi/acpica/hwxfsleep.c b/drivers/acpi/acpica/hwxfsleep.c
 index 6921c7f..78e1af7 100644
 --- a/drivers/acpi/acpica/hwxfsleep.c
@@ -37211,7 +36300,7 @@ index a83e3c6..c3d617f 100644
        bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj);
        if (!bgrt_kobj)
 diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
        bgrt_kobj = kobject_create_and_add("bgrt", acpi_kobj);
        if (!bgrt_kobj)
 diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
-index 36eb42e..3b2f47e 100644
+index 7556e7c..89a96bd 100644
 --- a/drivers/acpi/blacklist.c
 +++ b/drivers/acpi/blacklist.c
 @@ -51,7 +51,7 @@ struct acpi_blacklist_item {
 --- a/drivers/acpi/blacklist.c
 +++ b/drivers/acpi/blacklist.c
 @@ -51,7 +51,7 @@ struct acpi_blacklist_item {
@@ -37247,6 +36336,35 @@ index c68e724..e863008 100644
        if (!(*ppos)) {
                /* parse the table header to get the table length */
                if (count <= sizeof(struct acpi_table_header))
        if (!(*ppos)) {
                /* parse the table header to get the table length */
                if (count <= sizeof(struct acpi_table_header))
+diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c
+index 7db1931..302dd5f 100644
+--- a/drivers/acpi/device_pm.c
++++ b/drivers/acpi/device_pm.c
+@@ -1021,6 +1021,8 @@ EXPORT_SYMBOL_GPL(acpi_subsys_freeze);
+ #endif /* CONFIG_PM_SLEEP */
++static void acpi_dev_pm_detach(struct device *dev, bool power_off);
++
+ static struct dev_pm_domain acpi_general_pm_domain = {
+       .ops = {
+ #ifdef CONFIG_PM_RUNTIME
+@@ -1039,6 +1041,7 @@ static struct dev_pm_domain acpi_general_pm_domain = {
+               .restore_early = acpi_subsys_resume_early,
+ #endif
+       },
++      .detach = acpi_dev_pm_detach
+ };
+ /**
+@@ -1108,7 +1111,6 @@ int acpi_dev_pm_attach(struct device *dev, bool power_on)
+               acpi_device_wakeup(adev, ACPI_STATE_S0, false);
+       }
+-      dev->pm_domain->detach = acpi_dev_pm_detach;
+       return 0;
+ }
+ EXPORT_SYMBOL_GPL(acpi_dev_pm_attach);
 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
 index 17f9ec5..d9a455e 100644
 --- a/drivers/acpi/processor_idle.c
 diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
 index 17f9ec5..d9a455e 100644
 --- a/drivers/acpi/processor_idle.c
@@ -37261,7 +36379,7 @@ index 17f9ec5..d9a455e 100644
  
        if (!pr->flags.power_setup_done)
 diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
  
        if (!pr->flags.power_setup_done)
 diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c
-index 38cb978..352c761 100644
+index 13e577c..cef11ee 100644
 --- a/drivers/acpi/sysfs.c
 +++ b/drivers/acpi/sysfs.c
 @@ -423,11 +423,11 @@ static u32 num_counters;
 --- a/drivers/acpi/sysfs.c
 +++ b/drivers/acpi/sysfs.c
 @@ -423,11 +423,11 @@ static u32 num_counters;
@@ -37279,7 +36397,7 @@ index 38cb978..352c761 100644
  static void delete_gpe_attr_array(void)
  {
 diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
  static void delete_gpe_attr_array(void)
  {
 diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
-index b784e9d..a69a049 100644
+index 97683e4..655f6ba 100644
 --- a/drivers/ata/libahci.c
 +++ b/drivers/ata/libahci.c
 @@ -1252,7 +1252,7 @@ int ahci_kick_engine(struct ata_port *ap)
 --- a/drivers/ata/libahci.c
 +++ b/drivers/ata/libahci.c
 @@ -1252,7 +1252,7 @@ int ahci_kick_engine(struct ata_port *ap)
@@ -37292,7 +36410,7 @@ index b784e9d..a69a049 100644
                                unsigned long timeout_msec)
  {
 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
                                unsigned long timeout_msec)
  {
 diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
-index 6f67490..f951ead 100644
+index c5ba15a..75ec7a8 100644
 --- a/drivers/ata/libata-core.c
 +++ b/drivers/ata/libata-core.c
 @@ -99,7 +99,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
 --- a/drivers/ata/libata-core.c
 +++ b/drivers/ata/libata-core.c
 @@ -99,7 +99,7 @@ static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
@@ -37377,7 +36495,7 @@ index 5f4e0cc..ff2c347 100644
  extern int libata_fua;
  extern int libata_noacpi;
 diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c
  extern int libata_fua;
  extern int libata_noacpi;
 diff --git a/drivers/ata/pata_arasan_cf.c b/drivers/ata/pata_arasan_cf.c
-index 4edb1a8..84e1658 100644
+index 38216b9..4ec6aeb 100644
 --- a/drivers/ata/pata_arasan_cf.c
 +++ b/drivers/ata/pata_arasan_cf.c
 @@ -865,7 +865,9 @@ static int arasan_cf_probe(struct platform_device *pdev)
 --- a/drivers/ata/pata_arasan_cf.c
 +++ b/drivers/ata/pata_arasan_cf.c
 @@ -865,7 +865,9 @@ static int arasan_cf_probe(struct platform_device *pdev)
@@ -38009,7 +37127,7 @@ index 4217f29..88f547a 100644
               vcc->tx_quota =  vcc->tx_quota * 3 / 4;
              printk("Tx1:  vcc->tx_quota = %d \n", (u32)vcc->tx_quota );
 diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
               vcc->tx_quota =  vcc->tx_quota * 3 / 4;
              printk("Tx1:  vcc->tx_quota = %d \n", (u32)vcc->tx_quota );
 diff --git a/drivers/atm/lanai.c b/drivers/atm/lanai.c
-index fa7d7019..1e404c7 100644
+index 93eaf8d..b4ca7da 100644
 --- a/drivers/atm/lanai.c
 +++ b/drivers/atm/lanai.c
 @@ -1303,7 +1303,7 @@ static void lanai_send_one_aal5(struct lanai_dev *lanai,
 --- a/drivers/atm/lanai.c
 +++ b/drivers/atm/lanai.c
 @@ -1303,7 +1303,7 @@ static void lanai_send_one_aal5(struct lanai_dev *lanai,
@@ -38272,7 +37390,7 @@ index 9988ac9..7c52585 100644
                }
  
 diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
                }
  
 diff --git a/drivers/atm/solos-pci.c b/drivers/atm/solos-pci.c
-index 7652e8d..db45069 100644
+index 21b0bc6..b5f40ba 100644
 --- a/drivers/atm/solos-pci.c
 +++ b/drivers/atm/solos-pci.c
 @@ -838,7 +838,7 @@ static void solos_bh(unsigned long card_arg)
 --- a/drivers/atm/solos-pci.c
 +++ b/drivers/atm/solos-pci.c
 @@ -838,7 +838,7 @@ static void solos_bh(unsigned long card_arg)
@@ -38438,10 +37556,10 @@ index 25798db..15f130e 100644
        while (1) {
                spin_lock(&req_lock);
 diff --git a/drivers/base/node.c b/drivers/base/node.c
        while (1) {
                spin_lock(&req_lock);
 diff --git a/drivers/base/node.c b/drivers/base/node.c
-index d51c49c..28908df 100644
+index 472168c..4af587e 100644
 --- a/drivers/base/node.c
 +++ b/drivers/base/node.c
 --- a/drivers/base/node.c
 +++ b/drivers/base/node.c
-@@ -623,7 +623,7 @@ static ssize_t print_nodes_state(enum node_states state, char *buf)
+@@ -620,7 +620,7 @@ static ssize_t print_nodes_state(enum node_states state, char *buf)
  struct node_attr {
        struct device_attribute attr;
        enum node_states state;
  struct node_attr {
        struct device_attribute attr;
        enum node_states state;
@@ -38451,44 +37569,32 @@ index d51c49c..28908df 100644
  static ssize_t show_node_state(struct device *dev,
                               struct device_attribute *attr, char *buf)
 diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
  static ssize_t show_node_state(struct device *dev,
                               struct device_attribute *attr, char *buf)
 diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
-index eee55c1..b8c9393 100644
+index fb83d4a..4aa50ec 100644
 --- a/drivers/base/power/domain.c
 +++ b/drivers/base/power/domain.c
 --- a/drivers/base/power/domain.c
 +++ b/drivers/base/power/domain.c
-@@ -1821,9 +1821,9 @@ int __pm_genpd_remove_callbacks(struct device *dev, bool clear_td)
-       if (dev->power.subsys_data->domain_data) {
-               gpd_data = to_gpd_data(dev->power.subsys_data->domain_data);
--              gpd_data->ops = (struct gpd_dev_ops){ NULL };
-+              memset(&gpd_data->ops, 0, sizeof(gpd_data->ops));
-               if (clear_td)
--                      gpd_data->td = (struct gpd_timing_data){ 0 };
-+                      memset(&gpd_data->td, 0, sizeof(gpd_data->td));
-               if (--gpd_data->refcount == 0) {
-                       dev->power.subsys_data->domain_data = NULL;
-@@ -1862,7 +1862,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
+@@ -1725,7 +1725,7 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
  {
        struct cpuidle_driver *cpuidle_drv;
  {
        struct cpuidle_driver *cpuidle_drv;
-       struct gpd_cpu_data *cpu_data;
+       struct gpd_cpuidle_data *cpuidle_data;
 -      struct cpuidle_state *idle_state;
 +      cpuidle_state_no_const *idle_state;
        int ret = 0;
  
        if (IS_ERR_OR_NULL(genpd) || state < 0)
 -      struct cpuidle_state *idle_state;
 +      cpuidle_state_no_const *idle_state;
        int ret = 0;
  
        if (IS_ERR_OR_NULL(genpd) || state < 0)
-@@ -1930,7 +1930,7 @@ int pm_genpd_name_attach_cpuidle(const char *name, int state)
+@@ -1793,7 +1793,7 @@ int pm_genpd_name_attach_cpuidle(const char *name, int state)
  int pm_genpd_detach_cpuidle(struct generic_pm_domain *genpd)
  {
  int pm_genpd_detach_cpuidle(struct generic_pm_domain *genpd)
  {
-       struct gpd_cpu_data *cpu_data;
+       struct gpd_cpuidle_data *cpuidle_data;
 -      struct cpuidle_state *idle_state;
 +      cpuidle_state_no_const *idle_state;
        int ret = 0;
  
        if (IS_ERR_OR_NULL(genpd))
 diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
 -      struct cpuidle_state *idle_state;
 +      cpuidle_state_no_const *idle_state;
        int ret = 0;
  
        if (IS_ERR_OR_NULL(genpd))
 diff --git a/drivers/base/power/sysfs.c b/drivers/base/power/sysfs.c
-index 95b181d1..c4f0e19 100644
+index a9d26ed..74b8405 100644
 --- a/drivers/base/power/sysfs.c
 +++ b/drivers/base/power/sysfs.c
 --- a/drivers/base/power/sysfs.c
 +++ b/drivers/base/power/sysfs.c
-@@ -185,7 +185,7 @@ static ssize_t rtpm_status_show(struct device *dev,
+@@ -182,7 +182,7 @@ static ssize_t rtpm_status_show(struct device *dev,
                        return -EIO;
                }
        }
                        return -EIO;
                }
        }
@@ -38498,10 +37604,10 @@ index 95b181d1..c4f0e19 100644
  
  static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL);
 diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
  
  static DEVICE_ATTR(runtime_status, 0444, rtpm_status_show, NULL);
 diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
-index eb1bd2e..2667d3a 100644
+index c2744b3..08fac19 100644
 --- a/drivers/base/power/wakeup.c
 +++ b/drivers/base/power/wakeup.c
 --- a/drivers/base/power/wakeup.c
 +++ b/drivers/base/power/wakeup.c
-@@ -29,14 +29,14 @@ bool events_check_enabled __read_mostly;
+@@ -32,14 +32,14 @@ static bool pm_abort_suspend __read_mostly;
   * They need to be modified together atomically, so it's better to use one
   * atomic variable to hold them both.
   */
   * They need to be modified together atomically, so it's better to use one
   * atomic variable to hold them both.
   */
@@ -38518,7 +37624,7 @@ index eb1bd2e..2667d3a 100644
  
        *cnt = (comb >> IN_PROGRESS_BITS);
        *inpr = comb & MAX_IN_PROGRESS;
  
        *cnt = (comb >> IN_PROGRESS_BITS);
        *inpr = comb & MAX_IN_PROGRESS;
-@@ -401,7 +401,7 @@ static void wakeup_source_activate(struct wakeup_source *ws)
+@@ -404,7 +404,7 @@ static void wakeup_source_activate(struct wakeup_source *ws)
                ws->start_prevent_time = ws->last_time;
  
        /* Increment the counter of events in progress. */
                ws->start_prevent_time = ws->last_time;
  
        /* Increment the counter of events in progress. */
@@ -38527,7 +37633,7 @@ index eb1bd2e..2667d3a 100644
  
        trace_wakeup_source_activate(ws->name, cec);
  }
  
        trace_wakeup_source_activate(ws->name, cec);
  }
-@@ -527,7 +527,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws)
+@@ -530,7 +530,7 @@ static void wakeup_source_deactivate(struct wakeup_source *ws)
         * Increment the counter of registered wakeup events and decrement the
         * couter of wakeup events in progress simultaneously.
         */
         * Increment the counter of registered wakeup events and decrement the
         * couter of wakeup events in progress simultaneously.
         */
@@ -38537,7 +37643,7 @@ index eb1bd2e..2667d3a 100644
  
        split_counters(&cnt, &inpr);
 diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c
  
        split_counters(&cnt, &inpr);
 diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c
-index dbb8350..4762f4c 100644
+index 8d98a32..61d3165 100644
 --- a/drivers/base/syscore.c
 +++ b/drivers/base/syscore.c
 @@ -22,7 +22,7 @@ static DEFINE_MUTEX(syscore_ops_lock);
 --- a/drivers/base/syscore.c
 +++ b/drivers/base/syscore.c
 @@ -22,7 +22,7 @@ static DEFINE_MUTEX(syscore_ops_lock);
@@ -38866,7 +37972,7 @@ index be73e9d..7fbf140 100644
        cmdlist_t *reqQ;
        cmdlist_t *cmpQ;
 diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c
        cmdlist_t *reqQ;
        cmdlist_t *cmpQ;
 diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c
-index 426c97a..8c58607 100644
+index 434c77d..6d3219a 100644
 --- a/drivers/block/drbd/drbd_bitmap.c
 +++ b/drivers/block/drbd/drbd_bitmap.c
 @@ -1036,7 +1036,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_ho
 --- a/drivers/block/drbd/drbd_bitmap.c
 +++ b/drivers/block/drbd/drbd_bitmap.c
 @@ -1036,7 +1036,7 @@ static void bm_page_io_async(struct drbd_bm_aio_ctx *ctx, int page_nr) __must_ho
@@ -38879,10 +37985,10 @@ index 426c97a..8c58607 100644
  }
  
 diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
  }
  
 diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
-index 1a00001..c0d4253 100644
+index 9b22f8f..f2932af 100644
 --- a/drivers/block/drbd/drbd_int.h
 +++ b/drivers/block/drbd/drbd_int.h
 --- a/drivers/block/drbd/drbd_int.h
 +++ b/drivers/block/drbd/drbd_int.h
-@@ -387,7 +387,7 @@ struct drbd_epoch {
+@@ -385,7 +385,7 @@ struct drbd_epoch {
        struct drbd_connection *connection;
        struct list_head list;
        unsigned int barrier_nr;
        struct drbd_connection *connection;
        struct list_head list;
        unsigned int barrier_nr;
@@ -38891,7 +37997,7 @@ index 1a00001..c0d4253 100644
        atomic_t active;     /* increased on every req. added, and dec on every finished. */
        unsigned long flags;
  };
        atomic_t active;     /* increased on every req. added, and dec on every finished. */
        unsigned long flags;
  };
-@@ -948,7 +948,7 @@ struct drbd_device {
+@@ -946,7 +946,7 @@ struct drbd_device {
        unsigned int al_tr_number;
        int al_tr_cycle;
        wait_queue_head_t seq_wait;
        unsigned int al_tr_number;
        int al_tr_cycle;
        wait_queue_head_t seq_wait;
@@ -38900,7 +38006,7 @@ index 1a00001..c0d4253 100644
        unsigned int peer_seq;
        spinlock_t peer_seq_lock;
        unsigned long comm_bm_set; /* communicated number of set bits. */
        unsigned int peer_seq;
        spinlock_t peer_seq_lock;
        unsigned long comm_bm_set; /* communicated number of set bits. */
-@@ -957,8 +957,8 @@ struct drbd_device {
+@@ -955,8 +955,8 @@ struct drbd_device {
        struct mutex own_state_mutex;
        struct mutex *state_mutex; /* either own_state_mutex or first_peer_device(device)->connection->cstate_mutex */
        char congestion_reason;  /* Why we where congested... */
        struct mutex own_state_mutex;
        struct mutex *state_mutex; /* either own_state_mutex or first_peer_device(device)->connection->cstate_mutex */
        char congestion_reason;  /* Why we where congested... */
@@ -38911,7 +38017,7 @@ index 1a00001..c0d4253 100644
        int rs_last_sect_ev; /* counter to compare with */
        int rs_last_events;  /* counter of read or write "events" (unit sectors)
                              * on the lower level device when we last looked. */
        int rs_last_sect_ev; /* counter to compare with */
        int rs_last_events;  /* counter of read or write "events" (unit sectors)
                              * on the lower level device when we last looked. */
-@@ -1569,7 +1569,7 @@ static inline int drbd_setsockopt(struct socket *sock, int level, int optname,
+@@ -1567,7 +1567,7 @@ static inline int drbd_setsockopt(struct socket *sock, int level, int optname,
        char __user *uoptval;
        int err;
  
        char __user *uoptval;
        int err;
  
@@ -38920,25 +38026,8 @@ index 1a00001..c0d4253 100644
  
        set_fs(KERNEL_DS);
        if (level == SOL_SOCKET)
  
        set_fs(KERNEL_DS);
        if (level == SOL_SOCKET)
-diff --git a/drivers/block/drbd/drbd_interval.c b/drivers/block/drbd/drbd_interval.c
-index 04a14e0..5b8f0aa 100644
---- a/drivers/block/drbd/drbd_interval.c
-+++ b/drivers/block/drbd/drbd_interval.c
-@@ -67,9 +67,9 @@ static void augment_rotate(struct rb_node *rb_old, struct rb_node *rb_new)
- }
- static const struct rb_augment_callbacks augment_callbacks = {
--      augment_propagate,
--      augment_copy,
--      augment_rotate,
-+      .propagate = augment_propagate,
-+      .copy = augment_copy,
-+      .rotate = augment_rotate,
- };
- /**
 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
 diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
-index 9b465bb..00034ecf 100644
+index 973c185..05d8b1a 100644
 --- a/drivers/block/drbd/drbd_main.c
 +++ b/drivers/block/drbd/drbd_main.c
 @@ -1328,7 +1328,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet
 --- a/drivers/block/drbd/drbd_main.c
 +++ b/drivers/block/drbd/drbd_main.c
 @@ -1328,7 +1328,7 @@ static int _drbd_send_ack(struct drbd_peer_device *peer_device, enum drbd_packet
@@ -39002,7 +38091,7 @@ index 1cd47df..57c53c0 100644
        if (!msg)
                goto failed;
 diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
        if (!msg)
                goto failed;
 diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
-index 9342b8d..b6a6825 100644
+index 6960fb0..215d76b 100644
 --- a/drivers/block/drbd/drbd_receiver.c
 +++ b/drivers/block/drbd/drbd_receiver.c
 @@ -870,7 +870,7 @@ int drbd_connected(struct drbd_peer_device *peer_device)
 --- a/drivers/block/drbd/drbd_receiver.c
 +++ b/drivers/block/drbd/drbd_receiver.c
 @@ -870,7 +870,7 @@ int drbd_connected(struct drbd_peer_device *peer_device)
@@ -39155,7 +38244,7 @@ index 9342b8d..b6a6825 100644
  static struct asender_cmd asender_tbl[] = {
        [P_PING]            = { 0, got_Ping },
 diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
  static struct asender_cmd asender_tbl[] = {
        [P_PING]            = { 0, got_Ping },
 diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c
-index 50776b3..1477c3f 100644
+index d2d1f97..6a1188f 100644
 --- a/drivers/block/drbd/drbd_worker.c
 +++ b/drivers/block/drbd/drbd_worker.c
 @@ -408,7 +408,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector,
 --- a/drivers/block/drbd/drbd_worker.c
 +++ b/drivers/block/drbd/drbd_worker.c
 @@ -408,7 +408,7 @@ static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector,
@@ -39201,7 +38290,7 @@ index 6cb1beb..bf490f7 100644
        file_end_write(file);
        if (likely(bw == len))
 diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
        file_end_write(file);
        if (likely(bw == len))
 diff --git a/drivers/block/nvme-core.c b/drivers/block/nvme-core.c
-index 02351e2..a9ea617 100644
+index e2bb8af..44b8aef 100644
 --- a/drivers/block/nvme-core.c
 +++ b/drivers/block/nvme-core.c
 @@ -73,7 +73,6 @@ static LIST_HEAD(dev_list);
 --- a/drivers/block/nvme-core.c
 +++ b/drivers/block/nvme-core.c
 @@ -73,7 +73,6 @@ static LIST_HEAD(dev_list);
@@ -39212,7 +38301,7 @@ index 02351e2..a9ea617 100644
  
  static void nvme_reset_failed_dev(struct work_struct *ws);
  
  
  static void nvme_reset_failed_dev(struct work_struct *ws);
  
-@@ -2925,6 +2924,10 @@ static struct pci_driver nvme_driver = {
+@@ -2926,6 +2925,10 @@ static struct pci_driver nvme_driver = {
        .err_handler    = &nvme_err_handler,
  };
  
        .err_handler    = &nvme_err_handler,
  };
  
@@ -39223,7 +38312,7 @@ index 02351e2..a9ea617 100644
  static int __init nvme_init(void)
  {
        int result;
  static int __init nvme_init(void)
  {
        int result;
-@@ -2941,7 +2944,6 @@ static int __init nvme_init(void)
+@@ -2942,7 +2945,6 @@ static int __init nvme_init(void)
        else if (result > 0)
                nvme_major = result;
  
        else if (result > 0)
                nvme_major = result;
  
@@ -39232,7 +38321,7 @@ index 02351e2..a9ea617 100644
        if (result)
                goto unregister_blkdev;
 diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
        if (result)
                goto unregister_blkdev;
 diff --git a/drivers/block/pktcdvd.c b/drivers/block/pktcdvd.c
-index 758ac44..58087fd 100644
+index 09e628da..7607aaa 100644
 --- a/drivers/block/pktcdvd.c
 +++ b/drivers/block/pktcdvd.c
 @@ -108,7 +108,7 @@ static int pkt_seq_show(struct seq_file *m, void *p);
 --- a/drivers/block/pktcdvd.c
 +++ b/drivers/block/pktcdvd.c
 @@ -108,7 +108,7 @@ static int pkt_seq_show(struct seq_file *m, void *p);
@@ -39244,7 +38333,7 @@ index 758ac44..58087fd 100644
  }
  
  /*
  }
  
  /*
-@@ -1888,7 +1888,7 @@ static noinline_for_stack int pkt_probe_settings(struct pktcdvd_device *pd)
+@@ -1890,7 +1890,7 @@ static noinline_for_stack int pkt_probe_settings(struct pktcdvd_device *pd)
                return -EROFS;
        }
        pd->settings.fp = ti.fp;
                return -EROFS;
        }
        pd->settings.fp = ti.fp;
@@ -39337,7 +38426,7 @@ index f038dba..bb74c08 100644
        int err;
  
 diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
        int err;
  
 diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
-index 898b84b..86f74b9 100644
+index 5d28a45..a538f90 100644
 --- a/drivers/cdrom/cdrom.c
 +++ b/drivers/cdrom/cdrom.c
 @@ -610,7 +610,6 @@ int register_cdrom(struct cdrom_device_info *cdi)
 --- a/drivers/cdrom/cdrom.c
 +++ b/drivers/cdrom/cdrom.c
 @@ -610,7 +610,6 @@ int register_cdrom(struct cdrom_device_info *cdi)
@@ -39401,7 +38490,7 @@ index 584bc31..e64a12c 100644
  
  static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode)
 diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
  
  static int gdrom_bdops_open(struct block_device *bdev, fmode_t mode)
 diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index 6e9f74a..50c7cea 100644
+index efefd12..4f1d494 100644
 --- a/drivers/char/Kconfig
 +++ b/drivers/char/Kconfig
 @@ -8,7 +8,8 @@ source "drivers/tty/Kconfig"
 --- a/drivers/char/Kconfig
 +++ b/drivers/char/Kconfig
 @@ -8,7 +8,8 @@ source "drivers/tty/Kconfig"
@@ -39482,21 +38571,8 @@ index d5d4cd8..22d561d 100644
                  struct hpet_info *info)
  {
        struct hpet_timer __iomem *timer;
                  struct hpet_info *info)
  {
        struct hpet_timer __iomem *timer;
-diff --git a/drivers/char/hw_random/intel-rng.c b/drivers/char/hw_random/intel-rng.c
-index 86fe45c..c0ea948 100644
---- a/drivers/char/hw_random/intel-rng.c
-+++ b/drivers/char/hw_random/intel-rng.c
-@@ -314,7 +314,7 @@ PFX "RNG, try using the 'no_fwh_detect' option.\n";
-               if (no_fwh_detect)
-                       return -ENODEV;
--              printk(warning);
-+              printk("%s", warning);
-               return -EBUSY;
-       }
 diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
 diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
-index e6db938..835e3a2 100644
+index f816211..89eadea 100644
 --- a/drivers/char/ipmi/ipmi_msghandler.c
 +++ b/drivers/char/ipmi/ipmi_msghandler.c
 @@ -438,7 +438,7 @@ struct ipmi_smi {
 --- a/drivers/char/ipmi/ipmi_msghandler.c
 +++ b/drivers/char/ipmi/ipmi_msghandler.c
 @@ -438,7 +438,7 @@ struct ipmi_smi {
@@ -39520,7 +38596,7 @@ index e6db938..835e3a2 100644
  
  static int is_lan_addr(struct ipmi_addr *addr)
  {
  
  static int is_lan_addr(struct ipmi_addr *addr)
  {
-@@ -2926,7 +2926,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
+@@ -2925,7 +2925,7 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
        INIT_LIST_HEAD(&intf->cmd_rcvrs);
        init_waitqueue_head(&intf->waitq);
        for (i = 0; i < IPMI_NUM_STATS; i++)
        INIT_LIST_HEAD(&intf->cmd_rcvrs);
        init_waitqueue_head(&intf->waitq);
        for (i = 0; i < IPMI_NUM_STATS; i++)
@@ -39530,7 +38606,7 @@ index e6db938..835e3a2 100644
        intf->proc_dir = NULL;
  
 diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
        intf->proc_dir = NULL;
  
 diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
-index 5d66568..c9d93c3 100644
+index 5c4e1f6..0ea58f9 100644
 --- a/drivers/char/ipmi/ipmi_si_intf.c
 +++ b/drivers/char/ipmi/ipmi_si_intf.c
 @@ -285,7 +285,7 @@ struct smi_info {
 --- a/drivers/char/ipmi/ipmi_si_intf.c
 +++ b/drivers/char/ipmi/ipmi_si_intf.c
 @@ -285,7 +285,7 @@ struct smi_info {
@@ -39554,7 +38630,7 @@ index 5d66568..c9d93c3 100644
  
  #define SI_MAX_PARMS 4
  
  
  #define SI_MAX_PARMS 4
  
-@@ -3374,7 +3374,7 @@ static int try_smi_init(struct smi_info *new_smi)
+@@ -3377,7 +3377,7 @@ static int try_smi_init(struct smi_info *new_smi)
        atomic_set(&new_smi->req_events, 0);
        new_smi->run_to_completion = false;
        for (i = 0; i < SI_NUM_STATS; i++)
        atomic_set(&new_smi->req_events, 0);
        new_smi->run_to_completion = false;
        for (i = 0; i < SI_NUM_STATS; i++)
@@ -39564,7 +38640,7 @@ index 5d66568..c9d93c3 100644
        new_smi->interrupt_disabled = true;
        atomic_set(&new_smi->stop_operation, 0);
 diff --git a/drivers/char/mem.c b/drivers/char/mem.c
        new_smi->interrupt_disabled = true;
        atomic_set(&new_smi->stop_operation, 0);
 diff --git a/drivers/char/mem.c b/drivers/char/mem.c
-index 917403f..dddd899 100644
+index 524b707..29d07c1 100644
 --- a/drivers/char/mem.c
 +++ b/drivers/char/mem.c
 @@ -18,6 +18,7 @@
 --- a/drivers/char/mem.c
 +++ b/drivers/char/mem.c
 @@ -18,6 +18,7 @@
@@ -39689,7 +38765,7 @@ index 917403f..dddd899 100644
                                return -EFAULT;
                        buf += sz;
                        p += sz;
                                return -EFAULT;
                        buf += sz;
                        p += sz;
-@@ -827,6 +874,9 @@ static const struct memdev {
+@@ -797,6 +844,9 @@ static const struct memdev {
  #ifdef CONFIG_PRINTK
        [11] = { "kmsg", 0644, &kmsg_fops, NULL },
  #endif
  #ifdef CONFIG_PRINTK
        [11] = { "kmsg", 0644, &kmsg_fops, NULL },
  #endif
@@ -39699,7 +38775,7 @@ index 917403f..dddd899 100644
  };
  
  static int memory_open(struct inode *inode, struct file *filp)
  };
  
  static int memory_open(struct inode *inode, struct file *filp)
-@@ -898,7 +948,7 @@ static int __init chr_dev_init(void)
+@@ -868,7 +918,7 @@ static int __init chr_dev_init(void)
                        continue;
  
                device_create(mem_class, NULL, MKDEV(MEM_MAJOR, minor),
                        continue;
  
                device_create(mem_class, NULL, MKDEV(MEM_MAJOR, minor),
@@ -39794,7 +38870,7 @@ index 0ea9986..e7b07e4 100644
  
        if (cmd != SIOCWANDEV)
 diff --git a/drivers/char/random.c b/drivers/char/random.c
  
        if (cmd != SIOCWANDEV)
 diff --git a/drivers/char/random.c b/drivers/char/random.c
-index 8c86a95..7c499f3 100644
+index 04645c0..560e350 100644
 --- a/drivers/char/random.c
 +++ b/drivers/char/random.c
 @@ -289,9 +289,6 @@
 --- a/drivers/char/random.c
 +++ b/drivers/char/random.c
 @@ -289,9 +289,6 @@
@@ -39949,7 +39025,7 @@ index 3a56a13..f8cbd25 100644
        return 0;
  }
 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
        return 0;
  }
 diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
-index b585b47..488f43e 100644
+index cf7a561..c319ce0 100644
 --- a/drivers/char/virtio_console.c
 +++ b/drivers/char/virtio_console.c
 @@ -684,7 +684,7 @@ static ssize_t fill_readbuf(struct port *port, char *out_buf, size_t out_count,
 --- a/drivers/char/virtio_console.c
 +++ b/drivers/char/virtio_console.c
 @@ -684,7 +684,7 @@ static ssize_t fill_readbuf(struct port *port, char *out_buf, size_t out_count,
@@ -40093,11 +39169,26 @@ index b0c18ed..1713a80 100644
  
                cpu_notifier_register_begin();
  
  
                cpu_notifier_register_begin();
  
+diff --git a/drivers/cpufreq/cpufreq-dt.c b/drivers/cpufreq/cpufreq-dt.c
+index f657c57..31d97ae 100644
+--- a/drivers/cpufreq/cpufreq-dt.c
++++ b/drivers/cpufreq/cpufreq-dt.c
+@@ -362,7 +362,9 @@ static int dt_cpufreq_probe(struct platform_device *pdev)
+       if (!IS_ERR(cpu_reg))
+               regulator_put(cpu_reg);
+-      dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev);
++      pax_open_kernel();
++      *(void **)&dt_cpufreq_driver.driver_data = dev_get_platdata(&pdev->dev);
++      pax_close_kernel();
+       ret = cpufreq_register_driver(&dt_cpufreq_driver);
+       if (ret)
 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
 diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
-index 07c8276..38bd07c 100644
+index 4473eba..a4c9dc2 100644
 --- a/drivers/cpufreq/cpufreq.c
 +++ b/drivers/cpufreq/cpufreq.c
 --- a/drivers/cpufreq/cpufreq.c
 +++ b/drivers/cpufreq/cpufreq.c
-@@ -2107,7 +2107,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor)
+@@ -2122,7 +2122,7 @@ void cpufreq_unregister_governor(struct cpufreq_governor *governor)
        }
  
        mutex_lock(&cpufreq_governor_mutex);
        }
  
        mutex_lock(&cpufreq_governor_mutex);
@@ -40106,7 +39197,7 @@ index 07c8276..38bd07c 100644
        mutex_unlock(&cpufreq_governor_mutex);
        return;
  }
        mutex_unlock(&cpufreq_governor_mutex);
        return;
  }
-@@ -2323,7 +2323,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb,
+@@ -2338,7 +2338,7 @@ static int cpufreq_cpu_callback(struct notifier_block *nfb,
        return NOTIFY_OK;
  }
  
        return NOTIFY_OK;
  }
  
@@ -40115,7 +39206,7 @@ index 07c8276..38bd07c 100644
        .notifier_call = cpufreq_cpu_callback,
  };
  
        .notifier_call = cpufreq_cpu_callback,
  };
  
-@@ -2363,13 +2363,17 @@ int cpufreq_boost_trigger_state(int state)
+@@ -2378,13 +2378,17 @@ int cpufreq_boost_trigger_state(int state)
                return 0;
  
        write_lock_irqsave(&cpufreq_driver_lock, flags);
                return 0;
  
        write_lock_irqsave(&cpufreq_driver_lock, flags);
@@ -40135,7 +39226,7 @@ index 07c8276..38bd07c 100644
                write_unlock_irqrestore(&cpufreq_driver_lock, flags);
  
                pr_err("%s: Cannot %s BOOST\n",
                write_unlock_irqrestore(&cpufreq_driver_lock, flags);
  
                pr_err("%s: Cannot %s BOOST\n",
-@@ -2426,8 +2430,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
+@@ -2441,8 +2445,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
  
        pr_debug("trying to register driver %s\n", driver_data->name);
  
  
        pr_debug("trying to register driver %s\n", driver_data->name);
  
@@ -40149,7 +39240,7 @@ index 07c8276..38bd07c 100644
  
        write_lock_irqsave(&cpufreq_driver_lock, flags);
        if (cpufreq_driver) {
  
        write_lock_irqsave(&cpufreq_driver_lock, flags);
        if (cpufreq_driver) {
-@@ -2442,8 +2449,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
+@@ -2457,8 +2464,11 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
                 * Check if driver provides function to enable boost -
                 * if not, use cpufreq_boost_set_sw as default
                 */
                 * Check if driver provides function to enable boost -
                 * if not, use cpufreq_boost_set_sw as default
                 */
@@ -40503,7 +39594,7 @@ index e431d11..d0b997e 100644
        snprintf(state->name, CPUIDLE_NAME_LEN, "POLL");
        snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
 diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c
        snprintf(state->name, CPUIDLE_NAME_LEN, "POLL");
        snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
 diff --git a/drivers/cpuidle/governor.c b/drivers/cpuidle/governor.c
-index ca89412..a7b9c49 100644
+index fb9f511..213e6cc 100644
 --- a/drivers/cpuidle/governor.c
 +++ b/drivers/cpuidle/governor.c
 @@ -87,7 +87,7 @@ int cpuidle_register_governor(struct cpuidle_governor *gov)
 --- a/drivers/cpuidle/governor.c
 +++ b/drivers/cpuidle/governor.c
 @@ -87,7 +87,7 @@ int cpuidle_register_governor(struct cpuidle_governor *gov)
@@ -40551,7 +39642,7 @@ index 8d2a772..33826c9 100644
        err = pci_request_regions(pdev, name);
        if (err)
 diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
        err = pci_request_regions(pdev, name);
        if (err)
 diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c
-index 9f90369..bfcacdb 100644
+index 30b538d8..1610d75 100644
 --- a/drivers/devfreq/devfreq.c
 +++ b/drivers/devfreq/devfreq.c
 @@ -673,7 +673,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
 --- a/drivers/devfreq/devfreq.c
 +++ b/drivers/devfreq/devfreq.c
 @@ -673,7 +673,7 @@ int devfreq_add_governor(struct devfreq_governor *governor)
@@ -40919,10 +40010,10 @@ index 5b53d61..72cee96 100644
  EXPORT_SYMBOL_GPL(cper_next_record_id);
  
 diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
  EXPORT_SYMBOL_GPL(cper_next_record_id);
  
 diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
-index 64ecbb5..d921eb3 100644
+index 8590099..d83627a 100644
 --- a/drivers/firmware/efi/efi.c
 +++ b/drivers/firmware/efi/efi.c
 --- a/drivers/firmware/efi/efi.c
 +++ b/drivers/firmware/efi/efi.c
-@@ -126,14 +126,16 @@ static struct attribute_group efi_subsys_attr_group = {
+@@ -148,14 +148,16 @@ static struct attribute_group efi_subsys_attr_group = {
  };
  
  static struct efivars generic_efivars;
  };
  
  static struct efivars generic_efivars;
@@ -41026,10 +40117,10 @@ index dbf28fa..04dad4e 100644
        return -EINVAL;
  }
 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
        return -EINVAL;
  }
 diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
-index c68d037..2f4f9a9 100644
+index e8e98ca..10f416e 100644
 --- a/drivers/gpio/gpiolib.c
 +++ b/drivers/gpio/gpiolib.c
 --- a/drivers/gpio/gpiolib.c
 +++ b/drivers/gpio/gpiolib.c
-@@ -529,8 +529,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
+@@ -537,8 +537,10 @@ static void gpiochip_irqchip_remove(struct gpio_chip *gpiochip)
        }
  
        if (gpiochip->irqchip) {
        }
  
        if (gpiochip->irqchip) {
@@ -41042,7 +40133,7 @@ index c68d037..2f4f9a9 100644
                gpiochip->irqchip = NULL;
        }
  }
                gpiochip->irqchip = NULL;
        }
  }
-@@ -596,8 +598,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
+@@ -604,8 +606,11 @@ int gpiochip_irqchip_add(struct gpio_chip *gpiochip,
                gpiochip->irqchip = NULL;
                return -EINVAL;
        }
                gpiochip->irqchip = NULL;
                return -EINVAL;
        }
@@ -41057,10 +40148,10 @@ index c68d037..2f4f9a9 100644
        /*
         * Prepare the mapping since the irqchip shall be orthogonal to
 diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
        /*
         * Prepare the mapping since the irqchip shall be orthogonal to
 diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
-index 90e7730..3b41807 100644
+index e79c8d3..a9370bc 100644
 --- a/drivers/gpu/drm/drm_crtc.c
 +++ b/drivers/gpu/drm/drm_crtc.c
 --- a/drivers/gpu/drm/drm_crtc.c
 +++ b/drivers/gpu/drm/drm_crtc.c
-@@ -3861,7 +3861,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
+@@ -3900,7 +3900,7 @@ int drm_mode_getproperty_ioctl(struct drm_device *dev,
                                        goto done;
                                }
  
                                        goto done;
                                }
  
@@ -41070,10 +40161,10 @@ index 90e7730..3b41807 100644
                                        ret = -EFAULT;
                                        goto done;
 diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
                                        ret = -EFAULT;
                                        goto done;
 diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
-index 3242e20..7e4f621 100644
+index bc3da32..7289357 100644
 --- a/drivers/gpu/drm/drm_drv.c
 +++ b/drivers/gpu/drm/drm_drv.c
 --- a/drivers/gpu/drm/drm_drv.c
 +++ b/drivers/gpu/drm/drm_drv.c
-@@ -463,7 +463,7 @@ void drm_unplug_dev(struct drm_device *dev)
+@@ -443,7 +443,7 @@ void drm_unplug_dev(struct drm_device *dev)
  
        drm_device_set_unplugged(dev);
  
  
        drm_device_set_unplugged(dev);
  
@@ -41083,7 +40174,7 @@ index 3242e20..7e4f621 100644
        }
        mutex_unlock(&drm_global_mutex);
 diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
        }
        mutex_unlock(&drm_global_mutex);
 diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
-index 79d5221..7ff73496 100644
+index ed7bc68..0d536af 100644
 --- a/drivers/gpu/drm/drm_fops.c
 +++ b/drivers/gpu/drm/drm_fops.c
 @@ -89,7 +89,7 @@ int drm_open(struct inode *inode, struct file *filp)
 --- a/drivers/gpu/drm/drm_fops.c
 +++ b/drivers/gpu/drm/drm_fops.c
 @@ -89,7 +89,7 @@ int drm_open(struct inode *inode, struct file *filp)
@@ -41104,7 +40195,7 @@ index 79d5221..7ff73496 100644
        drm_minor_release(minor);
        return retcode;
  }
        drm_minor_release(minor);
        return retcode;
  }
-@@ -384,7 +384,7 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -376,7 +376,7 @@ int drm_release(struct inode *inode, struct file *filp)
  
        mutex_lock(&drm_global_mutex);
  
  
        mutex_lock(&drm_global_mutex);
  
@@ -41113,7 +40204,7 @@ index 79d5221..7ff73496 100644
  
        mutex_lock(&dev->struct_mutex);
        list_del(&file_priv->lhead);
  
        mutex_lock(&dev->struct_mutex);
        list_del(&file_priv->lhead);
-@@ -397,10 +397,10 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -389,10 +389,10 @@ int drm_release(struct inode *inode, struct file *filp)
         * Begin inline drm_release
         */
  
         * Begin inline drm_release
         */
  
@@ -41126,7 +40217,7 @@ index 79d5221..7ff73496 100644
  
        /* Release any auth tokens that might point to this file_priv,
           (do that under the drm_global_mutex) */
  
        /* Release any auth tokens that might point to this file_priv,
           (do that under the drm_global_mutex) */
-@@ -471,7 +471,7 @@ int drm_release(struct inode *inode, struct file *filp)
+@@ -465,7 +465,7 @@ int drm_release(struct inode *inode, struct file *filp)
         * End inline drm_release
         */
  
         * End inline drm_release
         */
  
@@ -41197,10 +40288,10 @@ index 3d2e91c..d31c4c9 100644
                item->object = NULL;
        }
 diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
                item->object = NULL;
        }
 diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c
-index ecaf0fa..a49cee9 100644
+index 51efebd..2b70935 100644
 --- a/drivers/gpu/drm/drm_info.c
 +++ b/drivers/gpu/drm/drm_info.c
 --- a/drivers/gpu/drm/drm_info.c
 +++ b/drivers/gpu/drm/drm_info.c
-@@ -73,10 +73,13 @@ int drm_vm_info(struct seq_file *m, void *data)
+@@ -76,10 +76,13 @@ int drm_vm_info(struct seq_file *m, void *data)
        struct drm_local_map *map;
        struct drm_map_list *r_list;
  
        struct drm_local_map *map;
        struct drm_map_list *r_list;
  
@@ -41218,7 +40309,7 @@ index ecaf0fa..a49cee9 100644
        const char *type;
        int i;
  
        const char *type;
        int i;
  
-@@ -87,7 +90,7 @@ int drm_vm_info(struct seq_file *m, void *data)
+@@ -90,7 +93,7 @@ int drm_vm_info(struct seq_file *m, void *data)
                map = r_list->map;
                if (!map)
                        continue;
                map = r_list->map;
                if (!map)
                        continue;
@@ -41227,18 +40318,6 @@ index ecaf0fa..a49cee9 100644
                        type = "??";
                else
                        type = types[map->type];
                        type = "??";
                else
                        type = types[map->type];
-@@ -259,7 +262,11 @@ int drm_vma_info(struct seq_file *m, void *data)
-                          vma->vm_flags & VM_MAYSHARE ? 's' : 'p',
-                          vma->vm_flags & VM_LOCKED ? 'l' : '-',
-                          vma->vm_flags & VM_IO ? 'i' : '-',
-+#ifdef CONFIG_GRKERNSEC_HIDESYM
-+                         0);
-+#else
-                          vma->vm_pgoff);
-+#endif
- #if defined(__i386__)
-               pgprot = pgprot_val(vma->vm_page_prot);
 diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c
 index 2f4c4343..dd12cd2 100644
 --- a/drivers/gpu/drm/drm_ioc32.c
 diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c
 index 2f4c4343..dd12cd2 100644
 --- a/drivers/gpu/drm/drm_ioc32.c
@@ -41292,7 +40371,7 @@ index 2f4c4343..dd12cd2 100644
                ret = drm_ioctl(filp, cmd, arg);
  
 diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
                ret = drm_ioctl(filp, cmd, arg);
  
 diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
-index 40be746..fd78faf 100644
+index 00587a1..57a65ca 100644
 --- a/drivers/gpu/drm/drm_ioctl.c
 +++ b/drivers/gpu/drm/drm_ioctl.c
 @@ -642,7 +642,7 @@ long drm_ioctl(struct file *filp,
 --- a/drivers/gpu/drm/drm_ioctl.c
 +++ b/drivers/gpu/drm/drm_ioctl.c
 @@ -642,7 +642,7 @@ long drm_ioctl(struct file *filp,
@@ -41305,10 +40384,10 @@ index 40be746..fd78faf 100644
        int retcode = -EINVAL;
        char stack_kdata[128];
 diff --git a/drivers/gpu/drm/i810/i810_drv.h b/drivers/gpu/drm/i810/i810_drv.h
        int retcode = -EINVAL;
        char stack_kdata[128];
 diff --git a/drivers/gpu/drm/i810/i810_drv.h b/drivers/gpu/drm/i810/i810_drv.h
-index d4d16ed..8fb0b51 100644
+index 93ec5dc..82acbaf 100644
 --- a/drivers/gpu/drm/i810/i810_drv.h
 +++ b/drivers/gpu/drm/i810/i810_drv.h
 --- a/drivers/gpu/drm/i810/i810_drv.h
 +++ b/drivers/gpu/drm/i810/i810_drv.h
-@@ -108,8 +108,8 @@ typedef struct drm_i810_private {
+@@ -110,8 +110,8 @@ typedef struct drm_i810_private {
        int page_flipping;
  
        wait_queue_head_t irq_queue;
        int page_flipping;
  
        wait_queue_head_t irq_queue;
@@ -41320,10 +40399,10 @@ index d4d16ed..8fb0b51 100644
        int front_offset;
  } drm_i810_private_t;
 diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
        int front_offset;
  } drm_i810_private_t;
 diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
-index 9933c26..32cc097 100644
+index 318ade9..1f5de55 100644
 --- a/drivers/gpu/drm/i915/i915_dma.c
 +++ b/drivers/gpu/drm/i915/i915_dma.c
 --- a/drivers/gpu/drm/i915/i915_dma.c
 +++ b/drivers/gpu/drm/i915/i915_dma.c
-@@ -1292,7 +1292,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
+@@ -1294,7 +1294,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
         * locking inversion with the driver load path. And the access here is
         * completely racy anyway. So don't bother with locking for now.
         */
         * locking inversion with the driver load path. And the access here is
         * completely racy anyway. So don't bother with locking for now.
         */
@@ -41333,21 +40412,24 @@ index 9933c26..32cc097 100644
  
  static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
 diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
  
  static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
 diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-index 60998fc..3b244bc 100644
+index 1a0611b..dd1fbfc 100644
 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
 +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
-@@ -891,9 +891,9 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
+@@ -866,12 +866,12 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
  static int
  static int
- validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
+ validate_exec_list(struct drm_device *dev,
+                  struct drm_i915_gem_exec_object2 *exec,
 -                 int count)
 +                 unsigned int count)
  {
 -                 int count)
 +                 unsigned int count)
  {
--      int i;
-+      unsigned int i;
        unsigned relocs_total = 0;
        unsigned relocs_max = UINT_MAX / sizeof(struct drm_i915_gem_relocation_entry);
        unsigned relocs_total = 0;
        unsigned relocs_max = UINT_MAX / sizeof(struct drm_i915_gem_relocation_entry);
+       unsigned invalid_flags;
+-      int i;
++      unsigned int i;
  
  
+       invalid_flags = __EXEC_OBJECT_UNKNOWN_FLAGS;
+       if (USES_FULL_PPGTT(dev))
 diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c
 index 2e0613e..a8b94d9 100644
 --- a/drivers/gpu/drm/i915/i915_ioc32.c
 diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c
 index 2e0613e..a8b94d9 100644
 --- a/drivers/gpu/drm/i915/i915_ioc32.c
@@ -41384,10 +40466,10 @@ index 2e0613e..a8b94d9 100644
  
        return ret;
 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
  
        return ret;
 diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index b71a026..8b6cc10 100644
+index 9cb5c95..9228666 100644
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
 --- a/drivers/gpu/drm/i915/intel_display.c
 +++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -12437,13 +12437,13 @@ struct intel_quirk {
+@@ -12811,13 +12811,13 @@ struct intel_quirk {
        int subsystem_vendor;
        int subsystem_device;
        void (*hook)(struct drm_device *dev);
        int subsystem_vendor;
        int subsystem_device;
        void (*hook)(struct drm_device *dev);
@@ -41403,7 +40485,7 @@ index b71a026..8b6cc10 100644
  
  static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
  {
  
  static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
  {
-@@ -12451,18 +12451,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
+@@ -12825,18 +12825,20 @@ static int intel_dmi_reverse_brightness(const struct dmi_system_id *id)
        return 1;
  }
  
        return 1;
  }
  
@@ -41435,10 +40517,10 @@ index b71a026..8b6cc10 100644
        },
  };
 diff --git a/drivers/gpu/drm/mga/mga_drv.h b/drivers/gpu/drm/mga/mga_drv.h
        },
  };
 diff --git a/drivers/gpu/drm/mga/mga_drv.h b/drivers/gpu/drm/mga/mga_drv.h
-index fe45321..836fdca 100644
+index b4a2014..219ab78 100644
 --- a/drivers/gpu/drm/mga/mga_drv.h
 +++ b/drivers/gpu/drm/mga/mga_drv.h
 --- a/drivers/gpu/drm/mga/mga_drv.h
 +++ b/drivers/gpu/drm/mga/mga_drv.h
-@@ -120,9 +120,9 @@ typedef struct drm_mga_private {
+@@ -122,9 +122,9 @@ typedef struct drm_mga_private {
        u32 clear_cmd;
        u32 maccess;
  
        u32 clear_cmd;
        u32 maccess;
  
@@ -41539,10 +40621,10 @@ index dae2c96..324dbe4 100644
  #define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry })
  
 diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h
  #define BIT_TABLE(id, funcid) ((struct bit_table){ id, parse_bit_##funcid##_tbl_entry })
  
 diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h
-index b02b024..aed7bad 100644
+index 8ae36f2..1147a30 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_drm.h
 +++ b/drivers/gpu/drm/nouveau/nouveau_drm.h
 --- a/drivers/gpu/drm/nouveau/nouveau_drm.h
 +++ b/drivers/gpu/drm/nouveau/nouveau_drm.h
-@@ -119,7 +119,6 @@ struct nouveau_drm {
+@@ -121,7 +121,6 @@ struct nouveau_drm {
                struct drm_global_reference mem_global_ref;
                struct ttm_bo_global_ref bo_global_ref;
                struct ttm_bo_device bdev;
                struct drm_global_reference mem_global_ref;
                struct ttm_bo_global_ref bo_global_ref;
                struct ttm_bo_device bdev;
@@ -41564,10 +40646,10 @@ index 462679a..88e32a7 100644
  
        if (nr < DRM_COMMAND_BASE)
 diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
  
        if (nr < DRM_COMMAND_BASE)
 diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
-index 53874b7..1db0a68 100644
+index 753a6de..dd66b98 100644
 --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
 +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
 --- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
 +++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
-@@ -127,11 +127,11 @@ nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
+@@ -126,11 +126,11 @@ nouveau_vram_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
  }
  
  const struct ttm_mem_type_manager_func nouveau_vram_manager = {
  }
  
  const struct ttm_mem_type_manager_func nouveau_vram_manager = {
@@ -41584,7 +40666,7 @@ index 53874b7..1db0a68 100644
  };
  
  static int
  };
  
  static int
-@@ -196,11 +196,11 @@ nouveau_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
+@@ -194,11 +194,11 @@ nouveau_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
  }
  
  const struct ttm_mem_type_manager_func nouveau_gart_manager = {
  }
  
  const struct ttm_mem_type_manager_func nouveau_gart_manager = {
@@ -41601,7 +40683,7 @@ index 53874b7..1db0a68 100644
  };
  
  /*XXX*/
  };
  
  /*XXX*/
-@@ -270,11 +270,11 @@ nv04_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
+@@ -267,11 +267,11 @@ nv04_gart_manager_debug(struct ttm_mem_type_manager *man, const char *prefix)
  }
  
  const struct ttm_mem_type_manager_func nv04_gart_manager = {
  }
  
  const struct ttm_mem_type_manager_func nv04_gart_manager = {
@@ -41632,7 +40714,7 @@ index c7592ec..dd45ebc 100644
  
  static const struct vga_switcheroo_client_ops
 diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
  
  static const struct vga_switcheroo_client_ops
 diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
-index eb89653..613cf71 100644
+index 9782364..89bd954 100644
 --- a/drivers/gpu/drm/qxl/qxl_cmd.c
 +++ b/drivers/gpu/drm/qxl/qxl_cmd.c
 @@ -285,27 +285,27 @@ static int wait_for_io_cmd_user(struct qxl_device *qdev, uint8_t val, long port,
 --- a/drivers/gpu/drm/qxl/qxl_cmd.c
 +++ b/drivers/gpu/drm/qxl/qxl_cmd.c
 @@ -285,27 +285,27 @@ static int wait_for_io_cmd_user(struct qxl_device *qdev, uint8_t val, long port,
@@ -41670,7 +40752,7 @@ index eb89653..613cf71 100644
        if (ret > 0)
                ret = 0;
 diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c b/drivers/gpu/drm/qxl/qxl_debugfs.c
        if (ret > 0)
                ret = 0;
 diff --git a/drivers/gpu/drm/qxl/qxl_debugfs.c b/drivers/gpu/drm/qxl/qxl_debugfs.c
-index c3c2bbd..bc3c0fb 100644
+index 6911b8c..89d6867 100644
 --- a/drivers/gpu/drm/qxl/qxl_debugfs.c
 +++ b/drivers/gpu/drm/qxl/qxl_debugfs.c
 @@ -42,10 +42,10 @@ qxl_debugfs_irq_received(struct seq_file *m, void *data)
 --- a/drivers/gpu/drm/qxl/qxl_debugfs.c
 +++ b/drivers/gpu/drm/qxl/qxl_debugfs.c
 @@ -42,10 +42,10 @@ qxl_debugfs_irq_received(struct seq_file *m, void *data)
@@ -41689,7 +40771,7 @@ index c3c2bbd..bc3c0fb 100644
        return 0;
  }
 diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
        return 0;
  }
 diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
-index 36ed40b..0397633 100644
+index 7c6cafe..460f542 100644
 --- a/drivers/gpu/drm/qxl/qxl_drv.h
 +++ b/drivers/gpu/drm/qxl/qxl_drv.h
 @@ -290,10 +290,10 @@ struct qxl_device {
 --- a/drivers/gpu/drm/qxl/qxl_drv.h
 +++ b/drivers/gpu/drm/qxl/qxl_drv.h
 @@ -290,10 +290,10 @@ struct qxl_device {
@@ -41787,7 +40869,7 @@ index 0bf1e20..42a7310 100644
        ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq);
        qdev->ram_header->int_mask = QXL_INTERRUPT_MASK;
 diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
        ret = drm_irq_install(qdev->ddev, qdev->ddev->pdev->irq);
        qdev->ram_header->int_mask = QXL_INTERRUPT_MASK;
 diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
-index 71a1bae..cb1f103 100644
+index 0cbc4c9..0e46686 100644
 --- a/drivers/gpu/drm/qxl/qxl_ttm.c
 +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
 @@ -103,7 +103,7 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev)
 --- a/drivers/gpu/drm/qxl/qxl_ttm.c
 +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
 @@ -103,7 +103,7 @@ static void qxl_ttm_global_fini(struct qxl_device *qdev)
@@ -41810,7 +40892,7 @@ index 71a1bae..cb1f103 100644
        }
        vma->vm_ops = &qxl_ttm_vm_ops;
        return 0;
        }
        vma->vm_ops = &qxl_ttm_vm_ops;
        return 0;
-@@ -555,25 +557,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data)
+@@ -464,25 +466,23 @@ static int qxl_mm_dump_table(struct seq_file *m, void *data)
  static int qxl_ttm_debugfs_init(struct qxl_device *qdev)
  {
  #if defined(CONFIG_DEBUG_FS)
  static int qxl_ttm_debugfs_init(struct qxl_device *qdev)
  {
  #if defined(CONFIG_DEBUG_FS)
@@ -41852,7 +40934,7 @@ index 71a1bae..cb1f103 100644
        return 0;
  #endif
 diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c
        return 0;
  #endif
 diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c
-index 59459fe..be26b31 100644
+index 2c45ac9..5d740f8 100644
 --- a/drivers/gpu/drm/r128/r128_cce.c
 +++ b/drivers/gpu/drm/r128/r128_cce.c
 @@ -377,7 +377,7 @@ static int r128_do_init_cce(struct drm_device *dev, drm_r128_init_t *init)
 --- a/drivers/gpu/drm/r128/r128_cce.c
 +++ b/drivers/gpu/drm/r128/r128_cce.c
 @@ -377,7 +377,7 @@ static int r128_do_init_cce(struct drm_device *dev, drm_r128_init_t *init)
@@ -41865,10 +40947,10 @@ index 59459fe..be26b31 100644
        /* We don't support anything other than bus-mastering ring mode,
         * but the ring can be in either AGP or PCI space for the ring
 diff --git a/drivers/gpu/drm/r128/r128_drv.h b/drivers/gpu/drm/r128/r128_drv.h
        /* We don't support anything other than bus-mastering ring mode,
         * but the ring can be in either AGP or PCI space for the ring
 diff --git a/drivers/gpu/drm/r128/r128_drv.h b/drivers/gpu/drm/r128/r128_drv.h
-index 5bf3f5f..7000661 100644
+index 723e5d6..102dbaf 100644
 --- a/drivers/gpu/drm/r128/r128_drv.h
 +++ b/drivers/gpu/drm/r128/r128_drv.h
 --- a/drivers/gpu/drm/r128/r128_drv.h
 +++ b/drivers/gpu/drm/r128/r128_drv.h
-@@ -90,14 +90,14 @@ typedef struct drm_r128_private {
+@@ -93,14 +93,14 @@ typedef struct drm_r128_private {
        int is_pci;
        unsigned long cce_buffers_offset;
  
        int is_pci;
        unsigned long cce_buffers_offset;
  
@@ -41981,7 +41063,7 @@ index 4a85bb6..aaea819 100644
        if (regcomp
            (&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) {
 diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
        if (regcomp
            (&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) {
 diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
-index 5d4416f..80b7fc4 100644
+index 995a8b1..b7cb898 100644
 --- a/drivers/gpu/drm/radeon/radeon_device.c
 +++ b/drivers/gpu/drm/radeon/radeon_device.c
 @@ -1214,7 +1214,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
 --- a/drivers/gpu/drm/radeon/radeon_device.c
 +++ b/drivers/gpu/drm/radeon/radeon_device.c
 @@ -1214,7 +1214,7 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
@@ -41994,10 +41076,10 @@ index 5d4416f..80b7fc4 100644
  
  static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = {
 diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
  
  static const struct vga_switcheroo_client_ops radeon_switcheroo_ops = {
 diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
-index dafd812..1bf20c7 100644
+index 46bd393..6ae4719 100644
 --- a/drivers/gpu/drm/radeon/radeon_drv.h
 +++ b/drivers/gpu/drm/radeon/radeon_drv.h
 --- a/drivers/gpu/drm/radeon/radeon_drv.h
 +++ b/drivers/gpu/drm/radeon/radeon_drv.h
-@@ -262,7 +262,7 @@ typedef struct drm_radeon_private {
+@@ -264,7 +264,7 @@ typedef struct drm_radeon_private {
  
        /* SW interrupt */
        wait_queue_head_t swi_queue;
  
        /* SW interrupt */
        wait_queue_head_t swi_queue;
@@ -42075,7 +41157,7 @@ index 244b19b..c19226d 100644
  
        dev->max_vblank_count = 0x001fffff;
 diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c
  
        dev->max_vblank_count = 0x001fffff;
 diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c
-index 23bb64f..69d7234 100644
+index 535403e..5dd655b 100644
 --- a/drivers/gpu/drm/radeon/radeon_state.c
 +++ b/drivers/gpu/drm/radeon/radeon_state.c
 @@ -2168,7 +2168,7 @@ static int radeon_cp_clear(struct drm_device *dev, void *data, struct drm_file *
 --- a/drivers/gpu/drm/radeon/radeon_state.c
 +++ b/drivers/gpu/drm/radeon/radeon_state.c
 @@ -2168,7 +2168,7 @@ static int radeon_cp_clear(struct drm_device *dev, void *data, struct drm_file *
@@ -42097,10 +41179,10 @@ index 23bb64f..69d7234 100644
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
  
 diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
        DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
  
 diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
-index 72afe82..056a57a 100644
+index 8624979..65e5243 100644
 --- a/drivers/gpu/drm/radeon/radeon_ttm.c
 +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
 --- a/drivers/gpu/drm/radeon/radeon_ttm.c
 +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
-@@ -801,7 +801,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size)
+@@ -936,7 +936,7 @@ void radeon_ttm_set_active_vram_size(struct radeon_device *rdev, u64 size)
        man->size = size >> PAGE_SHIFT;
  }
  
        man->size = size >> PAGE_SHIFT;
  }
  
@@ -42109,7 +41191,7 @@ index 72afe82..056a57a 100644
  static const struct vm_operations_struct *ttm_vm_ops = NULL;
  
  static int radeon_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
  static const struct vm_operations_struct *ttm_vm_ops = NULL;
  
  static int radeon_ttm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
-@@ -842,8 +842,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma)
+@@ -977,8 +977,10 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma)
        }
        if (unlikely(ttm_vm_ops == NULL)) {
                ttm_vm_ops = vma->vm_ops;
        }
        if (unlikely(ttm_vm_ops == NULL)) {
                ttm_vm_ops = vma->vm_ops;
@@ -42121,10 +41203,10 @@ index 72afe82..056a57a 100644
        vma->vm_ops = &radeon_ttm_vm_ops;
        return 0;
 diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
        vma->vm_ops = &radeon_ttm_vm_ops;
        return 0;
 diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
-index 6553fd2..aecd29c 100644
+index 054a79f..30d9ac4 100644
 --- a/drivers/gpu/drm/tegra/dc.c
 +++ b/drivers/gpu/drm/tegra/dc.c
 --- a/drivers/gpu/drm/tegra/dc.c
 +++ b/drivers/gpu/drm/tegra/dc.c
-@@ -1243,7 +1243,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
+@@ -1242,7 +1242,7 @@ static int tegra_dc_debugfs_init(struct tegra_dc *dc, struct drm_minor *minor)
        }
  
        for (i = 0; i < ARRAY_SIZE(debugfs_files); i++)
        }
  
        for (i = 0; i < ARRAY_SIZE(debugfs_files); i++)
@@ -42160,10 +41242,10 @@ index ffe2654..03c7b1c 100644
        struct dentry *debugfs;
  };
 diff --git a/drivers/gpu/drm/ttm/ttm_bo_manager.c b/drivers/gpu/drm/ttm/ttm_bo_manager.c
        struct dentry *debugfs;
  };
 diff --git a/drivers/gpu/drm/ttm/ttm_bo_manager.c b/drivers/gpu/drm/ttm/ttm_bo_manager.c
-index 9e103a48..0e117f3 100644
+index 964387f..4eafc00 100644
 --- a/drivers/gpu/drm/ttm/ttm_bo_manager.c
 +++ b/drivers/gpu/drm/ttm/ttm_bo_manager.c
 --- a/drivers/gpu/drm/ttm/ttm_bo_manager.c
 +++ b/drivers/gpu/drm/ttm/ttm_bo_manager.c
-@@ -147,10 +147,10 @@ static void ttm_bo_man_debug(struct ttm_mem_type_manager *man,
+@@ -146,10 +146,10 @@ static void ttm_bo_man_debug(struct ttm_mem_type_manager *man,
  }
  
  const struct ttm_mem_type_manager_func ttm_bo_manager_func = {
  }
  
  const struct ttm_mem_type_manager_func ttm_bo_manager_func = {
@@ -42180,7 +41262,7 @@ index 9e103a48..0e117f3 100644
  };
  EXPORT_SYMBOL(ttm_bo_manager_func);
 diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
  };
  EXPORT_SYMBOL(ttm_bo_manager_func);
 diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
-index dbc2def..0a9f710 100644
+index a1803fb..c53f6b0 100644
 --- a/drivers/gpu/drm/ttm/ttm_memory.c
 +++ b/drivers/gpu/drm/ttm/ttm_memory.c
 @@ -264,7 +264,7 @@ static int ttm_mem_init_kernel_zone(struct ttm_mem_global *glob,
 --- a/drivers/gpu/drm/ttm/ttm_memory.c
 +++ b/drivers/gpu/drm/ttm/ttm_memory.c
 @@ -264,7 +264,7 @@ static int ttm_mem_init_kernel_zone(struct ttm_mem_global *glob,
@@ -42192,7 +41274,7 @@ index dbc2def..0a9f710 100644
        if (unlikely(ret != 0)) {
                kobject_put(&zone->kobj);
                return ret;
        if (unlikely(ret != 0)) {
                kobject_put(&zone->kobj);
                return ret;
-@@ -347,7 +347,7 @@ static int ttm_mem_init_dma32_zone(struct ttm_mem_global *glob,
+@@ -348,7 +348,7 @@ static int ttm_mem_init_dma32_zone(struct ttm_mem_global *glob,
        zone->glob = glob;
        glob->zone_dma32 = zone;
        ret = kobject_init_and_add(
        zone->glob = glob;
        glob->zone_dma32 = zone;
        ret = kobject_init_and_add(
@@ -42201,8 +41283,161 @@ index dbc2def..0a9f710 100644
        if (unlikely(ret != 0)) {
                kobject_put(&zone->kobj);
                return ret;
        if (unlikely(ret != 0)) {
                kobject_put(&zone->kobj);
                return ret;
+diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
+index 09874d6..d6da1de 100644
+--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
++++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
+@@ -54,7 +54,7 @@
+ #define NUM_PAGES_TO_ALLOC            (PAGE_SIZE/sizeof(struct page *))
+ #define SMALL_ALLOCATION              16
+-#define FREE_ALL_PAGES                        (~0U)
++#define FREE_ALL_PAGES                        (~0UL)
+ /* times are in msecs */
+ #define PAGE_FREE_INTERVAL            1000
+@@ -299,14 +299,13 @@ static void ttm_pool_update_free_locked(struct ttm_page_pool *pool,
+  * @free_all: If set to true will free all pages in pool
+  * @gfp: GFP flags.
+  **/
+-static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free,
++static unsigned long ttm_page_pool_free(struct ttm_page_pool *pool, unsigned long nr_free,
+                             gfp_t gfp)
+ {
+       unsigned long irq_flags;
+       struct page *p;
+       struct page **pages_to_free;
+-      unsigned freed_pages = 0,
+-               npages_to_free = nr_free;
++      unsigned long freed_pages = 0, npages_to_free = nr_free;
+       if (NUM_PAGES_TO_ALLOC < nr_free)
+               npages_to_free = NUM_PAGES_TO_ALLOC;
+@@ -366,7 +365,8 @@ restart:
+               __list_del(&p->lru, &pool->list);
+               ttm_pool_update_free_locked(pool, freed_pages);
+-              nr_free -= freed_pages;
++              if (likely(nr_free != FREE_ALL_PAGES))
++                      nr_free -= freed_pages;
+       }
+       spin_unlock_irqrestore(&pool->lock, irq_flags);
+@@ -395,7 +395,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
+       unsigned i;
+       unsigned pool_offset;
+       struct ttm_page_pool *pool;
+-      int shrink_pages = sc->nr_to_scan;
++      unsigned long shrink_pages = sc->nr_to_scan;
+       unsigned long freed = 0;
+       if (!mutex_trylock(&lock))
+@@ -403,7 +403,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
+       pool_offset = ++start_pool % NUM_POOLS;
+       /* select start pool in round robin fashion */
+       for (i = 0; i < NUM_POOLS; ++i) {
+-              unsigned nr_free = shrink_pages;
++              unsigned long nr_free = shrink_pages;
+               if (shrink_pages == 0)
+                       break;
+               pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
+@@ -669,7 +669,7 @@ out:
+ }
+ /* Put all pages in pages list to correct pool to wait for reuse */
+-static void ttm_put_pages(struct page **pages, unsigned npages, int flags,
++static void ttm_put_pages(struct page **pages, unsigned long npages, int flags,
+                         enum ttm_caching_state cstate)
+ {
+       unsigned long irq_flags;
+@@ -724,7 +724,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
+       struct list_head plist;
+       struct page *p = NULL;
+       gfp_t gfp_flags = GFP_USER;
+-      unsigned count;
++      unsigned long count;
+       int r;
+       /* set zero flag for page allocation if required */
+diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+index c96db43..c367557 100644
+--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
++++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+@@ -56,7 +56,7 @@
+ #define NUM_PAGES_TO_ALLOC            (PAGE_SIZE/sizeof(struct page *))
+ #define SMALL_ALLOCATION              4
+-#define FREE_ALL_PAGES                        (~0U)
++#define FREE_ALL_PAGES                        (~0UL)
+ /* times are in msecs */
+ #define IS_UNDEFINED                  (0)
+ #define IS_WC                         (1<<1)
+@@ -413,15 +413,14 @@ static void ttm_dma_page_put(struct dma_pool *pool, struct dma_page *d_page)
+  * @nr_free: If set to true will free all pages in pool
+  * @gfp: GFP flags.
+  **/
+-static unsigned ttm_dma_page_pool_free(struct dma_pool *pool, unsigned nr_free,
++static unsigned long ttm_dma_page_pool_free(struct dma_pool *pool, unsigned long nr_free,
+                                      gfp_t gfp)
+ {
+       unsigned long irq_flags;
+       struct dma_page *dma_p, *tmp;
+       struct page **pages_to_free;
+       struct list_head d_pages;
+-      unsigned freed_pages = 0,
+-               npages_to_free = nr_free;
++      unsigned long freed_pages = 0, npages_to_free = nr_free;
+       if (NUM_PAGES_TO_ALLOC < nr_free)
+               npages_to_free = NUM_PAGES_TO_ALLOC;
+@@ -494,7 +493,8 @@ restart:
+       /* remove range of pages from the pool */
+       if (freed_pages) {
+               ttm_pool_update_free_locked(pool, freed_pages);
+-              nr_free -= freed_pages;
++              if (likely(nr_free != FREE_ALL_PAGES))
++                      nr_free -= freed_pages;
+       }
+       spin_unlock_irqrestore(&pool->lock, irq_flags);
+@@ -929,7 +929,7 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
+       struct dma_page *d_page, *next;
+       enum pool_type type;
+       bool is_cached = false;
+-      unsigned count = 0, i, npages = 0;
++      unsigned long count = 0, i, npages = 0;
+       unsigned long irq_flags;
+       type = ttm_to_type(ttm->page_flags, ttm->caching_state);
+@@ -1007,7 +1007,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
+       static unsigned start_pool;
+       unsigned idx = 0;
+       unsigned pool_offset;
+-      unsigned shrink_pages = sc->nr_to_scan;
++      unsigned long shrink_pages = sc->nr_to_scan;
+       struct device_pools *p;
+       unsigned long freed = 0;
+@@ -1020,7 +1020,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
+               goto out;
+       pool_offset = ++start_pool % _manager->npools;
+       list_for_each_entry(p, &_manager->pools, pools) {
+-              unsigned nr_free;
++              unsigned long nr_free;
+               if (!p->dev)
+                       continue;
+@@ -1034,7 +1034,7 @@ ttm_dma_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
+                                                     sc->gfp_mask);
+               freed += nr_free - shrink_pages;
+-              pr_debug("%s: (%s:%d) Asked to shrink %d, have %d more to go\n",
++              pr_debug("%s: (%s:%d) Asked to shrink %lu, have %lu more to go\n",
+                        p->pool->dev_name, p->pool->name, current->pid,
+                        nr_free, shrink_pages);
+       }
 diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
 diff --git a/drivers/gpu/drm/udl/udl_fb.c b/drivers/gpu/drm/udl/udl_fb.c
-index d1da339..829235e 100644
+index 8cbcb45..a4d9cf7 100644
 --- a/drivers/gpu/drm/udl/udl_fb.c
 +++ b/drivers/gpu/drm/udl/udl_fb.c
 @@ -367,7 +367,6 @@ static int udl_fb_release(struct fb_info *info, int user)
 --- a/drivers/gpu/drm/udl/udl_fb.c
 +++ b/drivers/gpu/drm/udl/udl_fb.c
 @@ -367,7 +367,6 @@ static int udl_fb_release(struct fb_info *info, int user)
@@ -42214,10 +41449,10 @@ index d1da339..829235e 100644
  
        pr_warn("released /dev/fb%d user=%d count=%d\n",
 diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h
  
        pr_warn("released /dev/fb%d user=%d count=%d\n",
 diff --git a/drivers/gpu/drm/via/via_drv.h b/drivers/gpu/drm/via/via_drv.h
-index ad02732..144f5ed 100644
+index ef8c500..01030c8 100644
 --- a/drivers/gpu/drm/via/via_drv.h
 +++ b/drivers/gpu/drm/via/via_drv.h
 --- a/drivers/gpu/drm/via/via_drv.h
 +++ b/drivers/gpu/drm/via/via_drv.h
-@@ -51,7 +51,7 @@ typedef struct drm_via_ring_buffer {
+@@ -53,7 +53,7 @@ typedef struct drm_via_ring_buffer {
  typedef uint32_t maskarray_t[5];
  
  typedef struct drm_via_irq {
  typedef uint32_t maskarray_t[5];
  
  typedef struct drm_via_irq {
@@ -42226,7 +41461,7 @@ index ad02732..144f5ed 100644
        uint32_t pending_mask;
        uint32_t enable_mask;
        wait_queue_head_t irq_queue;
        uint32_t pending_mask;
        uint32_t enable_mask;
        wait_queue_head_t irq_queue;
-@@ -75,7 +75,7 @@ typedef struct drm_via_private {
+@@ -77,7 +77,7 @@ typedef struct drm_via_private {
        struct timeval last_vblank;
        int last_vblank_valid;
        unsigned usec_per_vblank;
        struct timeval last_vblank;
        int last_vblank_valid;
        unsigned usec_per_vblank;
@@ -42310,10 +41545,10 @@ index 1319433..a993b0c 100644
        case VIA_IRQ_ABSOLUTE:
                break;
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
        case VIA_IRQ_ABSOLUTE:
                break;
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
-index 99f7317..33a835b 100644
+index 4ee799b..69fc0d1 100644
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h
-@@ -447,7 +447,7 @@ struct vmw_private {
+@@ -446,7 +446,7 @@ struct vmw_private {
         * Fencing and IRQs.
         */
  
         * Fencing and IRQs.
         */
  
@@ -42323,7 +41558,7 @@ index 99f7317..33a835b 100644
        wait_queue_head_t fifo_queue;
        int fence_queue_waiters; /* Protected by hw_mutex */
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
        wait_queue_head_t fifo_queue;
        int fence_queue_waiters; /* Protected by hw_mutex */
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
-index 6eae14d..aa311b3 100644
+index 09e10ae..cb76c60 100644
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
 @@ -154,7 +154,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fifo.c
 @@ -154,7 +154,7 @@ int vmw_fifo_init(struct vmw_private *dev_priv, struct vmw_fifo_state *fifo)
@@ -42335,7 +41570,7 @@ index 6eae14d..aa311b3 100644
        iowrite32(dev_priv->last_read_seqno, fifo_mem + SVGA_FIFO_FENCE);
        vmw_marker_queue_init(&fifo->marker_queue);
        return vmw_fifo_send_fence(dev_priv, &dummy);
        iowrite32(dev_priv->last_read_seqno, fifo_mem + SVGA_FIFO_FENCE);
        vmw_marker_queue_init(&fifo->marker_queue);
        return vmw_fifo_send_fence(dev_priv, &dummy);
-@@ -373,7 +373,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes)
+@@ -378,7 +378,7 @@ void *vmw_fifo_reserve(struct vmw_private *dev_priv, uint32_t bytes)
                                if (reserveable)
                                        iowrite32(bytes, fifo_mem +
                                                  SVGA_FIFO_RESERVED);
                                if (reserveable)
                                        iowrite32(bytes, fifo_mem +
                                                  SVGA_FIFO_RESERVED);
@@ -42344,7 +41579,7 @@ index 6eae14d..aa311b3 100644
                        } else {
                                need_bounce = true;
                        }
                        } else {
                                need_bounce = true;
                        }
-@@ -493,7 +493,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
+@@ -498,7 +498,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
  
        fm = vmw_fifo_reserve(dev_priv, bytes);
        if (unlikely(fm == NULL)) {
  
        fm = vmw_fifo_reserve(dev_priv, bytes);
        if (unlikely(fm == NULL)) {
@@ -42353,7 +41588,7 @@ index 6eae14d..aa311b3 100644
                ret = -ENOMEM;
                (void)vmw_fallback_wait(dev_priv, false, true, *seqno,
                                        false, 3*HZ);
                ret = -ENOMEM;
                (void)vmw_fallback_wait(dev_priv, false, true, *seqno,
                                        false, 3*HZ);
-@@ -501,7 +501,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
+@@ -506,7 +506,7 @@ int vmw_fifo_send_fence(struct vmw_private *dev_priv, uint32_t *seqno)
        }
  
        do {
        }
  
        do {
@@ -42363,10 +41598,10 @@ index 6eae14d..aa311b3 100644
  
        if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) {
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
  
        if (!(fifo_state->capabilities & SVGA_FIFO_CAP_FENCE)) {
 diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
-index 26f8bdd..90a0008 100644
+index 170b61b..fec7348 100644
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
 +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c
-@@ -165,9 +165,9 @@ static void vmw_gmrid_man_debug(struct ttm_mem_type_manager *man,
+@@ -164,9 +164,9 @@ static void vmw_gmrid_man_debug(struct ttm_mem_type_manager *man,
  }
  
  const struct ttm_mem_type_manager_func vmw_gmrid_manager_func = {
  }
  
  const struct ttm_mem_type_manager_func vmw_gmrid_manager_func = {
@@ -42461,10 +41696,10 @@ index 37ac7b5..d52a5c9 100644
        /* copy over all the bus versions */
        if (dev->bus && dev->bus->pm) {
 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
        /* copy over all the bus versions */
        if (dev->bus && dev->bus->pm) {
 diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
-index 12b6e67..ddd983c 100644
+index 3402033..50b562c 100644
 --- a/drivers/hid/hid-core.c
 +++ b/drivers/hid/hid-core.c
 --- a/drivers/hid/hid-core.c
 +++ b/drivers/hid/hid-core.c
-@@ -2500,7 +2500,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
+@@ -2506,7 +2506,7 @@ EXPORT_SYMBOL_GPL(hid_ignore);
  
  int hid_add_device(struct hid_device *hdev)
  {
  
  int hid_add_device(struct hid_device *hdev)
  {
@@ -42473,7 +41708,7 @@ index 12b6e67..ddd983c 100644
        int ret;
  
        if (WARN_ON(hdev->status & HID_STAT_ADDED))
        int ret;
  
        if (WARN_ON(hdev->status & HID_STAT_ADDED))
-@@ -2542,7 +2542,7 @@ int hid_add_device(struct hid_device *hdev)
+@@ -2548,7 +2548,7 @@ int hid_add_device(struct hid_device *hdev)
        /* XXX hack, any other cleaner solution after the driver core
         * is converted to allow more than 20 bytes as the device name? */
        dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus,
        /* XXX hack, any other cleaner solution after the driver core
         * is converted to allow more than 20 bytes as the device name? */
        dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus,
@@ -42483,10 +41718,10 @@ index 12b6e67..ddd983c 100644
        hid_debug_register(hdev, dev_name(&hdev->dev));
        ret = device_add(&hdev->dev);
 diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
        hid_debug_register(hdev, dev_name(&hdev->dev));
        ret = device_add(&hdev->dev);
 diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
-index 9bf8637..f462416 100644
+index 71f5692..147d3da 100644
 --- a/drivers/hid/hid-logitech-dj.c
 +++ b/drivers/hid/hid-logitech-dj.c
 --- a/drivers/hid/hid-logitech-dj.c
 +++ b/drivers/hid/hid-logitech-dj.c
-@@ -682,6 +682,12 @@ static int logi_dj_raw_event(struct hid_device *hdev,
+@@ -658,6 +658,12 @@ static int logi_dj_raw_event(struct hid_device *hdev,
         * device (via hid_input_report() ) and return 1 so hid-core does not do
         * anything else with it.
         */
         * device (via hid_input_report() ) and return 1 so hid-core does not do
         * anything else with it.
         */
@@ -42499,6 +41734,304 @@ index 9bf8637..f462416 100644
  
        /* case 1) */
        if (data[0] != REPORT_ID_DJ_SHORT)
  
        /* case 1) */
        if (data[0] != REPORT_ID_DJ_SHORT)
+diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
+index bc4269e..b6e6102 100644
+--- a/drivers/hid/hid-sony.c
++++ b/drivers/hid/hid-sony.c
+@@ -798,6 +798,12 @@ union sixaxis_output_report_01 {
+       __u8 buf[36];
+ };
++#define DS4_REPORT_0x02_SIZE 37
++#define DS4_REPORT_0x05_SIZE 32
++#define DS4_REPORT_0x11_SIZE 78
++#define DS4_REPORT_0x81_SIZE 7
++#define SIXAXIS_REPORT_0xF2_SIZE 18
++
+ static spinlock_t sony_dev_list_lock;
+ static LIST_HEAD(sony_device_list);
+ static DEFINE_IDA(sony_device_id_allocator);
+@@ -811,6 +817,7 @@ struct sony_sc {
+       struct work_struct state_worker;
+       struct power_supply battery;
+       int device_id;
++      __u8 *output_report_dmabuf;
+ #ifdef CONFIG_SONY_FF
+       __u8 left;
+@@ -1142,9 +1149,20 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev)
+ static int sixaxis_set_operational_bt(struct hid_device *hdev)
+ {
+-      unsigned char buf[] = { 0xf4,  0x42, 0x03, 0x00, 0x00 };
+-      return hid_hw_raw_request(hdev, buf[0], buf, sizeof(buf),
++      static const __u8 report[] = { 0xf4, 0x42, 0x03, 0x00, 0x00 };
++      __u8 *buf;
++      int ret;
++
++      buf = kmemdup(report, sizeof(report), GFP_KERNEL);
++      if (!buf)
++              return -ENOMEM;
++
++      ret = hid_hw_raw_request(hdev, buf[0], buf, sizeof(report),
+                                 HID_FEATURE_REPORT, HID_REQ_SET_REPORT);
++
++      kfree(buf);
++
++      return ret;
+ }
+ /*
+@@ -1153,10 +1171,19 @@ static int sixaxis_set_operational_bt(struct hid_device *hdev)
+  */
+ static int dualshock4_set_operational_bt(struct hid_device *hdev)
+ {
+-      __u8 buf[37] = { 0 };
++      __u8 *buf;
++      int ret;
+-      return hid_hw_raw_request(hdev, 0x02, buf, sizeof(buf),
++      buf = kmalloc(DS4_REPORT_0x02_SIZE, GFP_KERNEL);
++      if (!buf)
++              return -ENOMEM;
++
++      ret = hid_hw_raw_request(hdev, 0x02, buf, DS4_REPORT_0x02_SIZE,
+                               HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
++
++      kfree(buf);
++
++      return ret;
+ }
+ static void sixaxis_set_leds_from_id(int id, __u8 values[MAX_LEDS])
+@@ -1471,9 +1498,7 @@ error_leds:
+ static void sixaxis_state_worker(struct work_struct *work)
+ {
+-      struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
+-      int n;
+-      union sixaxis_output_report_01 report = {
++      static const union sixaxis_output_report_01 default_report = {
+               .buf = {
+                       0x01,
+                       0x00, 0xff, 0x00, 0xff, 0x00,
+@@ -1485,20 +1510,27 @@ static void sixaxis_state_worker(struct work_struct *work)
+                       0x00, 0x00, 0x00, 0x00, 0x00
+               }
+       };
++      struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
++      struct sixaxis_output_report *report =
++              (struct sixaxis_output_report *)sc->output_report_dmabuf;
++      int n;
++
++      /* Initialize the report with default values */
++      memcpy(report, &default_report, sizeof(struct sixaxis_output_report));
+ #ifdef CONFIG_SONY_FF
+-      report.data.rumble.right_motor_on = sc->right ? 1 : 0;
+-      report.data.rumble.left_motor_force = sc->left;
++      report->rumble.right_motor_on = sc->right ? 1 : 0;
++      report->rumble.left_motor_force = sc->left;
+ #endif
+-      report.data.leds_bitmap |= sc->led_state[0] << 1;
+-      report.data.leds_bitmap |= sc->led_state[1] << 2;
+-      report.data.leds_bitmap |= sc->led_state[2] << 3;
+-      report.data.leds_bitmap |= sc->led_state[3] << 4;
++      report->leds_bitmap |= sc->led_state[0] << 1;
++      report->leds_bitmap |= sc->led_state[1] << 2;
++      report->leds_bitmap |= sc->led_state[2] << 3;
++      report->leds_bitmap |= sc->led_state[3] << 4;
+       /* Set flag for all leds off, required for 3rd party INTEC controller */
+-      if ((report.data.leds_bitmap & 0x1E) == 0)
+-              report.data.leds_bitmap |= 0x20;
++      if ((report->leds_bitmap & 0x1E) == 0)
++              report->leds_bitmap |= 0x20;
+       /*
+        * The LEDs in the report are indexed in reverse order to their
+@@ -1511,28 +1543,30 @@ static void sixaxis_state_worker(struct work_struct *work)
+        */
+       for (n = 0; n < 4; n++) {
+               if (sc->led_delay_on[n] || sc->led_delay_off[n]) {
+-                      report.data.led[3 - n].duty_off = sc->led_delay_off[n];
+-                      report.data.led[3 - n].duty_on = sc->led_delay_on[n];
++                      report->led[3 - n].duty_off = sc->led_delay_off[n];
++                      report->led[3 - n].duty_on = sc->led_delay_on[n];
+               }
+       }
+-      hid_hw_raw_request(sc->hdev, report.data.report_id, report.buf,
+-                      sizeof(report), HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
++      hid_hw_raw_request(sc->hdev, report->report_id, (__u8 *)report,
++                      sizeof(struct sixaxis_output_report),
++                      HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
+ }
+ static void dualshock4_state_worker(struct work_struct *work)
+ {
+       struct sony_sc *sc = container_of(work, struct sony_sc, state_worker);
+       struct hid_device *hdev = sc->hdev;
++      __u8 *buf = sc->output_report_dmabuf;
+       int offset;
+-      __u8 buf[78] = { 0 };
+-
+       if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
++              memset(buf, 0, DS4_REPORT_0x05_SIZE);
+               buf[0] = 0x05;
+               buf[1] = 0xFF;
+               offset = 4;
+       } else {
++              memset(buf, 0, DS4_REPORT_0x11_SIZE);
+               buf[0] = 0x11;
+               buf[1] = 0xB0;
+               buf[3] = 0x0F;
+@@ -1560,12 +1594,33 @@ static void dualshock4_state_worker(struct work_struct *work)
+       buf[offset++] = sc->led_delay_off[3];
+       if (sc->quirks & DUALSHOCK4_CONTROLLER_USB)
+-              hid_hw_output_report(hdev, buf, 32);
++              hid_hw_output_report(hdev, buf, DS4_REPORT_0x05_SIZE);
+       else
+-              hid_hw_raw_request(hdev, 0x11, buf, 78,
++              hid_hw_raw_request(hdev, 0x11, buf, DS4_REPORT_0x11_SIZE,
+                               HID_OUTPUT_REPORT, HID_REQ_SET_REPORT);
+ }
++static int sony_allocate_output_report(struct sony_sc *sc)
++{
++      if (sc->quirks & SIXAXIS_CONTROLLER)
++              sc->output_report_dmabuf =
++                      kmalloc(sizeof(union sixaxis_output_report_01),
++                              GFP_KERNEL);
++      else if (sc->quirks & DUALSHOCK4_CONTROLLER_BT)
++              sc->output_report_dmabuf = kmalloc(DS4_REPORT_0x11_SIZE,
++                                              GFP_KERNEL);
++      else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB)
++              sc->output_report_dmabuf = kmalloc(DS4_REPORT_0x05_SIZE,
++                                              GFP_KERNEL);
++      else
++              return 0;
++
++      if (!sc->output_report_dmabuf)
++              return -ENOMEM;
++
++      return 0;
++}
++
+ #ifdef CONFIG_SONY_FF
+ static int sony_play_effect(struct input_dev *dev, void *data,
+                           struct ff_effect *effect)
+@@ -1754,6 +1809,7 @@ static int sony_get_bt_devaddr(struct sony_sc *sc)
+ static int sony_check_add(struct sony_sc *sc)
+ {
++      __u8 *buf = NULL;
+       int n, ret;
+       if ((sc->quirks & DUALSHOCK4_CONTROLLER_BT) ||
+@@ -1769,36 +1825,44 @@ static int sony_check_add(struct sony_sc *sc)
+                       return 0;
+               }
+       } else if (sc->quirks & DUALSHOCK4_CONTROLLER_USB) {
+-              __u8 buf[7];
++              buf = kmalloc(DS4_REPORT_0x81_SIZE, GFP_KERNEL);
++              if (!buf)
++                      return -ENOMEM;
+               /*
+                * The MAC address of a DS4 controller connected via USB can be
+                * retrieved with feature report 0x81. The address begins at
+                * offset 1.
+                */
+-              ret = hid_hw_raw_request(sc->hdev, 0x81, buf, sizeof(buf),
+-                              HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
++              ret = hid_hw_raw_request(sc->hdev, 0x81, buf,
++                              DS4_REPORT_0x81_SIZE, HID_FEATURE_REPORT,
++                              HID_REQ_GET_REPORT);
+-              if (ret != 7) {
++              if (ret != DS4_REPORT_0x81_SIZE) {
+                       hid_err(sc->hdev, "failed to retrieve feature report 0x81 with the DualShock 4 MAC address\n");
+-                      return ret < 0 ? ret : -EINVAL;
++                      ret = ret < 0 ? ret : -EINVAL;
++                      goto out_free;
+               }
+               memcpy(sc->mac_address, &buf[1], sizeof(sc->mac_address));
+       } else if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
+-              __u8 buf[18];
++              buf = kmalloc(SIXAXIS_REPORT_0xF2_SIZE, GFP_KERNEL);
++              if (!buf)
++                      return -ENOMEM;
+               /*
+                * The MAC address of a Sixaxis controller connected via USB can
+                * be retrieved with feature report 0xf2. The address begins at
+                * offset 4.
+                */
+-              ret = hid_hw_raw_request(sc->hdev, 0xf2, buf, sizeof(buf),
+-                              HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
++              ret = hid_hw_raw_request(sc->hdev, 0xf2, buf,
++                              SIXAXIS_REPORT_0xF2_SIZE, HID_FEATURE_REPORT,
++                              HID_REQ_GET_REPORT);
+-              if (ret != 18) {
++              if (ret != SIXAXIS_REPORT_0xF2_SIZE) {
+                       hid_err(sc->hdev, "failed to retrieve feature report 0xf2 with the Sixaxis MAC address\n");
+-                      return ret < 0 ? ret : -EINVAL;
++                      ret = ret < 0 ? ret : -EINVAL;
++                      goto out_free;
+               }
+               /*
+@@ -1811,7 +1875,13 @@ static int sony_check_add(struct sony_sc *sc)
+               return 0;
+       }
+-      return sony_check_add_dev_list(sc);
++      ret = sony_check_add_dev_list(sc);
++
++out_free:
++
++      kfree(buf);
++
++      return ret;
+ }
+ static int sony_set_device_id(struct sony_sc *sc)
+@@ -1895,6 +1965,12 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
+               return ret;
+       }
++      ret = sony_allocate_output_report(sc);
++      if (ret < 0) {
++              hid_err(hdev, "failed to allocate the output report buffer\n");
++              goto err_stop;
++      }
++
+       ret = sony_set_device_id(sc);
+       if (ret < 0) {
+               hid_err(hdev, "failed to allocate the device id\n");
+@@ -1984,6 +2060,7 @@ err_stop:
+       if (sc->quirks & SONY_BATTERY_SUPPORT)
+               sony_battery_remove(sc);
+       sony_cancel_work_sync(sc);
++      kfree(sc->output_report_dmabuf);
+       sony_remove_dev_list(sc);
+       sony_release_device_id(sc);
+       hid_hw_stop(hdev);
+@@ -2004,6 +2081,8 @@ static void sony_remove(struct hid_device *hdev)
+       sony_cancel_work_sync(sc);
++      kfree(sc->output_report_dmabuf);
++
+       sony_remove_dev_list(sc);
+       sony_release_device_id(sc);
 diff --git a/drivers/hid/hid-wiimote-debug.c b/drivers/hid/hid-wiimote-debug.c
 index c13fb5b..55a3802 100644
 --- a/drivers/hid/hid-wiimote-debug.c
 diff --git a/drivers/hid/hid-wiimote-debug.c b/drivers/hid/hid-wiimote-debug.c
 index c13fb5b..55a3802 100644
 --- a/drivers/hid/hid-wiimote-debug.c
@@ -42512,39 +42045,8 @@ index c13fb5b..55a3802 100644
                return -EFAULT;
  
        *off += size;
                return -EFAULT;
  
        *off += size;
-diff --git a/drivers/hid/uhid.c b/drivers/hid/uhid.c
-index 0cb92e3..c7d453d 100644
---- a/drivers/hid/uhid.c
-+++ b/drivers/hid/uhid.c
-@@ -47,7 +47,7 @@ struct uhid_device {
-       struct mutex report_lock;
-       wait_queue_head_t report_wait;
-       atomic_t report_done;
--      atomic_t report_id;
-+      atomic_unchecked_t report_id;
-       struct uhid_event report_buf;
- };
-@@ -163,7 +163,7 @@ static int uhid_hid_get_raw(struct hid_device *hid, unsigned char rnum,
-       spin_lock_irqsave(&uhid->qlock, flags);
-       ev->type = UHID_FEATURE;
--      ev->u.feature.id = atomic_inc_return(&uhid->report_id);
-+      ev->u.feature.id = atomic_inc_return_unchecked(&uhid->report_id);
-       ev->u.feature.rnum = rnum;
-       ev->u.feature.rtype = report_type;
-@@ -538,7 +538,7 @@ static int uhid_dev_feature_answer(struct uhid_device *uhid,
-       spin_lock_irqsave(&uhid->qlock, flags);
-       /* id for old report; drop it silently */
--      if (atomic_read(&uhid->report_id) != ev->u.feature_answer.id)
-+      if (atomic_read_unchecked(&uhid->report_id) != ev->u.feature_answer.id)
-               goto unlock;
-       if (atomic_read(&uhid->report_done))
-               goto unlock;
 diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
 diff --git a/drivers/hv/channel.c b/drivers/hv/channel.c
-index 19bad59..ca24eaf 100644
+index 433f72a..2926005 100644
 --- a/drivers/hv/channel.c
 +++ b/drivers/hv/channel.c
 @@ -366,8 +366,8 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
 --- a/drivers/hv/channel.c
 +++ b/drivers/hv/channel.c
 @@ -366,8 +366,8 @@ int vmbus_establish_gpadl(struct vmbus_channel *channel, void *kbuffer,
@@ -42949,10 +42451,10 @@ index 8df43c5..b07b91d 100644
  };
  
 diff --git a/drivers/i2c/busses/i2c-amd756-s4882.c b/drivers/i2c/busses/i2c-amd756-s4882.c
  };
  
 diff --git a/drivers/i2c/busses/i2c-amd756-s4882.c b/drivers/i2c/busses/i2c-amd756-s4882.c
-index 41fc683..a39cfea 100644
+index 65e3240..e6c511d 100644
 --- a/drivers/i2c/busses/i2c-amd756-s4882.c
 +++ b/drivers/i2c/busses/i2c-amd756-s4882.c
 --- a/drivers/i2c/busses/i2c-amd756-s4882.c
 +++ b/drivers/i2c/busses/i2c-amd756-s4882.c
-@@ -43,7 +43,7 @@
+@@ -39,7 +39,7 @@
  extern struct i2c_adapter amd756_smbus;
  
  static struct i2c_adapter *s4882_adapter;
  extern struct i2c_adapter amd756_smbus;
  
  static struct i2c_adapter *s4882_adapter;
@@ -42975,10 +42477,10 @@ index b19a310..d6eece0 100644
        int ret = 0;
        int actual;
 diff --git a/drivers/i2c/busses/i2c-nforce2-s4985.c b/drivers/i2c/busses/i2c-nforce2-s4985.c
        int ret = 0;
        int actual;
 diff --git a/drivers/i2c/busses/i2c-nforce2-s4985.c b/drivers/i2c/busses/i2c-nforce2-s4985.c
-index b170bdf..3c76427 100644
+index 88eda09..cf40434 100644
 --- a/drivers/i2c/busses/i2c-nforce2-s4985.c
 +++ b/drivers/i2c/busses/i2c-nforce2-s4985.c
 --- a/drivers/i2c/busses/i2c-nforce2-s4985.c
 +++ b/drivers/i2c/busses/i2c-nforce2-s4985.c
-@@ -41,7 +41,7 @@
+@@ -37,7 +37,7 @@
  extern struct i2c_adapter *nforce2_smbus;
  
  static struct i2c_adapter *s4985_adapter;
  extern struct i2c_adapter *nforce2_smbus;
  
  static struct i2c_adapter *s4985_adapter;
@@ -42988,10 +42490,10 @@ index b170bdf..3c76427 100644
  /* Wrapper access functions for multiplexed SMBus */
  static DEFINE_MUTEX(nforce2_lock);
 diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
  /* Wrapper access functions for multiplexed SMBus */
  static DEFINE_MUTEX(nforce2_lock);
 diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c
-index 80b47e8..1a6040d9 100644
+index 71c7a39..71dd3e0 100644
 --- a/drivers/i2c/i2c-dev.c
 +++ b/drivers/i2c/i2c-dev.c
 --- a/drivers/i2c/i2c-dev.c
 +++ b/drivers/i2c/i2c-dev.c
-@@ -277,7 +277,7 @@ static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client,
+@@ -272,7 +272,7 @@ static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client,
                        break;
                }
  
                        break;
                }
  
@@ -43903,11 +43405,24 @@ index c00ae09..04e91be 100644
  
  #include "qib_common.h"
  #include "qib_verbs.h"
  
  #include "qib_common.h"
  #include "qib_verbs.h"
+diff --git a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
+index cdc7df4..a2fdfdb 100644
+--- a/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
++++ b/drivers/infiniband/ulp/ipoib/ipoib_netlink.c
+@@ -156,7 +156,7 @@ static size_t ipoib_get_size(const struct net_device *dev)
+               nla_total_size(2);      /* IFLA_IPOIB_UMCAST */
+ }
+-static struct rtnl_link_ops ipoib_link_ops __read_mostly = {
++static struct rtnl_link_ops ipoib_link_ops = {
+       .kind           = "ipoib",
+       .maxtype        = IFLA_IPOIB_MAX,
+       .policy         = ipoib_policy,
 diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
 diff --git a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
-index 24c41ba..102d71f 100644
+index e29c04e..adbf68c 100644
 --- a/drivers/input/gameport/gameport.c
 +++ b/drivers/input/gameport/gameport.c
 --- a/drivers/input/gameport/gameport.c
 +++ b/drivers/input/gameport/gameport.c
-@@ -490,14 +490,14 @@ EXPORT_SYMBOL(gameport_set_phys);
+@@ -527,14 +527,14 @@ EXPORT_SYMBOL(gameport_set_phys);
   */
  static void gameport_init_port(struct gameport *gameport)
  {
   */
  static void gameport_init_port(struct gameport *gameport)
  {
@@ -43925,10 +43440,10 @@ index 24c41ba..102d71f 100644
        gameport->dev.release = gameport_release_port;
        if (gameport->parent)
 diff --git a/drivers/input/input.c b/drivers/input/input.c
        gameport->dev.release = gameport_release_port;
        if (gameport->parent)
 diff --git a/drivers/input/input.c b/drivers/input/input.c
-index 29ca0bb..f4bc2e3 100644
+index 0f175f5..4c481c0 100644
 --- a/drivers/input/input.c
 +++ b/drivers/input/input.c
 --- a/drivers/input/input.c
 +++ b/drivers/input/input.c
-@@ -1774,7 +1774,7 @@ EXPORT_SYMBOL_GPL(input_class);
+@@ -1775,7 +1775,7 @@ EXPORT_SYMBOL_GPL(input_class);
   */
  struct input_dev *input_allocate_device(void)
  {
   */
  struct input_dev *input_allocate_device(void)
  {
@@ -43937,10 +43452,10 @@ index 29ca0bb..f4bc2e3 100644
        struct input_dev *dev;
  
        dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
        struct input_dev *dev;
  
        dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
-@@ -1789,7 +1789,7 @@ struct input_dev *input_allocate_device(void)
+@@ -1790,7 +1790,7 @@ struct input_dev *input_allocate_device(void)
                INIT_LIST_HEAD(&dev->node);
  
                INIT_LIST_HEAD(&dev->node);
  
-               dev_set_name(&dev->dev, "input%ld",
+               dev_set_name(&dev->dev, "input%lu",
 -                           (unsigned long) atomic_inc_return(&input_no) - 1);
 +                           (unsigned long) atomic_inc_return_unchecked(&input_no) - 1);
  
 -                           (unsigned long) atomic_inc_return(&input_no) - 1);
 +                           (unsigned long) atomic_inc_return_unchecked(&input_no) - 1);
  
@@ -43959,10 +43474,10 @@ index 4a95b22..874c182 100644
  #include <linux/gameport.h>
  #include <linux/jiffies.h>
 diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
  #include <linux/gameport.h>
  #include <linux/jiffies.h>
 diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
-index 177602c..ec78499 100644
+index fc55f0d..11e2aa6 100644
 --- a/drivers/input/joystick/xpad.c
 +++ b/drivers/input/joystick/xpad.c
 --- a/drivers/input/joystick/xpad.c
 +++ b/drivers/input/joystick/xpad.c
-@@ -850,7 +850,7 @@ static void xpad_led_set(struct led_classdev *led_cdev,
+@@ -886,7 +886,7 @@ static void xpad_led_set(struct led_classdev *led_cdev,
  
  static int xpad_led_probe(struct usb_xpad *xpad)
  {
  
  static int xpad_led_probe(struct usb_xpad *xpad)
  {
@@ -43971,7 +43486,7 @@ index 177602c..ec78499 100644
        long led_no;
        struct xpad_led *led;
        struct led_classdev *led_cdev;
        long led_no;
        struct xpad_led *led;
        struct led_classdev *led_cdev;
-@@ -863,7 +863,7 @@ static int xpad_led_probe(struct usb_xpad *xpad)
+@@ -899,7 +899,7 @@ static int xpad_led_probe(struct usb_xpad *xpad)
        if (!led)
                return -ENOMEM;
  
        if (!led)
                return -ENOMEM;
  
@@ -43981,7 +43496,7 @@ index 177602c..ec78499 100644
        snprintf(led->name, sizeof(led->name), "xpad%ld", led_no);
        led->xpad = xpad;
 diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c
        snprintf(led->name, sizeof(led->name), "xpad%ld", led_no);
        led->xpad = xpad;
 diff --git a/drivers/input/misc/ims-pcu.c b/drivers/input/misc/ims-pcu.c
-index 719410f..1896169 100644
+index afed8e2..3aa8a18 100644
 --- a/drivers/input/misc/ims-pcu.c
 +++ b/drivers/input/misc/ims-pcu.c
 @@ -1851,7 +1851,7 @@ static int ims_pcu_identify_type(struct ims_pcu *pcu, u8 *device_id)
 --- a/drivers/input/misc/ims-pcu.c
 +++ b/drivers/input/misc/ims-pcu.c
 @@ -1851,7 +1851,7 @@ static int ims_pcu_identify_type(struct ims_pcu *pcu, u8 *device_id)
@@ -44003,10 +43518,10 @@ index 719410f..1896169 100644
        /*
         * PCU-B devices, both GEN_1 and GEN_2 do not have OFN sensor
 diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
        /*
         * PCU-B devices, both GEN_1 and GEN_2 do not have OFN sensor
 diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
-index 2f0b39d..7370f13 100644
+index f4cf664..3204fda 100644
 --- a/drivers/input/mouse/psmouse.h
 +++ b/drivers/input/mouse/psmouse.h
 --- a/drivers/input/mouse/psmouse.h
 +++ b/drivers/input/mouse/psmouse.h
-@@ -116,7 +116,7 @@ struct psmouse_attribute {
+@@ -117,7 +117,7 @@ struct psmouse_attribute {
        ssize_t (*set)(struct psmouse *psmouse, void *data,
                        const char *buf, size_t count);
        bool protect;
        ssize_t (*set)(struct psmouse *psmouse, void *data,
                        const char *buf, size_t count);
        bool protect;
@@ -44029,7 +43544,7 @@ index b604564..3f14ae4 100644
  
        return count;
 diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
  
        return count;
 diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
-index b29134d..394deb0 100644
+index d399b8b..4913ede 100644
 --- a/drivers/input/serio/serio.c
 +++ b/drivers/input/serio/serio.c
 @@ -514,7 +514,7 @@ static void serio_release_port(struct device *dev)
 --- a/drivers/input/serio/serio.c
 +++ b/drivers/input/serio/serio.c
 @@ -514,7 +514,7 @@ static void serio_release_port(struct device *dev)
@@ -44044,9 +43559,9 @@ index b29134d..394deb0 100644
 @@ -525,7 +525,7 @@ static void serio_init_port(struct serio *serio)
        mutex_init(&serio->drv_mutex);
        device_initialize(&serio->dev);
 @@ -525,7 +525,7 @@ static void serio_init_port(struct serio *serio)
        mutex_init(&serio->drv_mutex);
        device_initialize(&serio->dev);
-       dev_set_name(&serio->dev, "serio%ld",
--                      (long)atomic_inc_return(&serio_no) - 1);
-+                      (long)atomic_inc_return_unchecked(&serio_no) - 1);
+       dev_set_name(&serio->dev, "serio%lu",
+-                   (unsigned long)atomic_inc_return(&serio_no) - 1);
++                   (unsigned long)atomic_inc_return_unchecked(&serio_no) - 1);
        serio->dev.bus = &serio_bus;
        serio->dev.release = serio_release_port;
        serio->dev.groups = serio_device_attr_groups;
        serio->dev.bus = &serio_bus;
        serio->dev.release = serio_release_port;
        serio->dev.groups = serio_device_attr_groups;
@@ -44072,11 +43587,39 @@ index c9a02fe..0debc75 100644
        kref_init(&serio_raw->kref);
        INIT_LIST_HEAD(&serio_raw->client_list);
        init_waitqueue_head(&serio_raw->wait);
        kref_init(&serio_raw->kref);
        INIT_LIST_HEAD(&serio_raw->client_list);
        init_waitqueue_head(&serio_raw->wait);
+diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
+index 505a9ad..356734c 100644
+--- a/drivers/iommu/amd_iommu.c
++++ b/drivers/iommu/amd_iommu.c
+@@ -823,11 +823,21 @@ static void copy_cmd_to_buffer(struct amd_iommu *iommu,
+ static void build_completion_wait(struct iommu_cmd *cmd, u64 address)
+ {
++      phys_addr_t physaddr;
+       WARN_ON(address & 0x7ULL);
+       memset(cmd, 0, sizeof(*cmd));
+-      cmd->data[0] = lower_32_bits(__pa(address)) | CMD_COMPL_WAIT_STORE_MASK;
+-      cmd->data[1] = upper_32_bits(__pa(address));
++
++#ifdef CONFIG_GRKERNSEC_KSTACKOVERFLOW
++      if (object_starts_on_stack((void *)address)) {
++              void *adjbuf = (void *)address - current->stack + current->lowmem_stack;
++              physaddr = __pa((u64)adjbuf);
++      } else
++#endif
++      physaddr = __pa(address);
++
++      cmd->data[0] = lower_32_bits(physaddr) | CMD_COMPL_WAIT_STORE_MASK;
++      cmd->data[1] = upper_32_bits(physaddr);
+       cmd->data[2] = 1;
+       CMD_SET_TYPE(cmd, CMD_COMPL_WAIT);
+ }
 diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
 diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
-index a83cc2a..64462e6 100644
+index 60558f7..5a02369 100644
 --- a/drivers/iommu/arm-smmu.c
 +++ b/drivers/iommu/arm-smmu.c
 --- a/drivers/iommu/arm-smmu.c
 +++ b/drivers/iommu/arm-smmu.c
-@@ -921,7 +921,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
+@@ -934,7 +934,7 @@ static int arm_smmu_init_domain_context(struct iommu_domain *domain,
                cfg->irptndx = cfg->cbndx;
        }
  
                cfg->irptndx = cfg->cbndx;
        }
  
@@ -44085,11 +43628,24 @@ index a83cc2a..64462e6 100644
        arm_smmu_init_context_bank(smmu_domain);
        spin_unlock_irqrestore(&smmu_domain->lock, flags);
  
        arm_smmu_init_context_bank(smmu_domain);
        spin_unlock_irqrestore(&smmu_domain->lock, flags);
  
+diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
+index ed8b048..7fbcc01 100644
+--- a/drivers/iommu/iommu.c
++++ b/drivers/iommu/iommu.c
+@@ -802,7 +802,7 @@ static int iommu_bus_notifier(struct notifier_block *nb,
+ static int iommu_bus_init(struct bus_type *bus, const struct iommu_ops *ops)
+ {
+       int err;
+-      struct notifier_block *nb;
++      notifier_block_no_const *nb;
+       struct iommu_callback_data cb = {
+               .ops = ops,
+       };
 diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
 diff --git a/drivers/iommu/irq_remapping.c b/drivers/iommu/irq_remapping.c
-index 33c4395..e06447e 100644
+index 74a1767..5a359e8 100644
 --- a/drivers/iommu/irq_remapping.c
 +++ b/drivers/iommu/irq_remapping.c
 --- a/drivers/iommu/irq_remapping.c
 +++ b/drivers/iommu/irq_remapping.c
-@@ -354,7 +354,7 @@ int setup_hpet_msi_remapped(unsigned int irq, unsigned int id)
+@@ -361,7 +361,7 @@ int setup_hpet_msi_remapped(unsigned int irq, unsigned int id)
  void panic_if_irq_remap(const char *msg)
  {
        if (irq_remapping_enabled)
  void panic_if_irq_remap(const char *msg)
  {
        if (irq_remapping_enabled)
@@ -44098,7 +43654,7 @@ index 33c4395..e06447e 100644
  }
  
  static void ir_ack_apic_edge(struct irq_data *data)
  }
  
  static void ir_ack_apic_edge(struct irq_data *data)
-@@ -375,10 +375,12 @@ static void ir_print_prefix(struct irq_data *data, struct seq_file *p)
+@@ -382,10 +382,12 @@ static void ir_print_prefix(struct irq_data *data, struct seq_file *p)
  
  void irq_remap_modify_chip_defaults(struct irq_chip *chip)
  {
  
  void irq_remap_modify_chip_defaults(struct irq_chip *chip)
  {
@@ -44116,7 +43672,7 @@ index 33c4395..e06447e 100644
  
  bool setup_remapped_irq(int irq, struct irq_cfg *cfg, struct irq_chip *chip)
 diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
  
  bool setup_remapped_irq(int irq, struct irq_cfg *cfg, struct irq_chip *chip)
 diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
-index dda6dbc..f9adebb 100644
+index 38493ff..001538b 100644
 --- a/drivers/irqchip/irq-gic.c
 +++ b/drivers/irqchip/irq-gic.c
 @@ -84,7 +84,7 @@ static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly;
 --- a/drivers/irqchip/irq-gic.c
 +++ b/drivers/irqchip/irq-gic.c
 @@ -84,7 +84,7 @@ static u8 gic_cpu_map[NR_GIC_CPU_IF] __read_mostly;
@@ -44128,7 +43684,7 @@ index dda6dbc..f9adebb 100644
        .irq_eoi        = NULL,
        .irq_mask       = NULL,
        .irq_unmask     = NULL,
        .irq_eoi        = NULL,
        .irq_mask       = NULL,
        .irq_unmask     = NULL,
-@@ -312,7 +312,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc)
+@@ -311,7 +311,7 @@ static void gic_handle_cascade_irq(unsigned int irq, struct irq_desc *desc)
        chained_irq_exit(chip, desc);
  }
  
        chained_irq_exit(chip, desc);
  }
  
@@ -44192,7 +43748,7 @@ index 6a2df32..dc962f1 100644
                capimsg_setu32(skb->data, 12, (u32)(long)skb->data);/* Data32 */
                capimsg_setu16(skb->data, 16, len);     /* Data length */
 diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
                capimsg_setu32(skb->data, 12, (u32)(long)skb->data);/* Data32 */
                capimsg_setu16(skb->data, 16, len);     /* Data length */
 diff --git a/drivers/isdn/gigaset/bas-gigaset.c b/drivers/isdn/gigaset/bas-gigaset.c
-index b7ae0a0..04590fa 100644
+index aecec6d..11e13c5 100644
 --- a/drivers/isdn/gigaset/bas-gigaset.c
 +++ b/drivers/isdn/gigaset/bas-gigaset.c
 @@ -2565,22 +2565,22 @@ static int gigaset_post_reset(struct usb_interface *intf)
 --- a/drivers/isdn/gigaset/bas-gigaset.c
 +++ b/drivers/isdn/gigaset/bas-gigaset.c
 @@ -2565,22 +2565,22 @@ static int gigaset_post_reset(struct usb_interface *intf)
@@ -44306,10 +43862,10 @@ index 8c91fd5..14f13ce 100644
  
  
 diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c
  
  
 diff --git a/drivers/isdn/gigaset/usb-gigaset.c b/drivers/isdn/gigaset/usb-gigaset.c
-index d0a41cb..b953e50 100644
+index a8e652d..edadaa4 100644
 --- a/drivers/isdn/gigaset/usb-gigaset.c
 +++ b/drivers/isdn/gigaset/usb-gigaset.c
 --- a/drivers/isdn/gigaset/usb-gigaset.c
 +++ b/drivers/isdn/gigaset/usb-gigaset.c
-@@ -547,7 +547,7 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6])
+@@ -548,7 +548,7 @@ static int gigaset_brkchars(struct cardstate *cs, const unsigned char buf[6])
        gigaset_dbg_buffer(DEBUG_USBREQ, "brkchars", 6, buf);
        memcpy(cs->hw.usb->bchars, buf, 6);
        return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x19, 0x41,
        gigaset_dbg_buffer(DEBUG_USBREQ, "brkchars", 6, buf);
        memcpy(cs->hw.usb->bchars, buf, 6);
        return usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x19, 0x41,
@@ -44318,7 +43874,7 @@ index d0a41cb..b953e50 100644
  }
  
  static void gigaset_freebcshw(struct bc_state *bcs)
  }
  
  static void gigaset_freebcshw(struct bc_state *bcs)
-@@ -869,22 +869,22 @@ static int gigaset_pre_reset(struct usb_interface *intf)
+@@ -867,22 +867,22 @@ static int gigaset_pre_reset(struct usb_interface *intf)
  }
  
  static const struct gigaset_ops ops = {
  }
  
  static const struct gigaset_ops ops = {
@@ -44410,10 +43966,10 @@ index 91d5730..336523e 100644
  
  /* The following should better go into a dedicated source file such that
 diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c
  
  /* The following should better go into a dedicated source file such that
 diff --git a/drivers/isdn/i4l/isdn_tty.c b/drivers/isdn/i4l/isdn_tty.c
-index 3c5f249..5fac4d0 100644
+index bc91261..2ef7e36 100644
 --- a/drivers/isdn/i4l/isdn_tty.c
 +++ b/drivers/isdn/i4l/isdn_tty.c
 --- a/drivers/isdn/i4l/isdn_tty.c
 +++ b/drivers/isdn/i4l/isdn_tty.c
-@@ -1508,9 +1508,9 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp)
+@@ -1503,9 +1503,9 @@ isdn_tty_open(struct tty_struct *tty, struct file *filp)
  
  #ifdef ISDN_DEBUG_MODEM_OPEN
        printk(KERN_DEBUG "isdn_tty_open %s, count = %d\n", tty->name,
  
  #ifdef ISDN_DEBUG_MODEM_OPEN
        printk(KERN_DEBUG "isdn_tty_open %s, count = %d\n", tty->name,
@@ -44425,7 +43981,7 @@ index 3c5f249..5fac4d0 100644
        port->tty = tty;
        /*
         * Start up serial port
        port->tty = tty;
        /*
         * Start up serial port
-@@ -1554,7 +1554,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
+@@ -1549,7 +1549,7 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
  #endif
                return;
        }
  #endif
                return;
        }
@@ -44434,7 +43990,7 @@ index 3c5f249..5fac4d0 100644
                /*
                 * Uh, oh.  tty->count is 1, which means that the tty
                 * structure will be freed.  Info->count should always
                /*
                 * Uh, oh.  tty->count is 1, which means that the tty
                 * structure will be freed.  Info->count should always
-@@ -1563,15 +1563,15 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
+@@ -1558,15 +1558,15 @@ isdn_tty_close(struct tty_struct *tty, struct file *filp)
                 * serial port won't be shutdown.
                 */
                printk(KERN_ERR "isdn_tty_close: bad port count; tty->count is 1, "
                 * serial port won't be shutdown.
                 */
                printk(KERN_ERR "isdn_tty_close: bad port count; tty->count is 1, "
@@ -44456,7 +44012,7 @@ index 3c5f249..5fac4d0 100644
  #ifdef ISDN_DEBUG_MODEM_OPEN
                printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n");
  #endif
  #ifdef ISDN_DEBUG_MODEM_OPEN
                printk(KERN_DEBUG "isdn_tty_close after info->count != 0\n");
  #endif
-@@ -1625,7 +1625,7 @@ isdn_tty_hangup(struct tty_struct *tty)
+@@ -1620,7 +1620,7 @@ isdn_tty_hangup(struct tty_struct *tty)
        if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup"))
                return;
        isdn_tty_shutdown(info);
        if (isdn_tty_paranoia_check(info, tty->name, "isdn_tty_hangup"))
                return;
        isdn_tty_shutdown(info);
@@ -44465,7 +44021,7 @@ index 3c5f249..5fac4d0 100644
        port->flags &= ~ASYNC_NORMAL_ACTIVE;
        port->tty = NULL;
        wake_up_interruptible(&port->open_wait);
        port->flags &= ~ASYNC_NORMAL_ACTIVE;
        port->tty = NULL;
        wake_up_interruptible(&port->open_wait);
-@@ -1970,7 +1970,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
+@@ -1965,7 +1965,7 @@ isdn_tty_find_icall(int di, int ch, setup_parm *setup)
        for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
                modem_info *info = &dev->mdm.info[i];
  
        for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
                modem_info *info = &dev->mdm.info[i];
  
@@ -44515,10 +44071,10 @@ index 6a7447c..cae33fe 100644
                } else
                        memcpy(msg, buf, count);
 diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
                } else
                        memcpy(msg, buf, count);
 diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c
-index a4f05c5..1433bc5 100644
+index 87f7dff..7300125 100644
 --- a/drivers/isdn/mISDN/dsp_cmx.c
 +++ b/drivers/isdn/mISDN/dsp_cmx.c
 --- a/drivers/isdn/mISDN/dsp_cmx.c
 +++ b/drivers/isdn/mISDN/dsp_cmx.c
-@@ -1628,7 +1628,7 @@ unsigned long    dsp_spl_jiffies; /* calculate the next time to fire */
+@@ -1625,7 +1625,7 @@ unsigned long    dsp_spl_jiffies; /* calculate the next time to fire */
  static u16    dsp_count; /* last sample count */
  static int    dsp_count_valid; /* if we have last sample count */
  
  static u16    dsp_count; /* last sample count */
  static int    dsp_count_valid; /* if we have last sample count */
  
@@ -44718,10 +44274,10 @@ index a08e3ee..df8ade2 100644
        cl->fn = fn;
        cl->wq = wq;
 diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
        cl->fn = fn;
        cl->wq = wq;
 diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c
-index 67f8b31..9418f2b 100644
+index da3604e..7789cb4c 100644
 --- a/drivers/md/bitmap.c
 +++ b/drivers/md/bitmap.c
 --- a/drivers/md/bitmap.c
 +++ b/drivers/md/bitmap.c
-@@ -1775,7 +1775,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
+@@ -1771,7 +1771,7 @@ void bitmap_status(struct seq_file *seq, struct bitmap *bitmap)
                   chunk_kb ? "KB" : "B");
        if (bitmap->storage.file) {
                seq_printf(seq, ", file: ");
                   chunk_kb ? "KB" : "B");
        if (bitmap->storage.file) {
                seq_printf(seq, ", file: ");
@@ -44731,7 +44287,7 @@ index 67f8b31..9418f2b 100644
  
        seq_printf(seq, "\n");
 diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
  
        seq_printf(seq, "\n");
 diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
-index 5152142..623d141 100644
+index 0be9381..114262b 100644
 --- a/drivers/md/dm-ioctl.c
 +++ b/drivers/md/dm-ioctl.c
 @@ -1769,7 +1769,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param)
 --- a/drivers/md/dm-ioctl.c
 +++ b/drivers/md/dm-ioctl.c
 @@ -1769,7 +1769,7 @@ static int validate_params(uint cmd, struct dm_ioctl *param)
@@ -44820,7 +44376,7 @@ index 7dfdb5c..4caada6 100644
  
        return (test_bit(DM_RAID1_FLUSH_ERROR, &(m->error_type))) ? 'F' :
 diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
  
        return (test_bit(DM_RAID1_FLUSH_ERROR, &(m->error_type))) ? 'F' :
 diff --git a/drivers/md/dm-stats.c b/drivers/md/dm-stats.c
-index 28a9012..9c0f6a5 100644
+index 87f86c7..a1a4100 100644
 --- a/drivers/md/dm-stats.c
 +++ b/drivers/md/dm-stats.c
 @@ -382,7 +382,7 @@ do_sync_free:
 --- a/drivers/md/dm-stats.c
 +++ b/drivers/md/dm-stats.c
 @@ -382,7 +382,7 @@ do_sync_free:
@@ -44844,7 +44400,7 @@ index 28a9012..9c0f6a5 100644
  
        rcu_read_lock();
 diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
  
        rcu_read_lock();
 diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
-index d1600d2..4c3af3a 100644
+index f8b37d4..5c5cafd 100644
 --- a/drivers/md/dm-stripe.c
 +++ b/drivers/md/dm-stripe.c
 @@ -21,7 +21,7 @@ struct stripe {
 --- a/drivers/md/dm-stripe.c
 +++ b/drivers/md/dm-stripe.c
 @@ -21,7 +21,7 @@ struct stripe {
@@ -44856,7 +44412,7 @@ index d1600d2..4c3af3a 100644
  };
  
  struct stripe_c {
  };
  
  struct stripe_c {
-@@ -186,7 +186,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+@@ -188,7 +188,7 @@ static int stripe_ctr(struct dm_target *ti, unsigned int argc, char **argv)
                        kfree(sc);
                        return r;
                }
                        kfree(sc);
                        return r;
                }
@@ -44865,7 +44421,7 @@ index d1600d2..4c3af3a 100644
        }
  
        ti->private = sc;
        }
  
        ti->private = sc;
-@@ -330,7 +330,7 @@ static void stripe_status(struct dm_target *ti, status_type_t type,
+@@ -332,7 +332,7 @@ static void stripe_status(struct dm_target *ti, status_type_t type,
                DMEMIT("%d ", sc->stripes);
                for (i = 0; i < sc->stripes; i++)  {
                        DMEMIT("%s ", sc->stripe[i].dev->name);
                DMEMIT("%d ", sc->stripes);
                for (i = 0; i < sc->stripes; i++)  {
                        DMEMIT("%s ", sc->stripe[i].dev->name);
@@ -44874,7 +44430,7 @@ index d1600d2..4c3af3a 100644
                                'D' : 'A';
                }
                buffer[i] = '\0';
                                'D' : 'A';
                }
                buffer[i] = '\0';
-@@ -375,8 +375,8 @@ static int stripe_end_io(struct dm_target *ti, struct bio *bio, int error)
+@@ -377,8 +377,8 @@ static int stripe_end_io(struct dm_target *ti, struct bio *bio, int error)
         */
        for (i = 0; i < sc->stripes; i++)
                if (!strcmp(sc->stripe[i].dev->name, major_minor)) {
         */
        for (i = 0; i < sc->stripes; i++)
                if (!strcmp(sc->stripe[i].dev->name, major_minor)) {
@@ -44886,19 +44442,10 @@ index d1600d2..4c3af3a 100644
                                schedule_work(&sc->trigger_event);
                }
 diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
                                schedule_work(&sc->trigger_event);
                }
 diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
-index f9c6cb8..e272df6 100644
+index b2bd1eb..38f7a44 100644
 --- a/drivers/md/dm-table.c
 +++ b/drivers/md/dm-table.c
 --- a/drivers/md/dm-table.c
 +++ b/drivers/md/dm-table.c
-@@ -274,7 +274,7 @@ static struct dm_dev_internal *find_device(struct list_head *l, dev_t dev)
- static int open_dev(struct dm_dev_internal *d, dev_t dev,
-                   struct mapped_device *md)
- {
--      static char *_claim_ptr = "I belong to device-mapper";
-+      static char _claim_ptr[] = "I belong to device-mapper";
-       struct block_device *bdev;
-       int r;
-@@ -342,7 +342,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,
+@@ -303,7 +303,7 @@ static int device_area_is_invalid(struct dm_target *ti, struct dm_dev *dev,
        if (!dev_size)
                return 0;
  
        if (!dev_size)
                return 0;
  
@@ -44930,10 +44477,10 @@ index e9d33ad..dae9880d 100644
        pmd->bl_info.value_type.inc = data_block_inc;
        pmd->bl_info.value_type.dec = data_block_dec;
 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
        pmd->bl_info.value_type.inc = data_block_inc;
        pmd->bl_info.value_type.dec = data_block_dec;
 diff --git a/drivers/md/dm.c b/drivers/md/dm.c
-index 32b958d..34011e8 100644
+index 58f3927..bfbad3e 100644
 --- a/drivers/md/dm.c
 +++ b/drivers/md/dm.c
 --- a/drivers/md/dm.c
 +++ b/drivers/md/dm.c
-@@ -180,9 +180,9 @@ struct mapped_device {
+@@ -183,9 +183,9 @@ struct mapped_device {
        /*
         * Event handling.
         */
        /*
         * Event handling.
         */
@@ -44945,7 +44492,7 @@ index 32b958d..34011e8 100644
        struct list_head uevent_list;
        spinlock_t uevent_lock; /* Protect access to uevent_list */
  
        struct list_head uevent_list;
        spinlock_t uevent_lock; /* Protect access to uevent_list */
  
-@@ -1952,8 +1952,8 @@ static struct mapped_device *alloc_dev(int minor)
+@@ -2071,8 +2071,8 @@ static struct mapped_device *alloc_dev(int minor)
        spin_lock_init(&md->deferred_lock);
        atomic_set(&md->holders, 1);
        atomic_set(&md->open_count, 0);
        spin_lock_init(&md->deferred_lock);
        atomic_set(&md->holders, 1);
        atomic_set(&md->open_count, 0);
@@ -44954,9 +44501,9 @@ index 32b958d..34011e8 100644
 +      atomic_set_unchecked(&md->event_nr, 0);
 +      atomic_set_unchecked(&md->uevent_seq, 0);
        INIT_LIST_HEAD(&md->uevent_list);
 +      atomic_set_unchecked(&md->event_nr, 0);
 +      atomic_set_unchecked(&md->uevent_seq, 0);
        INIT_LIST_HEAD(&md->uevent_list);
+       INIT_LIST_HEAD(&md->table_devices);
        spin_lock_init(&md->uevent_lock);
        spin_lock_init(&md->uevent_lock);
-@@ -2107,7 +2107,7 @@ static void event_callback(void *context)
+@@ -2228,7 +2228,7 @@ static void event_callback(void *context)
  
        dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj);
  
  
        dm_send_uevents(&uevents, &disk_to_dev(md->disk)->kobj);
  
@@ -44965,7 +44512,7 @@ index 32b958d..34011e8 100644
        wake_up(&md->eventq);
  }
  
        wake_up(&md->eventq);
  }
  
-@@ -2800,18 +2800,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
+@@ -2921,18 +2921,18 @@ int dm_kobject_uevent(struct mapped_device *md, enum kobject_action action,
  
  uint32_t dm_next_uevent_seq(struct mapped_device *md)
  {
  
  uint32_t dm_next_uevent_seq(struct mapped_device *md)
  {
@@ -44988,10 +44535,10 @@ index 32b958d..34011e8 100644
  
  void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
 diff --git a/drivers/md/md.c b/drivers/md/md.c
  
  void dm_uevent_add(struct mapped_device *md, struct list_head *elist)
 diff --git a/drivers/md/md.c b/drivers/md/md.c
-index b7f603c..723d2bd 100644
+index 9233c71..ed5243a 100644
 --- a/drivers/md/md.c
 +++ b/drivers/md/md.c
 --- a/drivers/md/md.c
 +++ b/drivers/md/md.c
-@@ -194,10 +194,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
+@@ -190,10 +190,10 @@ EXPORT_SYMBOL_GPL(bio_clone_mddev);
   *  start build, activate spare
   */
  static DECLARE_WAIT_QUEUE_HEAD(md_event_waiters);
   *  start build, activate spare
   */
  static DECLARE_WAIT_QUEUE_HEAD(md_event_waiters);
@@ -45004,7 +44551,7 @@ index b7f603c..723d2bd 100644
        wake_up(&md_event_waiters);
  }
  EXPORT_SYMBOL_GPL(md_new_event);
        wake_up(&md_event_waiters);
  }
  EXPORT_SYMBOL_GPL(md_new_event);
-@@ -207,7 +207,7 @@ EXPORT_SYMBOL_GPL(md_new_event);
+@@ -203,7 +203,7 @@ EXPORT_SYMBOL_GPL(md_new_event);
   */
  static void md_new_event_inintr(struct mddev *mddev)
  {
   */
  static void md_new_event_inintr(struct mddev *mddev)
  {
@@ -45013,7 +44560,7 @@ index b7f603c..723d2bd 100644
        wake_up(&md_event_waiters);
  }
  
        wake_up(&md_event_waiters);
  }
  
-@@ -1462,7 +1462,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
+@@ -1426,7 +1426,7 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
        if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) &&
            (le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET))
                rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset);
        if ((le32_to_cpu(sb->feature_map) & MD_FEATURE_RESHAPE_ACTIVE) &&
            (le32_to_cpu(sb->feature_map) & MD_FEATURE_NEW_OFFSET))
                rdev->new_data_offset += (s32)le32_to_cpu(sb->new_offset);
@@ -45022,7 +44569,7 @@ index b7f603c..723d2bd 100644
  
        rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256;
        bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1;
  
        rdev->sb_size = le32_to_cpu(sb->max_dev) * 2 + 256;
        bmask = queue_logical_block_size(rdev->bdev->bd_disk->queue)-1;
-@@ -1713,7 +1713,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
+@@ -1677,7 +1677,7 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
        else
                sb->resync_offset = cpu_to_le64(0);
  
        else
                sb->resync_offset = cpu_to_le64(0);
  
@@ -45031,7 +44578,7 @@ index b7f603c..723d2bd 100644
  
        sb->raid_disks = cpu_to_le32(mddev->raid_disks);
        sb->size = cpu_to_le64(mddev->dev_sectors);
  
        sb->raid_disks = cpu_to_le32(mddev->raid_disks);
        sb->size = cpu_to_le64(mddev->dev_sectors);
-@@ -2725,7 +2725,7 @@ __ATTR(state, S_IRUGO|S_IWUSR, state_show, state_store);
+@@ -2547,7 +2547,7 @@ __ATTR(state, S_IRUGO|S_IWUSR, state_show, state_store);
  static ssize_t
  errors_show(struct md_rdev *rdev, char *page)
  {
  static ssize_t
  errors_show(struct md_rdev *rdev, char *page)
  {
@@ -45040,7 +44587,7 @@ index b7f603c..723d2bd 100644
  }
  
  static ssize_t
  }
  
  static ssize_t
-@@ -2734,7 +2734,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
+@@ -2556,7 +2556,7 @@ errors_store(struct md_rdev *rdev, const char *buf, size_t len)
        char *e;
        unsigned long n = simple_strtoul(buf, &e, 10);
        if (*buf && (*e == 0 || *e == '\n')) {
        char *e;
        unsigned long n = simple_strtoul(buf, &e, 10);
        if (*buf && (*e == 0 || *e == '\n')) {
@@ -45049,7 +44596,7 @@ index b7f603c..723d2bd 100644
                return len;
        }
        return -EINVAL;
                return len;
        }
        return -EINVAL;
-@@ -3183,8 +3183,8 @@ int md_rdev_init(struct md_rdev *rdev)
+@@ -3000,8 +3000,8 @@ int md_rdev_init(struct md_rdev *rdev)
        rdev->sb_loaded = 0;
        rdev->bb_page = NULL;
        atomic_set(&rdev->nr_pending, 0);
        rdev->sb_loaded = 0;
        rdev->bb_page = NULL;
        atomic_set(&rdev->nr_pending, 0);
@@ -45060,7 +44607,7 @@ index b7f603c..723d2bd 100644
  
        INIT_LIST_HEAD(&rdev->same_set);
        init_waitqueue_head(&rdev->blocked_wait);
  
        INIT_LIST_HEAD(&rdev->same_set);
        init_waitqueue_head(&rdev->blocked_wait);
-@@ -7072,7 +7072,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
+@@ -6855,7 +6855,7 @@ static int md_seq_show(struct seq_file *seq, void *v)
  
                spin_unlock(&pers_lock);
                seq_printf(seq, "\n");
  
                spin_unlock(&pers_lock);
                seq_printf(seq, "\n");
@@ -45069,7 +44616,7 @@ index b7f603c..723d2bd 100644
                return 0;
        }
        if (v == (void*)2) {
                return 0;
        }
        if (v == (void*)2) {
-@@ -7175,7 +7175,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
+@@ -6958,7 +6958,7 @@ static int md_seq_open(struct inode *inode, struct file *file)
                return error;
  
        seq = file->private_data;
                return error;
  
        seq = file->private_data;
@@ -45078,7 +44625,7 @@ index b7f603c..723d2bd 100644
        return error;
  }
  
        return error;
  }
  
-@@ -7192,7 +7192,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
+@@ -6975,7 +6975,7 @@ static unsigned int mdstat_poll(struct file *filp, poll_table *wait)
        /* always allow read */
        mask = POLLIN | POLLRDNORM;
  
        /* always allow read */
        mask = POLLIN | POLLRDNORM;
  
@@ -45087,7 +44634,7 @@ index b7f603c..723d2bd 100644
                mask |= POLLERR | POLLPRI;
        return mask;
  }
                mask |= POLLERR | POLLPRI;
        return mask;
  }
-@@ -7236,7 +7236,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
+@@ -7022,7 +7022,7 @@ static int is_mddev_idle(struct mddev *mddev, int init)
                struct gendisk *disk = rdev->bdev->bd_contains->bd_disk;
                curr_events = (int)part_stat_read(&disk->part0, sectors[0]) +
                              (int)part_stat_read(&disk->part0, sectors[1]) -
                struct gendisk *disk = rdev->bdev->bd_contains->bd_disk;
                curr_events = (int)part_stat_read(&disk->part0, sectors[0]) +
                              (int)part_stat_read(&disk->part0, sectors[1]) -
@@ -45097,7 +44644,7 @@ index b7f603c..723d2bd 100644
                 * as sync_io is counted when a request starts, and
                 * disk_stats is counted when it completes.
 diff --git a/drivers/md/md.h b/drivers/md/md.h
                 * as sync_io is counted when a request starts, and
                 * disk_stats is counted when it completes.
 diff --git a/drivers/md/md.h b/drivers/md/md.h
-index a49d991..3582bb7 100644
+index 03cec5b..0a658c1 100644
 --- a/drivers/md/md.h
 +++ b/drivers/md/md.h
 @@ -94,13 +94,13 @@ struct md_rdev {
 --- a/drivers/md/md.h
 +++ b/drivers/md/md.h
 @@ -94,13 +94,13 @@ struct md_rdev {
@@ -45116,20 +44663,20 @@ index a49d991..3582bb7 100644
                                           * for reporting to userspace and storing
                                           * in superblock.
                                           */
                                           * for reporting to userspace and storing
                                           * in superblock.
                                           */
-@@ -449,7 +449,7 @@ static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev)
+@@ -448,7 +448,7 @@ static inline void rdev_dec_pending(struct md_rdev *rdev, struct mddev *mddev)
  
  static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
  {
  
  static inline void md_sync_acct(struct block_device *bdev, unsigned long nr_sectors)
  {
--        atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
+-      atomic_add(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
 +      atomic_add_unchecked(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
  }
  
  struct md_personality
 diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
 +      atomic_add_unchecked(nr_sectors, &bdev->bd_contains->bd_disk->sync_io);
  }
  
  struct md_personality
 diff --git a/drivers/md/persistent-data/dm-space-map-metadata.c b/drivers/md/persistent-data/dm-space-map-metadata.c
-index 786b689..ea8c956 100644
+index f4e22bc..8f83114 100644
 --- a/drivers/md/persistent-data/dm-space-map-metadata.c
 +++ b/drivers/md/persistent-data/dm-space-map-metadata.c
 --- a/drivers/md/persistent-data/dm-space-map-metadata.c
 +++ b/drivers/md/persistent-data/dm-space-map-metadata.c
-@@ -679,7 +679,7 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks)
+@@ -681,7 +681,7 @@ static int sm_metadata_extend(struct dm_space_map *sm, dm_block_t extra_blocks)
         * Flick into a mode where all blocks get allocated in the new area.
         */
        smm->begin = old_len;
         * Flick into a mode where all blocks get allocated in the new area.
         */
        smm->begin = old_len;
@@ -45138,7 +44685,7 @@ index 786b689..ea8c956 100644
  
        /*
         * Extend.
  
        /*
         * Extend.
-@@ -710,7 +710,7 @@ out:
+@@ -712,7 +712,7 @@ out:
        /*
         * Switch back to normal behaviour.
         */
        /*
         * Switch back to normal behaviour.
         */
@@ -45160,10 +44707,10 @@ index 3e6d115..ffecdeb 100644
  /*----------------------------------------------------------------*/
  
 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
  /*----------------------------------------------------------------*/
  
 diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
-index 55de4f6..b1c57fe 100644
+index 40b35be..a327e11 100644
 --- a/drivers/md/raid1.c
 +++ b/drivers/md/raid1.c
 --- a/drivers/md/raid1.c
 +++ b/drivers/md/raid1.c
-@@ -1936,7 +1936,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
+@@ -1931,7 +1931,7 @@ static int fix_sync_read_error(struct r1bio *r1_bio)
                        if (r1_sync_page_io(rdev, sect, s,
                                            bio->bi_io_vec[idx].bv_page,
                                            READ) != 0)
                        if (r1_sync_page_io(rdev, sect, s,
                                            bio->bi_io_vec[idx].bv_page,
                                            READ) != 0)
@@ -45172,7 +44719,7 @@ index 55de4f6..b1c57fe 100644
                }
                sectors -= s;
                sect += s;
                }
                sectors -= s;
                sect += s;
-@@ -2170,7 +2170,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
+@@ -2164,7 +2164,7 @@ static void fix_read_error(struct r1conf *conf, int read_disk,
                            !test_bit(Faulty, &rdev->flags)) {
                                if (r1_sync_page_io(rdev, sect, s,
                                                    conf->tmppage, READ)) {
                            !test_bit(Faulty, &rdev->flags)) {
                                if (r1_sync_page_io(rdev, sect, s,
                                                    conf->tmppage, READ)) {
@@ -45182,10 +44729,10 @@ index 55de4f6..b1c57fe 100644
                                               "md/raid1:%s: read error corrected "
                                               "(%d sectors at %llu on %s)\n",
 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
                                               "md/raid1:%s: read error corrected "
                                               "(%d sectors at %llu on %s)\n",
 diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
-index 6703751..187af1e 100644
+index 32e282f..5cec803 100644
 --- a/drivers/md/raid10.c
 +++ b/drivers/md/raid10.c
 --- a/drivers/md/raid10.c
 +++ b/drivers/md/raid10.c
-@@ -1948,7 +1948,7 @@ static void end_sync_read(struct bio *bio, int error)
+@@ -1944,7 +1944,7 @@ static void end_sync_read(struct bio *bio, int error)
                /* The write handler will notice the lack of
                 * R10BIO_Uptodate and record any errors etc
                 */
                /* The write handler will notice the lack of
                 * R10BIO_Uptodate and record any errors etc
                 */
@@ -45194,7 +44741,7 @@ index 6703751..187af1e 100644
                           &conf->mirrors[d].rdev->corrected_errors);
  
        /* for reconstruct, we always reschedule after a read.
                           &conf->mirrors[d].rdev->corrected_errors);
  
        /* for reconstruct, we always reschedule after a read.
-@@ -2306,7 +2306,7 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev)
+@@ -2301,7 +2301,7 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev)
  {
        struct timespec cur_time_mon;
        unsigned long hours_since_last;
  {
        struct timespec cur_time_mon;
        unsigned long hours_since_last;
@@ -45203,7 +44750,7 @@ index 6703751..187af1e 100644
  
        ktime_get_ts(&cur_time_mon);
  
  
        ktime_get_ts(&cur_time_mon);
  
-@@ -2328,9 +2328,9 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev)
+@@ -2323,9 +2323,9 @@ static void check_decay_read_errors(struct mddev *mddev, struct md_rdev *rdev)
         * overflowing the shift of read_errors by hours_since_last.
         */
        if (hours_since_last >= 8 * sizeof(read_errors))
         * overflowing the shift of read_errors by hours_since_last.
         */
        if (hours_since_last >= 8 * sizeof(read_errors))
@@ -45215,7 +44762,7 @@ index 6703751..187af1e 100644
  }
  
  static int r10_sync_page_io(struct md_rdev *rdev, sector_t sector,
  }
  
  static int r10_sync_page_io(struct md_rdev *rdev, sector_t sector,
-@@ -2384,8 +2384,8 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
+@@ -2379,8 +2379,8 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
                return;
  
        check_decay_read_errors(mddev, rdev);
                return;
  
        check_decay_read_errors(mddev, rdev);
@@ -45226,7 +44773,7 @@ index 6703751..187af1e 100644
                char b[BDEVNAME_SIZE];
                bdevname(rdev->bdev, b);
  
                char b[BDEVNAME_SIZE];
                bdevname(rdev->bdev, b);
  
-@@ -2393,7 +2393,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
+@@ -2388,7 +2388,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
                       "md/raid10:%s: %s: Raid device exceeded "
                       "read_error threshold [cur %d:max %d]\n",
                       mdname(mddev), b,
                       "md/raid10:%s: %s: Raid device exceeded "
                       "read_error threshold [cur %d:max %d]\n",
                       mdname(mddev), b,
@@ -45235,7 +44782,7 @@ index 6703751..187af1e 100644
                printk(KERN_NOTICE
                       "md/raid10:%s: %s: Failing raid device\n",
                       mdname(mddev), b);
                printk(KERN_NOTICE
                       "md/raid10:%s: %s: Failing raid device\n",
                       mdname(mddev), b);
-@@ -2548,7 +2548,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
+@@ -2543,7 +2543,7 @@ static void fix_read_error(struct r10conf *conf, struct mddev *mddev, struct r10
                                               sect +
                                               choose_data_offset(r10_bio, rdev)),
                                       bdevname(rdev->bdev, b));
                                               sect +
                                               choose_data_offset(r10_bio, rdev)),
                                       bdevname(rdev->bdev, b));
@@ -45245,10 +44792,10 @@ index 6703751..187af1e 100644
  
                        rdev_dec_pending(rdev, mddev);
 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
  
                        rdev_dec_pending(rdev, mddev);
 diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
-index 9f0fbec..991e7a1 100644
+index 9c66e59..42a8eac 100644
 --- a/drivers/md/raid5.c
 +++ b/drivers/md/raid5.c
 --- a/drivers/md/raid5.c
 +++ b/drivers/md/raid5.c
-@@ -1735,6 +1735,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash)
+@@ -1730,6 +1730,10 @@ static int grow_one_stripe(struct r5conf *conf, int hash)
        return 1;
  }
  
        return 1;
  }
  
@@ -45259,7 +44806,7 @@ index 9f0fbec..991e7a1 100644
  static int grow_stripes(struct r5conf *conf, int num)
  {
        struct kmem_cache *sc;
  static int grow_stripes(struct r5conf *conf, int num)
  {
        struct kmem_cache *sc;
-@@ -1746,7 +1750,11 @@ static int grow_stripes(struct r5conf *conf, int num)
+@@ -1741,7 +1745,11 @@ static int grow_stripes(struct r5conf *conf, int num)
                        "raid%d-%s", conf->level, mdname(conf->mddev));
        else
                sprintf(conf->cache_name[0],
                        "raid%d-%s", conf->level, mdname(conf->mddev));
        else
                sprintf(conf->cache_name[0],
@@ -45271,7 +44818,7 @@ index 9f0fbec..991e7a1 100644
        sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]);
  
        conf->active_name = 0;
        sprintf(conf->cache_name[1], "%s-alt", conf->cache_name[0]);
  
        conf->active_name = 0;
-@@ -2022,21 +2030,21 @@ static void raid5_end_read_request(struct bio * bi, int error)
+@@ -2017,21 +2025,21 @@ static void raid5_end_read_request(struct bio * bi, int error)
                                mdname(conf->mddev), STRIPE_SECTORS,
                                (unsigned long long)s,
                                bdevname(rdev->bdev, b));
                                mdname(conf->mddev), STRIPE_SECTORS,
                                (unsigned long long)s,
                                bdevname(rdev->bdev, b));
@@ -45297,7 +44844,7 @@ index 9f0fbec..991e7a1 100644
                if (test_bit(R5_ReadRepl, &sh->dev[i].flags))
                        printk_ratelimited(
                                KERN_WARNING
                if (test_bit(R5_ReadRepl, &sh->dev[i].flags))
                        printk_ratelimited(
                                KERN_WARNING
-@@ -2064,7 +2072,7 @@ static void raid5_end_read_request(struct bio * bi, int error)
+@@ -2059,7 +2067,7 @@ static void raid5_end_read_request(struct bio * bi, int error)
                                mdname(conf->mddev),
                                (unsigned long long)s,
                                bdn);
                                mdname(conf->mddev),
                                (unsigned long long)s,
                                bdn);
@@ -45320,18 +44867,17 @@ index 983db75..ef9248c 100644
        int minor;
        int id;
 diff --git a/drivers/media/dvb-frontends/af9033.h b/drivers/media/dvb-frontends/af9033.h
        int minor;
        int id;
 diff --git a/drivers/media/dvb-frontends/af9033.h b/drivers/media/dvb-frontends/af9033.h
-index 539f4db..cdd403b 100644
+index 6ad22b6..6e90e2a 100644
 --- a/drivers/media/dvb-frontends/af9033.h
 +++ b/drivers/media/dvb-frontends/af9033.h
 --- a/drivers/media/dvb-frontends/af9033.h
 +++ b/drivers/media/dvb-frontends/af9033.h
-@@ -82,7 +82,7 @@ struct af9033_ops {
+@@ -96,6 +96,6 @@ struct af9033_ops {
        int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff);
        int (*pid_filter)(struct dvb_frontend *fe, int index, u16 pid,
                          int onoff);
 -};
 +} __no_const;
  
        int (*pid_filter_ctrl)(struct dvb_frontend *fe, int onoff);
        int (*pid_filter)(struct dvb_frontend *fe, int index, u16 pid,
                          int onoff);
 -};
 +} __no_const;
  
- #if IS_ENABLED(CONFIG_DVB_AF9033)
+ #endif /* AF9033_H */
 diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h
 index 9b6c3bb..baeb5c7 100644
 --- a/drivers/media/dvb-frontends/dib3000.h
 diff --git a/drivers/media/dvb-frontends/dib3000.h b/drivers/media/dvb-frontends/dib3000.h
 index 9b6c3bb..baeb5c7 100644
 --- a/drivers/media/dvb-frontends/dib3000.h
@@ -45372,7 +44918,7 @@ index 84cc103..5780c54 100644
  #if IS_ENABLED(CONFIG_DVB_DIB8000)
  void *dib8000_attach(struct dib8000_ops *ops);
 diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
  #if IS_ENABLED(CONFIG_DVB_DIB8000)
  void *dib8000_attach(struct dib8000_ops *ops);
 diff --git a/drivers/media/pci/cx88/cx88-video.c b/drivers/media/pci/cx88/cx88-video.c
-index ed8cb90..5ef7f79 100644
+index ce27e6d..b70435a 100644
 --- a/drivers/media/pci/cx88/cx88-video.c
 +++ b/drivers/media/pci/cx88/cx88-video.c
 @@ -50,9 +50,9 @@ MODULE_VERSION(CX88_VERSION);
 --- a/drivers/media/pci/cx88/cx88-video.c
 +++ b/drivers/media/pci/cx88/cx88-video.c
 @@ -50,9 +50,9 @@ MODULE_VERSION(CX88_VERSION);
@@ -45402,10 +44948,10 @@ index 802642d..5534900 100644
  /* Parameter declarations */
  static int cardtype[IVTV_MAX_CARDS];
 diff --git a/drivers/media/pci/solo6x10/solo6x10-core.c b/drivers/media/pci/solo6x10/solo6x10-core.c
  /* Parameter declarations */
  static int cardtype[IVTV_MAX_CARDS];
 diff --git a/drivers/media/pci/solo6x10/solo6x10-core.c b/drivers/media/pci/solo6x10/solo6x10-core.c
-index 172583d..0f806f4 100644
+index 8cbe6b4..ea3601c 100644
 --- a/drivers/media/pci/solo6x10/solo6x10-core.c
 +++ b/drivers/media/pci/solo6x10/solo6x10-core.c
 --- a/drivers/media/pci/solo6x10/solo6x10-core.c
 +++ b/drivers/media/pci/solo6x10/solo6x10-core.c
-@@ -430,7 +430,7 @@ static void solo_device_release(struct device *dev)
+@@ -424,7 +424,7 @@ static void solo_device_release(struct device *dev)
  
  static int solo_sysfs_init(struct solo_dev *solo_dev)
  {
  
  static int solo_sysfs_init(struct solo_dev *solo_dev)
  {
@@ -45441,7 +44987,7 @@ index 8c84846..27b4f83 100644
                        p2m_id = -p2m_id;
        }
 diff --git a/drivers/media/pci/solo6x10/solo6x10.h b/drivers/media/pci/solo6x10/solo6x10.h
                        p2m_id = -p2m_id;
        }
 diff --git a/drivers/media/pci/solo6x10/solo6x10.h b/drivers/media/pci/solo6x10/solo6x10.h
-index c6154b0..73e4ae9 100644
+index 72017b7..dd37ae6 100644
 --- a/drivers/media/pci/solo6x10/solo6x10.h
 +++ b/drivers/media/pci/solo6x10/solo6x10.h
 @@ -219,7 +219,7 @@ struct solo_dev {
 --- a/drivers/media/pci/solo6x10/solo6x10.h
 +++ b/drivers/media/pci/solo6x10/solo6x10.h
 @@ -219,7 +219,7 @@ struct solo_dev {
@@ -45453,8 +44999,21 @@ index c6154b0..73e4ae9 100644
        int                     p2m_jiffies;
        unsigned int            p2m_timeouts;
  
        int                     p2m_jiffies;
        unsigned int            p2m_timeouts;
  
+diff --git a/drivers/media/pci/tw68/tw68-core.c b/drivers/media/pci/tw68/tw68-core.c
+index 63f0b64..a017c1c 100644
+--- a/drivers/media/pci/tw68/tw68-core.c
++++ b/drivers/media/pci/tw68/tw68-core.c
+@@ -60,7 +60,7 @@ static unsigned int card[] = {[0 ... (TW68_MAXBOARDS - 1)] = UNSET };
+ module_param_array(card, int, NULL, 0444);
+ MODULE_PARM_DESC(card, "card type");
+-static atomic_t tw68_instance = ATOMIC_INIT(0);
++static atomic_unchecked_t tw68_instance = ATOMIC_INIT(0);
+ /* ------------------------------------------------------------------ */
 diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c
 diff --git a/drivers/media/platform/omap/omap_vout.c b/drivers/media/platform/omap/omap_vout.c
-index 2d177fa..5b925a1 100644
+index 64ab6fb..ef4a8b9 100644
 --- a/drivers/media/platform/omap/omap_vout.c
 +++ b/drivers/media/platform/omap/omap_vout.c
 @@ -63,7 +63,6 @@ enum omap_vout_channels {
 --- a/drivers/media/platform/omap/omap_vout.c
 +++ b/drivers/media/platform/omap/omap_vout.c
 @@ -63,7 +63,6 @@ enum omap_vout_channels {
@@ -45465,7 +45024,7 @@ index 2d177fa..5b925a1 100644
  /* Variables configurable through module params*/
  static u32 video1_numbuffers = 3;
  static u32 video2_numbuffers = 3;
  /* Variables configurable through module params*/
  static u32 video1_numbuffers = 3;
  static u32 video2_numbuffers = 3;
-@@ -1014,6 +1013,12 @@ static int omap_vout_open(struct file *file)
+@@ -1012,6 +1011,12 @@ static int omap_vout_open(struct file *file)
  {
        struct videobuf_queue *q;
        struct omap_vout_device *vout = NULL;
  {
        struct videobuf_queue *q;
        struct omap_vout_device *vout = NULL;
@@ -45478,7 +45037,7 @@ index 2d177fa..5b925a1 100644
  
        vout = video_drvdata(file);
        v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__);
  
        vout = video_drvdata(file);
        v4l2_dbg(1, debug, &vout->vid_dev->v4l2_dev, "Entering %s\n", __func__);
-@@ -1031,10 +1036,6 @@ static int omap_vout_open(struct file *file)
+@@ -1029,10 +1034,6 @@ static int omap_vout_open(struct file *file)
        vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
  
        q = &vout->vbq;
        vout->type = V4L2_BUF_TYPE_VIDEO_OUTPUT;
  
        q = &vout->vbq;
@@ -45641,21 +45200,6 @@ index c9388c4..ce71ece 100644
                .release = mxr_vp_layer_release,
                .buffer_set = mxr_vp_buffer_set,
                .stream_set = mxr_vp_stream_set,
                .release = mxr_vp_layer_release,
                .buffer_set = mxr_vp_buffer_set,
                .stream_set = mxr_vp_stream_set,
-diff --git a/drivers/media/platform/vivi.c b/drivers/media/platform/vivi.c
-index 8033371..de5bca0 100644
---- a/drivers/media/platform/vivi.c
-+++ b/drivers/media/platform/vivi.c
-@@ -58,8 +58,8 @@ MODULE_AUTHOR("Mauro Carvalho Chehab, Ted Walther and John Sokol");
- MODULE_LICENSE("Dual BSD/GPL");
- MODULE_VERSION(VIVI_VERSION);
--static unsigned video_nr = -1;
--module_param(video_nr, uint, 0644);
-+static int video_nr = -1;
-+module_param(video_nr, int, 0644);
- MODULE_PARM_DESC(video_nr, "videoX start number, -1 is autodetect");
- static unsigned n_devs = 1;
 diff --git a/drivers/media/radio/radio-cadet.c b/drivers/media/radio/radio-cadet.c
 index 82affae..42833ec 100644
 --- a/drivers/media/radio/radio-cadet.c
 diff --git a/drivers/media/radio/radio-cadet.c b/drivers/media/radio/radio-cadet.c
 index 82affae..42833ec 100644
 --- a/drivers/media/radio/radio-cadet.c
@@ -46234,7 +45778,7 @@ index 733a7ff..f8b52e3 100644
  }
  EXPORT_SYMBOL(usb_cypress_load_firmware);
 diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
  }
  EXPORT_SYMBOL(usb_cypress_load_firmware);
 diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c
-index 2add8c5..c33b854 100644
+index 1a3df10..57997a5 100644
 --- a/drivers/media/usb/dvb-usb/dw2102.c
 +++ b/drivers/media/usb/dvb-usb/dw2102.c
 @@ -118,7 +118,7 @@ struct su3000_state {
 --- a/drivers/media/usb/dvb-usb/dw2102.c
 +++ b/drivers/media/usb/dvb-usb/dw2102.c
 @@ -118,7 +118,7 @@ struct su3000_state {
@@ -46453,33 +45997,15 @@ index 6b0b8b6b..4038398 100644
  }
  
 diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
  }
  
 diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
-index cca6c2f..77b9a18 100644
+index e502a5f..2a27f40 100644
 --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
 +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
 --- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
 +++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
-@@ -328,7 +328,7 @@ struct v4l2_buffer32 {
-       __u32                   reserved;
- };
--static int get_v4l2_plane32(struct v4l2_plane *up, struct v4l2_plane32 *up32,
-+static int get_v4l2_plane32(struct v4l2_plane __user *up, struct v4l2_plane32 __user *up32,
-                               enum v4l2_memory memory)
- {
-       void __user *up_pln;
-@@ -357,7 +357,7 @@ static int get_v4l2_plane32(struct v4l2_plane *up, struct v4l2_plane32 *up32,
-       return 0;
- }
--static int put_v4l2_plane32(struct v4l2_plane *up, struct v4l2_plane32 *up32,
-+static int put_v4l2_plane32(struct v4l2_plane __user *up, struct v4l2_plane32 __user *up32,
-                               enum v4l2_memory memory)
- {
-       if (copy_in_user(up32, up, 2 * sizeof(__u32)) ||
 @@ -427,7 +427,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
                 * by passing a very big num_planes value */
                uplane = compat_alloc_user_space(num_planes *
                                                sizeof(struct v4l2_plane));
 @@ -427,7 +427,7 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
                 * by passing a very big num_planes value */
                uplane = compat_alloc_user_space(num_planes *
                                                sizeof(struct v4l2_plane));
--              kp->m.planes = uplane;
-+              kp->m.planes = (struct v4l2_plane __force_kernel *)uplane;
+-              kp->m.planes = (__force struct v4l2_plane *)uplane;
++              kp->m.planes = (__force_kernel struct v4l2_plane *)uplane;
  
                while (--num_planes >= 0) {
                        ret = get_v4l2_plane32(uplane, uplane32, kp->memory);
  
                while (--num_planes >= 0) {
                        ret = get_v4l2_plane32(uplane, uplane32, kp->memory);
@@ -46487,7 +46013,7 @@ index cca6c2f..77b9a18 100644
                if (num_planes == 0)
                        return 0;
  
                if (num_planes == 0)
                        return 0;
  
--              uplane = kp->m.planes;
+-              uplane = (__force struct v4l2_plane __user *)kp->m.planes;
 +              uplane = (struct v4l2_plane __force_user *)kp->m.planes;
                if (get_user(p, &up->m.planes))
                        return -EFAULT;
 +              uplane = (struct v4l2_plane __force_user *)kp->m.planes;
                if (get_user(p, &up->m.planes))
                        return -EFAULT;
@@ -46496,8 +46022,8 @@ index cca6c2f..77b9a18 100644
                get_user(kp->flags, &up->flags) ||
                copy_from_user(&kp->fmt, &up->fmt, sizeof(up->fmt)))
                        return -EFAULT;
                get_user(kp->flags, &up->flags) ||
                copy_from_user(&kp->fmt, &up->fmt, sizeof(up->fmt)))
                        return -EFAULT;
--      kp->base = compat_ptr(tmp);
-+      kp->base = (void __force_kernel *)compat_ptr(tmp);
+-      kp->base = (__force void *)compat_ptr(tmp);
++      kp->base = (__force_kernel void *)compat_ptr(tmp);
        return 0;
  }
  
        return 0;
  }
  
@@ -46505,29 +46031,29 @@ index cca6c2f..77b9a18 100644
                        n * sizeof(struct v4l2_ext_control32)))
                return -EFAULT;
        kcontrols = compat_alloc_user_space(n * sizeof(struct v4l2_ext_control));
                        n * sizeof(struct v4l2_ext_control32)))
                return -EFAULT;
        kcontrols = compat_alloc_user_space(n * sizeof(struct v4l2_ext_control));
--      kp->controls = kcontrols;
-+      kp->controls = (struct v4l2_ext_control __force_kernel *)kcontrols;
+-      kp->controls = (__force struct v4l2_ext_control *)kcontrols;
++      kp->controls = (__force_kernel struct v4l2_ext_control *)kcontrols;
        while (--n >= 0) {
        while (--n >= 0) {
-               if (copy_in_user(kcontrols, ucontrols, sizeof(*ucontrols)))
-                       return -EFAULT;
-@@ -689,7 +689,7 @@ static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
- static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext_controls32 __user *up)
+               u32 id;
+@@ -694,7 +694,7 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
  {
        struct v4l2_ext_control32 __user *ucontrols;
  {
        struct v4l2_ext_control32 __user *ucontrols;
--      struct v4l2_ext_control __user *kcontrols = kp->controls;
-+      struct v4l2_ext_control __user *kcontrols = (struct v4l2_ext_control __force_user *)kp->controls;
+       struct v4l2_ext_control __user *kcontrols =
+-              (__force struct v4l2_ext_control __user *)kp->controls;
++              (struct v4l2_ext_control __force_user *)kp->controls;
        int n = kp->count;
        compat_caddr_t p;
  
        int n = kp->count;
        compat_caddr_t p;
  
-@@ -783,7 +783,7 @@ static int put_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up)
-               put_user(kp->start_block, &up->start_block) ||
-               put_user(kp->blocks, &up->blocks) ||
-               put_user(tmp, &up->edid) ||
--              copy_to_user(kp->reserved, up->reserved, sizeof(kp->reserved)))
-+              copy_to_user(up->reserved, kp->reserved, sizeof(kp->reserved)))
+@@ -778,7 +778,7 @@ static int get_v4l2_edid32(struct v4l2_edid *kp, struct v4l2_edid32 __user *up)
+               get_user(tmp, &up->edid) ||
+               copy_from_user(kp->reserved, up->reserved, sizeof(kp->reserved)))
                        return -EFAULT;
                        return -EFAULT;
+-      kp->edid = (__force u8 *)compat_ptr(tmp);
++      kp->edid = (__force_kernel u8 *)compat_ptr(tmp);
        return 0;
  }
        return 0;
  }
 diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
 index 015f92a..59e311e 100644
 --- a/drivers/media/v4l2-core/v4l2-device.c
 diff --git a/drivers/media/v4l2-core/v4l2-device.c b/drivers/media/v4l2-core/v4l2-device.c
 index 015f92a..59e311e 100644
 --- a/drivers/media/v4l2-core/v4l2-device.c
@@ -46545,7 +46071,7 @@ index 015f92a..59e311e 100644
  
        if (basename[len - 1] >= '0' && basename[len - 1] <= '9')
 diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
  
        if (basename[len - 1] >= '0' && basename[len - 1] <= '9')
 diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
-index d15e167..337f374 100644
+index 9ccb19a..d131468 100644
 --- a/drivers/media/v4l2-core/v4l2-ioctl.c
 +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
 @@ -2142,7 +2142,8 @@ struct v4l2_ioctl_info {
 --- a/drivers/media/v4l2-core/v4l2-ioctl.c
 +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
 @@ -2142,7 +2142,8 @@ struct v4l2_ioctl_info {
@@ -46604,10 +46130,10 @@ index d15e167..337f374 100644
                        err = -EFAULT;
                goto out_array_args;
 diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
                        err = -EFAULT;
                goto out_array_args;
 diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c
-index a896d94..a5d56b1 100644
+index 187f836..679544b 100644
 --- a/drivers/message/fusion/mptbase.c
 +++ b/drivers/message/fusion/mptbase.c
 --- a/drivers/message/fusion/mptbase.c
 +++ b/drivers/message/fusion/mptbase.c
-@@ -6752,8 +6752,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v)
+@@ -6746,8 +6746,13 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v)
        seq_printf(m, "  MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth);
        seq_printf(m, "  MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize);
  
        seq_printf(m, "  MaxChainDepth = 0x%02x frames\n", ioc->facts.MaxChainDepth);
        seq_printf(m, "  MinBlockSize = 0x%02x bytes\n", 4*ioc->facts.BlockSize);
  
@@ -46621,7 +46147,7 @@ index a896d94..a5d56b1 100644
        /*
         *  Rounding UP to nearest 4-kB boundary here...
         */
        /*
         *  Rounding UP to nearest 4-kB boundary here...
         */
-@@ -6766,7 +6771,11 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v)
+@@ -6760,7 +6765,11 @@ static int mpt_iocinfo_proc_show(struct seq_file *m, void *v)
                                        ioc->facts.GlobalCredits);
  
        seq_printf(m, "  Frames   @ 0x%p (Dma @ 0x%p)\n",
                                        ioc->facts.GlobalCredits);
  
        seq_printf(m, "  Frames   @ 0x%p (Dma @ 0x%p)\n",
@@ -46890,7 +46416,7 @@ index b2c7e3b..85aa4764 100644
  
  static u8 avg_sample = SAMPLE_16;
 diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c
  
  static u8 avg_sample = SAMPLE_16;
 diff --git a/drivers/mfd/max8925-i2c.c b/drivers/mfd/max8925-i2c.c
-index ecbe78e..b2ca870 100644
+index c880c89..45a7c68 100644
 --- a/drivers/mfd/max8925-i2c.c
 +++ b/drivers/mfd/max8925-i2c.c
 @@ -152,7 +152,7 @@ static int max8925_probe(struct i2c_client *client,
 --- a/drivers/mfd/max8925-i2c.c
 +++ b/drivers/mfd/max8925-i2c.c
 @@ -152,7 +152,7 @@ static int max8925_probe(struct i2c_client *client,
@@ -46903,7 +46429,7 @@ index ecbe78e..b2ca870 100644
  
        if (node && !pdata) {
 diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
  
        if (node && !pdata) {
 diff --git a/drivers/mfd/tps65910.c b/drivers/mfd/tps65910.c
-index f243e75..322176c 100644
+index 7612d89..70549c2 100644
 --- a/drivers/mfd/tps65910.c
 +++ b/drivers/mfd/tps65910.c
 @@ -230,7 +230,7 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq,
 --- a/drivers/mfd/tps65910.c
 +++ b/drivers/mfd/tps65910.c
 @@ -230,7 +230,7 @@ static int tps65910_irq_init(struct tps65910 *tps65910, int irq,
@@ -46916,7 +46442,7 @@ index f243e75..322176c 100644
        if (!irq) {
                dev_warn(tps65910->dev, "No interrupt support, no core IRQ\n");
 diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
        if (!irq) {
                dev_warn(tps65910->dev, "No interrupt support, no core IRQ\n");
 diff --git a/drivers/mfd/twl4030-irq.c b/drivers/mfd/twl4030-irq.c
-index b1dabba..24a88f2 100644
+index 1b772ef..01e77d33 100644
 --- a/drivers/mfd/twl4030-irq.c
 +++ b/drivers/mfd/twl4030-irq.c
 @@ -34,6 +34,7 @@
 --- a/drivers/mfd/twl4030-irq.c
 +++ b/drivers/mfd/twl4030-irq.c
 @@ -34,6 +34,7 @@
@@ -46927,7 +46453,7 @@ index b1dabba..24a88f2 100644
  
  #include "twl-core.h"
  
  
  #include "twl-core.h"
  
-@@ -725,10 +726,12 @@ int twl4030_init_irq(struct device *dev, int irq_num)
+@@ -729,10 +730,12 @@ int twl4030_init_irq(struct device *dev, int irq_num)
         * Install an irq handler for each of the SIH modules;
         * clone dummy irq_chip since PIH can't *do* anything
         */
         * Install an irq handler for each of the SIH modules;
         * clone dummy irq_chip since PIH can't *do* anything
         */
@@ -47352,7 +46878,7 @@ index 82dc574..8539ab2 100644
  
                break;
 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
  
                break;
 diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c
-index ede41f0..744fbd9 100644
+index a11451f..9e1bbad 100644
 --- a/drivers/mmc/card/block.c
 +++ b/drivers/mmc/card/block.c
 @@ -574,7 +574,7 @@ static int mmc_blk_ioctl_cmd(struct block_device *bdev,
 --- a/drivers/mmc/card/block.c
 +++ b/drivers/mmc/card/block.c
 @@ -574,7 +574,7 @@ static int mmc_blk_ioctl_cmd(struct block_device *bdev,
@@ -47365,10 +46891,10 @@ index ede41f0..744fbd9 100644
                goto cmd_rel_host;
        }
 diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
                goto cmd_rel_host;
        }
 diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
-index f51b5ba..86614a7 100644
+index 7911e05..d0f9dda 100644
 --- a/drivers/mmc/core/mmc_ops.c
 +++ b/drivers/mmc/core/mmc_ops.c
 --- a/drivers/mmc/core/mmc_ops.c
 +++ b/drivers/mmc/core/mmc_ops.c
-@@ -247,7 +247,7 @@ mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host,
+@@ -267,7 +267,7 @@ mmc_send_cxd_data(struct mmc_card *card, struct mmc_host *host,
        void *data_buf;
        int is_on_stack;
  
        void *data_buf;
        int is_on_stack;
  
@@ -47378,10 +46904,10 @@ index f51b5ba..86614a7 100644
                /*
                 * dma onto stack is unsafe/nonportable, but callers to this
 diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
                /*
                 * dma onto stack is unsafe/nonportable, but callers to this
 diff --git a/drivers/mmc/host/dw_mmc.h b/drivers/mmc/host/dw_mmc.h
-index 08fd956..370487a 100644
+index 01b99e8..5c325e3 100644
 --- a/drivers/mmc/host/dw_mmc.h
 +++ b/drivers/mmc/host/dw_mmc.h
 --- a/drivers/mmc/host/dw_mmc.h
 +++ b/drivers/mmc/host/dw_mmc.h
-@@ -262,5 +262,5 @@ struct dw_mci_drv_data {
+@@ -265,5 +265,5 @@ struct dw_mci_drv_data {
        int             (*parse_dt)(struct dw_mci *host);
        int             (*execute_tuning)(struct dw_mci_slot *slot, u32 opcode,
                                        struct dw_mci_tuning_data *tuning_data);
        int             (*parse_dt)(struct dw_mci *host);
        int             (*execute_tuning)(struct dw_mci_slot *slot, u32 opcode,
                                        struct dw_mci_tuning_data *tuning_data);
@@ -47389,10 +46915,10 @@ index 08fd956..370487a 100644
 +} __do_const;
  #endif /* _DW_MMC_H_ */
 diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
 +} __do_const;
  #endif /* _DW_MMC_H_ */
 diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c
-index e4d4707..28262a3 100644
+index 43af791..86f4c48 100644
 --- a/drivers/mmc/host/mmci.c
 +++ b/drivers/mmc/host/mmci.c
 --- a/drivers/mmc/host/mmci.c
 +++ b/drivers/mmc/host/mmci.c
-@@ -1612,7 +1612,9 @@ static int mmci_probe(struct amba_device *dev,
+@@ -1628,7 +1628,9 @@ static int mmci_probe(struct amba_device *dev,
        mmc->caps |= MMC_CAP_CMD23;
  
        if (variant->busy_detect) {
        mmc->caps |= MMC_CAP_CMD23;
  
        if (variant->busy_detect) {
@@ -47403,11 +46929,26 @@ index e4d4707..28262a3 100644
                mmci_write_datactrlreg(host, MCI_ST_DPSM_BUSYMODE);
                mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
                mmc->max_busy_timeout = 0;
                mmci_write_datactrlreg(host, MCI_ST_DPSM_BUSYMODE);
                mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY;
                mmc->max_busy_timeout = 0;
+diff --git a/drivers/mmc/host/omap_hsmmc.c b/drivers/mmc/host/omap_hsmmc.c
+index 9c2b9cb..cebb09a 100644
+--- a/drivers/mmc/host/omap_hsmmc.c
++++ b/drivers/mmc/host/omap_hsmmc.c
+@@ -2113,7 +2113,9 @@ static int omap_hsmmc_probe(struct platform_device *pdev)
+       if (host->pdata->controller_flags & OMAP_HSMMC_BROKEN_MULTIBLOCK_READ) {
+               dev_info(&pdev->dev, "multiblock reads disabled due to 35xx erratum 2.1.1.128; MMC read performance may suffer\n");
+-              omap_hsmmc_ops.multi_io_quirk = omap_hsmmc_multi_io_quirk;
++              pax_open_kernel();
++              *(void **)&omap_hsmmc_ops.multi_io_quirk = omap_hsmmc_multi_io_quirk;
++              pax_close_kernel();
+       }
+       pm_runtime_enable(host->dev);
 diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
 diff --git a/drivers/mmc/host/sdhci-esdhc-imx.c b/drivers/mmc/host/sdhci-esdhc-imx.c
-index ccec0e3..199f9ce 100644
+index 587ee0e..b3bbcab 100644
 --- a/drivers/mmc/host/sdhci-esdhc-imx.c
 +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
 --- a/drivers/mmc/host/sdhci-esdhc-imx.c
 +++ b/drivers/mmc/host/sdhci-esdhc-imx.c
-@@ -1034,9 +1034,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
+@@ -1054,9 +1054,12 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
                host->mmc->caps |= MMC_CAP_1_8V_DDR;
        }
  
                host->mmc->caps |= MMC_CAP_1_8V_DDR;
        }
  
@@ -47423,7 +46964,7 @@ index ccec0e3..199f9ce 100644
        if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING)
                writel(readl(host->ioaddr + ESDHC_TUNING_CTRL) |
 diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
        if (imx_data->socdata->flags & ESDHC_FLAG_STD_TUNING)
                writel(readl(host->ioaddr + ESDHC_TUNING_CTRL) |
 diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c
-index 1e47903..7683916 100644
+index 0ce6eb1..8dcce1b 100644
 --- a/drivers/mmc/host/sdhci-s3c.c
 +++ b/drivers/mmc/host/sdhci-s3c.c
 @@ -584,9 +584,11 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
 --- a/drivers/mmc/host/sdhci-s3c.c
 +++ b/drivers/mmc/host/sdhci-s3c.c
 @@ -584,9 +584,11 @@ static int sdhci_s3c_probe(struct platform_device *pdev)
@@ -47455,7 +46996,7 @@ index 423666b..81ff5eb 100644
        if (!ECCBUF_SIZE) {
                /* We should fall back to a general writev implementation.
 diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
        if (!ECCBUF_SIZE) {
                /* We should fall back to a general writev implementation.
 diff --git a/drivers/mtd/nand/denali.c b/drivers/mtd/nand/denali.c
-index 0b071a3..8ec3d5b 100644
+index b3b7ca1..5dd4634 100644
 --- a/drivers/mtd/nand/denali.c
 +++ b/drivers/mtd/nand/denali.c
 @@ -24,6 +24,7 @@
 --- a/drivers/mtd/nand/denali.c
 +++ b/drivers/mtd/nand/denali.c
 @@ -24,6 +24,7 @@
@@ -47492,7 +47033,7 @@ index 51b9d6a..52af9a7 100644
  #include <linux/mtd/nand.h>
  #include <linux/mtd/nftl.h>
 diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
  #include <linux/mtd/nand.h>
  #include <linux/mtd/nftl.h>
 diff --git a/drivers/mtd/sm_ftl.c b/drivers/mtd/sm_ftl.c
-index cf49c22..971b133 100644
+index c23184a..4115c41 100644
 --- a/drivers/mtd/sm_ftl.c
 +++ b/drivers/mtd/sm_ftl.c
 @@ -56,7 +56,7 @@ static ssize_t sm_attr_show(struct device *dev, struct device_attribute *attr,
 --- a/drivers/mtd/sm_ftl.c
 +++ b/drivers/mtd/sm_ftl.c
 @@ -56,7 +56,7 @@ static ssize_t sm_attr_show(struct device *dev, struct device_attribute *attr,
@@ -47504,11 +47045,24 @@ index cf49c22..971b133 100644
        struct attribute **attributes;
        struct sm_sysfs_attribute *vendor_attribute;
        char *vendor;
        struct attribute **attributes;
        struct sm_sysfs_attribute *vendor_attribute;
        char *vendor;
+diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
+index a5115fb..81b03f6 100644
+--- a/drivers/net/bonding/bond_main.c
++++ b/drivers/net/bonding/bond_main.c
+@@ -3749,7 +3749,7 @@ int bond_3ad_xor_xmit(struct sk_buff *skb, struct net_device *dev)
+               bond_dev_queue_xmit(bond, skb, slave->dev);
+       } else {
+               dev_kfree_skb_any(skb);
+-              atomic_long_inc(&dev->tx_dropped);
++              atomic_long_inc_unchecked(&dev->tx_dropped);
+       }
+       return NETDEV_TX_OK;
 diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
 diff --git a/drivers/net/bonding/bond_netlink.c b/drivers/net/bonding/bond_netlink.c
-index d163e11..f517018 100644
+index 45f09a6..f154f8d 100644
 --- a/drivers/net/bonding/bond_netlink.c
 +++ b/drivers/net/bonding/bond_netlink.c
 --- a/drivers/net/bonding/bond_netlink.c
 +++ b/drivers/net/bonding/bond_netlink.c
-@@ -548,7 +548,7 @@ nla_put_failure:
+@@ -585,7 +585,7 @@ nla_put_failure:
        return -EMSGSIZE;
  }
  
        return -EMSGSIZE;
  }
  
@@ -47517,8 +47071,21 @@ index d163e11..f517018 100644
        .kind                   = "bond",
        .priv_size              = sizeof(struct bonding),
        .setup                  = bond_setup,
        .kind                   = "bond",
        .priv_size              = sizeof(struct bonding),
        .setup                  = bond_setup,
+diff --git a/drivers/net/caif/caif_hsi.c b/drivers/net/caif/caif_hsi.c
+index 5e40a8b..126bfda 100644
+--- a/drivers/net/caif/caif_hsi.c
++++ b/drivers/net/caif/caif_hsi.c
+@@ -1445,7 +1445,7 @@ err:
+       return -ENODEV;
+ }
+-static struct rtnl_link_ops caif_hsi_link_ops __read_mostly = {
++static struct rtnl_link_ops caif_hsi_link_ops = {
+       .kind           = "cfhsi",
+       .priv_size      = sizeof(struct cfhsi),
+       .setup          = cfhsi_setup,
 diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
 diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
-index 4168822..f38eeddf 100644
+index 98d73aa..63ef9da 100644
 --- a/drivers/net/can/Kconfig
 +++ b/drivers/net/can/Kconfig
 @@ -98,7 +98,7 @@ config CAN_JANZ_ICAN3
 --- a/drivers/net/can/Kconfig
 +++ b/drivers/net/can/Kconfig
 @@ -98,7 +98,7 @@ config CAN_JANZ_ICAN3
@@ -47530,6 +47097,45 @@ index 4168822..f38eeddf 100644
        ---help---
          Say Y here if you want to support for Freescale FlexCAN.
  
        ---help---
          Say Y here if you want to support for Freescale FlexCAN.
  
+diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c
+index 2cfe501..477d4b5 100644
+--- a/drivers/net/can/dev.c
++++ b/drivers/net/can/dev.c
+@@ -868,7 +868,7 @@ static int can_newlink(struct net *src_net, struct net_device *dev,
+       return -EOPNOTSUPP;
+ }
+-static struct rtnl_link_ops can_link_ops __read_mostly = {
++static struct rtnl_link_ops can_link_ops = {
+       .kind           = "can",
+       .maxtype        = IFLA_CAN_MAX,
+       .policy         = can_policy,
+diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c
+index 4e94057..32032ff 100644
+--- a/drivers/net/can/vcan.c
++++ b/drivers/net/can/vcan.c
+@@ -166,7 +166,7 @@ static void vcan_setup(struct net_device *dev)
+       dev->destructor         = free_netdev;
+ }
+-static struct rtnl_link_ops vcan_link_ops __read_mostly = {
++static struct rtnl_link_ops vcan_link_ops = {
+       .kind   = "vcan",
+       .setup  = vcan_setup,
+ };
+diff --git a/drivers/net/dummy.c b/drivers/net/dummy.c
+index ff435fb..d408b1f 100644
+--- a/drivers/net/dummy.c
++++ b/drivers/net/dummy.c
+@@ -149,7 +149,7 @@ static int dummy_validate(struct nlattr *tb[], struct nlattr *data[])
+       return 0;
+ }
+-static struct rtnl_link_ops dummy_link_ops __read_mostly = {
++static struct rtnl_link_ops dummy_link_ops = {
+       .kind           = "dummy",
+       .setup          = dummy_setup,
+       .validate       = dummy_validate,
 diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c
 index 1d162cc..b546a75 100644
 --- a/drivers/net/ethernet/8390/ax88796.c
 diff --git a/drivers/net/ethernet/8390/ax88796.c b/drivers/net/ethernet/8390/ax88796.c
 index 1d162cc..b546a75 100644
 --- a/drivers/net/ethernet/8390/ax88796.c
@@ -47548,10 +47154,10 @@ index 1d162cc..b546a75 100644
  
        if (!request_mem_region(mem->start, mem_size, pdev->name)) {
 diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
  
        if (!request_mem_region(mem->start, mem_size, pdev->name)) {
 diff --git a/drivers/net/ethernet/altera/altera_tse_main.c b/drivers/net/ethernet/altera/altera_tse_main.c
-index 7330681..7e9e463 100644
+index 4efc435..4ab9e14 100644
 --- a/drivers/net/ethernet/altera/altera_tse_main.c
 +++ b/drivers/net/ethernet/altera/altera_tse_main.c
 --- a/drivers/net/ethernet/altera/altera_tse_main.c
 +++ b/drivers/net/ethernet/altera/altera_tse_main.c
-@@ -1182,7 +1182,7 @@ static int tse_shutdown(struct net_device *dev)
+@@ -1224,7 +1224,7 @@ static int tse_shutdown(struct net_device *dev)
        return 0;
  }
  
        return 0;
  }
  
@@ -47560,7 +47166,7 @@ index 7330681..7e9e463 100644
        .ndo_open               = tse_open,
        .ndo_stop               = tse_shutdown,
        .ndo_start_xmit         = tse_start_xmit,
        .ndo_open               = tse_open,
        .ndo_stop               = tse_shutdown,
        .ndo_start_xmit         = tse_start_xmit,
-@@ -1439,11 +1439,13 @@ static int altera_tse_probe(struct platform_device *pdev)
+@@ -1461,11 +1461,13 @@ static int altera_tse_probe(struct platform_device *pdev)
        ndev->netdev_ops = &altera_tse_netdev_ops;
        altera_tse_set_ethtool_ops(ndev);
  
        ndev->netdev_ops = &altera_tse_netdev_ops;
        altera_tse_set_ethtool_ops(ndev);
  
@@ -47575,10 +47181,10 @@ index 7330681..7e9e463 100644
        /* Scatter/gather IO is not supported,
         * so it is turned off
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
        /* Scatter/gather IO is not supported,
         * so it is turned off
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-common.h b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
-index cc25a3a..c8d72d3 100644
+index caade30..3e257d9 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-common.h
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-common.h
-@@ -1083,14 +1083,14 @@ do {                                                                   \
+@@ -1072,14 +1072,14 @@ do {                                                                   \
   * operations, everything works on mask values.
   */
  #define XMDIO_READ(_pdata, _mmd, _reg)                                        \
   * operations, everything works on mask values.
   */
  #define XMDIO_READ(_pdata, _mmd, _reg)                                        \
@@ -47596,10 +47202,10 @@ index cc25a3a..c8d72d3 100644
  
  #define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val)             \
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c
  
  #define XMDIO_WRITE_BITS(_pdata, _mmd, _reg, _mask, _val)             \
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c
-index 7d6a49b..e6d403b 100644
+index 8a50b01..39c1ad0 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dcb.c
-@@ -188,7 +188,7 @@ static int xgbe_dcb_ieee_setets(struct net_device *netdev,
+@@ -187,7 +187,7 @@ static int xgbe_dcb_ieee_setets(struct net_device *netdev,
  
        memcpy(pdata->ets, ets, sizeof(*pdata->ets));
  
  
        memcpy(pdata->ets, ets, sizeof(*pdata->ets));
  
@@ -47608,7 +47214,7 @@ index 7d6a49b..e6d403b 100644
  
        return 0;
  }
  
        return 0;
  }
-@@ -227,7 +227,7 @@ static int xgbe_dcb_ieee_setpfc(struct net_device *netdev,
+@@ -226,7 +226,7 @@ static int xgbe_dcb_ieee_setpfc(struct net_device *netdev,
  
        memcpy(pdata->pfc, pfc, sizeof(*pdata->pfc));
  
  
        memcpy(pdata->pfc, pfc, sizeof(*pdata->pfc));
  
@@ -47618,10 +47224,10 @@ index 7d6a49b..e6d403b 100644
        return 0;
  }
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
        return 0;
  }
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
-index 1c5d62e..8e14d54 100644
+index 6fc5da0..61ac2cb 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-desc.c
-@@ -236,7 +236,7 @@ err_ring:
+@@ -235,7 +235,7 @@ err_ring:
  
  static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata)
  {
@@ -47630,7 +47236,7 @@ index 1c5d62e..8e14d54 100644
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_data *rdata;
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_data *rdata;
-@@ -277,7 +277,7 @@ static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata)
+@@ -276,7 +276,7 @@ static void xgbe_wrapper_tx_descriptor_init(struct xgbe_prv_data *pdata)
  
  static void xgbe_wrapper_rx_descriptor_init(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_wrapper_rx_descriptor_init(struct xgbe_prv_data *pdata)
  {
@@ -47639,7 +47245,7 @@ index 1c5d62e..8e14d54 100644
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_desc *rdesc;
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_desc *rdesc;
-@@ -506,7 +506,7 @@ err_out:
+@@ -505,7 +505,7 @@ err_out:
  static void xgbe_realloc_skb(struct xgbe_channel *channel)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
  static void xgbe_realloc_skb(struct xgbe_channel *channel)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
@@ -47648,7 +47254,7 @@ index 1c5d62e..8e14d54 100644
        struct xgbe_ring *ring = channel->rx_ring;
        struct xgbe_ring_data *rdata;
        struct sk_buff *skb = NULL;
        struct xgbe_ring *ring = channel->rx_ring;
        struct xgbe_ring_data *rdata;
        struct sk_buff *skb = NULL;
-@@ -550,17 +550,12 @@ static void xgbe_realloc_skb(struct xgbe_channel *channel)
+@@ -546,17 +546,12 @@ static void xgbe_realloc_skb(struct xgbe_channel *channel)
        DBGPR("<--xgbe_realloc_skb\n");
  }
  
        DBGPR("<--xgbe_realloc_skb\n");
  }
  
@@ -47676,10 +47282,10 @@ index 1c5d62e..8e14d54 100644
 +      .wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init,
 +};
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
 +      .wrapper_rx_desc_init = xgbe_wrapper_rx_descriptor_init,
 +};
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
-index ea27383..faa8936 100644
+index 9da3a03..022f15c 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
-@@ -2463,7 +2463,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata)
+@@ -2462,7 +2462,7 @@ static void xgbe_powerdown_rx(struct xgbe_prv_data *pdata)
  
  static int xgbe_init(struct xgbe_prv_data *pdata)
  {
  
  static int xgbe_init(struct xgbe_prv_data *pdata)
  {
@@ -47688,7 +47294,7 @@ index ea27383..faa8936 100644
        int ret;
  
        DBGPR("-->xgbe_init\n");
        int ret;
  
        DBGPR("-->xgbe_init\n");
-@@ -2525,101 +2525,96 @@ static int xgbe_init(struct xgbe_prv_data *pdata)
+@@ -2524,101 +2524,96 @@ static int xgbe_init(struct xgbe_prv_data *pdata)
        return 0;
  }
  
        return 0;
  }
  
@@ -47864,10 +47470,10 @@ index ea27383..faa8936 100644
 +      .config_dcb_pfc = xgbe_config_dcb_pfc,
 +};
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
 +      .config_dcb_pfc = xgbe_config_dcb_pfc,
 +};
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-index b26d758..b0d1c3b 100644
+index 2349ea9..a83a677 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
-@@ -155,7 +155,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu)
+@@ -154,7 +154,7 @@ static int xgbe_calc_rx_buf_size(struct net_device *netdev, unsigned int mtu)
  
  static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
  {
@@ -47876,7 +47482,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_channel *channel;
        enum xgbe_int int_id;
        unsigned int i;
        struct xgbe_channel *channel;
        enum xgbe_int int_id;
        unsigned int i;
-@@ -177,7 +177,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
+@@ -176,7 +176,7 @@ static void xgbe_enable_rx_tx_ints(struct xgbe_prv_data *pdata)
  
  static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
  {
@@ -47885,7 +47491,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_channel *channel;
        enum xgbe_int int_id;
        unsigned int i;
        struct xgbe_channel *channel;
        enum xgbe_int int_id;
        unsigned int i;
-@@ -200,7 +200,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
+@@ -199,7 +199,7 @@ static void xgbe_disable_rx_tx_ints(struct xgbe_prv_data *pdata)
  static irqreturn_t xgbe_isr(int irq, void *data)
  {
        struct xgbe_prv_data *pdata = data;
  static irqreturn_t xgbe_isr(int irq, void *data)
  {
        struct xgbe_prv_data *pdata = data;
@@ -47894,7 +47500,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_channel *channel;
        unsigned int dma_isr, dma_ch_isr;
        unsigned int mac_isr, mac_tssr;
        struct xgbe_channel *channel;
        unsigned int dma_isr, dma_ch_isr;
        unsigned int mac_isr, mac_tssr;
-@@ -447,7 +447,7 @@ static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del)
+@@ -446,7 +446,7 @@ static void xgbe_napi_disable(struct xgbe_prv_data *pdata, unsigned int del)
  
  void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
  {
  
  void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
  {
@@ -47903,7 +47509,7 @@ index b26d758..b0d1c3b 100644
  
        DBGPR("-->xgbe_init_tx_coalesce\n");
  
  
        DBGPR("-->xgbe_init_tx_coalesce\n");
  
-@@ -461,7 +461,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
+@@ -460,7 +460,7 @@ void xgbe_init_tx_coalesce(struct xgbe_prv_data *pdata)
  
  void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
  {
  
  void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
  {
@@ -47912,7 +47518,7 @@ index b26d758..b0d1c3b 100644
  
        DBGPR("-->xgbe_init_rx_coalesce\n");
  
  
        DBGPR("-->xgbe_init_rx_coalesce\n");
  
-@@ -475,7 +475,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
+@@ -474,7 +474,7 @@ void xgbe_init_rx_coalesce(struct xgbe_prv_data *pdata)
  
  static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata)
  {
@@ -47921,7 +47527,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_data *rdata;
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_data *rdata;
-@@ -500,7 +500,7 @@ static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata)
+@@ -499,7 +499,7 @@ static void xgbe_free_tx_skbuff(struct xgbe_prv_data *pdata)
  
  static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata)
  {
@@ -47930,7 +47536,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_data *rdata;
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_ring_data *rdata;
-@@ -526,7 +526,7 @@ static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata)
+@@ -525,7 +525,7 @@ static void xgbe_free_rx_skbuff(struct xgbe_prv_data *pdata)
  static void xgbe_adjust_link(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  static void xgbe_adjust_link(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -47939,7 +47545,7 @@ index b26d758..b0d1c3b 100644
        struct phy_device *phydev = pdata->phydev;
        int new_state = 0;
  
        struct phy_device *phydev = pdata->phydev;
        int new_state = 0;
  
-@@ -634,7 +634,7 @@ static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
+@@ -633,7 +633,7 @@ static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
  int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -47948,7 +47554,7 @@ index b26d758..b0d1c3b 100644
        unsigned long flags;
  
        DBGPR("-->xgbe_powerdown\n");
        unsigned long flags;
  
        DBGPR("-->xgbe_powerdown\n");
-@@ -672,7 +672,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
+@@ -671,7 +671,7 @@ int xgbe_powerdown(struct net_device *netdev, unsigned int caller)
  int xgbe_powerup(struct net_device *netdev, unsigned int caller)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  int xgbe_powerup(struct net_device *netdev, unsigned int caller)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -47957,7 +47563,7 @@ index b26d758..b0d1c3b 100644
        unsigned long flags;
  
        DBGPR("-->xgbe_powerup\n");
        unsigned long flags;
  
        DBGPR("-->xgbe_powerup\n");
-@@ -709,7 +709,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller)
+@@ -708,7 +708,7 @@ int xgbe_powerup(struct net_device *netdev, unsigned int caller)
  
  static int xgbe_start(struct xgbe_prv_data *pdata)
  {
  
  static int xgbe_start(struct xgbe_prv_data *pdata)
  {
@@ -47966,7 +47572,7 @@ index b26d758..b0d1c3b 100644
        struct net_device *netdev = pdata->netdev;
  
        DBGPR("-->xgbe_start\n");
        struct net_device *netdev = pdata->netdev;
  
        DBGPR("-->xgbe_start\n");
-@@ -735,7 +735,7 @@ static int xgbe_start(struct xgbe_prv_data *pdata)
+@@ -734,7 +734,7 @@ static int xgbe_start(struct xgbe_prv_data *pdata)
  
  static void xgbe_stop(struct xgbe_prv_data *pdata)
  {
  
  static void xgbe_stop(struct xgbe_prv_data *pdata)
  {
@@ -47975,7 +47581,7 @@ index b26d758..b0d1c3b 100644
        struct net_device *netdev = pdata->netdev;
  
        DBGPR("-->xgbe_stop\n");
        struct net_device *netdev = pdata->netdev;
  
        DBGPR("-->xgbe_stop\n");
-@@ -755,7 +755,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata)
+@@ -754,7 +754,7 @@ static void xgbe_stop(struct xgbe_prv_data *pdata)
  
  static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset)
  {
  
  static void xgbe_restart_dev(struct xgbe_prv_data *pdata, unsigned int reset)
  {
@@ -47984,7 +47590,7 @@ index b26d758..b0d1c3b 100644
  
        DBGPR("-->xgbe_restart_dev\n");
  
  
        DBGPR("-->xgbe_restart_dev\n");
  
-@@ -952,7 +952,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
+@@ -951,7 +951,7 @@ static int xgbe_set_hwtstamp_settings(struct xgbe_prv_data *pdata,
                return -ERANGE;
        }
  
                return -ERANGE;
        }
  
@@ -47993,7 +47599,7 @@ index b26d758..b0d1c3b 100644
  
        memcpy(&pdata->tstamp_config, &config, sizeof(config));
  
  
        memcpy(&pdata->tstamp_config, &config, sizeof(config));
  
-@@ -1090,8 +1090,8 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata,
+@@ -1089,8 +1089,8 @@ static void xgbe_packet_info(struct xgbe_prv_data *pdata,
  static int xgbe_open(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  static int xgbe_open(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48004,7 +47610,7 @@ index b26d758..b0d1c3b 100644
        int ret;
  
        DBGPR("-->xgbe_open\n");
        int ret;
  
        DBGPR("-->xgbe_open\n");
-@@ -1171,8 +1171,8 @@ err_phy_init:
+@@ -1170,8 +1170,8 @@ err_phy_init:
  static int xgbe_close(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  static int xgbe_close(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48015,7 +47621,7 @@ index b26d758..b0d1c3b 100644
  
        DBGPR("-->xgbe_close\n");
  
  
        DBGPR("-->xgbe_close\n");
  
-@@ -1206,8 +1206,8 @@ static int xgbe_close(struct net_device *netdev)
+@@ -1205,8 +1205,8 @@ static int xgbe_close(struct net_device *netdev)
  static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  static int xgbe_xmit(struct sk_buff *skb, struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48026,7 +47632,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_packet_data *packet;
        struct xgbe_channel *channel;
        struct xgbe_ring *ring;
        struct xgbe_packet_data *packet;
-@@ -1276,7 +1276,7 @@ tx_netdev_return:
+@@ -1275,7 +1275,7 @@ tx_netdev_return:
  static void xgbe_set_rx_mode(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  static void xgbe_set_rx_mode(struct net_device *netdev)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48035,7 +47641,7 @@ index b26d758..b0d1c3b 100644
        unsigned int pr_mode, am_mode;
  
        DBGPR("-->xgbe_set_rx_mode\n");
        unsigned int pr_mode, am_mode;
  
        DBGPR("-->xgbe_set_rx_mode\n");
-@@ -1295,7 +1295,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev)
+@@ -1294,7 +1294,7 @@ static void xgbe_set_rx_mode(struct net_device *netdev)
  static int xgbe_set_mac_address(struct net_device *netdev, void *addr)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
  static int xgbe_set_mac_address(struct net_device *netdev, void *addr)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48044,7 +47650,7 @@ index b26d758..b0d1c3b 100644
        struct sockaddr *saddr = addr;
  
        DBGPR("-->xgbe_set_mac_address\n");
        struct sockaddr *saddr = addr;
  
        DBGPR("-->xgbe_set_mac_address\n");
-@@ -1362,7 +1362,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev,
+@@ -1361,7 +1361,7 @@ static struct rtnl_link_stats64 *xgbe_get_stats64(struct net_device *netdev,
  
        DBGPR("-->%s\n", __func__);
  
  
        DBGPR("-->%s\n", __func__);
  
@@ -48053,7 +47659,7 @@ index b26d758..b0d1c3b 100644
  
        s->rx_packets = pstats->rxframecount_gb;
        s->rx_bytes = pstats->rxoctetcount_gb;
  
        s->rx_packets = pstats->rxframecount_gb;
        s->rx_bytes = pstats->rxoctetcount_gb;
-@@ -1389,7 +1389,7 @@ static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
+@@ -1388,7 +1388,7 @@ static int xgbe_vlan_rx_add_vid(struct net_device *netdev, __be16 proto,
                                u16 vid)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
                                u16 vid)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48062,7 +47668,7 @@ index b26d758..b0d1c3b 100644
  
        DBGPR("-->%s\n", __func__);
  
  
        DBGPR("-->%s\n", __func__);
  
-@@ -1405,7 +1405,7 @@ static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto,
+@@ -1404,7 +1404,7 @@ static int xgbe_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto,
                                 u16 vid)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
                                 u16 vid)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
@@ -48071,16 +47677,16 @@ index b26d758..b0d1c3b 100644
  
        DBGPR("-->%s\n", __func__);
  
  
        DBGPR("-->%s\n", __func__);
  
-@@ -1465,7 +1465,7 @@ static int xgbe_set_features(struct net_device *netdev,
+@@ -1464,7 +1464,7 @@ static int xgbe_set_features(struct net_device *netdev,
                             netdev_features_t features)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
 -      struct xgbe_hw_if *hw_if = &pdata->hw_if;
 +      struct xgbe_hw_if *hw_if = pdata->hw_if;
                             netdev_features_t features)
  {
        struct xgbe_prv_data *pdata = netdev_priv(netdev);
 -      struct xgbe_hw_if *hw_if = &pdata->hw_if;
 +      struct xgbe_hw_if *hw_if = pdata->hw_if;
-       unsigned int rxcsum, rxvlan, rxvlan_filter;
+       netdev_features_t rxcsum, rxvlan, rxvlan_filter;
  
        rxcsum = pdata->netdev_features & NETIF_F_RXCSUM;
  
        rxcsum = pdata->netdev_features & NETIF_F_RXCSUM;
-@@ -1521,7 +1521,7 @@ struct net_device_ops *xgbe_get_netdev_ops(void)
+@@ -1520,7 +1520,7 @@ struct net_device_ops *xgbe_get_netdev_ops(void)
  static void xgbe_rx_refresh(struct xgbe_channel *channel)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
  static void xgbe_rx_refresh(struct xgbe_channel *channel)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
@@ -48089,7 +47695,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_ring *ring = channel->rx_ring;
        struct xgbe_ring_data *rdata;
  
        struct xgbe_ring *ring = channel->rx_ring;
        struct xgbe_ring_data *rdata;
  
-@@ -1537,8 +1537,8 @@ static void xgbe_rx_refresh(struct xgbe_channel *channel)
+@@ -1536,8 +1536,8 @@ static void xgbe_rx_refresh(struct xgbe_channel *channel)
  static int xgbe_tx_poll(struct xgbe_channel *channel)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
  static int xgbe_tx_poll(struct xgbe_channel *channel)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
@@ -48100,7 +47706,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_ring *ring = channel->tx_ring;
        struct xgbe_ring_data *rdata;
        struct xgbe_ring_desc *rdesc;
        struct xgbe_ring *ring = channel->tx_ring;
        struct xgbe_ring_data *rdata;
        struct xgbe_ring_desc *rdesc;
-@@ -1590,7 +1590,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
+@@ -1589,7 +1589,7 @@ static int xgbe_tx_poll(struct xgbe_channel *channel)
  static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
  static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
  {
        struct xgbe_prv_data *pdata = channel->pdata;
@@ -48110,7 +47716,7 @@ index b26d758..b0d1c3b 100644
        struct xgbe_ring_data *rdata;
        struct xgbe_packet_data *packet;
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
        struct xgbe_ring_data *rdata;
        struct xgbe_packet_data *packet;
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
-index 46f6130..f37dde3 100644
+index 49508ec..2617cca 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
 @@ -203,7 +203,7 @@ static void xgbe_get_ethtool_stats(struct net_device *netdev,
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ethtool.c
 @@ -203,7 +203,7 @@ static void xgbe_get_ethtool_stats(struct net_device *netdev,
@@ -48141,10 +47747,10 @@ index 46f6130..f37dde3 100644
        unsigned int tx_frames, tx_usecs;
  
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
        unsigned int tx_frames, tx_usecs;
  
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-main.c b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
-index bdf9cfa..340aea1 100644
+index f5a8fa0..0bb58ff 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-main.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-main.c
-@@ -210,12 +210,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata)
+@@ -209,12 +209,6 @@ static void xgbe_default_config(struct xgbe_prv_data *pdata)
        DBGPR("<--xgbe_default_config\n");
  }
  
        DBGPR("<--xgbe_default_config\n");
  }
  
@@ -48157,7 +47763,7 @@ index bdf9cfa..340aea1 100644
  static int xgbe_probe(struct platform_device *pdev)
  {
        struct xgbe_prv_data *pdata;
  static int xgbe_probe(struct platform_device *pdev)
  {
        struct xgbe_prv_data *pdata;
-@@ -328,9 +322,8 @@ static int xgbe_probe(struct platform_device *pdev)
+@@ -327,9 +321,8 @@ static int xgbe_probe(struct platform_device *pdev)
        netdev->base_addr = (unsigned long)pdata->xgmac_regs;
  
        /* Set all the function pointers */
        netdev->base_addr = (unsigned long)pdata->xgmac_regs;
  
        /* Set all the function pointers */
@@ -48170,10 +47776,10 @@ index bdf9cfa..340aea1 100644
        /* Issue software reset to device */
        hw_if->exit(pdata);
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
        /* Issue software reset to device */
        hw_if->exit(pdata);
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
-index 6d2221e..47d1325 100644
+index 363b210..b241389 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-mdio.c
-@@ -127,7 +127,7 @@
+@@ -126,7 +126,7 @@
  static int xgbe_mdio_read(struct mii_bus *mii, int prtad, int mmd_reg)
  {
        struct xgbe_prv_data *pdata = mii->priv;
  static int xgbe_mdio_read(struct mii_bus *mii, int prtad, int mmd_reg)
  {
        struct xgbe_prv_data *pdata = mii->priv;
@@ -48182,7 +47788,7 @@ index 6d2221e..47d1325 100644
        int mmd_data;
  
        DBGPR_MDIO("-->xgbe_mdio_read: prtad=%#x mmd_reg=%#x\n",
        int mmd_data;
  
        DBGPR_MDIO("-->xgbe_mdio_read: prtad=%#x mmd_reg=%#x\n",
-@@ -144,7 +144,7 @@ static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg,
+@@ -143,7 +143,7 @@ static int xgbe_mdio_write(struct mii_bus *mii, int prtad, int mmd_reg,
                           u16 mmd_val)
  {
        struct xgbe_prv_data *pdata = mii->priv;
                           u16 mmd_val)
  {
        struct xgbe_prv_data *pdata = mii->priv;
@@ -48192,10 +47798,10 @@ index 6d2221e..47d1325 100644
  
        DBGPR_MDIO("-->xgbe_mdio_write: prtad=%#x mmd_reg=%#x mmd_data=%#x\n",
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
  
        DBGPR_MDIO("-->xgbe_mdio_write: prtad=%#x mmd_reg=%#x mmd_data=%#x\n",
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
-index 37e64cf..c3b61cf 100644
+index a1bf9d1c..84adcab 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
 --- a/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe-ptp.c
-@@ -130,7 +130,7 @@ static cycle_t xgbe_cc_read(const struct cyclecounter *cc)
+@@ -129,7 +129,7 @@ static cycle_t xgbe_cc_read(const struct cyclecounter *cc)
                                                   tstamp_cc);
        u64 nsec;
  
                                                   tstamp_cc);
        u64 nsec;
  
@@ -48204,7 +47810,7 @@ index 37e64cf..c3b61cf 100644
  
        return nsec;
  }
  
        return nsec;
  }
-@@ -159,7 +159,7 @@ static int xgbe_adjfreq(struct ptp_clock_info *info, s32 delta)
+@@ -158,7 +158,7 @@ static int xgbe_adjfreq(struct ptp_clock_info *info, s32 delta)
  
        spin_lock_irqsave(&pdata->tstamp_lock, flags);
  
  
        spin_lock_irqsave(&pdata->tstamp_lock, flags);
  
@@ -48214,10 +47820,10 @@ index 37e64cf..c3b61cf 100644
        spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
  
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
        spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
  
 diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
-index e9fe6e6..875fbaf 100644
+index 789957d..d7d0245 100644
 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
 --- a/drivers/net/ethernet/amd/xgbe/xgbe.h
 +++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
-@@ -585,8 +585,8 @@ struct xgbe_prv_data {
+@@ -583,8 +583,8 @@ struct xgbe_prv_data {
  
        int irq_number;
  
  
        int irq_number;
  
@@ -48228,7 +47834,7 @@ index e9fe6e6..875fbaf 100644
  
        /* AXI DMA settings */
        unsigned int axdomain;
  
        /* AXI DMA settings */
        unsigned int axdomain;
-@@ -699,6 +699,9 @@ struct xgbe_prv_data {
+@@ -697,6 +697,9 @@ struct xgbe_prv_data {
  #endif
  };
  
  #endif
  };
  
@@ -48239,10 +47845,10 @@ index e9fe6e6..875fbaf 100644
  
  void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *);
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
  
  void xgbe_init_function_ptrs_dev(struct xgbe_hw_if *);
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
-index 571427c..e9fe9e7 100644
+index adcacda..fa6e0ae 100644
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h
-@@ -1058,7 +1058,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp)
+@@ -1065,7 +1065,7 @@ static inline u8 bnx2x_get_path_func_num(struct bnx2x *bp)
  static inline void bnx2x_init_bp_objs(struct bnx2x *bp)
  {
        /* RX_MODE controlling object */
  static inline void bnx2x_init_bp_objs(struct bnx2x *bp)
  {
        /* RX_MODE controlling object */
@@ -48252,7 +47858,7 @@ index 571427c..e9fe9e7 100644
        /* multicast configuration controlling object */
        bnx2x_init_mcast_obj(bp, &bp->mcast_obj, bp->fp->cl_id, bp->fp->cid,
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
        /* multicast configuration controlling object */
        bnx2x_init_mcast_obj(bp, &bp->mcast_obj, bp->fp->cl_id, bp->fp->cid,
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
-index b193604..8873bfd 100644
+index 7bc2924..2112002 100644
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
 @@ -2329,15 +2329,14 @@ int bnx2x_config_rx_mode(struct bnx2x *bp,
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c
 @@ -2329,15 +2329,14 @@ int bnx2x_config_rx_mode(struct bnx2x *bp,
@@ -48277,10 +47883,10 @@ index b193604..8873bfd 100644
  }
  
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
  }
  
 diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
-index 718ecd2..2183b2f 100644
+index e97275f..52e28bc 100644
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
 +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h
-@@ -1340,8 +1340,7 @@ int bnx2x_vlan_mac_move(struct bnx2x *bp,
+@@ -1409,8 +1409,7 @@ int bnx2x_vlan_mac_move(struct bnx2x *bp,
  
  /********************* RX MODE ****************/
  
  
  /********************* RX MODE ****************/
  
@@ -48303,10 +47909,10 @@ index 31c9f82..e65e986 100644
  #define  CHIPREV_ID_5752_A0_HW                 0x5000
  #define  CHIPREV_ID_5752_A0            0x6000
 diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c
  #define  CHIPREV_ID_5752_A0_HW                 0x5000
  #define  CHIPREV_ID_5752_A0            0x6000
 diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c
-index 13f9636..228040f 100644
+index 903466e..b285864 100644
 --- a/drivers/net/ethernet/brocade/bna/bna_enet.c
 +++ b/drivers/net/ethernet/brocade/bna/bna_enet.c
 --- a/drivers/net/ethernet/brocade/bna/bna_enet.c
 +++ b/drivers/net/ethernet/brocade/bna/bna_enet.c
-@@ -1690,10 +1690,10 @@ bna_cb_ioceth_reset(void *arg)
+@@ -1693,10 +1693,10 @@ bna_cb_ioceth_reset(void *arg)
  }
  
  static struct bfa_ioc_cbfn bna_ioceth_cbfn = {
  }
  
  static struct bfa_ioc_cbfn bna_ioceth_cbfn = {
@@ -48321,26 +47927,6 @@ index 13f9636..228040f 100644
  };
  
  static void bna_attr_init(struct bna_ioceth *ioceth)
  };
  
  static void bna_attr_init(struct bna_ioceth *ioceth)
-diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
-index ffc92a4..40edc77 100644
---- a/drivers/net/ethernet/brocade/bna/bnad.c
-+++ b/drivers/net/ethernet/brocade/bna/bnad.c
-@@ -552,6 +552,7 @@ bnad_cq_setup_skb_frags(struct bna_rcb *rcb, struct sk_buff *skb,
-               len = (vec == nvecs) ?
-                       last_fraglen : unmap->vector.len;
-+              skb->truesize += unmap->vector.len;
-               totlen += len;
-               skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
-@@ -563,7 +564,6 @@ bnad_cq_setup_skb_frags(struct bna_rcb *rcb, struct sk_buff *skb,
-       skb->len += totlen;
-       skb->data_len += totlen;
--      skb->truesize += totlen;
- }
- static inline void
 diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.h b/drivers/net/ethernet/chelsio/cxgb3/l2t.h
 index 8cffcdf..aadf043 100644
 --- a/drivers/net/ethernet/chelsio/cxgb3/l2t.h
 diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.h b/drivers/net/ethernet/chelsio/cxgb3/l2t.h
 index 8cffcdf..aadf043 100644
 --- a/drivers/net/ethernet/chelsio/cxgb3/l2t.h
@@ -48355,10 +47941,10 @@ index 8cffcdf..aadf043 100644
  #define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb)
  
 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
  #define L2T_SKB_CB(skb) ((struct l2t_skb_cb *)(skb)->cb)
  
 diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-index 9f5f3c3..86d21a6 100644
+index 279873c..11e1921 100644
 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
 +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
-@@ -2359,7 +2359,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
+@@ -2365,7 +2365,7 @@ static void get_regs(struct net_device *dev, struct ethtool_regs *regs,
  
        int i;
        struct adapter *ap = netdev2adap(dev);
  
        int i;
        struct adapter *ap = netdev2adap(dev);
@@ -48390,10 +47976,10 @@ index cf8b6ff..274271e 100644
        break;
      }
 diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
        break;
      }
 diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
-index 93ff8ef..01e0537 100644
+index 597c463..5cc1a7f 100644
 --- a/drivers/net/ethernet/emulex/benet/be_main.c
 +++ b/drivers/net/ethernet/emulex/benet/be_main.c
 --- a/drivers/net/ethernet/emulex/benet/be_main.c
 +++ b/drivers/net/ethernet/emulex/benet/be_main.c
-@@ -533,7 +533,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
+@@ -537,7 +537,7 @@ static void accumulate_16bit_val(u32 *acc, u16 val)
  
        if (wrapped)
                newacc += 65536;
  
        if (wrapped)
                newacc += 65536;
@@ -48454,20 +48040,21 @@ index 5fd4b52..87aa34b 100644
        smp_mb();
  
        /* need lock to prevent incorrect read while modifying cyclecounter */
        smp_mb();
  
        /* need lock to prevent incorrect read while modifying cyclecounter */
-diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
-index c14d4d8..66da603 100644
---- a/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
-+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
-@@ -1259,6 +1259,9 @@ int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting)
-       struct ixgbe_hw *hw = &adapter->hw;
-       u32 regval;
-+      if (vf >= adapter->num_vfs)
-+              return -EINVAL;
-+
-       adapter->vfinfo[vf].spoofchk_enabled = setting;
+diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+index 454d9fe..59f0f0b 100644
+--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
++++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+@@ -458,8 +458,8 @@ static bool mlx4_en_process_tx_cq(struct net_device *dev,
+       wmb();
+       /* we want to dirty this cache line once */
+-      ACCESS_ONCE(ring->last_nr_txbb) = last_nr_txbb;
+-      ACCESS_ONCE(ring->cons) = ring_cons + txbbs_skipped;
++      ACCESS_ONCE_RW(ring->last_nr_txbb) = last_nr_txbb;
++      ACCESS_ONCE_RW(ring->cons) = ring_cons + txbbs_skipped;
+       netdev_tx_completed_queue(ring->tx_queue, packets, bytes);
  
  
-       regval = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
 diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
 index 2bbd01f..e8baa64 100644
 --- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
 diff --git a/drivers/net/ethernet/neterion/vxge/vxge-config.c b/drivers/net/ethernet/neterion/vxge/vxge-config.c
 index 2bbd01f..e8baa64 100644
 --- a/drivers/net/ethernet/neterion/vxge/vxge-config.c
@@ -48494,10 +48081,10 @@ index 2bbd01f..e8baa64 100644
                __vxge_hw_mempool_create(vpath->hldev,
                        fifo->config->memblock_size,
 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
                __vxge_hw_mempool_create(vpath->hldev,
                        fifo->config->memblock_size,
 diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
-index 3172cdf..d01ab34 100644
+index 2bb48d5..d1a865d 100644
 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
 +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
-@@ -2190,7 +2190,9 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter)
+@@ -2324,7 +2324,9 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter)
                max_tx_rings = QLCNIC_MAX_VNIC_TX_RINGS;
        } else if (ret == QLC_83XX_DEFAULT_OPMODE) {
                ahw->nic_mode = QLCNIC_DEFAULT_MODE;
                max_tx_rings = QLCNIC_MAX_VNIC_TX_RINGS;
        } else if (ret == QLC_83XX_DEFAULT_OPMODE) {
                ahw->nic_mode = QLCNIC_DEFAULT_MODE;
@@ -48553,10 +48140,10 @@ index c9f57fb..208bdc1 100644
        u32 entry_offset, dump, no_entries, buf_offset = 0;
        int i, k, ops_cnt, ops_index, dump_size = 0;
 diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
        u32 entry_offset, dump, no_entries, buf_offset = 0;
        int i, k, ops_cnt, ops_index, dump_size = 0;
 diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c
-index 0921302..927f761 100644
+index cf154f7..c948d1b 100644
 --- a/drivers/net/ethernet/realtek/r8169.c
 +++ b/drivers/net/ethernet/realtek/r8169.c
 --- a/drivers/net/ethernet/realtek/r8169.c
 +++ b/drivers/net/ethernet/realtek/r8169.c
-@@ -744,22 +744,22 @@ struct rtl8169_private {
+@@ -788,22 +788,22 @@ struct rtl8169_private {
        struct mdio_ops {
                void (*write)(struct rtl8169_private *, int, int);
                int (*read)(struct rtl8169_private *, int);
        struct mdio_ops {
                void (*write)(struct rtl8169_private *, int, int);
                int (*read)(struct rtl8169_private *, int);
@@ -48612,7 +48199,7 @@ index 08c483b..2c4a553 100644
  
  /* To mask all all interrupts.*/
 diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
  
  /* To mask all all interrupts.*/
 diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
-index d5e07de..e3bf20a 100644
+index 2f48f79..8ae1a1a 100644
 --- a/drivers/net/hyperv/hyperv_net.h
 +++ b/drivers/net/hyperv/hyperv_net.h
 @@ -171,7 +171,7 @@ struct rndis_device {
 --- a/drivers/net/hyperv/hyperv_net.h
 +++ b/drivers/net/hyperv/hyperv_net.h
 @@ -171,7 +171,7 @@ struct rndis_device {
@@ -48647,7 +48234,7 @@ index 2b86f0b..ecc996f 100644
        /* Ignore return since this msg is optional. */
        rndis_filter_send_request(dev, request);
 diff --git a/drivers/net/ieee802154/fakehard.c b/drivers/net/ieee802154/fakehard.c
        /* Ignore return since this msg is optional. */
        rndis_filter_send_request(dev, request);
 diff --git a/drivers/net/ieee802154/fakehard.c b/drivers/net/ieee802154/fakehard.c
-index 9ce854f..e43fa17 100644
+index 6cbc56a..5f7e6c8 100644
 --- a/drivers/net/ieee802154/fakehard.c
 +++ b/drivers/net/ieee802154/fakehard.c
 @@ -365,7 +365,7 @@ static int ieee802154fake_probe(struct platform_device *pdev)
 --- a/drivers/net/ieee802154/fakehard.c
 +++ b/drivers/net/ieee802154/fakehard.c
 @@ -365,7 +365,7 @@ static int ieee802154fake_probe(struct platform_device *pdev)
@@ -48659,11 +48246,24 @@ index 9ce854f..e43fa17 100644
  
        priv = netdev_priv(dev);
        priv->phy = phy;
  
        priv = netdev_priv(dev);
        priv->phy = phy;
+diff --git a/drivers/net/ifb.c b/drivers/net/ifb.c
+index 34f846b..4a0d5b1 100644
+--- a/drivers/net/ifb.c
++++ b/drivers/net/ifb.c
+@@ -253,7 +253,7 @@ static int ifb_validate(struct nlattr *tb[], struct nlattr *data[])
+       return 0;
+ }
+-static struct rtnl_link_ops ifb_link_ops __read_mostly = {
++static struct rtnl_link_ops ifb_link_ops = {
+       .kind           = "ifb",
+       .priv_size      = sizeof(struct ifb_private),
+       .setup          = ifb_setup,
 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
 diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
-index 5f17ad0..e0463c8 100644
+index bfb0b6e..5c396ce 100644
 --- a/drivers/net/macvlan.c
 +++ b/drivers/net/macvlan.c
 --- a/drivers/net/macvlan.c
 +++ b/drivers/net/macvlan.c
-@@ -264,7 +264,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
+@@ -335,7 +335,7 @@ static void macvlan_broadcast_enqueue(struct macvlan_port *port,
  free_nskb:
        kfree_skb(nskb);
  err:
  free_nskb:
        kfree_skb(nskb);
  err:
@@ -48671,8 +48271,8 @@ index 5f17ad0..e0463c8 100644
 +      atomic_long_inc_unchecked(&skb->dev->rx_dropped);
  }
  
 +      atomic_long_inc_unchecked(&skb->dev->rx_dropped);
  }
  
- /* called under rcu_read_lock() from netif_receive_skb */
-@@ -1150,13 +1150,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
+ static void macvlan_flush_sources(struct macvlan_port *port,
+@@ -1454,13 +1454,15 @@ static const struct nla_policy macvlan_policy[IFLA_MACVLAN_MAX + 1] = {
  int macvlan_link_register(struct rtnl_link_ops *ops)
  {
        /* common fields */
  int macvlan_link_register(struct rtnl_link_ops *ops)
  {
        /* common fields */
@@ -48695,7 +48295,7 @@ index 5f17ad0..e0463c8 100644
  
        return rtnl_link_register(ops);
  };
  
        return rtnl_link_register(ops);
  };
-@@ -1236,7 +1238,7 @@ static int macvlan_device_event(struct notifier_block *unused,
+@@ -1540,7 +1542,7 @@ static int macvlan_device_event(struct notifier_block *unused,
        return NOTIFY_DONE;
  }
  
        return NOTIFY_DONE;
  }
  
@@ -48705,10 +48305,19 @@ index 5f17ad0..e0463c8 100644
  };
  
 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
  };
  
 diff --git a/drivers/net/macvtap.c b/drivers/net/macvtap.c
-index 07c942b..2d8b073 100644
+index 880cc09..6a68ba6 100644
 --- a/drivers/net/macvtap.c
 +++ b/drivers/net/macvtap.c
 --- a/drivers/net/macvtap.c
 +++ b/drivers/net/macvtap.c
-@@ -1023,7 +1023,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
+@@ -422,7 +422,7 @@ static void macvtap_setup(struct net_device *dev)
+       dev->tx_queue_len = TUN_READQ_SIZE;
+ }
+-static struct rtnl_link_ops macvtap_link_ops __read_mostly = {
++static struct rtnl_link_ops macvtap_link_ops = {
+       .kind           = "macvtap",
+       .setup          = macvtap_setup,
+       .newlink        = macvtap_newlink,
+@@ -1020,7 +1020,7 @@ static long macvtap_ioctl(struct file *file, unsigned int cmd,
                }
  
                ret = 0;
                }
  
                ret = 0;
@@ -48717,7 +48326,7 @@ index 07c942b..2d8b073 100644
                    put_user(q->flags, &ifr->ifr_flags))
                        ret = -EFAULT;
                macvtap_put_vlan(vlan);
                    put_user(q->flags, &ifr->ifr_flags))
                        ret = -EFAULT;
                macvtap_put_vlan(vlan);
-@@ -1193,7 +1193,7 @@ static int macvtap_device_event(struct notifier_block *unused,
+@@ -1190,7 +1190,7 @@ static int macvtap_device_event(struct notifier_block *unused,
        return NOTIFY_DONE;
  }
  
        return NOTIFY_DONE;
  }
  
@@ -48726,8 +48335,21 @@ index 07c942b..2d8b073 100644
        .notifier_call  = macvtap_device_event,
  };
  
        .notifier_call  = macvtap_device_event,
  };
  
+diff --git a/drivers/net/nlmon.c b/drivers/net/nlmon.c
+index 34924df..a747360 100644
+--- a/drivers/net/nlmon.c
++++ b/drivers/net/nlmon.c
+@@ -154,7 +154,7 @@ static int nlmon_validate(struct nlattr *tb[], struct nlattr *data[])
+       return 0;
+ }
+-static struct rtnl_link_ops nlmon_link_ops __read_mostly = {
++static struct rtnl_link_ops nlmon_link_ops = {
+       .kind                   = "nlmon",
+       .priv_size              = sizeof(struct nlmon),
+       .setup                  = nlmon_setup,
 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
 diff --git a/drivers/net/ppp/ppp_generic.c b/drivers/net/ppp/ppp_generic.c
-index 17ecdd6..79ad848 100644
+index 794a473..9fd437b 100644
 --- a/drivers/net/ppp/ppp_generic.c
 +++ b/drivers/net/ppp/ppp_generic.c
 @@ -1020,7 +1020,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 --- a/drivers/net/ppp/ppp_generic.c
 +++ b/drivers/net/ppp/ppp_generic.c
 @@ -1020,7 +1020,6 @@ ppp_net_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
@@ -48748,21 +48370,6 @@ index 17ecdd6..79ad848 100644
                        break;
                err = 0;
                break;
                        break;
                err = 0;
                break;
-diff --git a/drivers/net/ppp/pptp.c b/drivers/net/ppp/pptp.c
-index 1aff970..cc2ee29 100644
---- a/drivers/net/ppp/pptp.c
-+++ b/drivers/net/ppp/pptp.c
-@@ -506,7 +506,9 @@ static int pptp_getname(struct socket *sock, struct sockaddr *uaddr,
-       int len = sizeof(struct sockaddr_pppox);
-       struct sockaddr_pppox sp;
--      sp.sa_family      = AF_PPPOX;
-+      memset(&sp.sa_addr, 0, sizeof(sp.sa_addr));
-+
-+      sp.sa_family    = AF_PPPOX;
-       sp.sa_protocol  = PX_PROTO_PPTP;
-       sp.sa_addr.pptp = pppox_sk(sock->sk)->proto.pptp.src_addr;
 diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c
 index 079f7ad..b2a2bfa7 100644
 --- a/drivers/net/slip/slhc.c
 diff --git a/drivers/net/slip/slhc.c b/drivers/net/slip/slhc.c
 index 079f7ad..b2a2bfa7 100644
 --- a/drivers/net/slip/slhc.c
@@ -48777,10 +48384,19 @@ index 079f7ad..b2a2bfa7 100644
  
        /* We've got a compressed packet; read the change byte */
 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
  
        /* We've got a compressed packet; read the change byte */
 diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
-index 1f76c2ea..9681171 100644
+index 2368395..bf6fe96 100644
 --- a/drivers/net/team/team.c
 +++ b/drivers/net/team/team.c
 --- a/drivers/net/team/team.c
 +++ b/drivers/net/team/team.c
-@@ -2862,7 +2862,7 @@ static int team_device_event(struct notifier_block *unused,
+@@ -2090,7 +2090,7 @@ static unsigned int team_get_num_rx_queues(void)
+       return TEAM_DEFAULT_NUM_RX_QUEUES;
+ }
+-static struct rtnl_link_ops team_link_ops __read_mostly = {
++static struct rtnl_link_ops team_link_ops = {
+       .kind                   = DRV_NAME,
+       .priv_size              = sizeof(struct team),
+       .setup                  = team_setup,
+@@ -2880,7 +2880,7 @@ static int team_device_event(struct notifier_block *unused,
        return NOTIFY_DONE;
  }
  
        return NOTIFY_DONE;
  }
  
@@ -48790,10 +48406,19 @@ index 1f76c2ea..9681171 100644
  };
  
 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
  };
  
 diff --git a/drivers/net/tun.c b/drivers/net/tun.c
-index d965e8a..f119e64 100644
+index 9dd3746..74f191e 100644
 --- a/drivers/net/tun.c
 +++ b/drivers/net/tun.c
 --- a/drivers/net/tun.c
 +++ b/drivers/net/tun.c
-@@ -1861,7 +1861,7 @@ unlock:
+@@ -1426,7 +1426,7 @@ static int tun_validate(struct nlattr *tb[], struct nlattr *data[])
+       return -EINVAL;
+ }
+-static struct rtnl_link_ops tun_link_ops __read_mostly = {
++static struct rtnl_link_ops tun_link_ops = {
+       .kind           = DRV_NAME,
+       .priv_size      = sizeof(struct tun_struct),
+       .setup          = tun_setup,
+@@ -1868,7 +1868,7 @@ unlock:
  }
  
  static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
  }
  
  static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
@@ -48802,7 +48427,7 @@ index d965e8a..f119e64 100644
  {
        struct tun_file *tfile = file->private_data;
        struct tun_struct *tun;
  {
        struct tun_file *tfile = file->private_data;
        struct tun_struct *tun;
-@@ -1874,6 +1874,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
+@@ -1881,6 +1881,9 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,
        unsigned int ifindex;
        int ret;
  
        unsigned int ifindex;
        int ret;
  
@@ -48904,13 +48529,13 @@ index babda7d..e40c90a 100644
                                    hso_start_serial_device(serial_table[i], GFP_NOIO);
                                hso_kick_transmit(dev2ser(serial_table[i]));
 diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
                                    hso_start_serial_device(serial_table[i], GFP_NOIO);
                                hso_kick_transmit(dev2ser(serial_table[i]));
 diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
-index 604ef21..d1f49a1 100644
+index c6554c7..7e2ebd7 100644
 --- a/drivers/net/usb/r8152.c
 +++ b/drivers/net/usb/r8152.c
 --- a/drivers/net/usb/r8152.c
 +++ b/drivers/net/usb/r8152.c
-@@ -575,7 +575,7 @@ struct r8152 {
-               void (*up)(struct r8152 *);
-               void (*down)(struct r8152 *);
+@@ -577,7 +577,7 @@ struct r8152 {
                void (*unload)(struct r8152 *);
                void (*unload)(struct r8152 *);
+               int (*eee_get)(struct r8152 *, struct ethtool_eee *);
+               int (*eee_set)(struct r8152 *, struct ethtool_eee *);
 -      } rtl_ops;
 +      } __no_const rtl_ops;
  
 -      } rtl_ops;
 +      } __no_const rtl_ops;
  
@@ -48939,7 +48564,7 @@ index a2515887..6d13233 100644
  
        /* we will have to manufacture ethernet headers, prepare template */
 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
  
        /* we will have to manufacture ethernet headers, prepare template */
 diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
-index 59caa06..de191b3 100644
+index b0bc8ea..3af931b5 100644
 --- a/drivers/net/virtio_net.c
 +++ b/drivers/net/virtio_net.c
 @@ -48,7 +48,7 @@ module_param(gso, bool, 0444);
 --- a/drivers/net/virtio_net.c
 +++ b/drivers/net/virtio_net.c
 @@ -48,7 +48,7 @@ module_param(gso, bool, 0444);
@@ -48952,10 +48577,10 @@ index 59caa06..de191b3 100644
  #define VIRTNET_DRIVER_VERSION "1.0.0"
  
 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
  #define VIRTNET_DRIVER_VERSION "1.0.0"
  
 diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
-index 81a8a29..ae60a58 100644
+index 42b2d6a5..2a2cb41 100644
 --- a/drivers/net/vxlan.c
 +++ b/drivers/net/vxlan.c
 --- a/drivers/net/vxlan.c
 +++ b/drivers/net/vxlan.c
-@@ -2762,7 +2762,7 @@ nla_put_failure:
+@@ -2695,7 +2695,7 @@ nla_put_failure:
        return -EMSGSIZE;
  }
  
        return -EMSGSIZE;
  }
  
@@ -48964,7 +48589,7 @@ index 81a8a29..ae60a58 100644
        .kind           = "vxlan",
        .maxtype        = IFLA_VXLAN_MAX,
        .policy         = vxlan_policy,
        .kind           = "vxlan",
        .maxtype        = IFLA_VXLAN_MAX,
        .policy         = vxlan_policy,
-@@ -2809,7 +2809,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
+@@ -2742,7 +2742,7 @@ static int vxlan_lowerdev_event(struct notifier_block *unused,
        return NOTIFY_DONE;
  }
  
        return NOTIFY_DONE;
  }
  
@@ -49181,10 +48806,10 @@ index da92bfa..5a9001a 100644
        return msecs_to_jiffies((s->poll_timeout[2] << 16)
                                | (s->poll_timeout[1] << 8)
 diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c
        return msecs_to_jiffies((s->poll_timeout[2] << 16)
                                | (s->poll_timeout[1] << 8)
 diff --git a/drivers/net/wireless/ath/ath10k/htc.c b/drivers/net/wireless/ath/ath10k/htc.c
-index 5fdc40d..3975205 100644
+index 676bd4e..0b807a3 100644
 --- a/drivers/net/wireless/ath/ath10k/htc.c
 +++ b/drivers/net/wireless/ath/ath10k/htc.c
 --- a/drivers/net/wireless/ath/ath10k/htc.c
 +++ b/drivers/net/wireless/ath/ath10k/htc.c
-@@ -856,7 +856,10 @@ void ath10k_htc_stop(struct ath10k_htc *htc)
+@@ -848,7 +848,10 @@ int ath10k_htc_start(struct ath10k_htc *htc)
  /* registered target arrival callback from the HIF layer */
  int ath10k_htc_init(struct ath10k *ar)
  {
  /* registered target arrival callback from the HIF layer */
  int ath10k_htc_init(struct ath10k *ar)
  {
@@ -49196,7 +48821,7 @@ index 5fdc40d..3975205 100644
        struct ath10k_htc_ep *ep = NULL;
        struct ath10k_htc *htc = &ar->htc;
  
        struct ath10k_htc_ep *ep = NULL;
        struct ath10k_htc *htc = &ar->htc;
  
-@@ -866,8 +869,6 @@ int ath10k_htc_init(struct ath10k *ar)
+@@ -857,8 +860,6 @@ int ath10k_htc_init(struct ath10k *ar)
        ath10k_htc_reset_endpoint_states(htc);
  
        /* setup HIF layer callbacks */
        ath10k_htc_reset_endpoint_states(htc);
  
        /* setup HIF layer callbacks */
@@ -49206,10 +48831,10 @@ index 5fdc40d..3975205 100644
  
        /* Get HIF default pipe for HTC message exchange */
 diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
  
        /* Get HIF default pipe for HTC message exchange */
 diff --git a/drivers/net/wireless/ath/ath10k/htc.h b/drivers/net/wireless/ath/ath10k/htc.h
-index 4716d33..a688310 100644
+index 527179c..a890150 100644
 --- a/drivers/net/wireless/ath/ath10k/htc.h
 +++ b/drivers/net/wireless/ath/ath10k/htc.h
 --- a/drivers/net/wireless/ath/ath10k/htc.h
 +++ b/drivers/net/wireless/ath/ath10k/htc.h
-@@ -271,13 +271,13 @@ enum ath10k_htc_ep_id {
+@@ -270,13 +270,13 @@ enum ath10k_htc_ep_id {
  
  struct ath10k_htc_ops {
        void (*target_send_suspend_complete)(struct ath10k *ar);
  
  struct ath10k_htc_ops {
        void (*target_send_suspend_complete)(struct ath10k *ar);
@@ -49226,7 +48851,7 @@ index 4716d33..a688310 100644
  /* service connection information */
  struct ath10k_htc_svc_conn_req {
 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
  /* service connection information */
  struct ath10k_htc_svc_conn_req {
 diff --git a/drivers/net/wireless/ath/ath9k/ar9002_mac.c b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
-index 59af9f9..5f3564f 100644
+index 2a93519..7052786 100644
 --- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c
 +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
 @@ -220,8 +220,8 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i)
 --- a/drivers/net/wireless/ath/ath9k/ar9002_mac.c
 +++ b/drivers/net/wireless/ath/ath9k/ar9002_mac.c
 @@ -220,8 +220,8 @@ ar9002_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i)
@@ -49320,7 +48945,7 @@ index 59af9f9..5f3564f 100644
  
  static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds,
 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
  
  static int ar9002_hw_proc_txdesc(struct ath_hw *ah, void *ds,
 diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
-index 71e38e8..5ac96ca 100644
+index 057b165..98ae88f 100644
 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
 @@ -39,47 +39,47 @@ ar9003_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i)
 --- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c
 +++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c
 @@ -39,47 +39,47 @@ ar9003_set_txdesc(struct ath_hw *ah, void *ds, struct ath_tx_info *i)
@@ -49449,10 +49074,10 @@ index 71e38e8..5ac96ca 100644
  
  static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
 diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
  
  static u16 ar9003_calc_ptr_chksum(struct ar9003_txc *ads)
 diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h
-index 51b4ebe..d1929dd 100644
+index 975074f..e9440da 100644
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
 --- a/drivers/net/wireless/ath/ath9k/hw.h
 +++ b/drivers/net/wireless/ath/ath9k/hw.h
-@@ -629,7 +629,7 @@ struct ath_hw_private_ops {
+@@ -630,7 +630,7 @@ struct ath_hw_private_ops {
  
        /* ANI */
        void (*ani_cache_ini_regs)(struct ath_hw *ah);
  
        /* ANI */
        void (*ani_cache_ini_regs)(struct ath_hw *ah);
@@ -49461,7 +49086,7 @@ index 51b4ebe..d1929dd 100644
  
  /**
   * struct ath_spec_scan - parameters for Atheros spectral scan
  
  /**
   * struct ath_spec_scan - parameters for Atheros spectral scan
-@@ -706,7 +706,7 @@ struct ath_hw_ops {
+@@ -708,7 +708,7 @@ struct ath_hw_ops {
  #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
        void (*set_bt_ant_diversity)(struct ath_hw *hw, bool enable);
  #endif
  #ifdef CONFIG_ATH9K_BTCOEX_SUPPORT
        void (*set_bt_ant_diversity)(struct ath_hw *hw, bool enable);
  #endif
@@ -49471,43 +49096,43 @@ index 51b4ebe..d1929dd 100644
  struct ath_nf_limits {
        s16 max;
 diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
  struct ath_nf_limits {
        s16 max;
 diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
-index 4b148bb..ac738fa 100644
+index 4f18a6b..b07d92f 100644
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
 --- a/drivers/net/wireless/ath/ath9k/main.c
 +++ b/drivers/net/wireless/ath/ath9k/main.c
-@@ -2592,16 +2592,18 @@ void ath9k_fill_chanctx_ops(void)
-       if (!ath9k_use_chanctx)
+@@ -2454,16 +2454,18 @@ void ath9k_fill_chanctx_ops(void)
+       if (!ath9k_is_chanctx_enabled())
                return;
  
                return;
  
--      ath9k_ops.hw_scan = ath9k_hw_scan;
--      ath9k_ops.cancel_hw_scan = ath9k_cancel_hw_scan;
--      ath9k_ops.remain_on_channel  = ath9k_remain_on_channel;
+-      ath9k_ops.hw_scan                  = ath9k_hw_scan;
+-      ath9k_ops.cancel_hw_scan           = ath9k_cancel_hw_scan;
+-      ath9k_ops.remain_on_channel        = ath9k_remain_on_channel;
 -      ath9k_ops.cancel_remain_on_channel = ath9k_cancel_remain_on_channel;
 -      ath9k_ops.cancel_remain_on_channel = ath9k_cancel_remain_on_channel;
--      ath9k_ops.add_chanctx        = ath9k_add_chanctx;
--      ath9k_ops.remove_chanctx     = ath9k_remove_chanctx;
--      ath9k_ops.change_chanctx     = ath9k_change_chanctx;
--      ath9k_ops.assign_vif_chanctx = ath9k_assign_vif_chanctx;
--      ath9k_ops.unassign_vif_chanctx = ath9k_unassign_vif_chanctx;
--      ath9k_ops.mgd_prepare_tx = ath9k_chanctx_force_active;
+-      ath9k_ops.add_chanctx              = ath9k_add_chanctx;
+-      ath9k_ops.remove_chanctx           = ath9k_remove_chanctx;
+-      ath9k_ops.change_chanctx           = ath9k_change_chanctx;
+-      ath9k_ops.assign_vif_chanctx       = ath9k_assign_vif_chanctx;
+-      ath9k_ops.unassign_vif_chanctx     = ath9k_unassign_vif_chanctx;
+-      ath9k_ops.mgd_prepare_tx           = ath9k_mgd_prepare_tx;
 +      pax_open_kernel();
 +      pax_open_kernel();
-+      *(void **)&ath9k_ops.hw_scan = ath9k_hw_scan;
-+      *(void **)&ath9k_ops.cancel_hw_scan = ath9k_cancel_hw_scan;
-+      *(void **)&ath9k_ops.remain_on_channel  = ath9k_remain_on_channel;
++      *(void **)&ath9k_ops.hw_scan                  = ath9k_hw_scan;
++      *(void **)&ath9k_ops.cancel_hw_scan           = ath9k_cancel_hw_scan;
++      *(void **)&ath9k_ops.remain_on_channel        = ath9k_remain_on_channel;
 +      *(void **)&ath9k_ops.cancel_remain_on_channel = ath9k_cancel_remain_on_channel;
 +      *(void **)&ath9k_ops.cancel_remain_on_channel = ath9k_cancel_remain_on_channel;
-+      *(void **)&ath9k_ops.add_chanctx        = ath9k_add_chanctx;
-+      *(void **)&ath9k_ops.remove_chanctx     = ath9k_remove_chanctx;
-+      *(void **)&ath9k_ops.change_chanctx     = ath9k_change_chanctx;
-+      *(void **)&ath9k_ops.assign_vif_chanctx = ath9k_assign_vif_chanctx;
-+      *(void **)&ath9k_ops.unassign_vif_chanctx = ath9k_unassign_vif_chanctx;
-+      *(void **)&ath9k_ops.mgd_prepare_tx = ath9k_chanctx_force_active;
++      *(void **)&ath9k_ops.add_chanctx              = ath9k_add_chanctx;
++      *(void **)&ath9k_ops.remove_chanctx           = ath9k_remove_chanctx;
++      *(void **)&ath9k_ops.change_chanctx           = ath9k_change_chanctx;
++      *(void **)&ath9k_ops.assign_vif_chanctx       = ath9k_assign_vif_chanctx;
++      *(void **)&ath9k_ops.unassign_vif_chanctx     = ath9k_unassign_vif_chanctx;
++      *(void **)&ath9k_ops.mgd_prepare_tx           = ath9k_mgd_prepare_tx;
 +      pax_close_kernel();
  }
  
 +      pax_close_kernel();
  }
  
- struct ieee80211_ops ath9k_ops = {
+ #endif
 diff --git a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c
 diff --git a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c
-index 92190da..f3a4c4c 100644
+index 058a9f2..d5cb1ba 100644
 --- a/drivers/net/wireless/b43/phy_lp.c
 +++ b/drivers/net/wireless/b43/phy_lp.c
 --- a/drivers/net/wireless/b43/phy_lp.c
 +++ b/drivers/net/wireless/b43/phy_lp.c
-@@ -2514,7 +2514,7 @@ static int lpphy_b2063_tune(struct b43_wldev *dev,
+@@ -2502,7 +2502,7 @@ static int lpphy_b2063_tune(struct b43_wldev *dev,
  {
        struct ssb_bus *bus = dev->dev->sdev->bus;
  
  {
        struct ssb_bus *bus = dev->dev->sdev->bus;
  
@@ -49668,10 +49293,10 @@ index 0ffb6ff..c0b7f0e 100644
        memset(buf, 0, sizeof(buf));
        buf_size = min(count, sizeof(buf) - 1);
 diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
        memset(buf, 0, sizeof(buf));
        buf_size = min(count, sizeof(buf) - 1);
 diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
-index 6c02467..771bb8a 100644
+index dd2f3f8..fb1ae88 100644
 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
 +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
 --- a/drivers/net/wireless/iwlwifi/pcie/trans.c
 +++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
-@@ -1686,7 +1686,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
+@@ -1689,7 +1689,7 @@ static ssize_t iwl_dbgfs_interrupt_write(struct file *file,
        struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
  
        char buf[8];
        struct isr_statistics *isr_stats = &trans_pcie->isr_stats;
  
        char buf[8];
@@ -49680,7 +49305,7 @@ index 6c02467..771bb8a 100644
        u32 reset_flag;
  
        memset(buf, 0, sizeof(buf));
        u32 reset_flag;
  
        memset(buf, 0, sizeof(buf));
-@@ -1707,7 +1707,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
+@@ -1710,7 +1710,7 @@ static ssize_t iwl_dbgfs_csr_write(struct file *file,
  {
        struct iwl_trans *trans = file->private_data;
        char buf[8];
  {
        struct iwl_trans *trans = file->private_data;
        char buf[8];
@@ -49690,7 +49315,7 @@ index 6c02467..771bb8a 100644
  
        memset(buf, 0, sizeof(buf));
 diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
  
        memset(buf, 0, sizeof(buf));
 diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
-index 6b48c865..19646a7 100644
+index c9ad4cf..49a2fa0 100644
 --- a/drivers/net/wireless/mac80211_hwsim.c
 +++ b/drivers/net/wireless/mac80211_hwsim.c
 @@ -2577,20 +2577,20 @@ static int __init init_mac80211_hwsim(void)
 --- a/drivers/net/wireless/mac80211_hwsim.c
 +++ b/drivers/net/wireless/mac80211_hwsim.c
 @@ -2577,20 +2577,20 @@ static int __init init_mac80211_hwsim(void)
@@ -49729,7 +49354,7 @@ index 6b48c865..19646a7 100644
        spin_lock_init(&hwsim_radio_lock);
        INIT_LIST_HEAD(&hwsim_radios);
 diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
        spin_lock_init(&hwsim_radio_lock);
        INIT_LIST_HEAD(&hwsim_radios);
 diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c
-index d2a9a08..0cb175d 100644
+index 1a4facd..a2ecbbd 100644
 --- a/drivers/net/wireless/rndis_wlan.c
 +++ b/drivers/net/wireless/rndis_wlan.c
 @@ -1236,7 +1236,7 @@ static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold)
 --- a/drivers/net/wireless/rndis_wlan.c
 +++ b/drivers/net/wireless/rndis_wlan.c
 @@ -1236,7 +1236,7 @@ static int set_rts_threshold(struct usbnet *usbdev, u32 rts_threshold)
@@ -49755,10 +49380,10 @@ index d13f25c..2573994 100644
  
  static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
 diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
  
  static inline struct rt2x00_intf* vif_to_intf(struct ieee80211_vif *vif)
 diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c
-index 8e68f87..c35ba29 100644
+index 66ff364..3ce34f7 100644
 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
 +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c
 +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c
-@@ -250,9 +250,9 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev,
+@@ -224,9 +224,9 @@ static void rt2x00queue_create_tx_descriptor_seq(struct rt2x00_dev *rt2x00dev,
         * sequence counter given by mac80211.
         */
        if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
         * sequence counter given by mac80211.
         */
        if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
@@ -50010,7 +49635,7 @@ index 3f49345..c750d0b 100644
        return __oprofilefs_create_file(root, name,
                                        &atomic_ro_fops, 0444, val);
 diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
        return __oprofilefs_create_file(root, name,
                                        &atomic_ro_fops, 0444, val);
 diff --git a/drivers/oprofile/timer_int.c b/drivers/oprofile/timer_int.c
-index 61be1d9..dec05d7 100644
+index bdef916..88c7dee 100644
 --- a/drivers/oprofile/timer_int.c
 +++ b/drivers/oprofile/timer_int.c
 @@ -93,7 +93,7 @@ static int oprofile_cpu_notify(struct notifier_block *self,
 --- a/drivers/oprofile/timer_int.c
 +++ b/drivers/oprofile/timer_int.c
 @@ -93,7 +93,7 @@ static int oprofile_cpu_notify(struct notifier_block *self,
@@ -50045,7 +49670,7 @@ index 3b47080..6cd05dd 100644
  #endif /* IEEE1284.3 support. */
  
 diff --git a/drivers/pci/hotplug/acpiphp_ibm.c b/drivers/pci/hotplug/acpiphp_ibm.c
  #endif /* IEEE1284.3 support. */
  
 diff --git a/drivers/pci/hotplug/acpiphp_ibm.c b/drivers/pci/hotplug/acpiphp_ibm.c
-index 8dcccff..35d701d 100644
+index 6ca2399..68d866b 100644
 --- a/drivers/pci/hotplug/acpiphp_ibm.c
 +++ b/drivers/pci/hotplug/acpiphp_ibm.c
 @@ -452,7 +452,9 @@ static int __init ibm_acpiphp_init(void)
 --- a/drivers/pci/hotplug/acpiphp_ibm.c
 +++ b/drivers/pci/hotplug/acpiphp_ibm.c
 @@ -452,7 +452,9 @@ static int __init ibm_acpiphp_init(void)
@@ -50060,7 +49685,7 @@ index 8dcccff..35d701d 100644
  
        return retval;
 diff --git a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c
  
        return retval;
 diff --git a/drivers/pci/hotplug/cpcihp_generic.c b/drivers/pci/hotplug/cpcihp_generic.c
-index 04fcd78..39e83f1 100644
+index 66b7bbe..26bee78 100644
 --- a/drivers/pci/hotplug/cpcihp_generic.c
 +++ b/drivers/pci/hotplug/cpcihp_generic.c
 @@ -73,7 +73,6 @@ static u16 port;
 --- a/drivers/pci/hotplug/cpcihp_generic.c
 +++ b/drivers/pci/hotplug/cpcihp_generic.c
 @@ -73,7 +73,6 @@ static u16 port;
@@ -50091,7 +49716,7 @@ index 04fcd78..39e83f1 100644
  
        status = cpci_hp_register_controller(&generic_hpc);
 diff --git a/drivers/pci/hotplug/cpcihp_zt5550.c b/drivers/pci/hotplug/cpcihp_zt5550.c
  
        status = cpci_hp_register_controller(&generic_hpc);
 diff --git a/drivers/pci/hotplug/cpcihp_zt5550.c b/drivers/pci/hotplug/cpcihp_zt5550.c
-index 6757b3e..d3bad62 100644
+index 7ecf34e..effed62 100644
 --- a/drivers/pci/hotplug/cpcihp_zt5550.c
 +++ b/drivers/pci/hotplug/cpcihp_zt5550.c
 @@ -59,7 +59,6 @@
 --- a/drivers/pci/hotplug/cpcihp_zt5550.c
 +++ b/drivers/pci/hotplug/cpcihp_zt5550.c
 @@ -59,7 +59,6 @@
@@ -50102,7 +49727,7 @@ index 6757b3e..d3bad62 100644
  static struct cpci_hp_controller zt5550_hpc;
  
  /* Primary cPCI bus bridge device */
  static struct cpci_hp_controller zt5550_hpc;
  
  /* Primary cPCI bus bridge device */
-@@ -205,6 +204,10 @@ static int zt5550_hc_disable_irq(void)
+@@ -204,6 +203,10 @@ static int zt5550_hc_disable_irq(void)
        return 0;
  }
  
        return 0;
  }
  
@@ -50113,13 +49738,13 @@ index 6757b3e..d3bad62 100644
  static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
  {
        int status;
  static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
  {
        int status;
-@@ -216,16 +219,17 @@ static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id
+@@ -215,16 +218,17 @@ static int zt5550_hc_init_one (struct pci_dev *pdev, const struct pci_device_id
        dbg("returned from zt5550_hc_config");
  
        memset(&zt5550_hpc, 0, sizeof (struct cpci_hp_controller));
 -      zt5550_hpc_ops.query_enum = zt5550_hc_query_enum;
        zt5550_hpc.ops = &zt5550_hpc_ops;
        dbg("returned from zt5550_hc_config");
  
        memset(&zt5550_hpc, 0, sizeof (struct cpci_hp_controller));
 -      zt5550_hpc_ops.query_enum = zt5550_hc_query_enum;
        zt5550_hpc.ops = &zt5550_hpc_ops;
-       if(!poll) {
+       if (!poll) {
                zt5550_hpc.irq = hc_dev->irq;
                zt5550_hpc.irq_flags = IRQF_SHARED;
                zt5550_hpc.dev_id = hc_dev;
                zt5550_hpc.irq = hc_dev->irq;
                zt5550_hpc.irq_flags = IRQF_SHARED;
                zt5550_hpc.dev_id = hc_dev;
@@ -50136,23 +49761,20 @@ index 6757b3e..d3bad62 100644
                info("using ENUM# polling mode");
        }
 diff --git a/drivers/pci/hotplug/cpqphp_nvram.c b/drivers/pci/hotplug/cpqphp_nvram.c
                info("using ENUM# polling mode");
        }
 diff --git a/drivers/pci/hotplug/cpqphp_nvram.c b/drivers/pci/hotplug/cpqphp_nvram.c
-index 0968a9b..5a00edf 100644
+index 1e08ff8c..3cd145f 100644
 --- a/drivers/pci/hotplug/cpqphp_nvram.c
 +++ b/drivers/pci/hotplug/cpqphp_nvram.c
 --- a/drivers/pci/hotplug/cpqphp_nvram.c
 +++ b/drivers/pci/hotplug/cpqphp_nvram.c
-@@ -427,9 +427,13 @@ static u32 store_HRT (void __iomem *rom_start)
+@@ -425,8 +425,10 @@ static u32 store_HRT (void __iomem *rom_start)
  
  void compaq_nvram_init (void __iomem *rom_start)
  {
  
  void compaq_nvram_init (void __iomem *rom_start)
  {
-+
 +#ifndef CONFIG_PAX_KERNEXEC
 +#ifndef CONFIG_PAX_KERNEXEC
-       if (rom_start) {
+       if (rom_start)
                compaq_int15_entry_point = (rom_start + ROM_INT15_PHY_ADDR - ROM_PHY_ADDR);
                compaq_int15_entry_point = (rom_start + ROM_INT15_PHY_ADDR - ROM_PHY_ADDR);
-       }
 +#endif
 +#endif
-+
        dbg("int15 entry  = %p\n", compaq_int15_entry_point);
  
        dbg("int15 entry  = %p\n", compaq_int15_entry_point);
  
-       /* initialize our int15 lock */
 diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c
 index 56d8486..f26113f 100644
 --- a/drivers/pci/hotplug/pci_hotplug_core.c
 diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c
 index 56d8486..f26113f 100644
 --- a/drivers/pci/hotplug/pci_hotplug_core.c
@@ -50184,10 +49806,10 @@ index 07aa722..84514b4 100644
        int retval = -ENOMEM;
  
 diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
        int retval = -ENOMEM;
  
 diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
-index 5a40516..136d5a7 100644
+index 084587d..4a8f9df 100644
 --- a/drivers/pci/msi.c
 +++ b/drivers/pci/msi.c
 --- a/drivers/pci/msi.c
 +++ b/drivers/pci/msi.c
-@@ -507,8 +507,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev)
+@@ -488,8 +488,8 @@ static int populate_msi_sysfs(struct pci_dev *pdev)
  {
        struct attribute **msi_attrs;
        struct attribute *msi_attr;
  {
        struct attribute **msi_attrs;
        struct attribute *msi_attr;
@@ -50198,7 +49820,7 @@ index 5a40516..136d5a7 100644
        const struct attribute_group **msi_irq_groups;
        struct msi_desc *entry;
        int ret = -ENOMEM;
        const struct attribute_group **msi_irq_groups;
        struct msi_desc *entry;
        int ret = -ENOMEM;
-@@ -568,7 +568,7 @@ error_attrs:
+@@ -549,7 +549,7 @@ error_attrs:
        count = 0;
        msi_attr = msi_attrs[count];
        while (msi_attr) {
        count = 0;
        msi_attr = msi_attrs[count];
        while (msi_attr) {
@@ -50208,10 +49830,10 @@ index 5a40516..136d5a7 100644
                kfree(msi_dev_attr);
                ++count;
 diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
                kfree(msi_dev_attr);
                ++count;
 diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
-index 6d04771..4126004 100644
+index 2c6643f..3a6d8e0 100644
 --- a/drivers/pci/pci-sysfs.c
 +++ b/drivers/pci/pci-sysfs.c
 --- a/drivers/pci/pci-sysfs.c
 +++ b/drivers/pci/pci-sysfs.c
-@@ -1134,7 +1134,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
+@@ -1133,7 +1133,7 @@ static int pci_create_attr(struct pci_dev *pdev, int num, int write_combine)
  {
        /* allocate attribute structure, piggyback attribute name */
        int name_len = write_combine ? 13 : 10;
  {
        /* allocate attribute structure, piggyback attribute name */
        int name_len = write_combine ? 13 : 10;
@@ -50220,7 +49842,7 @@ index 6d04771..4126004 100644
        int retval;
  
        res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC);
        int retval;
  
        res_attr = kzalloc(sizeof(*res_attr) + name_len, GFP_ATOMIC);
-@@ -1311,7 +1311,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor
+@@ -1310,7 +1310,7 @@ static struct device_attribute reset_attr = __ATTR(reset, 0200, NULL, reset_stor
  static int pci_create_capabilities_sysfs(struct pci_dev *dev)
  {
        int retval;
  static int pci_create_capabilities_sysfs(struct pci_dev *dev)
  {
        int retval;
@@ -50229,7 +49851,7 @@ index 6d04771..4126004 100644
  
        /* If the device has VPD, try to expose it in sysfs. */
        if (dev->vpd) {
  
        /* If the device has VPD, try to expose it in sysfs. */
        if (dev->vpd) {
-@@ -1358,7 +1358,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
+@@ -1357,7 +1357,7 @@ int __must_check pci_create_sysfs_dev_files(struct pci_dev *pdev)
  {
        int retval;
        int rom_size = 0;
  {
        int retval;
        int rom_size = 0;
@@ -50239,10 +49861,10 @@ index 6d04771..4126004 100644
        if (!sysfs_initialized)
                return -EACCES;
 diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
        if (!sysfs_initialized)
                return -EACCES;
 diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
-index 0601890..dc15007 100644
+index 4a3902d..7f1fc42 100644
 --- a/drivers/pci/pci.h
 +++ b/drivers/pci/pci.h
 --- a/drivers/pci/pci.h
 +++ b/drivers/pci/pci.h
-@@ -91,7 +91,7 @@ struct pci_vpd_ops {
+@@ -93,7 +93,7 @@ struct pci_vpd_ops {
  struct pci_vpd {
        unsigned int len;
        const struct pci_vpd_ops *ops;
  struct pci_vpd {
        unsigned int len;
        const struct pci_vpd_ops *ops;
@@ -50269,10 +49891,10 @@ index e1e7026..d28dd33 100644
  #define ASPM_STATE_ALL                (ASPM_STATE_L0S | ASPM_STATE_L1)
  
 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
  #define ASPM_STATE_ALL                (ASPM_STATE_L0S | ASPM_STATE_L1)
  
 diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
-index 4170113..7cc5339 100644
+index c8ca98c..b1bc005 100644
 --- a/drivers/pci/probe.c
 +++ b/drivers/pci/probe.c
 --- a/drivers/pci/probe.c
 +++ b/drivers/pci/probe.c
-@@ -176,7 +176,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
+@@ -177,7 +177,7 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type,
        struct pci_bus_region region, inverted_region;
        bool bar_too_big = false, bar_too_high = false, bar_invalid = false;
  
        struct pci_bus_region region, inverted_region;
        bool bar_too_big = false, bar_too_high = false, bar_invalid = false;
  
@@ -50471,7 +50093,7 @@ index 26ad9ff..7c52909 100644
  static ssize_t sony_nc_smart_conn_store(struct device *dev,
                struct device_attribute *attr,
 diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
  static ssize_t sony_nc_smart_conn_store(struct device *dev,
                struct device_attribute *attr,
 diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
-index 3bbc6eb..7760460 100644
+index cf0f893..5955997 100644
 --- a/drivers/platform/x86/thinkpad_acpi.c
 +++ b/drivers/platform/x86/thinkpad_acpi.c
 @@ -2094,7 +2094,7 @@ static int hotkey_mask_get(void)
 --- a/drivers/platform/x86/thinkpad_acpi.c
 +++ b/drivers/platform/x86/thinkpad_acpi.c
 @@ -2094,7 +2094,7 @@ static int hotkey_mask_get(void)
@@ -50600,7 +50222,7 @@ index cc439fd..8fa30df 100644
  
  #endif /* CONFIG_SYSFS */
 diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
  
  #endif /* CONFIG_SYSFS */
 diff --git a/drivers/power/power_supply_core.c b/drivers/power/power_supply_core.c
-index 078afd6..fbac9da 100644
+index 694e8cd..9f03483 100644
 --- a/drivers/power/power_supply_core.c
 +++ b/drivers/power/power_supply_core.c
 @@ -28,7 +28,10 @@ EXPORT_SYMBOL_GPL(power_supply_class);
 --- a/drivers/power/power_supply_core.c
 +++ b/drivers/power/power_supply_core.c
 @@ -28,7 +28,10 @@ EXPORT_SYMBOL_GPL(power_supply_class);
@@ -50615,7 +50237,7 @@ index 078afd6..fbac9da 100644
  
  static bool __power_supply_is_supplied_by(struct power_supply *supplier,
                                         struct power_supply *supply)
  
  static bool __power_supply_is_supplied_by(struct power_supply *supplier,
                                         struct power_supply *supply)
-@@ -640,7 +643,7 @@ static int __init power_supply_class_init(void)
+@@ -637,7 +640,7 @@ static int __init power_supply_class_init(void)
                return PTR_ERR(power_supply_class);
  
        power_supply_class->dev_uevent = power_supply_uevent;
                return PTR_ERR(power_supply_class);
  
        power_supply_class->dev_uevent = power_supply_uevent;
@@ -50625,10 +50247,10 @@ index 078afd6..fbac9da 100644
        return 0;
  }
 diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c
        return 0;
  }
 diff --git a/drivers/power/power_supply_sysfs.c b/drivers/power/power_supply_sysfs.c
-index 750a202..99c8f4b 100644
+index 62653f5..d0bb485 100644
 --- a/drivers/power/power_supply_sysfs.c
 +++ b/drivers/power/power_supply_sysfs.c
 --- a/drivers/power/power_supply_sysfs.c
 +++ b/drivers/power/power_supply_sysfs.c
-@@ -234,17 +234,15 @@ static struct attribute_group power_supply_attr_group = {
+@@ -238,17 +238,15 @@ static struct attribute_group power_supply_attr_group = {
        .is_visible = power_supply_attr_is_visible,
  };
  
        .is_visible = power_supply_attr_is_visible,
  };
  
@@ -50864,10 +50486,10 @@ index 302e626..12579af 100644
                da->attr.name = info->pin_config[i].name;
                da->attr.mode = 0644;
 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
                da->attr.name = info->pin_config[i].name;
                da->attr.mode = 0644;
 diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
-index a3c3785..c901e3a 100644
+index cd87c0c..715ecbe 100644
 --- a/drivers/regulator/core.c
 +++ b/drivers/regulator/core.c
 --- a/drivers/regulator/core.c
 +++ b/drivers/regulator/core.c
-@@ -3481,7 +3481,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+@@ -3567,7 +3567,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
  {
        const struct regulation_constraints *constraints = NULL;
        const struct regulator_init_data *init_data;
  {
        const struct regulation_constraints *constraints = NULL;
        const struct regulator_init_data *init_data;
@@ -50876,8 +50498,8 @@ index a3c3785..c901e3a 100644
        struct regulator_dev *rdev;
        struct device *dev;
        int ret, i;
        struct regulator_dev *rdev;
        struct device *dev;
        int ret, i;
-@@ -3551,7 +3551,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
-       rdev->dev.of_node = of_node_get(config->of_node);
+@@ -3641,7 +3641,7 @@ regulator_register(const struct regulator_desc *regulator_desc,
+       rdev->dev.class = &regulator_class;
        rdev->dev.parent = dev;
        dev_set_name(&rdev->dev, "regulator.%d",
 -                   atomic_inc_return(&regulator_no) - 1);
        rdev->dev.parent = dev;
        dev_set_name(&rdev->dev, "regulator.%d",
 -                   atomic_inc_return(&regulator_no) - 1);
@@ -50886,7 +50508,7 @@ index a3c3785..c901e3a 100644
        if (ret != 0) {
                put_device(&rdev->dev);
 diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c
        if (ret != 0) {
                put_device(&rdev->dev);
 diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c
-index 2fc4111..6aa88ca 100644
+index 7eee2ca..4024513 100644
 --- a/drivers/regulator/max8660.c
 +++ b/drivers/regulator/max8660.c
 @@ -424,8 +424,10 @@ static int max8660_probe(struct i2c_client *client,
 --- a/drivers/regulator/max8660.c
 +++ b/drivers/regulator/max8660.c
 @@ -424,8 +424,10 @@ static int max8660_probe(struct i2c_client *client,
@@ -50922,24 +50544,24 @@ index dbedf17..18ff6b7 100644
  
        if (pdata) {
 diff --git a/drivers/regulator/mc13892-regulator.c b/drivers/regulator/mc13892-regulator.c
  
        if (pdata) {
 diff --git a/drivers/regulator/mc13892-regulator.c b/drivers/regulator/mc13892-regulator.c
-index f374fa5..26f0683 100644
+index 793b662..85f74cd 100644
 --- a/drivers/regulator/mc13892-regulator.c
 +++ b/drivers/regulator/mc13892-regulator.c
 --- a/drivers/regulator/mc13892-regulator.c
 +++ b/drivers/regulator/mc13892-regulator.c
-@@ -582,10 +582,12 @@ static int mc13892_regulator_probe(struct platform_device *pdev)
-       }
+@@ -584,10 +584,12 @@ static int mc13892_regulator_probe(struct platform_device *pdev)
        mc13xxx_unlock(mc13892);
  
        mc13xxx_unlock(mc13892);
  
--      mc13892_regulators[MC13892_VCAM].desc.ops->set_mode
+       /* update mc13892_vcam ops */
 +      pax_open_kernel();
 +      pax_open_kernel();
-+      *(void **)&mc13892_regulators[MC13892_VCAM].desc.ops->set_mode
-               = mc13892_vcam_set_mode;
--      mc13892_regulators[MC13892_VCAM].desc.ops->get_mode
-+      *(void **)&mc13892_regulators[MC13892_VCAM].desc.ops->get_mode
-               = mc13892_vcam_get_mode;
+       memcpy(&mc13892_vcam_ops, mc13892_regulators[MC13892_VCAM].desc.ops,
+                                               sizeof(struct regulator_ops));
+-      mc13892_vcam_ops.set_mode = mc13892_vcam_set_mode,
+-      mc13892_vcam_ops.get_mode = mc13892_vcam_get_mode,
++      *(void **)&mc13892_vcam_ops.set_mode = mc13892_vcam_set_mode,
++      *(void **)&mc13892_vcam_ops.get_mode = mc13892_vcam_get_mode,
 +      pax_close_kernel();
 +      pax_close_kernel();
+       mc13892_regulators[MC13892_VCAM].desc.ops = &mc13892_vcam_ops;
  
        mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators,
  
        mc13xxx_data = mc13xxx_parse_regulators_dt(pdev, mc13892_regulators,
-                                       ARRAY_SIZE(mc13892_regulators));
 diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
 index 5b2e761..c8c8a4a 100644
 --- a/drivers/rtc/rtc-cmos.c
 diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c
 index 5b2e761..c8c8a4a 100644
 --- a/drivers/rtc/rtc-cmos.c
@@ -50977,7 +50599,7 @@ index d049393..bb20be0 100644
  
        case RTC_PIE_ON:
 diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
  
        case RTC_PIE_ON:
 diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
-index f03d5ba..8325bf6 100644
+index bb43cf7..ee4d274 100644
 --- a/drivers/rtc/rtc-ds1307.c
 +++ b/drivers/rtc/rtc-ds1307.c
 @@ -107,7 +107,7 @@ struct ds1307 {
 --- a/drivers/rtc/rtc-ds1307.c
 +++ b/drivers/rtc/rtc-ds1307.c
 @@ -107,7 +107,7 @@ struct ds1307 {
@@ -51199,7 +50821,7 @@ index 6de80e3..a11e0ac 100644
  
        /* These three are default values which can be overridden */
 diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
  
        /* These three are default values which can be overridden */
 diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c
-index 6b35d0d..2880305 100644
+index cef5d49..01e280e 100644
 --- a/drivers/scsi/hpsa.c
 +++ b/drivers/scsi/hpsa.c
 @@ -701,10 +701,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q)
 --- a/drivers/scsi/hpsa.c
 +++ b/drivers/scsi/hpsa.c
 @@ -701,10 +701,10 @@ static inline u32 next_command(struct ctlr_info *h, u8 q)
@@ -51254,7 +50876,7 @@ index 6b35d0d..2880305 100644
                (h->interrupts_enabled == 0);
  }
  
                (h->interrupts_enabled == 0);
  }
  
-@@ -6458,7 +6458,7 @@ static int hpsa_pci_init(struct ctlr_info *h)
+@@ -6445,7 +6445,7 @@ static int hpsa_pci_init(struct ctlr_info *h)
        if (prod_index < 0)
                return -ENODEV;
        h->product_name = products[prod_index].product_name;
        if (prod_index < 0)
                return -ENODEV;
        h->product_name = products[prod_index].product_name;
@@ -51263,7 +50885,7 @@ index 6b35d0d..2880305 100644
  
        pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S |
                               PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
  
        pci_disable_link_state(h->pdev, PCIE_LINK_STATE_L0S |
                               PCIE_LINK_STATE_L1 | PCIE_LINK_STATE_CLKPM);
-@@ -6780,7 +6780,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
+@@ -6790,7 +6790,7 @@ static void controller_lockup_detected(struct ctlr_info *h)
        unsigned long flags;
        u32 lockup_detected;
  
        unsigned long flags;
        u32 lockup_detected;
  
@@ -51272,7 +50894,7 @@ index 6b35d0d..2880305 100644
        spin_lock_irqsave(&h->lock, flags);
        lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET);
        if (!lockup_detected) {
        spin_lock_irqsave(&h->lock, flags);
        lockup_detected = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET);
        if (!lockup_detected) {
-@@ -7027,7 +7027,7 @@ reinit_after_soft_reset:
+@@ -7037,7 +7037,7 @@ reinit_after_soft_reset:
        }
  
        /* make sure the board interrupts are off */
        }
  
        /* make sure the board interrupts are off */
@@ -51281,7 +50903,7 @@ index 6b35d0d..2880305 100644
  
        if (hpsa_request_irq(h, do_hpsa_intr_msi, do_hpsa_intr_intx))
                goto clean2;
  
        if (hpsa_request_irq(h, do_hpsa_intr_msi, do_hpsa_intr_intx))
                goto clean2;
-@@ -7062,7 +7062,7 @@ reinit_after_soft_reset:
+@@ -7072,7 +7072,7 @@ reinit_after_soft_reset:
                 * fake ones to scoop up any residual completions.
                 */
                spin_lock_irqsave(&h->lock, flags);
                 * fake ones to scoop up any residual completions.
                 */
                spin_lock_irqsave(&h->lock, flags);
@@ -51290,7 +50912,7 @@ index 6b35d0d..2880305 100644
                spin_unlock_irqrestore(&h->lock, flags);
                free_irqs(h);
                rc = hpsa_request_irq(h, hpsa_msix_discard_completions,
                spin_unlock_irqrestore(&h->lock, flags);
                free_irqs(h);
                rc = hpsa_request_irq(h, hpsa_msix_discard_completions,
-@@ -7081,9 +7081,9 @@ reinit_after_soft_reset:
+@@ -7091,9 +7091,9 @@ reinit_after_soft_reset:
                dev_info(&h->pdev->dev, "Board READY.\n");
                dev_info(&h->pdev->dev,
                        "Waiting for stale completions to drain.\n");
                dev_info(&h->pdev->dev, "Board READY.\n");
                dev_info(&h->pdev->dev,
                        "Waiting for stale completions to drain.\n");
@@ -51302,7 +50924,7 @@ index 6b35d0d..2880305 100644
  
                rc = controller_reset_failed(h->cfgtable);
                if (rc)
  
                rc = controller_reset_failed(h->cfgtable);
                if (rc)
-@@ -7109,7 +7109,7 @@ reinit_after_soft_reset:
+@@ -7119,7 +7119,7 @@ reinit_after_soft_reset:
        h->drv_req_rescan = 0;
  
        /* Turn the interrupts on so we can service requests */
        h->drv_req_rescan = 0;
  
        /* Turn the interrupts on so we can service requests */
@@ -51311,7 +50933,7 @@ index 6b35d0d..2880305 100644
  
        hpsa_hba_inquiry(h);
        hpsa_register_scsi(h);  /* hook ourselves into SCSI subsystem */
  
        hpsa_hba_inquiry(h);
        hpsa_register_scsi(h);  /* hook ourselves into SCSI subsystem */
-@@ -7174,7 +7174,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
+@@ -7184,7 +7184,7 @@ static void hpsa_shutdown(struct pci_dev *pdev)
         * To write all data in the battery backed cache to disks
         */
        hpsa_flush_cache(h);
         * To write all data in the battery backed cache to disks
         */
        hpsa_flush_cache(h);
@@ -51320,7 +50942,7 @@ index 6b35d0d..2880305 100644
        hpsa_free_irqs_and_disable_msix(h);
  }
  
        hpsa_free_irqs_and_disable_msix(h);
  }
  
-@@ -7292,7 +7292,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -7302,7 +7302,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
                                CFGTBL_Trans_enable_directed_msix |
                        (trans_support & (CFGTBL_Trans_io_accel1 |
                                CFGTBL_Trans_io_accel2));
                                CFGTBL_Trans_enable_directed_msix |
                        (trans_support & (CFGTBL_Trans_io_accel1 |
                                CFGTBL_Trans_io_accel2));
@@ -51329,7 +50951,7 @@ index 6b35d0d..2880305 100644
  
        /* This is a bit complicated.  There are 8 registers on
         * the controller which we write to to tell it 8 different
  
        /* This is a bit complicated.  There are 8 registers on
         * the controller which we write to to tell it 8 different
-@@ -7334,7 +7334,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -7344,7 +7344,7 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
         * perform the superfluous readl() after each command submission.
         */
        if (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2))
         * perform the superfluous readl() after each command submission.
         */
        if (trans_support & (CFGTBL_Trans_io_accel1 | CFGTBL_Trans_io_accel2))
@@ -51338,7 +50960,7 @@ index 6b35d0d..2880305 100644
  
        /* Controller spec: zero out this buffer. */
        for (i = 0; i < h->nreply_queues; i++)
  
        /* Controller spec: zero out this buffer. */
        for (i = 0; i < h->nreply_queues; i++)
-@@ -7364,12 +7364,12 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
+@@ -7374,12 +7374,12 @@ static void hpsa_enter_performant_mode(struct ctlr_info *h, u32 trans_support)
         * enable outbound interrupt coalescing in accelerator mode;
         */
        if (trans_support & CFGTBL_Trans_io_accel1) {
         * enable outbound interrupt coalescing in accelerator mode;
         */
        if (trans_support & CFGTBL_Trans_io_accel1) {
@@ -51627,7 +51249,7 @@ index 434e903..5a4a79b 100644
        struct dentry *idiag_root;
        struct dentry *idiag_pci_cfg;
 diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
        struct dentry *idiag_root;
        struct dentry *idiag_pci_cfg;
 diff --git a/drivers/scsi/lpfc/lpfc_debugfs.c b/drivers/scsi/lpfc/lpfc_debugfs.c
-index b0aedce..89c6ca6 100644
+index 786a2af..562c6a2 100644
 --- a/drivers/scsi/lpfc/lpfc_debugfs.c
 +++ b/drivers/scsi/lpfc/lpfc_debugfs.c
 @@ -106,7 +106,7 @@ MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc,
 --- a/drivers/scsi/lpfc/lpfc_debugfs.c
 +++ b/drivers/scsi/lpfc/lpfc_debugfs.c
 @@ -106,7 +106,7 @@ MODULE_PARM_DESC(lpfc_debugfs_mask_disc_trc,
@@ -51710,10 +51332,10 @@ index b0aedce..89c6ca6 100644
        snprintf(name, sizeof(name), "discovery_trace");
        vport->debug_disc_trc =
 diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
        snprintf(name, sizeof(name), "discovery_trace");
        vport->debug_disc_trc =
 diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
-index a5769a9..718ecc7 100644
+index 0b2c53a..aec2b45 100644
 --- a/drivers/scsi/lpfc/lpfc_init.c
 +++ b/drivers/scsi/lpfc/lpfc_init.c
 --- a/drivers/scsi/lpfc/lpfc_init.c
 +++ b/drivers/scsi/lpfc/lpfc_init.c
-@@ -11299,8 +11299,10 @@ lpfc_init(void)
+@@ -11290,8 +11290,10 @@ lpfc_init(void)
                        "misc_register returned with status %d", error);
  
        if (lpfc_enable_npiv) {
                        "misc_register returned with status %d", error);
  
        if (lpfc_enable_npiv) {
@@ -51727,19 +51349,19 @@ index a5769a9..718ecc7 100644
        lpfc_transport_template =
                                fc_attach_transport(&lpfc_transport_functions);
 diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
        lpfc_transport_template =
                                fc_attach_transport(&lpfc_transport_functions);
 diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c
-index 7862c55..5aa65df 100644
+index b99399f..d29dc75 100644
 --- a/drivers/scsi/lpfc/lpfc_scsi.c
 +++ b/drivers/scsi/lpfc/lpfc_scsi.c
 --- a/drivers/scsi/lpfc/lpfc_scsi.c
 +++ b/drivers/scsi/lpfc/lpfc_scsi.c
-@@ -382,7 +382,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
-       uint32_t evt_posted;
+@@ -383,7 +383,7 @@ lpfc_rampdown_queue_depth(struct lpfc_hba *phba)
+       unsigned long expires;
  
        spin_lock_irqsave(&phba->hbalock, flags);
 -      atomic_inc(&phba->num_rsrc_err);
 +      atomic_inc_unchecked(&phba->num_rsrc_err);
        phba->last_rsrc_error_time = jiffies;
  
  
        spin_lock_irqsave(&phba->hbalock, flags);
 -      atomic_inc(&phba->num_rsrc_err);
 +      atomic_inc_unchecked(&phba->num_rsrc_err);
        phba->last_rsrc_error_time = jiffies;
  
-       if ((phba->last_ramp_down_time + QUEUE_RAMP_DOWN_INTERVAL) > jiffies) {
-@@ -423,8 +423,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
+       expires = phba->last_ramp_down_time + QUEUE_RAMP_DOWN_INTERVAL;
+@@ -425,8 +425,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
        unsigned long num_rsrc_err, num_cmd_success;
        int i;
  
        unsigned long num_rsrc_err, num_cmd_success;
        int i;
  
@@ -51750,7 +51372,7 @@ index 7862c55..5aa65df 100644
  
        /*
         * The error and success command counters are global per
  
        /*
         * The error and success command counters are global per
-@@ -452,8 +452,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
+@@ -454,8 +454,8 @@ lpfc_ramp_down_queue_handler(struct lpfc_hba *phba)
                        }
                }
        lpfc_destroy_vport_work_array(phba, vports);
                        }
                }
        lpfc_destroy_vport_work_array(phba, vports);
@@ -51762,10 +51384,10 @@ index 7862c55..5aa65df 100644
  
  /**
 diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
  
  /**
 diff --git a/drivers/scsi/mpt2sas/mpt2sas_scsih.c b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
-index dd46101..ca80eb9 100644
+index c80ed04..e674f01 100644
 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
 +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
 --- a/drivers/scsi/mpt2sas/mpt2sas_scsih.c
 +++ b/drivers/scsi/mpt2sas/mpt2sas_scsih.c
-@@ -1559,7 +1559,7 @@ _scsih_get_resync(struct device *dev)
+@@ -1561,7 +1561,7 @@ _scsih_get_resync(struct device *dev)
  {
        struct scsi_device *sdev = to_scsi_device(dev);
        struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host);
  {
        struct scsi_device *sdev = to_scsi_device(dev);
        struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host);
@@ -51774,7 +51396,7 @@ index dd46101..ca80eb9 100644
        unsigned long flags;
        Mpi2RaidVolPage0_t vol_pg0;
        Mpi2ConfigReply_t mpi_reply;
        unsigned long flags;
        Mpi2RaidVolPage0_t vol_pg0;
        Mpi2ConfigReply_t mpi_reply;
-@@ -1611,7 +1611,7 @@ _scsih_get_state(struct device *dev)
+@@ -1613,7 +1613,7 @@ _scsih_get_state(struct device *dev)
  {
        struct scsi_device *sdev = to_scsi_device(dev);
        struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host);
  {
        struct scsi_device *sdev = to_scsi_device(dev);
        struct MPT2SAS_ADAPTER *ioc = shost_priv(sdev->host);
@@ -51783,7 +51405,7 @@ index dd46101..ca80eb9 100644
        unsigned long flags;
        Mpi2RaidVolPage0_t vol_pg0;
        Mpi2ConfigReply_t mpi_reply;
        unsigned long flags;
        Mpi2RaidVolPage0_t vol_pg0;
        Mpi2ConfigReply_t mpi_reply;
-@@ -6648,7 +6648,7 @@ _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc,
+@@ -6663,7 +6663,7 @@ _scsih_sas_ir_operation_status_event(struct MPT2SAS_ADAPTER *ioc,
        Mpi2EventDataIrOperationStatus_t *event_data =
                (Mpi2EventDataIrOperationStatus_t *)
                fw_event->event_data;
        Mpi2EventDataIrOperationStatus_t *event_data =
                (Mpi2EventDataIrOperationStatus_t *)
                fw_event->event_data;
@@ -51792,7 +51414,7 @@ index dd46101..ca80eb9 100644
        unsigned long flags;
        u16 handle;
  
        unsigned long flags;
        u16 handle;
  
-@@ -7119,7 +7119,7 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc)
+@@ -7134,7 +7134,7 @@ _scsih_scan_for_devices_after_reset(struct MPT2SAS_ADAPTER *ioc)
        u64 sas_address;
        struct _sas_device *sas_device;
        struct _sas_node *expander_device;
        u64 sas_address;
        struct _sas_device *sas_device;
        struct _sas_node *expander_device;
@@ -51802,7 +51424,7 @@ index dd46101..ca80eb9 100644
        unsigned long flags;
  
 diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
        unsigned long flags;
  
 diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c
-index 6f3275d..fa5e6b6 100644
+index bcb64eb..f08cf71 100644
 --- a/drivers/scsi/pmcraid.c
 +++ b/drivers/scsi/pmcraid.c
 @@ -200,8 +200,8 @@ static int pmcraid_slave_alloc(struct scsi_device *scsi_dev)
 --- a/drivers/scsi/pmcraid.c
 +++ b/drivers/scsi/pmcraid.c
 @@ -200,8 +200,8 @@ static int pmcraid_slave_alloc(struct scsi_device *scsi_dev)
@@ -51855,7 +51477,7 @@ index 6f3275d..fa5e6b6 100644
                return;
  
        fw_version = be16_to_cpu(pinstance->inq_data->fw_version);
                return;
  
        fw_version = be16_to_cpu(pinstance->inq_data->fw_version);
-@@ -5322,8 +5322,8 @@ static int pmcraid_init_instance(struct pci_dev *pdev, struct Scsi_Host *host,
+@@ -5312,8 +5312,8 @@ static int pmcraid_init_instance(struct pci_dev *pdev, struct Scsi_Host *host,
        init_waitqueue_head(&pinstance->reset_wait_q);
  
        atomic_set(&pinstance->outstanding_cmds, 0);
        init_waitqueue_head(&pinstance->reset_wait_q);
  
        atomic_set(&pinstance->outstanding_cmds, 0);
@@ -51866,7 +51488,7 @@ index 6f3275d..fa5e6b6 100644
  
        INIT_LIST_HEAD(&pinstance->free_res_q);
        INIT_LIST_HEAD(&pinstance->used_res_q);
  
        INIT_LIST_HEAD(&pinstance->free_res_q);
        INIT_LIST_HEAD(&pinstance->used_res_q);
-@@ -6036,7 +6036,7 @@ static int pmcraid_probe(struct pci_dev *pdev,
+@@ -6026,7 +6026,7 @@ static int pmcraid_probe(struct pci_dev *pdev,
        /* Schedule worker thread to handle CCN and take care of adding and
         * removing devices to OS
         */
        /* Schedule worker thread to handle CCN and take care of adding and
         * removing devices to OS
         */
@@ -51909,10 +51531,10 @@ index e1d150f..6c6df44 100644
        /* To indicate add/delete/modify during CCN */
        u8 change_detected;
 diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
        /* To indicate add/delete/modify during CCN */
        u8 change_detected;
 diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
-index 16fe519..3b1ec82 100644
+index 82b92c4..3178171 100644
 --- a/drivers/scsi/qla2xxx/qla_attr.c
 +++ b/drivers/scsi/qla2xxx/qla_attr.c
 --- a/drivers/scsi/qla2xxx/qla_attr.c
 +++ b/drivers/scsi/qla2xxx/qla_attr.c
-@@ -2188,7 +2188,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable)
+@@ -2192,7 +2192,7 @@ qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable)
        return 0;
  }
  
        return 0;
  }
  
@@ -51921,7 +51543,7 @@ index 16fe519..3b1ec82 100644
  
        .show_host_node_name = 1,
        .show_host_port_name = 1,
  
        .show_host_node_name = 1,
        .show_host_port_name = 1,
-@@ -2236,7 +2236,7 @@ struct fc_function_template qla2xxx_transport_functions = {
+@@ -2240,7 +2240,7 @@ struct fc_function_template qla2xxx_transport_functions = {
        .bsg_timeout = qla24xx_bsg_timeout,
  };
  
        .bsg_timeout = qla24xx_bsg_timeout,
  };
  
@@ -51931,10 +51553,10 @@ index 16fe519..3b1ec82 100644
        .show_host_node_name = 1,
        .show_host_port_name = 1,
 diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
        .show_host_node_name = 1,
        .show_host_port_name = 1,
 diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h
-index d646540..5b13554 100644
+index b1865a7..a7723d3 100644
 --- a/drivers/scsi/qla2xxx/qla_gbl.h
 +++ b/drivers/scsi/qla2xxx/qla_gbl.h
 --- a/drivers/scsi/qla2xxx/qla_gbl.h
 +++ b/drivers/scsi/qla2xxx/qla_gbl.h
-@@ -569,8 +569,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *);
+@@ -571,8 +571,8 @@ extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t);
  struct device_attribute;
  extern struct device_attribute *qla2x00_host_attrs[];
  struct fc_function_template;
  struct device_attribute;
  extern struct device_attribute *qla2x00_host_attrs[];
  struct fc_function_template;
@@ -51946,10 +51568,10 @@ index d646540..5b13554 100644
  extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool);
  extern void qla2x00_init_host_attr(scsi_qla_host_t *);
 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
  extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *, bool);
  extern void qla2x00_init_host_attr(scsi_qla_host_t *);
 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
-index 8252c0e..613adad 100644
+index db3dbd9..2492392 100644
 --- a/drivers/scsi/qla2xxx/qla_os.c
 +++ b/drivers/scsi/qla2xxx/qla_os.c
 --- a/drivers/scsi/qla2xxx/qla_os.c
 +++ b/drivers/scsi/qla2xxx/qla_os.c
-@@ -1493,8 +1493,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
+@@ -1507,8 +1507,10 @@ qla2x00_config_dma_addressing(struct qla_hw_data *ha)
                    !pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) {
                        /* Ok, a 64bit DMA mask is applicable. */
                        ha->flags.enable_64bit_addressing = 1;
                    !pci_set_consistent_dma_mask(ha->pdev, DMA_BIT_MASK(64))) {
                        /* Ok, a 64bit DMA mask is applicable. */
                        ha->flags.enable_64bit_addressing = 1;
@@ -52004,7 +51626,7 @@ index 199fcf7..3c3a918 100644
        ddb_entry->default_relogin_timeout =
                (def_timeout > LOGIN_TOV) && (def_timeout < LOGIN_TOV * 10) ?
 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
        ddb_entry->default_relogin_timeout =
                (def_timeout > LOGIN_TOV) && (def_timeout < LOGIN_TOV * 10) ?
 diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
-index d81f3cc..0093e5b 100644
+index 79c77b4..ef6ec0b 100644
 --- a/drivers/scsi/scsi.c
 +++ b/drivers/scsi/scsi.c
 @@ -645,7 +645,7 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
 --- a/drivers/scsi/scsi.c
 +++ b/drivers/scsi/scsi.c
 @@ -645,7 +645,7 @@ int scsi_dispatch_cmd(struct scsi_cmnd *cmd)
@@ -52017,10 +51639,10 @@ index d81f3cc..0093e5b 100644
        /* check if the device is still usable */
        if (unlikely(cmd->device->sdev_state == SDEV_DEL)) {
 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
        /* check if the device is still usable */
        if (unlikely(cmd->device->sdev_state == SDEV_DEL)) {
 diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
-index 7cb8c73..14561b5 100644
+index 50a6e1a..de5252e 100644
 --- a/drivers/scsi/scsi_lib.c
 +++ b/drivers/scsi/scsi_lib.c
 --- a/drivers/scsi/scsi_lib.c
 +++ b/drivers/scsi/scsi_lib.c
-@@ -1581,7 +1581,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
+@@ -1583,7 +1583,7 @@ static void scsi_kill_request(struct request *req, struct request_queue *q)
        shost = sdev->host;
        scsi_init_cmd_errh(cmd);
        cmd->result = DID_NO_CONNECT << 16;
        shost = sdev->host;
        scsi_init_cmd_errh(cmd);
        cmd->result = DID_NO_CONNECT << 16;
@@ -52029,7 +51651,7 @@ index 7cb8c73..14561b5 100644
  
        /*
         * SCSI request completion path will do scsi_device_unbusy(),
  
        /*
         * SCSI request completion path will do scsi_device_unbusy(),
-@@ -1604,9 +1604,9 @@ static void scsi_softirq_done(struct request *rq)
+@@ -1606,9 +1606,9 @@ static void scsi_softirq_done(struct request *rq)
  
        INIT_LIST_HEAD(&cmd->eh_entry);
  
  
        INIT_LIST_HEAD(&cmd->eh_entry);
  
@@ -52042,7 +51664,7 @@ index 7cb8c73..14561b5 100644
        disposition = scsi_decide_disposition(cmd);
        if (disposition != SUCCESS &&
 diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
        disposition = scsi_decide_disposition(cmd);
        if (disposition != SUCCESS &&
 diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
-index 8b4105a..1f58363 100644
+index f4cb7b3..dfa79c4 100644
 --- a/drivers/scsi/scsi_sysfs.c
 +++ b/drivers/scsi/scsi_sysfs.c
 @@ -805,7 +805,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr,     \
 --- a/drivers/scsi/scsi_sysfs.c
 +++ b/drivers/scsi/scsi_sysfs.c
 @@ -805,7 +805,7 @@ show_iostat_##field(struct device *dev, struct device_attribute *attr,     \
@@ -52157,10 +51779,10 @@ index ae45bd9..c32a586 100644
  
        transport_setup_device(&rport->dev);
 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
  
        transport_setup_device(&rport->dev);
 diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
-index 2c2041c..9d94085 100644
+index cfba74c..415f09b 100644
 --- a/drivers/scsi/sd.c
 +++ b/drivers/scsi/sd.c
 --- a/drivers/scsi/sd.c
 +++ b/drivers/scsi/sd.c
-@@ -3002,7 +3002,7 @@ static int sd_probe(struct device *dev)
+@@ -3022,7 +3022,7 @@ static int sd_probe(struct device *dev)
        sdkp->disk = gd;
        sdkp->index = index;
        atomic_set(&sdkp->openers, 0);
        sdkp->disk = gd;
        sdkp->index = index;
        atomic_set(&sdkp->openers, 0);
@@ -52170,7 +51792,7 @@ index 2c2041c..9d94085 100644
        if (!sdp->request_queue->rq_timeout) {
                if (sdp->type != TYPE_MOD)
 diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
        if (!sdp->request_queue->rq_timeout) {
                if (sdp->type != TYPE_MOD)
 diff --git a/drivers/scsi/sg.c b/drivers/scsi/sg.c
-index 01cf888..59e0475 100644
+index 6035444..c82edd4 100644
 --- a/drivers/scsi/sg.c
 +++ b/drivers/scsi/sg.c
 @@ -1138,7 +1138,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
 --- a/drivers/scsi/sg.c
 +++ b/drivers/scsi/sg.c
 @@ -1138,7 +1138,7 @@ sg_ioctl(struct file *filp, unsigned int cmd_in, unsigned long arg)
@@ -52196,10 +51818,10 @@ index 11a5043..e36f04c 100644
        .read = fuse_read,
  };
 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
        .read = fuse_read,
  };
 diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
-index ca935df..ae8a3dc 100644
+index 50f20f2..6bd81e0 100644
 --- a/drivers/spi/spi.c
 +++ b/drivers/spi/spi.c
 --- a/drivers/spi/spi.c
 +++ b/drivers/spi/spi.c
-@@ -2210,7 +2210,7 @@ int spi_bus_unlock(struct spi_master *master)
+@@ -2224,7 +2224,7 @@ int spi_bus_unlock(struct spi_master *master)
  EXPORT_SYMBOL_GPL(spi_bus_unlock);
  
  /* portable code must never pass more than 32 bytes */
  EXPORT_SYMBOL_GPL(spi_bus_unlock);
  
  /* portable code must never pass more than 32 bytes */
@@ -52253,10 +51875,10 @@ index 001348c..cfaac8a 100644
  static struct tty_driver *gdm_driver[TTY_MAX_COUNT];
  static struct gdm *gdm_table[TTY_MAX_COUNT][GDM_TTY_MINOR];
 diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
  static struct tty_driver *gdm_driver[TTY_MAX_COUNT];
  static struct gdm *gdm_table[TTY_MAX_COUNT][GDM_TTY_MINOR];
 diff --git a/drivers/staging/imx-drm/imx-drm-core.c b/drivers/staging/imx-drm/imx-drm-core.c
-index 6b22106..6c6e641 100644
+index 9cb222e..8766f26 100644
 --- a/drivers/staging/imx-drm/imx-drm-core.c
 +++ b/drivers/staging/imx-drm/imx-drm-core.c
 --- a/drivers/staging/imx-drm/imx-drm-core.c
 +++ b/drivers/staging/imx-drm/imx-drm-core.c
-@@ -355,7 +355,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
+@@ -357,7 +357,7 @@ int imx_drm_add_crtc(struct drm_device *drm, struct drm_crtc *crtc,
        if (imxdrm->pipes >= MAX_CRTC)
                return -EINVAL;
  
        if (imxdrm->pipes >= MAX_CRTC)
                return -EINVAL;
  
@@ -52318,7 +51940,7 @@ index 503b2d7..c918745 100644
        /* receive the result: */
        ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
 diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c
        /* receive the result: */
        ret = usb_control_msg(usbdev, usb_rcvctrlpipe(usbdev, 0), 0x67,
 diff --git a/drivers/staging/lustre/lnet/selftest/brw_test.c b/drivers/staging/lustre/lnet/selftest/brw_test.c
-index bcce919..f30fcf9 100644
+index a94f336..6a1924d 100644
 --- a/drivers/staging/lustre/lnet/selftest/brw_test.c
 +++ b/drivers/staging/lustre/lnet/selftest/brw_test.c
 @@ -488,13 +488,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
 --- a/drivers/staging/lustre/lnet/selftest/brw_test.c
 +++ b/drivers/staging/lustre/lnet/selftest/brw_test.c
 @@ -488,13 +488,11 @@ brw_server_handle(struct srpc_server_rpc *rpc)
@@ -52341,10 +51963,10 @@ index bcce919..f30fcf9 100644
  
  srpc_service_t brw_test_service;
 diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c
  
  srpc_service_t brw_test_service;
 diff --git a/drivers/staging/lustre/lnet/selftest/framework.c b/drivers/staging/lustre/lnet/selftest/framework.c
-index 7e83dff..1f9a545 100644
+index df04ab7..1deb1ac 100644
 --- a/drivers/staging/lustre/lnet/selftest/framework.c
 +++ b/drivers/staging/lustre/lnet/selftest/framework.c
 --- a/drivers/staging/lustre/lnet/selftest/framework.c
 +++ b/drivers/staging/lustre/lnet/selftest/framework.c
-@@ -1633,12 +1633,10 @@ static srpc_service_t sfw_services[] =
+@@ -1632,12 +1632,10 @@ static srpc_service_t sfw_services[] = {
  
  extern sfw_test_client_ops_t ping_test_client;
  extern srpc_service_t ping_test_service;
  
  extern sfw_test_client_ops_t ping_test_client;
  extern srpc_service_t ping_test_service;
@@ -52357,7 +51979,7 @@ index 7e83dff..1f9a545 100644
  extern void brw_init_test_service(void);
  
  
  extern void brw_init_test_service(void);
  
  
-@@ -1682,12 +1680,10 @@ sfw_startup (void)
+@@ -1681,12 +1679,10 @@ sfw_startup (void)
        INIT_LIST_HEAD(&sfw_data.fw_zombie_rpcs);
        INIT_LIST_HEAD(&sfw_data.fw_zombie_sessions);
  
        INIT_LIST_HEAD(&sfw_data.fw_zombie_rpcs);
        INIT_LIST_HEAD(&sfw_data.fw_zombie_sessions);
  
@@ -52396,10 +52018,10 @@ index 750cac4..e4d751f 100644
  srpc_service_t ping_test_service;
  void ping_init_test_service(void)
 diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h
  srpc_service_t ping_test_service;
  void ping_init_test_service(void)
 diff --git a/drivers/staging/lustre/lustre/include/lustre_dlm.h b/drivers/staging/lustre/lustre/include/lustre_dlm.h
-index 30b1812f..9e5bd0b 100644
+index 14ac46f..eca2c16 100644
 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h
 +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h
 --- a/drivers/staging/lustre/lustre/include/lustre_dlm.h
 +++ b/drivers/staging/lustre/lustre/include/lustre_dlm.h
-@@ -1141,7 +1141,7 @@ struct ldlm_callback_suite {
+@@ -1139,7 +1139,7 @@ struct ldlm_callback_suite {
        ldlm_completion_callback lcs_completion;
        ldlm_blocking_callback   lcs_blocking;
        ldlm_glimpse_callback    lcs_glimpse;
        ldlm_completion_callback lcs_completion;
        ldlm_blocking_callback   lcs_blocking;
        ldlm_glimpse_callback    lcs_glimpse;
@@ -52409,10 +52031,10 @@ index 30b1812f..9e5bd0b 100644
  /* ldlm_lockd.c */
  int ldlm_del_waiting_lock(struct ldlm_lock *lock);
 diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h
  /* ldlm_lockd.c */
  int ldlm_del_waiting_lock(struct ldlm_lock *lock);
 diff --git a/drivers/staging/lustre/lustre/include/obd.h b/drivers/staging/lustre/lustre/include/obd.h
-index 489bdd3..65058081 100644
+index 2a88b80..62e7e5f 100644
 --- a/drivers/staging/lustre/lustre/include/obd.h
 +++ b/drivers/staging/lustre/lustre/include/obd.h
 --- a/drivers/staging/lustre/lustre/include/obd.h
 +++ b/drivers/staging/lustre/lustre/include/obd.h
-@@ -1438,7 +1438,7 @@ struct md_ops {
+@@ -1362,7 +1362,7 @@ struct md_ops {
         * lprocfs_alloc_md_stats() in obdclass/lprocfs_status.c. Also, add a
         * wrapper function in include/linux/obd_class.h.
         */
         * lprocfs_alloc_md_stats() in obdclass/lprocfs_status.c. Also, add a
         * wrapper function in include/linux/obd_class.h.
         */
@@ -52435,10 +52057,10 @@ index b798daa..b28ca8f 100644
        CDEBUG(D_DLMTRACE, "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
               *flags, new->l_policy_data.l_flock.owner,
 diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
        CDEBUG(D_DLMTRACE, "flags %#llx owner %llu pid %u mode %u start %llu end %llu\n",
               *flags, new->l_policy_data.l_flock.owner,
 diff --git a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
-index 13a9266..3439390 100644
+index bbe2c68..c6b4275 100644
 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
 +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
 --- a/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
 +++ b/drivers/staging/lustre/lustre/libcfs/linux/linux-proc.c
-@@ -235,7 +235,7 @@ int proc_console_max_delay_cs(struct ctl_table *table, int write,
+@@ -236,7 +236,7 @@ int proc_console_max_delay_cs(struct ctl_table *table, int write,
                              void __user *buffer, size_t *lenp, loff_t *ppos)
  {
        int rc, max_delay_cs;
                              void __user *buffer, size_t *lenp, loff_t *ppos)
  {
        int rc, max_delay_cs;
@@ -52447,7 +52069,7 @@ index 13a9266..3439390 100644
        long d;
  
        dummy.data = &max_delay_cs;
        long d;
  
        dummy.data = &max_delay_cs;
-@@ -267,7 +267,7 @@ int proc_console_min_delay_cs(struct ctl_table *table, int write,
+@@ -268,7 +268,7 @@ int proc_console_min_delay_cs(struct ctl_table *table, int write,
                              void __user *buffer, size_t *lenp, loff_t *ppos)
  {
        int rc, min_delay_cs;
                              void __user *buffer, size_t *lenp, loff_t *ppos)
  {
        int rc, min_delay_cs;
@@ -52456,7 +52078,7 @@ index 13a9266..3439390 100644
        long d;
  
        dummy.data = &min_delay_cs;
        long d;
  
        dummy.data = &min_delay_cs;
-@@ -299,7 +299,7 @@ int proc_console_backoff(struct ctl_table *table, int write,
+@@ -300,7 +300,7 @@ int proc_console_backoff(struct ctl_table *table, int write,
                         void __user *buffer, size_t *lenp, loff_t *ppos)
  {
        int rc, backoff;
                         void __user *buffer, size_t *lenp, loff_t *ppos)
  {
        int rc, backoff;
@@ -52466,10 +52088,10 @@ index 13a9266..3439390 100644
        dummy.data = &backoff;
        dummy.proc_handler = &proc_dointvec;
 diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c
        dummy.data = &backoff;
        dummy.proc_handler = &proc_dointvec;
 diff --git a/drivers/staging/lustre/lustre/libcfs/module.c b/drivers/staging/lustre/lustre/libcfs/module.c
-index 3396858..c0bd996 100644
+index 2c4fc74..b04ca79 100644
 --- a/drivers/staging/lustre/lustre/libcfs/module.c
 +++ b/drivers/staging/lustre/lustre/libcfs/module.c
 --- a/drivers/staging/lustre/lustre/libcfs/module.c
 +++ b/drivers/staging/lustre/lustre/libcfs/module.c
-@@ -314,11 +314,11 @@ out:
+@@ -315,11 +315,11 @@ out:
  
  
  struct cfs_psdev_ops libcfs_psdev_ops = {
  
  
  struct cfs_psdev_ops libcfs_psdev_ops = {
@@ -52487,10 +52109,10 @@ index 3396858..c0bd996 100644
  
  extern int insert_proc(void);
 diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c
  
  extern int insert_proc(void);
 diff --git a/drivers/staging/lustre/lustre/llite/dir.c b/drivers/staging/lustre/lustre/llite/dir.c
-index efa2faf..03a9836 100644
+index b0bb709..0117c96 100644
 --- a/drivers/staging/lustre/lustre/llite/dir.c
 +++ b/drivers/staging/lustre/lustre/llite/dir.c
 --- a/drivers/staging/lustre/lustre/llite/dir.c
 +++ b/drivers/staging/lustre/lustre/llite/dir.c
-@@ -659,7 +659,7 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump,
+@@ -661,7 +661,7 @@ int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump,
        int mode;
        int err;
  
        int mode;
        int err;
  
@@ -52500,10 +52122,10 @@ index efa2faf..03a9836 100644
                                     strlen(filename), mode, LUSTRE_OPC_MKDIR,
                                     lump);
 diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
                                     strlen(filename), mode, LUSTRE_OPC_MKDIR,
                                     lump);
 diff --git a/drivers/staging/octeon/ethernet-rx.c b/drivers/staging/octeon/ethernet-rx.c
-index a0f4868..139f1fb 100644
+index b2b6c3c..302e4e4 100644
 --- a/drivers/staging/octeon/ethernet-rx.c
 +++ b/drivers/staging/octeon/ethernet-rx.c
 --- a/drivers/staging/octeon/ethernet-rx.c
 +++ b/drivers/staging/octeon/ethernet-rx.c
-@@ -417,11 +417,11 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
+@@ -416,11 +416,11 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
                                /* Increment RX stats for virtual ports */
                                if (work->ipprt >= CVMX_PIP_NUM_INPUT_PORTS) {
  #ifdef CONFIG_64BIT
                                /* Increment RX stats for virtual ports */
                                if (work->ipprt >= CVMX_PIP_NUM_INPUT_PORTS) {
  #ifdef CONFIG_64BIT
@@ -52519,7 +52141,7 @@ index a0f4868..139f1fb 100644
  #endif
                                }
                                netif_receive_skb(skb);
  #endif
                                }
                                netif_receive_skb(skb);
-@@ -432,9 +432,9 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
+@@ -431,9 +431,9 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
                                           dev->name);
                                */
  #ifdef CONFIG_64BIT
                                           dev->name);
                                */
  #ifdef CONFIG_64BIT
@@ -52532,7 +52154,7 @@ index a0f4868..139f1fb 100644
                                dev_kfree_skb_irq(skb);
                        }
 diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
                                dev_kfree_skb_irq(skb);
                        }
 diff --git a/drivers/staging/octeon/ethernet.c b/drivers/staging/octeon/ethernet.c
-index 2aa7235..ba3c205 100644
+index 8f9e3fb..d283fb9 100644
 --- a/drivers/staging/octeon/ethernet.c
 +++ b/drivers/staging/octeon/ethernet.c
 @@ -247,11 +247,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev)
 --- a/drivers/staging/octeon/ethernet.c
 +++ b/drivers/staging/octeon/ethernet.c
 @@ -247,11 +247,11 @@ static struct net_device_stats *cvm_oct_common_get_stats(struct net_device *dev)
@@ -52552,10 +52174,10 @@ index 2aa7235..ba3c205 100644
        }
  
 diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h
        }
  
 diff --git a/drivers/staging/rtl8188eu/include/hal_intf.h b/drivers/staging/rtl8188eu/include/hal_intf.h
-index 56d5c50..a14f4db 100644
+index 9191993..30e9817 100644
 --- a/drivers/staging/rtl8188eu/include/hal_intf.h
 +++ b/drivers/staging/rtl8188eu/include/hal_intf.h
 --- a/drivers/staging/rtl8188eu/include/hal_intf.h
 +++ b/drivers/staging/rtl8188eu/include/hal_intf.h
-@@ -234,7 +234,7 @@ struct hal_ops {
+@@ -225,7 +225,7 @@ struct hal_ops {
  
        void (*hal_notch_filter)(struct adapter *adapter, bool enable);
        void (*hal_reset_security_engine)(struct adapter *adapter);
  
        void (*hal_notch_filter)(struct adapter *adapter, bool enable);
        void (*hal_reset_security_engine)(struct adapter *adapter);
@@ -52565,7 +52187,7 @@ index 56d5c50..a14f4db 100644
  enum rt_eeprom_type {
        EEPROM_93C46,
 diff --git a/drivers/staging/rtl8712/rtl871x_io.h b/drivers/staging/rtl8712/rtl871x_io.h
  enum rt_eeprom_type {
        EEPROM_93C46,
 diff --git a/drivers/staging/rtl8712/rtl871x_io.h b/drivers/staging/rtl8712/rtl871x_io.h
-index dc23395..cf7e9b1 100644
+index 070cc03..6806e37 100644
 --- a/drivers/staging/rtl8712/rtl871x_io.h
 +++ b/drivers/staging/rtl8712/rtl871x_io.h
 @@ -108,7 +108,7 @@ struct     _io_ops {
 --- a/drivers/staging/rtl8712/rtl871x_io.h
 +++ b/drivers/staging/rtl8712/rtl871x_io.h
 @@ -108,7 +108,7 @@ struct     _io_ops {
@@ -52600,27 +52222,27 @@ index 2bf2e2f..84421c9 100644
  /** Register functions (in the bus driver) to get called by visorchipset
   *  whenever a bus or device appears for which this service partition is
 diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c
  /** Register functions (in the bus driver) to get called by visorchipset
   *  whenever a bus or device appears for which this service partition is
 diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c
-index 164136b..7244df5 100644
+index ae0dade..803d53a 100644
 --- a/drivers/staging/vt6655/hostap.c
 +++ b/drivers/staging/vt6655/hostap.c
 --- a/drivers/staging/vt6655/hostap.c
 +++ b/drivers/staging/vt6655/hostap.c
-@@ -68,14 +68,13 @@ static int msglevel = MSG_LEVEL_INFO;
+@@ -65,14 +65,13 @@
   *
   */
  
 +static net_device_ops_no_const apdev_netdev_ops;
 +
   *
   */
  
 +static net_device_ops_no_const apdev_netdev_ops;
 +
- static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked)
+ static int hostap_enable_hostapd(struct vnt_private *pDevice, int rtnl_locked)
  {
  {
-       PSDevice apdev_priv;
+       struct vnt_private *apdev_priv;
        struct net_device *dev = pDevice->dev;
        int ret;
 -      const struct net_device_ops apdev_netdev_ops = {
 -              .ndo_start_xmit         = pDevice->tx_80211,
 -      };
  
        struct net_device *dev = pDevice->dev;
        int ret;
 -      const struct net_device_ops apdev_netdev_ops = {
 -              .ndo_start_xmit         = pDevice->tx_80211,
 -      };
  
-       DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name);
+       pr_debug("%s: Enabling hostapd mode\n", dev->name);
  
  
-@@ -87,6 +86,8 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked)
+@@ -84,6 +83,8 @@ static int hostap_enable_hostapd(struct vnt_private *pDevice, int rtnl_locked)
        *apdev_priv = *pDevice;
        eth_hw_addr_inherit(pDevice->apdev, dev);
  
        *apdev_priv = *pDevice;
        eth_hw_addr_inherit(pDevice->apdev, dev);
  
@@ -52652,10 +52274,10 @@ index e7e9372..161f530 100644
        login->tgt_agt = sbp_target_agent_register(login);
        if (IS_ERR(login->tgt_agt)) {
 diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
        login->tgt_agt = sbp_target_agent_register(login);
        if (IS_ERR(login->tgt_agt)) {
 diff --git a/drivers/target/target_core_device.c b/drivers/target/target_core_device.c
-index 15a1c13..6c9b96b 100644
+index c45f9e9..00e85f0 100644
 --- a/drivers/target/target_core_device.c
 +++ b/drivers/target/target_core_device.c
 --- a/drivers/target/target_core_device.c
 +++ b/drivers/target/target_core_device.c
-@@ -1526,7 +1526,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
+@@ -1532,7 +1532,7 @@ struct se_device *target_alloc_device(struct se_hba *hba, const char *name)
        spin_lock_init(&dev->se_tmr_lock);
        spin_lock_init(&dev->qf_cmd_lock);
        sema_init(&dev->caw_sem, 1);
        spin_lock_init(&dev->se_tmr_lock);
        spin_lock_init(&dev->qf_cmd_lock);
        sema_init(&dev->caw_sem, 1);
@@ -52665,20 +52287,37 @@ index 15a1c13..6c9b96b 100644
        spin_lock_init(&dev->t10_wwn.t10_vpd_lock);
        INIT_LIST_HEAD(&dev->t10_pr.registration_list);
 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
        spin_lock_init(&dev->t10_wwn.t10_vpd_lock);
        INIT_LIST_HEAD(&dev->t10_pr.registration_list);
 diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c
-index ab61014..8f1116e 100644
+index be877bf..7be9cd4 100644
 --- a/drivers/target/target_core_transport.c
 +++ b/drivers/target/target_core_transport.c
 --- a/drivers/target/target_core_transport.c
 +++ b/drivers/target/target_core_transport.c
-@@ -1165,7 +1165,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd)
+@@ -1168,7 +1168,7 @@ transport_check_alloc_task_attr(struct se_cmd *cmd)
         * Used to determine when ORDERED commands should go from
         * Dormant to Active status.
         */
 -      cmd->se_ordered_id = atomic_inc_return(&dev->dev_ordered_id);
 +      cmd->se_ordered_id = atomic_inc_return_unchecked(&dev->dev_ordered_id);
         * Used to determine when ORDERED commands should go from
         * Dormant to Active status.
         */
 -      cmd->se_ordered_id = atomic_inc_return(&dev->dev_ordered_id);
 +      cmd->se_ordered_id = atomic_inc_return_unchecked(&dev->dev_ordered_id);
-       smp_mb__after_atomic();
        pr_debug("Allocated se_ordered_id: %u for Task Attr: 0x%02x on %s\n",
                        cmd->se_ordered_id, cmd->sam_task_attr,
        pr_debug("Allocated se_ordered_id: %u for Task Attr: 0x%02x on %s\n",
                        cmd->se_ordered_id, cmd->sam_task_attr,
+                       dev->transport->name);
+diff --git a/drivers/thermal/int340x_thermal/int3400_thermal.c b/drivers/thermal/int340x_thermal/int3400_thermal.c
+index edc1cce..769e4cb 100644
+--- a/drivers/thermal/int340x_thermal/int3400_thermal.c
++++ b/drivers/thermal/int340x_thermal/int3400_thermal.c
+@@ -209,8 +209,10 @@ static int int3400_thermal_probe(struct platform_device *pdev)
+       platform_set_drvdata(pdev, priv);
+       if (priv->uuid_bitmap & 1 << INT3400_THERMAL_PASSIVE_1) {
+-              int3400_thermal_ops.get_mode = int3400_thermal_get_mode;
+-              int3400_thermal_ops.set_mode = int3400_thermal_set_mode;
++              pax_open_kernel();
++              *(void **)&int3400_thermal_ops.get_mode = int3400_thermal_get_mode;
++              *(void **)&int3400_thermal_ops.set_mode = int3400_thermal_set_mode;
++              pax_close_kernel();
+       }
+       priv->thermal = thermal_zone_device_register("INT3400 Thermal", 0, 0,
+                                               priv, &int3400_thermal_ops,
 diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
 diff --git a/drivers/thermal/of-thermal.c b/drivers/thermal/of-thermal.c
-index 4b2b999..cad9fa5 100644
+index 62143ba..ae21165 100644
 --- a/drivers/thermal/of-thermal.c
 +++ b/drivers/thermal/of-thermal.c
 @@ -30,6 +30,7 @@
 --- a/drivers/thermal/of-thermal.c
 +++ b/drivers/thermal/of-thermal.c
 @@ -30,6 +30,7 @@
@@ -52702,7 +52341,7 @@ index 4b2b999..cad9fa5 100644
        mutex_unlock(&tzd->lock);
  
        return tzd;
        mutex_unlock(&tzd->lock);
  
        return tzd;
-@@ -461,8 +464,10 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
+@@ -473,8 +476,10 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
                return;
  
        mutex_lock(&tzd->lock);
                return;
  
        mutex_lock(&tzd->lock);
@@ -53133,7 +52772,7 @@ index 345cebb..d5a1e9e 100644
                        ipwireless_disassociate_network_ttys(network,
                                                             ttyj->channel_idx);
 diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
                        ipwireless_disassociate_network_ttys(network,
                                                             ttyj->channel_idx);
 diff --git a/drivers/tty/moxa.c b/drivers/tty/moxa.c
-index 1deaca4..c8582d4 100644
+index 14c54e0..1efd4f2 100644
 --- a/drivers/tty/moxa.c
 +++ b/drivers/tty/moxa.c
 @@ -1189,7 +1189,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
 --- a/drivers/tty/moxa.c
 +++ b/drivers/tty/moxa.c
 @@ -1189,7 +1189,7 @@ static int moxa_open(struct tty_struct *tty, struct file *filp)
@@ -53168,7 +52807,7 @@ index c434376..114ce13 100644
  
        dlci->modem_rx = 0;
 diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
  
        dlci->modem_rx = 0;
 diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
-index f44f1ba..a8d5915 100644
+index 2e900a9..576d216 100644
 --- a/drivers/tty/n_tty.c
 +++ b/drivers/tty/n_tty.c
 @@ -115,7 +115,7 @@ struct n_tty_data {
 --- a/drivers/tty/n_tty.c
 +++ b/drivers/tty/n_tty.c
 @@ -115,7 +115,7 @@ struct n_tty_data {
@@ -53180,7 +52819,7 @@ index f44f1ba..a8d5915 100644
        size_t line_start;
  
        /* protected by output lock */
        size_t line_start;
  
        /* protected by output lock */
-@@ -2517,6 +2517,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
+@@ -2522,6 +2522,7 @@ void n_tty_inherit_ops(struct tty_ldisc_ops *ops)
  {
        *ops = tty_ldisc_N_TTY;
        ops->owner = NULL;
  {
        *ops = tty_ldisc_N_TTY;
        ops->owner = NULL;
@@ -53190,10 +52829,10 @@ index f44f1ba..a8d5915 100644
  }
  EXPORT_SYMBOL_GPL(n_tty_inherit_ops);
 diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
  }
  EXPORT_SYMBOL_GPL(n_tty_inherit_ops);
 diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c
-index 9bbdb1d..dc514ee 100644
+index 7c4447a..70fbc1e 100644
 --- a/drivers/tty/pty.c
 +++ b/drivers/tty/pty.c
 --- a/drivers/tty/pty.c
 +++ b/drivers/tty/pty.c
-@@ -789,8 +789,10 @@ static void __init unix98_pty_init(void)
+@@ -830,8 +830,10 @@ static void __init unix98_pty_init(void)
                panic("Couldn't register Unix98 pts driver");
  
        /* Now create the /dev/ptmx special device */
                panic("Couldn't register Unix98 pts driver");
  
        /* Now create the /dev/ptmx special device */
@@ -53268,10 +52907,10 @@ index aa28209..e08fb85 100644
  
                this_mir = this_ir = pending_intrs(soft, intr_type);
 diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c
  
                this_mir = this_ir = pending_intrs(soft, intr_type);
 diff --git a/drivers/tty/serial/kgdb_nmi.c b/drivers/tty/serial/kgdb_nmi.c
-index 6ec7501..265bcbf 100644
+index 129dc5b..1da5bb8 100644
 --- a/drivers/tty/serial/kgdb_nmi.c
 +++ b/drivers/tty/serial/kgdb_nmi.c
 --- a/drivers/tty/serial/kgdb_nmi.c
 +++ b/drivers/tty/serial/kgdb_nmi.c
-@@ -51,7 +51,9 @@ static int kgdb_nmi_console_setup(struct console *co, char *options)
+@@ -53,7 +53,9 @@ static int kgdb_nmi_console_setup(struct console *co, char *options)
         * I/O utilities that messages sent to the console will automatically
         * be displayed on the dbg_io.
         */
         * I/O utilities that messages sent to the console will automatically
         * be displayed on the dbg_io.
         */
@@ -53389,10 +53028,10 @@ index a260cde..6b2b5ce 100644
  /* This is only available if kgdboc is a built in for early debugging */
  static int __init kgdboc_early_init(char *opt)
 diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
  /* This is only available if kgdboc is a built in for early debugging */
  static int __init kgdboc_early_init(char *opt)
 diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
-index 077570a..12550a9 100644
+index 4b6c783..9a19db3 100644
 --- a/drivers/tty/serial/msm_serial.c
 +++ b/drivers/tty/serial/msm_serial.c
 --- a/drivers/tty/serial/msm_serial.c
 +++ b/drivers/tty/serial/msm_serial.c
-@@ -981,7 +981,7 @@ static struct uart_driver msm_uart_driver = {
+@@ -1028,7 +1028,7 @@ static struct uart_driver msm_uart_driver = {
        .cons = MSM_CONSOLE,
  };
  
        .cons = MSM_CONSOLE,
  };
  
@@ -53401,7 +53040,7 @@ index 077570a..12550a9 100644
  
  static const struct of_device_id msm_uartdm_table[] = {
        { .compatible = "qcom,msm-uartdm-v1.1", .data = (void *)UARTDM_1P1 },
  
  static const struct of_device_id msm_uartdm_table[] = {
        { .compatible = "qcom,msm-uartdm-v1.1", .data = (void *)UARTDM_1P1 },
-@@ -1000,7 +1000,7 @@ static int msm_serial_probe(struct platform_device *pdev)
+@@ -1047,7 +1047,7 @@ static int msm_serial_probe(struct platform_device *pdev)
        int irq;
  
        if (pdev->id == -1)
        int irq;
  
        if (pdev->id == -1)
@@ -53443,10 +53082,10 @@ index c78f43a..22b1dab 100644
  
        if (cfg->uart_flags & UPF_CONS_FLOW) {
 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
  
        if (cfg->uart_flags & UPF_CONS_FLOW) {
 diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
-index 0f03988..8a8038d 100644
+index eaeb9a0..01a238c 100644
 --- a/drivers/tty/serial/serial_core.c
 +++ b/drivers/tty/serial/serial_core.c
 --- a/drivers/tty/serial/serial_core.c
 +++ b/drivers/tty/serial/serial_core.c
-@@ -1343,7 +1343,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
+@@ -1339,7 +1339,7 @@ static void uart_close(struct tty_struct *tty, struct file *filp)
  
        pr_debug("uart_close(%d) called\n", uport ? uport->line : -1);
  
  
        pr_debug("uart_close(%d) called\n", uport ? uport->line : -1);
  
@@ -53455,7 +53094,7 @@ index 0f03988..8a8038d 100644
                return;
  
        /*
                return;
  
        /*
-@@ -1470,7 +1470,7 @@ static void uart_hangup(struct tty_struct *tty)
+@@ -1466,7 +1466,7 @@ static void uart_hangup(struct tty_struct *tty)
                uart_flush_buffer(tty);
                uart_shutdown(tty, state);
                spin_lock_irqsave(&port->lock, flags);
                uart_flush_buffer(tty);
                uart_shutdown(tty, state);
                spin_lock_irqsave(&port->lock, flags);
@@ -53464,7 +53103,7 @@ index 0f03988..8a8038d 100644
                clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags);
                spin_unlock_irqrestore(&port->lock, flags);
                tty_port_tty_set(port, NULL);
                clear_bit(ASYNCB_NORMAL_ACTIVE, &port->flags);
                spin_unlock_irqrestore(&port->lock, flags);
                tty_port_tty_set(port, NULL);
-@@ -1568,7 +1568,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
+@@ -1564,7 +1564,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
                goto end;
        }
  
                goto end;
        }
  
@@ -53473,12 +53112,12 @@ index 0f03988..8a8038d 100644
        if (!state->uart_port || state->uart_port->flags & UPF_DEAD) {
                retval = -ENXIO;
                goto err_dec_count;
        if (!state->uart_port || state->uart_port->flags & UPF_DEAD) {
                retval = -ENXIO;
                goto err_dec_count;
-@@ -1600,7 +1600,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
+@@ -1596,7 +1596,7 @@ static int uart_open(struct tty_struct *tty, struct file *filp)
  end:
        return retval;
  err_dec_count:
 -      port->count--;
  end:
        return retval;
  err_dec_count:
 -      port->count--;
-+      atomic_inc(&port->count);
++      atomic_dec(&port->count);
        mutex_unlock(&port->mutex);
        goto end;
  }
        mutex_unlock(&port->mutex);
        goto end;
  }
@@ -53881,10 +53520,10 @@ index 42bad18..447d7a2 100644
  
                if (get_user(c, buf))
 diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
  
                if (get_user(c, buf))
 diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
-index 848c17a..e930437 100644
+index 0508a1d..b610592 100644
 --- a/drivers/tty/tty_io.c
 +++ b/drivers/tty/tty_io.c
 --- a/drivers/tty/tty_io.c
 +++ b/drivers/tty/tty_io.c
-@@ -3469,7 +3469,7 @@ EXPORT_SYMBOL_GPL(get_current_tty);
+@@ -3498,7 +3498,7 @@ EXPORT_SYMBOL_GPL(get_current_tty);
  
  void tty_default_fops(struct file_operations *fops)
  {
  
  void tty_default_fops(struct file_operations *fops)
  {
@@ -54001,7 +53640,7 @@ index 1b93357..ea9f82c 100644
        tty_port_tty_set(port, tty);
  
 diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
        tty_port_tty_set(port, tty);
  
 diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
-index d0e3a44..5f8b754 100644
+index c039cfe..0b463b0 100644
 --- a/drivers/tty/vt/keyboard.c
 +++ b/drivers/tty/vt/keyboard.c
 @@ -641,6 +641,16 @@ static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
 --- a/drivers/tty/vt/keyboard.c
 +++ b/drivers/tty/vt/keyboard.c
 @@ -641,6 +641,16 @@ static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
@@ -54062,7 +53701,7 @@ index d0e3a44..5f8b754 100644
                        ret = -EPERM;
                        goto reterr;
 diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
                        ret = -EPERM;
                        goto reterr;
 diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
-index a673e5b..36e5d32 100644
+index 60fa627..7214965 100644
 --- a/drivers/uio/uio.c
 +++ b/drivers/uio/uio.c
 @@ -25,6 +25,7 @@
 --- a/drivers/uio/uio.c
 +++ b/drivers/uio/uio.c
 @@ -25,6 +25,7 @@
@@ -54073,16 +53712,7 @@ index a673e5b..36e5d32 100644
  
  #define UIO_MAX_DEVICES               (1U << MINORBITS)
  
  
  #define UIO_MAX_DEVICES               (1U << MINORBITS)
  
-@@ -32,7 +33,7 @@ struct uio_device {
-       struct module           *owner;
-       struct device           *dev;
-       int                     minor;
--      atomic_t                event;
-+      atomic_unchecked_t      event;
-       struct fasync_struct    *async_queue;
-       wait_queue_head_t       wait;
-       struct uio_info         *info;
-@@ -243,7 +244,7 @@ static ssize_t event_show(struct device *dev,
+@@ -231,7 +232,7 @@ static ssize_t event_show(struct device *dev,
                          struct device_attribute *attr, char *buf)
  {
        struct uio_device *idev = dev_get_drvdata(dev);
                          struct device_attribute *attr, char *buf)
  {
        struct uio_device *idev = dev_get_drvdata(dev);
@@ -54091,7 +53721,7 @@ index a673e5b..36e5d32 100644
  }
  static DEVICE_ATTR_RO(event);
  
  }
  static DEVICE_ATTR_RO(event);
  
-@@ -405,7 +406,7 @@ void uio_event_notify(struct uio_info *info)
+@@ -393,7 +394,7 @@ void uio_event_notify(struct uio_info *info)
  {
        struct uio_device *idev = info->uio_dev;
  
  {
        struct uio_device *idev = info->uio_dev;
  
@@ -54100,7 +53730,7 @@ index a673e5b..36e5d32 100644
        wake_up_interruptible(&idev->wait);
        kill_fasync(&idev->async_queue, SIGIO, POLL_IN);
  }
        wake_up_interruptible(&idev->wait);
        kill_fasync(&idev->async_queue, SIGIO, POLL_IN);
  }
-@@ -458,7 +459,7 @@ static int uio_open(struct inode *inode, struct file *filep)
+@@ -446,7 +447,7 @@ static int uio_open(struct inode *inode, struct file *filep)
        }
  
        listener->dev = idev;
        }
  
        listener->dev = idev;
@@ -54109,7 +53739,7 @@ index a673e5b..36e5d32 100644
        filep->private_data = listener;
  
        if (idev->info->open) {
        filep->private_data = listener;
  
        if (idev->info->open) {
-@@ -509,7 +510,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait)
+@@ -497,7 +498,7 @@ static unsigned int uio_poll(struct file *filep, poll_table *wait)
                return -EIO;
  
        poll_wait(filep, &idev->wait, wait);
                return -EIO;
  
        poll_wait(filep, &idev->wait, wait);
@@ -54118,7 +53748,7 @@ index a673e5b..36e5d32 100644
                return POLLIN | POLLRDNORM;
        return 0;
  }
                return POLLIN | POLLRDNORM;
        return 0;
  }
-@@ -534,7 +535,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf,
+@@ -522,7 +523,7 @@ static ssize_t uio_read(struct file *filep, char __user *buf,
        do {
                set_current_state(TASK_INTERRUPTIBLE);
  
        do {
                set_current_state(TASK_INTERRUPTIBLE);
  
@@ -54127,7 +53757,7 @@ index a673e5b..36e5d32 100644
                if (event_count != listener->event_count) {
                        if (copy_to_user(buf, &event_count, count))
                                retval = -EFAULT;
                if (event_count != listener->event_count) {
                        if (copy_to_user(buf, &event_count, count))
                                retval = -EFAULT;
-@@ -591,9 +592,13 @@ static ssize_t uio_write(struct file *filep, const char __user *buf,
+@@ -579,9 +580,13 @@ static ssize_t uio_write(struct file *filep, const char __user *buf,
  static int uio_find_mem_index(struct vm_area_struct *vma)
  {
        struct uio_device *idev = vma->vm_private_data;
  static int uio_find_mem_index(struct vm_area_struct *vma)
  {
        struct uio_device *idev = vma->vm_private_data;
@@ -54142,7 +53772,7 @@ index a673e5b..36e5d32 100644
                        return -1;
                return (int)vma->vm_pgoff;
        }
                        return -1;
                return (int)vma->vm_pgoff;
        }
-@@ -825,7 +830,7 @@ int __uio_register_device(struct module *owner,
+@@ -813,7 +818,7 @@ int __uio_register_device(struct module *owner,
        idev->owner = owner;
        idev->info = info;
        init_waitqueue_head(&idev->wait);
        idev->owner = owner;
        idev->info = info;
        init_waitqueue_head(&idev->wait);
@@ -54319,10 +53949,10 @@ index 0b59731..46ee7d1 100644
                                    dev->rawdescriptors[i] + (*ppos - pos),
                                    min(len, alloclen))) {
 diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
                                    dev->rawdescriptors[i] + (*ppos - pos),
                                    min(len, alloclen))) {
 diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
-index 258e6fe..9ea48d7 100644
+index a6efb41..6f72549b 100644
 --- a/drivers/usb/core/hcd.c
 +++ b/drivers/usb/core/hcd.c
 --- a/drivers/usb/core/hcd.c
 +++ b/drivers/usb/core/hcd.c
-@@ -1550,7 +1550,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
+@@ -1551,7 +1551,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
         */
        usb_get_urb(urb);
        atomic_inc(&urb->use_count);
         */
        usb_get_urb(urb);
        atomic_inc(&urb->use_count);
@@ -54331,7 +53961,7 @@ index 258e6fe..9ea48d7 100644
        usbmon_urb_submit(&hcd->self, urb);
  
        /* NOTE requirements on root-hub callers (usbfs and the hub
        usbmon_urb_submit(&hcd->self, urb);
  
        /* NOTE requirements on root-hub callers (usbfs and the hub
-@@ -1577,7 +1577,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
+@@ -1578,7 +1578,7 @@ int usb_hcd_submit_urb (struct urb *urb, gfp_t mem_flags)
                urb->hcpriv = NULL;
                INIT_LIST_HEAD(&urb->urb_list);
                atomic_dec(&urb->use_count);
                urb->hcpriv = NULL;
                INIT_LIST_HEAD(&urb->urb_list);
                atomic_dec(&urb->use_count);
@@ -54341,18 +53971,18 @@ index 258e6fe..9ea48d7 100644
                        wake_up(&usb_kill_urb_queue);
                usb_put_urb(urb);
 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
                        wake_up(&usb_kill_urb_queue);
                usb_put_urb(urb);
 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
-index 674c262..71fdd90 100644
+index b649fef..c7107a0 100644
 --- a/drivers/usb/core/hub.c
 +++ b/drivers/usb/core/hub.c
 --- a/drivers/usb/core/hub.c
 +++ b/drivers/usb/core/hub.c
-@@ -27,6 +27,7 @@
- #include <linux/freezer.h>
+@@ -26,6 +26,7 @@
+ #include <linux/mutex.h>
  #include <linux/random.h>
  #include <linux/pm_qos.h>
 +#include <linux/grsecurity.h>
  
  #include <asm/uaccess.h>
  #include <asm/byteorder.h>
  #include <linux/random.h>
  #include <linux/pm_qos.h>
 +#include <linux/grsecurity.h>
  
  #include <asm/uaccess.h>
  #include <asm/byteorder.h>
-@@ -4665,6 +4666,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
+@@ -4666,6 +4667,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,
                        goto done;
                return;
        }
                        goto done;
                return;
        }
@@ -54364,7 +53994,7 @@ index 674c262..71fdd90 100644
                unit_load = 150;
        else
 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
                unit_load = 150;
        else
 diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
-index 0c8a7fc..c45b40a 100644
+index f7b7713..23d07ec 100644
 --- a/drivers/usb/core/message.c
 +++ b/drivers/usb/core/message.c
 @@ -128,7 +128,7 @@ static int usb_internal_control_msg(struct usb_device *usb_dev,
 --- a/drivers/usb/core/message.c
 +++ b/drivers/usb/core/message.c
 @@ -128,7 +128,7 @@ static int usb_internal_control_msg(struct usb_device *usb_dev,
@@ -54462,11 +54092,11 @@ index 8cfc319..4868255 100644
        return 0;
  }
 diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c
        return 0;
  }
 diff --git a/drivers/usb/gadget/function/f_uac1.c b/drivers/usb/gadget/function/f_uac1.c
-index 2b4c82d..06a8ee6 100644
+index f7b2032..fbb340c 100644
 --- a/drivers/usb/gadget/function/f_uac1.c
 +++ b/drivers/usb/gadget/function/f_uac1.c
 --- a/drivers/usb/gadget/function/f_uac1.c
 +++ b/drivers/usb/gadget/function/f_uac1.c
-@@ -13,6 +13,7 @@
- #include <linux/kernel.h>
+@@ -14,6 +14,7 @@
+ #include <linux/module.h>
  #include <linux/device.h>
  #include <linux/atomic.h>
 +#include <linux/module.h>
  #include <linux/device.h>
  #include <linux/atomic.h>
 +#include <linux/module.h>
@@ -54474,10 +54104,10 @@ index 2b4c82d..06a8ee6 100644
  #include "u_uac1.h"
  
 diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
  #include "u_uac1.h"
  
 diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c
-index ad0aca8..8ff84865 100644
+index 491082a..dfd7d17 100644
 --- a/drivers/usb/gadget/function/u_serial.c
 +++ b/drivers/usb/gadget/function/u_serial.c
 --- a/drivers/usb/gadget/function/u_serial.c
 +++ b/drivers/usb/gadget/function/u_serial.c
-@@ -733,9 +733,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
+@@ -729,9 +729,9 @@ static int gs_open(struct tty_struct *tty, struct file *file)
                        spin_lock_irq(&port->port_lock);
  
                        /* already open?  Great. */
                        spin_lock_irq(&port->port_lock);
  
                        /* already open?  Great. */
@@ -54489,7 +54119,7 @@ index ad0aca8..8ff84865 100644
  
                        /* currently opening/closing? wait ... */
                        } else if (port->openclose) {
  
                        /* currently opening/closing? wait ... */
                        } else if (port->openclose) {
-@@ -794,7 +794,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
+@@ -790,7 +790,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
        tty->driver_data = port;
        port->port.tty = tty;
  
        tty->driver_data = port;
        port->port.tty = tty;
  
@@ -54498,7 +54128,7 @@ index ad0aca8..8ff84865 100644
        port->openclose = false;
  
        /* if connected, start the I/O stream */
        port->openclose = false;
  
        /* if connected, start the I/O stream */
-@@ -836,11 +836,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
+@@ -832,11 +832,11 @@ static void gs_close(struct tty_struct *tty, struct file *file)
  
        spin_lock_irq(&port->port_lock);
  
  
        spin_lock_irq(&port->port_lock);
  
@@ -54513,7 +54143,7 @@ index ad0aca8..8ff84865 100644
                goto exit;
        }
  
                goto exit;
        }
  
-@@ -850,7 +850,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
+@@ -846,7 +846,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
         * and sleep if necessary
         */
        port->openclose = true;
         * and sleep if necessary
         */
        port->openclose = true;
@@ -54522,7 +54152,7 @@ index ad0aca8..8ff84865 100644
  
        gser = port->port_usb;
        if (gser && gser->disconnect)
  
        gser = port->port_usb;
        if (gser && gser->disconnect)
-@@ -1066,7 +1066,7 @@ static int gs_closed(struct gs_port *port)
+@@ -1062,7 +1062,7 @@ static int gs_closed(struct gs_port *port)
        int cond;
  
        spin_lock_irq(&port->port_lock);
        int cond;
  
        spin_lock_irq(&port->port_lock);
@@ -54531,7 +54161,7 @@ index ad0aca8..8ff84865 100644
        spin_unlock_irq(&port->port_lock);
        return cond;
  }
        spin_unlock_irq(&port->port_lock);
        return cond;
  }
-@@ -1209,7 +1209,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
+@@ -1205,7 +1205,7 @@ int gserial_connect(struct gserial *gser, u8 port_num)
        /* if it's already open, start I/O ... and notify the serial
         * protocol about open/close status (connect/disconnect).
         */
        /* if it's already open, start I/O ... and notify the serial
         * protocol about open/close status (connect/disconnect).
         */
@@ -54540,7 +54170,7 @@ index ad0aca8..8ff84865 100644
                pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
                gs_start_io(port);
                if (gser->connect)
                pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
                gs_start_io(port);
                if (gser->connect)
-@@ -1256,7 +1256,7 @@ void gserial_disconnect(struct gserial *gser)
+@@ -1252,7 +1252,7 @@ void gserial_disconnect(struct gserial *gser)
  
        port->port_usb = NULL;
        gser->ioport = NULL;
  
        port->port_usb = NULL;
        gser->ioport = NULL;
@@ -54549,7 +54179,7 @@ index ad0aca8..8ff84865 100644
                wake_up_interruptible(&port->drain_wait);
                if (port->port.tty)
                        tty_hangup(port->port.tty);
                wake_up_interruptible(&port->drain_wait);
                if (port->port.tty)
                        tty_hangup(port->port.tty);
-@@ -1272,7 +1272,7 @@ void gserial_disconnect(struct gserial *gser)
+@@ -1268,7 +1268,7 @@ void gserial_disconnect(struct gserial *gser)
  
        /* finally, free any unused/unusable I/O buffers */
        spin_lock_irqsave(&port->port_lock, flags);
  
        /* finally, free any unused/unusable I/O buffers */
        spin_lock_irqsave(&port->port_lock, flags);
@@ -54559,10 +54189,10 @@ index ad0aca8..8ff84865 100644
        gs_free_requests(gser->out, &port->read_pool, NULL);
        gs_free_requests(gser->out, &port->read_queue, NULL);
 diff --git a/drivers/usb/gadget/function/u_uac1.c b/drivers/usb/gadget/function/u_uac1.c
        gs_free_requests(gser->out, &port->read_pool, NULL);
        gs_free_requests(gser->out, &port->read_queue, NULL);
 diff --git a/drivers/usb/gadget/function/u_uac1.c b/drivers/usb/gadget/function/u_uac1.c
-index 7a55fea..cc0ed4f 100644
+index a44a07f..ecea924 100644
 --- a/drivers/usb/gadget/function/u_uac1.c
 +++ b/drivers/usb/gadget/function/u_uac1.c
 --- a/drivers/usb/gadget/function/u_uac1.c
 +++ b/drivers/usb/gadget/function/u_uac1.c
-@@ -16,6 +16,7 @@
+@@ -17,6 +17,7 @@
  #include <linux/ctype.h>
  #include <linux/random.h>
  #include <linux/syscalls.h>
  #include <linux/ctype.h>
  #include <linux/random.h>
  #include <linux/syscalls.h>
@@ -54571,7 +54201,7 @@ index 7a55fea..cc0ed4f 100644
  #include "u_uac1.h"
  
 diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
  #include "u_uac1.h"
  
 diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c
-index 6130b75..3b60008 100644
+index 5728829..fefc6bf 100644
 --- a/drivers/usb/host/ehci-hub.c
 +++ b/drivers/usb/host/ehci-hub.c
 @@ -771,7 +771,7 @@ static struct urb *request_single_step_set_feature_urb(
 --- a/drivers/usb/host/ehci-hub.c
 +++ b/drivers/usb/host/ehci-hub.c
 @@ -771,7 +771,7 @@ static struct urb *request_single_step_set_feature_urb(
@@ -54593,7 +54223,7 @@ index 6130b75..3b60008 100644
        if (!retval && !wait_for_completion_timeout(&done,
                                                msecs_to_jiffies(2000))) {
 diff --git a/drivers/usb/host/hwa-hc.c b/drivers/usb/host/hwa-hc.c
        if (!retval && !wait_for_completion_timeout(&done,
                                                msecs_to_jiffies(2000))) {
 diff --git a/drivers/usb/host/hwa-hc.c b/drivers/usb/host/hwa-hc.c
-index d0d8fad..668ef7b 100644
+index 1db0626..4948782 100644
 --- a/drivers/usb/host/hwa-hc.c
 +++ b/drivers/usb/host/hwa-hc.c
 @@ -337,7 +337,10 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
 --- a/drivers/usb/host/hwa-hc.c
 +++ b/drivers/usb/host/hwa-hc.c
 @@ -337,7 +337,10 @@ static int __hwahc_op_bwa_set(struct wusbhc *wusbhc, s8 stream_index,
@@ -54755,7 +54385,7 @@ index 00e4a54..d676f85 100644
                return;
        }
 diff --git a/drivers/usb/wusbcore/wa-hc.h b/drivers/usb/wusbcore/wa-hc.h
                return;
        }
 diff --git a/drivers/usb/wusbcore/wa-hc.h b/drivers/usb/wusbcore/wa-hc.h
-index f2a8d29..7bc3fe7 100644
+index edc7267..9f65ce2 100644
 --- a/drivers/usb/wusbcore/wa-hc.h
 +++ b/drivers/usb/wusbcore/wa-hc.h
 @@ -240,7 +240,7 @@ struct wahc {
 --- a/drivers/usb/wusbcore/wa-hc.h
 +++ b/drivers/usb/wusbcore/wa-hc.h
 @@ -240,7 +240,7 @@ struct wahc {
@@ -54777,7 +54407,7 @@ index f2a8d29..7bc3fe7 100644
        for (index = 0; index < WA_MAX_BUF_IN_URBS; ++index)
                usb_init_urb(&(wa->buf_in_urbs[index]));
 diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c
        for (index = 0; index < WA_MAX_BUF_IN_URBS; ++index)
                usb_init_urb(&(wa->buf_in_urbs[index]));
 diff --git a/drivers/usb/wusbcore/wa-xfer.c b/drivers/usb/wusbcore/wa-xfer.c
-index e279015..c2d0dae 100644
+index 69af4fd..da390d7 100644
 --- a/drivers/usb/wusbcore/wa-xfer.c
 +++ b/drivers/usb/wusbcore/wa-xfer.c
 @@ -314,7 +314,7 @@ static void wa_xfer_completion(struct wa_xfer *xfer)
 --- a/drivers/usb/wusbcore/wa-xfer.c
 +++ b/drivers/usb/wusbcore/wa-xfer.c
 @@ -314,7 +314,7 @@ static void wa_xfer_completion(struct wa_xfer *xfer)
@@ -54899,7 +54529,7 @@ index 1b0b233..6f34c2c 100644
                err = -ENOSPC;
        }
 diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c
                err = -ENOSPC;
        }
 diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c
-index ff60701..814b973 100644
+index aedf2fb..47c9aca 100644
 --- a/drivers/video/fbdev/aty/aty128fb.c
 +++ b/drivers/video/fbdev/aty/aty128fb.c
 @@ -149,7 +149,7 @@ enum {
 --- a/drivers/video/fbdev/aty/aty128fb.c
 +++ b/drivers/video/fbdev/aty/aty128fb.c
 @@ -149,7 +149,7 @@ enum {
@@ -54980,7 +54610,7 @@ index 900aa4e..6d49418 100644
  }
  EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup);
 diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
  }
  EXPORT_SYMBOL_GPL(fb_deferred_io_cleanup);
 diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
-index b5e85f6..290f8c7 100644
+index 0705d88..d9429bf 100644
 --- a/drivers/video/fbdev/core/fbmem.c
 +++ b/drivers/video/fbdev/core/fbmem.c
 @@ -1301,7 +1301,7 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix,
 --- a/drivers/video/fbdev/core/fbmem.c
 +++ b/drivers/video/fbdev/core/fbmem.c
 @@ -1301,7 +1301,7 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix,
@@ -55220,7 +54850,7 @@ index d513ed6..90b0de9 100644
  
        pr_debug("released /dev/fb%d user=%d count=%d",
 diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
  
        pr_debug("released /dev/fb%d user=%d count=%d",
 diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
-index 77b890e..458e666 100644
+index 046d51d..be564da 100644
 --- a/drivers/video/fbdev/udlfb.c
 +++ b/drivers/video/fbdev/udlfb.c
 @@ -623,11 +623,11 @@ static int dlfb_handle_damage(struct dlfb_data *dev, int x, int y,
 --- a/drivers/video/fbdev/udlfb.c
 +++ b/drivers/video/fbdev/udlfb.c
 @@ -623,11 +623,11 @@ static int dlfb_handle_damage(struct dlfb_data *dev, int x, int y,
@@ -58310,7 +57940,7 @@ index fef20db..d28b1ab 100644
                return -ENOMEM;
        return 0;
 diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
                return -ENOMEM;
        return 0;
 diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
-index cc1cfae..41158ad 100644
+index eb14e05..5156de7 100644
 --- a/fs/9p/vfs_addr.c
 +++ b/fs/9p/vfs_addr.c
 @@ -187,7 +187,7 @@ static int v9fs_vfs_writepage_locked(struct page *page)
 --- a/fs/9p/vfs_addr.c
 +++ b/fs/9p/vfs_addr.c
 @@ -187,7 +187,7 @@ static int v9fs_vfs_writepage_locked(struct page *page)
@@ -58323,7 +57953,7 @@ index cc1cfae..41158ad 100644
        if (retval > 0)
                retval = 0;
 diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
        if (retval > 0)
                retval = 0;
 diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c
-index 7fa4f7a..a7ebf8c 100644
+index 296482f..183ddc3 100644
 --- a/fs/9p/vfs_inode.c
 +++ b/fs/9p/vfs_inode.c
 @@ -1312,7 +1312,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd)
 --- a/fs/9p/vfs_inode.c
 +++ b/fs/9p/vfs_inode.c
 @@ -1312,7 +1312,7 @@ static void *v9fs_vfs_follow_link(struct dentry *dentry, struct nameidata *nd)
@@ -58333,8 +57963,8 @@ index 7fa4f7a..a7ebf8c 100644
 -      char *s = nd_get_link(nd);
 +      const char *s = nd_get_link(nd);
  
 -      char *s = nd_get_link(nd);
 +      const char *s = nd_get_link(nd);
  
-       p9_debug(P9_DEBUG_VFS, " %s %s\n",
-                dentry->d_name.name, IS_ERR(s) ? "<error>" : s);
+       p9_debug(P9_DEBUG_VFS, " %pd %s\n",
+                dentry, IS_ERR(s) ? "<error>" : s);
 diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
 index 370b24c..ff0be7b 100644
 --- a/fs/Kconfig.binfmt
 diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
 index 370b24c..ff0be7b 100644
 --- a/fs/Kconfig.binfmt
@@ -58371,10 +58001,10 @@ index 2946712..f737435 100644
                             &data);
        if (!inode) {
 diff --git a/fs/aio.c b/fs/aio.c
                             &data);
        if (!inode) {
 diff --git a/fs/aio.c b/fs/aio.c
-index 7337500..2058af6 100644
+index 14b9315..365980f 100644
 --- a/fs/aio.c
 +++ b/fs/aio.c
 --- a/fs/aio.c
 +++ b/fs/aio.c
-@@ -380,7 +380,7 @@ static int aio_setup_ring(struct kioctx *ctx)
+@@ -388,7 +388,7 @@ static int aio_setup_ring(struct kioctx *ctx)
        size += sizeof(struct io_event) * nr_events;
  
        nr_pages = PFN_UP(size);
        size += sizeof(struct io_event) * nr_events;
  
        nr_pages = PFN_UP(size);
@@ -58464,7 +58094,7 @@ index 2722387..56059b5 100644
  {
        if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
 diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c
  {
        if (BEFS_SB(sb)->byte_order == BEFS_BYTESEX_LE)
 diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c
-index ca0ba15..0fa3257 100644
+index 929dec0..84bd914 100644
 --- a/fs/binfmt_aout.c
 +++ b/fs/binfmt_aout.c
 @@ -16,6 +16,7 @@
 --- a/fs/binfmt_aout.c
 +++ b/fs/binfmt_aout.c
 @@ -16,6 +16,7 @@
@@ -58506,7 +58136,7 @@ index ca0ba15..0fa3257 100644
        if (ex.a_data + ex.a_bss > rlim)
                return -ENOMEM;
  
        if (ex.a_data + ex.a_bss > rlim)
                return -ENOMEM;
  
-@@ -264,6 +271,27 @@ static int load_aout_binary(struct linux_binprm * bprm)
+@@ -261,6 +268,27 @@ static int load_aout_binary(struct linux_binprm * bprm)
  
        install_exec_creds(bprm);
  
  
        install_exec_creds(bprm);
  
@@ -58534,17 +58164,17 @@ index ca0ba15..0fa3257 100644
        if (N_MAGIC(ex) == OMAGIC) {
                unsigned long text_addr, map_size;
                loff_t pos;
        if (N_MAGIC(ex) == OMAGIC) {
                unsigned long text_addr, map_size;
                loff_t pos;
-@@ -321,7 +349,7 @@ static int load_aout_binary(struct linux_binprm * bprm)
-               }
+@@ -312,7 +340,7 @@ static int load_aout_binary(struct linux_binprm * bprm)
+                       return error;
  
                error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
 -                              PROT_READ | PROT_WRITE | PROT_EXEC,
 +                              PROT_READ | PROT_WRITE,
                                MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE,
                                fd_offset + ex.a_text);
  
                error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
 -                              PROT_READ | PROT_WRITE | PROT_EXEC,
 +                              PROT_READ | PROT_WRITE,
                                MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE,
                                fd_offset + ex.a_text);
-               if (error != N_DATADDR(ex)) {
+               if (error != N_DATADDR(ex))
 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
 diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
-index 3892c1a..4e27c04 100644
+index d8fc060..cbd44d5 100644
 --- a/fs/binfmt_elf.c
 +++ b/fs/binfmt_elf.c
 @@ -34,6 +34,7 @@
 --- a/fs/binfmt_elf.c
 +++ b/fs/binfmt_elf.c
 @@ -34,6 +34,7 @@
@@ -59166,7 +58796,7 @@ index 3892c1a..4e27c04 100644
        if (elf_read_implies_exec(loc->elf_ex, executable_stack))
                current->personality |= READ_IMPLIES_EXEC;
  
        if (elf_read_implies_exec(loc->elf_ex, executable_stack))
                current->personality |= READ_IMPLIES_EXEC;
  
-@@ -815,6 +1253,20 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -811,6 +1249,20 @@ static int load_elf_binary(struct linux_binprm *bprm)
  #else
                        load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
  #endif
  #else
                        load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
  #endif
@@ -59187,7 +58817,7 @@ index 3892c1a..4e27c04 100644
                }
  
                error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
                }
  
                error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
-@@ -847,9 +1299,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
+@@ -842,9 +1294,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
                 * allowed task size. Note that p_filesz must always be
                 * <= p_memsz so it is only necessary to check p_memsz.
                 */
                 * allowed task size. Note that p_filesz must always be
                 * <= p_memsz so it is only necessary to check p_memsz.
                 */
@@ -59198,13 +58828,12 @@ index 3892c1a..4e27c04 100644
 +                  elf_ppnt->p_memsz > pax_task_size ||
 +                  pax_task_size - elf_ppnt->p_memsz < k) {
                        /* set_brk can never work. Avoid overflows. */
 +                  elf_ppnt->p_memsz > pax_task_size ||
 +                  pax_task_size - elf_ppnt->p_memsz < k) {
                        /* set_brk can never work. Avoid overflows. */
-                       send_sig(SIGKILL, current, 0);
                        retval = -EINVAL;
                        retval = -EINVAL;
-@@ -888,17 +1340,45 @@ static int load_elf_binary(struct linux_binprm *bprm)
+                       goto out_free_dentry;
+@@ -880,16 +1332,43 @@ static int load_elf_binary(struct linux_binprm *bprm)
+       if (retval)
                goto out_free_dentry;
                goto out_free_dentry;
-       }
        if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) {
        if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) {
--              send_sig(SIGSEGV, current, 0);
 -              retval = -EFAULT; /* Nobody gets to see this, but.. */
 -              goto out_free_dentry;
 +              /*
 -              retval = -EFAULT; /* Nobody gets to see this, but.. */
 -              goto out_free_dentry;
 +              /*
@@ -59236,10 +58865,8 @@ index 3892c1a..4e27c04 100644
 +              up_write(&current->mm->mmap_sem);
 +              if (retval == 0)
 +                      retval = set_brk(start + size, start + size + PAGE_SIZE);
 +              up_write(&current->mm->mmap_sem);
 +              if (retval == 0)
 +                      retval = set_brk(start + size, start + size + PAGE_SIZE);
-+              if (retval < 0) {
-+                      send_sig(SIGKILL, current, 0);
++              if (retval < 0)
 +                      goto out_free_dentry;
 +                      goto out_free_dentry;
-+              }
 +      }
 +#endif
 +
 +      }
 +#endif
 +
@@ -59252,7 +58879,7 @@ index 3892c1a..4e27c04 100644
                                            load_bias);
                if (!IS_ERR((void *)elf_entry)) {
                        /*
                                            load_bias);
                if (!IS_ERR((void *)elf_entry)) {
                        /*
-@@ -1130,7 +1610,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
+@@ -1115,7 +1594,7 @@ static bool always_dump_vma(struct vm_area_struct *vma)
   * Decide what to dump of a segment, part, all or none.
   */
  static unsigned long vma_dump_size(struct vm_area_struct *vma,
   * Decide what to dump of a segment, part, all or none.
   */
  static unsigned long vma_dump_size(struct vm_area_struct *vma,
@@ -59261,7 +58888,7 @@ index 3892c1a..4e27c04 100644
  {
  #define FILTER(type)  (mm_flags & (1UL << MMF_DUMP_##type))
  
  {
  #define FILTER(type)  (mm_flags & (1UL << MMF_DUMP_##type))
  
-@@ -1168,7 +1648,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
+@@ -1153,7 +1632,7 @@ static unsigned long vma_dump_size(struct vm_area_struct *vma,
        if (vma->vm_file == NULL)
                return 0;
  
        if (vma->vm_file == NULL)
                return 0;
  
@@ -59270,7 +58897,7 @@ index 3892c1a..4e27c04 100644
                goto whole;
  
        /*
                goto whole;
  
        /*
-@@ -1375,9 +1855,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
+@@ -1360,9 +1839,9 @@ static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
  {
        elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv;
        int i = 0;
  {
        elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv;
        int i = 0;
@@ -59282,7 +58909,7 @@ index 3892c1a..4e27c04 100644
        fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv);
  }
  
        fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv);
  }
  
-@@ -1386,7 +1866,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
+@@ -1371,7 +1850,7 @@ static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
  {
        mm_segment_t old_fs = get_fs();
        set_fs(KERNEL_DS);
  {
        mm_segment_t old_fs = get_fs();
        set_fs(KERNEL_DS);
@@ -59291,7 +58918,7 @@ index 3892c1a..4e27c04 100644
        set_fs(old_fs);
        fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
  }
        set_fs(old_fs);
        fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
  }
-@@ -2010,14 +2490,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum,
+@@ -1995,14 +2474,14 @@ static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum,
  }
  
  static size_t elf_core_vma_data_size(struct vm_area_struct *gate_vma,
  }
  
  static size_t elf_core_vma_data_size(struct vm_area_struct *gate_vma,
@@ -59308,7 +58935,7 @@ index 3892c1a..4e27c04 100644
        return size;
  }
  
        return size;
  }
  
-@@ -2108,7 +2588,7 @@ static int elf_core_dump(struct coredump_params *cprm)
+@@ -2093,7 +2572,7 @@ static int elf_core_dump(struct coredump_params *cprm)
  
        dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE);
  
  
        dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE);
  
@@ -59317,7 +58944,7 @@ index 3892c1a..4e27c04 100644
        offset += elf_core_extra_data_size();
        e_shoff = offset;
  
        offset += elf_core_extra_data_size();
        e_shoff = offset;
  
-@@ -2136,7 +2616,7 @@ static int elf_core_dump(struct coredump_params *cprm)
+@@ -2121,7 +2600,7 @@ static int elf_core_dump(struct coredump_params *cprm)
                phdr.p_offset = offset;
                phdr.p_vaddr = vma->vm_start;
                phdr.p_paddr = 0;
                phdr.p_offset = offset;
                phdr.p_vaddr = vma->vm_start;
                phdr.p_paddr = 0;
@@ -59326,7 +58953,7 @@ index 3892c1a..4e27c04 100644
                phdr.p_memsz = vma->vm_end - vma->vm_start;
                offset += phdr.p_filesz;
                phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0;
                phdr.p_memsz = vma->vm_end - vma->vm_start;
                offset += phdr.p_filesz;
                phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0;
-@@ -2169,7 +2649,7 @@ static int elf_core_dump(struct coredump_params *cprm)
+@@ -2154,7 +2633,7 @@ static int elf_core_dump(struct coredump_params *cprm)
                unsigned long addr;
                unsigned long end;
  
                unsigned long addr;
                unsigned long end;
  
@@ -59335,7 +58962,7 @@ index 3892c1a..4e27c04 100644
  
                for (addr = vma->vm_start; addr < end; addr += PAGE_SIZE) {
                        struct page *page;
  
                for (addr = vma->vm_start; addr < end; addr += PAGE_SIZE) {
                        struct page *page;
-@@ -2210,6 +2690,167 @@ out:
+@@ -2195,6 +2674,167 @@ out:
  
  #endif                /* CONFIG_ELF_CORE */
  
  
  #endif                /* CONFIG_ELF_CORE */
  
@@ -59504,10 +59131,10 @@ index 3892c1a..4e27c04 100644
  {
        register_binfmt(&elf_format);
 diff --git a/fs/block_dev.c b/fs/block_dev.c
  {
        register_binfmt(&elf_format);
 diff --git a/fs/block_dev.c b/fs/block_dev.c
-index 6d72746..536d1db 100644
+index 1d9c9f3..2905786 100644
 --- a/fs/block_dev.c
 +++ b/fs/block_dev.c
 --- a/fs/block_dev.c
 +++ b/fs/block_dev.c
-@@ -701,7 +701,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
+@@ -697,7 +697,7 @@ static bool bd_may_claim(struct block_device *bdev, struct block_device *whole,
        else if (bdev->bd_contains == bdev)
                return true;     /* is a whole device which isn't held */
  
        else if (bdev->bd_contains == bdev)
                return true;     /* is a whole device which isn't held */
  
@@ -59517,10 +59144,10 @@ index 6d72746..536d1db 100644
        else if (whole->bd_holder != NULL)
                return false;    /* is a partition of a held device */
 diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
        else if (whole->bd_holder != NULL)
                return false;    /* is a partition of a held device */
 diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
-index 44ee5d2..8b23e53 100644
+index 150822e..75bb326 100644
 --- a/fs/btrfs/ctree.c
 +++ b/fs/btrfs/ctree.c
 --- a/fs/btrfs/ctree.c
 +++ b/fs/btrfs/ctree.c
-@@ -1184,9 +1184,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans,
+@@ -1173,9 +1173,12 @@ static noinline int __btrfs_cow_block(struct btrfs_trans_handle *trans,
                free_extent_buffer(buf);
                add_root_to_dirty_list(root);
        } else {
                free_extent_buffer(buf);
                add_root_to_dirty_list(root);
        } else {
@@ -59537,7 +59164,7 @@ index 44ee5d2..8b23e53 100644
  
                WARN_ON(trans->transid != btrfs_header_generation(parent));
 diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
  
                WARN_ON(trans->transid != btrfs_header_generation(parent));
 diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c
-index a2e90f8..5135e5f 100644
+index 054577b..9b342cc 100644
 --- a/fs/btrfs/delayed-inode.c
 +++ b/fs/btrfs/delayed-inode.c
 @@ -462,7 +462,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
 --- a/fs/btrfs/delayed-inode.c
 +++ b/fs/btrfs/delayed-inode.c
 @@ -462,7 +462,7 @@ static int __btrfs_add_delayed_deletion_item(struct btrfs_delayed_node *node,
@@ -59590,10 +59217,10 @@ index f70119f..ab5894d 100644
        spin_lock_init(&delayed_root->lock);
        init_waitqueue_head(&delayed_root->wait);
 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
        spin_lock_init(&delayed_root->lock);
        init_waitqueue_head(&delayed_root->wait);
 diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
-index b765d41..5a8b0c3 100644
+index 4399f0c..a34d8b4 100644
 --- a/fs/btrfs/ioctl.c
 +++ b/fs/btrfs/ioctl.c
 --- a/fs/btrfs/ioctl.c
 +++ b/fs/btrfs/ioctl.c
-@@ -3975,9 +3975,12 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
+@@ -3953,9 +3953,12 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
        for (i = 0; i < num_types; i++) {
                struct btrfs_space_info *tmp;
  
        for (i = 0; i < num_types; i++) {
                struct btrfs_space_info *tmp;
  
@@ -59606,7 +59233,7 @@ index b765d41..5a8b0c3 100644
                info = NULL;
                rcu_read_lock();
                list_for_each_entry_rcu(tmp, &root->fs_info->space_info,
                info = NULL;
                rcu_read_lock();
                list_for_each_entry_rcu(tmp, &root->fs_info->space_info,
-@@ -3999,10 +4002,7 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
+@@ -3977,10 +3980,7 @@ static long btrfs_ioctl_space_info(struct btrfs_root *root, void __user *arg)
                                memcpy(dest, &space, sizeof(space));
                                dest++;
                                space_args.total_spaces++;
                                memcpy(dest, &space, sizeof(space));
                                dest++;
                                space_args.total_spaces++;
@@ -59618,10 +59245,10 @@ index b765d41..5a8b0c3 100644
                up_read(&info->groups_sem);
        }
 diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
                up_read(&info->groups_sem);
        }
 diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
-index c4124de..d7613eb6 100644
+index cde9c03..ad4d4db 100644
 --- a/fs/btrfs/super.c
 +++ b/fs/btrfs/super.c
 --- a/fs/btrfs/super.c
 +++ b/fs/btrfs/super.c
-@@ -270,7 +270,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
+@@ -271,7 +271,7 @@ void __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
                           function, line, errstr);
                return;
        }
                           function, line, errstr);
                return;
        }
@@ -59631,10 +59258,10 @@ index c4124de..d7613eb6 100644
        wake_up(&root->fs_info->transaction_wait);
        wake_up(&root->fs_info->transaction_blocked_wait);
 diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
        wake_up(&root->fs_info->transaction_wait);
        wake_up(&root->fs_info->transaction_blocked_wait);
 diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
-index 12e5355..cdf30c6 100644
+index b2e7bb4..3719201 100644
 --- a/fs/btrfs/sysfs.c
 +++ b/fs/btrfs/sysfs.c
 --- a/fs/btrfs/sysfs.c
 +++ b/fs/btrfs/sysfs.c
-@@ -475,7 +475,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add)
+@@ -480,7 +480,7 @@ static int addrm_unknown_feature_attrs(struct btrfs_fs_info *fs_info, bool add)
        for (set = 0; set < FEAT_MAX; set++) {
                int i;
                struct attribute *attrs[2];
        for (set = 0; set < FEAT_MAX; set++) {
                int i;
                struct attribute *attrs[2];
@@ -59643,11 +59270,37 @@ index 12e5355..cdf30c6 100644
                        .name = "features",
                        .attrs = attrs,
                };
                        .name = "features",
                        .attrs = attrs,
                };
+diff --git a/fs/btrfs/tests/free-space-tests.c b/fs/btrfs/tests/free-space-tests.c
+index 2299bfd..4098e72 100644
+--- a/fs/btrfs/tests/free-space-tests.c
++++ b/fs/btrfs/tests/free-space-tests.c
+@@ -463,7 +463,9 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
+        * extent entry.
+        */
+       use_bitmap_op = cache->free_space_ctl->op->use_bitmap;
+-      cache->free_space_ctl->op->use_bitmap = test_use_bitmap;
++      pax_open_kernel();
++      *(void **)&cache->free_space_ctl->op->use_bitmap = test_use_bitmap;
++      pax_close_kernel();
+       /*
+        * Extent entry covering free space range [128Mb - 256Kb, 128Mb - 128Kb[
+@@ -870,7 +872,9 @@ test_steal_space_from_bitmap_to_extent(struct btrfs_block_group_cache *cache)
+       if (ret)
+               return ret;
+-      cache->free_space_ctl->op->use_bitmap = use_bitmap_op;
++      pax_open_kernel();
++      *(void **)&cache->free_space_ctl->op->use_bitmap = use_bitmap_op;
++      pax_close_kernel();
+       __btrfs_remove_free_space_cache(cache->free_space_ctl);
+       return 0;
 diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h
 diff --git a/fs/btrfs/tree-log.h b/fs/btrfs/tree-log.h
-index e2e798a..f454c18 100644
+index 154990c..d0cf699 100644
 --- a/fs/btrfs/tree-log.h
 +++ b/fs/btrfs/tree-log.h
 --- a/fs/btrfs/tree-log.h
 +++ b/fs/btrfs/tree-log.h
-@@ -41,7 +41,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx)
+@@ -43,7 +43,7 @@ static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx)
  static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info,
                                             struct btrfs_trans_handle *trans)
  {
  static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info,
                                             struct btrfs_trans_handle *trans)
  {
@@ -59657,10 +59310,10 @@ index e2e798a..f454c18 100644
  
  static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info,
 diff --git a/fs/buffer.c b/fs/buffer.c
  
  static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info,
 diff --git a/fs/buffer.c b/fs/buffer.c
-index 72daaa5..60ffeb9 100644
+index 20805db..2e8fc69 100644
 --- a/fs/buffer.c
 +++ b/fs/buffer.c
 --- a/fs/buffer.c
 +++ b/fs/buffer.c
-@@ -3432,7 +3432,7 @@ void __init buffer_init(void)
+@@ -3417,7 +3417,7 @@ void __init buffer_init(void)
        bh_cachep = kmem_cache_create("buffer_head",
                        sizeof(struct buffer_head), 0,
                                (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|
        bh_cachep = kmem_cache_create("buffer_head",
                        sizeof(struct buffer_head), 0,
                                (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC|
@@ -59768,7 +59421,7 @@ index 8c52472..c4e3a69 100644
  
  #else
 diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
  
  #else
 diff --git a/fs/cachefiles/namei.c b/fs/cachefiles/namei.c
-index dad7d95..07475af 100644
+index e12f189..ed17244 100644
 --- a/fs/cachefiles/namei.c
 +++ b/fs/cachefiles/namei.c
 @@ -312,7 +312,7 @@ try_again:
 --- a/fs/cachefiles/namei.c
 +++ b/fs/cachefiles/namei.c
 @@ -312,7 +312,7 @@ try_again:
@@ -59810,21 +59463,8 @@ index eccd339..4c1d995 100644
                if (x == 0 && y == 0 && z == 0)
                        return 0;
  
                if (x == 0 && y == 0 && z == 0)
                        return 0;
  
-diff --git a/fs/cachefiles/rdwr.c b/fs/cachefiles/rdwr.c
-index 25e745b..220e604 100644
---- a/fs/cachefiles/rdwr.c
-+++ b/fs/cachefiles/rdwr.c
-@@ -937,7 +937,7 @@ int cachefiles_write_page(struct fscache_storage *op, struct page *page)
-                       old_fs = get_fs();
-                       set_fs(KERNEL_DS);
-                       ret = file->f_op->write(
--                              file, (const void __user *) data, len, &pos);
-+                              file, (const void __force_user *) data, len, &pos);
-                       set_fs(old_fs);
-                       kunmap(page);
-                       file_end_write(file);
 diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
 diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
-index c29d6ae..719b9bb 100644
+index 695e788..f4a9d4d 100644
 --- a/fs/ceph/dir.c
 +++ b/fs/ceph/dir.c
 @@ -129,6 +129,8 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
 --- a/fs/ceph/dir.c
 +++ b/fs/ceph/dir.c
 @@ -129,6 +129,8 @@ static int __dcache_readdir(struct file *file,  struct dir_context *ctx,
@@ -59859,19 +59499,6 @@ index c29d6ae..719b9bb 100644
        int err;
        u32 ftype;
        struct ceph_mds_reply_info_parsed *rinfo;
        int err;
        u32 ftype;
        struct ceph_mds_reply_info_parsed *rinfo;
-diff --git a/fs/ceph/ioctl.c b/fs/ceph/ioctl.c
-index a822a6e..4644256 100644
---- a/fs/ceph/ioctl.c
-+++ b/fs/ceph/ioctl.c
-@@ -41,7 +41,7 @@ static long __validate_layout(struct ceph_mds_client *mdsc,
-       /* validate striping parameters */
-       if ((l->object_size & ~PAGE_MASK) ||
-           (l->stripe_unit & ~PAGE_MASK) ||
--          (l->stripe_unit != 0 &&
-+          ((unsigned)l->stripe_unit != 0 &&
-            ((unsigned)l->object_size % (unsigned)l->stripe_unit)))
-               return -EINVAL;
 diff --git a/fs/ceph/super.c b/fs/ceph/super.c
 index f6e1237..796ffd1 100644
 --- a/fs/ceph/super.c
 diff --git a/fs/ceph/super.c b/fs/ceph/super.c
 index f6e1237..796ffd1 100644
 --- a/fs/ceph/super.c
@@ -59939,10 +59566,10 @@ index 44ec726..bcb06a3 100644
                                        server->ops->print_stats(m, tcon);
                        }
 diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
                                        server->ops->print_stats(m, tcon);
                        }
 diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c
-index 889b984..fcb8431 100644
+index 9d7996e..35ad5cf4 100644
 --- a/fs/cifs/cifsfs.c
 +++ b/fs/cifs/cifsfs.c
 --- a/fs/cifs/cifsfs.c
 +++ b/fs/cifs/cifsfs.c
-@@ -1092,7 +1092,7 @@ cifs_init_request_bufs(void)
+@@ -1093,7 +1093,7 @@ cifs_init_request_bufs(void)
  */
        cifs_req_cachep = kmem_cache_create("cifs_request",
                                            CIFSMaxBufSize + max_hdr_size, 0,
  */
        cifs_req_cachep = kmem_cache_create("cifs_request",
                                            CIFSMaxBufSize + max_hdr_size, 0,
@@ -59951,7 +59578,7 @@ index 889b984..fcb8431 100644
        if (cifs_req_cachep == NULL)
                return -ENOMEM;
  
        if (cifs_req_cachep == NULL)
                return -ENOMEM;
  
-@@ -1119,7 +1119,7 @@ cifs_init_request_bufs(void)
+@@ -1120,7 +1120,7 @@ cifs_init_request_bufs(void)
        efficient to alloc 1 per page off the slab compared to 17K (5page)
        alloc of large cifs buffers even when page debugging is on */
        cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
        efficient to alloc 1 per page off the slab compared to 17K (5page)
        alloc of large cifs buffers even when page debugging is on */
        cifs_sm_req_cachep = kmem_cache_create("cifs_small_rq",
@@ -59960,7 +59587,7 @@ index 889b984..fcb8431 100644
                        NULL);
        if (cifs_sm_req_cachep == NULL) {
                mempool_destroy(cifs_req_poolp);
                        NULL);
        if (cifs_sm_req_cachep == NULL) {
                mempool_destroy(cifs_req_poolp);
-@@ -1204,8 +1204,8 @@ init_cifs(void)
+@@ -1205,8 +1205,8 @@ init_cifs(void)
        atomic_set(&bufAllocCount, 0);
        atomic_set(&smBufAllocCount, 0);
  #ifdef CONFIG_CIFS_STATS2
        atomic_set(&bufAllocCount, 0);
        atomic_set(&smBufAllocCount, 0);
  #ifdef CONFIG_CIFS_STATS2
@@ -59972,10 +59599,10 @@ index 889b984..fcb8431 100644
  
        atomic_set(&midCount, 0);
 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
  
        atomic_set(&midCount, 0);
 diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
-index 25b8392..01e46dc 100644
+index 02a33e5..3a28b5a 100644
 --- a/fs/cifs/cifsglob.h
 +++ b/fs/cifs/cifsglob.h
 --- a/fs/cifs/cifsglob.h
 +++ b/fs/cifs/cifsglob.h
-@@ -821,35 +821,35 @@ struct cifs_tcon {
+@@ -823,35 +823,35 @@ struct cifs_tcon {
        __u16 Flags;            /* optional support bits */
        enum statusEnum tidStatus;
  #ifdef CONFIG_CIFS_STATS
        __u16 Flags;            /* optional support bits */
        enum statusEnum tidStatus;
  #ifdef CONFIG_CIFS_STATS
@@ -60035,7 +59662,7 @@ index 25b8392..01e46dc 100644
                } smb2_stats;
  #endif /* CONFIG_CIFS_SMB2 */
        } stats;
                } smb2_stats;
  #endif /* CONFIG_CIFS_SMB2 */
        } stats;
-@@ -1190,7 +1190,7 @@ convert_delimiter(char *path, char delim)
+@@ -1192,7 +1192,7 @@ convert_delimiter(char *path, char delim)
  }
  
  #ifdef CONFIG_CIFS_STATS
  }
  
  #ifdef CONFIG_CIFS_STATS
@@ -60044,7 +59671,7 @@ index 25b8392..01e46dc 100644
  
  static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
                                            unsigned int bytes)
  
  static inline void cifs_stats_bytes_written(struct cifs_tcon *tcon,
                                            unsigned int bytes)
-@@ -1557,8 +1557,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
+@@ -1559,8 +1559,8 @@ GLOBAL_EXTERN atomic_t tconInfoReconnectCount;
  /* Various Debug counters */
  GLOBAL_EXTERN atomic_t bufAllocCount;    /* current number allocated  */
  #ifdef CONFIG_CIFS_STATS2
  /* Various Debug counters */
  GLOBAL_EXTERN atomic_t bufAllocCount;    /* current number allocated  */
  #ifdef CONFIG_CIFS_STATS2
@@ -60056,7 +59683,7 @@ index 25b8392..01e46dc 100644
  GLOBAL_EXTERN atomic_t smBufAllocCount;
  GLOBAL_EXTERN atomic_t midCount;
 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
  GLOBAL_EXTERN atomic_t smBufAllocCount;
  GLOBAL_EXTERN atomic_t midCount;
 diff --git a/fs/cifs/file.c b/fs/cifs/file.c
-index 5f29354..359bc0d 100644
+index 3e4d00a..38a122d 100644
 --- a/fs/cifs/file.c
 +++ b/fs/cifs/file.c
 @@ -2056,10 +2056,14 @@ static int cifs_writepages(struct address_space *mapping,
 --- a/fs/cifs/file.c
 +++ b/fs/cifs/file.c
 @@ -2056,10 +2056,14 @@ static int cifs_writepages(struct address_space *mapping,
@@ -60100,10 +59727,10 @@ index b7415d5..3984ec0 100644
  
        }
 diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
  
        }
 diff --git a/fs/cifs/smb1ops.c b/fs/cifs/smb1ops.c
-index 52131d8..fd79e97 100644
+index d297903..1cb7516 100644
 --- a/fs/cifs/smb1ops.c
 +++ b/fs/cifs/smb1ops.c
 --- a/fs/cifs/smb1ops.c
 +++ b/fs/cifs/smb1ops.c
-@@ -626,27 +626,27 @@ static void
+@@ -622,27 +622,27 @@ static void
  cifs_clear_stats(struct cifs_tcon *tcon)
  {
  #ifdef CONFIG_CIFS_STATS
  cifs_clear_stats(struct cifs_tcon *tcon)
  {
  #ifdef CONFIG_CIFS_STATS
@@ -60152,7 +59779,7 @@ index 52131d8..fd79e97 100644
  #endif
  }
  
  #endif
  }
  
-@@ -655,36 +655,36 @@ cifs_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
+@@ -651,36 +651,36 @@ cifs_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
  {
  #ifdef CONFIG_CIFS_STATS
        seq_printf(m, " Oplocks breaks: %d",
  {
  #ifdef CONFIG_CIFS_STATS
        seq_printf(m, " Oplocks breaks: %d",
@@ -60209,10 +59836,10 @@ index 52131d8..fd79e97 100644
  }
  
 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
  }
  
 diff --git a/fs/cifs/smb2ops.c b/fs/cifs/smb2ops.c
-index f522193..586121b 100644
+index c5f521b..1a40865 100644
 --- a/fs/cifs/smb2ops.c
 +++ b/fs/cifs/smb2ops.c
 --- a/fs/cifs/smb2ops.c
 +++ b/fs/cifs/smb2ops.c
-@@ -414,8 +414,8 @@ smb2_clear_stats(struct cifs_tcon *tcon)
+@@ -417,8 +417,8 @@ smb2_clear_stats(struct cifs_tcon *tcon)
  #ifdef CONFIG_CIFS_STATS
        int i;
        for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) {
  #ifdef CONFIG_CIFS_STATS
        int i;
        for (i = 0; i < NUMBER_OF_SMB2_COMMANDS; i++) {
@@ -60223,7 +59850,7 @@ index f522193..586121b 100644
        }
  #endif
  }
        }
  #endif
  }
-@@ -455,65 +455,65 @@ static void
+@@ -458,65 +458,65 @@ static void
  smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
  {
  #ifdef CONFIG_CIFS_STATS
  smb2_print_stats(struct seq_file *m, struct cifs_tcon *tcon)
  {
  #ifdef CONFIG_CIFS_STATS
@@ -60330,10 +59957,10 @@ index f522193..586121b 100644
  }
  
 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
  }
  
 diff --git a/fs/cifs/smb2pdu.c b/fs/cifs/smb2pdu.c
-index 74b3a66..0c709f3 100644
+index 8f1672b..af339c07 100644
 --- a/fs/cifs/smb2pdu.c
 +++ b/fs/cifs/smb2pdu.c
 --- a/fs/cifs/smb2pdu.c
 +++ b/fs/cifs/smb2pdu.c
-@@ -2143,8 +2143,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
+@@ -2145,8 +2145,7 @@ SMB2_query_directory(const unsigned int xid, struct cifs_tcon *tcon,
        default:
                cifs_dbg(VFS, "info level %u isn't supported\n",
                         srch_inf->info_level);
        default:
                cifs_dbg(VFS, "info level %u isn't supported\n",
                         srch_inf->info_level);
@@ -60344,7 +59971,7 @@ index 74b3a66..0c709f3 100644
  
        req->FileIndex = cpu_to_le32(index);
 diff --git a/fs/coda/cache.c b/fs/coda/cache.c
  
        req->FileIndex = cpu_to_le32(index);
 diff --git a/fs/coda/cache.c b/fs/coda/cache.c
-index 278f8fd..e69c52d 100644
+index 46ee6f2..89a9e7f 100644
 --- a/fs/coda/cache.c
 +++ b/fs/coda/cache.c
 @@ -24,7 +24,7 @@
 --- a/fs/coda/cache.c
 +++ b/fs/coda/cache.c
 @@ -24,7 +24,7 @@
@@ -60392,7 +60019,7 @@ index 278f8fd..e69c52d 100644
  
        return hit;
 diff --git a/fs/compat.c b/fs/compat.c
  
        return hit;
 diff --git a/fs/compat.c b/fs/compat.c
-index 66d3d3c..9c10175 100644
+index b13df99..6f6f4a3 100644
 --- a/fs/compat.c
 +++ b/fs/compat.c
 @@ -54,7 +54,7 @@
 --- a/fs/compat.c
 +++ b/fs/compat.c
 @@ -54,7 +54,7 @@
@@ -60422,7 +60049,7 @@ index 66d3d3c..9c10175 100644
                goto out;
        if (nr_segs > fast_segs) {
                ret = -ENOMEM;
                goto out;
        if (nr_segs > fast_segs) {
                ret = -ENOMEM;
-@@ -850,6 +850,7 @@ struct compat_old_linux_dirent {
+@@ -844,6 +844,7 @@ struct compat_old_linux_dirent {
  struct compat_readdir_callback {
        struct dir_context ctx;
        struct compat_old_linux_dirent __user *dirent;
  struct compat_readdir_callback {
        struct dir_context ctx;
        struct compat_old_linux_dirent __user *dirent;
@@ -60430,7 +60057,7 @@ index 66d3d3c..9c10175 100644
        int result;
  };
  
        int result;
  };
  
-@@ -867,6 +868,10 @@ static int compat_fillonedir(void *__buf, const char *name, int namlen,
+@@ -861,6 +862,10 @@ static int compat_fillonedir(void *__buf, const char *name, int namlen,
                buf->result = -EOVERFLOW;
                return -EOVERFLOW;
        }
                buf->result = -EOVERFLOW;
                return -EOVERFLOW;
        }
@@ -60441,7 +60068,7 @@ index 66d3d3c..9c10175 100644
        buf->result++;
        dirent = buf->dirent;
        if (!access_ok(VERIFY_WRITE, dirent,
        buf->result++;
        dirent = buf->dirent;
        if (!access_ok(VERIFY_WRITE, dirent,
-@@ -898,6 +903,7 @@ COMPAT_SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
+@@ -892,6 +897,7 @@ COMPAT_SYSCALL_DEFINE3(old_readdir, unsigned int, fd,
        if (!f.file)
                return -EBADF;
  
        if (!f.file)
                return -EBADF;
  
@@ -60449,7 +60076,7 @@ index 66d3d3c..9c10175 100644
        error = iterate_dir(f.file, &buf.ctx);
        if (buf.result)
                error = buf.result;
        error = iterate_dir(f.file, &buf.ctx);
        if (buf.result)
                error = buf.result;
-@@ -917,6 +923,7 @@ struct compat_getdents_callback {
+@@ -911,6 +917,7 @@ struct compat_getdents_callback {
        struct dir_context ctx;
        struct compat_linux_dirent __user *current_dir;
        struct compat_linux_dirent __user *previous;
        struct dir_context ctx;
        struct compat_linux_dirent __user *current_dir;
        struct compat_linux_dirent __user *previous;
@@ -60457,7 +60084,7 @@ index 66d3d3c..9c10175 100644
        int count;
        int error;
  };
        int count;
        int error;
  };
-@@ -938,6 +945,10 @@ static int compat_filldir(void *__buf, const char *name, int namlen,
+@@ -932,6 +939,10 @@ static int compat_filldir(void *__buf, const char *name, int namlen,
                buf->error = -EOVERFLOW;
                return -EOVERFLOW;
        }
                buf->error = -EOVERFLOW;
                return -EOVERFLOW;
        }
@@ -60468,7 +60095,7 @@ index 66d3d3c..9c10175 100644
        dirent = buf->previous;
        if (dirent) {
                if (__put_user(offset, &dirent->d_off))
        dirent = buf->previous;
        if (dirent) {
                if (__put_user(offset, &dirent->d_off))
-@@ -983,6 +994,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd,
+@@ -977,6 +988,7 @@ COMPAT_SYSCALL_DEFINE3(getdents, unsigned int, fd,
        if (!f.file)
                return -EBADF;
  
        if (!f.file)
                return -EBADF;
  
@@ -60476,7 +60103,7 @@ index 66d3d3c..9c10175 100644
        error = iterate_dir(f.file, &buf.ctx);
        if (error >= 0)
                error = buf.error;
        error = iterate_dir(f.file, &buf.ctx);
        if (error >= 0)
                error = buf.error;
-@@ -1003,6 +1015,7 @@ struct compat_getdents_callback64 {
+@@ -997,6 +1009,7 @@ struct compat_getdents_callback64 {
        struct dir_context ctx;
        struct linux_dirent64 __user *current_dir;
        struct linux_dirent64 __user *previous;
        struct dir_context ctx;
        struct linux_dirent64 __user *current_dir;
        struct linux_dirent64 __user *previous;
@@ -60484,7 +60111,7 @@ index 66d3d3c..9c10175 100644
        int count;
        int error;
  };
        int count;
        int error;
  };
-@@ -1019,6 +1032,10 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t
+@@ -1013,6 +1026,10 @@ static int compat_filldir64(void * __buf, const char * name, int namlen, loff_t
        buf->error = -EINVAL;   /* only used if we fail.. */
        if (reclen > buf->count)
                return -EINVAL;
        buf->error = -EINVAL;   /* only used if we fail.. */
        if (reclen > buf->count)
                return -EINVAL;
@@ -60495,7 +60122,7 @@ index 66d3d3c..9c10175 100644
        dirent = buf->previous;
  
        if (dirent) {
        dirent = buf->previous;
  
        if (dirent) {
-@@ -1068,6 +1085,7 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd,
+@@ -1062,6 +1079,7 @@ COMPAT_SYSCALL_DEFINE3(getdents64, unsigned int, fd,
        if (!f.file)
                return -EBADF;
  
        if (!f.file)
                return -EBADF;
  
@@ -60594,10 +60221,10 @@ index 668dcab..daebcd6 100644
                /*
                 * We'll have a dentry and an inode for
 diff --git a/fs/coredump.c b/fs/coredump.c
                /*
                 * We'll have a dentry and an inode for
 diff --git a/fs/coredump.c b/fs/coredump.c
-index a93f7e6..d58bcbe 100644
+index b5c86ff..0dac262 100644
 --- a/fs/coredump.c
 +++ b/fs/coredump.c
 --- a/fs/coredump.c
 +++ b/fs/coredump.c
-@@ -442,8 +442,8 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -450,8 +450,8 @@ static void wait_for_dump_helpers(struct file *file)
        struct pipe_inode_info *pipe = file->private_data;
  
        pipe_lock(pipe);
        struct pipe_inode_info *pipe = file->private_data;
  
        pipe_lock(pipe);
@@ -60608,7 +60235,7 @@ index a93f7e6..d58bcbe 100644
        wake_up_interruptible_sync(&pipe->wait);
        kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
        pipe_unlock(pipe);
        wake_up_interruptible_sync(&pipe->wait);
        kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
        pipe_unlock(pipe);
-@@ -452,11 +452,11 @@ static void wait_for_dump_helpers(struct file *file)
+@@ -460,11 +460,11 @@ static void wait_for_dump_helpers(struct file *file)
         * We actually want wait_event_freezable() but then we need
         * to clear TIF_SIGPENDING and improve dump_interrupted().
         */
         * We actually want wait_event_freezable() but then we need
         * to clear TIF_SIGPENDING and improve dump_interrupted().
         */
@@ -60623,7 +60250,7 @@ index a93f7e6..d58bcbe 100644
        pipe_unlock(pipe);
  }
  
        pipe_unlock(pipe);
  }
  
-@@ -503,7 +503,9 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -511,7 +511,9 @@ void do_coredump(const siginfo_t *siginfo)
        struct files_struct *displaced;
        bool need_nonrelative = false;
        bool core_dumped = false;
        struct files_struct *displaced;
        bool need_nonrelative = false;
        bool core_dumped = false;
@@ -60634,7 +60261,7 @@ index a93f7e6..d58bcbe 100644
        struct coredump_params cprm = {
                .siginfo = siginfo,
                .regs = signal_pt_regs(),
        struct coredump_params cprm = {
                .siginfo = siginfo,
                .regs = signal_pt_regs(),
-@@ -516,12 +518,17 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -524,12 +526,17 @@ void do_coredump(const siginfo_t *siginfo)
                .mm_flags = mm->flags,
        };
  
                .mm_flags = mm->flags,
        };
  
@@ -60654,7 +60281,7 @@ index a93f7e6..d58bcbe 100644
                goto fail;
  
        cred = prepare_creds();
                goto fail;
  
        cred = prepare_creds();
-@@ -540,7 +547,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -548,7 +555,7 @@ void do_coredump(const siginfo_t *siginfo)
                need_nonrelative = true;
        }
  
                need_nonrelative = true;
        }
  
@@ -60663,7 +60290,7 @@ index a93f7e6..d58bcbe 100644
        if (retval < 0)
                goto fail_creds;
  
        if (retval < 0)
                goto fail_creds;
  
-@@ -583,7 +590,7 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -591,7 +598,7 @@ void do_coredump(const siginfo_t *siginfo)
                }
                cprm.limit = RLIM_INFINITY;
  
                }
                cprm.limit = RLIM_INFINITY;
  
@@ -60672,7 +60299,7 @@ index a93f7e6..d58bcbe 100644
                if (core_pipe_limit && (core_pipe_limit < dump_count)) {
                        printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n",
                               task_tgid_vnr(current), current->comm);
                if (core_pipe_limit && (core_pipe_limit < dump_count)) {
                        printk(KERN_WARNING "Pid %d(%s) over core_pipe_limit\n",
                               task_tgid_vnr(current), current->comm);
-@@ -615,6 +622,8 @@ void do_coredump(const siginfo_t *siginfo)
+@@ -623,6 +630,8 @@ void do_coredump(const siginfo_t *siginfo)
        } else {
                struct inode *inode;
  
        } else {
                struct inode *inode;
  
@@ -60681,7 +60308,7 @@ index a93f7e6..d58bcbe 100644
                if (cprm.limit < binfmt->min_coredump)
                        goto fail_unlock;
  
                if (cprm.limit < binfmt->min_coredump)
                        goto fail_unlock;
  
-@@ -673,7 +682,7 @@ close_fail:
+@@ -681,7 +690,7 @@ close_fail:
                filp_close(cprm.file, NULL);
  fail_dropcount:
        if (ispipe)
                filp_close(cprm.file, NULL);
  fail_dropcount:
        if (ispipe)
@@ -60690,7 +60317,7 @@ index a93f7e6..d58bcbe 100644
  fail_unlock:
        kfree(cn.corename);
        coredump_finish(mm, core_dumped);
  fail_unlock:
        kfree(cn.corename);
        coredump_finish(mm, core_dumped);
-@@ -694,6 +703,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr)
+@@ -702,6 +711,8 @@ int dump_emit(struct coredump_params *cprm, const void *addr, int nr)
        struct file *file = cprm->file;
        loff_t pos = file->f_pos;
        ssize_t n;
        struct file *file = cprm->file;
        loff_t pos = file->f_pos;
        ssize_t n;
@@ -60700,10 +60327,10 @@ index a93f7e6..d58bcbe 100644
                return 0;
        while (nr) {
 diff --git a/fs/dcache.c b/fs/dcache.c
                return 0;
        while (nr) {
 diff --git a/fs/dcache.c b/fs/dcache.c
-index 34b40be8..2003532 100644
+index 03dca3c..f66c622 100644
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
 --- a/fs/dcache.c
 +++ b/fs/dcache.c
-@@ -478,7 +478,7 @@ static void __dentry_kill(struct dentry *dentry)
+@@ -508,7 +508,7 @@ static void __dentry_kill(struct dentry *dentry)
         * dentry_iput drops the locks, at which point nobody (except
         * transient RCU lookups) can reach this dentry.
         */
         * dentry_iput drops the locks, at which point nobody (except
         * transient RCU lookups) can reach this dentry.
         */
@@ -60712,7 +60339,7 @@ index 34b40be8..2003532 100644
        this_cpu_dec(nr_dentry);
        if (dentry->d_op && dentry->d_op->d_release)
                dentry->d_op->d_release(dentry);
        this_cpu_dec(nr_dentry);
        if (dentry->d_op && dentry->d_op->d_release)
                dentry->d_op->d_release(dentry);
-@@ -531,7 +531,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
+@@ -561,7 +561,7 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
        struct dentry *parent = dentry->d_parent;
        if (IS_ROOT(dentry))
                return NULL;
        struct dentry *parent = dentry->d_parent;
        if (IS_ROOT(dentry))
                return NULL;
@@ -60721,7 +60348,7 @@ index 34b40be8..2003532 100644
                return NULL;
        if (likely(spin_trylock(&parent->d_lock)))
                return parent;
                return NULL;
        if (likely(spin_trylock(&parent->d_lock)))
                return parent;
-@@ -608,7 +608,7 @@ repeat:
+@@ -638,7 +638,7 @@ repeat:
                dentry->d_flags |= DCACHE_REFERENCED;
        dentry_lru_add(dentry);
  
                dentry->d_flags |= DCACHE_REFERENCED;
        dentry_lru_add(dentry);
  
@@ -60730,16 +60357,7 @@ index 34b40be8..2003532 100644
        spin_unlock(&dentry->d_lock);
        return;
  
        spin_unlock(&dentry->d_lock);
        return;
  
-@@ -663,7 +663,7 @@ int d_invalidate(struct dentry * dentry)
-        * We also need to leave mountpoints alone,
-        * directory or not.
-        */
--      if (dentry->d_lockref.count > 1 && dentry->d_inode) {
-+      if (__lockref_read(&dentry->d_lockref) > 1 && dentry->d_inode) {
-               if (S_ISDIR(dentry->d_inode->i_mode) || d_mountpoint(dentry)) {
-                       spin_unlock(&dentry->d_lock);
-                       return -EBUSY;
-@@ -679,7 +679,7 @@ EXPORT_SYMBOL(d_invalidate);
+@@ -653,7 +653,7 @@ EXPORT_SYMBOL(dput);
  /* This must be called with d_lock held */
  static inline void __dget_dlock(struct dentry *dentry)
  {
  /* This must be called with d_lock held */
  static inline void __dget_dlock(struct dentry *dentry)
  {
@@ -60748,7 +60366,7 @@ index 34b40be8..2003532 100644
  }
  
  static inline void __dget(struct dentry *dentry)
  }
  
  static inline void __dget(struct dentry *dentry)
-@@ -720,8 +720,8 @@ repeat:
+@@ -694,8 +694,8 @@ repeat:
                goto repeat;
        }
        rcu_read_unlock();
                goto repeat;
        }
        rcu_read_unlock();
@@ -60759,16 +60377,19 @@ index 34b40be8..2003532 100644
        spin_unlock(&ret->d_lock);
        return ret;
  }
        spin_unlock(&ret->d_lock);
        return ret;
  }
-@@ -798,7 +798,7 @@ restart:
+@@ -773,9 +773,9 @@ restart:
        spin_lock(&inode->i_lock);
        spin_lock(&inode->i_lock);
-       hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
+       hlist_for_each_entry(dentry, &inode->i_dentry, d_u.d_alias) {
                spin_lock(&dentry->d_lock);
 -              if (!dentry->d_lockref.count) {
 +              if (!__lockref_read(&dentry->d_lockref)) {
                spin_lock(&dentry->d_lock);
 -              if (!dentry->d_lockref.count) {
 +              if (!__lockref_read(&dentry->d_lockref)) {
-                       /*
-                        * inform the fs via d_prune that this dentry
-                        * is about to be unhashed and destroyed.
-@@ -841,7 +841,7 @@ static void shrink_dentry_list(struct list_head *list)
+                       struct dentry *parent = lock_parent(dentry);
+-                      if (likely(!dentry->d_lockref.count)) {
++                      if (likely(!__lockref_read(&dentry->d_lockref))) {
+                               __dentry_kill(dentry);
+                               dput(parent);
+                               goto restart;
+@@ -810,7 +810,7 @@ static void shrink_dentry_list(struct list_head *list)
                 * We found an inuse dentry which was not removed from
                 * the LRU because of laziness during lookup. Do not free it.
                 */
                 * We found an inuse dentry which was not removed from
                 * the LRU because of laziness during lookup. Do not free it.
                 */
@@ -60777,7 +60398,7 @@ index 34b40be8..2003532 100644
                        spin_unlock(&dentry->d_lock);
                        if (parent)
                                spin_unlock(&parent->d_lock);
                        spin_unlock(&dentry->d_lock);
                        if (parent)
                                spin_unlock(&parent->d_lock);
-@@ -879,8 +879,8 @@ static void shrink_dentry_list(struct list_head *list)
+@@ -848,8 +848,8 @@ static void shrink_dentry_list(struct list_head *list)
                dentry = parent;
                while (dentry && !lockref_put_or_lock(&dentry->d_lockref)) {
                        parent = lock_parent(dentry);
                dentry = parent;
                while (dentry && !lockref_put_or_lock(&dentry->d_lockref)) {
                        parent = lock_parent(dentry);
@@ -60788,7 +60409,7 @@ index 34b40be8..2003532 100644
                                spin_unlock(&dentry->d_lock);
                                if (parent)
                                        spin_unlock(&parent->d_lock);
                                spin_unlock(&dentry->d_lock);
                                if (parent)
                                        spin_unlock(&parent->d_lock);
-@@ -920,7 +920,7 @@ dentry_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
+@@ -889,7 +889,7 @@ dentry_lru_isolate(struct list_head *item, spinlock_t *lru_lock, void *arg)
         * counts, just remove them from the LRU. Otherwise give them
         * another pass through the LRU.
         */
         * counts, just remove them from the LRU. Otherwise give them
         * another pass through the LRU.
         */
@@ -60797,15 +60418,7 @@ index 34b40be8..2003532 100644
                d_lru_isolate(dentry);
                spin_unlock(&dentry->d_lock);
                return LRU_REMOVED;
                d_lru_isolate(dentry);
                spin_unlock(&dentry->d_lock);
                return LRU_REMOVED;
-@@ -1149,6 +1149,7 @@ out_unlock:
-       return;
- rename_retry:
-+      done_seqretry(&rename_lock, seq);
-       if (!retry)
-               return;
-       seq = 1;
-@@ -1255,7 +1256,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
+@@ -1225,7 +1225,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
        } else {
                if (dentry->d_flags & DCACHE_LRU_LIST)
                        d_lru_del(dentry);
        } else {
                if (dentry->d_flags & DCACHE_LRU_LIST)
                        d_lru_del(dentry);
@@ -60814,7 +60427,7 @@ index 34b40be8..2003532 100644
                        d_shrink_add(dentry, &data->dispose);
                        data->found++;
                }
                        d_shrink_add(dentry, &data->dispose);
                        data->found++;
                }
-@@ -1303,7 +1304,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
+@@ -1273,7 +1273,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
                return D_WALK_CONTINUE;
  
        /* root with refcount 1 is fine */
                return D_WALK_CONTINUE;
  
        /* root with refcount 1 is fine */
@@ -60823,7 +60436,7 @@ index 34b40be8..2003532 100644
                return D_WALK_CONTINUE;
  
        printk(KERN_ERR "BUG: Dentry %p{i=%lx,n=%pd} "
                return D_WALK_CONTINUE;
  
        printk(KERN_ERR "BUG: Dentry %p{i=%lx,n=%pd} "
-@@ -1312,7 +1313,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
+@@ -1282,7 +1282,7 @@ static enum d_walk_ret umount_check(void *_data, struct dentry *dentry)
                       dentry->d_inode ?
                       dentry->d_inode->i_ino : 0UL,
                       dentry,
                       dentry->d_inode ?
                       dentry->d_inode->i_ino : 0UL,
                       dentry,
@@ -60832,16 +60445,16 @@ index 34b40be8..2003532 100644
                       dentry->d_sb->s_type->name,
                       dentry->d_sb->s_id);
        WARN_ON(1);
                       dentry->d_sb->s_type->name,
                       dentry->d_sb->s_id);
        WARN_ON(1);
-@@ -1438,7 +1439,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
-        */
+@@ -1423,7 +1423,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
        dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
        if (name->len > DNAME_INLINE_LEN-1) {
        dentry->d_iname[DNAME_INLINE_LEN-1] = 0;
        if (name->len > DNAME_INLINE_LEN-1) {
--              dname = kmalloc(name->len + 1, GFP_KERNEL);
-+              dname = kmalloc(round_up(name->len + 1, sizeof(unsigned long)), GFP_KERNEL);
-               if (!dname) {
+               size_t size = offsetof(struct external_name, name[1]);
+-              struct external_name *p = kmalloc(size + name->len, GFP_KERNEL);
++              struct external_name *p = kmalloc(round_up(size + name->len, sizeof(unsigned long)), GFP_KERNEL);
+               if (!p) {
                        kmem_cache_free(dentry_cache, dentry); 
                        return NULL;
                        kmem_cache_free(dentry_cache, dentry); 
                        return NULL;
-@@ -1456,7 +1457,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
+@@ -1443,7 +1443,7 @@ struct dentry *__d_alloc(struct super_block *sb, const struct qstr *name)
        smp_wmb();
        dentry->d_name.name = dname;
  
        smp_wmb();
        dentry->d_name.name = dname;
  
@@ -60850,7 +60463,7 @@ index 34b40be8..2003532 100644
        dentry->d_flags = 0;
        spin_lock_init(&dentry->d_lock);
        seqcount_init(&dentry->d_seq);
        dentry->d_flags = 0;
        spin_lock_init(&dentry->d_lock);
        seqcount_init(&dentry->d_seq);
-@@ -2196,7 +2197,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
+@@ -2183,7 +2183,7 @@ struct dentry *__d_lookup(const struct dentry *parent, const struct qstr *name)
                                goto next;
                }
  
                                goto next;
                }
  
@@ -60859,7 +60472,7 @@ index 34b40be8..2003532 100644
                found = dentry;
                spin_unlock(&dentry->d_lock);
                break;
                found = dentry;
                spin_unlock(&dentry->d_lock);
                break;
-@@ -2295,7 +2296,7 @@ again:
+@@ -2282,7 +2282,7 @@ again:
        spin_lock(&dentry->d_lock);
        inode = dentry->d_inode;
        isdir = S_ISDIR(inode->i_mode);
        spin_lock(&dentry->d_lock);
        inode = dentry->d_inode;
        isdir = S_ISDIR(inode->i_mode);
@@ -60868,7 +60481,7 @@ index 34b40be8..2003532 100644
                if (!spin_trylock(&inode->i_lock)) {
                        spin_unlock(&dentry->d_lock);
                        cpu_relax();
                if (!spin_trylock(&inode->i_lock)) {
                        spin_unlock(&dentry->d_lock);
                        cpu_relax();
-@@ -3307,7 +3308,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry)
+@@ -3308,7 +3308,7 @@ static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry)
  
                if (!(dentry->d_flags & DCACHE_GENOCIDE)) {
                        dentry->d_flags |= DCACHE_GENOCIDE;
  
                if (!(dentry->d_flags & DCACHE_GENOCIDE)) {
                        dentry->d_flags |= DCACHE_GENOCIDE;
@@ -60877,7 +60490,7 @@ index 34b40be8..2003532 100644
                }
        }
        return D_WALK_CONTINUE;
                }
        }
        return D_WALK_CONTINUE;
-@@ -3423,7 +3424,8 @@ void __init vfs_caches_init(unsigned long mempages)
+@@ -3424,7 +3424,8 @@ void __init vfs_caches_init(unsigned long mempages)
        mempages -= reserve;
  
        names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,
        mempages -= reserve;
  
        names_cachep = kmem_cache_create("names_cache", PATH_MAX, 0,
@@ -60888,7 +60501,7 @@ index 34b40be8..2003532 100644
        dcache_init();
        inode_init();
 diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
        dcache_init();
        inode_init();
 diff --git a/fs/debugfs/inode.c b/fs/debugfs/inode.c
-index 1e3b99d..6512101 100644
+index 05f2960..b012481 100644
 --- a/fs/debugfs/inode.c
 +++ b/fs/debugfs/inode.c
 @@ -416,7 +416,11 @@ EXPORT_SYMBOL_GPL(debugfs_create_file);
 --- a/fs/debugfs/inode.c
 +++ b/fs/debugfs/inode.c
 @@ -416,7 +416,11 @@ EXPORT_SYMBOL_GPL(debugfs_create_file);
@@ -60904,10 +60517,10 @@ index 1e3b99d..6512101 100644
  }
  EXPORT_SYMBOL_GPL(debugfs_create_dir);
 diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
  }
  EXPORT_SYMBOL_GPL(debugfs_create_dir);
 diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
-index 57ee4c5..ecb13b0 100644
+index 1686dc2..9611c50 100644
 --- a/fs/ecryptfs/inode.c
 +++ b/fs/ecryptfs/inode.c
 --- a/fs/ecryptfs/inode.c
 +++ b/fs/ecryptfs/inode.c
-@@ -673,7 +673,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
+@@ -664,7 +664,7 @@ static char *ecryptfs_readlink_lower(struct dentry *dentry, size_t *bufsiz)
        old_fs = get_fs();
        set_fs(get_ds());
        rc = lower_dentry->d_inode->i_op->readlink(lower_dentry,
        old_fs = get_fs();
        set_fs(get_ds());
        rc = lower_dentry->d_inode->i_op->readlink(lower_dentry,
@@ -60930,7 +60543,7 @@ index e4141f2..d8263e8 100644
                i += packet_length_size;
                if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size))
 diff --git a/fs/exec.c b/fs/exec.c
                i += packet_length_size;
                if (copy_to_user(&buf[i], msg_ctx->msg, msg_ctx->msg_size))
 diff --git a/fs/exec.c b/fs/exec.c
-index a2b42a9..1e924b3 100644
+index 7302b75..7d61d19 100644
 --- a/fs/exec.c
 +++ b/fs/exec.c
 @@ -56,8 +56,20 @@
 --- a/fs/exec.c
 +++ b/fs/exec.c
 @@ -56,8 +56,20 @@
@@ -61256,7 +60869,7 @@ index a2b42a9..1e924b3 100644
                bprm->unsafe |= LSM_UNSAFE_SHARE;
        else
                p->fs->in_exec = 1;
                bprm->unsafe |= LSM_UNSAFE_SHARE;
        else
                p->fs->in_exec = 1;
-@@ -1419,6 +1498,31 @@ static int exec_binprm(struct linux_binprm *bprm)
+@@ -1424,6 +1503,31 @@ static int exec_binprm(struct linux_binprm *bprm)
        return ret;
  }
  
        return ret;
  }
  
@@ -61288,7 +60901,7 @@ index a2b42a9..1e924b3 100644
  /*
   * sys_execve() executes a new program.
   */
  /*
   * sys_execve() executes a new program.
   */
-@@ -1426,6 +1530,11 @@ static int do_execve_common(struct filename *filename,
+@@ -1431,6 +1535,11 @@ static int do_execve_common(struct filename *filename,
                                struct user_arg_ptr argv,
                                struct user_arg_ptr envp)
  {
                                struct user_arg_ptr argv,
                                struct user_arg_ptr envp)
  {
@@ -61300,7 +60913,7 @@ index a2b42a9..1e924b3 100644
        struct linux_binprm *bprm;
        struct file *file;
        struct files_struct *displaced;
        struct linux_binprm *bprm;
        struct file *file;
        struct files_struct *displaced;
-@@ -1434,6 +1543,8 @@ static int do_execve_common(struct filename *filename,
+@@ -1439,6 +1548,8 @@ static int do_execve_common(struct filename *filename,
        if (IS_ERR(filename))
                return PTR_ERR(filename);
  
        if (IS_ERR(filename))
                return PTR_ERR(filename);
  
@@ -61309,7 +60922,7 @@ index a2b42a9..1e924b3 100644
        /*
         * We move the actual failure in case of RLIMIT_NPROC excess from
         * set*uid() to execve() because too many poorly written programs
        /*
         * We move the actual failure in case of RLIMIT_NPROC excess from
         * set*uid() to execve() because too many poorly written programs
-@@ -1471,11 +1582,21 @@ static int do_execve_common(struct filename *filename,
+@@ -1476,11 +1587,21 @@ static int do_execve_common(struct filename *filename,
        if (IS_ERR(file))
                goto out_unmark;
  
        if (IS_ERR(file))
                goto out_unmark;
  
@@ -61331,7 +60944,7 @@ index a2b42a9..1e924b3 100644
        retval = bprm_mm_init(bprm);
        if (retval)
                goto out_unmark;
        retval = bprm_mm_init(bprm);
        if (retval)
                goto out_unmark;
-@@ -1492,24 +1613,70 @@ static int do_execve_common(struct filename *filename,
+@@ -1497,24 +1618,70 @@ static int do_execve_common(struct filename *filename,
        if (retval < 0)
                goto out;
  
        if (retval < 0)
                goto out;
  
@@ -61406,7 +61019,7 @@ index a2b42a9..1e924b3 100644
        current->fs->in_exec = 0;
        current->in_execve = 0;
        acct_update_integrals(current);
        current->fs->in_exec = 0;
        current->in_execve = 0;
        acct_update_integrals(current);
-@@ -1520,6 +1687,14 @@ static int do_execve_common(struct filename *filename,
+@@ -1525,6 +1692,14 @@ static int do_execve_common(struct filename *filename,
                put_files_struct(displaced);
        return retval;
  
                put_files_struct(displaced);
        return retval;
  
@@ -61421,7 +61034,7 @@ index a2b42a9..1e924b3 100644
  out:
        if (bprm->mm) {
                acct_arg_size(bprm, 0);
  out:
        if (bprm->mm) {
                acct_arg_size(bprm, 0);
-@@ -1611,3 +1786,312 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename,
+@@ -1616,3 +1791,312 @@ COMPAT_SYSCALL_DEFINE3(execve, const char __user *, filename,
        return compat_do_execve(getname(filename), argv, envp);
  }
  #endif
        return compat_do_execve(getname(filename), argv, envp);
  }
  #endif
@@ -61751,6 +61364,33 @@ index 9f9992b..8b59411 100644
                return 0;
        }
        return 1;
                return 0;
        }
        return 1;
+diff --git a/fs/ext2/super.c b/fs/ext2/super.c
+index 170dc41..62f6b18 100644
+--- a/fs/ext2/super.c
++++ b/fs/ext2/super.c
+@@ -264,10 +264,8 @@ static int ext2_show_options(struct seq_file *seq, struct dentry *root)
+ #ifdef CONFIG_EXT2_FS_XATTR
+       if (test_opt(sb, XATTR_USER))
+               seq_puts(seq, ",user_xattr");
+-      if (!test_opt(sb, XATTR_USER) &&
+-          (def_mount_opts & EXT2_DEFM_XATTR_USER)) {
++      if (!test_opt(sb, XATTR_USER))
+               seq_puts(seq, ",nouser_xattr");
+-      }
+ #endif
+ #ifdef CONFIG_EXT2_FS_POSIX_ACL
+@@ -841,8 +839,8 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
+       if (def_mount_opts & EXT2_DEFM_UID16)
+               set_opt(sbi->s_mount_opt, NO_UID32);
+ #ifdef CONFIG_EXT2_FS_XATTR
+-      if (def_mount_opts & EXT2_DEFM_XATTR_USER)
+-              set_opt(sbi->s_mount_opt, XATTR_USER);
++      /* always enable user xattrs */
++      set_opt(sbi->s_mount_opt, XATTR_USER);
+ #endif
+ #ifdef CONFIG_EXT2_FS_POSIX_ACL
+       if (def_mount_opts & EXT2_DEFM_ACL)
 diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
 index 9142614..97484fa 100644
 --- a/fs/ext2/xattr.c
 diff --git a/fs/ext2/xattr.c b/fs/ext2/xattr.c
 index 9142614..97484fa 100644
 --- a/fs/ext2/xattr.c
@@ -61793,6 +61433,33 @@ index 158b5d4..2432610 100644
                return 0;
        }
        return 1;
                return 0;
        }
        return 1;
+diff --git a/fs/ext3/super.c b/fs/ext3/super.c
+index eb742d0..c19f705 100644
+--- a/fs/ext3/super.c
++++ b/fs/ext3/super.c
+@@ -649,10 +649,8 @@ static int ext3_show_options(struct seq_file *seq, struct dentry *root)
+ #ifdef CONFIG_EXT3_FS_XATTR
+       if (test_opt(sb, XATTR_USER))
+               seq_puts(seq, ",user_xattr");
+-      if (!test_opt(sb, XATTR_USER) &&
+-          (def_mount_opts & EXT3_DEFM_XATTR_USER)) {
++      if (!test_opt(sb, XATTR_USER))
+               seq_puts(seq, ",nouser_xattr");
+-      }
+ #endif
+ #ifdef CONFIG_EXT3_FS_POSIX_ACL
+       if (test_opt(sb, POSIX_ACL))
+@@ -1749,8 +1747,8 @@ static int ext3_fill_super (struct super_block *sb, void *data, int silent)
+       if (def_mount_opts & EXT3_DEFM_UID16)
+               set_opt(sbi->s_mount_opt, NO_UID32);
+ #ifdef CONFIG_EXT3_FS_XATTR
+-      if (def_mount_opts & EXT3_DEFM_XATTR_USER)
+-              set_opt(sbi->s_mount_opt, XATTR_USER);
++      /* always enable user xattrs */
++      set_opt(sbi->s_mount_opt, XATTR_USER);
+ #endif
+ #ifdef CONFIG_EXT3_FS_POSIX_ACL
+       if (def_mount_opts & EXT3_DEFM_ACL)
 diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c
 index c6874be..f8a6ae8 100644
 --- a/fs/ext3/xattr.c
 diff --git a/fs/ext3/xattr.c b/fs/ext3/xattr.c
 index c6874be..f8a6ae8 100644
 --- a/fs/ext3/xattr.c
@@ -61819,7 +61486,7 @@ index c6874be..f8a6ae8 100644
  
  static int
 diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
  
  static int
 diff --git a/fs/ext4/balloc.c b/fs/ext4/balloc.c
-index e069155..b825b08 100644
+index 83a6f49..d4e4d03 100644
 --- a/fs/ext4/balloc.c
 +++ b/fs/ext4/balloc.c
 @@ -557,8 +557,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
 --- a/fs/ext4/balloc.c
 +++ b/fs/ext4/balloc.c
 @@ -557,8 +557,8 @@ static int ext4_has_free_clusters(struct ext4_sb_info *sbi,
@@ -61834,10 +61501,10 @@ index e069155..b825b08 100644
                if (free_clusters >= (nclusters + dirty_clusters +
                                      resv_clusters))
 diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
                if (free_clusters >= (nclusters + dirty_clusters +
                                      resv_clusters))
 diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
-index 96ac9d3..1c30e7e6 100644
+index c55a1fa..9904ebb 100644
 --- a/fs/ext4/ext4.h
 +++ b/fs/ext4/ext4.h
 --- a/fs/ext4/ext4.h
 +++ b/fs/ext4/ext4.h
-@@ -1275,19 +1275,19 @@ struct ext4_sb_info {
+@@ -1279,19 +1279,19 @@ struct ext4_sb_info {
        unsigned long s_mb_last_start;
  
        /* stats for buddy allocator */
        unsigned long s_mb_last_start;
  
        /* stats for buddy allocator */
@@ -61868,7 +61535,7 @@ index 96ac9d3..1c30e7e6 100644
  
        /* locality groups */
 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
  
        /* locality groups */
 diff --git a/fs/ext4/mballoc.c b/fs/ext4/mballoc.c
-index 8b0f9ef..cb9f620 100644
+index dbfe15c..9a6ee8d 100644
 --- a/fs/ext4/mballoc.c
 +++ b/fs/ext4/mballoc.c
 @@ -1901,7 +1901,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac,
 --- a/fs/ext4/mballoc.c
 +++ b/fs/ext4/mballoc.c
 @@ -1901,7 +1901,7 @@ void ext4_mb_simple_scan_group(struct ext4_allocation_context *ac,
@@ -61925,7 +61592,7 @@ index 8b0f9ef..cb9f620 100644
        }
  
        free_percpu(sbi->s_locality_groups);
        }
  
        free_percpu(sbi->s_locality_groups);
-@@ -3192,16 +3192,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac)
+@@ -3191,16 +3191,16 @@ static void ext4_mb_collect_stats(struct ext4_allocation_context *ac)
        struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
  
        if (sbi->s_mb_stats && ac->ac_g_ex.fe_len > 1) {
        struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
  
        if (sbi->s_mb_stats && ac->ac_g_ex.fe_len > 1) {
@@ -61948,7 +61615,7 @@ index 8b0f9ef..cb9f620 100644
        }
  
        if (ac->ac_op == EXT4_MB_HISTORY_ALLOC)
        }
  
        if (ac->ac_op == EXT4_MB_HISTORY_ALLOC)
-@@ -3628,7 +3628,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac)
+@@ -3627,7 +3627,7 @@ ext4_mb_new_inode_pa(struct ext4_allocation_context *ac)
        trace_ext4_mb_new_inode_pa(ac, pa);
  
        ext4_mb_use_inode_pa(ac, pa);
        trace_ext4_mb_new_inode_pa(ac, pa);
  
        ext4_mb_use_inode_pa(ac, pa);
@@ -61957,7 +61624,7 @@ index 8b0f9ef..cb9f620 100644
  
        ei = EXT4_I(ac->ac_inode);
        grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group);
  
        ei = EXT4_I(ac->ac_inode);
        grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group);
-@@ -3688,7 +3688,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac)
+@@ -3687,7 +3687,7 @@ ext4_mb_new_group_pa(struct ext4_allocation_context *ac)
        trace_ext4_mb_new_group_pa(ac, pa);
  
        ext4_mb_use_group_pa(ac, pa);
        trace_ext4_mb_new_group_pa(ac, pa);
  
        ext4_mb_use_group_pa(ac, pa);
@@ -61966,7 +61633,7 @@ index 8b0f9ef..cb9f620 100644
  
        grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group);
        lg = ac->ac_lg;
  
        grp = ext4_get_group_info(sb, ac->ac_b_ex.fe_group);
        lg = ac->ac_lg;
-@@ -3777,7 +3777,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh,
+@@ -3776,7 +3776,7 @@ ext4_mb_release_inode_pa(struct ext4_buddy *e4b, struct buffer_head *bitmap_bh,
                 * from the bitmap and continue.
                 */
        }
                 * from the bitmap and continue.
                 */
        }
@@ -61975,7 +61642,7 @@ index 8b0f9ef..cb9f620 100644
  
        return err;
  }
  
        return err;
  }
-@@ -3795,7 +3795,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b,
+@@ -3794,7 +3794,7 @@ ext4_mb_release_group_pa(struct ext4_buddy *e4b,
        ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit);
        BUG_ON(group != e4b->bd_group && pa->pa_len != 0);
        mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len);
        ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit);
        BUG_ON(group != e4b->bd_group && pa->pa_len != 0);
        mb_free_blocks(pa->pa_inode, e4b, bit, pa->pa_len);
@@ -61998,10 +61665,10 @@ index 8313ca3..8a37d08 100644
                       "MMP failure info: last update time: %llu, last update "
                       "node: %s, last update device: %s\n",
 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
                       "MMP failure info: last update time: %llu, last update "
                       "node: %s, last update device: %s\n",
 diff --git a/fs/ext4/super.c b/fs/ext4/super.c
-index b1f0ac7..77e9a05 100644
+index 2c9e686..6a40edc 100644
 --- a/fs/ext4/super.c
 +++ b/fs/ext4/super.c
 --- a/fs/ext4/super.c
 +++ b/fs/ext4/super.c
-@@ -1274,7 +1274,7 @@ static ext4_fsblk_t get_sb_block(void **data)
+@@ -1254,7 +1254,7 @@ static ext4_fsblk_t get_sb_block(void **data)
  }
  
  #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
  }
  
  #define DEFAULT_JOURNAL_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
@@ -62010,7 +61677,7 @@ index b1f0ac7..77e9a05 100644
        "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
  
  #ifdef CONFIG_QUOTA
        "Contact linux-ext4@vger.kernel.org if you think we should keep it.\n";
  
  #ifdef CONFIG_QUOTA
-@@ -2454,7 +2454,7 @@ struct ext4_attr {
+@@ -2434,7 +2434,7 @@ struct ext4_attr {
                int offset;
                int deprecated_val;
        } u;
                int offset;
                int deprecated_val;
        } u;
@@ -62020,7 +61687,7 @@ index b1f0ac7..77e9a05 100644
  static int parse_strtoull(const char *buf,
                unsigned long long max, unsigned long long *value)
 diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
  static int parse_strtoull(const char *buf,
                unsigned long long max, unsigned long long *value)
 diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c
-index 2d1e5803..1b082d415 100644
+index 1e09fc7..0400dd4 100644
 --- a/fs/ext4/xattr.c
 +++ b/fs/ext4/xattr.c
 @@ -399,7 +399,7 @@ static int
 --- a/fs/ext4/xattr.c
 +++ b/fs/ext4/xattr.c
 @@ -399,7 +399,7 @@ static int
@@ -62045,21 +61712,20 @@ index 2d1e5803..1b082d415 100644
  
  static int
 diff --git a/fs/fcntl.c b/fs/fcntl.c
  
  static int
 diff --git a/fs/fcntl.c b/fs/fcntl.c
-index 22d1c3d..600cf7e 100644
+index 99d440a..eb979d1 100644
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
 --- a/fs/fcntl.c
 +++ b/fs/fcntl.c
-@@ -107,6 +107,11 @@ int __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
-       if (err)
-               return err;
+@@ -102,6 +102,10 @@ void __f_setown(struct file *filp, struct pid *pid, enum pid_type type,
+               int force)
+ {
+       security_file_set_fowner(filp);
 +      if (gr_handle_chroot_fowner(pid, type))
 +      if (gr_handle_chroot_fowner(pid, type))
-+              return -ENOENT;
++              return;
 +      if (gr_check_protected_task_fowner(pid, type))
 +      if (gr_check_protected_task_fowner(pid, type))
-+              return -EACCES;
-+
++              return;
        f_modown(filp, pid, type, force);
        f_modown(filp, pid, type, force);
-       return 0;
  }
  }
+ EXPORT_SYMBOL(__f_setown);
 diff --git a/fs/fhandle.c b/fs/fhandle.c
 index 999ff5c..ac037c9 100644
 --- a/fs/fhandle.c
 diff --git a/fs/fhandle.c b/fs/fhandle.c
 index 999ff5c..ac037c9 100644
 --- a/fs/fhandle.c
@@ -62092,7 +61758,7 @@ index 999ff5c..ac037c9 100644
                goto out_err;
        }
 diff --git a/fs/file.c b/fs/file.c
                goto out_err;
        }
 diff --git a/fs/file.c b/fs/file.c
-index 66923fe..2849783 100644
+index ab3eb6a..8de2392 100644
 --- a/fs/file.c
 +++ b/fs/file.c
 @@ -16,6 +16,7 @@
 --- a/fs/file.c
 +++ b/fs/file.c
 @@ -16,6 +16,7 @@
@@ -62121,7 +61787,7 @@ index 66923fe..2849783 100644
  {
        struct fdtable *fdt;
  
  {
        struct fdtable *fdt;
  
-@@ -799,6 +800,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
+@@ -800,6 +801,7 @@ int replace_fd(unsigned fd, struct file *file, unsigned flags)
        if (!file)
                return __close_fd(files, fd);
  
        if (!file)
                return __close_fd(files, fd);
  
@@ -62129,7 +61795,7 @@ index 66923fe..2849783 100644
        if (fd >= rlimit(RLIMIT_NOFILE))
                return -EBADF;
  
        if (fd >= rlimit(RLIMIT_NOFILE))
                return -EBADF;
  
-@@ -825,6 +827,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
+@@ -826,6 +828,7 @@ SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags)
        if (unlikely(oldfd == newfd))
                return -EINVAL;
  
        if (unlikely(oldfd == newfd))
                return -EINVAL;
  
@@ -62137,7 +61803,7 @@ index 66923fe..2849783 100644
        if (newfd >= rlimit(RLIMIT_NOFILE))
                return -EBADF;
  
        if (newfd >= rlimit(RLIMIT_NOFILE))
                return -EBADF;
  
-@@ -880,6 +883,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
+@@ -881,6 +884,7 @@ SYSCALL_DEFINE1(dup, unsigned int, fildes)
  int f_dupfd(unsigned int from, struct file *file, unsigned flags)
  {
        int err;
  int f_dupfd(unsigned int from, struct file *file, unsigned flags)
  {
        int err;
@@ -63678,10 +63344,10 @@ index ca88731..8e9c55d 100644
        }
  
 diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
        }
  
 diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
-index de1d84a..fd69c0c 100644
+index dbab798..fefa22b 100644
 --- a/fs/fuse/dir.c
 +++ b/fs/fuse/dir.c
 --- a/fs/fuse/dir.c
 +++ b/fs/fuse/dir.c
-@@ -1479,7 +1479,7 @@ static char *read_link(struct dentry *dentry)
+@@ -1474,7 +1474,7 @@ static char *read_link(struct dentry *dentry)
        return link;
  }
  
        return link;
  }
  
@@ -63810,7 +63476,7 @@ index 09ed551..45684f8 100644
  
  /*
 diff --git a/fs/jfs/super.c b/fs/jfs/super.c
  
  /*
 diff --git a/fs/jfs/super.c b/fs/jfs/super.c
-index adf8cb0..bb935fa 100644
+index 93e897e..a863de4 100644
 --- a/fs/jfs/super.c
 +++ b/fs/jfs/super.c
 @@ -893,7 +893,7 @@ static int __init init_jfs_fs(void)
 --- a/fs/jfs/super.c
 +++ b/fs/jfs/super.c
 @@ -893,7 +893,7 @@ static int __init init_jfs_fs(void)
@@ -63823,7 +63489,7 @@ index adf8cb0..bb935fa 100644
        if (jfs_inode_cachep == NULL)
                return -ENOMEM;
 diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
        if (jfs_inode_cachep == NULL)
                return -ENOMEM;
 diff --git a/fs/kernfs/dir.c b/fs/kernfs/dir.c
-index a693f5b..82276a1 100644
+index 1c77193..ba73e66 100644
 --- a/fs/kernfs/dir.c
 +++ b/fs/kernfs/dir.c
 @@ -182,7 +182,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn)
 --- a/fs/kernfs/dir.c
 +++ b/fs/kernfs/dir.c
 @@ -182,7 +182,7 @@ struct kernfs_node *kernfs_get_parent(struct kernfs_node *kn)
@@ -63835,6 +63501,19 @@ index a693f5b..82276a1 100644
  {
        unsigned long hash = init_name_hash();
        unsigned int len = strlen(name);
  {
        unsigned long hash = init_name_hash();
        unsigned int len = strlen(name);
+@@ -829,6 +829,12 @@ static int kernfs_iop_mkdir(struct inode *dir, struct dentry *dentry,
+       ret = scops->mkdir(parent, dentry->d_name.name, mode);
+       kernfs_put_active(parent);
++
++      if (!ret) {
++              struct dentry *dentry_ret = kernfs_iop_lookup(dir, dentry, 0);
++              ret = PTR_ERR_OR_ZERO(dentry_ret);
++      }
++
+       return ret;
+ }
 diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
 index 4429d6d..9831f52 100644
 --- a/fs/kernfs/file.c
 diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c
 index 4429d6d..9831f52 100644
 --- a/fs/kernfs/file.c
@@ -63914,13 +63593,13 @@ index 8a19889..4c3069a 100644
                free_page((unsigned long)page);
  }
 diff --git a/fs/libfs.c b/fs/libfs.c
                free_page((unsigned long)page);
  }
 diff --git a/fs/libfs.c b/fs/libfs.c
-index 88e3e00..979c262 100644
+index 005843c..06c4191 100644
 --- a/fs/libfs.c
 +++ b/fs/libfs.c
 @@ -160,6 +160,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
  
        for (p = q->next; p != &dentry->d_subdirs; p = p->next) {
 --- a/fs/libfs.c
 +++ b/fs/libfs.c
 @@ -160,6 +160,9 @@ int dcache_readdir(struct file *file, struct dir_context *ctx)
  
        for (p = q->next; p != &dentry->d_subdirs; p = p->next) {
-               struct dentry *next = list_entry(p, struct dentry, d_u.d_child);
+               struct dentry *next = list_entry(p, struct dentry, d_child);
 +              char d_name[sizeof(next->d_iname)];
 +              const unsigned char *name;
 +
 +              char d_name[sizeof(next->d_iname)];
 +              const unsigned char *name;
 +
@@ -63969,10 +63648,10 @@ index acd3947..1f896e2 100644
        memcpy(c->data, &cookie, 4);
        c->len=4;
 diff --git a/fs/locks.c b/fs/locks.c
        memcpy(c->data, &cookie, 4);
        c->len=4;
 diff --git a/fs/locks.c b/fs/locks.c
-index bb08857..f65e8bf 100644
+index 735b8d3..dfc44a2 100644
 --- a/fs/locks.c
 +++ b/fs/locks.c
 --- a/fs/locks.c
 +++ b/fs/locks.c
-@@ -2350,7 +2350,7 @@ void locks_remove_file(struct file *filp)
+@@ -2374,7 +2374,7 @@ void locks_remove_file(struct file *filp)
        locks_remove_posix(filp, filp);
  
        if (filp->f_op->flock) {
        locks_remove_posix(filp, filp);
  
        if (filp->f_op->flock) {
@@ -63981,7 +63660,7 @@ index bb08857..f65e8bf 100644
                        .fl_owner = filp,
                        .fl_pid = current->tgid,
                        .fl_file = filp,
                        .fl_owner = filp,
                        .fl_pid = current->tgid,
                        .fl_file = filp,
-@@ -2358,9 +2358,9 @@ void locks_remove_file(struct file *filp)
+@@ -2382,9 +2382,9 @@ void locks_remove_file(struct file *filp)
                        .fl_type = F_UNLCK,
                        .fl_end = OFFSET_MAX,
                };
                        .fl_type = F_UNLCK,
                        .fl_end = OFFSET_MAX,
                };
@@ -63995,7 +63674,7 @@ index bb08857..f65e8bf 100644
  
        spin_lock(&inode->i_lock);
 diff --git a/fs/mount.h b/fs/mount.h
  
        spin_lock(&inode->i_lock);
 diff --git a/fs/mount.h b/fs/mount.h
-index 6740a62..ccb472f 100644
+index f82c628..9492b99 100644
 --- a/fs/mount.h
 +++ b/fs/mount.h
 @@ -11,7 +11,7 @@ struct mnt_namespace {
 --- a/fs/mount.h
 +++ b/fs/mount.h
 @@ -11,7 +11,7 @@ struct mnt_namespace {
@@ -64007,7 +63686,7 @@ index 6740a62..ccb472f 100644
  
  struct mnt_pcp {
        int mnt_count;
  
  struct mnt_pcp {
        int mnt_count;
-@@ -57,7 +57,7 @@ struct mount {
+@@ -62,7 +62,7 @@ struct mount {
        int mnt_expiry_mark;            /* true if marked for expiry */
        struct hlist_head mnt_pins;
        struct path mnt_ex_mountpoint;
        int mnt_expiry_mark;            /* true if marked for expiry */
        struct hlist_head mnt_pins;
        struct path mnt_ex_mountpoint;
@@ -64017,7 +63696,7 @@ index 6740a62..ccb472f 100644
  #define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
  
 diff --git a/fs/namei.c b/fs/namei.c
  #define MNT_NS_INTERNAL ERR_PTR(-EINVAL) /* distinct from any mnt_namespace */
  
 diff --git a/fs/namei.c b/fs/namei.c
-index bb02687..79cba2c 100644
+index db5fe86..d3dcc14 100644
 --- a/fs/namei.c
 +++ b/fs/namei.c
 @@ -331,17 +331,32 @@ int generic_permission(struct inode *inode, int mask)
 --- a/fs/namei.c
 +++ b/fs/namei.c
 @@ -331,17 +331,32 @@ int generic_permission(struct inode *inode, int mask)
@@ -64072,7 +63751,7 @@ index bb02687..79cba2c 100644
        return -EACCES;
  }
  EXPORT_SYMBOL(generic_permission);
        return -EACCES;
  }
  EXPORT_SYMBOL(generic_permission);
-@@ -823,7 +830,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
+@@ -824,7 +831,7 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
  {
        struct dentry *dentry = link->dentry;
        int error;
  {
        struct dentry *dentry = link->dentry;
        int error;
@@ -64081,7 +63760,7 @@ index bb02687..79cba2c 100644
  
        BUG_ON(nd->flags & LOOKUP_RCU);
  
  
        BUG_ON(nd->flags & LOOKUP_RCU);
  
-@@ -844,6 +851,12 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
+@@ -845,6 +852,12 @@ follow_link(struct path *link, struct nameidata *nd, void **p)
        if (error)
                goto out_put_nd_path;
  
        if (error)
                goto out_put_nd_path;
  
@@ -64094,7 +63773,7 @@ index bb02687..79cba2c 100644
        nd->last_type = LAST_BIND;
        *p = dentry->d_inode->i_op->follow_link(dentry, nd);
        error = PTR_ERR(*p);
        nd->last_type = LAST_BIND;
        *p = dentry->d_inode->i_op->follow_link(dentry, nd);
        error = PTR_ERR(*p);
-@@ -1607,6 +1620,8 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd)
+@@ -1608,6 +1621,8 @@ static inline int nested_symlink(struct path *path, struct nameidata *nd)
                if (res)
                        break;
                res = walk_component(nd, path, LOOKUP_FOLLOW);
                if (res)
                        break;
                res = walk_component(nd, path, LOOKUP_FOLLOW);
@@ -64103,7 +63782,7 @@ index bb02687..79cba2c 100644
                put_link(nd, &link, cookie);
        } while (res > 0);
  
                put_link(nd, &link, cookie);
        } while (res > 0);
  
-@@ -1679,7 +1694,7 @@ EXPORT_SYMBOL(full_name_hash);
+@@ -1680,7 +1695,7 @@ EXPORT_SYMBOL(full_name_hash);
  static inline u64 hash_name(const char *name)
  {
        unsigned long a, b, adata, bdata, mask, hash, len;
  static inline u64 hash_name(const char *name)
  {
        unsigned long a, b, adata, bdata, mask, hash, len;
@@ -64112,7 +63791,7 @@ index bb02687..79cba2c 100644
  
        hash = a = 0;
        len = -sizeof(unsigned long);
  
        hash = a = 0;
        len = -sizeof(unsigned long);
-@@ -1968,6 +1983,8 @@ static int path_lookupat(int dfd, const char *name,
+@@ -1969,6 +1984,8 @@ static int path_lookupat(int dfd, const char *name,
                        if (err)
                                break;
                        err = lookup_last(nd, &path);
                        if (err)
                                break;
                        err = lookup_last(nd, &path);
@@ -64121,7 +63800,7 @@ index bb02687..79cba2c 100644
                        put_link(nd, &link, cookie);
                }
        }
                        put_link(nd, &link, cookie);
                }
        }
-@@ -1975,6 +1992,13 @@ static int path_lookupat(int dfd, const char *name,
+@@ -1976,6 +1993,13 @@ static int path_lookupat(int dfd, const char *name,
        if (!err)
                err = complete_walk(nd);
  
        if (!err)
                err = complete_walk(nd);
  
@@ -64135,7 +63814,7 @@ index bb02687..79cba2c 100644
        if (!err && nd->flags & LOOKUP_DIRECTORY) {
                if (!d_can_lookup(nd->path.dentry)) {
                        path_put(&nd->path);
        if (!err && nd->flags & LOOKUP_DIRECTORY) {
                if (!d_can_lookup(nd->path.dentry)) {
                        path_put(&nd->path);
-@@ -2002,8 +2026,15 @@ static int filename_lookup(int dfd, struct filename *name,
+@@ -2004,8 +2028,15 @@ static int filename_lookup(int dfd, struct filename *name,
                retval = path_lookupat(dfd, name->name,
                                                flags | LOOKUP_REVAL, nd);
  
                retval = path_lookupat(dfd, name->name,
                                                flags | LOOKUP_REVAL, nd);
  
@@ -64152,7 +63831,7 @@ index bb02687..79cba2c 100644
        return retval;
  }
  
        return retval;
  }
  
-@@ -2585,6 +2616,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
+@@ -2582,6 +2613,13 @@ static int may_open(struct path *path, int acc_mode, int flag)
        if (flag & O_NOATIME && !inode_owner_or_capable(inode))
                return -EPERM;
  
        if (flag & O_NOATIME && !inode_owner_or_capable(inode))
                return -EPERM;
  
@@ -64166,7 +63845,7 @@ index bb02687..79cba2c 100644
        return 0;
  }
  
        return 0;
  }
  
-@@ -2816,7 +2854,7 @@ looked_up:
+@@ -2813,7 +2851,7 @@ looked_up:
   * cleared otherwise prior to returning.
   */
  static int lookup_open(struct nameidata *nd, struct path *path,
   * cleared otherwise prior to returning.
   */
  static int lookup_open(struct nameidata *nd, struct path *path,
@@ -64175,7 +63854,7 @@ index bb02687..79cba2c 100644
                        const struct open_flags *op,
                        bool got_write, int *opened)
  {
                        const struct open_flags *op,
                        bool got_write, int *opened)
  {
-@@ -2851,6 +2889,17 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -2848,6 +2886,17 @@ static int lookup_open(struct nameidata *nd, struct path *path,
        /* Negative dentry, just create the file */
        if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
                umode_t mode = op->mode;
        /* Negative dentry, just create the file */
        if (!dentry->d_inode && (op->open_flag & O_CREAT)) {
                umode_t mode = op->mode;
@@ -64193,7 +63872,7 @@ index bb02687..79cba2c 100644
                if (!IS_POSIXACL(dir->d_inode))
                        mode &= ~current_umask();
                /*
                if (!IS_POSIXACL(dir->d_inode))
                        mode &= ~current_umask();
                /*
-@@ -2872,6 +2921,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
+@@ -2869,6 +2918,8 @@ static int lookup_open(struct nameidata *nd, struct path *path,
                                   nd->flags & LOOKUP_EXCL);
                if (error)
                        goto out_dput;
                                   nd->flags & LOOKUP_EXCL);
                if (error)
                        goto out_dput;
@@ -64202,7 +63881,7 @@ index bb02687..79cba2c 100644
        }
  out_no_open:
        path->dentry = dentry;
        }
  out_no_open:
        path->dentry = dentry;
-@@ -2886,7 +2937,7 @@ out_dput:
+@@ -2883,7 +2934,7 @@ out_dput:
  /*
   * Handle the last step of open()
   */
  /*
   * Handle the last step of open()
   */
@@ -64211,7 +63890,7 @@ index bb02687..79cba2c 100644
                   struct file *file, const struct open_flags *op,
                   int *opened, struct filename *name)
  {
                   struct file *file, const struct open_flags *op,
                   int *opened, struct filename *name)
  {
-@@ -2936,6 +2987,15 @@ static int do_last(struct nameidata *nd, struct path *path,
+@@ -2933,6 +2984,15 @@ static int do_last(struct nameidata *nd, struct path *path,
                if (error)
                        return error;
  
                if (error)
                        return error;
  
@@ -64227,7 +63906,7 @@ index bb02687..79cba2c 100644
                audit_inode(name, dir, LOOKUP_PARENT);
                error = -EISDIR;
                /* trailing slashes? */
                audit_inode(name, dir, LOOKUP_PARENT);
                error = -EISDIR;
                /* trailing slashes? */
-@@ -2955,7 +3015,7 @@ retry_lookup:
+@@ -2952,7 +3012,7 @@ retry_lookup:
                 */
        }
        mutex_lock(&dir->d_inode->i_mutex);
                 */
        }
        mutex_lock(&dir->d_inode->i_mutex);
@@ -64236,7 +63915,7 @@ index bb02687..79cba2c 100644
        mutex_unlock(&dir->d_inode->i_mutex);
  
        if (error <= 0) {
        mutex_unlock(&dir->d_inode->i_mutex);
  
        if (error <= 0) {
-@@ -2979,11 +3039,28 @@ retry_lookup:
+@@ -2976,11 +3036,28 @@ retry_lookup:
                goto finish_open_created;
        }
  
                goto finish_open_created;
        }
  
@@ -64266,7 +63945,7 @@ index bb02687..79cba2c 100644
  
        /*
         * If atomic_open() acquired write access it is dropped now due to
  
        /*
         * If atomic_open() acquired write access it is dropped now due to
-@@ -3024,6 +3101,11 @@ finish_lookup:
+@@ -3021,6 +3098,11 @@ finish_lookup:
                        }
                }
                BUG_ON(inode != path->dentry->d_inode);
                        }
                }
                BUG_ON(inode != path->dentry->d_inode);
@@ -64278,15 +63957,7 @@ index bb02687..79cba2c 100644
                return 1;
        }
  
                return 1;
        }
  
-@@ -3033,7 +3115,6 @@ finish_lookup:
-               save_parent.dentry = nd->path.dentry;
-               save_parent.mnt = mntget(path->mnt);
-               nd->path.dentry = path->dentry;
--
-       }
-       nd->inode = inode;
-       /* Why this, you ask?  _Now_ we might have grown LOOKUP_JUMPED... */
-@@ -3043,7 +3124,18 @@ finish_open:
+@@ -3040,7 +3122,18 @@ finish_open:
                path_put(&save_parent);
                return error;
        }
                path_put(&save_parent);
                return error;
        }
@@ -64305,7 +63976,7 @@ index bb02687..79cba2c 100644
        error = -EISDIR;
        if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry))
                goto out;
        error = -EISDIR;
        if ((open_flag & O_CREAT) && d_is_dir(nd->path.dentry))
                goto out;
-@@ -3207,7 +3299,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
+@@ -3207,7 +3300,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
        if (unlikely(error))
                goto out;
  
        if (unlikely(error))
                goto out;
  
@@ -64314,7 +63985,7 @@ index bb02687..79cba2c 100644
        while (unlikely(error > 0)) { /* trailing symlink */
                struct path link = path;
                void *cookie;
        while (unlikely(error > 0)) { /* trailing symlink */
                struct path link = path;
                void *cookie;
-@@ -3225,7 +3317,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
+@@ -3225,7 +3318,7 @@ static struct file *path_openat(int dfd, struct filename *pathname,
                error = follow_link(&link, nd, &cookie);
                if (unlikely(error))
                        break;
                error = follow_link(&link, nd, &cookie);
                if (unlikely(error))
                        break;
@@ -64323,7 +63994,7 @@ index bb02687..79cba2c 100644
                put_link(nd, &link, cookie);
        }
  out:
                put_link(nd, &link, cookie);
        }
  out:
-@@ -3325,9 +3417,11 @@ struct dentry *kern_path_create(int dfd, const char *pathname,
+@@ -3325,9 +3418,11 @@ struct dentry *kern_path_create(int dfd, const char *pathname,
                goto unlock;
  
        error = -EEXIST;
                goto unlock;
  
        error = -EEXIST;
@@ -64337,7 +64008,7 @@ index bb02687..79cba2c 100644
        /*
         * Special case - lookup gave negative, but... we had foo/bar/
         * From the vfs_mknod() POV we just have a negative dentry -
        /*
         * Special case - lookup gave negative, but... we had foo/bar/
         * From the vfs_mknod() POV we just have a negative dentry -
-@@ -3379,6 +3473,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname,
+@@ -3379,6 +3474,20 @@ struct dentry *user_path_create(int dfd, const char __user *pathname,
  }
  EXPORT_SYMBOL(user_path_create);
  
  }
  EXPORT_SYMBOL(user_path_create);
  
@@ -64358,7 +64029,7 @@ index bb02687..79cba2c 100644
  int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
  {
        int error = may_create(dir, dentry);
  int vfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)
  {
        int error = may_create(dir, dentry);
-@@ -3442,6 +3550,17 @@ retry:
+@@ -3442,6 +3551,17 @@ retry:
  
        if (!IS_POSIXACL(path.dentry->d_inode))
                mode &= ~current_umask();
  
        if (!IS_POSIXACL(path.dentry->d_inode))
                mode &= ~current_umask();
@@ -64376,7 +64047,7 @@ index bb02687..79cba2c 100644
        error = security_path_mknod(&path, dentry, mode, dev);
        if (error)
                goto out;
        error = security_path_mknod(&path, dentry, mode, dev);
        if (error)
                goto out;
-@@ -3457,6 +3576,8 @@ retry:
+@@ -3457,6 +3577,8 @@ retry:
                        error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
                        break;
        }
                        error = vfs_mknod(path.dentry->d_inode,dentry,mode,0);
                        break;
        }
@@ -64385,7 +64056,7 @@ index bb02687..79cba2c 100644
  out:
        done_path_create(&path, dentry);
        if (retry_estale(error, lookup_flags)) {
  out:
        done_path_create(&path, dentry);
        if (retry_estale(error, lookup_flags)) {
-@@ -3511,9 +3632,16 @@ retry:
+@@ -3511,9 +3633,16 @@ retry:
  
        if (!IS_POSIXACL(path.dentry->d_inode))
                mode &= ~current_umask();
  
        if (!IS_POSIXACL(path.dentry->d_inode))
                mode &= ~current_umask();
@@ -64402,7 +64073,7 @@ index bb02687..79cba2c 100644
        done_path_create(&path, dentry);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
        done_path_create(&path, dentry);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
-@@ -3596,6 +3724,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
+@@ -3597,6 +3726,8 @@ static long do_rmdir(int dfd, const char __user *pathname)
        struct filename *name;
        struct dentry *dentry;
        struct nameidata nd;
        struct filename *name;
        struct dentry *dentry;
        struct nameidata nd;
@@ -64411,7 +64082,7 @@ index bb02687..79cba2c 100644
        unsigned int lookup_flags = 0;
  retry:
        name = user_path_parent(dfd, pathname, &nd, lookup_flags);
        unsigned int lookup_flags = 0;
  retry:
        name = user_path_parent(dfd, pathname, &nd, lookup_flags);
-@@ -3628,10 +3758,21 @@ retry:
+@@ -3629,10 +3760,21 @@ retry:
                error = -ENOENT;
                goto exit3;
        }
                error = -ENOENT;
                goto exit3;
        }
@@ -64433,7 +64104,7 @@ index bb02687..79cba2c 100644
  exit3:
        dput(dentry);
  exit2:
  exit3:
        dput(dentry);
  exit2:
-@@ -3722,6 +3863,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
+@@ -3725,6 +3867,8 @@ static long do_unlinkat(int dfd, const char __user *pathname)
        struct nameidata nd;
        struct inode *inode = NULL;
        struct inode *delegated_inode = NULL;
        struct nameidata nd;
        struct inode *inode = NULL;
        struct inode *delegated_inode = NULL;
@@ -64442,7 +64113,7 @@ index bb02687..79cba2c 100644
        unsigned int lookup_flags = 0;
  retry:
        name = user_path_parent(dfd, pathname, &nd, lookup_flags);
        unsigned int lookup_flags = 0;
  retry:
        name = user_path_parent(dfd, pathname, &nd, lookup_flags);
-@@ -3748,10 +3891,22 @@ retry_deleg:
+@@ -3751,10 +3895,22 @@ retry_deleg:
                if (d_is_negative(dentry))
                        goto slashes;
                ihold(inode);
                if (d_is_negative(dentry))
                        goto slashes;
                ihold(inode);
@@ -64465,7 +64136,7 @@ index bb02687..79cba2c 100644
  exit2:
                dput(dentry);
        }
  exit2:
                dput(dentry);
        }
-@@ -3840,9 +3995,17 @@ retry:
+@@ -3843,9 +3999,17 @@ retry:
        if (IS_ERR(dentry))
                goto out_putname;
  
        if (IS_ERR(dentry))
                goto out_putname;
  
@@ -64483,7 +64154,7 @@ index bb02687..79cba2c 100644
        done_path_create(&path, dentry);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
        done_path_create(&path, dentry);
        if (retry_estale(error, lookup_flags)) {
                lookup_flags |= LOOKUP_REVAL;
-@@ -3946,6 +4109,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
+@@ -3949,6 +4113,7 @@ SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname,
        struct dentry *new_dentry;
        struct path old_path, new_path;
        struct inode *delegated_inode = NULL;
        struct dentry *new_dentry;
        struct path old_path, new_path;
        struct inode *delegated_inode = NULL;
@@ -64491,7 +64162,7 @@ index bb02687..79cba2c 100644
        int how = 0;
        int error;
  
        int how = 0;
        int error;
  
-@@ -3969,7 +4133,7 @@ retry:
+@@ -3972,7 +4137,7 @@ retry:
        if (error)
                return error;
  
        if (error)
                return error;
  
@@ -64500,7 +64171,7 @@ index bb02687..79cba2c 100644
                                        (how & LOOKUP_REVAL));
        error = PTR_ERR(new_dentry);
        if (IS_ERR(new_dentry))
                                        (how & LOOKUP_REVAL));
        error = PTR_ERR(new_dentry);
        if (IS_ERR(new_dentry))
-@@ -3981,11 +4145,28 @@ retry:
+@@ -3984,11 +4149,28 @@ retry:
        error = may_linkat(&old_path);
        if (unlikely(error))
                goto out_dput;
        error = may_linkat(&old_path);
        if (unlikely(error))
                goto out_dput;
@@ -64529,7 +64200,7 @@ index bb02687..79cba2c 100644
        done_path_create(&new_path, new_dentry);
        if (delegated_inode) {
                error = break_deleg_wait(&delegated_inode);
        done_path_create(&new_path, new_dentry);
        if (delegated_inode) {
                error = break_deleg_wait(&delegated_inode);
-@@ -4296,6 +4477,12 @@ retry_deleg:
+@@ -4304,6 +4486,12 @@ retry_deleg:
        if (new_dentry == trap)
                goto exit5;
  
        if (new_dentry == trap)
                goto exit5;
  
@@ -64542,7 +64213,7 @@ index bb02687..79cba2c 100644
        error = security_path_rename(&oldnd.path, old_dentry,
                                     &newnd.path, new_dentry, flags);
        if (error)
        error = security_path_rename(&oldnd.path, old_dentry,
                                     &newnd.path, new_dentry, flags);
        if (error)
-@@ -4303,6 +4490,9 @@ retry_deleg:
+@@ -4311,6 +4499,9 @@ retry_deleg:
        error = vfs_rename(old_dir->d_inode, old_dentry,
                           new_dir->d_inode, new_dentry,
                           &delegated_inode, flags);
        error = vfs_rename(old_dir->d_inode, old_dentry,
                           new_dir->d_inode, new_dentry,
                           &delegated_inode, flags);
@@ -64552,7 +64223,7 @@ index bb02687..79cba2c 100644
  exit5:
        dput(new_dentry);
  exit4:
  exit5:
        dput(new_dentry);
  exit4:
-@@ -4345,14 +4535,24 @@ SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newna
+@@ -4367,14 +4558,24 @@ EXPORT_SYMBOL(vfs_whiteout);
  
  int readlink_copy(char __user *buffer, int buflen, const char *link)
  {
  
  int readlink_copy(char __user *buffer, int buflen, const char *link)
  {
@@ -64579,10 +64250,10 @@ index bb02687..79cba2c 100644
  out:
        return len;
 diff --git a/fs/namespace.c b/fs/namespace.c
  out:
        return len;
 diff --git a/fs/namespace.c b/fs/namespace.c
-index 550dbff..c4ad324 100644
+index bbde147..f4deeba 100644
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
 --- a/fs/namespace.c
 +++ b/fs/namespace.c
-@@ -1362,6 +1362,9 @@ static int do_umount(struct mount *mnt, int flags)
+@@ -1447,6 +1447,9 @@ static int do_umount(struct mount *mnt, int flags)
                if (!(sb->s_flags & MS_RDONLY))
                        retval = do_remount_sb(sb, MS_RDONLY, NULL, 0);
                up_write(&sb->s_umount);
                if (!(sb->s_flags & MS_RDONLY))
                        retval = do_remount_sb(sb, MS_RDONLY, NULL, 0);
                up_write(&sb->s_umount);
@@ -64592,7 +64263,7 @@ index 550dbff..c4ad324 100644
                return retval;
        }
  
                return retval;
        }
  
-@@ -1384,6 +1387,9 @@ static int do_umount(struct mount *mnt, int flags)
+@@ -1469,6 +1472,9 @@ static int do_umount(struct mount *mnt, int flags)
        }
        unlock_mount_hash();
        namespace_unlock();
        }
        unlock_mount_hash();
        namespace_unlock();
@@ -64602,7 +64273,7 @@ index 550dbff..c4ad324 100644
        return retval;
  }
  
        return retval;
  }
  
-@@ -1403,7 +1409,7 @@ static inline bool may_mount(void)
+@@ -1519,7 +1525,7 @@ static inline bool may_mount(void)
   * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD
   */
  
   * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD
   */
  
@@ -64611,7 +64282,7 @@ index 550dbff..c4ad324 100644
  {
        struct path path;
        struct mount *mnt;
  {
        struct path path;
        struct mount *mnt;
-@@ -1445,7 +1451,7 @@ out:
+@@ -1564,7 +1570,7 @@ out:
  /*
   *    The 2.0 compatible umount. No flags.
   */
  /*
   *    The 2.0 compatible umount. No flags.
   */
@@ -64620,7 +64291,7 @@ index 550dbff..c4ad324 100644
  {
        return sys_umount(name, 0);
  }
  {
        return sys_umount(name, 0);
  }
-@@ -2494,6 +2500,16 @@ long do_mount(const char *dev_name, const char *dir_name,
+@@ -2632,6 +2638,16 @@ long do_mount(const char *dev_name, const char __user *dir_name,
                   MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
                   MS_STRICTATIME);
  
                   MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
                   MS_STRICTATIME);
  
@@ -64637,17 +64308,18 @@ index 550dbff..c4ad324 100644
        if (flags & MS_REMOUNT)
                retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
                                    data_page);
        if (flags & MS_REMOUNT)
                retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
                                    data_page);
-@@ -2508,6 +2524,9 @@ long do_mount(const char *dev_name, const char *dir_name,
+@@ -2645,7 +2661,10 @@ long do_mount(const char *dev_name, const char __user *dir_name,
+               retval = do_new_mount(&path, type_page, flags, mnt_flags,
                                      dev_name, data_page);
  dput_out:
                                      dev_name, data_page);
  dput_out:
-       path_put(&path);
++      gr_log_mount(dev_name, &path, retval);
 +
 +
-+      gr_log_mount(dev_name, dir_name, retval);
+       path_put(&path);
 +
        return retval;
  }
  
 +
        return retval;
  }
  
-@@ -2525,7 +2544,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
+@@ -2663,7 +2682,7 @@ static void free_mnt_ns(struct mnt_namespace *ns)
   * number incrementing at 10Ghz will take 12,427 years to wrap which
   * is effectively never, so we can ignore the possibility.
   */
   * number incrementing at 10Ghz will take 12,427 years to wrap which
   * is effectively never, so we can ignore the possibility.
   */
@@ -64656,7 +64328,7 @@ index 550dbff..c4ad324 100644
  
  static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
  {
  
  static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
  {
-@@ -2540,7 +2559,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2678,7 +2697,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
                kfree(new_ns);
                return ERR_PTR(ret);
        }
                kfree(new_ns);
                return ERR_PTR(ret);
        }
@@ -64665,7 +64337,7 @@ index 550dbff..c4ad324 100644
        atomic_set(&new_ns->count, 1);
        new_ns->root = NULL;
        INIT_LIST_HEAD(&new_ns->list);
        atomic_set(&new_ns->count, 1);
        new_ns->root = NULL;
        INIT_LIST_HEAD(&new_ns->list);
-@@ -2550,7 +2569,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
+@@ -2688,7 +2707,7 @@ static struct mnt_namespace *alloc_mnt_ns(struct user_namespace *user_ns)
        return new_ns;
  }
  
        return new_ns;
  }
  
@@ -64674,7 +64346,7 @@ index 550dbff..c4ad324 100644
                struct user_namespace *user_ns, struct fs_struct *new_fs)
  {
        struct mnt_namespace *new_ns;
                struct user_namespace *user_ns, struct fs_struct *new_fs)
  {
        struct mnt_namespace *new_ns;
-@@ -2671,8 +2690,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
+@@ -2809,8 +2828,8 @@ struct dentry *mount_subtree(struct vfsmount *mnt, const char *name)
  }
  EXPORT_SYMBOL(mount_subtree);
  
  }
  EXPORT_SYMBOL(mount_subtree);
  
@@ -64685,7 +64357,7 @@ index 550dbff..c4ad324 100644
  {
        int ret;
        char *kernel_type;
  {
        int ret;
        char *kernel_type;
-@@ -2785,6 +2804,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
+@@ -2916,6 +2935,11 @@ SYSCALL_DEFINE2(pivot_root, const char __user *, new_root,
        if (error)
                goto out2;
  
        if (error)
                goto out2;
  
@@ -64697,7 +64369,7 @@ index 550dbff..c4ad324 100644
        get_fs_root(current->fs, &root);
        old_mp = lock_mount(&old);
        error = PTR_ERR(old_mp);
        get_fs_root(current->fs, &root);
        old_mp = lock_mount(&old);
        error = PTR_ERR(old_mp);
-@@ -3056,7 +3080,7 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns)
+@@ -3187,7 +3211,7 @@ static int mntns_install(struct nsproxy *nsproxy, void *ns)
            !ns_capable(current_user_ns(), CAP_SYS_ADMIN))
                return -EPERM;
  
            !ns_capable(current_user_ns(), CAP_SYS_ADMIN))
                return -EPERM;
  
@@ -64720,10 +64392,10 @@ index f4ccfe6..a5cf064 100644
  static struct callback_op callback_ops[];
  
 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
  static struct callback_op callback_ops[];
  
 diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
-index 0689aa5..299386e 100644
+index 00689a8..b162632 100644
 --- a/fs/nfs/inode.c
 +++ b/fs/nfs/inode.c
 --- a/fs/nfs/inode.c
 +++ b/fs/nfs/inode.c
-@@ -1228,16 +1228,16 @@ static int nfs_size_need_update(const struct inode *inode, const struct nfs_fatt
+@@ -1232,16 +1232,16 @@ static int nfs_size_need_update(const struct inode *inode, const struct nfs_fatt
        return nfs_size_to_loff_t(fattr->size) > i_size_read(inode);
  }
  
        return nfs_size_to_loff_t(fattr->size) > i_size_read(inode);
  }
  
@@ -64744,10 +64416,10 @@ index 0689aa5..299386e 100644
  
  void nfs_fattr_init(struct nfs_fattr *fattr)
 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
  
  void nfs_fattr_init(struct nfs_fattr *fattr)
 diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
-index 1d3cb47..2b8ed89 100644
+index 0beb023..3f685ec 100644
 --- a/fs/nfsd/nfs4proc.c
 +++ b/fs/nfsd/nfs4proc.c
 --- a/fs/nfsd/nfs4proc.c
 +++ b/fs/nfsd/nfs4proc.c
-@@ -1155,7 +1155,7 @@ struct nfsd4_operation {
+@@ -1198,7 +1198,7 @@ struct nfsd4_operation {
        nfsd4op_rsize op_rsize_bop;
        stateid_getter op_get_currentstateid;
        stateid_setter op_set_currentstateid;
        nfsd4op_rsize op_rsize_bop;
        stateid_getter op_get_currentstateid;
        stateid_setter op_set_currentstateid;
@@ -64757,10 +64429,10 @@ index 1d3cb47..2b8ed89 100644
  static struct nfsd4_operation nfsd4_ops[];
  
 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
  static struct nfsd4_operation nfsd4_ops[];
  
 diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
-index 353aac8..32035ee 100644
+index eeea7a9..f3ba422 100644
 --- a/fs/nfsd/nfs4xdr.c
 +++ b/fs/nfsd/nfs4xdr.c
 --- a/fs/nfsd/nfs4xdr.c
 +++ b/fs/nfsd/nfs4xdr.c
-@@ -1534,7 +1534,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
+@@ -1543,7 +1543,7 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p)
  
  typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *);
  
  
  typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *);
  
@@ -64770,19 +64442,21 @@ index 353aac8..32035ee 100644
        [OP_CLOSE]              = (nfsd4_dec)nfsd4_decode_close,
        [OP_COMMIT]             = (nfsd4_dec)nfsd4_decode_commit,
 diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
        [OP_CLOSE]              = (nfsd4_dec)nfsd4_decode_close,
        [OP_COMMIT]             = (nfsd4_dec)nfsd4_decode_commit,
 diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c
-index ff95676..96cf3f62 100644
+index 122f691..a00e2e0 100644
 --- a/fs/nfsd/nfscache.c
 +++ b/fs/nfsd/nfscache.c
 --- a/fs/nfsd/nfscache.c
 +++ b/fs/nfsd/nfscache.c
-@@ -527,17 +527,20 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp)
- {
-       struct svc_cacherep *rp = rqstp->rq_cacherep;
+@@ -537,7 +537,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp)
        struct kvec     *resv = &rqstp->rq_res.head[0], *cachv;
        struct kvec     *resv = &rqstp->rq_res.head[0], *cachv;
+       u32             hash;
+       struct nfsd_drc_bucket *b;
 -      int             len;
 +      long            len;
        size_t          bufsize = 0;
  
        if (!rp)
 -      int             len;
 +      long            len;
        size_t          bufsize = 0;
  
        if (!rp)
-               return;
+@@ -546,11 +546,14 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp)
+       hash = nfsd_cache_hash(rp->c_xid);
+       b = &drc_hashtbl[hash];
  
 -      len = resv->iov_len - ((char*)statp - (char*)resv->iov_base);
 -      len >>= 2;
  
 -      len = resv->iov_len - ((char*)statp - (char*)resv->iov_base);
 -      len >>= 2;
@@ -64795,10 +64469,10 @@ index ff95676..96cf3f62 100644
        /* Don't cache excessive amounts of data and XDR failures */
 -      if (!statp || len > (256 >> 2)) {
 +      if (!statp || len > (256 >> 2) || len < 0) {
        /* Don't cache excessive amounts of data and XDR failures */
 -      if (!statp || len > (256 >> 2)) {
 +      if (!statp || len > (256 >> 2) || len < 0) {
-               nfsd_reply_cache_free(rp);
+               nfsd_reply_cache_free(b, rp);
                return;
        }
                return;
        }
-@@ -545,7 +548,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp)
+@@ -558,7 +561,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp)
        switch (cachetype) {
        case RC_REPLSTAT:
                if (len != 1)
        switch (cachetype) {
        case RC_REPLSTAT:
                if (len != 1)
@@ -64808,10 +64482,10 @@ index ff95676..96cf3f62 100644
                break;
        case RC_REPLBUFF:
 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
                break;
        case RC_REPLBUFF:
 diff --git a/fs/nfsd/vfs.c b/fs/nfsd/vfs.c
-index 6ab077b..5ac7f0b 100644
+index 989129e..42e019e 100644
 --- a/fs/nfsd/vfs.c
 +++ b/fs/nfsd/vfs.c
 --- a/fs/nfsd/vfs.c
 +++ b/fs/nfsd/vfs.c
-@@ -855,7 +855,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
+@@ -872,7 +872,7 @@ __be32 nfsd_readv(struct file *file, loff_t offset, struct kvec *vec, int vlen,
  
        oldfs = get_fs();
        set_fs(KERNEL_DS);
  
        oldfs = get_fs();
        set_fs(KERNEL_DS);
@@ -64820,7 +64494,7 @@ index 6ab077b..5ac7f0b 100644
        set_fs(oldfs);
        return nfsd_finish_read(file, count, host_err);
  }
        set_fs(oldfs);
        return nfsd_finish_read(file, count, host_err);
  }
-@@ -943,7 +943,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
+@@ -960,7 +960,7 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct file *file,
  
        /* Write the data. */
        oldfs = get_fs(); set_fs(KERNEL_DS);
  
        /* Write the data. */
        oldfs = get_fs(); set_fs(KERNEL_DS);
@@ -64829,7 +64503,7 @@ index 6ab077b..5ac7f0b 100644
        set_fs(oldfs);
        if (host_err < 0)
                goto out_nfserr;
        set_fs(oldfs);
        if (host_err < 0)
                goto out_nfserr;
-@@ -1485,7 +1485,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
+@@ -1502,7 +1502,7 @@ nfsd_readlink(struct svc_rqst *rqstp, struct svc_fh *fhp, char *buf, int *lenp)
         */
  
        oldfs = get_fs(); set_fs(KERNEL_DS);
         */
  
        oldfs = get_fs(); set_fs(KERNEL_DS);
@@ -64958,23 +64632,6 @@ index c991616..5ae51af 100644
                goto out_close_fd;
  
  #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
                goto out_close_fd;
  
  #ifdef CONFIG_FANOTIFY_ACCESS_PERMISSIONS
-diff --git a/fs/notify/inotify/inotify_fsnotify.c b/fs/notify/inotify/inotify_fsnotify.c
-index 0f88bc0..7d888d7 100644
---- a/fs/notify/inotify/inotify_fsnotify.c
-+++ b/fs/notify/inotify/inotify_fsnotify.c
-@@ -165,8 +165,10 @@ static void inotify_free_group_priv(struct fsnotify_group *group)
-       /* ideally the idr is empty and we won't hit the BUG in the callback */
-       idr_for_each(&group->inotify_data.idr, idr_callback, group);
-       idr_destroy(&group->inotify_data.idr);
--      atomic_dec(&group->inotify_data.user->inotify_devs);
--      free_uid(group->inotify_data.user);
-+      if (group->inotify_data.user) {
-+              atomic_dec(&group->inotify_data.user->inotify_devs);
-+              free_uid(group->inotify_data.user);
-+      }
- }
- static void inotify_free_event(struct fsnotify_event *fsn_event)
 diff --git a/fs/notify/notification.c b/fs/notify/notification.c
 index a95d8e0..a91a5fd 100644
 --- a/fs/notify/notification.c
 diff --git a/fs/notify/notification.c b/fs/notify/notification.c
 index a95d8e0..a91a5fd 100644
 --- a/fs/notify/notification.c
@@ -65011,10 +64668,10 @@ index 9e38daf..5727cae 100644
                                "inode 0x%lx or driver bug.", vdir->i_ino);
                goto err_out;
 diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c
                                "inode 0x%lx or driver bug.", vdir->i_ino);
                goto err_out;
 diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c
-index f5ec1ce..807fd78 100644
+index 643faa4..ef9027e 100644
 --- a/fs/ntfs/file.c
 +++ b/fs/ntfs/file.c
 --- a/fs/ntfs/file.c
 +++ b/fs/ntfs/file.c
-@@ -1279,7 +1279,7 @@ static inline size_t ntfs_copy_from_user(struct page **pages,
+@@ -1280,7 +1280,7 @@ static inline size_t ntfs_copy_from_user(struct page **pages,
        char *addr;
        size_t total = 0;
        unsigned len;
        char *addr;
        size_t total = 0;
        unsigned len;
@@ -65024,7 +64681,7 @@ index f5ec1ce..807fd78 100644
        do {
                len = PAGE_CACHE_SIZE - ofs;
 diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
        do {
                len = PAGE_CACHE_SIZE - ofs;
 diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
-index 6c3296e..c0b99f0 100644
+index 9e1e112..241a52a 100644
 --- a/fs/ntfs/super.c
 +++ b/fs/ntfs/super.c
 @@ -688,7 +688,7 @@ static struct buffer_head *read_ntfs_boot_sector(struct super_block *sb,
 --- a/fs/ntfs/super.c
 +++ b/fs/ntfs/super.c
 @@ -688,7 +688,7 @@ static struct buffer_head *read_ntfs_boot_sector(struct super_block *sb,
@@ -65067,19 +64724,6 @@ index 0440134..d52c93a 100644
  
  bail:
        if (handle)
  
  bail:
        if (handle)
-diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c
-index 8add6f1..b931e04 100644
---- a/fs/ocfs2/namei.c
-+++ b/fs/ocfs2/namei.c
-@@ -158,7 +158,7 @@ bail_add:
-                * NOTE: This dentry already has ->d_op set from
-                * ocfs2_get_parent() and ocfs2_get_dentry()
-                */
--              if (ret)
-+              if (!IS_ERR_OR_NULL(ret))
-                       dentry = ret;
-               status = ocfs2_dentry_attach_lock(dentry, inode,
 diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
 index bbec539..7b266d5 100644
 --- a/fs/ocfs2/ocfs2.h
 diff --git a/fs/ocfs2/ocfs2.h b/fs/ocfs2/ocfs2.h
 index bbec539..7b266d5 100644
 --- a/fs/ocfs2/ocfs2.h
@@ -65160,7 +64804,7 @@ index 0cb889a..6a26b24 100644
                }
        }
 diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
                }
        }
 diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
-index 4142546..69375a9 100644
+index 93c85bc..02f68a4 100644
 --- a/fs/ocfs2/super.c
 +++ b/fs/ocfs2/super.c
 @@ -300,11 +300,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
 --- a/fs/ocfs2/super.c
 +++ b/fs/ocfs2/super.c
 @@ -300,11 +300,11 @@ static int ocfs2_osb_dump(struct ocfs2_super *osb, char *buf, int len)
@@ -65180,7 +64824,7 @@ index 4142546..69375a9 100644
  
        out += snprintf(buf + out, len - out,
                        "%10s => State: %u  Descriptor: %llu  Size: %u bits  "
  
        out += snprintf(buf + out, len - out,
                        "%10s => State: %u  Descriptor: %llu  Size: %u bits  "
-@@ -2100,11 +2100,11 @@ static int ocfs2_initialize_super(struct super_block *sb,
+@@ -2104,11 +2104,11 @@ static int ocfs2_initialize_super(struct super_block *sb,
  
        mutex_init(&osb->system_file_mutex);
  
  
        mutex_init(&osb->system_file_mutex);
  
@@ -65198,7 +64842,7 @@ index 4142546..69375a9 100644
        /* Copy the blockcheck stats from the superblock probe */
        osb->osb_ecc_stats = *stats;
 diff --git a/fs/open.c b/fs/open.c
        /* Copy the blockcheck stats from the superblock probe */
        osb->osb_ecc_stats = *stats;
 diff --git a/fs/open.c b/fs/open.c
-index d6fd3ac..6ccf474 100644
+index de92c13..52d2a6c 100644
 --- a/fs/open.c
 +++ b/fs/open.c
 @@ -32,6 +32,8 @@
 --- a/fs/open.c
 +++ b/fs/open.c
 @@ -32,6 +32,8 @@
@@ -65302,7 +64946,7 @@ index d6fd3ac..6ccf474 100644
        newattrs.ia_valid =  ATTR_CTIME;
        if (user != (uid_t) -1) {
                if (!uid_valid(uid))
        newattrs.ia_valid =  ATTR_CTIME;
        if (user != (uid_t) -1) {
                if (!uid_valid(uid))
-@@ -983,6 +1020,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
+@@ -1002,6 +1039,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, umode_t mode)
                } else {
                        fsnotify_open(f);
                        fd_install(fd, f);
                } else {
                        fsnotify_open(f);
                        fd_install(fd, f);
@@ -65797,7 +65441,7 @@ index cd3653e..9b9b79a 100644
  static struct pid *
  get_children_pid(struct inode *inode, struct pid *pid_prev, loff_t pos)
 diff --git a/fs/proc/base.c b/fs/proc/base.c
  static struct pid *
  get_children_pid(struct inode *inode, struct pid *pid_prev, loff_t pos)
 diff --git a/fs/proc/base.c b/fs/proc/base.c
-index baf852b..03fe930 100644
+index 7dc3ea8..4cfe92f 100644
 --- a/fs/proc/base.c
 +++ b/fs/proc/base.c
 @@ -113,6 +113,14 @@ struct pid_entry {
 --- a/fs/proc/base.c
 +++ b/fs/proc/base.c
 @@ -113,6 +113,14 @@ struct pid_entry {
@@ -65862,7 +65506,7 @@ index baf852b..03fe930 100644
  
  #define MAX_STACK_TRACE_DEPTH 64
  
  
  #define MAX_STACK_TRACE_DEPTH 64
  
-@@ -487,7 +511,7 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns,
+@@ -456,7 +480,7 @@ static int proc_pid_limits(struct seq_file *m, struct pid_namespace *ns,
        return 0;
  }
  
        return 0;
  }
  
@@ -65871,7 +65515,7 @@ index baf852b..03fe930 100644
  static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
                            struct pid *pid, struct task_struct *task)
  {
  static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
                            struct pid *pid, struct task_struct *task)
  {
-@@ -517,7 +541,7 @@ static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
+@@ -486,7 +510,7 @@ static int proc_pid_syscall(struct seq_file *m, struct pid_namespace *ns,
  /************************************************************************/
  
  /* permission checks */
  /************************************************************************/
  
  /* permission checks */
@@ -65880,7 +65524,7 @@ index baf852b..03fe930 100644
  {
        struct task_struct *task;
        int allowed = 0;
  {
        struct task_struct *task;
        int allowed = 0;
-@@ -527,7 +551,10 @@ static int proc_fd_access_allowed(struct inode *inode)
+@@ -496,7 +520,10 @@ static int proc_fd_access_allowed(struct inode *inode)
         */
        task = get_proc_task(inode);
        if (task) {
         */
        task = get_proc_task(inode);
        if (task) {
@@ -65892,7 +65536,7 @@ index baf852b..03fe930 100644
                put_task_struct(task);
        }
        return allowed;
                put_task_struct(task);
        }
        return allowed;
-@@ -558,10 +585,35 @@ static bool has_pid_permissions(struct pid_namespace *pid,
+@@ -527,10 +554,35 @@ static bool has_pid_permissions(struct pid_namespace *pid,
                                 struct task_struct *task,
                                 int hide_pid_min)
  {
                                 struct task_struct *task,
                                 int hide_pid_min)
  {
@@ -65928,7 +65572,7 @@ index baf852b..03fe930 100644
        return ptrace_may_access(task, PTRACE_MODE_READ);
  }
  
        return ptrace_may_access(task, PTRACE_MODE_READ);
  }
  
-@@ -579,7 +631,11 @@ static int proc_pid_permission(struct inode *inode, int mask)
+@@ -548,7 +600,11 @@ static int proc_pid_permission(struct inode *inode, int mask)
        put_task_struct(task);
  
        if (!has_perms) {
        put_task_struct(task);
  
        if (!has_perms) {
@@ -65940,22 +65584,20 @@ index baf852b..03fe930 100644
                        /*
                         * Let's make getdents(), stat(), and open()
                         * consistent with each other.  If a process
                        /*
                         * Let's make getdents(), stat(), and open()
                         * consistent with each other.  If a process
-@@ -640,6 +696,11 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
-       if (!task)
-               return -ESRCH;
+@@ -609,6 +665,8 @@ struct mm_struct *proc_mem_open(struct inode *inode, unsigned int mode)
  
  
-+      if (gr_acl_handle_procpidmem(task)) {
-+              put_task_struct(task);
-+              return -EPERM;
-+      }
-+
-       mm = mm_access(task, mode);
-       put_task_struct(task);
+       if (task) {
+               mm = mm_access(task, mode);
++              if (gr_acl_handle_procpidmem(task))
++                      mm = ERR_PTR(-EPERM);
+               put_task_struct(task);
  
  
-@@ -655,6 +716,10 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
+               if (!IS_ERR_OR_NULL(mm)) {
+@@ -630,6 +688,11 @@ static int __mem_open(struct inode *inode, struct file *file, unsigned int mode)
+               return PTR_ERR(mm);
  
        file->private_data = mm;
  
        file->private_data = mm;
++
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      file->f_version = current->exec_id;
 +#endif
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      file->f_version = current->exec_id;
 +#endif
@@ -65963,7 +65605,7 @@ index baf852b..03fe930 100644
        return 0;
  }
  
        return 0;
  }
  
-@@ -676,6 +741,17 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
+@@ -651,6 +714,17 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
        ssize_t copied;
        char *page;
  
        ssize_t copied;
        char *page;
  
@@ -65981,7 +65623,7 @@ index baf852b..03fe930 100644
        if (!mm)
                return 0;
  
        if (!mm)
                return 0;
  
-@@ -688,7 +764,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
+@@ -663,7 +737,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
                goto free;
  
        while (count > 0) {
                goto free;
  
        while (count > 0) {
@@ -65990,7 +65632,7 @@ index baf852b..03fe930 100644
  
                if (write && copy_from_user(page, buf, this_len)) {
                        copied = -EFAULT;
  
                if (write && copy_from_user(page, buf, this_len)) {
                        copied = -EFAULT;
-@@ -780,6 +856,13 @@ static ssize_t environ_read(struct file *file, char __user *buf,
+@@ -755,6 +829,13 @@ static ssize_t environ_read(struct file *file, char __user *buf,
        if (!mm)
                return 0;
  
        if (!mm)
                return 0;
  
@@ -66004,7 +65646,7 @@ index baf852b..03fe930 100644
        page = (char *)__get_free_page(GFP_TEMPORARY);
        if (!page)
                return -ENOMEM;
        page = (char *)__get_free_page(GFP_TEMPORARY);
        if (!page)
                return -ENOMEM;
-@@ -789,7 +872,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
+@@ -764,7 +845,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
                goto free;
        while (count > 0) {
                size_t this_len, max_len;
                goto free;
        while (count > 0) {
                size_t this_len, max_len;
@@ -66013,7 +65655,7 @@ index baf852b..03fe930 100644
  
                if (src >= (mm->env_end - mm->env_start))
                        break;
  
                if (src >= (mm->env_end - mm->env_start))
                        break;
-@@ -1403,7 +1486,7 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
+@@ -1378,7 +1459,7 @@ static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
        int error = -EACCES;
  
        /* Are we allowed to snoop on the tasks file descriptors? */
        int error = -EACCES;
  
        /* Are we allowed to snoop on the tasks file descriptors? */
@@ -66022,7 +65664,7 @@ index baf852b..03fe930 100644
                goto out;
  
        error = PROC_I(inode)->op.proc_get_link(dentry, &path);
                goto out;
  
        error = PROC_I(inode)->op.proc_get_link(dentry, &path);
-@@ -1447,8 +1530,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b
+@@ -1422,8 +1503,18 @@ static int proc_pid_readlink(struct dentry * dentry, char __user * buffer, int b
        struct path path;
  
        /* Are we allowed to snoop on the tasks file descriptors? */
        struct path path;
  
        /* Are we allowed to snoop on the tasks file descriptors? */
@@ -66043,7 +65685,7 @@ index baf852b..03fe930 100644
  
        error = PROC_I(inode)->op.proc_get_link(dentry, &path);
        if (error)
  
        error = PROC_I(inode)->op.proc_get_link(dentry, &path);
        if (error)
-@@ -1498,7 +1591,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
+@@ -1473,7 +1564,11 @@ struct inode *proc_pid_make_inode(struct super_block * sb, struct task_struct *t
                rcu_read_lock();
                cred = __task_cred(task);
                inode->i_uid = cred->euid;
                rcu_read_lock();
                cred = __task_cred(task);
                inode->i_uid = cred->euid;
@@ -66055,7 +65697,7 @@ index baf852b..03fe930 100644
                rcu_read_unlock();
        }
        security_task_to_inode(task, inode);
                rcu_read_unlock();
        }
        security_task_to_inode(task, inode);
-@@ -1534,10 +1631,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
+@@ -1509,10 +1604,19 @@ int pid_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
                        return -ENOENT;
                }
                if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
                        return -ENOENT;
                }
                if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
@@ -66075,7 +65717,7 @@ index baf852b..03fe930 100644
                }
        }
        rcu_read_unlock();
                }
        }
        rcu_read_unlock();
-@@ -1575,11 +1681,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags)
+@@ -1550,11 +1654,20 @@ int pid_revalidate(struct dentry *dentry, unsigned int flags)
  
        if (task) {
                if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
  
        if (task) {
                if ((inode->i_mode == (S_IFDIR|S_IRUGO|S_IXUGO)) ||
@@ -66096,7 +65738,7 @@ index baf852b..03fe930 100644
                        rcu_read_unlock();
                } else {
                        inode->i_uid = GLOBAL_ROOT_UID;
                        rcu_read_unlock();
                } else {
                        inode->i_uid = GLOBAL_ROOT_UID;
-@@ -2114,6 +2229,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
+@@ -2085,6 +2198,9 @@ static struct dentry *proc_pident_lookup(struct inode *dir,
        if (!task)
                goto out_no_task;
  
        if (!task)
                goto out_no_task;
  
@@ -66106,7 +65748,7 @@ index baf852b..03fe930 100644
        /*
         * Yes, it does not scale. And it should not. Don't add
         * new entries into /proc/<tgid>/ without very good reasons.
        /*
         * Yes, it does not scale. And it should not. Don't add
         * new entries into /proc/<tgid>/ without very good reasons.
-@@ -2144,6 +2262,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
+@@ -2115,6 +2231,9 @@ static int proc_pident_readdir(struct file *file, struct dir_context *ctx,
        if (!task)
                return -ENOENT;
  
        if (!task)
                return -ENOENT;
  
@@ -66116,7 +65758,7 @@ index baf852b..03fe930 100644
        if (!dir_emit_dots(file, ctx))
                goto out;
  
        if (!dir_emit_dots(file, ctx))
                goto out;
  
-@@ -2535,7 +2656,7 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2557,7 +2676,7 @@ static const struct pid_entry tgid_base_stuff[] = {
        REG("autogroup",  S_IRUGO|S_IWUSR, proc_pid_sched_autogroup_operations),
  #endif
        REG("comm",      S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
        REG("autogroup",  S_IRUGO|S_IWUSR, proc_pid_sched_autogroup_operations),
  #endif
        REG("comm",      S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
@@ -66125,7 +65767,7 @@ index baf852b..03fe930 100644
        ONE("syscall",    S_IRUSR, proc_pid_syscall),
  #endif
        ONE("cmdline",    S_IRUGO, proc_pid_cmdline),
        ONE("syscall",    S_IRUSR, proc_pid_syscall),
  #endif
        ONE("cmdline",    S_IRUGO, proc_pid_cmdline),
-@@ -2560,10 +2681,10 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2582,10 +2701,10 @@ static const struct pid_entry tgid_base_stuff[] = {
  #ifdef CONFIG_SECURITY
        DIR("attr",       S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
  #endif
  #ifdef CONFIG_SECURITY
        DIR("attr",       S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
  #endif
@@ -66138,7 +65780,7 @@ index baf852b..03fe930 100644
        ONE("stack",      S_IRUSR, proc_pid_stack),
  #endif
  #ifdef CONFIG_SCHEDSTATS
        ONE("stack",      S_IRUSR, proc_pid_stack),
  #endif
  #ifdef CONFIG_SCHEDSTATS
-@@ -2597,6 +2718,9 @@ static const struct pid_entry tgid_base_stuff[] = {
+@@ -2619,6 +2738,9 @@ static const struct pid_entry tgid_base_stuff[] = {
  #ifdef CONFIG_HARDWALL
        ONE("hardwall",   S_IRUGO, proc_pid_hardwall),
  #endif
  #ifdef CONFIG_HARDWALL
        ONE("hardwall",   S_IRUGO, proc_pid_hardwall),
  #endif
@@ -66148,7 +65790,7 @@ index baf852b..03fe930 100644
  #ifdef CONFIG_USER_NS
        REG("uid_map",    S_IRUGO|S_IWUSR, proc_uid_map_operations),
        REG("gid_map",    S_IRUGO|S_IWUSR, proc_gid_map_operations),
  #ifdef CONFIG_USER_NS
        REG("uid_map",    S_IRUGO|S_IWUSR, proc_uid_map_operations),
        REG("gid_map",    S_IRUGO|S_IWUSR, proc_gid_map_operations),
-@@ -2727,7 +2851,14 @@ static int proc_pid_instantiate(struct inode *dir,
+@@ -2748,7 +2870,14 @@ static int proc_pid_instantiate(struct inode *dir,
        if (!inode)
                goto out;
  
        if (!inode)
                goto out;
  
@@ -66163,7 +65805,7 @@ index baf852b..03fe930 100644
        inode->i_op = &proc_tgid_base_inode_operations;
        inode->i_fop = &proc_tgid_base_operations;
        inode->i_flags|=S_IMMUTABLE;
        inode->i_op = &proc_tgid_base_inode_operations;
        inode->i_fop = &proc_tgid_base_operations;
        inode->i_flags|=S_IMMUTABLE;
-@@ -2765,7 +2896,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
+@@ -2786,7 +2915,11 @@ struct dentry *proc_pid_lookup(struct inode *dir, struct dentry * dentry, unsign
        if (!task)
                goto out;
  
        if (!task)
                goto out;
  
@@ -66175,7 +65817,7 @@ index baf852b..03fe930 100644
        put_task_struct(task);
  out:
        return ERR_PTR(result);
        put_task_struct(task);
  out:
        return ERR_PTR(result);
-@@ -2879,7 +3014,7 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -2900,7 +3033,7 @@ static const struct pid_entry tid_base_stuff[] = {
        REG("sched",     S_IRUGO|S_IWUSR, proc_pid_sched_operations),
  #endif
        REG("comm",      S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
        REG("sched",     S_IRUGO|S_IWUSR, proc_pid_sched_operations),
  #endif
        REG("comm",      S_IRUGO|S_IWUSR, proc_pid_set_comm_operations),
@@ -66184,7 +65826,7 @@ index baf852b..03fe930 100644
        ONE("syscall",   S_IRUSR, proc_pid_syscall),
  #endif
        ONE("cmdline",   S_IRUGO, proc_pid_cmdline),
        ONE("syscall",   S_IRUSR, proc_pid_syscall),
  #endif
        ONE("cmdline",   S_IRUGO, proc_pid_cmdline),
-@@ -2906,10 +3041,10 @@ static const struct pid_entry tid_base_stuff[] = {
+@@ -2927,10 +3060,10 @@ static const struct pid_entry tid_base_stuff[] = {
  #ifdef CONFIG_SECURITY
        DIR("attr",      S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
  #endif
  #ifdef CONFIG_SECURITY
        DIR("attr",      S_IRUGO|S_IXUGO, proc_attr_dir_inode_operations, proc_attr_dir_operations),
  #endif
@@ -66230,7 +65872,7 @@ index 50493ed..248166b 100644
  }
  fs_initcall(proc_devices_init);
 diff --git a/fs/proc/fd.c b/fs/proc/fd.c
  }
  fs_initcall(proc_devices_init);
 diff --git a/fs/proc/fd.c b/fs/proc/fd.c
-index 955bb55..71948bd 100644
+index e11d7c5..9128ce06 100644
 --- a/fs/proc/fd.c
 +++ b/fs/proc/fd.c
 @@ -26,7 +26,8 @@ static int seq_show(struct seq_file *m, void *v)
 --- a/fs/proc/fd.c
 +++ b/fs/proc/fd.c
 @@ -26,7 +26,8 @@ static int seq_show(struct seq_file *m, void *v)
@@ -66243,7 +65885,7 @@ index 955bb55..71948bd 100644
        put_task_struct(task);
  
        if (files) {
        put_task_struct(task);
  
        if (files) {
-@@ -285,11 +286,21 @@ static struct dentry *proc_lookupfd(struct inode *dir, struct dentry *dentry,
+@@ -283,11 +284,21 @@ static struct dentry *proc_lookupfd(struct inode *dir, struct dentry *dentry,
   */
  int proc_fd_permission(struct inode *inode, int mask)
  {
   */
  int proc_fd_permission(struct inode *inode, int mask)
  {
@@ -66445,7 +66087,7 @@ index 333080d..0a35ec4 100644
                if (de->size)
                        inode->i_size = de->size;
 diff --git a/fs/proc/internal.h b/fs/proc/internal.h
                if (de->size)
                        inode->i_size = de->size;
 diff --git a/fs/proc/internal.h b/fs/proc/internal.h
-index 7da13e4..68d0981 100644
+index aa7a0ee..f2318df 100644
 --- a/fs/proc/internal.h
 +++ b/fs/proc/internal.h
 @@ -46,9 +46,10 @@ struct proc_dir_entry {
 --- a/fs/proc/internal.h
 +++ b/fs/proc/internal.h
 @@ -46,9 +46,10 @@ struct proc_dir_entry {
@@ -66509,7 +66151,7 @@ index a352d57..cb94a5c 100644
  }
  fs_initcall(proc_interrupts_init);
 diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
  }
  fs_initcall(proc_interrupts_init);
 diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c
-index 6df8d07..3321060 100644
+index 91a4e64..cb007c0 100644
 --- a/fs/proc/kcore.c
 +++ b/fs/proc/kcore.c
 @@ -483,9 +483,10 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
 --- a/fs/proc/kcore.c
 +++ b/fs/proc/kcore.c
 @@ -483,9 +483,10 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
@@ -66998,7 +66640,7 @@ index bf2d03f..f058f9c 100644
        seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq);
  
 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
        seq_printf(p, "softirq %llu", (unsigned long long)sum_softirq);
  
 diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index c341568..75852a2 100644
+index 4e0388c..fc6a0e1 100644
 --- a/fs/proc/task_mmu.c
 +++ b/fs/proc/task_mmu.c
 @@ -13,12 +13,19 @@
 --- a/fs/proc/task_mmu.c
 +++ b/fs/proc/task_mmu.c
 @@ -13,12 +13,19 @@
@@ -67058,7 +66700,7 @@ index c341568..75852a2 100644
  }
  
  unsigned long task_vsize(struct mm_struct *mm)
  }
  
  unsigned long task_vsize(struct mm_struct *mm)
-@@ -271,13 +295,13 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -282,13 +306,13 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
                pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
        }
  
                pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
        }
  
@@ -67077,7 +66719,7 @@ index c341568..75852a2 100644
  
        seq_setwidth(m, 25 + sizeof(void *) * 6 - 1);
        seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ",
  
        seq_setwidth(m, 25 + sizeof(void *) * 6 - 1);
        seq_printf(m, "%08lx-%08lx %c%c%c%c %08llx %02x:%02x %lu ",
-@@ -287,7 +311,11 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -298,7 +322,11 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
                        flags & VM_WRITE ? 'w' : '-',
                        flags & VM_EXEC ? 'x' : '-',
                        flags & VM_MAYSHARE ? 's' : 'p',
                        flags & VM_WRITE ? 'w' : '-',
                        flags & VM_EXEC ? 'x' : '-',
                        flags & VM_MAYSHARE ? 's' : 'p',
@@ -67089,7 +66731,7 @@ index c341568..75852a2 100644
                        MAJOR(dev), MINOR(dev), ino);
  
        /*
                        MAJOR(dev), MINOR(dev), ino);
  
        /*
-@@ -296,7 +324,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -307,7 +335,7 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
         */
        if (file) {
                seq_pad(m, ' ');
         */
        if (file) {
                seq_pad(m, ' ');
@@ -67098,7 +66740,7 @@ index c341568..75852a2 100644
                goto done;
        }
  
                goto done;
        }
  
-@@ -328,8 +356,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -338,8 +366,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
                         * Thread stack in /proc/PID/task/TID/maps or
                         * the main process stack.
                         */
                         * Thread stack in /proc/PID/task/TID/maps or
                         * the main process stack.
                         */
@@ -67110,21 +66752,20 @@ index c341568..75852a2 100644
                                name = "[stack]";
                        } else {
                                /* Thread stack in /proc/PID/maps */
                                name = "[stack]";
                        } else {
                                /* Thread stack in /proc/PID/maps */
-@@ -353,6 +382,13 @@ static int show_map(struct seq_file *m, void *v, int is_pid)
-       struct proc_maps_private *priv = m->private;
-       struct task_struct *task = priv->task;
+@@ -359,6 +388,12 @@ done:
  
  
+ static int show_map(struct seq_file *m, void *v, int is_pid)
+ {
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      if (current->exec_id != m->exec_id) {
 +              gr_log_badprocpid("maps");
 +              return 0;
 +      }
 +#endif
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      if (current->exec_id != m->exec_id) {
 +              gr_log_badprocpid("maps");
 +              return 0;
 +      }
 +#endif
-+
-       show_map_vma(m, vma, is_pid);
-       if (m->count < m->size)  /* vma is copied successfully */
-@@ -593,12 +629,23 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
+       show_map_vma(m, v, is_pid);
+       m_cache_vma(m, v);
+       return 0;
+@@ -594,12 +629,23 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
                .private = &mss,
        };
  
                .private = &mss,
        };
  
@@ -67153,7 +66794,7 @@ index c341568..75852a2 100644
        show_map_vma(m, vma, is_pid);
  
        seq_printf(m,
        show_map_vma(m, vma, is_pid);
  
        seq_printf(m,
-@@ -616,7 +663,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
+@@ -617,7 +663,11 @@ static int show_smap(struct seq_file *m, void *v, int is_pid)
                   "KernelPageSize: %8lu kB\n"
                   "MMUPageSize:    %8lu kB\n"
                   "Locked:         %8lu kB\n",
                   "KernelPageSize: %8lu kB\n"
                   "MMUPageSize:    %8lu kB\n"
                   "Locked:         %8lu kB\n",
@@ -67165,7 +66806,7 @@ index c341568..75852a2 100644
                   mss.resident >> 10,
                   (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
                   mss.shared_clean  >> 10,
                   mss.resident >> 10,
                   (unsigned long)(mss.pss >> (10 + PSS_SHIFT)),
                   mss.shared_clean  >> 10,
-@@ -1422,6 +1473,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1447,6 +1497,13 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
        char buffer[64];
        int nid;
  
        char buffer[64];
        int nid;
  
@@ -67179,9 +66820,9 @@ index c341568..75852a2 100644
        if (!mm)
                return 0;
  
        if (!mm)
                return 0;
  
-@@ -1439,11 +1497,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
-       mpol_to_str(buffer, sizeof(buffer), pol);
-       mpol_cond_put(pol);
+@@ -1468,11 +1525,15 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+               mpol_to_str(buffer, sizeof(buffer), proc_priv->task_mempolicy);
+       }
  
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      seq_printf(m, "%08lx %s", PAX_RAND_FLAGS(vma->vm_mm) ? 0UL : vma->vm_start, buffer);
  
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      seq_printf(m, "%08lx %s", PAX_RAND_FLAGS(vma->vm_mm) ? 0UL : vma->vm_start, buffer);
@@ -67197,7 +66838,7 @@ index c341568..75852a2 100644
                seq_puts(m, " heap");
        } else {
 diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
                seq_puts(m, " heap");
        } else {
 diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
-index 678455d..ebd3245 100644
+index 599ec2e..f1413ae 100644
 --- a/fs/proc/task_nommu.c
 +++ b/fs/proc/task_nommu.c
 @@ -51,7 +51,7 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
 --- a/fs/proc/task_nommu.c
 +++ b/fs/proc/task_nommu.c
 @@ -51,7 +51,7 @@ void task_mem(struct seq_file *m, struct mm_struct *mm)
@@ -67209,14 +66850,14 @@ index 678455d..ebd3245 100644
                sbytes += kobjsize(current->fs);
        else
                bytes += kobjsize(current->fs);
                sbytes += kobjsize(current->fs);
        else
                bytes += kobjsize(current->fs);
-@@ -161,7 +161,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
+@@ -180,7 +180,7 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
  
        if (file) {
                seq_pad(m, ' ');
 -              seq_path(m, &file->f_path, "");
 +              seq_path(m, &file->f_path, "\n\\");
        } else if (mm) {
  
        if (file) {
                seq_pad(m, ' ');
 -              seq_path(m, &file->f_path, "");
 +              seq_path(m, &file->f_path, "\n\\");
        } else if (mm) {
-               pid_t tid = vm_is_stack(priv->task, vma, is_pid);
+               pid_t tid = pid_of_stack(priv, vma, is_pid);
  
 diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
 index a90d6d35..d08047c 100644
  
 diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
 index a90d6d35..d08047c 100644
@@ -67311,7 +66952,7 @@ index bb2869f..d34ada8 100644
        if (!msg_head) {
                printk(KERN_ERR
 diff --git a/fs/read_write.c b/fs/read_write.c
        if (!msg_head) {
                printk(KERN_ERR
 diff --git a/fs/read_write.c b/fs/read_write.c
-index 009d854..16ce214 100644
+index 7d9318c..51b336f 100644
 --- a/fs/read_write.c
 +++ b/fs/read_write.c
 @@ -495,7 +495,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
 --- a/fs/read_write.c
 +++ b/fs/read_write.c
 @@ -495,7 +495,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
@@ -67477,10 +67118,10 @@ index 621b9f3..af527fd 100644
                   SF(s_do_balance), SF(s_unneeded_left_neighbor),
                   SF(s_good_search_by_key_reada), SF(s_bmaps),
 diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
                   SF(s_do_balance), SF(s_unneeded_left_neighbor),
                   SF(s_good_search_by_key_reada), SF(s_bmaps),
 diff --git a/fs/reiserfs/reiserfs.h b/fs/reiserfs/reiserfs.h
-index 735c2c2..81b91af 100644
+index 1894d96..1dfd1c2 100644
 --- a/fs/reiserfs/reiserfs.h
 +++ b/fs/reiserfs/reiserfs.h
 --- a/fs/reiserfs/reiserfs.h
 +++ b/fs/reiserfs/reiserfs.h
-@@ -573,7 +573,7 @@ struct reiserfs_sb_info {
+@@ -576,7 +576,7 @@ struct reiserfs_sb_info {
        /* Comment? -Hans */
        wait_queue_head_t s_wait;
        /* increased by one every time the  tree gets re-balanced */
        /* Comment? -Hans */
        wait_queue_head_t s_wait;
        /* increased by one every time the  tree gets re-balanced */
@@ -67489,7 +67130,7 @@ index 735c2c2..81b91af 100644
  
        /* File system properties. Currently holds on-disk FS format */
        unsigned long s_properties;
  
        /* File system properties. Currently holds on-disk FS format */
        unsigned long s_properties;
-@@ -2294,7 +2294,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode)
+@@ -2297,7 +2297,7 @@ static inline loff_t max_reiserfs_offset(struct inode *inode)
  #define REISERFS_USER_MEM             1       /* user memory mode */
  
  #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter)
  #define REISERFS_USER_MEM             1       /* user memory mode */
  
  #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter)
@@ -67498,6 +67139,21 @@ index 735c2c2..81b91af 100644
  #define FILESYSTEM_CHANGED_TB(tb)  (get_generation((tb)->tb_sb) != (tb)->fs_gen)
  #define __fs_changed(gen,s) (gen != get_generation (s))
  #define fs_changed(gen,s)             \
  #define FILESYSTEM_CHANGED_TB(tb)  (get_generation((tb)->tb_sb) != (tb)->fs_gen)
  #define __fs_changed(gen,s) (gen != get_generation (s))
  #define fs_changed(gen,s)             \
+diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
+index f1376c9..f9378e9 100644
+--- a/fs/reiserfs/super.c
++++ b/fs/reiserfs/super.c
+@@ -1857,6 +1857,10 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
+       sbi->s_mount_opt |= (1 << REISERFS_SMALLTAIL);
+       sbi->s_mount_opt |= (1 << REISERFS_ERROR_RO);
+       sbi->s_mount_opt |= (1 << REISERFS_BARRIER_FLUSH);
++#ifdef CONFIG_REISERFS_FS_XATTR
++      /* turn on user xattrs by default */
++      sbi->s_mount_opt |= (1 << REISERFS_XATTRS_USER);
++#endif
+       /* no preallocation minimum, be smart in reiserfs_file_write instead */
+       sbi->s_alloc_options.preallocmin = 0;
+       /* Preallocate by 16 blocks (17-1) at once */
 diff --git a/fs/select.c b/fs/select.c
 index 467bb1c..cf9d65a 100644
 --- a/fs/select.c
 diff --git a/fs/select.c b/fs/select.c
 index 467bb1c..cf9d65a 100644
 --- a/fs/select.c
@@ -67609,7 +67265,7 @@ index 3857b72..0b7281e 100644
  {
        const struct seq_operations *op = ((struct seq_file *)file->private_data)->op;
 diff --git a/fs/splice.c b/fs/splice.c
  {
        const struct seq_operations *op = ((struct seq_file *)file->private_data)->op;
 diff --git a/fs/splice.c b/fs/splice.c
-index f5cb9ba..8ddb1e9 100644
+index 75c6058..770d40c 100644
 --- a/fs/splice.c
 +++ b/fs/splice.c
 @@ -193,7 +193,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
 --- a/fs/splice.c
 +++ b/fs/splice.c
 @@ -193,7 +193,7 @@ ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
@@ -67709,7 +67365,7 @@ index f5cb9ba..8ddb1e9 100644
  
                current->splice_pipe = pipe;
        }
  
                current->splice_pipe = pipe;
        }
-@@ -1496,6 +1496,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
+@@ -1497,6 +1497,7 @@ static int get_iovec_page_array(const struct iovec __user *iov,
  
                        partial[buffers].offset = off;
                        partial[buffers].len = plen;
  
                        partial[buffers].offset = off;
                        partial[buffers].len = plen;
@@ -67717,7 +67373,7 @@ index f5cb9ba..8ddb1e9 100644
  
                        off = 0;
                        len -= plen;
  
                        off = 0;
                        len -= plen;
-@@ -1732,9 +1733,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1733,9 +1734,9 @@ static int ipipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
                        ret = -ERESTARTSYS;
                        break;
                }
                        ret = -ERESTARTSYS;
                        break;
                }
@@ -67729,7 +67385,7 @@ index f5cb9ba..8ddb1e9 100644
                        if (flags & SPLICE_F_NONBLOCK) {
                                ret = -EAGAIN;
                                break;
                        if (flags & SPLICE_F_NONBLOCK) {
                                ret = -EAGAIN;
                                break;
-@@ -1766,7 +1767,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1767,7 +1768,7 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
        pipe_lock(pipe);
  
        while (pipe->nrbufs >= pipe->buffers) {
        pipe_lock(pipe);
  
        while (pipe->nrbufs >= pipe->buffers) {
@@ -67738,7 +67394,7 @@ index f5cb9ba..8ddb1e9 100644
                        send_sig(SIGPIPE, current, 0);
                        ret = -EPIPE;
                        break;
                        send_sig(SIGPIPE, current, 0);
                        ret = -EPIPE;
                        break;
-@@ -1779,9 +1780,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
+@@ -1780,9 +1781,9 @@ static int opipe_prep(struct pipe_inode_info *pipe, unsigned int flags)
                        ret = -ERESTARTSYS;
                        break;
                }
                        ret = -ERESTARTSYS;
                        break;
                }
@@ -67750,7 +67406,7 @@ index f5cb9ba..8ddb1e9 100644
        }
  
        pipe_unlock(pipe);
        }
  
        pipe_unlock(pipe);
-@@ -1817,14 +1818,14 @@ retry:
+@@ -1818,14 +1819,14 @@ retry:
        pipe_double_lock(ipipe, opipe);
  
        do {
        pipe_double_lock(ipipe, opipe);
  
        do {
@@ -67767,7 +67423,7 @@ index f5cb9ba..8ddb1e9 100644
                        break;
  
                /*
                        break;
  
                /*
-@@ -1921,7 +1922,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
+@@ -1922,7 +1923,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
        pipe_double_lock(ipipe, opipe);
  
        do {
        pipe_double_lock(ipipe, opipe);
  
        do {
@@ -67776,7 +67432,7 @@ index f5cb9ba..8ddb1e9 100644
                        send_sig(SIGPIPE, current, 0);
                        if (!ret)
                                ret = -EPIPE;
                        send_sig(SIGPIPE, current, 0);
                        if (!ret)
                                ret = -EPIPE;
-@@ -1966,7 +1967,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
+@@ -1967,7 +1968,7 @@ static int link_pipe(struct pipe_inode_info *ipipe,
         * return EAGAIN if we have the potential of some data in the
         * future, otherwise just return 0
         */
         * return EAGAIN if we have the potential of some data in the
         * future, otherwise just return 0
         */
@@ -67958,7 +67614,7 @@ index aa138d6..5f3a811 100644
        error = notify_change(path->dentry, &newattrs, &delegated_inode);
        mutex_unlock(&inode->i_mutex);
 diff --git a/fs/xattr.c b/fs/xattr.c
        error = notify_change(path->dentry, &newattrs, &delegated_inode);
        mutex_unlock(&inode->i_mutex);
 diff --git a/fs/xattr.c b/fs/xattr.c
-index c69e6d4..cc56af5 100644
+index 64e83ef..b6be154 100644
 --- a/fs/xattr.c
 +++ b/fs/xattr.c
 @@ -227,6 +227,27 @@ int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
 --- a/fs/xattr.c
 +++ b/fs/xattr.c
 @@ -227,6 +227,27 @@ int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
@@ -68012,7 +67668,7 @@ index c69e6d4..cc56af5 100644
  out:
        if (vvalue)
                vfree(vvalue);
  out:
        if (vvalue)
                vfree(vvalue);
-@@ -377,7 +403,7 @@ retry:
+@@ -376,7 +402,7 @@ retry:
                return error;
        error = mnt_want_write(path.mnt);
        if (!error) {
                return error;
        error = mnt_want_write(path.mnt);
        if (!error) {
@@ -68021,16 +67677,7 @@ index c69e6d4..cc56af5 100644
                mnt_drop_write(path.mnt);
        }
        path_put(&path);
                mnt_drop_write(path.mnt);
        }
        path_put(&path);
-@@ -401,7 +427,7 @@ retry:
-               return error;
-       error = mnt_want_write(path.mnt);
-       if (!error) {
--              error = setxattr(path.dentry, name, value, size, flags);
-+              error = setxattr(&path, name, value, size, flags);
-               mnt_drop_write(path.mnt);
-       }
-       path_put(&path);
-@@ -416,16 +442,14 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
+@@ -405,16 +431,14 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
                const void __user *,value, size_t, size, int, flags)
  {
        struct fd f = fdget(fd);
                const void __user *,value, size_t, size, int, flags)
  {
        struct fd f = fdget(fd);
@@ -68049,7 +67696,7 @@ index c69e6d4..cc56af5 100644
                mnt_drop_write_file(f.file);
        }
        fdput(f);
                mnt_drop_write_file(f.file);
        }
        fdput(f);
-@@ -626,7 +650,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
+@@ -600,7 +624,7 @@ SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size)
   * Extended attribute REMOVE operations
   */
  static long
   * Extended attribute REMOVE operations
   */
  static long
@@ -68058,7 +67705,7 @@ index c69e6d4..cc56af5 100644
  {
        int error;
        char kname[XATTR_NAME_MAX + 1];
  {
        int error;
        char kname[XATTR_NAME_MAX + 1];
-@@ -637,7 +661,10 @@ removexattr(struct dentry *d, const char __user *name)
+@@ -611,7 +635,10 @@ removexattr(struct dentry *d, const char __user *name)
        if (error < 0)
                return error;
  
        if (error < 0)
                return error;
  
@@ -68069,8 +67716,8 @@ index c69e6d4..cc56af5 100644
 +      return vfs_removexattr(path->dentry, kname);
  }
  
 +      return vfs_removexattr(path->dentry, kname);
  }
  
SYSCALL_DEFINE2(removexattr, const char __user *, pathname,
-@@ -652,7 +679,7 @@ retry:
static int path_removexattr(const char __user *pathname,
+@@ -625,7 +652,7 @@ retry:
                return error;
        error = mnt_want_write(path.mnt);
        if (!error) {
                return error;
        error = mnt_want_write(path.mnt);
        if (!error) {
@@ -68079,16 +67726,7 @@ index c69e6d4..cc56af5 100644
                mnt_drop_write(path.mnt);
        }
        path_put(&path);
                mnt_drop_write(path.mnt);
        }
        path_put(&path);
-@@ -675,7 +702,7 @@ retry:
-               return error;
-       error = mnt_want_write(path.mnt);
-       if (!error) {
--              error = removexattr(path.dentry, name);
-+              error = removexattr(&path, name);
-               mnt_drop_write(path.mnt);
-       }
-       path_put(&path);
-@@ -689,16 +716,16 @@ retry:
+@@ -651,16 +678,16 @@ SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname,
  SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
  {
        struct fd f = fdget(fd);
  SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
  {
        struct fd f = fdget(fd);
@@ -68110,7 +67748,7 @@ index c69e6d4..cc56af5 100644
        }
        fdput(f);
 diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
        }
        fdput(f);
 diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
-index 86df952..ac430d6 100644
+index 79c9819..22226b4 100644
 --- a/fs/xfs/libxfs/xfs_bmap.c
 +++ b/fs/xfs/libxfs/xfs_bmap.c
 @@ -583,7 +583,7 @@ xfs_bmap_validate_ret(
 --- a/fs/xfs/libxfs/xfs_bmap.c
 +++ b/fs/xfs/libxfs/xfs_bmap.c
 @@ -583,7 +583,7 @@ xfs_bmap_validate_ret(
@@ -68141,7 +67779,7 @@ index f1b69ed..3d0222f 100644
                        return 0;
                sfep = dp->d_ops->sf_nextentry(sfp, sfep);
 diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
                        return 0;
                sfep = dp->d_ops->sf_nextentry(sfp, sfep);
 diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
-index 3799695..0ddc953 100644
+index 24c926b6..8726af88 100644
 --- a/fs/xfs/xfs_ioctl.c
 +++ b/fs/xfs/xfs_ioctl.c
 @@ -122,7 +122,7 @@ xfs_find_handle(
 --- a/fs/xfs/xfs_ioctl.c
 +++ b/fs/xfs/xfs_ioctl.c
 @@ -122,7 +122,7 @@ xfs_find_handle(
@@ -68154,10 +67792,10 @@ index 3799695..0ddc953 100644
                goto out_put;
  
 diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
                goto out_put;
  
 diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
-index d10dc8f..56b3430 100644
+index 6a51619..9592e1b 100644
 --- a/fs/xfs/xfs_linux.h
 +++ b/fs/xfs/xfs_linux.h
 --- a/fs/xfs/xfs_linux.h
 +++ b/fs/xfs/xfs_linux.h
-@@ -230,7 +230,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid)
+@@ -234,7 +234,7 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid)
   * of the compiler which do not like us using do_div in the middle
   * of large functions.
   */
   * of the compiler which do not like us using do_div in the middle
   * of large functions.
   */
@@ -68166,7 +67804,7 @@ index d10dc8f..56b3430 100644
  {
        __u32   mod;
  
  {
        __u32   mod;
  
-@@ -286,7 +286,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
+@@ -290,7 +290,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
        return 0;
  }
  #else
        return 0;
  }
  #else
@@ -77847,7 +77485,7 @@ index 0000000..0e39d8c
 +}
 diff --git a/grsecurity/grsec_mount.c b/grsecurity/grsec_mount.c
 new file mode 100644
 +}
 diff --git a/grsecurity/grsec_mount.c b/grsecurity/grsec_mount.c
 new file mode 100644
-index 0000000..cd9e124
+index 0000000..6f9eb73
 --- /dev/null
 +++ b/grsecurity/grsec_mount.c
 @@ -0,0 +1,65 @@
 --- /dev/null
 +++ b/grsecurity/grsec_mount.c
 @@ -0,0 +1,65 @@
@@ -77879,11 +77517,11 @@ index 0000000..cd9e124
 +}
 +
 +void
 +}
 +
 +void
-+gr_log_mount(const char *from, const char *to, const int retval)
++gr_log_mount(const char *from, struct path *to, const int retval)
 +{
 +#ifdef CONFIG_GRKERNSEC_AUDIT_MOUNT
 +      if (grsec_enable_mount && (retval >= 0))
 +{
 +#ifdef CONFIG_GRKERNSEC_AUDIT_MOUNT
 +      if (grsec_enable_mount && (retval >= 0))
-+              gr_log_str_str(GR_DO_AUDIT, GR_MOUNT_AUDIT_MSG, from ? from : "none", to);
++              gr_log_str_fs(GR_DO_AUDIT, GR_MOUNT_AUDIT_MSG, from ? from : "none", to->dentry, to->mnt);
 +#endif
 +      return;
 +}
 +#endif
 +      return;
 +}
@@ -79219,7 +78857,7 @@ index 77ff547..181834f 100644
  #define pud_none(pud)                 0
  #define pud_bad(pud)                  0
 diff --git a/include/asm-generic/atomic-long.h b/include/asm-generic/atomic-long.h
  #define pud_none(pud)                 0
  #define pud_bad(pud)                  0
 diff --git a/include/asm-generic/atomic-long.h b/include/asm-generic/atomic-long.h
-index b7babf0..97f4c4f 100644
+index b7babf0..1e4b4f1 100644
 --- a/include/asm-generic/atomic-long.h
 +++ b/include/asm-generic/atomic-long.h
 @@ -22,6 +22,12 @@
 --- a/include/asm-generic/atomic-long.h
 +++ b/include/asm-generic/atomic-long.h
 @@ -22,6 +22,12 @@
@@ -79480,7 +79118,15 @@ index b7babf0..97f4c4f 100644
  static inline int atomic_long_sub_and_test(long i, atomic_long_t *l)
  {
        atomic_t *v = (atomic_t *)l;
  static inline int atomic_long_sub_and_test(long i, atomic_long_t *l)
  {
        atomic_t *v = (atomic_t *)l;
-@@ -218,6 +356,16 @@ static inline long atomic_long_add_return(long i, atomic_long_t *l)
+@@ -211,13 +349,23 @@ static inline int atomic_long_add_negative(long i, atomic_long_t *l)
+       return atomic_add_negative(i, v);
+ }
+-static inline long atomic_long_add_return(long i, atomic_long_t *l)
++static inline long __intentional_overflow(-1) atomic_long_add_return(long i, atomic_long_t *l)
+ {
+       atomic_t *v = (atomic_t *)l;
        return (long)atomic_add_return(i, v);
  }
  
        return (long)atomic_add_return(i, v);
  }
  
@@ -79571,21 +79217,8 @@ index b7babf0..97f4c4f 100644
 +#endif
 +
  #endif  /*  _ASM_GENERIC_ATOMIC_LONG_H  */
 +#endif
 +
  #endif  /*  _ASM_GENERIC_ATOMIC_LONG_H  */
-diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h
-index 9c79e76..9f7827d 100644
---- a/include/asm-generic/atomic.h
-+++ b/include/asm-generic/atomic.h
-@@ -154,7 +154,7 @@ static inline int __atomic_add_unless(atomic_t *v, int a, int u)
-  * Atomically clears the bits set in @mask from @v
-  */
- #ifndef atomic_clear_mask
--static inline void atomic_clear_mask(unsigned long mask, atomic_t *v)
-+static inline void atomic_clear_mask(unsigned int mask, atomic_t *v)
- {
-       unsigned long flags;
 diff --git a/include/asm-generic/atomic64.h b/include/asm-generic/atomic64.h
 diff --git a/include/asm-generic/atomic64.h b/include/asm-generic/atomic64.h
-index b18ce4f..2ee2843 100644
+index 30ad9c8..c70c170 100644
 --- a/include/asm-generic/atomic64.h
 +++ b/include/asm-generic/atomic64.h
 @@ -16,6 +16,8 @@ typedef struct {
 --- a/include/asm-generic/atomic64.h
 +++ b/include/asm-generic/atomic64.h
 @@ -16,6 +16,8 @@ typedef struct {
@@ -79597,7 +79230,7 @@ index b18ce4f..2ee2843 100644
  #define ATOMIC64_INIT(i)      { (i) }
  
  extern long long atomic64_read(const atomic64_t *v);
  #define ATOMIC64_INIT(i)      { (i) }
  
  extern long long atomic64_read(const atomic64_t *v);
-@@ -39,4 +41,14 @@ extern int   atomic64_add_unless(atomic64_t *v, long long a, long long u);
+@@ -51,4 +53,14 @@ extern int   atomic64_add_unless(atomic64_t *v, long long a, long long u);
  #define atomic64_dec_and_test(v)      (atomic64_dec_return((v)) == 0)
  #define atomic64_inc_not_zero(v)      atomic64_add_unless((v), 1LL, 0LL)
  
  #define atomic64_dec_and_test(v)      (atomic64_dec_return((v)) == 0)
  #define atomic64_inc_not_zero(v)      atomic64_add_unless((v), 1LL, 0LL)
  
@@ -79701,7 +79334,7 @@ index 0d68a1e..b74a761 100644
        machine_restart(NULL);
  }
 diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
        machine_restart(NULL);
  }
 diff --git a/include/asm-generic/io.h b/include/asm-generic/io.h
-index 975e1cc..0b8a083 100644
+index b8fdc57..c6d5a5c 100644
 --- a/include/asm-generic/io.h
 +++ b/include/asm-generic/io.h
 @@ -289,7 +289,7 @@ static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
 --- a/include/asm-generic/io.h
 +++ b/include/asm-generic/io.h
 @@ -289,7 +289,7 @@ static inline void pci_iounmap(struct pci_dev *dev, void __iomem *p)
@@ -79854,10 +79487,10 @@ index 810431d..0ec4804f 100644
   * (puds are folded into pgds so this doesn't get actually called,
   * but the define is needed for a generic inline function.)
 diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
   * (puds are folded into pgds so this doesn't get actually called,
   * but the define is needed for a generic inline function.)
 diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h
-index 53b2acc..f4568e7 100644
+index 752e30d..87f172d 100644
 --- a/include/asm-generic/pgtable.h
 +++ b/include/asm-generic/pgtable.h
 --- a/include/asm-generic/pgtable.h
 +++ b/include/asm-generic/pgtable.h
-@@ -819,6 +819,22 @@ static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
+@@ -828,6 +828,22 @@ static inline void pmdp_set_numa(struct mm_struct *mm, unsigned long addr,
  }
  #endif /* CONFIG_NUMA_BALANCING */
  
  }
  #endif /* CONFIG_NUMA_BALANCING */
  
@@ -79906,10 +79539,10 @@ index 72d8803..cb9749c 100644
 +
  #endif /* __ASM_GENERIC_UACCESS_H */
 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
 +
  #endif /* __ASM_GENERIC_UACCESS_H */
 diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
-index 5ba0360..e85c934 100644
+index aa70cbd..fd72c7a 100644
 --- a/include/asm-generic/vmlinux.lds.h
 +++ b/include/asm-generic/vmlinux.lds.h
 --- a/include/asm-generic/vmlinux.lds.h
 +++ b/include/asm-generic/vmlinux.lds.h
-@@ -231,6 +231,7 @@
+@@ -233,6 +233,7 @@
        .rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {           \
                VMLINUX_SYMBOL(__start_rodata) = .;                     \
                *(.rodata) *(.rodata.*)                                 \
        .rodata           : AT(ADDR(.rodata) - LOAD_OFFSET) {           \
                VMLINUX_SYMBOL(__start_rodata) = .;                     \
                *(.rodata) *(.rodata.*)                                 \
@@ -79917,7 +79550,7 @@ index 5ba0360..e85c934 100644
                *(__vermagic)           /* Kernel version magic */      \
                . = ALIGN(8);                                           \
                VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .;         \
                *(__vermagic)           /* Kernel version magic */      \
                . = ALIGN(8);                                           \
                VMLINUX_SYMBOL(__start___tracepoints_ptrs) = .;         \
-@@ -722,17 +723,18 @@
+@@ -724,17 +725,18 @@
   * section in the linker script will go there too.  @phdr should have
   * a leading colon.
   *
   * section in the linker script will go there too.  @phdr should have
   * a leading colon.
   *
@@ -79954,18 +79587,18 @@ index 623a59c..1e79ab9 100644
  struct crypto_instance {
        struct crypto_alg alg;
 diff --git a/include/drm/drmP.h b/include/drm/drmP.h
  struct crypto_instance {
        struct crypto_alg alg;
 diff --git a/include/drm/drmP.h b/include/drm/drmP.h
-index 1968907..7d9ed9f 100644
+index 53ed876..5bb09be 100644
 --- a/include/drm/drmP.h
 +++ b/include/drm/drmP.h
 --- a/include/drm/drmP.h
 +++ b/include/drm/drmP.h
-@@ -68,6 +68,7 @@
- #include <linux/workqueue.h>
- #include <linux/poll.h>
+@@ -59,6 +59,7 @@
+ #include <asm/mman.h>
  #include <asm/pgalloc.h>
 +#include <asm/local.h>
  #include <asm/pgalloc.h>
 +#include <asm/local.h>
- #include <drm/drm.h>
- #include <drm/drm_sarea.h>
- #include <drm/drm_vma_manager.h>
-@@ -260,10 +261,12 @@ do {                                                                             \
+ #include <asm/uaccess.h>
+ #include <uapi/drm/drm.h>
+@@ -223,10 +224,12 @@ void drm_err(const char *func, const char *format, ...);
   * \param cmd command.
   * \param arg argument.
   */
   * \param cmd command.
   * \param arg argument.
   */
@@ -79980,7 +79613,7 @@ index 1968907..7d9ed9f 100644
                               unsigned long arg);
  
  #define DRM_IOCTL_NR(n)                _IOC_NR(n)
                               unsigned long arg);
  
  #define DRM_IOCTL_NR(n)                _IOC_NR(n)
-@@ -279,10 +282,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
+@@ -242,10 +245,10 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
  struct drm_ioctl_desc {
        unsigned int cmd;
        int flags;
  struct drm_ioctl_desc {
        unsigned int cmd;
        int flags;
@@ -79993,7 +79626,7 @@ index 1968907..7d9ed9f 100644
  
  /**
   * Creates a driver or general drm_ioctl_desc array entry for the given
  
  /**
   * Creates a driver or general drm_ioctl_desc array entry for the given
-@@ -946,7 +949,8 @@ struct drm_info_list {
+@@ -629,7 +632,8 @@ struct drm_info_list {
        int (*show)(struct seq_file*, void*); /** show callback */
        u32 driver_features; /**< Required driver features for this entry */
        void *data;
        int (*show)(struct seq_file*, void*); /** show callback */
        u32 driver_features; /**< Required driver features for this entry */
        void *data;
@@ -80003,7 +79636,7 @@ index 1968907..7d9ed9f 100644
  
  /**
   * debugfs node structure. This structure represents a debugfs file.
  
  /**
   * debugfs node structure. This structure represents a debugfs file.
-@@ -1030,7 +1034,7 @@ struct drm_device {
+@@ -713,7 +717,7 @@ struct drm_device {
  
        /** \name Usage Counters */
        /*@{ */
  
        /** \name Usage Counters */
        /*@{ */
@@ -80099,19 +79732,10 @@ index c1da539..1dcec55 100644
  struct atmphy_ops {
        int (*start)(struct atm_dev *dev);
 diff --git a/include/linux/audit.h b/include/linux/audit.h
  struct atmphy_ops {
        int (*start)(struct atm_dev *dev);
 diff --git a/include/linux/audit.h b/include/linux/audit.h
-index 22cfddb..1514eef 100644
+index 10f155b..6c73ffe 100644
 --- a/include/linux/audit.h
 +++ b/include/linux/audit.h
 --- a/include/linux/audit.h
 +++ b/include/linux/audit.h
-@@ -86,7 +86,7 @@ extern unsigned compat_dir_class[];
- extern unsigned compat_chattr_class[];
- extern unsigned compat_signal_class[];
--extern int __weak audit_classify_compat_syscall(int abi, unsigned syscall);
-+extern int audit_classify_compat_syscall(int abi, unsigned syscall);
- /* audit_names->type values */
- #define       AUDIT_TYPE_UNKNOWN      0       /* we don't know yet */
-@@ -210,7 +210,7 @@ static inline void audit_ptrace(struct task_struct *t)
+@@ -219,7 +219,7 @@ static inline void audit_ptrace(struct task_struct *t)
  extern unsigned int audit_serial(void);
  extern int auditsc_get_stamp(struct audit_context *ctx,
                              struct timespec *t, unsigned int *serial);
  extern unsigned int audit_serial(void);
  extern int auditsc_get_stamp(struct audit_context *ctx,
                              struct timespec *t, unsigned int *serial);
@@ -80146,10 +79770,10 @@ index 61f29e5..e67c658 100644
  extern void __register_binfmt(struct linux_binfmt *fmt, int insert);
  
 diff --git a/include/linux/bitops.h b/include/linux/bitops.h
  extern void __register_binfmt(struct linux_binfmt *fmt, int insert);
  
 diff --git a/include/linux/bitops.h b/include/linux/bitops.h
-index cbc5833..8123ebc 100644
+index 5d858e0..336c1d9 100644
 --- a/include/linux/bitops.h
 +++ b/include/linux/bitops.h
 --- a/include/linux/bitops.h
 +++ b/include/linux/bitops.h
-@@ -122,7 +122,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift)
+@@ -105,7 +105,7 @@ static inline __u64 ror64(__u64 word, unsigned int shift)
   * @word: value to rotate
   * @shift: bits to roll
   */
   * @word: value to rotate
   * @shift: bits to roll
   */
@@ -80158,7 +79782,7 @@ index cbc5833..8123ebc 100644
  {
        return (word << shift) | (word >> (32 - shift));
  }
  {
        return (word << shift) | (word >> (32 - shift));
  }
-@@ -132,7 +132,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift)
+@@ -115,7 +115,7 @@ static inline __u32 rol32(__u32 word, unsigned int shift)
   * @word: value to rotate
   * @shift: bits to roll
   */
   * @word: value to rotate
   * @shift: bits to roll
   */
@@ -80167,7 +79791,7 @@ index cbc5833..8123ebc 100644
  {
        return (word >> shift) | (word << (32 - shift));
  }
  {
        return (word >> shift) | (word << (32 - shift));
  }
-@@ -188,7 +188,7 @@ static inline __s32 sign_extend32(__u32 value, int index)
+@@ -171,7 +171,7 @@ static inline __s32 sign_extend32(__u32 value, int index)
        return (__s32)(value << shift) >> shift;
  }
  
        return (__s32)(value << shift) >> shift;
  }
  
@@ -80177,10 +79801,10 @@ index cbc5833..8123ebc 100644
        if (sizeof(l) == 4)
                return fls(l);
 diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
        if (sizeof(l) == 4)
                return fls(l);
 diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
-index f2057ff8..59dfa2d 100644
+index aac0f9e..73c9869 100644
 --- a/include/linux/blkdev.h
 +++ b/include/linux/blkdev.h
 --- a/include/linux/blkdev.h
 +++ b/include/linux/blkdev.h
-@@ -1625,7 +1625,7 @@ struct block_device_operations {
+@@ -1615,7 +1615,7 @@ struct block_device_operations {
        /* this callback is with swap_lock and sometimes page table lock held */
        void (*swap_slot_free_notify) (struct block_device *, unsigned long);
        struct module *owner;
        /* this callback is with swap_lock and sometimes page table lock held */
        void (*swap_slot_free_notify) (struct block_device *, unsigned long);
        struct module *owner;
@@ -80266,10 +79890,10 @@ index 4ce9056..86caac6 100644
  extern struct cleancache_ops *
        cleancache_register_ops(struct cleancache_ops *ops);
 diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
  extern struct cleancache_ops *
        cleancache_register_ops(struct cleancache_ops *ops);
 diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
-index 411dd7e..ee38878 100644
+index 2839c63..5b06b6b 100644
 --- a/include/linux/clk-provider.h
 +++ b/include/linux/clk-provider.h
 --- a/include/linux/clk-provider.h
 +++ b/include/linux/clk-provider.h
-@@ -180,6 +180,7 @@ struct clk_ops {
+@@ -191,6 +191,7 @@ struct clk_ops {
        void            (*init)(struct clk_hw *hw);
        int             (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
  };
        void            (*init)(struct clk_hw *hw);
        int             (*debug_init)(struct clk_hw *hw, struct dentry *dentry);
  };
@@ -80300,7 +79924,7 @@ index e649426..a74047b 100644
  asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t);
  /*
 diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
  asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t);
  /*
 diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
-index 2507fd2..55203f8 100644
+index d1a5582..4424efa 100644
 --- a/include/linux/compiler-gcc4.h
 +++ b/include/linux/compiler-gcc4.h
 @@ -39,9 +39,34 @@
 --- a/include/linux/compiler-gcc4.h
 +++ b/include/linux/compiler-gcc4.h
 @@ -39,9 +39,34 @@
@@ -80516,10 +80140,10 @@ index 34025df..d94bbbc 100644
  /*
   * Users often need to create attribute structures for their configurable
 diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
  /*
   * Users often need to create attribute structures for their configurable
 diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
-index 7d1955a..d86a3ca 100644
+index 503b085b..1638c9e 100644
 --- a/include/linux/cpufreq.h
 +++ b/include/linux/cpufreq.h
 --- a/include/linux/cpufreq.h
 +++ b/include/linux/cpufreq.h
-@@ -203,6 +203,7 @@ struct global_attr {
+@@ -206,6 +206,7 @@ struct global_attr {
        ssize_t (*store)(struct kobject *a, struct attribute *b,
                         const char *c, size_t count);
  };
        ssize_t (*store)(struct kobject *a, struct attribute *b,
                         const char *c, size_t count);
  };
@@ -80527,7 +80151,7 @@ index 7d1955a..d86a3ca 100644
  
  #define define_one_global_ro(_name)           \
  static struct global_attr _name =             \
  
  #define define_one_global_ro(_name)           \
  static struct global_attr _name =             \
-@@ -269,7 +270,7 @@ struct cpufreq_driver {
+@@ -273,7 +274,7 @@ struct cpufreq_driver {
        bool                    boost_supported;
        bool                    boost_enabled;
        int     (*set_boost)    (int state);
        bool                    boost_supported;
        bool                    boost_enabled;
        int     (*set_boost)    (int state);
@@ -80560,7 +80184,7 @@ index 25e0df6..952dffd 100644
  #ifdef CONFIG_CPU_IDLE
  extern int cpuidle_register_governor(struct cpuidle_governor *gov);
 diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
  #ifdef CONFIG_CPU_IDLE
  extern int cpuidle_register_governor(struct cpuidle_governor *gov);
 diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
-index 2997af6..424ddc1 100644
+index 0a9a6da..ea597ca 100644
 --- a/include/linux/cpumask.h
 +++ b/include/linux/cpumask.h
 @@ -118,17 +118,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
 --- a/include/linux/cpumask.h
 +++ b/include/linux/cpumask.h
 @@ -118,17 +118,17 @@ static inline unsigned int cpumask_first(const struct cpumask *srcp)
@@ -80612,7 +80236,7 @@ index 2997af6..424ddc1 100644
  int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp);
  
 diff --git a/include/linux/cred.h b/include/linux/cred.h
  int cpumask_set_cpu_local_first(int i, int numa_node, cpumask_t *dstp);
  
 diff --git a/include/linux/cred.h b/include/linux/cred.h
-index b2d0820..2ecafd3 100644
+index 2fb2ca2..d6a3340 100644
 --- a/include/linux/cred.h
 +++ b/include/linux/cred.h
 @@ -35,7 +35,7 @@ struct group_info {
 --- a/include/linux/cred.h
 +++ b/include/linux/cred.h
 @@ -35,7 +35,7 @@ struct group_info {
@@ -80624,7 +80248,7 @@ index b2d0820..2ecafd3 100644
  
  /**
   * get_group_info - Get a reference to a group info structure
  
  /**
   * get_group_info - Get a reference to a group info structure
-@@ -136,7 +136,7 @@ struct cred {
+@@ -137,7 +137,7 @@ struct cred {
        struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */
        struct group_info *group_info;  /* supplementary groups for euid/fsgid */
        struct rcu_head rcu;            /* RCU deletion hook */
        struct user_namespace *user_ns; /* user_ns the caps and keyrings are relative to. */
        struct group_info *group_info;  /* supplementary groups for euid/fsgid */
        struct rcu_head rcu;            /* RCU deletion hook */
@@ -80633,7 +80257,7 @@ index b2d0820..2ecafd3 100644
  
  extern void __put_cred(struct cred *);
  extern void exit_creds(struct task_struct *);
  
  extern void __put_cred(struct cred *);
  extern void exit_creds(struct task_struct *);
-@@ -194,6 +194,9 @@ static inline void validate_creds_for_do_exit(struct task_struct *tsk)
+@@ -195,6 +195,9 @@ static inline void validate_creds_for_do_exit(struct task_struct *tsk)
  static inline void validate_process_creds(void)
  {
  }
  static inline void validate_process_creds(void)
  {
  }
@@ -80643,7 +80267,7 @@ index b2d0820..2ecafd3 100644
  #endif
  
  /**
  #endif
  
  /**
-@@ -331,6 +334,7 @@ static inline void put_cred(const struct cred *_cred)
+@@ -332,6 +335,7 @@ static inline void put_cred(const struct cred *_cred)
  
  #define task_uid(task)                (task_cred_xxx((task), uid))
  #define task_euid(task)               (task_cred_xxx((task), euid))
  
  #define task_uid(task)                (task_cred_xxx((task), uid))
  #define task_euid(task)               (task_cred_xxx((task), euid))
@@ -80694,13 +80318,13 @@ index 653589e..4ef254a 100644
        return c | 0x20;
  }
 diff --git a/include/linux/dcache.h b/include/linux/dcache.h
        return c | 0x20;
  }
 diff --git a/include/linux/dcache.h b/include/linux/dcache.h
-index 75a227c..1456987 100644
+index 1c2f1b8..c67151e 100644
 --- a/include/linux/dcache.h
 +++ b/include/linux/dcache.h
 --- a/include/linux/dcache.h
 +++ b/include/linux/dcache.h
-@@ -134,7 +134,7 @@ struct dentry {
+@@ -133,7 +133,7 @@ struct dentry {
+               struct hlist_node d_alias;      /* inode alias list */
+               struct rcu_head d_rcu;
        } d_u;
        } d_u;
-       struct list_head d_subdirs;     /* our children */
-       struct hlist_node d_alias;      /* inode alias list */
 -};
 +} __randomize_layout;
  
 -};
 +} __randomize_layout;
  
@@ -80733,10 +80357,10 @@ index f1863dc..5c26074 100644
  /**
   * struct devfreq - Device devfreq structure
 diff --git a/include/linux/device.h b/include/linux/device.h
  /**
   * struct devfreq - Device devfreq structure
 diff --git a/include/linux/device.h b/include/linux/device.h
-index 43d183a..03b6ba2 100644
+index ce1f2160..189bc33 100644
 --- a/include/linux/device.h
 +++ b/include/linux/device.h
 --- a/include/linux/device.h
 +++ b/include/linux/device.h
-@@ -310,7 +310,7 @@ struct subsys_interface {
+@@ -311,7 +311,7 @@ struct subsys_interface {
        struct list_head node;
        int (*add_dev)(struct device *dev, struct subsys_interface *sif);
        int (*remove_dev)(struct device *dev, struct subsys_interface *sif);
        struct list_head node;
        int (*add_dev)(struct device *dev, struct subsys_interface *sif);
        int (*remove_dev)(struct device *dev, struct subsys_interface *sif);
@@ -80745,7 +80369,7 @@ index 43d183a..03b6ba2 100644
  
  int subsys_interface_register(struct subsys_interface *sif);
  void subsys_interface_unregister(struct subsys_interface *sif);
  
  int subsys_interface_register(struct subsys_interface *sif);
  void subsys_interface_unregister(struct subsys_interface *sif);
-@@ -506,7 +506,7 @@ struct device_type {
+@@ -507,7 +507,7 @@ struct device_type {
        void (*release)(struct device *dev);
  
        const struct dev_pm_ops *pm;
        void (*release)(struct device *dev);
  
        const struct dev_pm_ops *pm;
@@ -80754,7 +80378,7 @@ index 43d183a..03b6ba2 100644
  
  /* interface for exporting device attributes */
  struct device_attribute {
  
  /* interface for exporting device attributes */
  struct device_attribute {
-@@ -516,11 +516,12 @@ struct device_attribute {
+@@ -517,11 +517,12 @@ struct device_attribute {
        ssize_t (*store)(struct device *dev, struct device_attribute *attr,
                         const char *buf, size_t count);
  };
        ssize_t (*store)(struct device *dev, struct device_attribute *attr,
                         const char *buf, size_t count);
  };
@@ -80769,7 +80393,7 @@ index 43d183a..03b6ba2 100644
  ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr,
                          char *buf);
 diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
  ssize_t device_show_ulong(struct device *dev, struct device_attribute *attr,
                          char *buf);
 diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
-index 931b709..89b2d89 100644
+index d5d3881..7ed54af 100644
 --- a/include/linux/dma-mapping.h
 +++ b/include/linux/dma-mapping.h
 @@ -60,7 +60,7 @@ struct dma_map_ops {
 --- a/include/linux/dma-mapping.h
 +++ b/include/linux/dma-mapping.h
 @@ -60,7 +60,7 @@ struct dma_map_ops {
@@ -80782,10 +80406,10 @@ index 931b709..89b2d89 100644
  #define DMA_BIT_MASK(n)       (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
  
 diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
  #define DMA_BIT_MASK(n)       (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
  
 diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
-index 1f9e642..39e4263 100644
+index 653a1fd..9133cd1 100644
 --- a/include/linux/dmaengine.h
 +++ b/include/linux/dmaengine.h
 --- a/include/linux/dmaengine.h
 +++ b/include/linux/dmaengine.h
-@@ -1147,9 +1147,9 @@ struct dma_pinned_list {
+@@ -1136,9 +1136,9 @@ struct dma_pinned_list {
  struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len);
  void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list);
  
  struct dma_pinned_list *dma_pin_iovec_pages(struct iovec *iov, size_t len);
  void dma_unpin_iovec_pages(struct dma_pinned_list* pinned_list);
  
@@ -80798,11 +80422,11 @@ index 1f9e642..39e4263 100644
        unsigned int offset, size_t len);
  
 diff --git a/include/linux/efi.h b/include/linux/efi.h
        unsigned int offset, size_t len);
  
 diff --git a/include/linux/efi.h b/include/linux/efi.h
-index 45cb4ff..c9b4912 100644
+index 0949f9c..04cb9a5 100644
 --- a/include/linux/efi.h
 +++ b/include/linux/efi.h
 --- a/include/linux/efi.h
 +++ b/include/linux/efi.h
-@@ -1036,6 +1036,7 @@ struct efivar_operations {
-       efi_set_variable_t *set_variable;
+@@ -1050,6 +1050,7 @@ struct efivar_operations {
+       efi_set_variable_nonblocking_t *set_variable_nonblocking;
        efi_query_variable_store_t *query_variable_store;
  };
 +typedef struct efivar_operations __no_const efivar_operations_no_const;
        efi_query_variable_store_t *query_variable_store;
  };
 +typedef struct efivar_operations __no_const efivar_operations_no_const;
@@ -80887,104 +80511,6 @@ index 230f87b..1fd0485 100644
  void do_close_on_exec(struct files_struct *);
  int iterate_fd(struct files_struct *, unsigned,
                int (*)(const void *, struct file *, unsigned),
  void do_close_on_exec(struct files_struct *);
  int iterate_fd(struct files_struct *, unsigned,
                int (*)(const void *, struct file *, unsigned),
-diff --git a/include/linux/filter.h b/include/linux/filter.h
-index a5227ab..c789945 100644
---- a/include/linux/filter.h
-+++ b/include/linux/filter.h
-@@ -9,6 +9,11 @@
- #include <linux/skbuff.h>
- #include <linux/workqueue.h>
- #include <uapi/linux/filter.h>
-+#include <asm/cacheflush.h>
-+
-+struct sk_buff;
-+struct sock;
-+struct seccomp_data;
- /* Internally used and optimized filter representation with extended
-  * instruction set based on top of classic BPF.
-@@ -320,20 +325,23 @@ struct sock_fprog_kern {
-       struct sock_filter      *filter;
- };
--struct sk_buff;
--struct sock;
--struct seccomp_data;
-+struct bpf_work_struct {
-+      struct bpf_prog *prog;
-+      struct work_struct work;
-+};
- struct bpf_prog {
-+      u32                     pages;          /* Number of allocated pages */
-       u32                     jited:1,        /* Is our filter JIT'ed? */
-                               len:31;         /* Number of filter blocks */
-       struct sock_fprog_kern  *orig_prog;     /* Original BPF program */
-+      struct bpf_work_struct  *work;          /* Deferred free work struct */
-       unsigned int            (*bpf_func)(const struct sk_buff *skb,
-                                           const struct bpf_insn *filter);
-+      /* Instructions for interpreter */
-       union {
-               struct sock_filter      insns[0];
-               struct bpf_insn         insnsi[0];
--              struct work_struct      work;
-       };
- };
-@@ -353,6 +361,26 @@ static inline unsigned int bpf_prog_size(unsigned int proglen)
- #define bpf_classic_proglen(fprog) (fprog->len * sizeof(fprog->filter[0]))
-+#ifdef CONFIG_DEBUG_SET_MODULE_RONX
-+static inline void bpf_prog_lock_ro(struct bpf_prog *fp)
-+{
-+      set_memory_ro((unsigned long)fp, fp->pages);
-+}
-+
-+static inline void bpf_prog_unlock_ro(struct bpf_prog *fp)
-+{
-+      set_memory_rw((unsigned long)fp, fp->pages);
-+}
-+#else
-+static inline void bpf_prog_lock_ro(struct bpf_prog *fp)
-+{
-+}
-+
-+static inline void bpf_prog_unlock_ro(struct bpf_prog *fp)
-+{
-+}
-+#endif /* CONFIG_DEBUG_SET_MODULE_RONX */
-+
- int sk_filter(struct sock *sk, struct sk_buff *skb);
- void bpf_prog_select_runtime(struct bpf_prog *fp);
-@@ -361,6 +389,17 @@ void bpf_prog_free(struct bpf_prog *fp);
- int bpf_convert_filter(struct sock_filter *prog, int len,
-                      struct bpf_insn *new_prog, int *new_len);
-+struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags);
-+struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size,
-+                                gfp_t gfp_extra_flags);
-+void __bpf_prog_free(struct bpf_prog *fp);
-+
-+static inline void bpf_prog_unlock_free(struct bpf_prog *fp)
-+{
-+      bpf_prog_unlock_ro(fp);
-+      __bpf_prog_free(fp);
-+}
-+
- int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog);
- void bpf_prog_destroy(struct bpf_prog *fp);
-@@ -450,7 +489,7 @@ static inline void bpf_jit_compile(struct bpf_prog *fp)
- static inline void bpf_jit_free(struct bpf_prog *fp)
- {
--      kfree(fp);
-+      bpf_prog_unlock_free(fp);
- }
- #endif /* CONFIG_BPF_JIT */
 diff --git a/include/linux/frontswap.h b/include/linux/frontswap.h
 index 8293262..2b3b8bd 100644
 --- a/include/linux/frontswap.h
 diff --git a/include/linux/frontswap.h b/include/linux/frontswap.h
 index 8293262..2b3b8bd 100644
 --- a/include/linux/frontswap.h
@@ -80999,10 +80525,10 @@ index 8293262..2b3b8bd 100644
  extern bool frontswap_enabled;
  extern struct frontswap_ops *
 diff --git a/include/linux/fs.h b/include/linux/fs.h
  extern bool frontswap_enabled;
  extern struct frontswap_ops *
 diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 9418772..0155807 100644
+index 9ab779e..0c636f2 100644
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
 --- a/include/linux/fs.h
 +++ b/include/linux/fs.h
-@@ -401,7 +401,7 @@ struct address_space {
+@@ -412,7 +412,7 @@ struct address_space {
        spinlock_t              private_lock;   /* for use by the address_space */
        struct list_head        private_list;   /* ditto */
        void                    *private_data;  /* ditto */
        spinlock_t              private_lock;   /* for use by the address_space */
        struct list_head        private_list;   /* ditto */
        void                    *private_data;  /* ditto */
@@ -81011,7 +80537,7 @@ index 9418772..0155807 100644
        /*
         * On most architectures that alignment is already the case; but
         * must be enforced here for CRIS, to let the least significant bit
        /*
         * On most architectures that alignment is already the case; but
         * must be enforced here for CRIS, to let the least significant bit
-@@ -444,7 +444,7 @@ struct block_device {
+@@ -455,7 +455,7 @@ struct block_device {
        int                     bd_fsfreeze_count;
        /* Mutex for freeze */
        struct mutex            bd_fsfreeze_mutex;
        int                     bd_fsfreeze_count;
        /* Mutex for freeze */
        struct mutex            bd_fsfreeze_mutex;
@@ -81020,7 +80546,7 @@ index 9418772..0155807 100644
  
  /*
   * Radix-tree tags, for tagging dirty and writeback pages within the pagecache
  
  /*
   * Radix-tree tags, for tagging dirty and writeback pages within the pagecache
-@@ -613,7 +613,7 @@ struct inode {
+@@ -624,7 +624,7 @@ struct inode {
  #endif
  
        void                    *i_private; /* fs or device private pointer */
  #endif
  
        void                    *i_private; /* fs or device private pointer */
@@ -81029,7 +80555,7 @@ index 9418772..0155807 100644
  
  static inline int inode_unhashed(struct inode *inode)
  {
  
  static inline int inode_unhashed(struct inode *inode)
  {
-@@ -806,7 +806,7 @@ struct file {
+@@ -820,7 +820,7 @@ struct file {
        struct list_head        f_tfile_llink;
  #endif /* #ifdef CONFIG_EPOLL */
        struct address_space    *f_mapping;
        struct list_head        f_tfile_llink;
  #endif /* #ifdef CONFIG_EPOLL */
        struct address_space    *f_mapping;
@@ -81038,7 +80564,7 @@ index 9418772..0155807 100644
  
  struct file_handle {
        __u32 handle_bytes;
  
  struct file_handle {
        __u32 handle_bytes;
-@@ -934,7 +934,7 @@ struct file_lock {
+@@ -945,7 +945,7 @@ struct file_lock {
                        int state;              /* state of grant or error if -ve */
                } afs;
        } fl_u;
                        int state;              /* state of grant or error if -ve */
                } afs;
        } fl_u;
@@ -81047,16 +80573,16 @@ index 9418772..0155807 100644
  
  /* The following constant reflects the upper bound of the file/locking space */
  #ifndef OFFSET_MAX
  
  /* The following constant reflects the upper bound of the file/locking space */
  #ifndef OFFSET_MAX
-@@ -1284,7 +1284,7 @@ struct super_block {
-       struct list_lru         s_dentry_lru ____cacheline_aligned_in_smp;
-       struct list_lru         s_inode_lru ____cacheline_aligned_in_smp;
-       struct rcu_head         rcu;
+@@ -1287,7 +1287,7 @@ struct super_block {
+        * Indicates how deep in a filesystem stack this SB is
+        */
+       int s_stack_depth;
 -};
 +} __randomize_layout;
  
  extern struct timespec current_fs_time(struct super_block *sb);
  
 -};
 +} __randomize_layout;
  
  extern struct timespec current_fs_time(struct super_block *sb);
  
-@@ -1510,7 +1510,8 @@ struct file_operations {
+@@ -1514,7 +1514,8 @@ struct file_operations {
        long (*fallocate)(struct file *file, int mode, loff_t offset,
                          loff_t len);
        int (*show_fdinfo)(struct seq_file *m, struct file *f);
        long (*fallocate)(struct file *file, int mode, loff_t offset,
                          loff_t len);
        int (*show_fdinfo)(struct seq_file *m, struct file *f);
@@ -81066,7 +80592,7 @@ index 9418772..0155807 100644
  
  struct inode_operations {
        struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
  
  struct inode_operations {
        struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
-@@ -2796,4 +2797,14 @@ static inline bool dir_relax(struct inode *inode)
+@@ -2823,4 +2824,14 @@ static inline bool dir_relax(struct inode *inode)
        return !IS_DEADDIR(inode);
  }
  
        return !IS_DEADDIR(inode);
  }
  
@@ -81192,7 +80718,7 @@ index ec274e0..e678159 100644
  
  static inline sector_t get_start_sect(struct block_device *bdev)
 diff --git a/include/linux/genl_magic_func.h b/include/linux/genl_magic_func.h
  
  static inline sector_t get_start_sect(struct block_device *bdev)
 diff --git a/include/linux/genl_magic_func.h b/include/linux/genl_magic_func.h
-index c0894dd..2fbf10c 100644
+index 667c311..abac2a7 100644
 --- a/include/linux/genl_magic_func.h
 +++ b/include/linux/genl_magic_func.h
 @@ -246,7 +246,7 @@ const char *CONCAT_(GENL_MAGIC_FAMILY, _genl_cmd_to_str)(__u8 cmd)
 --- a/include/linux/genl_magic_func.h
 +++ b/include/linux/genl_magic_func.h
 @@ -246,7 +246,7 @@ const char *CONCAT_(GENL_MAGIC_FAMILY, _genl_cmd_to_str)(__u8 cmd)
@@ -81205,7 +80731,7 @@ index c0894dd..2fbf10c 100644
  };
  
 diff --git a/include/linux/gfp.h b/include/linux/gfp.h
  };
  
 diff --git a/include/linux/gfp.h b/include/linux/gfp.h
-index 5e7219d..b1ed627 100644
+index 41b30fd..a3718cf 100644
 --- a/include/linux/gfp.h
 +++ b/include/linux/gfp.h
 @@ -34,6 +34,13 @@ struct vm_area_struct;
 --- a/include/linux/gfp.h
 +++ b/include/linux/gfp.h
 @@ -34,6 +34,13 @@ struct vm_area_struct;
@@ -81246,7 +80772,7 @@ index 5e7219d..b1ed627 100644
 +#define GFP_USERCOPY  __GFP_USERCOPY
 +
  /* Convert GFP flags to their corresponding migrate type */
 +#define GFP_USERCOPY  __GFP_USERCOPY
 +
  /* Convert GFP flags to their corresponding migrate type */
- static inline int allocflags_to_migratetype(gfp_t gfp_flags)
+ static inline int gfpflags_to_migratetype(const gfp_t gfp_flags)
  {
 diff --git a/include/linux/gracl.h b/include/linux/gracl.h
 new file mode 100644
  {
 diff --git a/include/linux/gracl.h b/include/linux/gracl.h
 new file mode 100644
@@ -82277,10 +81803,10 @@ index 0000000..b02ba9d
 +#define GR_MSRWRITE_MSG "denied write to CPU MSR by "
 diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h
 new file mode 100644
 +#define GR_MSRWRITE_MSG "denied write to CPU MSR by "
 diff --git a/include/linux/grsecurity.h b/include/linux/grsecurity.h
 new file mode 100644
-index 0000000..10b9635
+index 0000000..c3b0738
 --- /dev/null
 +++ b/include/linux/grsecurity.h
 --- /dev/null
 +++ b/include/linux/grsecurity.h
-@@ -0,0 +1,254 @@
+@@ -0,0 +1,244 @@
 +#ifndef GR_SECURITY_H
 +#define GR_SECURITY_H
 +#include <linux/fs.h>
 +#ifndef GR_SECURITY_H
 +#define GR_SECURITY_H
 +#include <linux/fs.h>
@@ -82367,7 +81893,7 @@ index 0000000..10b9635
 +                             const struct vfsmount *mnt);
 +void gr_log_remount(const char *devname, const int retval);
 +void gr_log_unmount(const char *devname, const int retval);
 +                             const struct vfsmount *mnt);
 +void gr_log_remount(const char *devname, const int retval);
 +void gr_log_unmount(const char *devname, const int retval);
-+void gr_log_mount(const char *from, const char *to, const int retval);
++void gr_log_mount(const char *from, struct path *to, const int retval);
 +void gr_log_textrel(struct vm_area_struct *vma);
 +void gr_log_ptgnustack(struct file *file);
 +void gr_log_rwxmmap(struct file *file);
 +void gr_log_textrel(struct vm_area_struct *vma);
 +void gr_log_ptgnustack(struct file *file);
 +void gr_log_rwxmmap(struct file *file);
@@ -82492,16 +82018,6 @@ index 0000000..10b9635
 +
 +int gr_ptrace_readexec(struct file *file, int unsafe_flags);
 +
 +
 +int gr_ptrace_readexec(struct file *file, int unsafe_flags);
 +
-+#if defined(CONFIG_GRKERNSEC) && (defined(CONFIG_GRKERNSEC_RESLOG) || !defined(CONFIG_GRKERNSEC_NO_RBAC))
-+extern void gr_learn_resource(const struct task_struct *task, const int res,
-+                            const unsigned long wanted, const int gt);
-+#else
-+static inline void gr_learn_resource(const struct task_struct *task, const int res,
-+                                   const unsigned long wanted, const int gt)
-+{
-+}
-+#endif
-+
 +#ifdef CONFIG_GRKERNSEC_RESLOG
 +extern void gr_log_resource(const struct task_struct *task, const int res,
 +                                 const unsigned long wanted, const int gt);
 +#ifdef CONFIG_GRKERNSEC_RESLOG
 +extern void gr_log_resource(const struct task_struct *task, const int res,
 +                                 const unsigned long wanted, const int gt);
@@ -82691,10 +82207,10 @@ index 2df8e8d..3e1280d 100644
  #define __meminitconst   __constsection(.meminit.rodata)
  #define __memexit        __section(.memexit.text) __exitused __cold notrace
 diff --git a/include/linux/init_task.h b/include/linux/init_task.h
  #define __meminitconst   __constsection(.meminit.rodata)
  #define __memexit        __section(.memexit.text) __exitused __cold notrace
 diff --git a/include/linux/init_task.h b/include/linux/init_task.h
-index 2bb4c4f3..e0fac69 100644
+index 77fc43f..73caf92 100644
 --- a/include/linux/init_task.h
 +++ b/include/linux/init_task.h
 --- a/include/linux/init_task.h
 +++ b/include/linux/init_task.h
-@@ -149,6 +149,12 @@ extern struct task_group root_task_group;
+@@ -158,6 +158,12 @@ extern struct task_group root_task_group;
  
  #define INIT_TASK_COMM "swapper"
  
  
  #define INIT_TASK_COMM "swapper"
  
@@ -82707,7 +82223,7 @@ index 2bb4c4f3..e0fac69 100644
  #ifdef CONFIG_RT_MUTEXES
  # define INIT_RT_MUTEXES(tsk)                                         \
        .pi_waiters = RB_ROOT,                                          \
  #ifdef CONFIG_RT_MUTEXES
  # define INIT_RT_MUTEXES(tsk)                                         \
        .pi_waiters = RB_ROOT,                                          \
-@@ -196,6 +202,7 @@ extern struct task_group root_task_group;
+@@ -205,6 +211,7 @@ extern struct task_group root_task_group;
        RCU_POINTER_INITIALIZER(cred, &init_cred),                      \
        .comm           = INIT_TASK_COMM,                               \
        .thread         = INIT_THREAD,                                  \
        RCU_POINTER_INITIALIZER(cred, &init_cred),                      \
        .comm           = INIT_TASK_COMM,                               \
        .thread         = INIT_THREAD,                                  \
@@ -82716,10 +82232,10 @@ index 2bb4c4f3..e0fac69 100644
        .files          = &init_files,                                  \
        .signal         = &init_signals,                                \
 diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
        .files          = &init_files,                                  \
        .signal         = &init_signals,                                \
 diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h
-index 698ad05..8601bb7 100644
+index 69517a2..6b12d37 100644
 --- a/include/linux/interrupt.h
 +++ b/include/linux/interrupt.h
 --- a/include/linux/interrupt.h
 +++ b/include/linux/interrupt.h
-@@ -418,8 +418,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
+@@ -413,8 +413,8 @@ extern const char * const softirq_to_name[NR_SOFTIRQS];
  
  struct softirq_action
  {
  
  struct softirq_action
  {
@@ -82730,7 +82246,7 @@ index 698ad05..8601bb7 100644
  
  asmlinkage void do_softirq(void);
  asmlinkage void __do_softirq(void);
  
  asmlinkage void do_softirq(void);
  asmlinkage void __do_softirq(void);
-@@ -433,7 +433,7 @@ static inline void do_softirq_own_stack(void)
+@@ -428,7 +428,7 @@ static inline void do_softirq_own_stack(void)
  }
  #endif
  
  }
  #endif
  
@@ -82740,10 +82256,10 @@ index 698ad05..8601bb7 100644
  extern void __raise_softirq_irqoff(unsigned int nr);
  
 diff --git a/include/linux/iommu.h b/include/linux/iommu.h
  extern void __raise_softirq_irqoff(unsigned int nr);
  
 diff --git a/include/linux/iommu.h b/include/linux/iommu.h
-index 20f9a52..63ee2e3 100644
+index e6a7c9f..5804745 100644
 --- a/include/linux/iommu.h
 +++ b/include/linux/iommu.h
 --- a/include/linux/iommu.h
 +++ b/include/linux/iommu.h
-@@ -131,7 +131,7 @@ struct iommu_ops {
+@@ -133,7 +133,7 @@ struct iommu_ops {
        u32 (*domain_get_windows)(struct iommu_domain *domain);
  
        unsigned long pgsize_bitmap;
        u32 (*domain_get_windows)(struct iommu_domain *domain);
  
        unsigned long pgsize_bitmap;
@@ -82753,7 +82269,7 @@ index 20f9a52..63ee2e3 100644
  #define IOMMU_GROUP_NOTIFY_ADD_DEVICE         1 /* Device added */
  #define IOMMU_GROUP_NOTIFY_DEL_DEVICE         2 /* Pre Device removed */
 diff --git a/include/linux/ioport.h b/include/linux/ioport.h
  #define IOMMU_GROUP_NOTIFY_ADD_DEVICE         1 /* Device added */
  #define IOMMU_GROUP_NOTIFY_DEL_DEVICE         2 /* Pre Device removed */
 diff --git a/include/linux/ioport.h b/include/linux/ioport.h
-index 142ec54..873e033 100644
+index 2c525022..345b106 100644
 --- a/include/linux/ioport.h
 +++ b/include/linux/ioport.h
 @@ -161,7 +161,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start);
 --- a/include/linux/ioport.h
 +++ b/include/linux/ioport.h
 @@ -161,7 +161,7 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start);
@@ -82779,10 +82295,10 @@ index 35e7eca..6afb7ad 100644
  extern struct ipc_namespace init_ipc_ns;
  extern atomic_t nr_ipc_ns;
 diff --git a/include/linux/irq.h b/include/linux/irq.h
  extern struct ipc_namespace init_ipc_ns;
  extern atomic_t nr_ipc_ns;
 diff --git a/include/linux/irq.h b/include/linux/irq.h
-index 62af592..cc3b0d0 100644
+index 03f48d9..e86af0c 100644
 --- a/include/linux/irq.h
 +++ b/include/linux/irq.h
 --- a/include/linux/irq.h
 +++ b/include/linux/irq.h
-@@ -344,7 +344,8 @@ struct irq_chip {
+@@ -352,7 +352,8 @@ struct irq_chip {
        void            (*irq_release_resources)(struct irq_data *data);
  
        unsigned long   flags;
        void            (*irq_release_resources)(struct irq_data *data);
  
        unsigned long   flags;
@@ -82793,10 +82309,10 @@ index 62af592..cc3b0d0 100644
  /*
   * irq_chip specific flags
 diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
  /*
   * irq_chip specific flags
 diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
-index 45e2d8c..26d85da 100644
+index 13eed92..3261c86 100644
 --- a/include/linux/irqchip/arm-gic.h
 +++ b/include/linux/irqchip/arm-gic.h
 --- a/include/linux/irqchip/arm-gic.h
 +++ b/include/linux/irqchip/arm-gic.h
-@@ -75,9 +75,11 @@
+@@ -91,9 +91,11 @@
  
  #ifndef __ASSEMBLY__
  
  
  #ifndef __ASSEMBLY__
  
@@ -82878,10 +82394,10 @@ index 6883e19..e854fcb 100644
  /* This macro allows us to keep printk typechecking */
  static __printf(1, 2)
 diff --git a/include/linux/key-type.h b/include/linux/key-type.h
  /* This macro allows us to keep printk typechecking */
  static __printf(1, 2)
 diff --git a/include/linux/key-type.h b/include/linux/key-type.h
-index 44792ee..6172f2a 100644
+index ff9f1d3..6712be5 100644
 --- a/include/linux/key-type.h
 +++ b/include/linux/key-type.h
 --- a/include/linux/key-type.h
 +++ b/include/linux/key-type.h
-@@ -132,7 +132,7 @@ struct key_type {
+@@ -152,7 +152,7 @@ struct key_type {
        /* internal fields */
        struct list_head        link;           /* link in types list */
        struct lock_class_key   lock_class;     /* key->sem lock class */
        /* internal fields */
        struct list_head        link;           /* link in types list */
        struct lock_class_key   lock_class;     /* key->sem lock class */
@@ -83001,10 +82517,10 @@ index 484604d..0f6c5b6 100644
        if (atomic_sub_and_test((int) count, &kref->refcount)) {
                release(kref);
 diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
        if (atomic_sub_and_test((int) count, &kref->refcount)) {
                release(kref);
 diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h
-index a4c33b3..e854710 100644
+index a6059bd..8126d5c 100644
 --- a/include/linux/kvm_host.h
 +++ b/include/linux/kvm_host.h
 --- a/include/linux/kvm_host.h
 +++ b/include/linux/kvm_host.h
-@@ -452,7 +452,7 @@ static inline void kvm_irqfd_exit(void)
+@@ -460,7 +460,7 @@ static inline void kvm_irqfd_exit(void)
  {
  }
  #endif
  {
  }
  #endif
@@ -83013,7 +82529,7 @@ index a4c33b3..e854710 100644
                  struct module *module);
  void kvm_exit(void);
  
                  struct module *module);
  void kvm_exit(void);
  
-@@ -618,7 +618,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
+@@ -629,7 +629,7 @@ int kvm_arch_vcpu_ioctl_set_guest_debug(struct kvm_vcpu *vcpu,
                                        struct kvm_guest_debug *dbg);
  int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run);
  
                                        struct kvm_guest_debug *dbg);
  int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run);
  
@@ -83023,7 +82539,7 @@ index a4c33b3..e854710 100644
  
  int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu);
 diff --git a/include/linux/libata.h b/include/linux/libata.h
  
  int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu);
 diff --git a/include/linux/libata.h b/include/linux/libata.h
-index 92abb49..e7fff2a 100644
+index bd5fefe..2a8a8d2 100644
 --- a/include/linux/libata.h
 +++ b/include/linux/libata.h
 @@ -976,7 +976,7 @@ struct ata_port_operations {
 --- a/include/linux/libata.h
 +++ b/include/linux/libata.h
 @@ -976,7 +976,7 @@ struct ata_port_operations {
@@ -83048,10 +82564,10 @@ index a6a42dd..6c5ebce 100644
  
  /*
 diff --git a/include/linux/list.h b/include/linux/list.h
  
  /*
 diff --git a/include/linux/list.h b/include/linux/list.h
-index cbbb96f..602d023 100644
+index f33f831..1ffe5e2 100644
 --- a/include/linux/list.h
 +++ b/include/linux/list.h
 --- a/include/linux/list.h
 +++ b/include/linux/list.h
-@@ -112,6 +112,19 @@ extern void __list_del_entry(struct list_head *entry);
+@@ -113,6 +113,19 @@ extern void __list_del_entry(struct list_head *entry);
  extern void list_del(struct list_head *entry);
  #endif
  
  extern void list_del(struct list_head *entry);
  #endif
  
@@ -83071,7 +82587,7 @@ index cbbb96f..602d023 100644
  /**
   * list_replace - replace old entry by new one
   * @old : the element to be replaced
  /**
   * list_replace - replace old entry by new one
   * @old : the element to be replaced
-@@ -145,6 +158,8 @@ static inline void list_del_init(struct list_head *entry)
+@@ -146,6 +159,8 @@ static inline void list_del_init(struct list_head *entry)
        INIT_LIST_HEAD(entry);
  }
  
        INIT_LIST_HEAD(entry);
  }
  
@@ -83171,7 +82687,7 @@ index c45c089..298841c 100644
        u32 remainder;
        return div_u64_rem(dividend, divisor, &remainder);
 diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
        u32 remainder;
        return div_u64_rem(dividend, divisor, &remainder);
 diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
-index f230a97..714c006 100644
+index 3d385c8..deacb6a 100644
 --- a/include/linux/mempolicy.h
 +++ b/include/linux/mempolicy.h
 @@ -91,6 +91,10 @@ static inline struct mempolicy *mpol_dup(struct mempolicy *pol)
 --- a/include/linux/mempolicy.h
 +++ b/include/linux/mempolicy.h
 @@ -91,6 +91,10 @@ static inline struct mempolicy *mpol_dup(struct mempolicy *pol)
@@ -83185,7 +82701,7 @@ index f230a97..714c006 100644
  
  static inline void mpol_get(struct mempolicy *pol)
  {
  
  static inline void mpol_get(struct mempolicy *pol)
  {
-@@ -228,6 +232,9 @@ static inline void mpol_free_shared_policy(struct shared_policy *p)
+@@ -229,6 +233,9 @@ static inline void mpol_free_shared_policy(struct shared_policy *p)
  }
  
  #define vma_policy(vma) NULL
  }
  
  #define vma_policy(vma) NULL
@@ -83196,10 +82712,10 @@ index f230a97..714c006 100644
  static inline int
  vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst)
 diff --git a/include/linux/mm.h b/include/linux/mm.h
  static inline int
  vma_dup_policy(struct vm_area_struct *src, struct vm_area_struct *dst)
 diff --git a/include/linux/mm.h b/include/linux/mm.h
-index f952cc8..b9f6135 100644
+index b464611..77cbfc1 100644
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
 --- a/include/linux/mm.h
 +++ b/include/linux/mm.h
-@@ -127,6 +127,11 @@ extern unsigned int kobjsize(const void *objp);
+@@ -128,6 +128,11 @@ extern unsigned int kobjsize(const void *objp);
  #define VM_HUGETLB    0x00400000      /* Huge TLB Page VM */
  #define VM_NONLINEAR  0x00800000      /* Is non-linear (remap_file_pages) */
  #define VM_ARCH_1     0x01000000      /* Architecture-specific flag */
  #define VM_HUGETLB    0x00400000      /* Huge TLB Page VM */
  #define VM_NONLINEAR  0x00800000      /* Is non-linear (remap_file_pages) */
  #define VM_ARCH_1     0x01000000      /* Architecture-specific flag */
@@ -83211,7 +82727,7 @@ index f952cc8..b9f6135 100644
  #define VM_DONTDUMP   0x04000000      /* Do not include in the core dump */
  
  #ifdef CONFIG_MEM_SOFT_DIRTY
  #define VM_DONTDUMP   0x04000000      /* Do not include in the core dump */
  
  #ifdef CONFIG_MEM_SOFT_DIRTY
-@@ -237,8 +242,8 @@ struct vm_operations_struct {
+@@ -238,8 +243,8 @@ struct vm_operations_struct {
        /* called by access_process_vm when get_user_pages() fails, typically
         * for use by special VMAs that can switch between memory and hardware
         */
        /* called by access_process_vm when get_user_pages() fails, typically
         * for use by special VMAs that can switch between memory and hardware
         */
@@ -83222,7 +82738,7 @@ index f952cc8..b9f6135 100644
  
        /* Called by the /proc/PID/maps code to ask the vma whether it
         * has a special name.  Returning non-NULL will also cause this
  
        /* Called by the /proc/PID/maps code to ask the vma whether it
         * has a special name.  Returning non-NULL will also cause this
-@@ -274,6 +279,7 @@ struct vm_operations_struct {
+@@ -275,6 +280,7 @@ struct vm_operations_struct {
        int (*remap_pages)(struct vm_area_struct *vma, unsigned long addr,
                           unsigned long size, pgoff_t pgoff);
  };
        int (*remap_pages)(struct vm_area_struct *vma, unsigned long addr,
                           unsigned long size, pgoff_t pgoff);
  };
@@ -83230,7 +82746,7 @@ index f952cc8..b9f6135 100644
  
  struct mmu_gather;
  struct inode;
  
  struct mmu_gather;
  struct inode;
-@@ -1163,8 +1169,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address,
+@@ -1165,8 +1171,8 @@ int follow_pfn(struct vm_area_struct *vma, unsigned long address,
        unsigned long *pfn);
  int follow_phys(struct vm_area_struct *vma, unsigned long address,
                unsigned int flags, unsigned long *prot, resource_size_t *phys);
        unsigned long *pfn);
  int follow_phys(struct vm_area_struct *vma, unsigned long address,
                unsigned int flags, unsigned long *prot, resource_size_t *phys);
@@ -83241,7 +82757,7 @@ index f952cc8..b9f6135 100644
  
  static inline void unmap_shared_mapping_range(struct address_space *mapping,
                loff_t const holebegin, loff_t const holelen)
  
  static inline void unmap_shared_mapping_range(struct address_space *mapping,
                loff_t const holebegin, loff_t const holelen)
-@@ -1204,9 +1210,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1206,9 +1212,9 @@ static inline int fixup_user_fault(struct task_struct *tsk,
  }
  #endif
  
  }
  #endif
  
@@ -83254,7 +82770,7 @@ index f952cc8..b9f6135 100644
  
  long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                      unsigned long start, unsigned long nr_pages,
  
  long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                      unsigned long start, unsigned long nr_pages,
-@@ -1238,34 +1244,6 @@ int set_page_dirty_lock(struct page *page);
+@@ -1240,34 +1246,6 @@ int set_page_dirty_lock(struct page *page);
  int clear_page_dirty_for_io(struct page *page);
  int get_cmdline(struct task_struct *task, char *buffer, int buflen);
  
  int clear_page_dirty_for_io(struct page *page);
  int get_cmdline(struct task_struct *task, char *buffer, int buflen);
  
@@ -83286,26 +82802,10 @@ index f952cc8..b9f6135 100644
 -              !vma_growsup(vma->vm_next, addr);
 -}
 -
 -              !vma_growsup(vma->vm_next, addr);
 -}
 -
- extern pid_t
- vm_is_stack(struct task_struct *task, struct vm_area_struct *vma, int in_group);
-@@ -1365,6 +1343,15 @@ static inline void sync_mm_rss(struct mm_struct *mm)
- }
- #endif
-+#ifdef CONFIG_MMU
-+pgprot_t vm_get_page_prot(vm_flags_t vm_flags);
-+#else
-+static inline pgprot_t vm_get_page_prot(vm_flags_t vm_flags)
-+{
-+      return __pgprot(0);
-+}
-+#endif
-+
- int vma_wants_writenotify(struct vm_area_struct *vma);
+ extern struct task_struct *task_of_stack(struct task_struct *task,
+                               struct vm_area_struct *vma, bool in_group);
  
  
- extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr,
-@@ -1383,8 +1370,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
+@@ -1385,8 +1363,15 @@ static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
  {
        return 0;
  }
  {
        return 0;
  }
@@ -83321,7 +82821,7 @@ index f952cc8..b9f6135 100644
  #endif
  
  #ifdef __PAGETABLE_PMD_FOLDED
  #endif
  
  #ifdef __PAGETABLE_PMD_FOLDED
-@@ -1393,8 +1387,15 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
+@@ -1395,8 +1380,15 @@ static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
  {
        return 0;
  }
  {
        return 0;
  }
@@ -83337,7 +82837,7 @@ index f952cc8..b9f6135 100644
  #endif
  
  int __pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
  #endif
  
  int __pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
-@@ -1412,11 +1413,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
+@@ -1414,11 +1406,23 @@ static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long a
                NULL: pud_offset(pgd, address);
  }
  
                NULL: pud_offset(pgd, address);
  }
  
@@ -83361,7 +82861,31 @@ index f952cc8..b9f6135 100644
  #endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */
  
  #if USE_SPLIT_PTE_PTLOCKS
  #endif /* CONFIG_MMU && !__ARCH_HAS_4LEVEL_HACK */
  
  #if USE_SPLIT_PTE_PTLOCKS
-@@ -1815,7 +1828,7 @@ extern int install_special_mapping(struct mm_struct *mm,
+@@ -1801,12 +1805,23 @@ extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
+       bool *need_rmap_locks);
+ extern void exit_mmap(struct mm_struct *);
++#if defined(CONFIG_GRKERNSEC) && (defined(CONFIG_GRKERNSEC_RESLOG) || !defined(CONFIG_GRKERNSEC_NO_RBAC))
++extern void gr_learn_resource(const struct task_struct *task, const int res,
++                            const unsigned long wanted, const int gt);
++#else
++static inline void gr_learn_resource(const struct task_struct *task, const int res,
++                                   const unsigned long wanted, const int gt)
++{
++}
++#endif
++
+ static inline int check_data_rlimit(unsigned long rlim,
+                                   unsigned long new,
+                                   unsigned long start,
+                                   unsigned long end_data,
+                                   unsigned long start_data)
+ {
++      gr_learn_resource(current, RLIMIT_DATA, (new - start) + (end_data - start_data), 1);
+       if (rlim < RLIM_INFINITY) {
+               if (((new - start) + (end_data - start_data)) > rlim)
+                       return -ENOSPC;
+@@ -1831,7 +1846,7 @@ extern int install_special_mapping(struct mm_struct *mm,
                                   unsigned long addr, unsigned long len,
                                   unsigned long flags, struct page **pages);
  
                                   unsigned long addr, unsigned long len,
                                   unsigned long flags, struct page **pages);
  
@@ -83370,7 +82894,7 @@ index f952cc8..b9f6135 100644
  
  extern unsigned long mmap_region(struct file *file, unsigned long addr,
        unsigned long len, vm_flags_t vm_flags, unsigned long pgoff);
  
  extern unsigned long mmap_region(struct file *file, unsigned long addr,
        unsigned long len, vm_flags_t vm_flags, unsigned long pgoff);
-@@ -1823,6 +1836,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -1839,6 +1854,7 @@ extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
        unsigned long len, unsigned long prot, unsigned long flags,
        unsigned long pgoff, unsigned long *populate);
  extern int do_munmap(struct mm_struct *, unsigned long, size_t);
        unsigned long len, unsigned long prot, unsigned long flags,
        unsigned long pgoff, unsigned long *populate);
  extern int do_munmap(struct mm_struct *, unsigned long, size_t);
@@ -83378,7 +82902,7 @@ index f952cc8..b9f6135 100644
  
  #ifdef CONFIG_MMU
  extern int __mm_populate(unsigned long addr, unsigned long len,
  
  #ifdef CONFIG_MMU
  extern int __mm_populate(unsigned long addr, unsigned long len,
-@@ -1851,10 +1865,11 @@ struct vm_unmapped_area_info {
+@@ -1867,10 +1883,11 @@ struct vm_unmapped_area_info {
        unsigned long high_limit;
        unsigned long align_mask;
        unsigned long align_offset;
        unsigned long high_limit;
        unsigned long align_mask;
        unsigned long align_offset;
@@ -83392,7 +82916,7 @@ index f952cc8..b9f6135 100644
  
  /*
   * Search for an unmapped address range.
  
  /*
   * Search for an unmapped address range.
-@@ -1866,7 +1881,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
+@@ -1882,7 +1899,7 @@ extern unsigned long unmapped_area_topdown(struct vm_unmapped_area_info *info);
   * - satisfies (begin_addr & align_mask) == (align_offset & align_mask)
   */
  static inline unsigned long
   * - satisfies (begin_addr & align_mask) == (align_offset & align_mask)
   */
  static inline unsigned long
@@ -83401,7 +82925,7 @@ index f952cc8..b9f6135 100644
  {
        if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN))
                return unmapped_area(info);
  {
        if (!(info->flags & VM_UNMAPPED_AREA_TOPDOWN))
                return unmapped_area(info);
-@@ -1928,6 +1943,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add
+@@ -1944,6 +1961,10 @@ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long add
  extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
                                             struct vm_area_struct **pprev);
  
  extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
                                             struct vm_area_struct **pprev);
  
@@ -83412,23 +82936,20 @@ index f952cc8..b9f6135 100644
  /* Look up the first VMA which intersects the interval start_addr..end_addr-1,
     NULL if none.  Assume start_addr < end_addr. */
  static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
  /* Look up the first VMA which intersects the interval start_addr..end_addr-1,
     NULL if none.  Assume start_addr < end_addr. */
  static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
-@@ -1956,15 +1975,6 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
-       return vma;
+@@ -1973,10 +1994,10 @@ static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
  }
  
  }
  
--#ifdef CONFIG_MMU
+ #ifdef CONFIG_MMU
 -pgprot_t vm_get_page_prot(unsigned long vm_flags);
 -pgprot_t vm_get_page_prot(unsigned long vm_flags);
--#else
++pgprot_t vm_get_page_prot(vm_flags_t vm_flags);
+ void vma_set_page_prot(struct vm_area_struct *vma);
+ #else
 -static inline pgprot_t vm_get_page_prot(unsigned long vm_flags)
 -static inline pgprot_t vm_get_page_prot(unsigned long vm_flags)
--{
--      return __pgprot(0);
--}
--#endif
--
- #ifdef CONFIG_NUMA_BALANCING
- unsigned long change_prot_numa(struct vm_area_struct *vma,
-                       unsigned long start, unsigned long end);
-@@ -2016,6 +2026,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
++static inline pgprot_t vm_get_page_prot(vm_flags_t vm_flags)
+ {
+       return __pgprot(0);
+ }
+@@ -2038,6 +2059,11 @@ void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
  static inline void vm_stat_account(struct mm_struct *mm,
                        unsigned long flags, struct file *file, long pages)
  {
  static inline void vm_stat_account(struct mm_struct *mm,
                        unsigned long flags, struct file *file, long pages)
  {
@@ -83440,7 +82961,7 @@ index f952cc8..b9f6135 100644
        mm->total_vm += pages;
  }
  #endif /* CONFIG_PROC_FS */
        mm->total_vm += pages;
  }
  #endif /* CONFIG_PROC_FS */
-@@ -2104,7 +2119,7 @@ extern int unpoison_memory(unsigned long pfn);
+@@ -2126,7 +2152,7 @@ extern int unpoison_memory(unsigned long pfn);
  extern int sysctl_memory_failure_early_kill;
  extern int sysctl_memory_failure_recovery;
  extern void shake_page(struct page *p, int access);
  extern int sysctl_memory_failure_early_kill;
  extern int sysctl_memory_failure_recovery;
  extern void shake_page(struct page *p, int access);
@@ -83449,7 +82970,7 @@ index f952cc8..b9f6135 100644
  extern int soft_offline_page(struct page *page, int flags);
  
  #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
  extern int soft_offline_page(struct page *page, int flags);
  
  #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
-@@ -2139,5 +2154,11 @@ void __init setup_nr_node_ids(void);
+@@ -2161,5 +2187,11 @@ void __init setup_nr_node_ids(void);
  static inline void setup_nr_node_ids(void) {}
  #endif
  
  static inline void setup_nr_node_ids(void) {}
  #endif
  
@@ -83526,7 +83047,7 @@ index c5d5278..f0b68c8 100644
  }
  
 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
  }
  
 diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
-index b21bac4..94142ca 100644
+index ffe66e3..b310722 100644
 --- a/include/linux/mmzone.h
 +++ b/include/linux/mmzone.h
 @@ -527,7 +527,7 @@ struct zone {
 --- a/include/linux/mmzone.h
 +++ b/include/linux/mmzone.h
 @@ -527,7 +527,7 @@ struct zone {
@@ -83537,7 +83058,7 @@ index b21bac4..94142ca 100644
 +      atomic_long_unchecked_t         vm_stat[NR_VM_ZONE_STAT_ITEMS];
  } ____cacheline_internodealigned_in_smp;
  
 +      atomic_long_unchecked_t         vm_stat[NR_VM_ZONE_STAT_ITEMS];
  } ____cacheline_internodealigned_in_smp;
  
typedef enum {
enum zone_flags {
 diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
 index 44eeef0..a92d3f9 100644
 --- a/include/linux/mod_devicetable.h
 diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
 index 44eeef0..a92d3f9 100644
 --- a/include/linux/mod_devicetable.h
@@ -83755,10 +83276,10 @@ index 7eeb9bb..68f37e0 100644
  }
  #endif
 diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
  }
  #endif
 diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h
-index 494f99e..5059f63 100644
+index 1c9effa..1160bdd 100644
 --- a/include/linux/moduleparam.h
 +++ b/include/linux/moduleparam.h
 --- a/include/linux/moduleparam.h
 +++ b/include/linux/moduleparam.h
-@@ -293,7 +293,7 @@ static inline void __kernel_param_unlock(void)
+@@ -323,7 +323,7 @@ static inline void __kernel_param_unlock(void)
   * @len is usually just sizeof(string).
   */
  #define module_param_string(name, string, len, perm)                  \
   * @len is usually just sizeof(string).
   */
  #define module_param_string(name, string, len, perm)                  \
@@ -83767,7 +83288,7 @@ index 494f99e..5059f63 100644
                = { len, string };                                      \
        __module_param_call(MODULE_PARAM_PREFIX, name,                  \
                            &param_ops_string,                          \
                = { len, string };                                      \
        __module_param_call(MODULE_PARAM_PREFIX, name,                  \
                            &param_ops_string,                          \
-@@ -437,7 +437,7 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp);
+@@ -467,7 +467,7 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp);
   */
  #define module_param_array_named(name, array, type, nump, perm)               \
        param_check_##type(name, &(array)[0]);                          \
   */
  #define module_param_array_named(name, array, type, nump, perm)               \
        param_check_##type(name, &(array)[0]);                          \
@@ -83777,7 +83298,7 @@ index 494f99e..5059f63 100644
            .ops = &param_ops_##type,                                   \
            .elemsize = sizeof(array[0]), .elem = array };              \
 diff --git a/include/linux/mount.h b/include/linux/mount.h
            .ops = &param_ops_##type,                                   \
            .elemsize = sizeof(array[0]), .elem = array };              \
 diff --git a/include/linux/mount.h b/include/linux/mount.h
-index 9262e4b..0a45f98 100644
+index c2c561d..a5f2a8c 100644
 --- a/include/linux/mount.h
 +++ b/include/linux/mount.h
 @@ -66,7 +66,7 @@ struct vfsmount {
 --- a/include/linux/mount.h
 +++ b/include/linux/mount.h
 @@ -66,7 +66,7 @@ struct vfsmount {
@@ -83831,18 +83352,18 @@ index 17d8339..81656c0 100644
  struct iovec;
  struct kvec;
 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
  struct iovec;
  struct kvec;
 diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index c8e388e..5d8cd9b 100644
+index 74fd5d3..86a1e4f 100644
 --- a/include/linux/netdevice.h
 +++ b/include/linux/netdevice.h
 --- a/include/linux/netdevice.h
 +++ b/include/linux/netdevice.h
-@@ -1147,6 +1147,7 @@ struct net_device_ops {
-                                                       void *priv);
-       int                     (*ndo_get_lock_subclass)(struct net_device *dev);
+@@ -1156,6 +1156,7 @@ struct net_device_ops {
+       bool                    (*ndo_gso_check) (struct sk_buff *skb,
+                                                 struct net_device *dev);
  };
 +typedef struct net_device_ops __no_const net_device_ops_no_const;
  
  /**
   * enum net_device_priv_flags - &struct net_device priv_flags
  };
 +typedef struct net_device_ops __no_const net_device_ops_no_const;
  
  /**
   * enum net_device_priv_flags - &struct net_device priv_flags
-@@ -1485,10 +1486,10 @@ struct net_device {
+@@ -1498,10 +1499,10 @@ struct net_device {
  
        struct net_device_stats stats;
  
  
        struct net_device_stats stats;
  
@@ -83984,7 +83505,7 @@ index d137218..be0c176 100644
  extern void path_get(const struct path *);
  extern void path_put(const struct path *);
 diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h
  extern void path_get(const struct path *);
  extern void path_put(const struct path *);
 diff --git a/include/linux/pci_hotplug.h b/include/linux/pci_hotplug.h
-index 5f2e559..7d59314 100644
+index 2706ee9..e691f7c 100644
 --- a/include/linux/pci_hotplug.h
 +++ b/include/linux/pci_hotplug.h
 @@ -71,7 +71,8 @@ struct hotplug_slot_ops {
 --- a/include/linux/pci_hotplug.h
 +++ b/include/linux/pci_hotplug.h
 @@ -71,7 +71,8 @@ struct hotplug_slot_ops {
@@ -83998,10 +83519,10 @@ index 5f2e559..7d59314 100644
  /**
   * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot
 diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
  /**
   * struct hotplug_slot_info - used to notify the hotplug pci core of the state of the slot
 diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
-index 707617a..28a2e7e 100644
+index 893a0d0..d5f996e 100644
 --- a/include/linux/perf_event.h
 +++ b/include/linux/perf_event.h
 --- a/include/linux/perf_event.h
 +++ b/include/linux/perf_event.h
-@@ -339,8 +339,8 @@ struct perf_event {
+@@ -341,8 +341,8 @@ struct perf_event {
  
        enum perf_event_active_state    state;
        unsigned int                    attach_state;
  
        enum perf_event_active_state    state;
        unsigned int                    attach_state;
@@ -84012,7 +83533,7 @@ index 707617a..28a2e7e 100644
  
        /*
         * These are the total time in nanoseconds that the event
  
        /*
         * These are the total time in nanoseconds that the event
-@@ -391,8 +391,8 @@ struct perf_event {
+@@ -393,8 +393,8 @@ struct perf_event {
         * These accumulate total time (in nanoseconds) that children
         * events have been enabled and running, respectively.
         */
         * These accumulate total time (in nanoseconds) that children
         * events have been enabled and running, respectively.
         */
@@ -84023,7 +83544,7 @@ index 707617a..28a2e7e 100644
  
        /*
         * Protect attach/detach and child_list:
  
        /*
         * Protect attach/detach and child_list:
-@@ -722,7 +722,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64
+@@ -734,7 +734,7 @@ static inline void perf_callchain_store(struct perf_callchain_entry *entry, u64
                entry->ip[entry->nr++] = ip;
  }
  
                entry->ip[entry->nr++] = ip;
  }
  
@@ -84032,7 +83553,7 @@ index 707617a..28a2e7e 100644
  extern int sysctl_perf_event_mlock;
  extern int sysctl_perf_event_sample_rate;
  extern int sysctl_perf_cpu_time_max_percent;
  extern int sysctl_perf_event_mlock;
  extern int sysctl_perf_event_sample_rate;
  extern int sysctl_perf_cpu_time_max_percent;
-@@ -737,19 +737,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
+@@ -749,19 +749,24 @@ extern int perf_cpu_time_max_percent_handler(struct ctl_table *table, int write,
                loff_t *ppos);
  
  
                loff_t *ppos);
  
  
@@ -84060,7 +83581,7 @@ index 707617a..28a2e7e 100644
  }
  
  extern void perf_event_init(void);
  }
  
  extern void perf_event_init(void);
-@@ -880,7 +885,7 @@ struct perf_pmu_events_attr {
+@@ -892,7 +897,7 @@ struct perf_pmu_events_attr {
        struct device_attribute attr;
        u64 id;
        const char *event_str;
        struct device_attribute attr;
        u64 id;
        const char *event_str;
@@ -84102,29 +83623,29 @@ index eb8b8ac..62649e1 100644
        unsigned int w_counter;
        struct page *tmp_page;
 diff --git a/include/linux/pm.h b/include/linux/pm.h
        unsigned int w_counter;
        struct page *tmp_page;
 diff --git a/include/linux/pm.h b/include/linux/pm.h
-index 72c0fe0..26918ed 100644
+index 383fd68..7a11504 100644
 --- a/include/linux/pm.h
 +++ b/include/linux/pm.h
 --- a/include/linux/pm.h
 +++ b/include/linux/pm.h
-@@ -620,6 +620,7 @@ extern int dev_pm_put_subsys_data(struct device *dev);
- struct dev_pm_domain {
+@@ -621,6 +621,7 @@ struct dev_pm_domain {
        struct dev_pm_ops       ops;
        struct dev_pm_ops       ops;
+       void (*detach)(struct device *dev, bool power_off);
  };
 +typedef struct dev_pm_domain __no_const dev_pm_domain_no_const;
  
  /*
   * The PM_EVENT_ messages are also used by drivers implementing the legacy
 diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
  };
 +typedef struct dev_pm_domain __no_const dev_pm_domain_no_const;
  
  /*
   * The PM_EVENT_ messages are also used by drivers implementing the legacy
 diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
-index ebc4c76..7fab7b0 100644
+index 2e0e06d..824cc9b 100644
 --- a/include/linux/pm_domain.h
 +++ b/include/linux/pm_domain.h
 --- a/include/linux/pm_domain.h
 +++ b/include/linux/pm_domain.h
-@@ -44,11 +44,11 @@ struct gpd_dev_ops {
-       int (*thaw_early)(struct device *dev);
-       int (*thaw)(struct device *dev);
+@@ -36,11 +36,11 @@ struct gpd_dev_ops {
+       int (*save_state)(struct device *dev);
+       int (*restore_state)(struct device *dev);
        bool (*active_wakeup)(struct device *dev);
 -};
 +} __no_const;
  
        bool (*active_wakeup)(struct device *dev);
 -};
 +} __no_const;
  
- struct gpd_cpu_data {
+ struct gpd_cpuidle_data {
        unsigned int saved_exit_latency;
 -      struct cpuidle_state *idle_state;
 +      cpuidle_state_no_const *idle_state;
        unsigned int saved_exit_latency;
 -      struct cpuidle_state *idle_state;
 +      cpuidle_state_no_const *idle_state;
@@ -84292,7 +83813,7 @@ index d78125f..7f36596 100644
  extern void wake_up_klogd(void);
  
 diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
  extern void wake_up_klogd(void);
  
 diff --git a/include/linux/proc_fs.h b/include/linux/proc_fs.h
-index 9d117f6..d832b31 100644
+index b97bf2e..f14c92d4 100644
 --- a/include/linux/proc_fs.h
 +++ b/include/linux/proc_fs.h
 @@ -17,8 +17,11 @@ extern void proc_flush_task(struct task_struct *);
 --- a/include/linux/proc_fs.h
 +++ b/include/linux/proc_fs.h
 @@ -17,8 +17,11 @@ extern void proc_flush_task(struct task_struct *);
@@ -84340,7 +83861,7 @@ index 9d117f6..d832b31 100644
  static inline struct proc_dir_entry *proc_mkdir_mode(const char *name,
        umode_t mode, struct proc_dir_entry *parent) { return NULL; }
  #define proc_create(name, mode, parent, proc_fops) ({NULL;})
  static inline struct proc_dir_entry *proc_mkdir_mode(const char *name,
        umode_t mode, struct proc_dir_entry *parent) { return NULL; }
  #define proc_create(name, mode, parent, proc_fops) ({NULL;})
-@@ -77,7 +97,7 @@ static inline int remove_proc_subtree(const char *name, struct proc_dir_entry *p
+@@ -79,7 +99,7 @@ struct net;
  static inline struct proc_dir_entry *proc_net_mkdir(
        struct net *net, const char *name, struct proc_dir_entry *parent)
  {
  static inline struct proc_dir_entry *proc_net_mkdir(
        struct net *net, const char *name, struct proc_dir_entry *parent)
  {
@@ -84376,7 +83897,7 @@ index 80d345a..9e89a9a 100644
  extern bool qid_valid(struct kqid qid);
  
 diff --git a/include/linux/random.h b/include/linux/random.h
  extern bool qid_valid(struct kqid qid);
  
 diff --git a/include/linux/random.h b/include/linux/random.h
-index 57fbbff..2170304 100644
+index b05856e..0a9f14e 100644
 --- a/include/linux/random.h
 +++ b/include/linux/random.h
 @@ -9,9 +9,19 @@
 --- a/include/linux/random.h
 +++ b/include/linux/random.h
 @@ -9,9 +9,19 @@
@@ -84411,12 +83932,12 @@ index 57fbbff..2170304 100644
  
 -u32 prandom_u32(void);
 +u32 prandom_u32(void) __intentional_overflow(-1);
  
 -u32 prandom_u32(void);
 +u32 prandom_u32(void) __intentional_overflow(-1);
- void prandom_bytes(void *buf, int nbytes);
+ void prandom_bytes(void *buf, size_t nbytes);
  void prandom_seed(u32 seed);
  void prandom_reseed_late(void);
 @@ -37,6 +47,11 @@ struct rnd_state {
  u32 prandom_u32_state(struct rnd_state *state);
  void prandom_seed(u32 seed);
  void prandom_reseed_late(void);
 @@ -37,6 +47,11 @@ struct rnd_state {
  u32 prandom_u32_state(struct rnd_state *state);
- void prandom_bytes_state(struct rnd_state *state, void *buf, int nbytes);
+ void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes);
  
 +static inline unsigned long __intentional_overflow(-1) pax_get_random_long(void)
 +{
  
 +static inline unsigned long __intentional_overflow(-1) pax_get_random_long(void)
 +{
@@ -84426,7 +83947,7 @@ index 57fbbff..2170304 100644
  /**
   * prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro)
   * @ep_ro: right open interval endpoint
  /**
   * prandom_u32_max - returns a pseudo-random number in interval [0, ep_ro)
   * @ep_ro: right open interval endpoint
-@@ -49,7 +64,7 @@ void prandom_bytes_state(struct rnd_state *state, void *buf, int nbytes);
+@@ -49,7 +64,7 @@ void prandom_bytes_state(struct rnd_state *state, void *buf, size_t nbytes);
   *
   * Returns: pseudo-random number in interval [0, ep_ro)
   */
   *
   * Returns: pseudo-random number in interval [0, ep_ro)
   */
@@ -84436,10 +83957,10 @@ index 57fbbff..2170304 100644
        return (u32)(((u64) prandom_u32() * ep_ro) >> 32);
  }
 diff --git a/include/linux/rbtree_augmented.h b/include/linux/rbtree_augmented.h
        return (u32)(((u64) prandom_u32() * ep_ro) >> 32);
  }
 diff --git a/include/linux/rbtree_augmented.h b/include/linux/rbtree_augmented.h
-index fea49b5..2ac22bb 100644
+index 378c5ee..aa84a47 100644
 --- a/include/linux/rbtree_augmented.h
 +++ b/include/linux/rbtree_augmented.h
 --- a/include/linux/rbtree_augmented.h
 +++ b/include/linux/rbtree_augmented.h
-@@ -80,7 +80,9 @@ rbname ## _rotate(struct rb_node *rb_old, struct rb_node *rb_new)    \
+@@ -90,7 +90,9 @@ rbname ## _rotate(struct rb_node *rb_old, struct rb_node *rb_new)    \
        old->rbaugmented = rbcompute(old);                              \
  }                                                                     \
  rbstatic const struct rb_augment_callbacks rbname = {                 \
        old->rbaugmented = rbcompute(old);                              \
  }                                                                     \
  rbstatic const struct rb_augment_callbacks rbname = {                 \
@@ -84509,11 +84030,24 @@ index 372ad5e..d4373f8 100644
  /**
   * hlist_del_init_rcu - deletes entry from hash list with re-initialization
   * @n: the element to delete from the hash list.
  /**
   * hlist_del_init_rcu - deletes entry from hash list with re-initialization
   * @n: the element to delete from the hash list.
+diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h
+index 53ff1a7..c40f0ab 100644
+--- a/include/linux/rcupdate.h
++++ b/include/linux/rcupdate.h
+@@ -332,7 +332,7 @@ extern struct srcu_struct tasks_rcu_exit_srcu;
+ #define rcu_note_voluntary_context_switch(t) \
+       do { \
+               if (ACCESS_ONCE((t)->rcu_tasks_holdout)) \
+-                      ACCESS_ONCE((t)->rcu_tasks_holdout) = false; \
++                      ACCESS_ONCE_RW((t)->rcu_tasks_holdout) = false; \
+       } while (0)
+ #else /* #ifdef CONFIG_TASKS_RCU */
+ #define TASKS_RCU(x) do { } while (0)
 diff --git a/include/linux/reboot.h b/include/linux/reboot.h
 diff --git a/include/linux/reboot.h b/include/linux/reboot.h
-index 48bf152..d38b785 100644
+index 67fc8fc..a90f7d8 100644
 --- a/include/linux/reboot.h
 +++ b/include/linux/reboot.h
 --- a/include/linux/reboot.h
 +++ b/include/linux/reboot.h
-@@ -44,9 +44,9 @@ extern int unregister_reboot_notifier(struct notifier_block *);
+@@ -47,9 +47,9 @@ extern void do_kernel_restart(char *cmd);
   */
  
  extern void migrate_to_reboot_cpu(void);
   */
  
  extern void migrate_to_reboot_cpu(void);
@@ -84526,7 +84060,7 @@ index 48bf152..d38b785 100644
  
  extern void machine_shutdown(void);
  struct pt_regs;
  
  extern void machine_shutdown(void);
  struct pt_regs;
-@@ -57,9 +57,9 @@ extern void machine_crash_shutdown(struct pt_regs *);
+@@ -60,9 +60,9 @@ extern void machine_crash_shutdown(struct pt_regs *);
   */
  
  extern void kernel_restart_prepare(char *cmd);
   */
  
  extern void kernel_restart_prepare(char *cmd);
@@ -84539,7 +84073,7 @@ index 48bf152..d38b785 100644
  
  extern int C_A_D; /* for sysctl */
  void ctrl_alt_del(void);
  
  extern int C_A_D; /* for sysctl */
  void ctrl_alt_del(void);
-@@ -73,7 +73,7 @@ extern int orderly_poweroff(bool force);
+@@ -76,7 +76,7 @@ extern int orderly_poweroff(bool force);
   * Emergency restart, callable from an interrupt handler.
   */
  
   * Emergency restart, callable from an interrupt handler.
   */
  
@@ -84589,7 +84123,7 @@ index 6bda06f..bf39a9b 100644
  #define RIO_RESOURCE_MEM      0x00000100
  #define RIO_RESOURCE_DOORBELL 0x00000200
 diff --git a/include/linux/rmap.h b/include/linux/rmap.h
  #define RIO_RESOURCE_MEM      0x00000100
  #define RIO_RESOURCE_DOORBELL 0x00000200
 diff --git a/include/linux/rmap.h b/include/linux/rmap.h
-index be57450..31cf65e 100644
+index c0c2bce..4813524 100644
 --- a/include/linux/rmap.h
 +++ b/include/linux/rmap.h
 @@ -144,8 +144,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
 --- a/include/linux/rmap.h
 +++ b/include/linux/rmap.h
 @@ -144,8 +144,8 @@ static inline void anon_vma_unlock_read(struct anon_vma *anon_vma)
@@ -84629,10 +84163,10 @@ index ed8f9e7..999bc96 100644
  }
  
 diff --git a/include/linux/sched.h b/include/linux/sched.h
  }
  
 diff --git a/include/linux/sched.h b/include/linux/sched.h
-index 2b1d9e9..10ba706 100644
+index 5e344bb..0743255 100644
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
 --- a/include/linux/sched.h
 +++ b/include/linux/sched.h
-@@ -132,6 +132,7 @@ struct fs_struct;
+@@ -133,6 +133,7 @@ struct fs_struct;
  struct perf_event_context;
  struct blk_plug;
  struct filename;
  struct perf_event_context;
  struct blk_plug;
  struct filename;
@@ -84640,7 +84174,7 @@ index 2b1d9e9..10ba706 100644
  
  #define VMACACHE_BITS 2
  #define VMACACHE_SIZE (1U << VMACACHE_BITS)
  
  #define VMACACHE_BITS 2
  #define VMACACHE_SIZE (1U << VMACACHE_BITS)
-@@ -374,7 +375,7 @@ extern char __sched_text_start[], __sched_text_end[];
+@@ -376,7 +377,7 @@ extern char __sched_text_start[], __sched_text_end[];
  extern int in_sched_functions(unsigned long addr);
  
  #define       MAX_SCHEDULE_TIMEOUT    LONG_MAX
  extern int in_sched_functions(unsigned long addr);
  
  #define       MAX_SCHEDULE_TIMEOUT    LONG_MAX
@@ -84649,7 +84183,7 @@ index 2b1d9e9..10ba706 100644
  extern signed long schedule_timeout_interruptible(signed long timeout);
  extern signed long schedule_timeout_killable(signed long timeout);
  extern signed long schedule_timeout_uninterruptible(signed long timeout);
  extern signed long schedule_timeout_interruptible(signed long timeout);
  extern signed long schedule_timeout_killable(signed long timeout);
  extern signed long schedule_timeout_uninterruptible(signed long timeout);
-@@ -385,6 +386,19 @@ struct nsproxy;
+@@ -387,6 +388,19 @@ struct nsproxy;
  struct user_namespace;
  
  #ifdef CONFIG_MMU
  struct user_namespace;
  
  #ifdef CONFIG_MMU
@@ -84669,7 +84203,7 @@ index 2b1d9e9..10ba706 100644
  extern void arch_pick_mmap_layout(struct mm_struct *mm);
  extern unsigned long
  arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
  extern void arch_pick_mmap_layout(struct mm_struct *mm);
  extern unsigned long
  arch_get_unmapped_area(struct file *, unsigned long, unsigned long,
-@@ -682,6 +696,17 @@ struct signal_struct {
+@@ -685,6 +699,17 @@ struct signal_struct {
  #ifdef CONFIG_TASKSTATS
        struct taskstats *stats;
  #endif
  #ifdef CONFIG_TASKSTATS
        struct taskstats *stats;
  #endif
@@ -84687,7 +84221,7 @@ index 2b1d9e9..10ba706 100644
  #ifdef CONFIG_AUDIT
        unsigned audit_tty;
        unsigned audit_tty_log_passwd;
  #ifdef CONFIG_AUDIT
        unsigned audit_tty;
        unsigned audit_tty_log_passwd;
-@@ -708,7 +733,7 @@ struct signal_struct {
+@@ -711,7 +736,7 @@ struct signal_struct {
        struct mutex cred_guard_mutex;  /* guard against foreign influences on
                                         * credential calculations
                                         * (notably. ptrace) */
        struct mutex cred_guard_mutex;  /* guard against foreign influences on
                                         * credential calculations
                                         * (notably. ptrace) */
@@ -84696,7 +84230,7 @@ index 2b1d9e9..10ba706 100644
  
  /*
   * Bits in flags field of signal_struct.
  
  /*
   * Bits in flags field of signal_struct.
-@@ -761,6 +786,14 @@ struct user_struct {
+@@ -764,6 +789,14 @@ struct user_struct {
        struct key *session_keyring;    /* UID's default session keyring */
  #endif
  
        struct key *session_keyring;    /* UID's default session keyring */
  #endif
  
@@ -84711,7 +84245,7 @@ index 2b1d9e9..10ba706 100644
        /* Hash table maintenance information */
        struct hlist_node uidhash_node;
        kuid_t uid;
        /* Hash table maintenance information */
        struct hlist_node uidhash_node;
        kuid_t uid;
-@@ -768,7 +801,7 @@ struct user_struct {
+@@ -771,7 +804,7 @@ struct user_struct {
  #ifdef CONFIG_PERF_EVENTS
        atomic_long_t locked_vm;
  #endif
  #ifdef CONFIG_PERF_EVENTS
        atomic_long_t locked_vm;
  #endif
@@ -84720,7 +84254,7 @@ index 2b1d9e9..10ba706 100644
  
  extern int uids_sysfs_init(void);
  
  
  extern int uids_sysfs_init(void);
  
-@@ -1224,6 +1257,9 @@ enum perf_event_task_context {
+@@ -1235,6 +1268,9 @@ enum perf_event_task_context {
  struct task_struct {
        volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */
        void *stack;
  struct task_struct {
        volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */
        void *stack;
@@ -84730,7 +84264,7 @@ index 2b1d9e9..10ba706 100644
        atomic_t usage;
        unsigned int flags;     /* per process flags, defined below */
        unsigned int ptrace;
        atomic_t usage;
        unsigned int flags;     /* per process flags, defined below */
        unsigned int ptrace;
-@@ -1345,8 +1381,8 @@ struct task_struct {
+@@ -1362,8 +1398,8 @@ struct task_struct {
        struct list_head thread_node;
  
        struct completion *vfork_done;          /* for vfork() */
        struct list_head thread_node;
  
        struct completion *vfork_done;          /* for vfork() */
@@ -84741,7 +84275,7 @@ index 2b1d9e9..10ba706 100644
  
        cputime_t utime, stime, utimescaled, stimescaled;
        cputime_t gtime;
  
        cputime_t utime, stime, utimescaled, stimescaled;
        cputime_t gtime;
-@@ -1371,11 +1407,6 @@ struct task_struct {
+@@ -1388,11 +1424,6 @@ struct task_struct {
        struct task_cputime cputime_expires;
        struct list_head cpu_timers[3];
  
        struct task_cputime cputime_expires;
        struct list_head cpu_timers[3];
  
@@ -84753,7 +84287,7 @@ index 2b1d9e9..10ba706 100644
        char comm[TASK_COMM_LEN]; /* executable name excluding path
                                     - access with [gs]et_task_comm (which lock
                                       it with task_lock())
        char comm[TASK_COMM_LEN]; /* executable name excluding path
                                     - access with [gs]et_task_comm (which lock
                                       it with task_lock())
-@@ -1393,6 +1424,10 @@ struct task_struct {
+@@ -1410,6 +1441,10 @@ struct task_struct {
  #endif
  /* CPU-specific state of this task */
        struct thread_struct thread;
  #endif
  /* CPU-specific state of this task */
        struct thread_struct thread;
@@ -84764,7 +84298,7 @@ index 2b1d9e9..10ba706 100644
  /* filesystem information */
        struct fs_struct *fs;
  /* open file information */
  /* filesystem information */
        struct fs_struct *fs;
  /* open file information */
-@@ -1467,6 +1502,10 @@ struct task_struct {
+@@ -1484,6 +1519,10 @@ struct task_struct {
        gfp_t lockdep_reclaim_gfp;
  #endif
  
        gfp_t lockdep_reclaim_gfp;
  #endif
  
@@ -84775,7 +84309,7 @@ index 2b1d9e9..10ba706 100644
  /* journalling filesystem info */
        void *journal_info;
  
  /* journalling filesystem info */
        void *journal_info;
  
-@@ -1505,6 +1544,10 @@ struct task_struct {
+@@ -1522,6 +1561,10 @@ struct task_struct {
        /* cg_list protected by css_set_lock and tsk->alloc_lock */
        struct list_head cg_list;
  #endif
        /* cg_list protected by css_set_lock and tsk->alloc_lock */
        struct list_head cg_list;
  #endif
@@ -84786,7 +84320,16 @@ index 2b1d9e9..10ba706 100644
  #ifdef CONFIG_FUTEX
        struct robust_list_head __user *robust_list;
  #ifdef CONFIG_COMPAT
  #ifdef CONFIG_FUTEX
        struct robust_list_head __user *robust_list;
  #ifdef CONFIG_COMPAT
-@@ -1644,7 +1687,78 @@ struct task_struct {
+@@ -1635,7 +1678,7 @@ struct task_struct {
+        * Number of functions that haven't been traced
+        * because of depth overrun.
+        */
+-      atomic_t trace_overrun;
++      atomic_unchecked_t trace_overrun;
+       /* Pause for the tracing */
+       atomic_t tracing_graph_pause;
+ #endif
+@@ -1661,7 +1704,78 @@ struct task_struct {
        unsigned int    sequential_io;
        unsigned int    sequential_io_avg;
  #endif
        unsigned int    sequential_io;
        unsigned int    sequential_io_avg;
  #endif
@@ -84866,7 +84409,7 @@ index 2b1d9e9..10ba706 100644
  
  /* Future-safe accessor for struct task_struct's cpus_allowed. */
  #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
  
  /* Future-safe accessor for struct task_struct's cpus_allowed. */
  #define tsk_cpus_allowed(tsk) (&(tsk)->cpus_allowed)
-@@ -1726,7 +1840,7 @@ struct pid_namespace;
+@@ -1743,7 +1857,7 @@ struct pid_namespace;
  pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
                        struct pid_namespace *ns);
  
  pid_t __task_pid_nr_ns(struct task_struct *task, enum pid_type type,
                        struct pid_namespace *ns);
  
@@ -84875,7 +84418,7 @@ index 2b1d9e9..10ba706 100644
  {
        return tsk->pid;
  }
  {
        return tsk->pid;
  }
-@@ -2097,6 +2211,25 @@ extern u64 sched_clock_cpu(int cpu);
+@@ -2106,6 +2220,25 @@ extern u64 sched_clock_cpu(int cpu);
  
  extern void sched_clock_init(void);
  
  
  extern void sched_clock_init(void);
  
@@ -84901,7 +84444,7 @@ index 2b1d9e9..10ba706 100644
  #ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
  static inline void sched_clock_tick(void)
  {
  #ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
  static inline void sched_clock_tick(void)
  {
-@@ -2230,7 +2363,9 @@ void yield(void);
+@@ -2239,7 +2372,9 @@ void yield(void);
  extern struct exec_domain     default_exec_domain;
  
  union thread_union {
  extern struct exec_domain     default_exec_domain;
  
  union thread_union {
@@ -84911,7 +84454,7 @@ index 2b1d9e9..10ba706 100644
        unsigned long stack[THREAD_SIZE/sizeof(long)];
  };
  
        unsigned long stack[THREAD_SIZE/sizeof(long)];
  };
  
-@@ -2263,6 +2398,7 @@ extern struct pid_namespace init_pid_ns;
+@@ -2272,6 +2407,7 @@ extern struct pid_namespace init_pid_ns;
   */
  
  extern struct task_struct *find_task_by_vpid(pid_t nr);
   */
  
  extern struct task_struct *find_task_by_vpid(pid_t nr);
@@ -84919,7 +84462,7 @@ index 2b1d9e9..10ba706 100644
  extern struct task_struct *find_task_by_pid_ns(pid_t nr,
                struct pid_namespace *ns);
  
  extern struct task_struct *find_task_by_pid_ns(pid_t nr,
                struct pid_namespace *ns);
  
-@@ -2427,7 +2563,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
+@@ -2436,7 +2572,7 @@ extern void __cleanup_sighand(struct sighand_struct *);
  extern void exit_itimers(struct signal_struct *);
  extern void flush_itimer_signals(void);
  
  extern void exit_itimers(struct signal_struct *);
  extern void flush_itimer_signals(void);
  
@@ -84928,9 +84471,9 @@ index 2b1d9e9..10ba706 100644
  
  extern int do_execve(struct filename *,
                     const char __user * const __user *,
  
  extern int do_execve(struct filename *,
                     const char __user * const __user *,
-@@ -2642,9 +2778,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
- #endif
+@@ -2653,9 +2789,9 @@ static inline unsigned long *end_of_stack(struct task_struct *p)
+ #define task_stack_end_corrupted(task) \
+               (*(end_of_stack(task)) != STACK_END_MAGIC)
  
 -static inline int object_is_on_stack(void *obj)
 +static inline int object_starts_on_stack(const void *obj)
  
 -static inline int object_is_on_stack(void *obj)
 +static inline int object_starts_on_stack(const void *obj)
@@ -84953,7 +84496,7 @@ index 596a0e0..bea77ec 100644
  extern unsigned int sysctl_sched_latency;
  extern unsigned int sysctl_sched_min_granularity;
 diff --git a/include/linux/security.h b/include/linux/security.h
  extern unsigned int sysctl_sched_latency;
  extern unsigned int sysctl_sched_min_granularity;
 diff --git a/include/linux/security.h b/include/linux/security.h
-index 623f90e..90b39da 100644
+index ba96471..74fb3f6 100644
 --- a/include/linux/security.h
 +++ b/include/linux/security.h
 @@ -27,6 +27,7 @@
 --- a/include/linux/security.h
 +++ b/include/linux/security.h
 @@ -27,6 +27,7 @@
@@ -85049,10 +84592,10 @@ index 6fb8016..ab4465e 100644
  
  /* shm_mode upper byte flags */
 diff --git a/include/linux/signal.h b/include/linux/signal.h
  
  /* shm_mode upper byte flags */
 diff --git a/include/linux/signal.h b/include/linux/signal.h
-index 750196f..ae7a3a4 100644
+index ab1e039..ad4229e 100644
 --- a/include/linux/signal.h
 +++ b/include/linux/signal.h
 --- a/include/linux/signal.h
 +++ b/include/linux/signal.h
-@@ -292,7 +292,7 @@ static inline void allow_signal(int sig)
+@@ -289,7 +289,7 @@ static inline void allow_signal(int sig)
         * know it'll be handled, so that they don't get converted to
         * SIGKILL or just silently dropped.
         */
         * know it'll be handled, so that they don't get converted to
         * SIGKILL or just silently dropped.
         */
@@ -85062,10 +84605,10 @@ index 750196f..ae7a3a4 100644
  
  static inline void disallow_signal(int sig)
 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
  
  static inline void disallow_signal(int sig)
 diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index abde271..bc9ece1 100644
+index 6c8b6f6..5a0f4bd 100644
 --- a/include/linux/skbuff.h
 +++ b/include/linux/skbuff.h
 --- a/include/linux/skbuff.h
 +++ b/include/linux/skbuff.h
-@@ -728,7 +728,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from,
+@@ -773,7 +773,7 @@ bool skb_try_coalesce(struct sk_buff *to, struct sk_buff *from,
  struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
                            int node);
  struct sk_buff *build_skb(void *data, unsigned int frag_size);
  struct sk_buff *__alloc_skb(unsigned int size, gfp_t priority, int flags,
                            int node);
  struct sk_buff *build_skb(void *data, unsigned int frag_size);
@@ -85074,7 +84617,7 @@ index abde271..bc9ece1 100644
                                        gfp_t priority)
  {
        return __alloc_skb(size, priority, 0, NUMA_NO_NODE);
                                        gfp_t priority)
  {
        return __alloc_skb(size, priority, 0, NUMA_NO_NODE);
-@@ -1845,7 +1845,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
+@@ -1962,7 +1962,7 @@ static inline u32 skb_inner_network_header_len(const struct sk_buff *skb)
        return skb->inner_transport_header - skb->inner_network_header;
  }
  
        return skb->inner_transport_header - skb->inner_network_header;
  }
  
@@ -85083,7 +84626,7 @@ index abde271..bc9ece1 100644
  {
        return skb_network_header(skb) - skb->data;
  }
  {
        return skb_network_header(skb) - skb->data;
  }
-@@ -1917,7 +1917,7 @@ static inline void skb_pop_rcv_encapsulation(struct sk_buff *skb)
+@@ -2022,7 +2022,7 @@ static inline int pskb_network_may_pull(struct sk_buff *skb, unsigned int len)
   * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
   */
  #ifndef NET_SKB_PAD
   * NET_IP_ALIGN(2) + ethernet_header(14) + IP_header(20/40) + ports(8)
   */
  #ifndef NET_SKB_PAD
@@ -85092,7 +84635,7 @@ index abde271..bc9ece1 100644
  #endif
  
  int ___pskb_trim(struct sk_buff *skb, unsigned int len);
  #endif
  
  int ___pskb_trim(struct sk_buff *skb, unsigned int len);
-@@ -2524,7 +2524,7 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
+@@ -2629,7 +2629,7 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
                                  int *err);
  unsigned int datagram_poll(struct file *file, struct socket *sock,
                           struct poll_table_struct *wait);
                                  int *err);
  unsigned int datagram_poll(struct file *file, struct socket *sock,
                           struct poll_table_struct *wait);
@@ -85101,7 +84644,7 @@ index abde271..bc9ece1 100644
                            struct iovec *to, int size);
  int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, int hlen,
                                     struct iovec *iov);
                            struct iovec *to, int size);
  int skb_copy_and_csum_datagram_iovec(struct sk_buff *skb, int hlen,
                                     struct iovec *iov);
-@@ -2918,6 +2918,9 @@ static inline void nf_reset(struct sk_buff *skb)
+@@ -3091,6 +3091,9 @@ static inline void nf_reset(struct sk_buff *skb)
        nf_bridge_put(skb->nf_bridge);
        skb->nf_bridge = NULL;
  #endif
        nf_bridge_put(skb->nf_bridge);
        skb->nf_bridge = NULL;
  #endif
@@ -85112,7 +84655,7 @@ index abde271..bc9ece1 100644
  
  static inline void nf_reset_trace(struct sk_buff *skb)
 diff --git a/include/linux/slab.h b/include/linux/slab.h
  
  static inline void nf_reset_trace(struct sk_buff *skb)
 diff --git a/include/linux/slab.h b/include/linux/slab.h
-index 1d9abb7..b1e8b10 100644
+index c265bec..4867d28 100644
 --- a/include/linux/slab.h
 +++ b/include/linux/slab.h
 @@ -14,15 +14,29 @@
 --- a/include/linux/slab.h
 +++ b/include/linux/slab.h
 @@ -14,15 +14,29 @@
@@ -85172,16 +84715,7 @@ index 1d9abb7..b1e8b10 100644
  
  /*
   * Some archs want to perform DMA into kmalloc caches and need a guaranteed
  
  /*
   * Some archs want to perform DMA into kmalloc caches and need a guaranteed
-@@ -176,7 +195,7 @@ struct kmem_cache {
-       unsigned int align;     /* Alignment as calculated */
-       unsigned long flags;    /* Active flags on the slab */
-       const char *name;       /* Slab name for sysfs */
--      int refcount;           /* Use counter */
-+      atomic_t refcount;      /* Use counter */
-       void (*ctor)(void *);   /* Called on object slot creation */
-       struct list_head list;  /* List of all slab caches on the system */
- };
-@@ -261,6 +280,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -236,6 +255,10 @@ extern struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1];
  extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
  #endif
  
  extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
  #endif
  
@@ -85192,7 +84726,7 @@ index 1d9abb7..b1e8b10 100644
  /*
   * Figure out which kmalloc slab an allocation of a certain size
   * belongs to.
  /*
   * Figure out which kmalloc slab an allocation of a certain size
   * belongs to.
-@@ -269,7 +292,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -244,7 +267,7 @@ extern struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
   * 2 = 120 .. 192 bytes
   * n = 2^(n-1) .. 2^n -1
   */
   * 2 = 120 .. 192 bytes
   * n = 2^(n-1) .. 2^n -1
   */
@@ -85201,7 +84735,7 @@ index 1d9abb7..b1e8b10 100644
  {
        if (!size)
                return 0;
  {
        if (!size)
                return 0;
-@@ -312,11 +335,11 @@ static __always_inline int kmalloc_index(size_t size)
+@@ -287,11 +310,11 @@ static __always_inline int kmalloc_index(size_t size)
  }
  #endif /* !CONFIG_SLOB */
  
  }
  #endif /* !CONFIG_SLOB */
  
@@ -85216,10 +84750,10 @@ index 1d9abb7..b1e8b10 100644
  #else
  static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node)
 diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
  #else
  static __always_inline void *__kmalloc_node(size_t size, gfp_t flags, int node)
 diff --git a/include/linux/slab_def.h b/include/linux/slab_def.h
-index 8235dfb..47ce586 100644
+index b869d16..1453c73 100644
 --- a/include/linux/slab_def.h
 +++ b/include/linux/slab_def.h
 --- a/include/linux/slab_def.h
 +++ b/include/linux/slab_def.h
-@@ -38,7 +38,7 @@ struct kmem_cache {
+@@ -40,7 +40,7 @@ struct kmem_cache {
  /* 4) cache creation/removal */
        const char *name;
        struct list_head list;
  /* 4) cache creation/removal */
        const char *name;
        struct list_head list;
@@ -85228,7 +84762,7 @@ index 8235dfb..47ce586 100644
        int object_size;
        int align;
  
        int object_size;
        int align;
  
-@@ -54,10 +54,14 @@ struct kmem_cache {
+@@ -56,10 +56,14 @@ struct kmem_cache {
        unsigned long node_allocs;
        unsigned long node_frees;
        unsigned long node_overflow;
        unsigned long node_allocs;
        unsigned long node_frees;
        unsigned long node_overflow;
@@ -85261,10 +84795,10 @@ index d82abd4..408c3a0 100644
        int inuse;              /* Offset to metadata */
        int align;              /* Alignment */
 diff --git a/include/linux/smp.h b/include/linux/smp.h
        int inuse;              /* Offset to metadata */
        int align;              /* Alignment */
 diff --git a/include/linux/smp.h b/include/linux/smp.h
-index 34347f2..8739978 100644
+index 93dff5f..933c561 100644
 --- a/include/linux/smp.h
 +++ b/include/linux/smp.h
 --- a/include/linux/smp.h
 +++ b/include/linux/smp.h
-@@ -174,7 +174,9 @@ static inline void kick_all_cpus_sync(void) {  }
+@@ -176,7 +176,9 @@ static inline void wake_up_all_idle_cpus(void) {  }
  #endif
  
  #define get_cpu()             ({ preempt_disable(); smp_processor_id(); })
  #endif
  
  #define get_cpu()             ({ preempt_disable(); smp_processor_id(); })
@@ -85348,10 +84882,10 @@ index 70736b9..37f33db 100644
  #ifdef __KERNEL__
  
 diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
  #ifdef __KERNEL__
  
 diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
-index cf61ecd..a4a9bc0 100644
+index 2167846..0648fc3 100644
 --- a/include/linux/sunrpc/svc.h
 +++ b/include/linux/sunrpc/svc.h
 --- a/include/linux/sunrpc/svc.h
 +++ b/include/linux/sunrpc/svc.h
-@@ -417,7 +417,7 @@ struct svc_procedure {
+@@ -416,7 +416,7 @@ struct svc_procedure {
        unsigned int            pc_count;       /* call count */
        unsigned int            pc_cachetype;   /* cache info (NFS) */
        unsigned int            pc_xdrressize;  /* maximum size of XDR reply */
        unsigned int            pc_count;       /* call count */
        unsigned int            pc_cachetype;   /* cache info (NFS) */
        unsigned int            pc_xdrressize;  /* maximum size of XDR reply */
@@ -85417,10 +84951,10 @@ index e7a018e..49f8b17 100644
  extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
                                   unsigned long offset, size_t size,
 diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
  extern dma_addr_t swiotlb_map_page(struct device *dev, struct page *page,
                                   unsigned long offset, size_t size,
 diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
-index 0f86d85..dff3419 100644
+index bda9b81..629e06e 100644
 --- a/include/linux/syscalls.h
 +++ b/include/linux/syscalls.h
 --- a/include/linux/syscalls.h
 +++ b/include/linux/syscalls.h
-@@ -98,10 +98,16 @@ struct sigaltstack;
+@@ -99,10 +99,16 @@ union bpf_attr;
  #define __MAP(n,...) __MAP##n(__VA_ARGS__)
  
  #define __SC_DECL(t, a)       t a
  #define __MAP(n,...) __MAP##n(__VA_ARGS__)
  
  #define __SC_DECL(t, a)       t a
@@ -85438,7 +84972,7 @@ index 0f86d85..dff3419 100644
  #define __SC_CAST(t, a)       (t) a
  #define __SC_ARGS(t, a)       a
  #define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long))
  #define __SC_CAST(t, a)       (t) a
  #define __SC_ARGS(t, a)       a
  #define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long))
-@@ -383,11 +389,11 @@ asmlinkage long sys_sync(void);
+@@ -384,11 +390,11 @@ asmlinkage long sys_sync(void);
  asmlinkage long sys_fsync(unsigned int fd);
  asmlinkage long sys_fdatasync(unsigned int fd);
  asmlinkage long sys_bdflush(int func, long data);
  asmlinkage long sys_fsync(unsigned int fd);
  asmlinkage long sys_fdatasync(unsigned int fd);
  asmlinkage long sys_bdflush(int func, long data);
@@ -85454,7 +84988,7 @@ index 0f86d85..dff3419 100644
  asmlinkage long sys_truncate(const char __user *path, long length);
  asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length);
  asmlinkage long sys_stat(const char __user *filename,
  asmlinkage long sys_truncate(const char __user *path, long length);
  asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length);
  asmlinkage long sys_stat(const char __user *filename,
-@@ -599,7 +605,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *);
+@@ -600,7 +606,7 @@ asmlinkage long sys_getsockname(int, struct sockaddr __user *, int __user *);
  asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *);
  asmlinkage long sys_send(int, void __user *, size_t, unsigned);
  asmlinkage long sys_sendto(int, void __user *, size_t, unsigned,
  asmlinkage long sys_getpeername(int, struct sockaddr __user *, int __user *);
  asmlinkage long sys_send(int, void __user *, size_t, unsigned);
  asmlinkage long sys_sendto(int, void __user *, size_t, unsigned,
@@ -85573,7 +85107,7 @@ index ff307b5..f1a4468 100644
  
  #endif /* _LINUX_THREAD_INFO_H */
 diff --git a/include/linux/tty.h b/include/linux/tty.h
  
  #endif /* _LINUX_THREAD_INFO_H */
 diff --git a/include/linux/tty.h b/include/linux/tty.h
-index 8413294..44391c7 100644
+index 5171ef8..1048d83e 100644
 --- a/include/linux/tty.h
 +++ b/include/linux/tty.h
 @@ -202,7 +202,7 @@ struct tty_port {
 --- a/include/linux/tty.h
 +++ b/include/linux/tty.h
 @@ -202,7 +202,7 @@ struct tty_port {
@@ -85585,7 +85119,7 @@ index 8413294..44391c7 100644
        wait_queue_head_t       open_wait;      /* Open waiters */
        wait_queue_head_t       close_wait;     /* Close waiters */
        wait_queue_head_t       delta_msr_wait; /* Modem status change */
        wait_queue_head_t       open_wait;      /* Open waiters */
        wait_queue_head_t       close_wait;     /* Close waiters */
        wait_queue_head_t       delta_msr_wait; /* Modem status change */
-@@ -284,7 +284,7 @@ struct tty_struct {
+@@ -290,7 +290,7 @@ struct tty_struct {
        /* If the tty has a pending do_SAK, queue it here - akpm */
        struct work_struct SAK_work;
        struct tty_port *port;
        /* If the tty has a pending do_SAK, queue it here - akpm */
        struct work_struct SAK_work;
        struct tty_port *port;
@@ -85594,7 +85128,7 @@ index 8413294..44391c7 100644
  
  /* Each of a tty's open files has private_data pointing to tty_file_private */
  struct tty_file_private {
  
  /* Each of a tty's open files has private_data pointing to tty_file_private */
  struct tty_file_private {
-@@ -548,7 +548,7 @@ extern int tty_port_open(struct tty_port *port,
+@@ -555,7 +555,7 @@ extern int tty_port_open(struct tty_port *port,
                                struct tty_struct *tty, struct file *filp);
  static inline int tty_port_users(struct tty_port *port)
  {
                                struct tty_struct *tty, struct file *filp);
  static inline int tty_port_users(struct tty_port *port)
  {
@@ -85604,10 +85138,10 @@ index 8413294..44391c7 100644
  
  extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
 diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
  
  extern int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc);
 diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
-index e48c608..6a19af2 100644
+index 92e337c..f46757b 100644
 --- a/include/linux/tty_driver.h
 +++ b/include/linux/tty_driver.h
 --- a/include/linux/tty_driver.h
 +++ b/include/linux/tty_driver.h
-@@ -287,7 +287,7 @@ struct tty_operations {
+@@ -291,7 +291,7 @@ struct tty_operations {
        void (*poll_put_char)(struct tty_driver *driver, int line, char ch);
  #endif
        const struct file_operations *proc_fops;
        void (*poll_put_char)(struct tty_driver *driver, int line, char ch);
  #endif
        const struct file_operations *proc_fops;
@@ -85616,7 +85150,7 @@ index e48c608..6a19af2 100644
  
  struct tty_driver {
        int     magic;          /* magic number for this structure */
  
  struct tty_driver {
        int     magic;          /* magic number for this structure */
-@@ -321,7 +321,7 @@ struct tty_driver {
+@@ -325,7 +325,7 @@ struct tty_driver {
  
        const struct tty_operations *ops;
        struct list_head tty_drivers;
  
        const struct tty_operations *ops;
        struct list_head tty_drivers;
@@ -85702,6 +85236,19 @@ index 2d1f9b6..d7a9fce 100644
 +#define gr_is_global_nonroot(x) (!uid_eq((x), GLOBAL_ROOT_UID))
 +
  #endif /* _LINUX_UIDGID_H */
 +#define gr_is_global_nonroot(x) (!uid_eq((x), GLOBAL_ROOT_UID))
 +
  #endif /* _LINUX_UIDGID_H */
+diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h
+index baa8171..9ca98ba 100644
+--- a/include/linux/uio_driver.h
++++ b/include/linux/uio_driver.h
+@@ -67,7 +67,7 @@ struct uio_device {
+         struct module           *owner;
+         struct device           *dev;
+         int                     minor;
+-        atomic_t                event;
++        atomic_unchecked_t      event;
+         struct fasync_struct    *async_queue;
+         wait_queue_head_t       wait;
+         struct uio_info         *info;
 diff --git a/include/linux/unaligned/access_ok.h b/include/linux/unaligned/access_ok.h
 index 99c1b4d..562e6f3 100644
 --- a/include/linux/unaligned/access_ok.h
 diff --git a/include/linux/unaligned/access_ok.h b/include/linux/unaligned/access_ok.h
 index 99c1b4d..562e6f3 100644
 --- a/include/linux/unaligned/access_ok.h
@@ -85753,40 +85300,8 @@ index 99c1b4d..562e6f3 100644
  }
  
  static inline void put_unaligned_le16(u16 val, void *p)
  }
  
  static inline void put_unaligned_le16(u16 val, void *p)
-diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h
-index 4f844c6..60beb5d 100644
---- a/include/linux/uprobes.h
-+++ b/include/linux/uprobes.h
-@@ -98,11 +98,11 @@ struct uprobes_state {
-       struct xol_area         *xol_area;
- };
--extern int __weak set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
--extern int __weak set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
--extern bool __weak is_swbp_insn(uprobe_opcode_t *insn);
--extern bool __weak is_trap_insn(uprobe_opcode_t *insn);
--extern unsigned long __weak uprobe_get_swbp_addr(struct pt_regs *regs);
-+extern int set_swbp(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
-+extern int set_orig_insn(struct arch_uprobe *aup, struct mm_struct *mm, unsigned long vaddr);
-+extern bool is_swbp_insn(uprobe_opcode_t *insn);
-+extern bool is_trap_insn(uprobe_opcode_t *insn);
-+extern unsigned long uprobe_get_swbp_addr(struct pt_regs *regs);
- extern unsigned long uprobe_get_trap_addr(struct pt_regs *regs);
- extern int uprobe_write_opcode(struct mm_struct *mm, unsigned long vaddr, uprobe_opcode_t);
- extern int uprobe_register(struct inode *inode, loff_t offset, struct uprobe_consumer *uc);
-@@ -128,8 +128,8 @@ extern bool arch_uprobe_xol_was_trapped(struct task_struct *tsk);
- extern int  arch_uprobe_exception_notify(struct notifier_block *self, unsigned long val, void *data);
- extern void arch_uprobe_abort_xol(struct arch_uprobe *aup, struct pt_regs *regs);
- extern unsigned long arch_uretprobe_hijack_return_addr(unsigned long trampoline_vaddr, struct pt_regs *regs);
--extern bool __weak arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs);
--extern void __weak arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr,
-+extern bool arch_uprobe_ignore(struct arch_uprobe *aup, struct pt_regs *regs);
-+extern void arch_uprobe_copy_ixol(struct page *page, unsigned long vaddr,
-                                        void *src, unsigned long len);
- #else /* !CONFIG_UPROBES */
- struct uprobes_state {
 diff --git a/include/linux/usb.h b/include/linux/usb.h
 diff --git a/include/linux/usb.h b/include/linux/usb.h
-index d2465bc..5256de4 100644
+index 447a7e2..9cea7e9 100644
 --- a/include/linux/usb.h
 +++ b/include/linux/usb.h
 @@ -571,7 +571,7 @@ struct usb_device {
 --- a/include/linux/usb.h
 +++ b/include/linux/usb.h
 @@ -571,7 +571,7 @@ struct usb_device {
@@ -85821,10 +85336,10 @@ index d5952bb..9a626d4 100644
  /*
   * callback functions for platform
 diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
  /*
   * callback functions for platform
 diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
-index e953726..8edb26a 100644
+index 9f3579f..3b2afa5 100644
 --- a/include/linux/user_namespace.h
 +++ b/include/linux/user_namespace.h
 --- a/include/linux/user_namespace.h
 +++ b/include/linux/user_namespace.h
-@@ -33,7 +33,7 @@ struct user_namespace {
+@@ -38,7 +38,7 @@ struct user_namespace {
        struct key              *persistent_keyring_register;
        struct rw_semaphore     persistent_keyring_register_sem;
  #endif
        struct key              *persistent_keyring_register;
        struct rw_semaphore     persistent_keyring_register_sem;
  #endif
@@ -86098,10 +85613,10 @@ index ffb69da..040393e 100644
  /* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects.
     Since the parent disappears this ensures that v4l2_dev doesn't have an
 diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h
  /* Set v4l2_dev->dev to NULL. Call when the USB parent disconnects.
     Since the parent disappears this ensures that v4l2_dev doesn't have an
 diff --git a/include/net/9p/transport.h b/include/net/9p/transport.h
-index d9fa68f..45c88d1 100644
+index 2a25dec..bf6dd8a 100644
 --- a/include/net/9p/transport.h
 +++ b/include/net/9p/transport.h
 --- a/include/net/9p/transport.h
 +++ b/include/net/9p/transport.h
-@@ -63,7 +63,7 @@ struct p9_trans_module {
+@@ -62,7 +62,7 @@ struct p9_trans_module {
        int (*cancelled)(struct p9_client *, struct p9_req_t *req);
        int (*zc_request)(struct p9_client *, struct p9_req_t *,
                          char *, char *, int , int, int, int);
        int (*cancelled)(struct p9_client *, struct p9_req_t *req);
        int (*zc_request)(struct p9_client *, struct p9_req_t *,
                          char *, char *, int , int, int, int);
@@ -86111,7 +85626,7 @@ index d9fa68f..45c88d1 100644
  void v9fs_register_trans(struct p9_trans_module *m);
  void v9fs_unregister_trans(struct p9_trans_module *m);
 diff --git a/include/net/af_unix.h b/include/net/af_unix.h
  void v9fs_register_trans(struct p9_trans_module *m);
  void v9fs_unregister_trans(struct p9_trans_module *m);
 diff --git a/include/net/af_unix.h b/include/net/af_unix.h
-index a175ba4..196eb82 100644
+index a175ba4..196eb8242 100644
 --- a/include/net/af_unix.h
 +++ b/include/net/af_unix.h
 @@ -36,7 +36,7 @@ struct unix_skb_parms {
 --- a/include/net/af_unix.h
 +++ b/include/net/af_unix.h
 @@ -36,7 +36,7 @@ struct unix_skb_parms {
@@ -86124,7 +85639,7 @@ index a175ba4..196eb82 100644
  #define UNIXCB(skb)   (*(struct unix_skb_parms *)&((skb)->cb))
  #define UNIXSID(skb)  (&UNIXCB((skb)).secid)
 diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
  #define UNIXCB(skb)   (*(struct unix_skb_parms *)&((skb)->cb))
  #define UNIXSID(skb)  (&UNIXCB((skb)).secid)
 diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
-index 8df15ad..837fbedd 100644
+index ead99f0..6263c4b 100644
 --- a/include/net/bluetooth/l2cap.h
 +++ b/include/net/bluetooth/l2cap.h
 @@ -608,7 +608,7 @@ struct l2cap_ops {
 --- a/include/net/bluetooth/l2cap.h
 +++ b/include/net/bluetooth/l2cap.h
 @@ -608,7 +608,7 @@ struct l2cap_ops {
@@ -86199,7 +85714,7 @@ index 734d9b5..48a9a4b 100644
                return;
        }
 diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
                return;
        }
 diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
-index 5fbe656..9ed3d8b 100644
+index 848e85c..051c7de 100644
 --- a/include/net/inet_connection_sock.h
 +++ b/include/net/inet_connection_sock.h
 @@ -63,7 +63,7 @@ struct inet_connection_sock_af_ops {
 --- a/include/net/inet_connection_sock.h
 +++ b/include/net/inet_connection_sock.h
 @@ -63,7 +63,7 @@ struct inet_connection_sock_af_ops {
@@ -86212,7 +85727,7 @@ index 5fbe656..9ed3d8b 100644
  /** inet_connection_sock - INET connection oriented sock
   *
 diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
  /** inet_connection_sock - INET connection oriented sock
   *
 diff --git a/include/net/inetpeer.h b/include/net/inetpeer.h
-index 01d590e..f69c61d 100644
+index 80479ab..0c3f647 100644
 --- a/include/net/inetpeer.h
 +++ b/include/net/inetpeer.h
 @@ -47,7 +47,7 @@ struct inet_peer {
 --- a/include/net/inetpeer.h
 +++ b/include/net/inetpeer.h
 @@ -47,7 +47,7 @@ struct inet_peer {
@@ -86225,7 +85740,7 @@ index 01d590e..f69c61d 100644
                struct rcu_head         rcu;
                struct inet_peer        *gc_next;
 diff --git a/include/net/ip.h b/include/net/ip.h
                struct rcu_head         rcu;
                struct inet_peer        *gc_next;
 diff --git a/include/net/ip.h b/include/net/ip.h
-index db4a771..965a42a 100644
+index 0bb6207..a8878af 100644
 --- a/include/net/ip.h
 +++ b/include/net/ip.h
 @@ -316,7 +316,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb)
 --- a/include/net/ip.h
 +++ b/include/net/ip.h
 @@ -316,7 +316,7 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb)
@@ -86238,10 +85753,10 @@ index db4a771..965a42a 100644
  
  static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, int segs)
 diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
  
  static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, int segs)
 diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
-index 9922093..a1755d6 100644
+index dc9d2a2..d985691 100644
 --- a/include/net/ip_fib.h
 +++ b/include/net/ip_fib.h
 --- a/include/net/ip_fib.h
 +++ b/include/net/ip_fib.h
-@@ -169,7 +169,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh);
+@@ -170,7 +170,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh);
  
  #define FIB_RES_SADDR(net, res)                               \
        ((FIB_RES_NH(res).nh_saddr_genid ==             \
  
  #define FIB_RES_SADDR(net, res)                               \
        ((FIB_RES_NH(res).nh_saddr_genid ==             \
@@ -86251,19 +85766,19 @@ index 9922093..a1755d6 100644
         fib_info_update_nh_saddr((net), &FIB_RES_NH(res)))
  #define FIB_RES_GW(res)                       (FIB_RES_NH(res).nh_gw)
 diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
         fib_info_update_nh_saddr((net), &FIB_RES_NH(res)))
  #define FIB_RES_GW(res)                       (FIB_RES_NH(res).nh_gw)
 diff --git a/include/net/ip_vs.h b/include/net/ip_vs.h
-index 624a8a5..b1e2a24 100644
+index 615b20b..fd4cbd8 100644
 --- a/include/net/ip_vs.h
 +++ b/include/net/ip_vs.h
 --- a/include/net/ip_vs.h
 +++ b/include/net/ip_vs.h
-@@ -558,7 +558,7 @@ struct ip_vs_conn {
+@@ -534,7 +534,7 @@ struct ip_vs_conn {
        struct ip_vs_conn       *control;       /* Master control connection */
        atomic_t                n_control;      /* Number of controlled ones */
        struct ip_vs_dest       *dest;          /* real server */
 -      atomic_t                in_pkts;        /* incoming packet counter */
 +      atomic_unchecked_t      in_pkts;        /* incoming packet counter */
  
        struct ip_vs_conn       *control;       /* Master control connection */
        atomic_t                n_control;      /* Number of controlled ones */
        struct ip_vs_dest       *dest;          /* real server */
 -      atomic_t                in_pkts;        /* incoming packet counter */
 +      atomic_unchecked_t      in_pkts;        /* incoming packet counter */
  
-       /* packet transmitter for different forwarding methods.  If it
-          mangles the packet, it must return NF_DROP or better NF_STOLEN,
-@@ -705,7 +705,7 @@ struct ip_vs_dest {
+       /* Packet transmitter for different forwarding methods.  If it
+        * mangles the packet, it must return NF_DROP or better NF_STOLEN,
+@@ -682,7 +682,7 @@ struct ip_vs_dest {
        __be16                  port;           /* port number of the server */
        union nf_inet_addr      addr;           /* IP address of the server */
        volatile unsigned int   flags;          /* dest status flags */
        __be16                  port;           /* port number of the server */
        union nf_inet_addr      addr;           /* IP address of the server */
        volatile unsigned int   flags;          /* dest status flags */
@@ -86272,7 +85787,7 @@ index 624a8a5..b1e2a24 100644
        atomic_t                weight;         /* server weight */
  
        atomic_t                refcnt;         /* reference counter */
        atomic_t                weight;         /* server weight */
  
        atomic_t                refcnt;         /* reference counter */
-@@ -960,11 +960,11 @@ struct netns_ipvs {
+@@ -928,11 +928,11 @@ struct netns_ipvs {
        /* ip_vs_lblc */
        int                     sysctl_lblc_expiration;
        struct ctl_table_header *lblc_ctl_header;
        /* ip_vs_lblc */
        int                     sysctl_lblc_expiration;
        struct ctl_table_header *lblc_ctl_header;
@@ -86379,10 +85894,10 @@ index 567c681..cd73ac02 100644
  struct llc_sap_state {
        u8                         curr_state;
 diff --git a/include/net/mac80211.h b/include/net/mac80211.h
  struct llc_sap_state {
        u8                         curr_state;
 diff --git a/include/net/mac80211.h b/include/net/mac80211.h
-index dae2e24..89336e6 100644
+index 0ad1f47..aaea45b 100644
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
 --- a/include/net/mac80211.h
 +++ b/include/net/mac80211.h
-@@ -4650,7 +4650,7 @@ struct rate_control_ops {
+@@ -4648,7 +4648,7 @@ struct rate_control_ops {
        void (*remove_sta_debugfs)(void *priv, void *priv_sta);
  
        u32 (*get_expected_throughput)(void *priv_sta);
        void (*remove_sta_debugfs)(void *priv, void *priv_sta);
  
        u32 (*get_expected_throughput)(void *priv_sta);
@@ -86392,7 +85907,7 @@ index dae2e24..89336e6 100644
  static inline int rate_supported(struct ieee80211_sta *sta,
                                 enum ieee80211_band band,
 diff --git a/include/net/neighbour.h b/include/net/neighbour.h
  static inline int rate_supported(struct ieee80211_sta *sta,
                                 enum ieee80211_band band,
 diff --git a/include/net/neighbour.h b/include/net/neighbour.h
-index 47f4254..fd095bc 100644
+index f60558d..e5ed9bd 100644
 --- a/include/net/neighbour.h
 +++ b/include/net/neighbour.h
 @@ -163,7 +163,7 @@ struct neigh_ops {
 --- a/include/net/neighbour.h
 +++ b/include/net/neighbour.h
 @@ -163,7 +163,7 @@ struct neigh_ops {
@@ -86479,21 +85994,8 @@ index e0d6466..e2f3003 100644
  }
  
  #endif /* __NET_NET_NAMESPACE_H */
  }
  
  #endif /* __NET_NET_NAMESPACE_H */
-diff --git a/include/net/netdma.h b/include/net/netdma.h
-index 8ba8ce2..99b7fff 100644
---- a/include/net/netdma.h
-+++ b/include/net/netdma.h
-@@ -24,7 +24,7 @@
- #include <linux/dmaengine.h>
- #include <linux/skbuff.h>
--int dma_skb_copy_datagram_iovec(struct dma_chan* chan,
-+int __intentional_overflow(3,5) dma_skb_copy_datagram_iovec(struct dma_chan* chan,
-               struct sk_buff *skb, int offset, struct iovec *to,
-               size_t len, struct dma_pinned_list *pinned_list);
 diff --git a/include/net/netlink.h b/include/net/netlink.h
 diff --git a/include/net/netlink.h b/include/net/netlink.h
-index 6c10762..3e5de0c 100644
+index 7b903e1..ad9ca4b 100644
 --- a/include/net/netlink.h
 +++ b/include/net/netlink.h
 @@ -521,7 +521,7 @@ static inline void *nlmsg_get_pos(struct sk_buff *skb)
 --- a/include/net/netlink.h
 +++ b/include/net/netlink.h
 @@ -521,7 +521,7 @@ static inline void *nlmsg_get_pos(struct sk_buff *skb)
@@ -86506,7 +86008,7 @@ index 6c10762..3e5de0c 100644
  
  /**
 diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h
  
  /**
 diff --git a/include/net/netns/conntrack.h b/include/net/netns/conntrack.h
-index 29d6a94..235d3d8 100644
+index 29d6a94..235d3d84 100644
 --- a/include/net/netns/conntrack.h
 +++ b/include/net/netns/conntrack.h
 @@ -14,10 +14,10 @@ struct nf_conntrack_ecache;
 --- a/include/net/netns/conntrack.h
 +++ b/include/net/netns/conntrack.h
 @@ -14,10 +14,10 @@ struct nf_conntrack_ecache;
@@ -86532,10 +86034,10 @@ index 29d6a94..235d3d8 100644
  };
  
 diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
  };
  
 diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
-index aec5e12..807233f 100644
+index 24945ce..f19e42f 100644
 --- a/include/net/netns/ipv4.h
 +++ b/include/net/netns/ipv4.h
 --- a/include/net/netns/ipv4.h
 +++ b/include/net/netns/ipv4.h
-@@ -82,7 +82,7 @@ struct netns_ipv4 {
+@@ -83,7 +83,7 @@ struct netns_ipv4 {
  
        struct ping_group_range ping_group_range;
  
  
        struct ping_group_range ping_group_range;
  
@@ -86544,7 +86046,7 @@ index aec5e12..807233f 100644
  
  #ifdef CONFIG_SYSCTL
        unsigned long *sysctl_local_reserved_ports;
  
  #ifdef CONFIG_SYSCTL
        unsigned long *sysctl_local_reserved_ports;
-@@ -96,6 +96,6 @@ struct netns_ipv4 {
+@@ -97,6 +97,6 @@ struct netns_ipv4 {
        struct fib_rules_ops    *mr_rules_ops;
  #endif
  #endif
        struct fib_rules_ops    *mr_rules_ops;
  #endif
  #endif
@@ -86553,7 +86055,7 @@ index aec5e12..807233f 100644
  };
  #endif
 diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
  };
  #endif
 diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
-index eade27a..42894dd 100644
+index 69ae41f..4f94868 100644
 --- a/include/net/netns/ipv6.h
 +++ b/include/net/netns/ipv6.h
 @@ -75,8 +75,8 @@ struct netns_ipv6 {
 --- a/include/net/netns/ipv6.h
 +++ b/include/net/netns/ipv6.h
 @@ -75,8 +75,8 @@ struct netns_ipv6 {
@@ -86561,17 +86063,17 @@ index eade27a..42894dd 100644
  #endif
  #endif
 -      atomic_t                dev_addr_genid;
  #endif
  #endif
 -      atomic_t                dev_addr_genid;
--      atomic_t                rt_genid;
+-      atomic_t                fib6_sernum;
 +      atomic_unchecked_t      dev_addr_genid;
 +      atomic_unchecked_t      dev_addr_genid;
-+      atomic_unchecked_t      rt_genid;
++      atomic_unchecked_t      fib6_sernum;
  };
  
  #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
 diff --git a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h
  };
  
  #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
 diff --git a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h
-index 3492434..209f58c 100644
+index 9da7982..099321b9 100644
 --- a/include/net/netns/xfrm.h
 +++ b/include/net/netns/xfrm.h
 --- a/include/net/netns/xfrm.h
 +++ b/include/net/netns/xfrm.h
-@@ -64,7 +64,7 @@ struct netns_xfrm {
+@@ -78,7 +78,7 @@ struct netns_xfrm {
  
        /* flow cache part */
        struct flow_cache       flow_cache_global;
  
        /* flow cache part */
        struct flow_cache       flow_cache_global;
@@ -86679,10 +86181,10 @@ index 4ff3f67..89ae38e 100644
  
  /* Structure to track chunk fragments that have been acked, but peer
 diff --git a/include/net/sock.h b/include/net/sock.h
  
  /* Structure to track chunk fragments that have been acked, but peer
 diff --git a/include/net/sock.h b/include/net/sock.h
-index b9a5bd0..dcd5f3c 100644
+index 7db3db1..a915cca 100644
 --- a/include/net/sock.h
 +++ b/include/net/sock.h
 --- a/include/net/sock.h
 +++ b/include/net/sock.h
-@@ -356,7 +356,7 @@ struct sock {
+@@ -355,7 +355,7 @@ struct sock {
        unsigned int            sk_napi_id;
        unsigned int            sk_ll_usec;
  #endif
        unsigned int            sk_napi_id;
        unsigned int            sk_ll_usec;
  #endif
@@ -86691,7 +86193,7 @@ index b9a5bd0..dcd5f3c 100644
        int                     sk_rcvbuf;
  
        struct sk_filter __rcu  *sk_filter;
        int                     sk_rcvbuf;
  
        struct sk_filter __rcu  *sk_filter;
-@@ -1053,7 +1053,7 @@ struct proto {
+@@ -1048,7 +1048,7 @@ struct proto {
        void                    (*destroy_cgroup)(struct mem_cgroup *memcg);
        struct cg_proto         *(*proto_cgroup)(struct mem_cgroup *memcg);
  #endif
        void                    (*destroy_cgroup)(struct mem_cgroup *memcg);
        struct cg_proto         *(*proto_cgroup)(struct mem_cgroup *memcg);
  #endif
@@ -86700,7 +86202,7 @@ index b9a5bd0..dcd5f3c 100644
  
  /*
   * Bits in struct cg_proto.flags
  
  /*
   * Bits in struct cg_proto.flags
-@@ -1240,7 +1240,7 @@ static inline u64 memcg_memory_allocated_read(struct cg_proto *prot)
+@@ -1235,7 +1235,7 @@ static inline u64 memcg_memory_allocated_read(struct cg_proto *prot)
        return ret >> PAGE_SHIFT;
  }
  
        return ret >> PAGE_SHIFT;
  }
  
@@ -86709,7 +86211,7 @@ index b9a5bd0..dcd5f3c 100644
  sk_memory_allocated(const struct sock *sk)
  {
        struct proto *prot = sk->sk_prot;
  sk_memory_allocated(const struct sock *sk)
  {
        struct proto *prot = sk->sk_prot;
-@@ -1385,7 +1385,7 @@ struct sock_iocb {
+@@ -1380,7 +1380,7 @@ struct sock_iocb {
        struct scm_cookie       *scm;
        struct msghdr           *msg, async_msg;
        struct kiocb            *kiocb;
        struct scm_cookie       *scm;
        struct msghdr           *msg, async_msg;
        struct kiocb            *kiocb;
@@ -86727,7 +86229,7 @@ index b9a5bd0..dcd5f3c 100644
                                           int copy, int offset)
  {
        if (skb->ip_summed == CHECKSUM_NONE) {
                                           int copy, int offset)
  {
        if (skb->ip_summed == CHECKSUM_NONE) {
-@@ -2091,7 +2091,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
+@@ -2092,7 +2092,7 @@ static inline void sk_stream_moderate_sndbuf(struct sock *sk)
        }
  }
  
        }
  }
  
@@ -86737,10 +86239,10 @@ index b9a5bd0..dcd5f3c 100644
  /**
   * sk_page_frag - return an appropriate page_frag
 diff --git a/include/net/tcp.h b/include/net/tcp.h
  /**
   * sk_page_frag - return an appropriate page_frag
 diff --git a/include/net/tcp.h b/include/net/tcp.h
-index 590e01a..76498f3 100644
+index 4062b4f..9ff45e7 100644
 --- a/include/net/tcp.h
 +++ b/include/net/tcp.h
 --- a/include/net/tcp.h
 +++ b/include/net/tcp.h
-@@ -523,7 +523,7 @@ void tcp_retransmit_timer(struct sock *sk);
+@@ -519,7 +519,7 @@ void tcp_retransmit_timer(struct sock *sk);
  void tcp_xmit_retransmit_queue(struct sock *);
  void tcp_simple_retransmit(struct sock *);
  int tcp_trim_head(struct sock *, struct sk_buff *, u32);
  void tcp_xmit_retransmit_queue(struct sock *);
  void tcp_simple_retransmit(struct sock *);
  int tcp_trim_head(struct sock *, struct sk_buff *, u32);
@@ -86749,28 +86251,28 @@ index 590e01a..76498f3 100644
  
  void tcp_send_probe0(struct sock *);
  void tcp_send_partial(struct sock *);
  
  void tcp_send_probe0(struct sock *);
  void tcp_send_partial(struct sock *);
-@@ -696,8 +696,8 @@ struct tcp_skb_cb {
-               struct inet6_skb_parm   h6;
- #endif
-       } header;       /* For incoming frames          */
+@@ -692,8 +692,8 @@ static inline u32 tcp_skb_timestamp(const struct sk_buff *skb)
+  * If this grows please adjust skbuff.h:skbuff->cb[xxx] size appropriately.
+  */
+ struct tcp_skb_cb {
 -      __u32           seq;            /* Starting sequence number     */
 -      __u32           end_seq;        /* SEQ + FIN + SYN + datalen    */
 +      __u32           seq __intentional_overflow(0);  /* Starting sequence number     */
 +      __u32           end_seq __intentional_overflow(0);      /* SEQ + FIN + SYN + datalen    */
 -      __u32           seq;            /* Starting sequence number     */
 -      __u32           end_seq;        /* SEQ + FIN + SYN + datalen    */
 +      __u32           seq __intentional_overflow(0);  /* Starting sequence number     */
 +      __u32           end_seq __intentional_overflow(0);      /* SEQ + FIN + SYN + datalen    */
-       __u32           when;           /* used to compute rtt's        */
-       __u8            tcp_flags;      /* TCP header flags. (tcp[13])  */
-@@ -713,7 +713,7 @@ struct tcp_skb_cb {
+       union {
+               /* Note : tcp_tw_isn is used in input path only
+                *        (isn chosen by tcp_timewait_state_process())
+@@ -718,7 +718,7 @@ struct tcp_skb_cb {
  
        __u8            ip_dsfield;     /* IPv4 tos or IPv6 dsfield     */
        /* 1 byte hole */
 -      __u32           ack_seq;        /* Sequence number ACK'd        */
 +      __u32           ack_seq __intentional_overflow(0);      /* Sequence number ACK'd        */
  
        __u8            ip_dsfield;     /* IPv4 tos or IPv6 dsfield     */
        /* 1 byte hole */
 -      __u32           ack_seq;        /* Sequence number ACK'd        */
 +      __u32           ack_seq __intentional_overflow(0);      /* Sequence number ACK'd        */
- };
- #define TCP_SKB_CB(__skb)     ((struct tcp_skb_cb *)&((__skb)->cb[0]))
+       union {
+               struct inet_skb_parm    h4;
+ #if IS_ENABLED(CONFIG_IPV6)
 diff --git a/include/net/xfrm.h b/include/net/xfrm.h
 diff --git a/include/net/xfrm.h b/include/net/xfrm.h
-index 721e9c3b..3c81bbf 100644
+index dc4865e..152ee4c 100644
 --- a/include/net/xfrm.h
 +++ b/include/net/xfrm.h
 @@ -285,7 +285,6 @@ struct xfrm_dst;
 --- a/include/net/xfrm.h
 +++ b/include/net/xfrm.h
 @@ -285,7 +285,6 @@ struct xfrm_dst;
@@ -86870,10 +86372,10 @@ index 52beadf..598734c 100644
        u8                             qfull;
        enum fc_lport_state            state;
 diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
        u8                             qfull;
        enum fc_lport_state            state;
 diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
-index 1a0d184..4fb841f 100644
+index 27ecee7..5f42632 100644
 --- a/include/scsi/scsi_device.h
 +++ b/include/scsi/scsi_device.h
 --- a/include/scsi/scsi_device.h
 +++ b/include/scsi/scsi_device.h
-@@ -185,9 +185,9 @@ struct scsi_device {
+@@ -186,9 +186,9 @@ struct scsi_device {
        unsigned int max_device_blocked; /* what device_blocked counts down from  */
  #define SCSI_DEFAULT_DEVICE_BLOCKED   3
  
        unsigned int max_device_blocked; /* what device_blocked counts down from  */
  #define SCSI_DEFAULT_DEVICE_BLOCKED   3
  
@@ -86914,21 +86416,21 @@ index ae6c3b8..fd748ac 100644
  /**
   * struct snd_compr: Compressed device
 diff --git a/include/sound/soc.h b/include/sound/soc.h
  /**
   * struct snd_compr: Compressed device
 diff --git a/include/sound/soc.h b/include/sound/soc.h
-index c83a334..27c8038 100644
+index 7ba7130..d46594d 100644
 --- a/include/sound/soc.h
 +++ b/include/sound/soc.h
 --- a/include/sound/soc.h
 +++ b/include/sound/soc.h
-@@ -817,7 +817,7 @@ struct snd_soc_codec_driver {
-       /* probe ordering - for components with runtime dependencies */
-       int probe_order;
-       int remove_order;
+@@ -853,7 +853,7 @@ struct snd_soc_codec_driver {
+                            enum snd_soc_dapm_type, int);
+       bool ignore_pmdown_time;  /* Doesn't benefit from pmdown delay */
 -};
 +} __do_const;
  
  /* SoC platform interface */
  struct snd_soc_platform_driver {
 -};
 +} __do_const;
  
  /* SoC platform interface */
  struct snd_soc_platform_driver {
-@@ -861,7 +861,7 @@ struct snd_soc_platform_driver {
-       unsigned int (*read)(struct snd_soc_platform *, unsigned int);
-       int (*write)(struct snd_soc_platform *, unsigned int, unsigned int);
+@@ -882,7 +882,7 @@ struct snd_soc_platform_driver {
+       const struct snd_compr_ops *compr_ops;
        int (*bespoke_trigger)(struct snd_pcm_substream *, int);
 -};
 +} __do_const;
        int (*bespoke_trigger)(struct snd_pcm_substream *, int);
 -};
 +} __do_const;
@@ -86936,10 +86438,10 @@ index c83a334..27c8038 100644
  struct snd_soc_dai_link_component {
        const char *name;
 diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
  struct snd_soc_dai_link_component {
        const char *name;
 diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h
-index 9ec9864..e2ee1ee 100644
+index 23c518a..d6ef510 100644
 --- a/include/target/target_core_base.h
 +++ b/include/target/target_core_base.h
 --- a/include/target/target_core_base.h
 +++ b/include/target/target_core_base.h
-@@ -761,7 +761,7 @@ struct se_device {
+@@ -764,7 +764,7 @@ struct se_device {
        atomic_long_t           write_bytes;
        /* Active commands on this virtual SE device */
        atomic_t                simple_cmds;
        atomic_long_t           write_bytes;
        /* Active commands on this virtual SE device */
        atomic_t                simple_cmds;
@@ -87142,7 +86644,7 @@ index d876736..ccce5c0 100644
  #define __cpu_to_le64s(x) do { (void)(x); } while (0)
  #define __le64_to_cpus(x) do { (void)(x); } while (0)
 diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
  #define __cpu_to_le64s(x) do { (void)(x); } while (0)
  #define __le64_to_cpus(x) do { (void)(x); } while (0)
 diff --git a/include/uapi/linux/elf.h b/include/uapi/linux/elf.h
-index ef6103b..d4e65dd 100644
+index ea9bf25..5140c61 100644
 --- a/include/uapi/linux/elf.h
 +++ b/include/uapi/linux/elf.h
 @@ -37,6 +37,17 @@ typedef __s64       Elf64_Sxword;
 --- a/include/uapi/linux/elf.h
 +++ b/include/uapi/linux/elf.h
 @@ -37,6 +37,17 @@ typedef __s64       Elf64_Sxword;
@@ -87271,19 +86773,6 @@ index 43aaba1..1c30b48 100644
  /* CTL_VM names: */
  enum
  {
  /* CTL_VM names: */
  enum
  {
-diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
-index 778a329..1416ffb 100644
---- a/include/uapi/linux/videodev2.h
-+++ b/include/uapi/linux/videodev2.h
-@@ -1285,7 +1285,7 @@ struct v4l2_ext_control {
-       union {
-               __s32 value;
-               __s64 value64;
--              char *string;
-+              char __user *string;
-               __u8 *p_u8;
-               __u16 *p_u16;
-               __u32 *p_u32;
 diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h
 index 1590c49..5eab462 100644
 --- a/include/uapi/linux/xattr.h
 diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h
 index 1590c49..5eab462 100644
 --- a/include/uapi/linux/xattr.h
@@ -87330,7 +86819,7 @@ index 30f5362..8ed8ac9 100644
        void *pmi_pal;
        u8 *vbe_state_orig;             /*
 diff --git a/init/Kconfig b/init/Kconfig
        void *pmi_pal;
        u8 *vbe_state_orig;             /*
 diff --git a/init/Kconfig b/init/Kconfig
-index 80a6907..baf7d53 100644
+index 2081a4d..98d1149 100644
 --- a/init/Kconfig
 +++ b/init/Kconfig
 @@ -1150,6 +1150,7 @@ endif # CGROUPS
 --- a/init/Kconfig
 +++ b/init/Kconfig
 @@ -1150,6 +1150,7 @@ endif # CGROUPS
@@ -87341,7 +86830,7 @@ index 80a6907..baf7d53 100644
        default n
        help
          Enables additional kernel features in a sake of checkpoint/restore.
        default n
        help
          Enables additional kernel features in a sake of checkpoint/restore.
-@@ -1635,7 +1636,7 @@ config SLUB_DEBUG
+@@ -1659,7 +1660,7 @@ config SLUB_DEBUG
  
  config COMPAT_BRK
        bool "Disable heap randomization"
  
  config COMPAT_BRK
        bool "Disable heap randomization"
@@ -87350,7 +86839,7 @@ index 80a6907..baf7d53 100644
        help
          Randomizing heap placement makes heap exploits harder, but it
          also breaks ancient binaries (including anything libc5 based).
        help
          Randomizing heap placement makes heap exploits harder, but it
          also breaks ancient binaries (including anything libc5 based).
-@@ -1923,7 +1924,7 @@ config INIT_ALL_POSSIBLE
+@@ -1990,7 +1991,7 @@ config INIT_ALL_POSSIBLE
  config STOP_MACHINE
        bool
        default y
  config STOP_MACHINE
        bool
        default y
@@ -87374,10 +86863,10 @@ index 7bc47ee..6da2dc7 100644
  ifneq ($(CONFIG_BLK_DEV_INITRD),y)
  obj-y                          += noinitramfs.o
 diff --git a/init/do_mounts.c b/init/do_mounts.c
  ifneq ($(CONFIG_BLK_DEV_INITRD),y)
  obj-y                          += noinitramfs.o
 diff --git a/init/do_mounts.c b/init/do_mounts.c
-index 82f2288..ea1430a 100644
+index 9b3565c..3f90cf9 100644
 --- a/init/do_mounts.c
 +++ b/init/do_mounts.c
 --- a/init/do_mounts.c
 +++ b/init/do_mounts.c
-@@ -359,11 +359,11 @@ static void __init get_fs_names(char *page)
+@@ -360,11 +360,11 @@ static void __init get_fs_names(char *page)
  static int __init do_mount_root(char *name, char *fs, int flags, void *data)
  {
        struct super_block *s;
  static int __init do_mount_root(char *name, char *fs, int flags, void *data)
  {
        struct super_block *s;
@@ -87391,7 +86880,7 @@ index 82f2288..ea1430a 100644
        s = current->fs->pwd.dentry->d_sb;
        ROOT_DEV = s->s_dev;
        printk(KERN_INFO
        s = current->fs->pwd.dentry->d_sb;
        ROOT_DEV = s->s_dev;
        printk(KERN_INFO
-@@ -484,18 +484,18 @@ void __init change_floppy(char *fmt, ...)
+@@ -485,18 +485,18 @@ void __init change_floppy(char *fmt, ...)
        va_start(args, fmt);
        vsprintf(buf, fmt, args);
        va_end(args);
        va_start(args, fmt);
        vsprintf(buf, fmt, args);
        va_end(args);
@@ -87413,7 +86902,7 @@ index 82f2288..ea1430a 100644
                termios.c_lflag |= ICANON;
                sys_ioctl(fd, TCSETSF, (long)&termios);
                sys_close(fd);
                termios.c_lflag |= ICANON;
                sys_ioctl(fd, TCSETSF, (long)&termios);
                sys_close(fd);
-@@ -589,8 +589,8 @@ void __init prepare_namespace(void)
+@@ -590,8 +590,8 @@ void __init prepare_namespace(void)
        mount_root();
  out:
        devtmpfs_mount("dev");
        mount_root();
  out:
        devtmpfs_mount("dev");
@@ -87588,7 +87077,7 @@ index ba0a7f36..2bcf1d5 100644
        { INIT_THREAD_INFO(init_task) };
 +#endif
 diff --git a/init/initramfs.c b/init/initramfs.c
        { INIT_THREAD_INFO(init_task) };
 +#endif
 diff --git a/init/initramfs.c b/init/initramfs.c
-index bece48c..e911bd8 100644
+index ad1bd77..dca2c1b 100644
 --- a/init/initramfs.c
 +++ b/init/initramfs.c
 @@ -25,7 +25,7 @@ static ssize_t __init xwrite(int fd, const char *p, size_t count)
 --- a/init/initramfs.c
 +++ b/init/initramfs.c
 @@ -25,7 +25,7 @@ static ssize_t __init xwrite(int fd, const char *p, size_t count)
@@ -87627,12 +87116,12 @@ index bece48c..e911bd8 100644
        }
        return 0;
  }
        }
        return 0;
  }
-@@ -313,11 +313,11 @@ static void __init clean_path(char *path, umode_t mode)
+@@ -313,11 +313,11 @@ static void __init clean_path(char *path, umode_t fmode)
  {
        struct stat st;
  
  {
        struct stat st;
  
--      if (!sys_newlstat(path, &st) && (st.st_mode^mode) & S_IFMT) {
-+      if (!sys_newlstat((char __force_user *)path, (struct stat __force_user *)&st) && (st.st_mode^mode) & S_IFMT) {
+-      if (!sys_newlstat(path, &st) && (st.st_mode ^ fmode) & S_IFMT) {
++      if (!sys_newlstat((char __force_user *)path, (struct stat __force_user *)&st) && (st.st_mode ^ fmode) & S_IFMT) {
                if (S_ISDIR(st.st_mode))
 -                      sys_rmdir(path);
 +                      sys_rmdir((char __force_user *)path);
                if (S_ISDIR(st.st_mode))
 -                      sys_rmdir(path);
 +                      sys_rmdir((char __force_user *)path);
@@ -87699,7 +87188,7 @@ index bece48c..e911bd8 100644
        next_state = Reset;
        return 0;
 diff --git a/init/main.c b/init/main.c
        next_state = Reset;
        return 0;
 diff --git a/init/main.c b/init/main.c
-index d0f4b59..0c4b184 100644
+index 321d0ce..91b53e5 100644
 --- a/init/main.c
 +++ b/init/main.c
 @@ -98,6 +98,8 @@ extern void radix_tree_init(void);
 --- a/init/main.c
 +++ b/init/main.c
 @@ -98,6 +98,8 @@ extern void radix_tree_init(void);
@@ -87828,7 +87317,7 @@ index d0f4b59..0c4b184 100644
        return ret;
  }
  
        return ret;
  }
  
-@@ -908,8 +978,8 @@ static int run_init_process(const char *init_filename)
+@@ -907,8 +977,8 @@ static int run_init_process(const char *init_filename)
  {
        argv_init[0] = init_filename;
        return do_execve(getname_kernel(init_filename),
  {
        argv_init[0] = init_filename;
        return do_execve(getname_kernel(init_filename),
@@ -87839,7 +87328,7 @@ index d0f4b59..0c4b184 100644
  }
  
  static int try_to_run_init_process(const char *init_filename)
  }
  
  static int try_to_run_init_process(const char *init_filename)
-@@ -926,6 +996,10 @@ static int try_to_run_init_process(const char *init_filename)
+@@ -925,6 +995,10 @@ static int try_to_run_init_process(const char *init_filename)
        return ret;
  }
  
        return ret;
  }
  
@@ -87850,7 +87339,7 @@ index d0f4b59..0c4b184 100644
  static noinline void __init kernel_init_freeable(void);
  
  static int __ref kernel_init(void *unused)
  static noinline void __init kernel_init_freeable(void);
  
  static int __ref kernel_init(void *unused)
-@@ -950,6 +1024,11 @@ static int __ref kernel_init(void *unused)
+@@ -949,6 +1023,11 @@ static int __ref kernel_init(void *unused)
                       ramdisk_execute_command, ret);
        }
  
                       ramdisk_execute_command, ret);
        }
  
@@ -87862,7 +87351,7 @@ index d0f4b59..0c4b184 100644
        /*
         * We try each of these until one succeeds.
         *
        /*
         * We try each of these until one succeeds.
         *
-@@ -1005,7 +1084,7 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1004,7 +1083,7 @@ static noinline void __init kernel_init_freeable(void)
        do_basic_setup();
  
        /* Open the /dev/console on the rootfs, this should never fail */
        do_basic_setup();
  
        /* Open the /dev/console on the rootfs, this should never fail */
@@ -87871,7 +87360,7 @@ index d0f4b59..0c4b184 100644
                pr_err("Warning: unable to open an initial console.\n");
  
        (void) sys_dup(0);
                pr_err("Warning: unable to open an initial console.\n");
  
        (void) sys_dup(0);
-@@ -1018,11 +1097,13 @@ static noinline void __init kernel_init_freeable(void)
+@@ -1017,11 +1096,13 @@ static noinline void __init kernel_init_freeable(void)
        if (!ramdisk_execute_command)
                ramdisk_execute_command = "/init";
  
        if (!ramdisk_execute_command)
                ramdisk_execute_command = "/init";
  
@@ -87887,7 +87376,7 @@ index d0f4b59..0c4b184 100644
         * Ok, we have completed the initial bootup, and
         * we're essentially up and running. Get rid of the
 diff --git a/ipc/compat.c b/ipc/compat.c
         * Ok, we have completed the initial bootup, and
         * we're essentially up and running. Get rid of the
 diff --git a/ipc/compat.c b/ipc/compat.c
-index b5ef4f7..ff31d87 100644
+index 9b3c85f..1c4d897 100644
 --- a/ipc/compat.c
 +++ b/ipc/compat.c
 @@ -396,7 +396,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
 --- a/ipc/compat.c
 +++ b/ipc/compat.c
 @@ -396,7 +396,7 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
@@ -87983,7 +87472,7 @@ index 4fcf39a..d3cc2ec 100644
                if (u->mq_bytes + mq_bytes < u->mq_bytes ||
                    u->mq_bytes + mq_bytes > rlimit(RLIMIT_MSGQUEUE)) {
 diff --git a/ipc/shm.c b/ipc/shm.c
                if (u->mq_bytes + mq_bytes < u->mq_bytes ||
                    u->mq_bytes + mq_bytes > rlimit(RLIMIT_MSGQUEUE)) {
 diff --git a/ipc/shm.c b/ipc/shm.c
-index 7fc9f9f..95e201f 100644
+index 0145479..3d27947 100644
 --- a/ipc/shm.c
 +++ b/ipc/shm.c
 @@ -72,6 +72,14 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp);
 --- a/ipc/shm.c
 +++ b/ipc/shm.c
 @@ -72,6 +72,14 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp);
@@ -88051,7 +87540,7 @@ index 7fc9f9f..95e201f 100644
        ipc_unlock_object(&shp->shm_perm);
        rcu_read_unlock();
 diff --git a/ipc/util.c b/ipc/util.c
        ipc_unlock_object(&shp->shm_perm);
        rcu_read_unlock();
 diff --git a/ipc/util.c b/ipc/util.c
-index 27d74e6..8be0be2 100644
+index 88adc32..3867c68 100644
 --- a/ipc/util.c
 +++ b/ipc/util.c
 @@ -71,6 +71,8 @@ struct ipc_proc_iface {
 --- a/ipc/util.c
 +++ b/ipc/util.c
 @@ -71,6 +71,8 @@ struct ipc_proc_iface {
@@ -88075,7 +87564,7 @@ index 27d74e6..8be0be2 100644
        if ((requested_mode & ~granted_mode & 0007) &&
            !ns_capable(ns->user_ns, CAP_IPC_OWNER))
 diff --git a/kernel/audit.c b/kernel/audit.c
        if ((requested_mode & ~granted_mode & 0007) &&
            !ns_capable(ns->user_ns, CAP_IPC_OWNER))
 diff --git a/kernel/audit.c b/kernel/audit.c
-index 6726aa6..bb864a9 100644
+index c6df990..fde80b4 100644
 --- a/kernel/audit.c
 +++ b/kernel/audit.c
 @@ -122,7 +122,7 @@ u32                audit_sig_sid = 0;
 --- a/kernel/audit.c
 +++ b/kernel/audit.c
 @@ -122,7 +122,7 @@ u32                audit_sig_sid = 0;
@@ -88115,10 +87604,10 @@ index 6726aa6..bb864a9 100644
                s.version               = AUDIT_VERSION_LATEST;
                s.backlog_wait_time     = audit_backlog_wait_time;
 diff --git a/kernel/auditsc.c b/kernel/auditsc.c
                s.version               = AUDIT_VERSION_LATEST;
                s.backlog_wait_time     = audit_backlog_wait_time;
 diff --git a/kernel/auditsc.c b/kernel/auditsc.c
-index 21eae3c..66db239 100644
+index e420a0c..38137fa 100644
 --- a/kernel/auditsc.c
 +++ b/kernel/auditsc.c
 --- a/kernel/auditsc.c
 +++ b/kernel/auditsc.c
-@@ -2023,7 +2023,7 @@ int auditsc_get_stamp(struct audit_context *ctx,
+@@ -2014,7 +2014,7 @@ int auditsc_get_stamp(struct audit_context *ctx,
  }
  
  /* global counter which is incremented every time something logs in */
  }
  
  /* global counter which is incremented every time something logs in */
@@ -88127,7 +87616,7 @@ index 21eae3c..66db239 100644
  
  static int audit_set_loginuid_perm(kuid_t loginuid)
  {
  
  static int audit_set_loginuid_perm(kuid_t loginuid)
  {
-@@ -2090,7 +2090,7 @@ int audit_set_loginuid(kuid_t loginuid)
+@@ -2081,7 +2081,7 @@ int audit_set_loginuid(kuid_t loginuid)
  
        /* are we setting or clearing? */
        if (uid_valid(loginuid))
  
        /* are we setting or clearing? */
        if (uid_valid(loginuid))
@@ -88137,114 +87626,59 @@ index 21eae3c..66db239 100644
        task->sessionid = sessionid;
        task->loginuid = loginuid;
 diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
        task->sessionid = sessionid;
        task->loginuid = loginuid;
 diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
-index 7f0dbcb..b54bb2c 100644
+index d6594e4..597264b 100644
 --- a/kernel/bpf/core.c
 +++ b/kernel/bpf/core.c
 --- a/kernel/bpf/core.c
 +++ b/kernel/bpf/core.c
-@@ -22,6 +22,7 @@
-  */
- #include <linux/filter.h>
- #include <linux/skbuff.h>
-+#include <linux/vmalloc.h>
- #include <asm/unaligned.h>
+@@ -143,14 +143,17 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
+        * random section of illegal instructions.
+        */
+       size = round_up(proglen + sizeof(*hdr) + 128, PAGE_SIZE);
+-      hdr = module_alloc(size);
++      hdr = module_alloc_exec(size);
+       if (hdr == NULL)
+               return NULL;
  
  
- /* Registers */
-@@ -63,6 +64,67 @@ void *bpf_internal_load_pointer_neg_helper(const struct sk_buff *skb, int k, uns
-       return NULL;
- }
+       /* Fill space with illegal/arch-dep instructions. */
+       bpf_fill_ill_insns(hdr, size);
  
  
-+struct bpf_prog *bpf_prog_alloc(unsigned int size, gfp_t gfp_extra_flags)
-+{
-+      gfp_t gfp_flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO |
-+                        gfp_extra_flags;
-+      struct bpf_work_struct *ws;
-+      struct bpf_prog *fp;
-+
-+      size = round_up(size, PAGE_SIZE);
-+      fp = __vmalloc(size, gfp_flags, PAGE_KERNEL);
-+      if (fp == NULL)
-+              return NULL;
-+
-+      ws = kmalloc(sizeof(*ws), GFP_KERNEL | gfp_extra_flags);
-+      if (ws == NULL) {
-+              vfree(fp);
-+              return NULL;
-+      }
-+
-+      fp->pages = size / PAGE_SIZE;
-+      fp->work = ws;
-+
-+      return fp;
-+}
-+EXPORT_SYMBOL_GPL(bpf_prog_alloc);
-+
-+struct bpf_prog *bpf_prog_realloc(struct bpf_prog *fp_old, unsigned int size,
-+                                gfp_t gfp_extra_flags)
-+{
-+      gfp_t gfp_flags = GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO |
-+                        gfp_extra_flags;
-+      struct bpf_prog *fp;
-+
-+      BUG_ON(fp_old == NULL);
-+
-+      size = round_up(size, PAGE_SIZE);
-+      if (size <= fp_old->pages * PAGE_SIZE)
-+              return fp_old;
-+
-+      fp = __vmalloc(size, gfp_flags, PAGE_KERNEL);
-+      if (fp != NULL) {
-+              memcpy(fp, fp_old, fp_old->pages * PAGE_SIZE);
-+              fp->pages = size / PAGE_SIZE;
-+
-+              /* We keep fp->work from fp_old around in the new
-+               * reallocated structure.
-+               */
-+              fp_old->work = NULL;
-+              __bpf_prog_free(fp_old);
-+      }
-+
-+      return fp;
-+}
-+EXPORT_SYMBOL_GPL(bpf_prog_realloc);
-+
-+void __bpf_prog_free(struct bpf_prog *fp)
-+{
-+      kfree(fp->work);
-+      vfree(fp);
-+}
-+EXPORT_SYMBOL_GPL(__bpf_prog_free);
++      pax_open_kernel();
+       hdr->pages = size / PAGE_SIZE;
++      pax_close_kernel();
 +
 +
- /* Base function for offset calculation. Needs to go into .text section,
-  * therefore keeping it non-static as well; will also be used by JITs
-  * anyway later on, so do not let the compiler omit it.
-@@ -523,12 +585,26 @@ void bpf_prog_select_runtime(struct bpf_prog *fp)
-       /* Probe if internal BPF can be JITed */
-       bpf_int_jit_compile(fp);
-+      /* Lock whole bpf_prog as read-only */
-+      bpf_prog_lock_ro(fp);
- }
- EXPORT_SYMBOL_GPL(bpf_prog_select_runtime);
+       hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)),
+                    PAGE_SIZE - sizeof(*hdr));
+       start = (prandom_u32() % hole) & ~(alignment - 1);
+@@ -163,7 +166,7 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
  
  
--/* free internal BPF program */
-+static void bpf_prog_free_deferred(struct work_struct *work)
-+{
-+      struct bpf_work_struct *ws;
-+
-+      ws = container_of(work, struct bpf_work_struct, work);
-+      bpf_jit_free(ws->prog);
-+}
-+
-+/* Free internal BPF program */
- void bpf_prog_free(struct bpf_prog *fp)
+ void bpf_jit_binary_free(struct bpf_binary_header *hdr)
  {
  {
--      bpf_jit_free(fp);
-+      struct bpf_work_struct *ws = fp->work;
-+
-+      INIT_WORK(&ws->work, bpf_prog_free_deferred);
-+      ws->prog = fp;
-+      schedule_work(&ws->work);
+-      module_free(NULL, hdr);
++      module_free_exec(NULL, hdr);
  }
  }
- EXPORT_SYMBOL_GPL(bpf_prog_free);
+ #endif /* CONFIG_BPF_JIT */
+diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
+index ba61c8c..c60c486 100644
+--- a/kernel/bpf/syscall.c
++++ b/kernel/bpf/syscall.c
+@@ -539,11 +539,15 @@ SYSCALL_DEFINE3(bpf, int, cmd, union bpf_attr __user *, uattr, unsigned int, siz
+       int err;
+       /* the syscall is limited to root temporarily. This restriction will be
+-       * lifted when security audit is clean. Note that eBPF+tracing must have
+-       * this restriction, since it may pass kernel data to user space
++       * lifted by upstream when a half-assed security audit is clean. Note
++       * that eBPF+tracing must have this restriction, since it may pass
++       * kernel data to user space
+        */
+       if (!capable(CAP_SYS_ADMIN))
+               return -EPERM;
++#ifdef CONFIG_GRKERNSEC
++      return -EPERM;
++#endif
+       if (!access_ok(VERIFY_READ, uattr, 1))
+               return -EFAULT;
 diff --git a/kernel/capability.c b/kernel/capability.c
 index 989f5bf..d317ca0 100644
 --- a/kernel/capability.c
 diff --git a/kernel/capability.c b/kernel/capability.c
 index 989f5bf..d317ca0 100644
 --- a/kernel/capability.c
@@ -88344,25 +87778,20 @@ index 989f5bf..d317ca0 100644
 +}
 +EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog);
 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
 +}
 +EXPORT_SYMBOL(capable_wrt_inode_uidgid_nolog);
 diff --git a/kernel/cgroup.c b/kernel/cgroup.c
-index 3a73f99..4f29fea 100644
+index 136ecea..45157a6 100644
 --- a/kernel/cgroup.c
 +++ b/kernel/cgroup.c
 --- a/kernel/cgroup.c
 +++ b/kernel/cgroup.c
-@@ -5341,6 +5341,14 @@ static void cgroup_release_agent(struct work_struct *work)
-                                                   release_list);
-               list_del_init(&cgrp->release_list);
-               raw_spin_unlock(&release_list_lock);
-+
-+              /*
-+               * don't bother calling call_usermodehelper if we haven't
-+               * configured a binary to execute
-+               */
-+              if (cgrp->root->release_agent_path[0] == '\0')
-+                      goto continue_free;
+@@ -5276,6 +5276,9 @@ static void cgroup_release_agent(struct work_struct *work)
+       if (!pathbuf || !agentbuf)
+               goto out;
++      if (agentbuf[0] == '\0')
++              goto out;
 +
 +
-               pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
-               if (!pathbuf)
-                       goto continue_free;
-@@ -5539,7 +5547,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v)
+       path = cgroup_path(cgrp, pathbuf, PATH_MAX);
+       if (!path)
+               goto out;
+@@ -5461,7 +5464,7 @@ static int cgroup_css_links_read(struct seq_file *seq, void *v)
                struct task_struct *task;
                int count = 0;
  
                struct task_struct *task;
                int count = 0;
  
@@ -88782,10 +88211,10 @@ index 379650b..30c5180 100644
  #ifdef CONFIG_MODULE_UNLOAD
                {
 diff --git a/kernel/events/core.c b/kernel/events/core.c
  #ifdef CONFIG_MODULE_UNLOAD
                {
 diff --git a/kernel/events/core.c b/kernel/events/core.c
-index 658f232..32e9595 100644
+index 1cd5eef..e8b5af9 100644
 --- a/kernel/events/core.c
 +++ b/kernel/events/core.c
 --- a/kernel/events/core.c
 +++ b/kernel/events/core.c
-@@ -161,8 +161,15 @@ static struct srcu_struct pmus_srcu;
+@@ -170,8 +170,15 @@ static struct srcu_struct pmus_srcu;
   *   0 - disallow raw tracepoint access for unpriv
   *   1 - disallow cpu events for unpriv
   *   2 - disallow kernel profiling for unpriv
   *   0 - disallow raw tracepoint access for unpriv
   *   1 - disallow cpu events for unpriv
   *   2 - disallow kernel profiling for unpriv
@@ -88802,7 +88231,7 @@ index 658f232..32e9595 100644
  
  /* Minimum for 512 kiB + 1 user control page */
  int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
  
  /* Minimum for 512 kiB + 1 user control page */
  int sysctl_perf_event_mlock __read_mostly = 512 + (PAGE_SIZE / 1024); /* 'free' kiB per user */
-@@ -188,7 +195,7 @@ void update_perf_cpu_limits(void)
+@@ -197,7 +204,7 @@ void update_perf_cpu_limits(void)
  
        tmp *= sysctl_perf_cpu_time_max_percent;
        do_div(tmp, 100);
  
        tmp *= sysctl_perf_cpu_time_max_percent;
        do_div(tmp, 100);
@@ -88811,7 +88240,7 @@ index 658f232..32e9595 100644
  }
  
  static int perf_rotate_context(struct perf_cpu_context *cpuctx);
  }
  
  static int perf_rotate_context(struct perf_cpu_context *cpuctx);
-@@ -294,7 +301,7 @@ void perf_sample_event_took(u64 sample_len_ns)
+@@ -303,7 +310,7 @@ void perf_sample_event_took(u64 sample_len_ns)
        }
  }
  
        }
  }
  
@@ -88820,7 +88249,7 @@ index 658f232..32e9595 100644
  
  static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
                              enum event_type_t event_type);
  
  static void cpu_ctx_sched_out(struct perf_cpu_context *cpuctx,
                              enum event_type_t event_type);
-@@ -3051,7 +3058,7 @@ static void __perf_event_read(void *info)
+@@ -3102,7 +3109,7 @@ static void __perf_event_read(void *info)
  
  static inline u64 perf_event_count(struct perf_event *event)
  {
  
  static inline u64 perf_event_count(struct perf_event *event)
  {
@@ -88829,7 +88258,7 @@ index 658f232..32e9595 100644
  }
  
  static u64 perf_event_read(struct perf_event *event)
  }
  
  static u64 perf_event_read(struct perf_event *event)
-@@ -3430,9 +3437,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
+@@ -3528,9 +3535,9 @@ u64 perf_event_read_value(struct perf_event *event, u64 *enabled, u64 *running)
        mutex_lock(&event->child_mutex);
        total += perf_event_read(event);
        *enabled += event->total_time_enabled +
        mutex_lock(&event->child_mutex);
        total += perf_event_read(event);
        *enabled += event->total_time_enabled +
@@ -88841,7 +88270,7 @@ index 658f232..32e9595 100644
  
        list_for_each_entry(child, &event->child_list, child_list) {
                total += perf_event_read(child);
  
        list_for_each_entry(child, &event->child_list, child_list) {
                total += perf_event_read(child);
-@@ -3881,10 +3888,10 @@ void perf_event_update_userpage(struct perf_event *event)
+@@ -3994,10 +4001,10 @@ void perf_event_update_userpage(struct perf_event *event)
                userpg->offset -= local64_read(&event->hw.prev_count);
  
        userpg->time_enabled = enabled +
                userpg->offset -= local64_read(&event->hw.prev_count);
  
        userpg->time_enabled = enabled +
@@ -88854,7 +88283,7 @@ index 658f232..32e9595 100644
  
        arch_perf_update_userpage(userpg, now);
  
  
        arch_perf_update_userpage(userpg, now);
  
-@@ -4448,7 +4455,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
+@@ -4561,7 +4568,7 @@ perf_output_sample_ustack(struct perf_output_handle *handle, u64 dump_size,
  
                /* Data. */
                sp = perf_user_stack_pointer(regs);
  
                /* Data. */
                sp = perf_user_stack_pointer(regs);
@@ -88863,7 +88292,7 @@ index 658f232..32e9595 100644
                dyn_size = dump_size - rem;
  
                perf_output_skip(handle, rem);
                dyn_size = dump_size - rem;
  
                perf_output_skip(handle, rem);
-@@ -4539,11 +4546,11 @@ static void perf_output_read_one(struct perf_output_handle *handle,
+@@ -4652,11 +4659,11 @@ static void perf_output_read_one(struct perf_output_handle *handle,
        values[n++] = perf_event_count(event);
        if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
                values[n++] = enabled +
        values[n++] = perf_event_count(event);
        if (read_format & PERF_FORMAT_TOTAL_TIME_ENABLED) {
                values[n++] = enabled +
@@ -88877,7 +88306,7 @@ index 658f232..32e9595 100644
        }
        if (read_format & PERF_FORMAT_ID)
                values[n++] = primary_event_id(event);
        }
        if (read_format & PERF_FORMAT_ID)
                values[n++] = primary_event_id(event);
-@@ -6858,7 +6865,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
+@@ -6958,7 +6965,7 @@ perf_event_alloc(struct perf_event_attr *attr, int cpu,
        event->parent           = parent_event;
  
        event->ns               = get_pid_ns(task_active_pid_ns(current));
        event->parent           = parent_event;
  
        event->ns               = get_pid_ns(task_active_pid_ns(current));
@@ -88886,7 +88315,7 @@ index 658f232..32e9595 100644
  
        event->state            = PERF_EVENT_STATE_INACTIVE;
  
  
        event->state            = PERF_EVENT_STATE_INACTIVE;
  
-@@ -7137,6 +7144,11 @@ SYSCALL_DEFINE5(perf_event_open,
+@@ -7237,6 +7244,11 @@ SYSCALL_DEFINE5(perf_event_open,
        if (flags & ~PERF_FLAG_ALL)
                return -EINVAL;
  
        if (flags & ~PERF_FLAG_ALL)
                return -EINVAL;
  
@@ -88898,7 +88327,7 @@ index 658f232..32e9595 100644
        err = perf_copy_attr(attr_uptr, &attr);
        if (err)
                return err;
        err = perf_copy_attr(attr_uptr, &attr);
        if (err)
                return err;
-@@ -7489,10 +7501,10 @@ static void sync_child_event(struct perf_event *child_event,
+@@ -7592,10 +7604,10 @@ static void sync_child_event(struct perf_event *child_event,
        /*
         * Add back the child's count to the parent's count:
         */
        /*
         * Add back the child's count to the parent's count:
         */
@@ -88957,10 +88386,10 @@ index 569b2187..19940d9 100644
  /* Callchain handling */
  extern struct perf_callchain_entry *
 diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
  /* Callchain handling */
  extern struct perf_callchain_entry *
 diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c
-index 1d0af8a..9913530 100644
+index ed8f2cd..fe8030c 100644
 --- a/kernel/events/uprobes.c
 +++ b/kernel/events/uprobes.c
 --- a/kernel/events/uprobes.c
 +++ b/kernel/events/uprobes.c
-@@ -1671,7 +1671,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
+@@ -1670,7 +1670,7 @@ static int is_trap_at_addr(struct mm_struct *mm, unsigned long vaddr)
  {
        struct page *page;
        uprobe_opcode_t opcode;
  {
        struct page *page;
        uprobe_opcode_t opcode;
@@ -88970,10 +88399,10 @@ index 1d0af8a..9913530 100644
        pagefault_disable();
        result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr,
 diff --git a/kernel/exit.c b/kernel/exit.c
        pagefault_disable();
        result = __copy_from_user_inatomic(&opcode, (void __user*)vaddr,
 diff --git a/kernel/exit.c b/kernel/exit.c
-index 32c58f7..9eb6907 100644
+index 5d30019..934add5 100644
 --- a/kernel/exit.c
 +++ b/kernel/exit.c
 --- a/kernel/exit.c
 +++ b/kernel/exit.c
-@@ -173,6 +173,10 @@ void release_task(struct task_struct *p)
+@@ -174,6 +174,10 @@ void release_task(struct task_struct *p)
        struct task_struct *leader;
        int zap_leader;
  repeat:
        struct task_struct *leader;
        int zap_leader;
  repeat:
@@ -88984,16 +88413,16 @@ index 32c58f7..9eb6907 100644
        /* don't need to get the RCU readlock here - the process is dead and
         * can't be modifying its own credentials. But shut RCU-lockdep up */
        rcu_read_lock();
        /* don't need to get the RCU readlock here - the process is dead and
         * can't be modifying its own credentials. But shut RCU-lockdep up */
        rcu_read_lock();
-@@ -668,6 +672,8 @@ void do_exit(long code)
-       struct task_struct *tsk = current;
+@@ -670,6 +674,8 @@ void do_exit(long code)
        int group_dead;
        int group_dead;
+       TASKS_RCU(int tasks_rcu_i);
  
 +      set_fs(USER_DS);
 +
        profile_task_exit(tsk);
  
        WARN_ON(blk_needs_flush_plug(tsk));
  
 +      set_fs(USER_DS);
 +
        profile_task_exit(tsk);
  
        WARN_ON(blk_needs_flush_plug(tsk));
-@@ -684,7 +690,6 @@ void do_exit(long code)
+@@ -686,7 +692,6 @@ void do_exit(long code)
         * mm_release()->clear_child_tid() from writing to a user-controlled
         * kernel address.
         */
         * mm_release()->clear_child_tid() from writing to a user-controlled
         * kernel address.
         */
@@ -89001,7 +88430,7 @@ index 32c58f7..9eb6907 100644
  
        ptrace_event(PTRACE_EVENT_EXIT, code);
  
  
        ptrace_event(PTRACE_EVENT_EXIT, code);
  
-@@ -742,6 +747,9 @@ void do_exit(long code)
+@@ -744,6 +749,9 @@ void do_exit(long code)
        tsk->exit_code = code;
        taskstats_exit(tsk, group_dead);
  
        tsk->exit_code = code;
        taskstats_exit(tsk, group_dead);
  
@@ -89011,7 +88440,7 @@ index 32c58f7..9eb6907 100644
        exit_mm(tsk);
  
        if (group_dead)
        exit_mm(tsk);
  
        if (group_dead)
-@@ -859,7 +867,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
+@@ -863,7 +871,7 @@ SYSCALL_DEFINE1(exit, int, error_code)
   * Take down every thread in the group.  This is called by fatal signals
   * as well as by sys_exit_group (below).
   */
   * Take down every thread in the group.  This is called by fatal signals
   * as well as by sys_exit_group (below).
   */
@@ -89021,7 +88450,7 @@ index 32c58f7..9eb6907 100644
  {
        struct signal_struct *sig = current->signal;
 diff --git a/kernel/fork.c b/kernel/fork.c
  {
        struct signal_struct *sig = current->signal;
 diff --git a/kernel/fork.c b/kernel/fork.c
-index a91e47d..71c9064 100644
+index 9b7d746..5b898ab 100644
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
 @@ -183,6 +183,48 @@ void thread_info_cache_init(void)
 --- a/kernel/fork.c
 +++ b/kernel/fork.c
 @@ -183,6 +183,48 @@ void thread_info_cache_init(void)
@@ -89099,15 +88528,15 @@ index a91e47d..71c9064 100644
        rt_mutex_debug_task_free(tsk);
        ftrace_graph_exit_task(tsk);
        put_seccomp_filter(tsk);
        rt_mutex_debug_task_free(tsk);
        ftrace_graph_exit_task(tsk);
        put_seccomp_filter(tsk);
-@@ -299,6 +345,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -306,6 +352,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+ {
        struct task_struct *tsk;
        struct thread_info *ti;
        struct task_struct *tsk;
        struct thread_info *ti;
-       unsigned long *stackend;
 +      void *lowmem_stack;
        int node = tsk_fork_get_node(orig);
        int err;
  
 +      void *lowmem_stack;
        int node = tsk_fork_get_node(orig);
        int err;
  
-@@ -306,7 +353,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -313,7 +360,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
        if (!tsk)
                return NULL;
  
        if (!tsk)
                return NULL;
  
@@ -89116,7 +88545,7 @@ index a91e47d..71c9064 100644
        if (!ti)
                goto free_tsk;
  
        if (!ti)
                goto free_tsk;
  
-@@ -315,6 +362,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -322,6 +369,9 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
                goto free_ti;
  
        tsk->stack = ti;
                goto free_ti;
  
        tsk->stack = ti;
@@ -89126,8 +88555,8 @@ index a91e47d..71c9064 100644
  #ifdef CONFIG_SECCOMP
        /*
         * We must handle setting up seccomp filters once we're under
  #ifdef CONFIG_SECCOMP
        /*
         * We must handle setting up seccomp filters once we're under
-@@ -332,7 +382,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
-       *stackend = STACK_END_MAGIC;    /* for overflow detection */
+@@ -338,7 +388,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+       set_task_stack_end_magic(tsk);
  
  #ifdef CONFIG_CC_STACKPROTECTOR
 -      tsk->stack_canary = get_random_int();
  
  #ifdef CONFIG_CC_STACKPROTECTOR
 -      tsk->stack_canary = get_random_int();
@@ -89135,7 +88564,7 @@ index a91e47d..71c9064 100644
  #endif
  
        /*
  #endif
  
        /*
-@@ -346,24 +396,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
+@@ -352,24 +402,92 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
        tsk->splice_pipe = NULL;
        tsk->task_frag.page = NULL;
  
        tsk->splice_pipe = NULL;
        tsk->task_frag.page = NULL;
  
@@ -89232,7 +88661,7 @@ index a91e47d..71c9064 100644
  
        uprobe_start_dup_mmap();
        down_write(&oldmm->mmap_sem);
  
        uprobe_start_dup_mmap();
        down_write(&oldmm->mmap_sem);
-@@ -391,55 +509,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -397,55 +515,15 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
  
        prev = NULL;
        for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) {
  
        prev = NULL;
        for (mpnt = oldmm->mmap; mpnt; mpnt = mpnt->vm_next) {
@@ -89292,7 +88721,7 @@ index a91e47d..71c9064 100644
                }
  
                /*
                }
  
                /*
-@@ -471,6 +549,31 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -477,6 +555,31 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
                if (retval)
                        goto out;
        }
                if (retval)
                        goto out;
        }
@@ -89324,7 +88753,7 @@ index a91e47d..71c9064 100644
        /* a new mm has just been created */
        arch_dup_mmap(oldmm, mm);
        retval = 0;
        /* a new mm has just been created */
        arch_dup_mmap(oldmm, mm);
        retval = 0;
-@@ -480,14 +583,6 @@ out:
+@@ -486,14 +589,6 @@ out:
        up_write(&oldmm->mmap_sem);
        uprobe_end_dup_mmap();
        return retval;
        up_write(&oldmm->mmap_sem);
        uprobe_end_dup_mmap();
        return retval;
@@ -89339,7 +88768,7 @@ index a91e47d..71c9064 100644
  }
  
  static inline int mm_alloc_pgd(struct mm_struct *mm)
  }
  
  static inline int mm_alloc_pgd(struct mm_struct *mm)
-@@ -729,8 +824,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
+@@ -734,8 +829,8 @@ struct mm_struct *mm_access(struct task_struct *task, unsigned int mode)
                return ERR_PTR(err);
  
        mm = get_task_mm(task);
                return ERR_PTR(err);
  
        mm = get_task_mm(task);
@@ -89350,7 +88779,7 @@ index a91e47d..71c9064 100644
                mmput(mm);
                mm = ERR_PTR(-EACCES);
        }
                mmput(mm);
                mm = ERR_PTR(-EACCES);
        }
-@@ -933,13 +1028,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
+@@ -938,13 +1033,20 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
                        spin_unlock(&fs->lock);
                        return -EAGAIN;
                }
                        spin_unlock(&fs->lock);
                        return -EAGAIN;
                }
@@ -89372,7 +88801,7 @@ index a91e47d..71c9064 100644
        return 0;
  }
  
        return 0;
  }
  
-@@ -1173,7 +1275,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
+@@ -1179,7 +1281,7 @@ init_task_pid(struct task_struct *task, enum pid_type type, struct pid *pid)
   * parts of the process environment (as per the clone
   * flags). The actual kick-off is left to the caller.
   */
   * parts of the process environment (as per the clone
   * flags). The actual kick-off is left to the caller.
   */
@@ -89381,7 +88810,7 @@ index a91e47d..71c9064 100644
                                        unsigned long stack_start,
                                        unsigned long stack_size,
                                        int __user *child_tidptr,
                                        unsigned long stack_start,
                                        unsigned long stack_size,
                                        int __user *child_tidptr,
-@@ -1244,6 +1346,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1250,6 +1352,9 @@ static struct task_struct *copy_process(unsigned long clone_flags,
        DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
  #endif
        retval = -EAGAIN;
        DEBUG_LOCKS_WARN_ON(!p->softirqs_enabled);
  #endif
        retval = -EAGAIN;
@@ -89391,7 +88820,7 @@ index a91e47d..71c9064 100644
        if (atomic_read(&p->real_cred->user->processes) >=
                        task_rlimit(p, RLIMIT_NPROC)) {
                if (p->real_cred->user != INIT_USER &&
        if (atomic_read(&p->real_cred->user->processes) >=
                        task_rlimit(p, RLIMIT_NPROC)) {
                if (p->real_cred->user != INIT_USER &&
-@@ -1493,6 +1598,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
+@@ -1499,6 +1604,11 @@ static struct task_struct *copy_process(unsigned long clone_flags,
                goto bad_fork_free_pid;
        }
  
                goto bad_fork_free_pid;
        }
  
@@ -89403,7 +88832,7 @@ index a91e47d..71c9064 100644
        if (likely(p->pid)) {
                ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
  
        if (likely(p->pid)) {
                ptrace_init_task(p, (clone_flags & CLONE_PTRACE) || trace);
  
-@@ -1583,6 +1693,8 @@ bad_fork_cleanup_count:
+@@ -1589,6 +1699,8 @@ bad_fork_cleanup_count:
  bad_fork_free:
        free_task(p);
  fork_out:
  bad_fork_free:
        free_task(p);
  fork_out:
@@ -89412,7 +88841,7 @@ index a91e47d..71c9064 100644
        return ERR_PTR(retval);
  }
  
        return ERR_PTR(retval);
  }
  
-@@ -1644,6 +1756,7 @@ long do_fork(unsigned long clone_flags,
+@@ -1650,6 +1762,7 @@ long do_fork(unsigned long clone_flags,
  
        p = copy_process(clone_flags, stack_start, stack_size,
                         child_tidptr, NULL, trace);
  
        p = copy_process(clone_flags, stack_start, stack_size,
                         child_tidptr, NULL, trace);
@@ -89420,7 +88849,7 @@ index a91e47d..71c9064 100644
        /*
         * Do this prior waking up the new thread - the thread pointer
         * might get invalid after that point, if the thread exits quickly.
        /*
         * Do this prior waking up the new thread - the thread pointer
         * might get invalid after that point, if the thread exits quickly.
-@@ -1660,6 +1773,8 @@ long do_fork(unsigned long clone_flags,
+@@ -1666,6 +1779,8 @@ long do_fork(unsigned long clone_flags,
                if (clone_flags & CLONE_PARENT_SETTID)
                        put_user(nr, parent_tidptr);
  
                if (clone_flags & CLONE_PARENT_SETTID)
                        put_user(nr, parent_tidptr);
  
@@ -89429,7 +88858,7 @@ index a91e47d..71c9064 100644
                if (clone_flags & CLONE_VFORK) {
                        p->vfork_done = &vfork;
                        init_completion(&vfork);
                if (clone_flags & CLONE_VFORK) {
                        p->vfork_done = &vfork;
                        init_completion(&vfork);
-@@ -1778,7 +1893,7 @@ void __init proc_caches_init(void)
+@@ -1784,7 +1899,7 @@ void __init proc_caches_init(void)
        mm_cachep = kmem_cache_create("mm_struct",
                        sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
                        SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK, NULL);
        mm_cachep = kmem_cache_create("mm_struct",
                        sizeof(struct mm_struct), ARCH_MIN_MMSTRUCT_ALIGN,
                        SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_NOTRACK, NULL);
@@ -89438,7 +88867,7 @@ index a91e47d..71c9064 100644
        mmap_init();
        nsproxy_cache_init();
  }
        mmap_init();
        nsproxy_cache_init();
  }
-@@ -1818,7 +1933,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
+@@ -1824,7 +1939,7 @@ static int unshare_fs(unsigned long unshare_flags, struct fs_struct **new_fsp)
                return 0;
  
        /* don't need lock here; in the worst case we'll do useless copy */
                return 0;
  
        /* don't need lock here; in the worst case we'll do useless copy */
@@ -89447,7 +88876,7 @@ index a91e47d..71c9064 100644
                return 0;
  
        *new_fsp = copy_fs_struct(fs);
                return 0;
  
        *new_fsp = copy_fs_struct(fs);
-@@ -1930,7 +2045,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
+@@ -1936,7 +2051,8 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
                        fs = current->fs;
                        spin_lock(&fs->lock);
                        current->fs = new_fs;
                        fs = current->fs;
                        spin_lock(&fs->lock);
                        current->fs = new_fs;
@@ -89458,10 +88887,10 @@ index a91e47d..71c9064 100644
                        else
                                new_fs = fs;
 diff --git a/kernel/futex.c b/kernel/futex.c
                        else
                                new_fs = fs;
 diff --git a/kernel/futex.c b/kernel/futex.c
-index 22b3f1b..6820bc0 100644
+index 63678b5..512f9af 100644
 --- a/kernel/futex.c
 +++ b/kernel/futex.c
 --- a/kernel/futex.c
 +++ b/kernel/futex.c
-@@ -202,7 +202,7 @@ struct futex_pi_state {
+@@ -201,7 +201,7 @@ struct futex_pi_state {
        atomic_t refcount;
  
        union futex_key key;
        atomic_t refcount;
  
        union futex_key key;
@@ -89470,7 +88899,7 @@ index 22b3f1b..6820bc0 100644
  
  /**
   * struct futex_q - The hashed futex queue entry, one per waiting task
  
  /**
   * struct futex_q - The hashed futex queue entry, one per waiting task
-@@ -236,7 +236,7 @@ struct futex_q {
+@@ -235,7 +235,7 @@ struct futex_q {
        struct rt_mutex_waiter *rt_waiter;
        union futex_key *requeue_pi_key;
        u32 bitset;
        struct rt_mutex_waiter *rt_waiter;
        union futex_key *requeue_pi_key;
        u32 bitset;
@@ -89479,7 +88908,7 @@ index 22b3f1b..6820bc0 100644
  
  static const struct futex_q futex_q_init = {
        /* list gets initialized in queue_me()*/
  
  static const struct futex_q futex_q_init = {
        /* list gets initialized in queue_me()*/
-@@ -396,6 +396,11 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
+@@ -402,6 +402,11 @@ get_futex_key(u32 __user *uaddr, int fshared, union futex_key *key, int rw)
        struct page *page, *page_head;
        int err, ro = 0;
  
        struct page *page, *page_head;
        int err, ro = 0;
  
@@ -89491,7 +88920,7 @@ index 22b3f1b..6820bc0 100644
        /*
         * The futex address must be "naturally" aligned.
         */
        /*
         * The futex address must be "naturally" aligned.
         */
-@@ -595,7 +600,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr,
+@@ -601,7 +606,7 @@ static int cmpxchg_futex_value_locked(u32 *curval, u32 __user *uaddr,
  
  static int get_futex_value_locked(u32 *dest, u32 __user *from)
  {
  
  static int get_futex_value_locked(u32 *dest, u32 __user *from)
  {
@@ -89500,7 +88929,7 @@ index 22b3f1b..6820bc0 100644
  
        pagefault_disable();
        ret = __copy_from_user_inatomic(dest, from, sizeof(u32));
  
        pagefault_disable();
        ret = __copy_from_user_inatomic(dest, from, sizeof(u32));
-@@ -3000,6 +3005,7 @@ static void __init futex_detect_cmpxchg(void)
+@@ -3006,6 +3011,7 @@ static void __init futex_detect_cmpxchg(void)
  {
  #ifndef CONFIG_HAVE_FUTEX_CMPXCHG
        u32 curval;
  {
  #ifndef CONFIG_HAVE_FUTEX_CMPXCHG
        u32 curval;
@@ -89508,7 +88937,7 @@ index 22b3f1b..6820bc0 100644
  
        /*
         * This will fail and we want it. Some arch implementations do
  
        /*
         * This will fail and we want it. Some arch implementations do
-@@ -3011,8 +3017,11 @@ static void __init futex_detect_cmpxchg(void)
+@@ -3017,8 +3023,11 @@ static void __init futex_detect_cmpxchg(void)
         * implementation, the non-functional ones will return
         * -ENOSYS.
         */
         * implementation, the non-functional ones will return
         * -ENOSYS.
         */
@@ -89594,7 +89023,7 @@ index 9019f15..9a3c42e 100644
  
  static int
 diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
  
  static int
 diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
-index ae51670..c1a9796 100644
+index 5c5987f..bc502b0 100644
 --- a/kernel/kallsyms.c
 +++ b/kernel/kallsyms.c
 @@ -11,6 +11,9 @@
 --- a/kernel/kallsyms.c
 +++ b/kernel/kallsyms.c
 @@ -11,6 +11,9 @@
@@ -89698,15 +89127,6 @@ index ae51670..c1a9796 100644
                seq_printf(m, "%pK %c %s\t[%s]\n", (void *)iter->value,
                           type, iter->name, iter->module_name);
        } else
                seq_printf(m, "%pK %c %s\t[%s]\n", (void *)iter->value,
                           type, iter->name, iter->module_name);
        } else
-@@ -567,7 +611,7 @@ static int kallsyms_open(struct inode *inode, struct file *file)
-       struct kallsym_iter *iter;
-       int ret;
--      iter = kmalloc(sizeof(*iter), GFP_KERNEL);
-+      iter = kzalloc(sizeof(*iter), GFP_KERNEL);
-       if (!iter)
-               return -ENOMEM;
-       reset_iter(iter, 0);
 diff --git a/kernel/kcmp.c b/kernel/kcmp.c
 index 0aa69ea..a7fcafb 100644
 --- a/kernel/kcmp.c
 diff --git a/kernel/kcmp.c b/kernel/kcmp.c
 index 0aa69ea..a7fcafb 100644
 --- a/kernel/kcmp.c
@@ -89723,7 +89143,7 @@ index 0aa69ea..a7fcafb 100644
  
        /*
 diff --git a/kernel/kexec.c b/kernel/kexec.c
  
        /*
 diff --git a/kernel/kexec.c b/kernel/kexec.c
-index 2bee072..8979af8 100644
+index 2abf9f6..c40cf85 100644
 --- a/kernel/kexec.c
 +++ b/kernel/kexec.c
 @@ -1349,7 +1349,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
 --- a/kernel/kexec.c
 +++ b/kernel/kexec.c
 @@ -1349,7 +1349,8 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
@@ -89737,7 +89157,7 @@ index 2bee072..8979af8 100644
  
        /* Don't allow clients that don't understand the native
 diff --git a/kernel/kmod.c b/kernel/kmod.c
  
        /* Don't allow clients that don't understand the native
 diff --git a/kernel/kmod.c b/kernel/kmod.c
-index 8637e04..8b1d0d8 100644
+index 80f7a6d..3c476d3 100644
 --- a/kernel/kmod.c
 +++ b/kernel/kmod.c
 @@ -75,7 +75,7 @@ static void free_modprobe_argv(struct subprocess_info *info)
 --- a/kernel/kmod.c
 +++ b/kernel/kmod.c
 @@ -75,7 +75,7 @@ static void free_modprobe_argv(struct subprocess_info *info)
@@ -89811,7 +89231,7 @@ index 8637e04..8b1d0d8 100644
        /* If modprobe needs a service that is in a module, we get a recursive
         * loop.  Limit the number of running kmod threads to max_threads/2 or
         * MAX_KMOD_CONCURRENT, whichever is the smaller.  A cleaner method
        /* If modprobe needs a service that is in a module, we get a recursive
         * loop.  Limit the number of running kmod threads to max_threads/2 or
         * MAX_KMOD_CONCURRENT, whichever is the smaller.  A cleaner method
-@@ -188,11 +200,52 @@ int __request_module(bool wait, const char *fmt, ...)
+@@ -188,16 +200,61 @@ int __request_module(bool wait, const char *fmt, ...)
  
        trace_module_request(module_name, wait, _RET_IP_);
  
  
        trace_module_request(module_name, wait, _RET_IP_);
  
@@ -89865,7 +89285,16 @@ index 8637e04..8b1d0d8 100644
  EXPORT_SYMBOL(__request_module);
  #endif /* CONFIG_MODULES */
  
  EXPORT_SYMBOL(__request_module);
  #endif /* CONFIG_MODULES */
  
-@@ -218,6 +271,20 @@ static int ____call_usermodehelper(void *data)
+ static void call_usermodehelper_freeinfo(struct subprocess_info *info)
+ {
++#ifdef CONFIG_GRKERNSEC
++      kfree(info->path);
++      info->path = info->origpath;
++#endif
+       if (info->cleanup)
+               (*info->cleanup)(info);
+       kfree(info);
+@@ -240,6 +297,20 @@ static int ____call_usermodehelper(void *data)
         */
        set_user_nice(current, 0);
  
         */
        set_user_nice(current, 0);
  
@@ -89879,14 +89308,14 @@ index 8637e04..8b1d0d8 100644
 +           strcmp(sub_info->path, "/usr/share/apport/apport")) || strstr(sub_info->path, "..")) {
 +              printk(KERN_ALERT "grsec: denied exec of usermode helper binary %.950s located outside of /sbin and system library paths\n", sub_info->path);
 +              retval = -EPERM;
 +           strcmp(sub_info->path, "/usr/share/apport/apport")) || strstr(sub_info->path, "..")) {
 +              printk(KERN_ALERT "grsec: denied exec of usermode helper binary %.950s located outside of /sbin and system library paths\n", sub_info->path);
 +              retval = -EPERM;
-+              goto fail;
++              goto out;
 +      }
 +#endif
 +
        retval = -ENOMEM;
        new = prepare_kernel_cred(current);
        if (!new)
 +      }
 +#endif
 +
        retval = -ENOMEM;
        new = prepare_kernel_cred(current);
        if (!new)
-@@ -240,8 +307,8 @@ static int ____call_usermodehelper(void *data)
+@@ -262,8 +333,8 @@ static int ____call_usermodehelper(void *data)
        commit_creds(new);
  
        retval = do_execve(getname_kernel(sub_info->path),
        commit_creds(new);
  
        retval = do_execve(getname_kernel(sub_info->path),
@@ -89894,21 +89323,10 @@ index 8637e04..8b1d0d8 100644
 -                         (const char __user *const __user *)sub_info->envp);
 +                         (const char __user *const __force_user *)sub_info->argv,
 +                         (const char __user *const __force_user *)sub_info->envp);
 -                         (const char __user *const __user *)sub_info->envp);
 +                         (const char __user *const __force_user *)sub_info->argv,
 +                         (const char __user *const __force_user *)sub_info->envp);
-       if (!retval)
-               return 0;
-@@ -260,6 +327,10 @@ static int call_helper(void *data)
- static void call_usermodehelper_freeinfo(struct subprocess_info *info)
- {
-+#ifdef CONFIG_GRKERNSEC
-+      kfree(info->path);
-+      info->path = info->origpath;
-+#endif
-       if (info->cleanup)
-               (*info->cleanup)(info);
-       kfree(info);
-@@ -300,7 +371,7 @@ static int wait_for_helper(void *data)
+ out:
+       sub_info->retval = retval;
+       /* wait_for_helper() will call umh_complete if UHM_WAIT_PROC. */
+@@ -303,7 +374,7 @@ static int wait_for_helper(void *data)
                 *
                 * Thus the __user pointer cast is valid here.
                 */
                 *
                 * Thus the __user pointer cast is valid here.
                 */
@@ -89917,7 +89335,7 @@ index 8637e04..8b1d0d8 100644
  
                /*
                 * If ret is 0, either ____call_usermodehelper failed and the
  
                /*
                 * If ret is 0, either ____call_usermodehelper failed and the
-@@ -539,7 +610,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
+@@ -532,7 +603,12 @@ struct subprocess_info *call_usermodehelper_setup(char *path, char **argv,
                goto out;
  
        INIT_WORK(&sub_info->work, __call_usermodehelper);
                goto out;
  
        INIT_WORK(&sub_info->work, __call_usermodehelper);
@@ -89930,7 +89348,7 @@ index 8637e04..8b1d0d8 100644
        sub_info->argv = argv;
        sub_info->envp = envp;
  
        sub_info->argv = argv;
        sub_info->envp = envp;
  
-@@ -647,7 +723,7 @@ EXPORT_SYMBOL(call_usermodehelper);
+@@ -645,7 +721,7 @@ EXPORT_SYMBOL(call_usermodehelper);
  static int proc_cap_handler(struct ctl_table *table, int write,
                         void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  static int proc_cap_handler(struct ctl_table *table, int write,
                         void __user *buffer, size_t *lenp, loff_t *ppos)
  {
@@ -90126,10 +89544,10 @@ index 9887a90..0cd2b1d 100644
  
  #endif
 diff --git a/kernel/locking/mcs_spinlock.h b/kernel/locking/mcs_spinlock.h
  
  #endif
 diff --git a/kernel/locking/mcs_spinlock.h b/kernel/locking/mcs_spinlock.h
-index 23e89c5..8558eac 100644
+index 4d60986..5d351c1 100644
 --- a/kernel/locking/mcs_spinlock.h
 +++ b/kernel/locking/mcs_spinlock.h
 --- a/kernel/locking/mcs_spinlock.h
 +++ b/kernel/locking/mcs_spinlock.h
-@@ -81,7 +81,7 @@ void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node)
+@@ -78,7 +78,7 @@ void mcs_spin_lock(struct mcs_spinlock **lock, struct mcs_spinlock *node)
                 */
                return;
        }
                 */
                return;
        }
@@ -90187,10 +89605,10 @@ index 0799fd3..d06ae3b 100644
  extern void debug_mutex_init(struct mutex *lock, const char *name,
                             struct lock_class_key *key);
 diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
  extern void debug_mutex_init(struct mutex *lock, const char *name,
                             struct lock_class_key *key);
 diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
-index ae712b2..d0d4a41 100644
+index dadbf88..4500507 100644
 --- a/kernel/locking/mutex.c
 +++ b/kernel/locking/mutex.c
 --- a/kernel/locking/mutex.c
 +++ b/kernel/locking/mutex.c
-@@ -486,7 +486,7 @@ slowpath:
+@@ -518,7 +518,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
                goto skip_wait;
  
        debug_mutex_lock_common(lock, &waiter);
                goto skip_wait;
  
        debug_mutex_lock_common(lock, &waiter);
@@ -90199,7 +89617,7 @@ index ae712b2..d0d4a41 100644
  
        /* add waiting tasks to the end of the waitqueue (FIFO): */
        list_add_tail(&waiter.list, &lock->wait_list);
  
        /* add waiting tasks to the end of the waitqueue (FIFO): */
        list_add_tail(&waiter.list, &lock->wait_list);
-@@ -531,7 +531,7 @@ slowpath:
+@@ -563,7 +563,7 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass,
                schedule_preempt_disabled();
                spin_lock_mutex(&lock->wait_lock, flags);
        }
                schedule_preempt_disabled();
                spin_lock_mutex(&lock->wait_lock, flags);
        }
@@ -90208,7 +89626,7 @@ index ae712b2..d0d4a41 100644
        /* set it to 0 if there are no waiters left: */
        if (likely(list_empty(&lock->wait_list)))
                atomic_set(&lock->count, 0);
        /* set it to 0 if there are no waiters left: */
        if (likely(list_empty(&lock->wait_list)))
                atomic_set(&lock->count, 0);
-@@ -568,7 +568,7 @@ skip_wait:
+@@ -600,7 +600,7 @@ skip_wait:
        return 0;
  
  err:
        return 0;
  
  err:
@@ -90312,7 +89730,7 @@ index 1d96dd0..994ff19 100644
  
        default:
 diff --git a/kernel/module.c b/kernel/module.c
  
        default:
 diff --git a/kernel/module.c b/kernel/module.c
-index 1c47139..6242887 100644
+index 88cec1d..d097c28 100644
 --- a/kernel/module.c
 +++ b/kernel/module.c
 @@ -60,6 +60,7 @@
 --- a/kernel/module.c
 +++ b/kernel/module.c
 @@ -60,6 +60,7 @@
@@ -91229,7 +90647,7 @@ index 161402f..598814c 100644
        atomic_set(&pd->refcnt, 0);
        pd->pinst = pinst;
 diff --git a/kernel/panic.c b/kernel/panic.c
        atomic_set(&pd->refcnt, 0);
        pd->pinst = pinst;
 diff --git a/kernel/panic.c b/kernel/panic.c
-index d09dc5c..9abbdff 100644
+index cf80672..f6771b2 100644
 --- a/kernel/panic.c
 +++ b/kernel/panic.c
 @@ -53,7 +53,7 @@ EXPORT_SYMBOL(panic_blink);
 --- a/kernel/panic.c
 +++ b/kernel/panic.c
 @@ -53,7 +53,7 @@ EXPORT_SYMBOL(panic_blink);
@@ -91241,7 +90659,7 @@ index d09dc5c..9abbdff 100644
  {
        while (1)
                cpu_relax();
  {
        while (1)
                cpu_relax();
-@@ -421,7 +421,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
+@@ -422,7 +422,7 @@ static void warn_slowpath_common(const char *file, int line, void *caller,
        disable_trace_on_warning();
  
        pr_warn("------------[ cut here ]------------\n");
        disable_trace_on_warning();
  
        pr_warn("------------[ cut here ]------------\n");
@@ -91250,7 +90668,7 @@ index d09dc5c..9abbdff 100644
                raw_smp_processor_id(), current->pid, file, line, caller);
  
        if (args)
                raw_smp_processor_id(), current->pid, file, line, caller);
  
        if (args)
-@@ -475,7 +475,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
+@@ -476,7 +476,8 @@ EXPORT_SYMBOL(warn_slowpath_null);
   */
  __visible void __stack_chk_fail(void)
  {
   */
  __visible void __stack_chk_fail(void)
  {
@@ -91261,7 +90679,7 @@ index d09dc5c..9abbdff 100644
  }
  EXPORT_SYMBOL(__stack_chk_fail);
 diff --git a/kernel/pid.c b/kernel/pid.c
  }
  EXPORT_SYMBOL(__stack_chk_fail);
 diff --git a/kernel/pid.c b/kernel/pid.c
-index 9b9a266..c20ef80 100644
+index 82430c8..53d7793 100644
 --- a/kernel/pid.c
 +++ b/kernel/pid.c
 @@ -33,6 +33,7 @@
 --- a/kernel/pid.c
 +++ b/kernel/pid.c
 @@ -33,6 +33,7 @@
@@ -91281,7 +90699,7 @@ index 9b9a266..c20ef80 100644
  
  int pid_max_min = RESERVED_PIDS + 1;
  int pid_max_max = PID_MAX_LIMIT;
  
  int pid_max_min = RESERVED_PIDS + 1;
  int pid_max_max = PID_MAX_LIMIT;
-@@ -445,10 +446,18 @@ EXPORT_SYMBOL(pid_task);
+@@ -447,10 +448,18 @@ EXPORT_SYMBOL(pid_task);
   */
  struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns)
  {
   */
  struct task_struct *find_task_by_pid_ns(pid_t nr, struct pid_namespace *ns)
  {
@@ -91301,7 +90719,7 @@ index 9b9a266..c20ef80 100644
  }
  
  struct task_struct *find_task_by_vpid(pid_t vnr)
  }
  
  struct task_struct *find_task_by_vpid(pid_t vnr)
-@@ -456,6 +465,14 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
+@@ -458,6 +467,14 @@ struct task_struct *find_task_by_vpid(pid_t vnr)
        return find_task_by_pid_ns(vnr, task_active_pid_ns(current));
  }
  
        return find_task_by_pid_ns(vnr, task_active_pid_ns(current));
  }
  
@@ -91330,7 +90748,7 @@ index db95d8e..a0ca23f 100644
        if (write && !ns_capable(pid_ns->user_ns, CAP_SYS_ADMIN))
                return -EPERM;
 diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
        if (write && !ns_capable(pid_ns->user_ns, CAP_SYS_ADMIN))
                return -EPERM;
 diff --git a/kernel/power/Kconfig b/kernel/power/Kconfig
-index e4e4121..71faf14 100644
+index bbef57f..5f94462 100644
 --- a/kernel/power/Kconfig
 +++ b/kernel/power/Kconfig
 @@ -24,6 +24,8 @@ config HIBERNATE_CALLBACKS
 --- a/kernel/power/Kconfig
 +++ b/kernel/power/Kconfig
 @@ -24,6 +24,8 @@ config HIBERNATE_CALLBACKS
@@ -91343,7 +90761,7 @@ index e4e4121..71faf14 100644
        select LZO_COMPRESS
        select LZO_DECOMPRESS
 diff --git a/kernel/power/process.c b/kernel/power/process.c
        select LZO_COMPRESS
        select LZO_DECOMPRESS
 diff --git a/kernel/power/process.c b/kernel/power/process.c
-index 7a37cf3..3e4c1c8 100644
+index 5a6ec86..3a8c884 100644
 --- a/kernel/power/process.c
 +++ b/kernel/power/process.c
 @@ -35,6 +35,7 @@ static int try_to_freeze_tasks(bool user_only)
 --- a/kernel/power/process.c
 +++ b/kernel/power/process.c
 @@ -35,6 +35,7 @@ static int try_to_freeze_tasks(bool user_only)
@@ -91361,7 +90779,7 @@ index 7a37cf3..3e4c1c8 100644
 +              if (time_after(jiffies, end_time))
 +                      timedout = true;
                read_lock(&tasklist_lock);
 +              if (time_after(jiffies, end_time))
 +                      timedout = true;
                read_lock(&tasklist_lock);
-               do_each_thread(g, p) {
+               for_each_process_thread(g, p) {
                        if (p == current || !freeze_task(p))
                                continue;
  
                        if (p == current || !freeze_task(p))
                                continue;
  
@@ -91373,7 +90791,7 @@ index 7a37cf3..3e4c1c8 100644
 +                                      sched_show_task(p);
 +                              }
 +                      }
 +                                      sched_show_task(p);
 +                              }
 +                      }
-               } while_each_thread(g, p);
+               }
                read_unlock(&tasklist_lock);
  
 @@ -60,7 +68,7 @@ static int try_to_freeze_tasks(bool user_only)
                read_unlock(&tasklist_lock);
  
 @@ -60,7 +68,7 @@ static int try_to_freeze_tasks(bool user_only)
@@ -91386,10 +90804,10 @@ index 7a37cf3..3e4c1c8 100644
  
                if (pm_wakeup_pending()) {
 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
  
                if (pm_wakeup_pending()) {
 diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
-index 1ce7706..3b07c49 100644
+index ced2b84..ffc4791 100644
 --- a/kernel/printk/printk.c
 +++ b/kernel/printk/printk.c
 --- a/kernel/printk/printk.c
 +++ b/kernel/printk/printk.c
-@@ -490,6 +490,11 @@ static int check_syslog_permissions(int type, bool from_file)
+@@ -489,6 +489,11 @@ static int check_syslog_permissions(int type, bool from_file)
        if (from_file && type != SYSLOG_ACTION_OPEN)
                return 0;
  
        if (from_file && type != SYSLOG_ACTION_OPEN)
                return 0;
  
@@ -91558,10 +90976,10 @@ index 54e7522..5b82dd6 100644
        }
  
 diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
        }
  
 diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
-index 948a769..5ca842b 100644
+index 240fa90..5fa56bd 100644
 --- a/kernel/rcu/rcutorture.c
 +++ b/kernel/rcu/rcutorture.c
 --- a/kernel/rcu/rcutorture.c
 +++ b/kernel/rcu/rcutorture.c
-@@ -124,12 +124,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1],
+@@ -134,12 +134,12 @@ static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1],
                      rcu_torture_count) = { 0 };
  static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1],
                      rcu_torture_batch) = { 0 };
                      rcu_torture_count) = { 0 };
  static DEFINE_PER_CPU(long [RCU_TORTURE_PIPE_LEN + 1],
                      rcu_torture_batch) = { 0 };
@@ -91580,7 +90998,16 @@ index 948a769..5ca842b 100644
  static long n_rcu_torture_barrier_error;
  static long n_rcu_torture_boost_ktrerror;
  static long n_rcu_torture_boost_rterror;
  static long n_rcu_torture_barrier_error;
  static long n_rcu_torture_boost_ktrerror;
  static long n_rcu_torture_boost_rterror;
-@@ -200,11 +200,11 @@ rcu_torture_alloc(void)
+@@ -148,7 +148,7 @@ static long n_rcu_torture_boosts;
+ static long n_rcu_torture_timers;
+ static long n_barrier_attempts;
+ static long n_barrier_successes;
+-static atomic_long_t n_cbfloods;
++static atomic_long_unchecked_t n_cbfloods;
+ static struct list_head rcu_torture_removed;
+ static int rcu_torture_writer_state;
+@@ -211,11 +211,11 @@ rcu_torture_alloc(void)
  
        spin_lock_bh(&rcu_torture_lock);
        if (list_empty(&rcu_torture_freelist)) {
  
        spin_lock_bh(&rcu_torture_lock);
        if (list_empty(&rcu_torture_freelist)) {
@@ -91594,7 +91021,7 @@ index 948a769..5ca842b 100644
        p = rcu_torture_freelist.next;
        list_del_init(p);
        spin_unlock_bh(&rcu_torture_lock);
        p = rcu_torture_freelist.next;
        list_del_init(p);
        spin_unlock_bh(&rcu_torture_lock);
-@@ -217,7 +217,7 @@ rcu_torture_alloc(void)
+@@ -228,7 +228,7 @@ rcu_torture_alloc(void)
  static void
  rcu_torture_free(struct rcu_torture *p)
  {
  static void
  rcu_torture_free(struct rcu_torture *p)
  {
@@ -91603,7 +91030,7 @@ index 948a769..5ca842b 100644
        spin_lock_bh(&rcu_torture_lock);
        list_add_tail(&p->rtort_free, &rcu_torture_freelist);
        spin_unlock_bh(&rcu_torture_lock);
        spin_lock_bh(&rcu_torture_lock);
        list_add_tail(&p->rtort_free, &rcu_torture_freelist);
        spin_unlock_bh(&rcu_torture_lock);
-@@ -301,7 +301,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp)
+@@ -312,7 +312,7 @@ rcu_torture_pipe_update_one(struct rcu_torture *rp)
        i = rp->rtort_pipe_count;
        if (i > RCU_TORTURE_PIPE_LEN)
                i = RCU_TORTURE_PIPE_LEN;
        i = rp->rtort_pipe_count;
        if (i > RCU_TORTURE_PIPE_LEN)
                i = RCU_TORTURE_PIPE_LEN;
@@ -91612,7 +91039,16 @@ index 948a769..5ca842b 100644
        if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) {
                rp->rtort_mbtest = 0;
                return true;
        if (++rp->rtort_pipe_count >= RCU_TORTURE_PIPE_LEN) {
                rp->rtort_mbtest = 0;
                return true;
-@@ -808,7 +808,7 @@ rcu_torture_writer(void *arg)
+@@ -799,7 +799,7 @@ rcu_torture_cbflood(void *arg)
+       VERBOSE_TOROUT_STRING("rcu_torture_cbflood task started");
+       do {
+               schedule_timeout_interruptible(cbflood_inter_holdoff);
+-              atomic_long_inc(&n_cbfloods);
++              atomic_long_inc_unchecked(&n_cbfloods);
+               WARN_ON(signal_pending(current));
+               for (i = 0; i < cbflood_n_burst; i++) {
+                       for (j = 0; j < cbflood_n_per_burst; j++) {
+@@ -917,7 +917,7 @@ rcu_torture_writer(void *arg)
                        i = old_rp->rtort_pipe_count;
                        if (i > RCU_TORTURE_PIPE_LEN)
                                i = RCU_TORTURE_PIPE_LEN;
                        i = old_rp->rtort_pipe_count;
                        if (i > RCU_TORTURE_PIPE_LEN)
                                i = RCU_TORTURE_PIPE_LEN;
@@ -91621,7 +91057,7 @@ index 948a769..5ca842b 100644
                        old_rp->rtort_pipe_count++;
                        switch (synctype[torture_random(&rand) % nsynctypes]) {
                        case RTWS_DEF_FREE:
                        old_rp->rtort_pipe_count++;
                        switch (synctype[torture_random(&rand) % nsynctypes]) {
                        case RTWS_DEF_FREE:
-@@ -926,7 +926,7 @@ static void rcu_torture_timer(unsigned long unused)
+@@ -1035,7 +1035,7 @@ static void rcu_torture_timer(unsigned long unused)
                return;
        }
        if (p->rtort_mbtest == 0)
                return;
        }
        if (p->rtort_mbtest == 0)
@@ -91630,7 +91066,7 @@ index 948a769..5ca842b 100644
        spin_lock(&rand_lock);
        cur_ops->read_delay(&rand);
        n_rcu_torture_timers++;
        spin_lock(&rand_lock);
        cur_ops->read_delay(&rand);
        n_rcu_torture_timers++;
-@@ -996,7 +996,7 @@ rcu_torture_reader(void *arg)
+@@ -1105,7 +1105,7 @@ rcu_torture_reader(void *arg)
                        continue;
                }
                if (p->rtort_mbtest == 0)
                        continue;
                }
                if (p->rtort_mbtest == 0)
@@ -91639,31 +91075,30 @@ index 948a769..5ca842b 100644
                cur_ops->read_delay(&rand);
                preempt_disable();
                pipe_count = p->rtort_pipe_count;
                cur_ops->read_delay(&rand);
                preempt_disable();
                pipe_count = p->rtort_pipe_count;
-@@ -1054,15 +1054,15 @@ rcu_torture_printk(char *page)
-       }
-       page += sprintf(page, "%s%s ", torture_type, TORTURE_FLAG);
-       page += sprintf(page,
--                     "rtc: %p ver: %lu tfle: %d rta: %d rtaf: %d rtf: %d ",
-+                     "rtc: %pP ver: %lu tfle: %d rta: %d rtaf: %d rtf: %d ",
-                      rcu_torture_current,
-                      rcu_torture_current_version,
-                      list_empty(&rcu_torture_freelist),
--                     atomic_read(&n_rcu_torture_alloc),
--                     atomic_read(&n_rcu_torture_alloc_fail),
--                     atomic_read(&n_rcu_torture_free));
-+                     atomic_read_unchecked(&n_rcu_torture_alloc),
-+                     atomic_read_unchecked(&n_rcu_torture_alloc_fail),
-+                     atomic_read_unchecked(&n_rcu_torture_free));
-       page += sprintf(page, "rtmbe: %d rtbke: %ld rtbre: %ld ",
--                     atomic_read(&n_rcu_torture_mberror),
-+                     atomic_read_unchecked(&n_rcu_torture_mberror),
-                      n_rcu_torture_boost_ktrerror,
-                      n_rcu_torture_boost_rterror);
-       page += sprintf(page, "rtbf: %ld rtb: %ld nt: %ld ",
-@@ -1075,14 +1075,14 @@ rcu_torture_printk(char *page)
-                      n_barrier_attempts,
-                      n_rcu_torture_barrier_error);
-       page += sprintf(page, "\n%s%s ", torture_type, TORTURE_FLAG);
+@@ -1172,11 +1172,11 @@ rcu_torture_stats_print(void)
+               rcu_torture_current,
+               rcu_torture_current_version,
+               list_empty(&rcu_torture_freelist),
+-              atomic_read(&n_rcu_torture_alloc),
+-              atomic_read(&n_rcu_torture_alloc_fail),
+-              atomic_read(&n_rcu_torture_free));
++              atomic_read_unchecked(&n_rcu_torture_alloc),
++              atomic_read_unchecked(&n_rcu_torture_alloc_fail),
++              atomic_read_unchecked(&n_rcu_torture_free));
+       pr_cont("rtmbe: %d rtbke: %ld rtbre: %ld ",
+-              atomic_read(&n_rcu_torture_mberror),
++              atomic_read_unchecked(&n_rcu_torture_mberror),
+               n_rcu_torture_boost_ktrerror,
+               n_rcu_torture_boost_rterror);
+       pr_cont("rtbf: %ld rtb: %ld nt: %ld ",
+@@ -1188,17 +1188,17 @@ rcu_torture_stats_print(void)
+               n_barrier_successes,
+               n_barrier_attempts,
+               n_rcu_torture_barrier_error);
+-      pr_cont("cbflood: %ld\n", atomic_long_read(&n_cbfloods));
++      pr_cont("cbflood: %ld\n", atomic_long_read_unchecked(&n_cbfloods));
+       pr_alert("%s%s ", torture_type, TORTURE_FLAG);
 -      if (atomic_read(&n_rcu_torture_mberror) != 0 ||
 +      if (atomic_read_unchecked(&n_rcu_torture_mberror) != 0 ||
            n_rcu_torture_barrier_error != 0 ||
 -      if (atomic_read(&n_rcu_torture_mberror) != 0 ||
 +      if (atomic_read_unchecked(&n_rcu_torture_mberror) != 0 ||
            n_rcu_torture_barrier_error != 0 ||
@@ -91671,22 +91106,22 @@ index 948a769..5ca842b 100644
            n_rcu_torture_boost_rterror != 0 ||
            n_rcu_torture_boost_failure != 0 ||
            i > 1) {
            n_rcu_torture_boost_rterror != 0 ||
            n_rcu_torture_boost_failure != 0 ||
            i > 1) {
-               page += sprintf(page, "!!! ");
+               pr_cont("%s", "!!! ");
 -              atomic_inc(&n_rcu_torture_error);
 +              atomic_inc_unchecked(&n_rcu_torture_error);
                WARN_ON_ONCE(1);
        }
 -              atomic_inc(&n_rcu_torture_error);
 +              atomic_inc_unchecked(&n_rcu_torture_error);
                WARN_ON_ONCE(1);
        }
-       page += sprintf(page, "Reader Pipe: ");
-@@ -1096,7 +1096,7 @@ rcu_torture_printk(char *page)
-       page += sprintf(page, "Free-Block Circulation: ");
+       pr_cont("Reader Pipe: ");
+@@ -1215,7 +1215,7 @@ rcu_torture_stats_print(void)
+       pr_alert("%s%s ", torture_type, TORTURE_FLAG);
+       pr_cont("Free-Block Circulation: ");
        for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
        for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
-               page += sprintf(page, " %d",
--                             atomic_read(&rcu_torture_wcount[i]));
-+                             atomic_read_unchecked(&rcu_torture_wcount[i]));
+-              pr_cont(" %d", atomic_read(&rcu_torture_wcount[i]));
++              pr_cont(" %d", atomic_read_unchecked(&rcu_torture_wcount[i]));
        }
        }
-       page += sprintf(page, "\n");
-       if (cur_ops->stats)
-@@ -1461,7 +1461,7 @@ rcu_torture_cleanup(void)
+       pr_cont("\n");
+@@ -1559,7 +1559,7 @@ rcu_torture_cleanup(void)
  
        rcu_torture_stats_print();  /* -After- the stats thread is stopped! */
  
  
        rcu_torture_stats_print();  /* -After- the stats thread is stopped! */
  
@@ -91695,7 +91130,7 @@ index 948a769..5ca842b 100644
                rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE");
        else if (torture_onoff_failures())
                rcu_torture_print_module_parms(cur_ops,
                rcu_torture_print_module_parms(cur_ops, "End of test: FAILURE");
        else if (torture_onoff_failures())
                rcu_torture_print_module_parms(cur_ops,
-@@ -1584,18 +1584,18 @@ rcu_torture_init(void)
+@@ -1684,18 +1684,18 @@ rcu_torture_init(void)
  
        rcu_torture_current = NULL;
        rcu_torture_current_version = 0;
  
        rcu_torture_current = NULL;
        rcu_torture_current_version = 0;
@@ -91721,7 +91156,7 @@ index 948a769..5ca842b 100644
                for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
                        per_cpu(rcu_torture_count, cpu)[i] = 0;
 diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
                for (i = 0; i < RCU_TORTURE_PIPE_LEN + 1; i++) {
                        per_cpu(rcu_torture_count, cpu)[i] = 0;
 diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
-index d9efcc1..ea543e9 100644
+index c0623fc..329c091 100644
 --- a/kernel/rcu/tiny.c
 +++ b/kernel/rcu/tiny.c
 @@ -42,7 +42,7 @@
 --- a/kernel/rcu/tiny.c
 +++ b/kernel/rcu/tiny.c
 @@ -42,7 +42,7 @@
@@ -91733,7 +91168,7 @@ index d9efcc1..ea543e9 100644
  static void __call_rcu(struct rcu_head *head,
                       void (*func)(struct rcu_head *rcu),
                       struct rcu_ctrlblk *rcp);
  static void __call_rcu(struct rcu_head *head,
                       void (*func)(struct rcu_head *rcu),
                       struct rcu_ctrlblk *rcp);
-@@ -308,7 +308,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
+@@ -310,7 +310,7 @@ static void __rcu_process_callbacks(struct rcu_ctrlblk *rcp)
                                      false));
  }
  
                                      false));
  }
  
@@ -91768,10 +91203,10 @@ index 858c565..7efd915 100644
  
  static void check_cpu_stalls(void)
 diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
  
  static void check_cpu_stalls(void)
 diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
-index 89a404a..f42a019 100644
+index 9815447..2cdf92a 100644
 --- a/kernel/rcu/tree.c
 +++ b/kernel/rcu/tree.c
 --- a/kernel/rcu/tree.c
 +++ b/kernel/rcu/tree.c
-@@ -263,7 +263,7 @@ static void rcu_momentary_dyntick_idle(void)
+@@ -274,7 +274,7 @@ static void rcu_momentary_dyntick_idle(void)
                 */
                rdtp = this_cpu_ptr(&rcu_dynticks);
                smp_mb__before_atomic(); /* Earlier stuff before QS. */
                 */
                rdtp = this_cpu_ptr(&rcu_dynticks);
                smp_mb__before_atomic(); /* Earlier stuff before QS. */
@@ -91780,7 +91215,7 @@ index 89a404a..f42a019 100644
                smp_mb__after_atomic(); /* Later stuff after QS. */
                break;
        }
                smp_mb__after_atomic(); /* Later stuff after QS. */
                break;
        }
-@@ -523,9 +523,9 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval,
+@@ -534,9 +534,9 @@ static void rcu_eqs_enter_common(struct rcu_dynticks *rdtp, long long oldval,
        rcu_prepare_for_idle(smp_processor_id());
        /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
        smp_mb__before_atomic();  /* See above. */
        rcu_prepare_for_idle(smp_processor_id());
        /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
        smp_mb__before_atomic();  /* See above. */
@@ -91789,12 +91224,12 @@ index 89a404a..f42a019 100644
        smp_mb__after_atomic();  /* Force ordering with next sojourn. */
 -      WARN_ON_ONCE(atomic_read(&rdtp->dynticks) & 0x1);
 +      WARN_ON_ONCE(atomic_read_unchecked(&rdtp->dynticks) & 0x1);
        smp_mb__after_atomic();  /* Force ordering with next sojourn. */
 -      WARN_ON_ONCE(atomic_read(&rdtp->dynticks) & 0x1);
 +      WARN_ON_ONCE(atomic_read_unchecked(&rdtp->dynticks) & 0x1);
+       rcu_dynticks_task_enter();
  
        /*
  
        /*
-        * It is illegal to enter an extended quiescent state while
-@@ -643,10 +643,10 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval,
-                              int user)
+@@ -656,10 +656,10 @@ static void rcu_eqs_exit_common(struct rcu_dynticks *rdtp, long long oldval,
  {
  {
+       rcu_dynticks_task_exit();
        smp_mb__before_atomic();  /* Force ordering w/previous sojourn. */
 -      atomic_inc(&rdtp->dynticks);
 +      atomic_inc_unchecked(&rdtp->dynticks);
        smp_mb__before_atomic();  /* Force ordering w/previous sojourn. */
 -      atomic_inc(&rdtp->dynticks);
 +      atomic_inc_unchecked(&rdtp->dynticks);
@@ -91805,7 +91240,7 @@ index 89a404a..f42a019 100644
        rcu_cleanup_after_idle(smp_processor_id());
        trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting);
        if (!user && !is_idle_task(current)) {
        rcu_cleanup_after_idle(smp_processor_id());
        trace_rcu_dyntick(TPS("End"), oldval, rdtp->dynticks_nesting);
        if (!user && !is_idle_task(current)) {
-@@ -767,14 +767,14 @@ void rcu_nmi_enter(void)
+@@ -780,14 +780,14 @@ void rcu_nmi_enter(void)
        struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
  
        if (rdtp->dynticks_nmi_nesting == 0 &&
        struct rcu_dynticks *rdtp = this_cpu_ptr(&rcu_dynticks);
  
        if (rdtp->dynticks_nmi_nesting == 0 &&
@@ -91823,7 +91258,7 @@ index 89a404a..f42a019 100644
  }
  
  /**
  }
  
  /**
-@@ -793,9 +793,9 @@ void rcu_nmi_exit(void)
+@@ -806,9 +806,9 @@ void rcu_nmi_exit(void)
                return;
        /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
        smp_mb__before_atomic();  /* See above. */
                return;
        /* CPUs seeing atomic_inc() must see prior RCU read-side crit sects */
        smp_mb__before_atomic();  /* See above. */
@@ -91835,7 +91270,7 @@ index 89a404a..f42a019 100644
  }
  
  /**
  }
  
  /**
-@@ -808,7 +808,7 @@ void rcu_nmi_exit(void)
+@@ -821,7 +821,7 @@ void rcu_nmi_exit(void)
   */
  bool notrace __rcu_is_watching(void)
  {
   */
  bool notrace __rcu_is_watching(void)
  {
@@ -91844,7 +91279,7 @@ index 89a404a..f42a019 100644
  }
  
  /**
  }
  
  /**
-@@ -891,7 +891,7 @@ static int rcu_is_cpu_rrupt_from_idle(void)
+@@ -904,7 +904,7 @@ static int rcu_is_cpu_rrupt_from_idle(void)
  static int dyntick_save_progress_counter(struct rcu_data *rdp,
                                         bool *isidle, unsigned long *maxj)
  {
  static int dyntick_save_progress_counter(struct rcu_data *rdp,
                                         bool *isidle, unsigned long *maxj)
  {
@@ -91853,7 +91288,7 @@ index 89a404a..f42a019 100644
        rcu_sysidle_check_cpu(rdp, isidle, maxj);
        if ((rdp->dynticks_snap & 0x1) == 0) {
                trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti"));
        rcu_sysidle_check_cpu(rdp, isidle, maxj);
        if ((rdp->dynticks_snap & 0x1) == 0) {
                trace_rcu_fqs(rdp->rsp->name, rdp->gpnum, rdp->cpu, TPS("dti"));
-@@ -920,7 +920,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
+@@ -933,7 +933,7 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
        int *rcrmp;
        unsigned int snap;
  
        int *rcrmp;
        unsigned int snap;
  
@@ -91862,7 +91297,7 @@ index 89a404a..f42a019 100644
        snap = (unsigned int)rdp->dynticks_snap;
  
        /*
        snap = (unsigned int)rdp->dynticks_snap;
  
        /*
-@@ -983,10 +983,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
+@@ -996,10 +996,10 @@ static int rcu_implicit_dynticks_qs(struct rcu_data *rdp,
                         rdp->rsp->gp_start + jiffies_till_sched_qs) ||
            ULONG_CMP_GE(jiffies, rdp->rsp->jiffies_resched)) {
                if (!(ACCESS_ONCE(*rcrmp) & rdp->rsp->flavor_mask)) {
                         rdp->rsp->gp_start + jiffies_till_sched_qs) ||
            ULONG_CMP_GE(jiffies, rdp->rsp->jiffies_resched)) {
                if (!(ACCESS_ONCE(*rcrmp) & rdp->rsp->flavor_mask)) {
@@ -91875,7 +91310,7 @@ index 89a404a..f42a019 100644
                                ACCESS_ONCE(*rcrmp) + rdp->rsp->flavor_mask;
                        resched_cpu(rdp->cpu);  /* Force CPU into scheduler. */
                        rdp->rsp->jiffies_resched += 5; /* Enable beating. */
                                ACCESS_ONCE(*rcrmp) + rdp->rsp->flavor_mask;
                        resched_cpu(rdp->cpu);  /* Force CPU into scheduler. */
                        rdp->rsp->jiffies_resched += 5; /* Enable beating. */
-@@ -1008,7 +1008,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp)
+@@ -1021,7 +1021,7 @@ static void record_gp_stall_check_time(struct rcu_state *rsp)
        rsp->gp_start = j;
        smp_wmb(); /* Record start time before stall time. */
        j1 = rcu_jiffies_till_stall_check();
        rsp->gp_start = j;
        smp_wmb(); /* Record start time before stall time. */
        j1 = rcu_jiffies_till_stall_check();
@@ -91884,7 +91319,7 @@ index 89a404a..f42a019 100644
        rsp->jiffies_resched = j + j1 / 2;
  }
  
        rsp->jiffies_resched = j + j1 / 2;
  }
  
-@@ -1049,7 +1049,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
+@@ -1062,7 +1062,7 @@ static void print_other_cpu_stall(struct rcu_state *rsp)
                raw_spin_unlock_irqrestore(&rnp->lock, flags);
                return;
        }
                raw_spin_unlock_irqrestore(&rnp->lock, flags);
                return;
        }
@@ -91893,7 +91328,7 @@ index 89a404a..f42a019 100644
        raw_spin_unlock_irqrestore(&rnp->lock, flags);
  
        /*
        raw_spin_unlock_irqrestore(&rnp->lock, flags);
  
        /*
-@@ -1126,7 +1126,7 @@ static void print_cpu_stall(struct rcu_state *rsp)
+@@ -1139,7 +1139,7 @@ static void print_cpu_stall(struct rcu_state *rsp)
  
        raw_spin_lock_irqsave(&rnp->lock, flags);
        if (ULONG_CMP_GE(jiffies, ACCESS_ONCE(rsp->jiffies_stall)))
  
        raw_spin_lock_irqsave(&rnp->lock, flags);
        if (ULONG_CMP_GE(jiffies, ACCESS_ONCE(rsp->jiffies_stall)))
@@ -91902,7 +91337,7 @@ index 89a404a..f42a019 100644
                                     3 * rcu_jiffies_till_stall_check() + 3;
        raw_spin_unlock_irqrestore(&rnp->lock, flags);
  
                                     3 * rcu_jiffies_till_stall_check() + 3;
        raw_spin_unlock_irqrestore(&rnp->lock, flags);
  
-@@ -1210,7 +1210,7 @@ void rcu_cpu_stall_reset(void)
+@@ -1223,7 +1223,7 @@ void rcu_cpu_stall_reset(void)
        struct rcu_state *rsp;
  
        for_each_rcu_flavor(rsp)
        struct rcu_state *rsp;
  
        for_each_rcu_flavor(rsp)
@@ -91911,7 +91346,7 @@ index 89a404a..f42a019 100644
  }
  
  /*
  }
  
  /*
-@@ -1596,7 +1596,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
+@@ -1609,7 +1609,7 @@ static int rcu_gp_init(struct rcu_state *rsp)
                raw_spin_unlock_irq(&rnp->lock);
                return 0;
        }
                raw_spin_unlock_irq(&rnp->lock);
                return 0;
        }
@@ -91920,7 +91355,7 @@ index 89a404a..f42a019 100644
  
        if (WARN_ON_ONCE(rcu_gp_in_progress(rsp))) {
                /*
  
        if (WARN_ON_ONCE(rcu_gp_in_progress(rsp))) {
                /*
-@@ -1637,9 +1637,9 @@ static int rcu_gp_init(struct rcu_state *rsp)
+@@ -1650,9 +1650,9 @@ static int rcu_gp_init(struct rcu_state *rsp)
                rdp = this_cpu_ptr(rsp->rda);
                rcu_preempt_check_blocked_tasks(rnp);
                rnp->qsmask = rnp->qsmaskinit;
                rdp = this_cpu_ptr(rsp->rda);
                rcu_preempt_check_blocked_tasks(rnp);
                rnp->qsmask = rnp->qsmaskinit;
@@ -91932,16 +91367,16 @@ index 89a404a..f42a019 100644
                if (rnp == rdp->mynode)
                        (void)__note_gp_changes(rsp, rnp, rdp);
                rcu_preempt_boost_start_gp(rnp);
                if (rnp == rdp->mynode)
                        (void)__note_gp_changes(rsp, rnp, rdp);
                rcu_preempt_boost_start_gp(rnp);
-@@ -1684,7 +1684,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in)
+@@ -1697,7 +1697,7 @@ static int rcu_gp_fqs(struct rcu_state *rsp, int fqs_state_in)
        if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) {
                raw_spin_lock_irq(&rnp->lock);
                smp_mb__after_unlock_lock();
        if (ACCESS_ONCE(rsp->gp_flags) & RCU_GP_FLAG_FQS) {
                raw_spin_lock_irq(&rnp->lock);
                smp_mb__after_unlock_lock();
--              ACCESS_ONCE(rsp->gp_flags) &= ~RCU_GP_FLAG_FQS;
-+              ACCESS_ONCE_RW(rsp->gp_flags) &= ~RCU_GP_FLAG_FQS;
+-              ACCESS_ONCE(rsp->gp_flags) =
++              ACCESS_ONCE_RW(rsp->gp_flags) =
+                       ACCESS_ONCE(rsp->gp_flags) & ~RCU_GP_FLAG_FQS;
                raw_spin_unlock_irq(&rnp->lock);
        }
                raw_spin_unlock_irq(&rnp->lock);
        }
-       return fqs_state;
-@@ -1729,7 +1729,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
+@@ -1743,7 +1743,7 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
        rcu_for_each_node_breadth_first(rsp, rnp) {
                raw_spin_lock_irq(&rnp->lock);
                smp_mb__after_unlock_lock();
        rcu_for_each_node_breadth_first(rsp, rnp) {
                raw_spin_lock_irq(&rnp->lock);
                smp_mb__after_unlock_lock();
@@ -91950,7 +91385,7 @@ index 89a404a..f42a019 100644
                rdp = this_cpu_ptr(rsp->rda);
                if (rnp == rdp->mynode)
                        needgp = __note_gp_changes(rsp, rnp, rdp) || needgp;
                rdp = this_cpu_ptr(rsp->rda);
                if (rnp == rdp->mynode)
                        needgp = __note_gp_changes(rsp, rnp, rdp) || needgp;
-@@ -1744,14 +1744,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
+@@ -1758,14 +1758,14 @@ static void rcu_gp_cleanup(struct rcu_state *rsp)
        rcu_nocb_gp_set(rnp, nocb);
  
        /* Declare grace period done. */
        rcu_nocb_gp_set(rnp, nocb);
  
        /* Declare grace period done. */
@@ -91967,7 +91402,7 @@ index 89a404a..f42a019 100644
                trace_rcu_grace_period(rsp->name,
                                       ACCESS_ONCE(rsp->gpnum),
                                       TPS("newreq"));
                trace_rcu_grace_period(rsp->name,
                                       ACCESS_ONCE(rsp->gpnum),
                                       TPS("newreq"));
-@@ -1876,7 +1876,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp,
+@@ -1890,7 +1890,7 @@ rcu_start_gp_advanced(struct rcu_state *rsp, struct rcu_node *rnp,
                 */
                return false;
        }
                 */
                return false;
        }
@@ -91976,7 +91411,7 @@ index 89a404a..f42a019 100644
        trace_rcu_grace_period(rsp->name, ACCESS_ONCE(rsp->gpnum),
                               TPS("newreq"));
  
        trace_rcu_grace_period(rsp->name, ACCESS_ONCE(rsp->gpnum),
                               TPS("newreq"));
  
-@@ -2097,7 +2097,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
+@@ -2111,7 +2111,7 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
                rsp->qlen += rdp->qlen;
                rdp->n_cbs_orphaned += rdp->qlen;
                rdp->qlen_lazy = 0;
                rsp->qlen += rdp->qlen;
                rdp->n_cbs_orphaned += rdp->qlen;
                rdp->qlen_lazy = 0;
@@ -91985,7 +91420,7 @@ index 89a404a..f42a019 100644
        }
  
        /*
        }
  
        /*
-@@ -2344,7 +2344,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
+@@ -2356,7 +2356,7 @@ static void rcu_do_batch(struct rcu_state *rsp, struct rcu_data *rdp)
        }
        smp_mb(); /* List handling before counting for rcu_barrier(). */
        rdp->qlen_lazy -= count_lazy;
        }
        smp_mb(); /* List handling before counting for rcu_barrier(). */
        rdp->qlen_lazy -= count_lazy;
@@ -91994,16 +91429,16 @@ index 89a404a..f42a019 100644
        rdp->n_cbs_invoked += count;
  
        /* Reinstate batch limit if we have worked down the excess. */
        rdp->n_cbs_invoked += count;
  
        /* Reinstate batch limit if we have worked down the excess. */
-@@ -2505,7 +2505,7 @@ static void force_quiescent_state(struct rcu_state *rsp)
+@@ -2519,7 +2519,7 @@ static void force_quiescent_state(struct rcu_state *rsp)
                raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
                return;  /* Someone beat us to it. */
        }
                raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
                return;  /* Someone beat us to it. */
        }
--      ACCESS_ONCE(rsp->gp_flags) |= RCU_GP_FLAG_FQS;
-+      ACCESS_ONCE_RW(rsp->gp_flags) |= RCU_GP_FLAG_FQS;
+-      ACCESS_ONCE(rsp->gp_flags) =
++      ACCESS_ONCE_RW(rsp->gp_flags) =
+               ACCESS_ONCE(rsp->gp_flags) | RCU_GP_FLAG_FQS;
        raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
        rcu_gp_kthread_wake(rsp);
        raw_spin_unlock_irqrestore(&rnp_old->lock, flags);
        rcu_gp_kthread_wake(rsp);
- }
-@@ -2550,7 +2550,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
+@@ -2565,7 +2565,7 @@ __rcu_process_callbacks(struct rcu_state *rsp)
  /*
   * Do RCU core processing for the current CPU.
   */
  /*
   * Do RCU core processing for the current CPU.
   */
@@ -92012,7 +91447,7 @@ index 89a404a..f42a019 100644
  {
        struct rcu_state *rsp;
  
  {
        struct rcu_state *rsp;
  
-@@ -2662,7 +2662,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
+@@ -2677,7 +2677,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
        WARN_ON_ONCE((unsigned long)head & 0x1); /* Misaligned rcu_head! */
        if (debug_rcu_head_queue(head)) {
                /* Probable double call_rcu(), so leak the callback. */
        WARN_ON_ONCE((unsigned long)head & 0x1); /* Misaligned rcu_head! */
        if (debug_rcu_head_queue(head)) {
                /* Probable double call_rcu(), so leak the callback. */
@@ -92021,7 +91456,7 @@ index 89a404a..f42a019 100644
                WARN_ONCE(1, "__call_rcu(): Leaked duplicate callback\n");
                return;
        }
                WARN_ONCE(1, "__call_rcu(): Leaked duplicate callback\n");
                return;
        }
-@@ -2690,7 +2690,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
+@@ -2705,7 +2705,7 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
                local_irq_restore(flags);
                return;
        }
                local_irq_restore(flags);
                return;
        }
@@ -92030,7 +91465,7 @@ index 89a404a..f42a019 100644
        if (lazy)
                rdp->qlen_lazy++;
        else
        if (lazy)
                rdp->qlen_lazy++;
        else
-@@ -2965,11 +2965,11 @@ void synchronize_sched_expedited(void)
+@@ -2975,11 +2975,11 @@ void synchronize_sched_expedited(void)
         * counter wrap on a 32-bit system.  Quite a few more CPUs would of
         * course be required on a 64-bit system.
         */
         * counter wrap on a 32-bit system.  Quite a few more CPUs would of
         * course be required on a 64-bit system.
         */
@@ -92044,16 +91479,22 @@ index 89a404a..f42a019 100644
                return;
        }
  
                return;
        }
  
-@@ -2977,7 +2977,7 @@ void synchronize_sched_expedited(void)
+@@ -2987,12 +2987,12 @@ void synchronize_sched_expedited(void)
         * Take a ticket.  Note that atomic_inc_return() implies a
         * full memory barrier.
         */
 -      snap = atomic_long_inc_return(&rsp->expedited_start);
 +      snap = atomic_long_inc_return_unchecked(&rsp->expedited_start);
        firstsnap = snap;
         * Take a ticket.  Note that atomic_inc_return() implies a
         * full memory barrier.
         */
 -      snap = atomic_long_inc_return(&rsp->expedited_start);
 +      snap = atomic_long_inc_return_unchecked(&rsp->expedited_start);
        firstsnap = snap;
-       get_online_cpus();
+       if (!try_get_online_cpus()) {
+               /* CPU hotplug operation in flight, fall back to normal GP. */
+               wait_rcu_gp(call_rcu_sched);
+-              atomic_long_inc(&rsp->expedited_normal);
++              atomic_long_inc_unchecked(&rsp->expedited_normal);
+               return;
+       }
        WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id()));
        WARN_ON_ONCE(cpu_is_offline(raw_smp_processor_id()));
-@@ -2990,14 +2990,14 @@ void synchronize_sched_expedited(void)
+@@ -3005,14 +3005,14 @@ void synchronize_sched_expedited(void)
                             synchronize_sched_expedited_cpu_stop,
                             NULL) == -EAGAIN) {
                put_online_cpus();
                             synchronize_sched_expedited_cpu_stop,
                             NULL) == -EAGAIN) {
                put_online_cpus();
@@ -92070,7 +91511,7 @@ index 89a404a..f42a019 100644
                        return;
                }
  
                        return;
                }
  
-@@ -3006,7 +3006,7 @@ void synchronize_sched_expedited(void)
+@@ -3021,7 +3021,7 @@ void synchronize_sched_expedited(void)
                        udelay(trycount * num_online_cpus());
                } else {
                        wait_rcu_gp(call_rcu_sched);
                        udelay(trycount * num_online_cpus());
                } else {
                        wait_rcu_gp(call_rcu_sched);
@@ -92079,7 +91520,7 @@ index 89a404a..f42a019 100644
                        return;
                }
  
                        return;
                }
  
-@@ -3015,7 +3015,7 @@ void synchronize_sched_expedited(void)
+@@ -3030,7 +3030,7 @@ void synchronize_sched_expedited(void)
                if (ULONG_CMP_GE((ulong)s, (ulong)firstsnap)) {
                        /* ensure test happens before caller kfree */
                        smp_mb__before_atomic(); /* ^^^ */
                if (ULONG_CMP_GE((ulong)s, (ulong)firstsnap)) {
                        /* ensure test happens before caller kfree */
                        smp_mb__before_atomic(); /* ^^^ */
@@ -92088,10 +91529,14 @@ index 89a404a..f42a019 100644
                        return;
                }
  
                        return;
                }
  
-@@ -3027,10 +3027,10 @@ void synchronize_sched_expedited(void)
-                * period works for us.
-                */
-               get_online_cpus();
+@@ -3044,13 +3044,13 @@ void synchronize_sched_expedited(void)
+               if (!try_get_online_cpus()) {
+                       /* CPU hotplug operation in flight, use normal GP. */
+                       wait_rcu_gp(call_rcu_sched);
+-                      atomic_long_inc(&rsp->expedited_normal);
++                      atomic_long_inc_unchecked(&rsp->expedited_normal);
+                       return;
+               }
 -              snap = atomic_long_read(&rsp->expedited_start);
 +              snap = atomic_long_read_unchecked(&rsp->expedited_start);
                smp_mb(); /* ensure read is before try_stop_cpus(). */
 -              snap = atomic_long_read(&rsp->expedited_start);
 +              snap = atomic_long_read_unchecked(&rsp->expedited_start);
                smp_mb(); /* ensure read is before try_stop_cpus(). */
@@ -92101,7 +91546,7 @@ index 89a404a..f42a019 100644
  
        /*
         * Everyone up to our most recent fetch is covered by our grace
  
        /*
         * Everyone up to our most recent fetch is covered by our grace
-@@ -3039,16 +3039,16 @@ void synchronize_sched_expedited(void)
+@@ -3059,16 +3059,16 @@ void synchronize_sched_expedited(void)
         * than we did already did their update.
         */
        do {
         * than we did already did their update.
         */
        do {
@@ -92121,7 +91566,7 @@ index 89a404a..f42a019 100644
  
        put_online_cpus();
  }
  
        put_online_cpus();
  }
-@@ -3254,7 +3254,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
+@@ -3274,7 +3274,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
         * ACCESS_ONCE() to prevent the compiler from speculating
         * the increment to precede the early-exit check.
         */
         * ACCESS_ONCE() to prevent the compiler from speculating
         * the increment to precede the early-exit check.
         */
@@ -92130,7 +91575,7 @@ index 89a404a..f42a019 100644
        WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 1);
        _rcu_barrier_trace(rsp, "Inc1", -1, rsp->n_barrier_done);
        smp_mb(); /* Order ->n_barrier_done increment with below mechanism. */
        WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 1);
        _rcu_barrier_trace(rsp, "Inc1", -1, rsp->n_barrier_done);
        smp_mb(); /* Order ->n_barrier_done increment with below mechanism. */
-@@ -3304,7 +3304,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
+@@ -3329,7 +3329,7 @@ static void _rcu_barrier(struct rcu_state *rsp)
  
        /* Increment ->n_barrier_done to prevent duplicate work. */
        smp_mb(); /* Keep increment after above mechanism. */
  
        /* Increment ->n_barrier_done to prevent duplicate work. */
        smp_mb(); /* Keep increment after above mechanism. */
@@ -92139,7 +91584,7 @@ index 89a404a..f42a019 100644
        WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 0);
        _rcu_barrier_trace(rsp, "Inc2", -1, rsp->n_barrier_done);
        smp_mb(); /* Keep increment before caller's subsequent code. */
        WARN_ON_ONCE((rsp->n_barrier_done & 0x1) != 0);
        _rcu_barrier_trace(rsp, "Inc2", -1, rsp->n_barrier_done);
        smp_mb(); /* Keep increment before caller's subsequent code. */
-@@ -3349,10 +3349,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
+@@ -3374,10 +3374,10 @@ rcu_boot_init_percpu_data(int cpu, struct rcu_state *rsp)
        rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo);
        init_callback_list(rdp);
        rdp->qlen_lazy = 0;
        rdp->grpmask = 1UL << (cpu - rdp->mynode->grplo);
        init_callback_list(rdp);
        rdp->qlen_lazy = 0;
@@ -92152,7 +91597,7 @@ index 89a404a..f42a019 100644
        rdp->cpu = cpu;
        rdp->rsp = rsp;
        rcu_boot_init_nocb_percpu_data(rdp);
        rdp->cpu = cpu;
        rdp->rsp = rsp;
        rcu_boot_init_nocb_percpu_data(rdp);
-@@ -3385,8 +3385,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)
+@@ -3410,8 +3410,8 @@ rcu_init_percpu_data(int cpu, struct rcu_state *rsp)
        init_callback_list(rdp);  /* Re-enable callbacks on this CPU. */
        rdp->dynticks->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE;
        rcu_sysidle_init_percpu_data(rdp->dynticks);
        init_callback_list(rdp);  /* Re-enable callbacks on this CPU. */
        rdp->dynticks->dynticks_nesting = DYNTICK_TASK_EXIT_IDLE;
        rcu_sysidle_init_percpu_data(rdp->dynticks);
@@ -92164,7 +91609,7 @@ index 89a404a..f42a019 100644
  
        /* Add CPU to rcu_node bitmasks. */
 diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
  
        /* Add CPU to rcu_node bitmasks. */
 diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
-index 6a86eb7..022b506 100644
+index bbdc45d..c882ccb 100644
 --- a/kernel/rcu/tree.h
 +++ b/kernel/rcu/tree.h
 @@ -87,11 +87,11 @@ struct rcu_dynticks {
 --- a/kernel/rcu/tree.h
 +++ b/kernel/rcu/tree.h
 @@ -87,11 +87,11 @@ struct rcu_dynticks {
@@ -92181,7 +91626,7 @@ index 6a86eb7..022b506 100644
                                    /*  "Idle" excludes userspace execution. */
        unsigned long dynticks_idle_jiffies;
                                    /* End of last non-NMI non-idle period. */
                                    /*  "Idle" excludes userspace execution. */
        unsigned long dynticks_idle_jiffies;
                                    /* End of last non-NMI non-idle period. */
-@@ -461,17 +461,17 @@ struct rcu_state {
+@@ -466,17 +466,17 @@ struct rcu_state {
                                                /*  _rcu_barrier(). */
        /* End of fields guarded by barrier_mutex. */
  
                                                /*  _rcu_barrier(). */
        /* End of fields guarded by barrier_mutex. */
  
@@ -92211,10 +91656,10 @@ index 6a86eb7..022b506 100644
        unsigned long jiffies_force_qs;         /* Time at which to invoke */
                                                /*  force_quiescent_state(). */
 diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
        unsigned long jiffies_force_qs;         /* Time at which to invoke */
                                                /*  force_quiescent_state(). */
 diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
-index a7997e2..9787c9e 100644
+index c1d7f27..a64bf49 100644
 --- a/kernel/rcu/tree_plugin.h
 +++ b/kernel/rcu/tree_plugin.h
 --- a/kernel/rcu/tree_plugin.h
 +++ b/kernel/rcu/tree_plugin.h
-@@ -735,7 +735,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp)
+@@ -709,7 +709,7 @@ static int rcu_preempted_readers_exp(struct rcu_node *rnp)
  static int sync_rcu_preempt_exp_done(struct rcu_node *rnp)
  {
        return !rcu_preempted_readers_exp(rnp) &&
  static int sync_rcu_preempt_exp_done(struct rcu_node *rnp)
  {
        return !rcu_preempted_readers_exp(rnp) &&
@@ -92223,16 +91668,16 @@ index a7997e2..9787c9e 100644
  }
  
  /*
  }
  
  /*
-@@ -897,7 +897,7 @@ void synchronize_rcu_expedited(void)
+@@ -870,7 +870,7 @@ void synchronize_rcu_expedited(void)
  
        /* Clean up and exit. */
        smp_mb(); /* ensure expedited GP seen before counter increment. */
  
        /* Clean up and exit. */
        smp_mb(); /* ensure expedited GP seen before counter increment. */
--      ACCESS_ONCE(sync_rcu_preempt_exp_count)++;
-+      ACCESS_ONCE_RW(sync_rcu_preempt_exp_count)++;
+-      ACCESS_ONCE(sync_rcu_preempt_exp_count) =
++      ACCESS_ONCE_RW(sync_rcu_preempt_exp_count) =
+                                       sync_rcu_preempt_exp_count + 1;
  unlock_mb_ret:
        mutex_unlock(&sync_rcu_preempt_exp_mutex);
  unlock_mb_ret:
        mutex_unlock(&sync_rcu_preempt_exp_mutex);
- mb_ret:
-@@ -1452,7 +1452,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
+@@ -1426,7 +1426,7 @@ static void rcu_boost_kthread_setaffinity(struct rcu_node *rnp, int outgoingcpu)
        free_cpumask_var(cm);
  }
  
        free_cpumask_var(cm);
  }
  
@@ -92241,7 +91686,7 @@ index a7997e2..9787c9e 100644
        .store                  = &rcu_cpu_kthread_task,
        .thread_should_run      = rcu_cpu_kthread_should_run,
        .thread_fn              = rcu_cpu_kthread,
        .store                  = &rcu_cpu_kthread_task,
        .thread_should_run      = rcu_cpu_kthread_should_run,
        .thread_fn              = rcu_cpu_kthread,
-@@ -1932,7 +1932,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
+@@ -1900,7 +1900,7 @@ static void print_cpu_stall_info(struct rcu_state *rsp, int cpu)
        print_cpu_stall_fast_no_hz(fast_no_hz, cpu);
        pr_err("\t%d: (%lu %s) idle=%03x/%llx/%d softirq=%u/%u %s\n",
               cpu, ticks_value, ticks_title,
        print_cpu_stall_fast_no_hz(fast_no_hz, cpu);
        pr_err("\t%d: (%lu %s) idle=%03x/%llx/%d softirq=%u/%u %s\n",
               cpu, ticks_value, ticks_title,
@@ -92250,16 +91695,16 @@ index a7997e2..9787c9e 100644
               rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting,
               rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu),
               fast_no_hz);
               rdtp->dynticks_nesting, rdtp->dynticks_nmi_nesting,
               rdp->softirq_snap, kstat_softirqs_cpu(RCU_SOFTIRQ, cpu),
               fast_no_hz);
-@@ -2076,7 +2076,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force)
+@@ -2044,7 +2044,7 @@ static void wake_nocb_leader(struct rcu_data *rdp, bool force)
                return;
        if (ACCESS_ONCE(rdp_leader->nocb_leader_sleep) || force) {
                return;
        if (ACCESS_ONCE(rdp_leader->nocb_leader_sleep) || force) {
-               /* Prior xchg orders against prior callback enqueue. */
+               /* Prior smp_mb__after_atomic() orders against prior enqueue. */
 -              ACCESS_ONCE(rdp_leader->nocb_leader_sleep) = false;
 +              ACCESS_ONCE_RW(rdp_leader->nocb_leader_sleep) = false;
                wake_up(&rdp_leader->nocb_wq);
        }
  }
 -              ACCESS_ONCE(rdp_leader->nocb_leader_sleep) = false;
 +              ACCESS_ONCE_RW(rdp_leader->nocb_leader_sleep) = false;
                wake_up(&rdp_leader->nocb_wq);
        }
  }
-@@ -2101,7 +2101,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp,
+@@ -2096,7 +2096,7 @@ static void __call_rcu_nocb_enqueue(struct rcu_data *rdp,
  
        /* Enqueue the callback on the nocb list and update counts. */
        old_rhpp = xchg(&rdp->nocb_tail, rhtp);
  
        /* Enqueue the callback on the nocb list and update counts. */
        old_rhpp = xchg(&rdp->nocb_tail, rhtp);
@@ -92267,8 +91712,8 @@ index a7997e2..9787c9e 100644
 +      ACCESS_ONCE_RW(*old_rhpp) = rhp;
        atomic_long_add(rhcount, &rdp->nocb_q_count);
        atomic_long_add(rhcount_lazy, &rdp->nocb_q_count_lazy);
 +      ACCESS_ONCE_RW(*old_rhpp) = rhp;
        atomic_long_add(rhcount, &rdp->nocb_q_count);
        atomic_long_add(rhcount_lazy, &rdp->nocb_q_count_lazy);
-@@ -2272,7 +2272,7 @@ wait_again:
+       smp_mb__after_atomic(); /* Store *old_rhpp before _wake test. */
+@@ -2286,7 +2286,7 @@ wait_again:
                        continue;  /* No CBs here, try next follower. */
  
                /* Move callbacks to wait-for-GP list, which is empty. */
                        continue;  /* No CBs here, try next follower. */
  
                /* Move callbacks to wait-for-GP list, which is empty. */
@@ -92277,7 +91722,7 @@ index a7997e2..9787c9e 100644
                rdp->nocb_gp_tail = xchg(&rdp->nocb_tail, &rdp->nocb_head);
                rdp->nocb_gp_count = atomic_long_xchg(&rdp->nocb_q_count, 0);
                rdp->nocb_gp_count_lazy =
                rdp->nocb_gp_tail = xchg(&rdp->nocb_tail, &rdp->nocb_head);
                rdp->nocb_gp_count = atomic_long_xchg(&rdp->nocb_q_count, 0);
                rdp->nocb_gp_count_lazy =
-@@ -2398,7 +2398,7 @@ static int rcu_nocb_kthread(void *arg)
+@@ -2413,7 +2413,7 @@ static int rcu_nocb_kthread(void *arg)
                list = ACCESS_ONCE(rdp->nocb_follower_head);
                BUG_ON(!list);
                trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeNonEmpty");
                list = ACCESS_ONCE(rdp->nocb_follower_head);
                BUG_ON(!list);
                trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, "WokeNonEmpty");
@@ -92286,36 +91731,36 @@ index a7997e2..9787c9e 100644
                tail = xchg(&rdp->nocb_follower_tail, &rdp->nocb_follower_head);
                c = atomic_long_xchg(&rdp->nocb_follower_count, 0);
                cl = atomic_long_xchg(&rdp->nocb_follower_count_lazy, 0);
                tail = xchg(&rdp->nocb_follower_tail, &rdp->nocb_follower_head);
                c = atomic_long_xchg(&rdp->nocb_follower_count, 0);
                cl = atomic_long_xchg(&rdp->nocb_follower_count_lazy, 0);
-@@ -2428,8 +2428,8 @@ static int rcu_nocb_kthread(void *arg)
+@@ -2443,8 +2443,8 @@ static int rcu_nocb_kthread(void *arg)
                        list = next;
                }
                trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1);
                        list = next;
                }
                trace_rcu_batch_end(rdp->rsp->name, c, !!list, 0, 0, 1);
--              ACCESS_ONCE(rdp->nocb_p_count) -= c;
--              ACCESS_ONCE(rdp->nocb_p_count_lazy) -= cl;
-+              ACCESS_ONCE_RW(rdp->nocb_p_count) -= c;
-+              ACCESS_ONCE_RW(rdp->nocb_p_count_lazy) -= cl;
+-              ACCESS_ONCE(rdp->nocb_p_count) = rdp->nocb_p_count - c;
+-              ACCESS_ONCE(rdp->nocb_p_count_lazy) =
++              ACCESS_ONCE_RW(rdp->nocb_p_count) = rdp->nocb_p_count - c;
++              ACCESS_ONCE_RW(rdp->nocb_p_count_lazy) =
+                                               rdp->nocb_p_count_lazy - cl;
                rdp->n_nocbs_invoked += c;
        }
                rdp->n_nocbs_invoked += c;
        }
-       return 0;
-@@ -2446,7 +2446,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp)
- {
+@@ -2465,7 +2465,7 @@ static void do_nocb_deferred_wakeup(struct rcu_data *rdp)
        if (!rcu_nocb_need_deferred_wakeup(rdp))
                return;
        if (!rcu_nocb_need_deferred_wakeup(rdp))
                return;
--      ACCESS_ONCE(rdp->nocb_defer_wakeup) = false;
-+      ACCESS_ONCE_RW(rdp->nocb_defer_wakeup) = false;
-       wake_nocb_leader(rdp, false);
-       trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("DeferredWakeEmpty"));
+       ndw = ACCESS_ONCE(rdp->nocb_defer_wakeup);
+-      ACCESS_ONCE(rdp->nocb_defer_wakeup) = RCU_NOGP_WAKE_NOT;
++      ACCESS_ONCE_RW(rdp->nocb_defer_wakeup) = RCU_NOGP_WAKE_NOT;
+       wake_nocb_leader(rdp, ndw == RCU_NOGP_WAKE_FORCE);
+       trace_rcu_nocb_wake(rdp->rsp->name, rdp->cpu, TPS("DeferredWake"));
  }
  }
-@@ -2510,7 +2510,7 @@ static void __init rcu_spawn_nocb_kthreads(struct rcu_state *rsp)
-               t = kthread_run(rcu_nocb_kthread, rdp,
-                               "rcuo%c/%d", rsp->abbr, cpu);
-               BUG_ON(IS_ERR(t));
--              ACCESS_ONCE(rdp->nocb_kthread) = t;
-+              ACCESS_ONCE_RW(rdp->nocb_kthread) = t;
-       }
+@@ -2584,7 +2584,7 @@ static void rcu_spawn_one_nocb_kthread(struct rcu_state *rsp, int cpu)
+       t = kthread_run(rcu_nocb_kthread, rdp_spawn,
+                       "rcuo%c/%d", rsp->abbr, cpu);
+       BUG_ON(IS_ERR(t));
+-      ACCESS_ONCE(rdp_spawn->nocb_kthread) = t;
++      ACCESS_ONCE_RW(rdp_spawn->nocb_kthread) = t;
  }
  
  }
  
-@@ -2641,11 +2641,11 @@ static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq)
+ /*
+@@ -2788,11 +2788,11 @@ static void rcu_sysidle_enter(struct rcu_dynticks *rdtp, int irq)
  
        /* Record start of fully idle period. */
        j = jiffies;
  
        /* Record start of fully idle period. */
        j = jiffies;
@@ -92330,7 +91775,7 @@ index a7997e2..9787c9e 100644
  }
  
  /*
  }
  
  /*
-@@ -2710,9 +2710,9 @@ static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq)
+@@ -2861,9 +2861,9 @@ static void rcu_sysidle_exit(struct rcu_dynticks *rdtp, int irq)
  
        /* Record end of idle period. */
        smp_mb__before_atomic();
  
        /* Record end of idle period. */
        smp_mb__before_atomic();
@@ -92342,7 +91787,7 @@ index a7997e2..9787c9e 100644
  
        /*
         * If we are the timekeeping CPU, we are permitted to be non-idle
  
        /*
         * If we are the timekeeping CPU, we are permitted to be non-idle
-@@ -2753,7 +2753,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
+@@ -2908,7 +2908,7 @@ static void rcu_sysidle_check_cpu(struct rcu_data *rdp, bool *isidle,
                WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu);
  
        /* Pick up current idle and NMI-nesting counter and check. */
                WARN_ON_ONCE(smp_processor_id() != tick_do_timer_cpu);
  
        /* Pick up current idle and NMI-nesting counter and check. */
@@ -92351,7 +91796,7 @@ index a7997e2..9787c9e 100644
        if (cur & 0x1) {
                *isidle = false; /* We are not idle! */
                return;
        if (cur & 0x1) {
                *isidle = false; /* We are not idle! */
                return;
-@@ -2802,7 +2802,7 @@ static void rcu_sysidle(unsigned long j)
+@@ -2957,7 +2957,7 @@ static void rcu_sysidle(unsigned long j)
        case RCU_SYSIDLE_NOT:
  
                /* First time all are idle, so note a short idle period. */
        case RCU_SYSIDLE_NOT:
  
                /* First time all are idle, so note a short idle period. */
@@ -92360,7 +91805,7 @@ index a7997e2..9787c9e 100644
                break;
  
        case RCU_SYSIDLE_SHORT:
                break;
  
        case RCU_SYSIDLE_SHORT:
-@@ -2840,7 +2840,7 @@ static void rcu_sysidle_cancel(void)
+@@ -2995,7 +2995,7 @@ static void rcu_sysidle_cancel(void)
  {
        smp_mb();
        if (full_sysidle_state > RCU_SYSIDLE_SHORT)
  {
        smp_mb();
        if (full_sysidle_state > RCU_SYSIDLE_SHORT)
@@ -92369,7 +91814,7 @@ index a7997e2..9787c9e 100644
  }
  
  /*
  }
  
  /*
-@@ -2888,7 +2888,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp)
+@@ -3047,7 +3047,7 @@ static void rcu_sysidle_cb(struct rcu_head *rhp)
        smp_mb();  /* grace period precedes setting inuse. */
  
        rshp = container_of(rhp, struct rcu_sysidle_head, rh);
        smp_mb();  /* grace period precedes setting inuse. */
  
        rshp = container_of(rhp, struct rcu_sysidle_head, rh);
@@ -92378,6 +91823,23 @@ index a7997e2..9787c9e 100644
  }
  
  /*
  }
  
  /*
+@@ -3200,7 +3200,7 @@ static void rcu_bind_gp_kthread(void)
+ static void rcu_dynticks_task_enter(void)
+ {
+ #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL)
+-      ACCESS_ONCE(current->rcu_tasks_idle_cpu) = smp_processor_id();
++      ACCESS_ONCE_RW(current->rcu_tasks_idle_cpu) = smp_processor_id();
+ #endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */
+ }
+@@ -3208,6 +3208,6 @@ static void rcu_dynticks_task_enter(void)
+ static void rcu_dynticks_task_exit(void)
+ {
+ #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL)
+-      ACCESS_ONCE(current->rcu_tasks_idle_cpu) = -1;
++      ACCESS_ONCE_RW(current->rcu_tasks_idle_cpu) = -1;
+ #endif /* #if defined(CONFIG_TASKS_RCU) && defined(CONFIG_NO_HZ_FULL) */
+ }
 diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
 index 5cdc62e..cc52e88 100644
 --- a/kernel/rcu/tree_trace.c
 diff --git a/kernel/rcu/tree_trace.c b/kernel/rcu/tree_trace.c
 index 5cdc62e..cc52e88 100644
 --- a/kernel/rcu/tree_trace.c
@@ -92420,10 +91882,10 @@ index 5cdc62e..cc52e88 100644
  }
  
 diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
  }
  
 diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
-index 4056d79..c11741a 100644
+index 3ef8ba5..8c5ebfb6 100644
 --- a/kernel/rcu/update.c
 +++ b/kernel/rcu/update.c
 --- a/kernel/rcu/update.c
 +++ b/kernel/rcu/update.c
-@@ -308,10 +308,10 @@ int rcu_jiffies_till_stall_check(void)
+@@ -342,10 +342,10 @@ int rcu_jiffies_till_stall_check(void)
         * for CONFIG_RCU_CPU_STALL_TIMEOUT.
         */
        if (till_stall_check < 3) {
         * for CONFIG_RCU_CPU_STALL_TIMEOUT.
         */
        if (till_stall_check < 3) {
@@ -92436,8 +91898,35 @@ index 4056d79..c11741a 100644
                till_stall_check = 300;
        }
        return till_stall_check * HZ + RCU_STALL_DELAY_DELTA;
                till_stall_check = 300;
        }
        return till_stall_check * HZ + RCU_STALL_DELAY_DELTA;
+@@ -501,7 +501,7 @@ static void check_holdout_task(struct task_struct *t,
+           !ACCESS_ONCE(t->on_rq) ||
+           (IS_ENABLED(CONFIG_NO_HZ_FULL) &&
+            !is_idle_task(t) && t->rcu_tasks_idle_cpu >= 0)) {
+-              ACCESS_ONCE(t->rcu_tasks_holdout) = false;
++              ACCESS_ONCE_RW(t->rcu_tasks_holdout) = false;
+               list_del_init(&t->rcu_tasks_holdout_list);
+               put_task_struct(t);
+               return;
+@@ -588,7 +588,7 @@ static int __noreturn rcu_tasks_kthread(void *arg)
+                           !is_idle_task(t)) {
+                               get_task_struct(t);
+                               t->rcu_tasks_nvcsw = ACCESS_ONCE(t->nvcsw);
+-                              ACCESS_ONCE(t->rcu_tasks_holdout) = true;
++                              ACCESS_ONCE_RW(t->rcu_tasks_holdout) = true;
+                               list_add(&t->rcu_tasks_holdout_list,
+                                        &rcu_tasks_holdouts);
+                       }
+@@ -685,7 +685,7 @@ static void rcu_spawn_tasks_kthread(void)
+       t = kthread_run(rcu_tasks_kthread, NULL, "rcu_tasks_kthread");
+       BUG_ON(IS_ERR(t));
+       smp_mb(); /* Ensure others see full kthread. */
+-      ACCESS_ONCE(rcu_tasks_kthread_ptr) = t;
++      ACCESS_ONCE_RW(rcu_tasks_kthread_ptr) = t;
+       mutex_unlock(&rcu_tasks_kthread_mutex);
+ }
 diff --git a/kernel/resource.c b/kernel/resource.c
 diff --git a/kernel/resource.c b/kernel/resource.c
-index 60c5a38..ed77193 100644
+index 0bcebff..e7cd5b2 100644
 --- a/kernel/resource.c
 +++ b/kernel/resource.c
 @@ -161,8 +161,18 @@ static const struct file_operations proc_iomem_operations = {
 --- a/kernel/resource.c
 +++ b/kernel/resource.c
 @@ -161,8 +161,18 @@ static const struct file_operations proc_iomem_operations = {
@@ -92460,7 +91949,7 @@ index 60c5a38..ed77193 100644
  }
  __initcall(ioresources_init);
 diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c
  }
  __initcall(ioresources_init);
 diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c
-index e73efba..c9bfbd4 100644
+index 8a2e230..6020954 100644
 --- a/kernel/sched/auto_group.c
 +++ b/kernel/sched/auto_group.c
 @@ -11,7 +11,7 @@
 --- a/kernel/sched/auto_group.c
 +++ b/kernel/sched/auto_group.c
 @@ -11,7 +11,7 @@
@@ -92513,10 +92002,10 @@ index a63f4dc..349bbb0 100644
                                     unsigned long timeout)
  {
 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
                                     unsigned long timeout)
  {
 diff --git a/kernel/sched/core.c b/kernel/sched/core.c
-index 6d7cb91..420f2d2 100644
+index 89e7283..072bc26 100644
 --- a/kernel/sched/core.c
 +++ b/kernel/sched/core.c
 --- a/kernel/sched/core.c
 +++ b/kernel/sched/core.c
-@@ -1857,7 +1857,7 @@ void set_numabalancing_state(bool enabled)
+@@ -1885,7 +1885,7 @@ void set_numabalancing_state(bool enabled)
  int sysctl_numa_balancing(struct ctl_table *table, int write,
                         void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  int sysctl_numa_balancing(struct ctl_table *table, int write,
                         void __user *buffer, size_t *lenp, loff_t *ppos)
  {
@@ -92525,7 +92014,7 @@ index 6d7cb91..420f2d2 100644
        int err;
        int state = numabalancing_enabled;
  
        int err;
        int state = numabalancing_enabled;
  
-@@ -2324,8 +2324,10 @@ context_switch(struct rq *rq, struct task_struct *prev,
+@@ -2348,8 +2348,10 @@ context_switch(struct rq *rq, struct task_struct *prev,
                next->active_mm = oldmm;
                atomic_inc(&oldmm->mm_count);
                enter_lazy_tlb(oldmm, next);
                next->active_mm = oldmm;
                atomic_inc(&oldmm->mm_count);
                enter_lazy_tlb(oldmm, next);
@@ -92537,7 +92026,7 @@ index 6d7cb91..420f2d2 100644
  
        if (!prev->mm) {
                prev->active_mm = NULL;
  
        if (!prev->mm) {
                prev->active_mm = NULL;
-@@ -3107,6 +3109,8 @@ int can_nice(const struct task_struct *p, const int nice)
+@@ -3160,6 +3162,8 @@ int can_nice(const struct task_struct *p, const int nice)
        /* convert nice value [19,-20] to rlimit style value [1,40] */
        int nice_rlim = nice_to_rlimit(nice);
  
        /* convert nice value [19,-20] to rlimit style value [1,40] */
        int nice_rlim = nice_to_rlimit(nice);
  
@@ -92546,7 +92035,7 @@ index 6d7cb91..420f2d2 100644
        return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
                capable(CAP_SYS_NICE));
  }
        return (nice_rlim <= task_rlimit(p, RLIMIT_NICE) ||
                capable(CAP_SYS_NICE));
  }
-@@ -3133,7 +3137,8 @@ SYSCALL_DEFINE1(nice, int, increment)
+@@ -3186,7 +3190,8 @@ SYSCALL_DEFINE1(nice, int, increment)
        nice = task_nice(current) + increment;
  
        nice = clamp_val(nice, MIN_NICE, MAX_NICE);
        nice = task_nice(current) + increment;
  
        nice = clamp_val(nice, MIN_NICE, MAX_NICE);
@@ -92556,7 +92045,7 @@ index 6d7cb91..420f2d2 100644
                return -EPERM;
  
        retval = security_task_setnice(current, nice);
                return -EPERM;
  
        retval = security_task_setnice(current, nice);
-@@ -3412,6 +3417,7 @@ recheck:
+@@ -3465,6 +3470,7 @@ recheck:
                        if (policy != p->policy && !rlim_rtprio)
                                return -EPERM;
  
                        if (policy != p->policy && !rlim_rtprio)
                                return -EPERM;
  
@@ -92564,7 +92053,7 @@ index 6d7cb91..420f2d2 100644
                        /* can't increase priority */
                        if (attr->sched_priority > p->rt_priority &&
                            attr->sched_priority > rlim_rtprio)
                        /* can't increase priority */
                        if (attr->sched_priority > p->rt_priority &&
                            attr->sched_priority > rlim_rtprio)
-@@ -4802,6 +4808,7 @@ void idle_task_exit(void)
+@@ -4885,6 +4891,7 @@ void idle_task_exit(void)
  
        if (mm != &init_mm) {
                switch_mm(mm, &init_mm, current);
  
        if (mm != &init_mm) {
                switch_mm(mm, &init_mm, current);
@@ -92572,7 +92061,7 @@ index 6d7cb91..420f2d2 100644
                finish_arch_post_lock_switch();
        }
        mmdrop(mm);
                finish_arch_post_lock_switch();
        }
        mmdrop(mm);
-@@ -4897,7 +4904,7 @@ static void migrate_tasks(unsigned int dead_cpu)
+@@ -4980,7 +4987,7 @@ static void migrate_tasks(unsigned int dead_cpu)
  
  #if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
  
  
  #if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
  
@@ -92581,7 +92070,7 @@ index 6d7cb91..420f2d2 100644
        {
                .procname       = "sched_domain",
                .mode           = 0555,
        {
                .procname       = "sched_domain",
                .mode           = 0555,
-@@ -4914,17 +4921,17 @@ static struct ctl_table sd_ctl_root[] = {
+@@ -4997,17 +5004,17 @@ static struct ctl_table sd_ctl_root[] = {
        {}
  };
  
        {}
  };
  
@@ -92603,7 +92092,7 @@ index 6d7cb91..420f2d2 100644
  
        /*
         * In the intermediate directories, both the child directory and
  
        /*
         * In the intermediate directories, both the child directory and
-@@ -4932,22 +4939,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
+@@ -5015,22 +5022,25 @@ static void sd_free_ctl_entry(struct ctl_table **tablep)
         * will always be set. In the lowest directory the names are
         * static strings and all have proc handlers.
         */
         * will always be set. In the lowest directory the names are
         * static strings and all have proc handlers.
         */
@@ -92635,7 +92124,7 @@ index 6d7cb91..420f2d2 100644
                const char *procname, void *data, int maxlen,
                umode_t mode, proc_handler *proc_handler,
                bool load_idx)
                const char *procname, void *data, int maxlen,
                umode_t mode, proc_handler *proc_handler,
                bool load_idx)
-@@ -4967,7 +4977,7 @@ set_table_entry(struct ctl_table *entry,
+@@ -5050,7 +5060,7 @@ set_table_entry(struct ctl_table *entry,
  static struct ctl_table *
  sd_alloc_ctl_domain_table(struct sched_domain *sd)
  {
  static struct ctl_table *
  sd_alloc_ctl_domain_table(struct sched_domain *sd)
  {
@@ -92644,7 +92133,7 @@ index 6d7cb91..420f2d2 100644
  
        if (table == NULL)
                return NULL;
  
        if (table == NULL)
                return NULL;
-@@ -5005,9 +5015,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
+@@ -5088,9 +5098,9 @@ sd_alloc_ctl_domain_table(struct sched_domain *sd)
        return table;
  }
  
        return table;
  }
  
@@ -92656,7 +92145,7 @@ index 6d7cb91..420f2d2 100644
        struct sched_domain *sd;
        int domain_num = 0, i;
        char buf[32];
        struct sched_domain *sd;
        int domain_num = 0, i;
        char buf[32];
-@@ -5034,11 +5044,13 @@ static struct ctl_table_header *sd_sysctl_header;
+@@ -5117,11 +5127,13 @@ static struct ctl_table_header *sd_sysctl_header;
  static void register_sched_domain_sysctl(void)
  {
        int i, cpu_num = num_possible_cpus();
  static void register_sched_domain_sysctl(void)
  {
        int i, cpu_num = num_possible_cpus();
@@ -92671,7 +92160,7 @@ index 6d7cb91..420f2d2 100644
  
        if (entry == NULL)
                return;
  
        if (entry == NULL)
                return;
-@@ -5061,8 +5073,12 @@ static void unregister_sched_domain_sysctl(void)
+@@ -5144,8 +5156,12 @@ static void unregister_sched_domain_sysctl(void)
        if (sd_sysctl_header)
                unregister_sysctl_table(sd_sysctl_header);
        sd_sysctl_header = NULL;
        if (sd_sysctl_header)
                unregister_sysctl_table(sd_sysctl_header);
        sd_sysctl_header = NULL;
@@ -92687,10 +92176,10 @@ index 6d7cb91..420f2d2 100644
  #else
  static void register_sched_domain_sysctl(void)
 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
  #else
  static void register_sched_domain_sysctl(void)
 diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
-index bfa3c86..e58767c 100644
+index ef2b104..69961f6 100644
 --- a/kernel/sched/fair.c
 +++ b/kernel/sched/fair.c
 --- a/kernel/sched/fair.c
 +++ b/kernel/sched/fair.c
-@@ -1873,7 +1873,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags)
+@@ -1906,7 +1906,7 @@ void task_numa_fault(int last_cpupid, int mem_node, int pages, int flags)
  
  static void reset_ptenuma_scan(struct task_struct *p)
  {
  
  static void reset_ptenuma_scan(struct task_struct *p)
  {
@@ -92699,7 +92188,7 @@ index bfa3c86..e58767c 100644
        p->mm->numa_scan_offset = 0;
  }
  
        p->mm->numa_scan_offset = 0;
  }
  
-@@ -7339,7 +7339,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { }
+@@ -7465,7 +7465,7 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) { }
   * run_rebalance_domains is triggered when needed from the scheduler tick.
   * Also triggered for nohz idle balancing (with nohz_balancing_kick set).
   */
   * run_rebalance_domains is triggered when needed from the scheduler tick.
   * Also triggered for nohz idle balancing (with nohz_balancing_kick set).
   */
@@ -92709,10 +92198,10 @@ index bfa3c86..e58767c 100644
        struct rq *this_rq = this_rq();
        enum cpu_idle_type idle = this_rq->idle_balance ?
 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
        struct rq *this_rq = this_rq();
        enum cpu_idle_type idle = this_rq->idle_balance ?
 diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
-index 579712f..a338a9d 100644
+index 2df8ef0..aae070f 100644
 --- a/kernel/sched/sched.h
 +++ b/kernel/sched/sched.h
 --- a/kernel/sched/sched.h
 +++ b/kernel/sched/sched.h
-@@ -1146,7 +1146,7 @@ struct sched_class {
+@@ -1140,7 +1140,7 @@ struct sched_class {
  #ifdef CONFIG_FAIR_GROUP_SCHED
        void (*task_move_group) (struct task_struct *p, int on_rq);
  #endif
  #ifdef CONFIG_FAIR_GROUP_SCHED
        void (*task_move_group) (struct task_struct *p, int on_rq);
  #endif
@@ -92721,38 +92210,6 @@ index 579712f..a338a9d 100644
  
  static inline void put_prev_task(struct rq *rq, struct task_struct *prev)
  {
  
  static inline void put_prev_task(struct rq *rq, struct task_struct *prev)
  {
-diff --git a/kernel/seccomp.c b/kernel/seccomp.c
-index 44eb005..84922be 100644
---- a/kernel/seccomp.c
-+++ b/kernel/seccomp.c
-@@ -395,16 +395,15 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog)
-       if (!filter)
-               goto free_prog;
--      filter->prog = kzalloc(bpf_prog_size(new_len),
--                             GFP_KERNEL|__GFP_NOWARN);
-+      filter->prog = bpf_prog_alloc(bpf_prog_size(new_len), __GFP_NOWARN);
-       if (!filter->prog)
-               goto free_filter;
-       ret = bpf_convert_filter(fp, fprog->len, filter->prog->insnsi, &new_len);
-       if (ret)
-               goto free_filter_prog;
--      kfree(fp);
-+      kfree(fp);
-       atomic_set(&filter->usage, 1);
-       filter->prog->len = new_len;
-@@ -413,7 +412,7 @@ static struct seccomp_filter *seccomp_prepare_filter(struct sock_fprog *fprog)
-       return filter;
- free_filter_prog:
--      kfree(filter->prog);
-+      __bpf_prog_free(filter->prog);
- free_filter:
-       kfree(filter);
- free_prog:
 diff --git a/kernel/signal.c b/kernel/signal.c
 index 8f0876f..1153a5a 100644
 --- a/kernel/signal.c
 diff --git a/kernel/signal.c b/kernel/signal.c
 index 8f0876f..1153a5a 100644
 --- a/kernel/signal.c
@@ -92914,7 +92371,7 @@ index eb89e18..a4e6792 100644
        mutex_unlock(&smpboot_threads_lock);
        put_online_cpus();
 diff --git a/kernel/softirq.c b/kernel/softirq.c
        mutex_unlock(&smpboot_threads_lock);
        put_online_cpus();
 diff --git a/kernel/softirq.c b/kernel/softirq.c
-index 5918d22..e95d1926 100644
+index 0699add..d365ad8 100644
 --- a/kernel/softirq.c
 +++ b/kernel/softirq.c
 @@ -53,7 +53,7 @@ irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned;
 --- a/kernel/softirq.c
 +++ b/kernel/softirq.c
 @@ -53,7 +53,7 @@ irq_cpustat_t irq_stat[NR_CPUS] ____cacheline_aligned;
@@ -92972,7 +92429,7 @@ index 5918d22..e95d1926 100644
        .thread_should_run      = ksoftirqd_should_run,
        .thread_fn              = run_ksoftirqd,
 diff --git a/kernel/sys.c b/kernel/sys.c
        .thread_should_run      = ksoftirqd_should_run,
        .thread_fn              = run_ksoftirqd,
 diff --git a/kernel/sys.c b/kernel/sys.c
-index ce81291..df2ca85 100644
+index 1eaa2f0..d80d27c 100644
 --- a/kernel/sys.c
 +++ b/kernel/sys.c
 @@ -148,6 +148,12 @@ static int set_one_prio(struct task_struct *p, int niceval, int error)
 --- a/kernel/sys.c
 +++ b/kernel/sys.c
 @@ -148,6 +148,12 @@ static int set_one_prio(struct task_struct *p, int niceval, int error)
@@ -92988,7 +92445,7 @@ index ce81291..df2ca85 100644
        no_nice = security_task_setnice(p, niceval);
        if (no_nice) {
                error = no_nice;
        no_nice = security_task_setnice(p, niceval);
        if (no_nice) {
                error = no_nice;
-@@ -351,6 +357,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
+@@ -353,6 +359,20 @@ SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid)
                        goto error;
        }
  
                        goto error;
        }
  
@@ -93009,7 +92466,7 @@ index ce81291..df2ca85 100644
        if (rgid != (gid_t) -1 ||
            (egid != (gid_t) -1 && !gid_eq(kegid, old->gid)))
                new->sgid = new->egid;
        if (rgid != (gid_t) -1 ||
            (egid != (gid_t) -1 && !gid_eq(kegid, old->gid)))
                new->sgid = new->egid;
-@@ -386,6 +406,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid)
+@@ -388,6 +408,10 @@ SYSCALL_DEFINE1(setgid, gid_t, gid)
        old = current_cred();
  
        retval = -EPERM;
        old = current_cred();
  
        retval = -EPERM;
@@ -93020,7 +92477,7 @@ index ce81291..df2ca85 100644
        if (ns_capable(old->user_ns, CAP_SETGID))
                new->gid = new->egid = new->sgid = new->fsgid = kgid;
        else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
        if (ns_capable(old->user_ns, CAP_SETGID))
                new->gid = new->egid = new->sgid = new->fsgid = kgid;
        else if (gid_eq(kgid, old->gid) || gid_eq(kgid, old->sgid))
-@@ -403,7 +427,7 @@ error:
+@@ -405,7 +429,7 @@ error:
  /*
   * change the user struct in a credentials set to match the new UID
   */
  /*
   * change the user struct in a credentials set to match the new UID
   */
@@ -93029,7 +92486,7 @@ index ce81291..df2ca85 100644
  {
        struct user_struct *new_user;
  
  {
        struct user_struct *new_user;
  
-@@ -483,7 +507,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
+@@ -485,7 +509,18 @@ SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid)
                        goto error;
        }
  
                        goto error;
        }
  
@@ -93048,7 +92505,7 @@ index ce81291..df2ca85 100644
                retval = set_user(new);
                if (retval < 0)
                        goto error;
                retval = set_user(new);
                if (retval < 0)
                        goto error;
-@@ -533,6 +568,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid)
+@@ -535,6 +570,12 @@ SYSCALL_DEFINE1(setuid, uid_t, uid)
        old = current_cred();
  
        retval = -EPERM;
        old = current_cred();
  
        retval = -EPERM;
@@ -93061,7 +92518,7 @@ index ce81291..df2ca85 100644
        if (ns_capable(old->user_ns, CAP_SETUID)) {
                new->suid = new->uid = kuid;
                if (!uid_eq(kuid, old->uid)) {
        if (ns_capable(old->user_ns, CAP_SETUID)) {
                new->suid = new->uid = kuid;
                if (!uid_eq(kuid, old->uid)) {
-@@ -602,6 +643,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
+@@ -604,6 +645,9 @@ SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid)
                        goto error;
        }
  
                        goto error;
        }
  
@@ -93071,7 +92528,7 @@ index ce81291..df2ca85 100644
        if (ruid != (uid_t) -1) {
                new->uid = kruid;
                if (!uid_eq(kruid, old->uid)) {
        if (ruid != (uid_t) -1) {
                new->uid = kruid;
                if (!uid_eq(kruid, old->uid)) {
-@@ -684,6 +728,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
+@@ -688,6 +732,9 @@ SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid)
                        goto error;
        }
  
                        goto error;
        }
  
@@ -93081,7 +92538,7 @@ index ce81291..df2ca85 100644
        if (rgid != (gid_t) -1)
                new->gid = krgid;
        if (egid != (gid_t) -1)
        if (rgid != (gid_t) -1)
                new->gid = krgid;
        if (egid != (gid_t) -1)
-@@ -745,12 +792,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid)
+@@ -752,12 +799,16 @@ SYSCALL_DEFINE1(setfsuid, uid_t, uid)
            uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) ||
            ns_capable(old->user_ns, CAP_SETUID)) {
                if (!uid_eq(kuid, old->fsuid)) {
            uid_eq(kuid, old->suid) || uid_eq(kuid, old->fsuid) ||
            ns_capable(old->user_ns, CAP_SETUID)) {
                if (!uid_eq(kuid, old->fsuid)) {
@@ -93098,7 +92555,7 @@ index ce81291..df2ca85 100644
        abort_creds(new);
        return old_fsuid;
  
        abort_creds(new);
        return old_fsuid;
  
-@@ -783,12 +834,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
+@@ -790,12 +841,16 @@ SYSCALL_DEFINE1(setfsgid, gid_t, gid)
        if (gid_eq(kgid, old->gid)  || gid_eq(kgid, old->egid)  ||
            gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
            ns_capable(old->user_ns, CAP_SETGID)) {
        if (gid_eq(kgid, old->gid)  || gid_eq(kgid, old->egid)  ||
            gid_eq(kgid, old->sgid) || gid_eq(kgid, old->fsgid) ||
            ns_capable(old->user_ns, CAP_SETGID)) {
@@ -93115,7 +92572,7 @@ index ce81291..df2ca85 100644
        abort_creds(new);
        return old_fsgid;
  
        abort_creds(new);
        return old_fsgid;
  
-@@ -1167,19 +1222,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
+@@ -1172,19 +1227,19 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
                return -EFAULT;
  
        down_read(&uts_sem);
                return -EFAULT;
  
        down_read(&uts_sem);
@@ -93140,7 +92597,7 @@ index ce81291..df2ca85 100644
                                __OLD_UTS_LEN);
        error |= __put_user(0, name->machine + __OLD_UTS_LEN);
        up_read(&uts_sem);
                                __OLD_UTS_LEN);
        error |= __put_user(0, name->machine + __OLD_UTS_LEN);
        up_read(&uts_sem);
-@@ -1381,6 +1436,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource,
+@@ -1385,6 +1440,13 @@ int do_prlimit(struct task_struct *tsk, unsigned int resource,
                         */
                        new_rlim->rlim_cur = 1;
                }
                         */
                        new_rlim->rlim_cur = 1;
                }
@@ -93155,7 +92612,7 @@ index ce81291..df2ca85 100644
        if (!retval) {
                if (old_rlim)
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
        if (!retval) {
                if (old_rlim)
 diff --git a/kernel/sysctl.c b/kernel/sysctl.c
-index 75875a7..cd8e838 100644
+index 15f2511..181b356 100644
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
 @@ -94,7 +94,6 @@
 --- a/kernel/sysctl.c
 +++ b/kernel/sysctl.c
 @@ -94,7 +94,6 @@
@@ -93260,7 +92717,7 @@ index 75875a7..cd8e838 100644
        {
                .procname       = "sched_child_runs_first",
                .data           = &sysctl_sched_child_runs_first,
        {
                .procname       = "sched_child_runs_first",
                .data           = &sysctl_sched_child_runs_first,
-@@ -641,7 +671,7 @@ static struct ctl_table kern_table[] = {
+@@ -642,7 +672,7 @@ static struct ctl_table kern_table[] = {
                .data           = &modprobe_path,
                .maxlen         = KMOD_PATH_LEN,
                .mode           = 0644,
                .data           = &modprobe_path,
                .maxlen         = KMOD_PATH_LEN,
                .mode           = 0644,
@@ -93269,7 +92726,7 @@ index 75875a7..cd8e838 100644
        },
        {
                .procname       = "modules_disabled",
        },
        {
                .procname       = "modules_disabled",
-@@ -808,16 +838,20 @@ static struct ctl_table kern_table[] = {
+@@ -809,16 +839,20 @@ static struct ctl_table kern_table[] = {
                .extra1         = &zero,
                .extra2         = &one,
        },
                .extra1         = &zero,
                .extra2         = &one,
        },
@@ -93291,7 +92748,7 @@ index 75875a7..cd8e838 100644
        {
                .procname       = "ngroups_max",
                .data           = &ngroups_max,
        {
                .procname       = "ngroups_max",
                .data           = &ngroups_max,
-@@ -1073,10 +1107,17 @@ static struct ctl_table kern_table[] = {
+@@ -1065,10 +1099,17 @@ static struct ctl_table kern_table[] = {
         */
        {
                .procname       = "perf_event_paranoid",
         */
        {
                .procname       = "perf_event_paranoid",
@@ -93312,7 +92769,7 @@ index 75875a7..cd8e838 100644
        },
        {
                .procname       = "perf_event_mlock_kb",
        },
        {
                .procname       = "perf_event_mlock_kb",
-@@ -1335,6 +1376,13 @@ static struct ctl_table vm_table[] = {
+@@ -1327,6 +1368,13 @@ static struct ctl_table vm_table[] = {
                .proc_handler   = proc_dointvec_minmax,
                .extra1         = &zero,
        },
                .proc_handler   = proc_dointvec_minmax,
                .extra1         = &zero,
        },
@@ -93326,7 +92783,7 @@ index 75875a7..cd8e838 100644
  #else
        {
                .procname       = "nr_trim_pages",
  #else
        {
                .procname       = "nr_trim_pages",
-@@ -1824,6 +1872,16 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -1809,6 +1857,16 @@ int proc_dostring(struct ctl_table *table, int write,
                               (char __user *)buffer, lenp, ppos);
  }
  
                               (char __user *)buffer, lenp, ppos);
  }
  
@@ -93343,7 +92800,7 @@ index 75875a7..cd8e838 100644
  static size_t proc_skip_spaces(char **buf)
  {
        size_t ret;
  static size_t proc_skip_spaces(char **buf)
  {
        size_t ret;
-@@ -1929,6 +1987,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
+@@ -1914,6 +1972,8 @@ static int proc_put_long(void __user **buf, size_t *size, unsigned long val,
        len = strlen(tmp);
        if (len > *size)
                len = *size;
        len = strlen(tmp);
        if (len > *size)
                len = *size;
@@ -93352,7 +92809,7 @@ index 75875a7..cd8e838 100644
        if (copy_to_user(*buf, tmp, len))
                return -EFAULT;
        *size -= len;
        if (copy_to_user(*buf, tmp, len))
                return -EFAULT;
        *size -= len;
-@@ -2106,7 +2166,7 @@ int proc_dointvec(struct ctl_table *table, int write,
+@@ -2091,7 +2151,7 @@ int proc_dointvec(struct ctl_table *table, int write,
  static int proc_taint(struct ctl_table *table, int write,
                               void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  static int proc_taint(struct ctl_table *table, int write,
                               void __user *buffer, size_t *lenp, loff_t *ppos)
  {
@@ -93361,7 +92818,7 @@ index 75875a7..cd8e838 100644
        unsigned long tmptaint = get_taint();
        int err;
  
        unsigned long tmptaint = get_taint();
        int err;
  
-@@ -2134,7 +2194,6 @@ static int proc_taint(struct ctl_table *table, int write,
+@@ -2119,7 +2179,6 @@ static int proc_taint(struct ctl_table *table, int write,
        return err;
  }
  
        return err;
  }
  
@@ -93369,7 +92826,7 @@ index 75875a7..cd8e838 100644
  static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
                                void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
                                void __user *buffer, size_t *lenp, loff_t *ppos)
  {
-@@ -2143,7 +2202,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
+@@ -2128,7 +2187,6 @@ static int proc_dointvec_minmax_sysadmin(struct ctl_table *table, int write,
  
        return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
  }
  
        return proc_dointvec_minmax(table, write, buffer, lenp, ppos);
  }
@@ -93377,7 +92834,7 @@ index 75875a7..cd8e838 100644
  
  struct do_proc_dointvec_minmax_conv_param {
        int *min;
  
  struct do_proc_dointvec_minmax_conv_param {
        int *min;
-@@ -2703,6 +2761,12 @@ int proc_dostring(struct ctl_table *table, int write,
+@@ -2688,6 +2746,12 @@ int proc_dostring(struct ctl_table *table, int write,
        return -ENOSYS;
  }
  
        return -ENOSYS;
  }
  
@@ -93390,7 +92847,7 @@ index 75875a7..cd8e838 100644
  int proc_dointvec(struct ctl_table *table, int write,
                  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
  int proc_dointvec(struct ctl_table *table, int write,
                  void __user *buffer, size_t *lenp, loff_t *ppos)
  {
-@@ -2759,5 +2823,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
+@@ -2744,5 +2808,6 @@ EXPORT_SYMBOL(proc_dointvec_minmax);
  EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
  EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
  EXPORT_SYMBOL(proc_dostring);
  EXPORT_SYMBOL(proc_dointvec_userhz_jiffies);
  EXPORT_SYMBOL(proc_dointvec_ms_jiffies);
  EXPORT_SYMBOL(proc_dostring);
@@ -93398,7 +92855,7 @@ index 75875a7..cd8e838 100644
  EXPORT_SYMBOL(proc_doulongvec_minmax);
  EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax);
 diff --git a/kernel/taskstats.c b/kernel/taskstats.c
  EXPORT_SYMBOL(proc_doulongvec_minmax);
  EXPORT_SYMBOL(proc_doulongvec_ms_jiffies_minmax);
 diff --git a/kernel/taskstats.c b/kernel/taskstats.c
-index 13d2f7c..c93d0b0 100644
+index b312fcc7..753d72d 100644
 --- a/kernel/taskstats.c
 +++ b/kernel/taskstats.c
 @@ -28,9 +28,12 @@
 --- a/kernel/taskstats.c
 +++ b/kernel/taskstats.c
 @@ -28,9 +28,12 @@
@@ -93438,7 +92895,7 @@ index a7077d3..dd48a49 100644
                .clock_get      = alarm_clock_get,
                .timer_create   = alarm_timer_create,
 diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
                .clock_get      = alarm_clock_get,
                .timer_create   = alarm_timer_create,
 diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c
-index 1c2fe7d..ce7483d 100644
+index 37e50aa..57a9501 100644
 --- a/kernel/time/hrtimer.c
 +++ b/kernel/time/hrtimer.c
 @@ -1399,7 +1399,7 @@ void hrtimer_peek_ahead_timers(void)
 --- a/kernel/time/hrtimer.c
 +++ b/kernel/time/hrtimer.c
 @@ -1399,7 +1399,7 @@ void hrtimer_peek_ahead_timers(void)
@@ -93451,10 +92908,10 @@ index 1c2fe7d..ce7483d 100644
        hrtimer_peek_ahead_timers();
  }
 diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
        hrtimer_peek_ahead_timers();
  }
 diff --git a/kernel/time/posix-cpu-timers.c b/kernel/time/posix-cpu-timers.c
-index 3b89464..5e38379 100644
+index a16b678..8c5bd9d 100644
 --- a/kernel/time/posix-cpu-timers.c
 +++ b/kernel/time/posix-cpu-timers.c
 --- a/kernel/time/posix-cpu-timers.c
 +++ b/kernel/time/posix-cpu-timers.c
-@@ -1464,14 +1464,14 @@ struct k_clock clock_posix_cpu = {
+@@ -1450,14 +1450,14 @@ struct k_clock clock_posix_cpu = {
  
  static __init int init_posix_cpu_timers(void)
  {
  
  static __init int init_posix_cpu_timers(void)
  {
@@ -93625,7 +93082,7 @@ index ec1791f..6a086cd 100644
        write_seqcount_begin(&tk_core.seq);
  
 diff --git a/kernel/time/timer.c b/kernel/time/timer.c
        write_seqcount_begin(&tk_core.seq);
  
 diff --git a/kernel/time/timer.c b/kernel/time/timer.c
-index 9bbb834..3caa8ed 100644
+index 3260ffd..c93cd5e 100644
 --- a/kernel/time/timer.c
 +++ b/kernel/time/timer.c
 @@ -1394,7 +1394,7 @@ void update_process_times(int user_tick)
 --- a/kernel/time/timer.c
 +++ b/kernel/time/timer.c
 @@ -1394,7 +1394,7 @@ void update_process_times(int user_tick)
@@ -93764,10 +93221,10 @@ index 1fb08f2..ca4bb1e 100644
                return -ENOMEM;
        return 0;
 diff --git a/kernel/torture.c b/kernel/torture.c
                return -ENOMEM;
        return 0;
 diff --git a/kernel/torture.c b/kernel/torture.c
-index d600af2..27a4e9d 100644
+index dd70993..0bf694b 100644
 --- a/kernel/torture.c
 +++ b/kernel/torture.c
 --- a/kernel/torture.c
 +++ b/kernel/torture.c
-@@ -484,7 +484,7 @@ static int torture_shutdown_notify(struct notifier_block *unused1,
+@@ -482,7 +482,7 @@ static int torture_shutdown_notify(struct notifier_block *unused1,
        mutex_lock(&fullstop_mutex);
        if (ACCESS_ONCE(fullstop) == FULLSTOP_DONTSTOP) {
                VERBOSE_TOROUT_STRING("Unscheduled system shutdown detected");
        mutex_lock(&fullstop_mutex);
        if (ACCESS_ONCE(fullstop) == FULLSTOP_DONTSTOP) {
                VERBOSE_TOROUT_STRING("Unscheduled system shutdown detected");
@@ -93776,7 +93233,7 @@ index d600af2..27a4e9d 100644
        } else {
                pr_warn("Concurrent rmmod and shutdown illegal!\n");
        }
        } else {
                pr_warn("Concurrent rmmod and shutdown illegal!\n");
        }
-@@ -551,14 +551,14 @@ static int torture_stutter(void *arg)
+@@ -549,14 +549,14 @@ static int torture_stutter(void *arg)
                if (!torture_must_stop()) {
                        if (stutter > 1) {
                                schedule_timeout_interruptible(stutter - 1);
                if (!torture_must_stop()) {
                        if (stutter > 1) {
                                schedule_timeout_interruptible(stutter - 1);
@@ -93794,7 +93251,7 @@ index d600af2..27a4e9d 100644
                torture_shutdown_absorb("torture_stutter");
        } while (!torture_must_stop());
        torture_kthread_stopping("torture_stutter");
                torture_shutdown_absorb("torture_stutter");
        } while (!torture_must_stop());
        torture_kthread_stopping("torture_stutter");
-@@ -645,7 +645,7 @@ bool torture_cleanup(void)
+@@ -648,7 +648,7 @@ bool torture_cleanup_begin(void)
                schedule_timeout_uninterruptible(10);
                return true;
        }
                schedule_timeout_uninterruptible(10);
                return true;
        }
@@ -93835,10 +93292,10 @@ index c1bd4ad..4b861dc 100644
  
        ret = -EIO;
 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
  
        ret = -EIO;
 diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
-index 5916a8e..5cd3b1f 100644
+index 31c90fe..051ce98 100644
 --- a/kernel/trace/ftrace.c
 +++ b/kernel/trace/ftrace.c
 --- a/kernel/trace/ftrace.c
 +++ b/kernel/trace/ftrace.c
-@@ -2128,12 +2128,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
+@@ -2183,12 +2183,17 @@ ftrace_code_disable(struct module *mod, struct dyn_ftrace *rec)
        if (unlikely(ftrace_disabled))
                return 0;
  
        if (unlikely(ftrace_disabled))
                return 0;
  
@@ -93858,7 +93315,7 @@ index 5916a8e..5cd3b1f 100644
  }
  
  /*
  }
  
  /*
-@@ -4458,8 +4463,10 @@ static int ftrace_process_locs(struct module *mod,
+@@ -4492,8 +4497,10 @@ static int ftrace_process_locs(struct module *mod,
        if (!count)
                return 0;
  
        if (!count)
                return 0;
  
@@ -93869,6 +93326,24 @@ index 5916a8e..5cd3b1f 100644
  
        start_pg = ftrace_allocate_pages(count);
        if (!start_pg)
  
        start_pg = ftrace_allocate_pages(count);
        if (!start_pg)
+@@ -5340,7 +5347,7 @@ static int alloc_retstack_tasklist(struct ftrace_ret_stack **ret_stack_list)
+               if (t->ret_stack == NULL) {
+                       atomic_set(&t->tracing_graph_pause, 0);
+-                      atomic_set(&t->trace_overrun, 0);
++                      atomic_set_unchecked(&t->trace_overrun, 0);
+                       t->curr_ret_stack = -1;
+                       /* Make sure the tasks see the -1 first: */
+                       smp_wmb();
+@@ -5553,7 +5560,7 @@ static void
+ graph_init_task(struct task_struct *t, struct ftrace_ret_stack *ret_stack)
+ {
+       atomic_set(&t->tracing_graph_pause, 0);
+-      atomic_set(&t->trace_overrun, 0);
++      atomic_set_unchecked(&t->trace_overrun, 0);
+       t->ftrace_timestamp = 0;
+       /* make curr_ret_stack visible before we add the ret_stack */
+       smp_wmb();
 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
 index a56e07c..d46f0ba 100644
 --- a/kernel/trace/ring_buffer.c
 diff --git a/kernel/trace/ring_buffer.c b/kernel/trace/ring_buffer.c
 index a56e07c..d46f0ba 100644
 --- a/kernel/trace/ring_buffer.c
@@ -94148,7 +93623,7 @@ index a56e07c..d46f0ba 100644
                *data_page = bpage;
  
 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
                *data_page = bpage;
  
 diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
-index 1520933..c651ebc 100644
+index 426962b..e8e2d9a 100644
 --- a/kernel/trace/trace.c
 +++ b/kernel/trace/trace.c
 @@ -3488,7 +3488,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
 --- a/kernel/trace/trace.c
 +++ b/kernel/trace/trace.c
 @@ -3488,7 +3488,7 @@ int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set)
@@ -94194,7 +93669,7 @@ index 57b67b1..66082a9 100644
 +      return atomic64_inc_return_unchecked(&trace_counter);
  }
 diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
 +      return atomic64_inc_return_unchecked(&trace_counter);
  }
 diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
-index ef06ce7..3ea161d 100644
+index 1b0df1e..4ebb965 100644
 --- a/kernel/trace/trace_events.c
 +++ b/kernel/trace/trace_events.c
 @@ -1720,7 +1720,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call,
 --- a/kernel/trace/trace_events.c
 +++ b/kernel/trace/trace_events.c
 @@ -1720,7 +1720,6 @@ __trace_early_add_new_event(struct ftrace_event_call *call,
@@ -94205,6 +93680,28 @@ index ef06ce7..3ea161d 100644
  static void __add_event_to_tracers(struct ftrace_event_call *call);
  
  /* Add an additional event_call dynamically */
  static void __add_event_to_tracers(struct ftrace_event_call *call);
  
  /* Add an additional event_call dynamically */
+diff --git a/kernel/trace/trace_functions_graph.c b/kernel/trace/trace_functions_graph.c
+index f0a0c98..3692dc8 100644
+--- a/kernel/trace/trace_functions_graph.c
++++ b/kernel/trace/trace_functions_graph.c
+@@ -133,7 +133,7 @@ ftrace_push_return_trace(unsigned long ret, unsigned long func, int *depth,
+       /* The return trace stack is full */
+       if (current->curr_ret_stack == FTRACE_RETFUNC_DEPTH - 1) {
+-              atomic_inc(&current->trace_overrun);
++              atomic_inc_unchecked(&current->trace_overrun);
+               return -EBUSY;
+       }
+@@ -230,7 +230,7 @@ ftrace_pop_return_trace(struct ftrace_graph_ret *trace, unsigned long *ret,
+       *ret = current->ret_stack[index].ret;
+       trace->func = current->ret_stack[index].func;
+       trace->calltime = current->ret_stack[index].calltime;
+-      trace->overrun = atomic_read(&current->trace_overrun);
++      trace->overrun = atomic_read_unchecked(&current->trace_overrun);
+       trace->depth = index;
+ }
 diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c
 index 0abd9b8..6a663a2 100644
 --- a/kernel/trace/trace_mmiotrace.c
 diff --git a/kernel/trace/trace_mmiotrace.c b/kernel/trace/trace_mmiotrace.c
 index 0abd9b8..6a663a2 100644
 --- a/kernel/trace/trace_mmiotrace.c
@@ -94284,10 +93781,10 @@ index 1f24ed9..10407ec 100644
                        s->len = p - s->buffer;
                        return 1;
 diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
                        s->len = p - s->buffer;
                        return 1;
 diff --git a/kernel/trace/trace_stack.c b/kernel/trace/trace_stack.c
-index 8a4e5cb..64f270d 100644
+index 16eddb3..758b308 100644
 --- a/kernel/trace/trace_stack.c
 +++ b/kernel/trace/trace_stack.c
 --- a/kernel/trace/trace_stack.c
 +++ b/kernel/trace/trace_stack.c
-@@ -91,7 +91,7 @@ check_stack(unsigned long ip, unsigned long *stack)
+@@ -90,7 +90,7 @@ check_stack(unsigned long ip, unsigned long *stack)
                return;
  
        /* we do not handle interrupt stacks yet */
                return;
  
        /* we do not handle interrupt stacks yet */
@@ -94297,7 +93794,7 @@ index 8a4e5cb..64f270d 100644
  
        local_irq_save(flags);
 diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
  
        local_irq_save(flags);
 diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
-index 7e3cd7a..5156a5fe 100644
+index 29228c4..301bc8c 100644
 --- a/kernel/trace/trace_syscalls.c
 +++ b/kernel/trace/trace_syscalls.c
 @@ -602,6 +602,8 @@ static int perf_sysenter_enable(struct ftrace_event_call *call)
 --- a/kernel/trace/trace_syscalls.c
 +++ b/kernel/trace/trace_syscalls.c
 @@ -602,6 +602,8 @@ static int perf_sysenter_enable(struct ftrace_event_call *call)
@@ -94337,10 +93834,10 @@ index 7e3cd7a..5156a5fe 100644
        mutex_lock(&syscall_trace_lock);
        sys_perf_refcount_exit--;
 diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
        mutex_lock(&syscall_trace_lock);
        sys_perf_refcount_exit--;
 diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c
-index aa312b0..395f343 100644
+index a2e37c5..4fa859b 100644
 --- a/kernel/user_namespace.c
 +++ b/kernel/user_namespace.c
 --- a/kernel/user_namespace.c
 +++ b/kernel/user_namespace.c
-@@ -82,6 +82,21 @@ int create_user_ns(struct cred *new)
+@@ -83,6 +83,21 @@ int create_user_ns(struct cred *new)
            !kgid_has_mapping(parent_ns, group))
                return -EPERM;
  
            !kgid_has_mapping(parent_ns, group))
                return -EPERM;
  
@@ -94362,7 +93859,7 @@ index aa312b0..395f343 100644
        ns = kmem_cache_zalloc(user_ns_cachep, GFP_KERNEL);
        if (!ns)
                return -ENOMEM;
        ns = kmem_cache_zalloc(user_ns_cachep, GFP_KERNEL);
        if (!ns)
                return -ENOMEM;
-@@ -872,7 +887,7 @@ static int userns_install(struct nsproxy *nsproxy, void *ns)
+@@ -974,7 +989,7 @@ static int userns_install(struct nsproxy *nsproxy, void *ns)
        if (atomic_read(&current->mm->mm_users) > 1)
                return -EINVAL;
  
        if (atomic_read(&current->mm->mm_users) > 1)
                return -EINVAL;
  
@@ -94385,10 +93882,10 @@ index c8eac43..4b5f08f 100644
        memcpy(&uts_table, table, sizeof(uts_table));
        uts_table.data = get_uts(table, write);
 diff --git a/kernel/watchdog.c b/kernel/watchdog.c
        memcpy(&uts_table, table, sizeof(uts_table));
        uts_table.data = get_uts(table, write);
 diff --git a/kernel/watchdog.c b/kernel/watchdog.c
-index a8d6914..8fbdb13 100644
+index 70bf118..4be3c37 100644
 --- a/kernel/watchdog.c
 +++ b/kernel/watchdog.c
 --- a/kernel/watchdog.c
 +++ b/kernel/watchdog.c
-@@ -521,7 +521,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
+@@ -572,7 +572,7 @@ static int watchdog_nmi_enable(unsigned int cpu) { return 0; }
  static void watchdog_nmi_disable(unsigned int cpu) { return; }
  #endif /* CONFIG_HARDLOCKUP_DETECTOR */
  
  static void watchdog_nmi_disable(unsigned int cpu) { return; }
  #endif /* CONFIG_HARDLOCKUP_DETECTOR */
  
@@ -94398,10 +93895,10 @@ index a8d6914..8fbdb13 100644
        .thread_should_run      = watchdog_should_run,
        .thread_fn              = watchdog,
 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
        .thread_should_run      = watchdog_should_run,
        .thread_fn              = watchdog,
 diff --git a/kernel/workqueue.c b/kernel/workqueue.c
-index 5dbe22a..872413c 100644
+index 09b685d..d3565e3 100644
 --- a/kernel/workqueue.c
 +++ b/kernel/workqueue.c
 --- a/kernel/workqueue.c
 +++ b/kernel/workqueue.c
-@@ -4507,7 +4507,7 @@ static void rebind_workers(struct worker_pool *pool)
+@@ -4508,7 +4508,7 @@ static void rebind_workers(struct worker_pool *pool)
                WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
                worker_flags |= WORKER_REBOUND;
                worker_flags &= ~WORKER_UNBOUND;
                WARN_ON_ONCE(!(worker_flags & WORKER_UNBOUND));
                worker_flags |= WORKER_REBOUND;
                worker_flags &= ~WORKER_UNBOUND;
@@ -94411,10 +93908,10 @@ index 5dbe22a..872413c 100644
  
        spin_unlock_irq(&pool->lock);
 diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
  
        spin_unlock_irq(&pool->lock);
 diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
-index a285900..5e3b26b 100644
+index 4e35a5d..8a1f3f0 100644
 --- a/lib/Kconfig.debug
 +++ b/lib/Kconfig.debug
 --- a/lib/Kconfig.debug
 +++ b/lib/Kconfig.debug
-@@ -882,7 +882,7 @@ config DEBUG_MUTEXES
+@@ -894,7 +894,7 @@ config DEBUG_MUTEXES
  
  config DEBUG_WW_MUTEX_SLOWPATH
        bool "Wait/wound mutex debugging: Slowpath testing"
  
  config DEBUG_WW_MUTEX_SLOWPATH
        bool "Wait/wound mutex debugging: Slowpath testing"
@@ -94423,7 +93920,7 @@ index a285900..5e3b26b 100644
        select DEBUG_LOCK_ALLOC
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
        select DEBUG_LOCK_ALLOC
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
-@@ -899,7 +899,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
+@@ -911,7 +911,7 @@ config DEBUG_WW_MUTEX_SLOWPATH
  
  config DEBUG_LOCK_ALLOC
        bool "Lock debugging: detect incorrect freeing of live locks"
  
  config DEBUG_LOCK_ALLOC
        bool "Lock debugging: detect incorrect freeing of live locks"
@@ -94432,7 +93929,7 @@ index a285900..5e3b26b 100644
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
        select LOCKDEP
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
        select LOCKDEP
-@@ -913,7 +913,7 @@ config DEBUG_LOCK_ALLOC
+@@ -925,7 +925,7 @@ config DEBUG_LOCK_ALLOC
  
  config PROVE_LOCKING
        bool "Lock debugging: prove locking correctness"
  
  config PROVE_LOCKING
        bool "Lock debugging: prove locking correctness"
@@ -94441,7 +93938,7 @@ index a285900..5e3b26b 100644
        select LOCKDEP
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
        select LOCKDEP
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
-@@ -964,7 +964,7 @@ config LOCKDEP
+@@ -976,7 +976,7 @@ config LOCKDEP
  
  config LOCK_STAT
        bool "Lock usage statistics"
  
  config LOCK_STAT
        bool "Lock usage statistics"
@@ -94450,7 +93947,7 @@ index a285900..5e3b26b 100644
        select LOCKDEP
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
        select LOCKDEP
        select DEBUG_SPINLOCK
        select DEBUG_MUTEXES
-@@ -1437,6 +1437,7 @@ config LATENCYTOP
+@@ -1449,6 +1449,7 @@ config LATENCYTOP
        depends on DEBUG_KERNEL
        depends on STACKTRACE_SUPPORT
        depends on PROC_FS
        depends on DEBUG_KERNEL
        depends on STACKTRACE_SUPPORT
        depends on PROC_FS
@@ -94458,7 +93955,7 @@ index a285900..5e3b26b 100644
        select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC
        select KALLSYMS
        select KALLSYMS_ALL
        select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM_UNWIND && !ARC
        select KALLSYMS
        select KALLSYMS_ALL
-@@ -1453,7 +1454,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
+@@ -1465,7 +1466,7 @@ config ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
  config DEBUG_STRICT_USER_COPY_CHECKS
        bool "Strict user copy size checks"
        depends on ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
  config DEBUG_STRICT_USER_COPY_CHECKS
        bool "Strict user copy size checks"
        depends on ARCH_HAS_DEBUG_STRICT_USER_COPY_CHECKS
@@ -94467,7 +93964,7 @@ index a285900..5e3b26b 100644
        help
          Enabling this option turns a certain set of sanity checks for user
          copy operations into compile time failures.
        help
          Enabling this option turns a certain set of sanity checks for user
          copy operations into compile time failures.
-@@ -1581,7 +1582,7 @@ endmenu # runtime tests
+@@ -1593,7 +1594,7 @@ endmenu # runtime tests
  
  config PROVIDE_OHCI1394_DMA_INIT
        bool "Remote debugging over FireWire early on boot"
  
  config PROVIDE_OHCI1394_DMA_INIT
        bool "Remote debugging over FireWire early on boot"
@@ -94477,7 +93974,7 @@ index a285900..5e3b26b 100644
          If you want to debug problems which hang or crash the kernel early
          on boot and the crashing machine has a FireWire port, you can use
 diff --git a/lib/Makefile b/lib/Makefile
          If you want to debug problems which hang or crash the kernel early
          on boot and the crashing machine has a FireWire port, you can use
 diff --git a/lib/Makefile b/lib/Makefile
-index d6b4bc4..a3724eb 100644
+index 0211d2b..93f5cc3 100644
 --- a/lib/Makefile
 +++ b/lib/Makefile
 @@ -55,7 +55,7 @@ obj-$(CONFIG_BTREE) += btree.o
 --- a/lib/Makefile
 +++ b/lib/Makefile
 @@ -55,7 +55,7 @@ obj-$(CONFIG_BTREE) += btree.o
@@ -94503,7 +94000,7 @@ index 114d1be..ab0350c 100644
                        (val << avg->factor)) >> avg->weight :
                (val << avg->factor);
 diff --git a/lib/bitmap.c b/lib/bitmap.c
                        (val << avg->factor)) >> avg->weight :
                (val << avg->factor);
 diff --git a/lib/bitmap.c b/lib/bitmap.c
-index 33ce011..89e3d6f 100644
+index b499ab6..fbdb76c 100644
 --- a/lib/bitmap.c
 +++ b/lib/bitmap.c
 @@ -433,7 +433,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen,
 --- a/lib/bitmap.c
 +++ b/lib/bitmap.c
 @@ -433,7 +433,7 @@ int __bitmap_parse(const char *buf, unsigned int buflen,
@@ -94591,7 +94088,7 @@ index 4382ad7..08aa558 100644
        u32 high = divisor >> 32;
        u64 quot;
 diff --git a/lib/dma-debug.c b/lib/dma-debug.c
        u32 high = divisor >> 32;
        u64 quot;
 diff --git a/lib/dma-debug.c b/lib/dma-debug.c
-index 98f2d7e..899da5c 100644
+index add80cc..0d27550 100644
 --- a/lib/dma-debug.c
 +++ b/lib/dma-debug.c
 @@ -971,7 +971,7 @@ static int dma_debug_device_change(struct notifier_block *nb, unsigned long acti
 --- a/lib/dma-debug.c
 +++ b/lib/dma-debug.c
 @@ -971,7 +971,7 @@ static int dma_debug_device_change(struct notifier_block *nb, unsigned long acti
@@ -94609,7 +94106,7 @@ index 98f2d7e..899da5c 100644
  {
 -      if (object_is_on_stack(addr))
 +      if (object_starts_on_stack(addr))
  {
 -      if (object_is_on_stack(addr))
 +      if (object_starts_on_stack(addr))
-               err_printk(dev, NULL, "DMA-API: device driver maps memory from"
+               err_printk(dev, NULL, "DMA-API: device driver maps memory from "
                                "stack [addr=%p]\n", addr);
  }
 diff --git a/lib/hash.c b/lib/hash.c
                                "stack [addr=%p]\n", addr);
  }
 diff --git a/lib/hash.c b/lib/hash.c
@@ -95004,18 +94501,18 @@ index d2233de..fa1a2f6 100644
        }
        spin_unlock(&lockref->lock);
 diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c
        }
        spin_unlock(&lockref->lock);
 diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c
-index a89cf09..1a42c2d 100644
+index 6111bcb..02e816b 100644
 --- a/lib/percpu-refcount.c
 +++ b/lib/percpu-refcount.c
 --- a/lib/percpu-refcount.c
 +++ b/lib/percpu-refcount.c
-@@ -29,7 +29,7 @@
-  * can't hit 0 before we've added up all the percpu refs.
+@@ -31,7 +31,7 @@
+  * atomic_long_t can't hit 0 before we've added up all the percpu refs.
   */
  
   */
  
--#define PCPU_COUNT_BIAS               (1U << 31)
-+#define PCPU_COUNT_BIAS               (1U << 30)
+-#define PERCPU_COUNT_BIAS     (1LU << (BITS_PER_LONG - 1))
++#define PERCPU_COUNT_BIAS     (1LU << (BITS_PER_LONG - 2))
+ static DECLARE_WAIT_QUEUE_HEAD(percpu_ref_switch_waitq);
  
  
- static unsigned __percpu *pcpu_count_ptr(struct percpu_ref *ref)
- {
 diff --git a/lib/radix-tree.c b/lib/radix-tree.c
 index 3291a8e..346a91e 100644
 --- a/lib/radix-tree.c
 diff --git a/lib/radix-tree.c b/lib/radix-tree.c
 index 3291a8e..346a91e 100644
 --- a/lib/radix-tree.c
@@ -95030,10 +94527,10 @@ index 3291a8e..346a91e 100644
  static inline void *ptr_to_indirect(void *ptr)
  {
 diff --git a/lib/random32.c b/lib/random32.c
  static inline void *ptr_to_indirect(void *ptr)
  {
 diff --git a/lib/random32.c b/lib/random32.c
-index c9b6bf3..4752c6d4 100644
+index 0bee183..526f12f 100644
 --- a/lib/random32.c
 +++ b/lib/random32.c
 --- a/lib/random32.c
 +++ b/lib/random32.c
-@@ -46,7 +46,7 @@ static inline void prandom_state_selftest(void)
+@@ -47,7 +47,7 @@ static inline void prandom_state_selftest(void)
  }
  #endif
  
  }
  #endif
  
@@ -95058,7 +94555,7 @@ index c16c81a..4dcbda1 100644
  
  void rb_insert_color(struct rb_node *node, struct rb_root *root)
 diff --git a/lib/show_mem.c b/lib/show_mem.c
  
  void rb_insert_color(struct rb_node *node, struct rb_root *root)
 diff --git a/lib/show_mem.c b/lib/show_mem.c
-index 0922579..9d7adb9 100644
+index 5e25627..3ed9d7f 100644
 --- a/lib/show_mem.c
 +++ b/lib/show_mem.c
 @@ -44,6 +44,6 @@ void show_mem(unsigned int filter)
 --- a/lib/show_mem.c
 +++ b/lib/show_mem.c
 @@ -44,6 +44,6 @@ void show_mem(unsigned int filter)
@@ -95108,19 +94605,6 @@ index 4abda07..b9d3765 100644
  {
        phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
  
  {
        phys_addr_t paddr = dma_to_phys(hwdev, dev_addr);
  
-diff --git a/lib/test_bpf.c b/lib/test_bpf.c
-index 89e0345..3347efe 100644
---- a/lib/test_bpf.c
-+++ b/lib/test_bpf.c
-@@ -1798,7 +1798,7 @@ static struct bpf_prog *generate_filter(int which, int *err)
-               break;
-       case INTERNAL:
--              fp = kzalloc(bpf_prog_size(flen), GFP_KERNEL);
-+              fp = bpf_prog_alloc(bpf_prog_size(flen), 0);
-               if (fp == NULL) {
-                       pr_cont("UNEXPECTED_FAIL no memory left\n");
-                       *err = -ENOMEM;
 diff --git a/lib/usercopy.c b/lib/usercopy.c
 index 4f5b1dd..7cab418 100644
 --- a/lib/usercopy.c
 diff --git a/lib/usercopy.c b/lib/usercopy.c
 index 4f5b1dd..7cab418 100644
 --- a/lib/usercopy.c
@@ -95136,7 +94620,7 @@ index 4f5b1dd..7cab418 100644
 +}
 +EXPORT_SYMBOL(copy_to_user_overflow);
 diff --git a/lib/vsprintf.c b/lib/vsprintf.c
 +}
 +EXPORT_SYMBOL(copy_to_user_overflow);
 diff --git a/lib/vsprintf.c b/lib/vsprintf.c
-index 6fe2c84..2fe5ec6 100644
+index ec337f6..8484eb2 100644
 --- a/lib/vsprintf.c
 +++ b/lib/vsprintf.c
 @@ -16,6 +16,9 @@
 --- a/lib/vsprintf.c
 +++ b/lib/vsprintf.c
 @@ -16,6 +16,9 @@
@@ -95149,7 +94633,7 @@ index 6fe2c84..2fe5ec6 100644
  #include <stdarg.h>
  #include <linux/module.h>     /* for KSYM_SYMBOL_LEN */
  #include <linux/types.h>
  #include <stdarg.h>
  #include <linux/module.h>     /* for KSYM_SYMBOL_LEN */
  #include <linux/types.h>
-@@ -624,7 +627,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
+@@ -625,7 +628,7 @@ char *symbol_string(char *buf, char *end, void *ptr,
  #ifdef CONFIG_KALLSYMS
        if (*fmt == 'B')
                sprint_backtrace(sym, value);
  #ifdef CONFIG_KALLSYMS
        if (*fmt == 'B')
                sprint_backtrace(sym, value);
@@ -95158,7 +94642,7 @@ index 6fe2c84..2fe5ec6 100644
                sprint_symbol(sym, value);
        else
                sprint_symbol_no_offset(sym, value);
                sprint_symbol(sym, value);
        else
                sprint_symbol_no_offset(sym, value);
-@@ -1183,7 +1186,11 @@ char *address_val(char *buf, char *end, const void *addr,
+@@ -1240,7 +1243,11 @@ char *address_val(char *buf, char *end, const void *addr,
        return number(buf, end, num, spec);
  }
  
        return number(buf, end, num, spec);
  }
  
@@ -95170,7 +94654,7 @@ index 6fe2c84..2fe5ec6 100644
  
  /*
   * Show a '%p' thing.  A kernel extension is that the '%p' is followed
  
  /*
   * Show a '%p' thing.  A kernel extension is that the '%p' is followed
-@@ -1194,8 +1201,10 @@ int kptr_restrict __read_mostly;
+@@ -1251,8 +1258,10 @@ int kptr_restrict __read_mostly;
   *
   * - 'F' For symbolic function descriptor pointers with offset
   * - 'f' For simple symbolic function names without offset
   *
   * - 'F' For symbolic function descriptor pointers with offset
   * - 'f' For simple symbolic function names without offset
@@ -95181,7 +94665,7 @@ index 6fe2c84..2fe5ec6 100644
   * - '[FfSs]R' as above with __builtin_extract_return_addr() translation
   * - 'B' For backtraced symbolic direct pointers with offset
   * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
   * - '[FfSs]R' as above with __builtin_extract_return_addr() translation
   * - 'B' For backtraced symbolic direct pointers with offset
   * - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
-@@ -1263,12 +1272,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1331,12 +1340,12 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
  
        if (!ptr && *fmt != 'K') {
                /*
  
        if (!ptr && *fmt != 'K') {
                /*
@@ -95196,7 +94680,7 @@ index 6fe2c84..2fe5ec6 100644
        }
  
        switch (*fmt) {
        }
  
        switch (*fmt) {
-@@ -1278,6 +1287,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1346,6 +1355,14 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
                /* Fallthrough */
        case 'S':
        case 's':
                /* Fallthrough */
        case 'S':
        case 's':
@@ -95211,7 +94695,7 @@ index 6fe2c84..2fe5ec6 100644
        case 'B':
                return symbol_string(buf, end, ptr, spec, fmt);
        case 'R':
        case 'B':
                return symbol_string(buf, end, ptr, spec, fmt);
        case 'R':
-@@ -1333,6 +1350,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1403,6 +1420,8 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
                        va_end(va);
                        return buf;
                }
                        va_end(va);
                        return buf;
                }
@@ -95220,7 +94704,7 @@ index 6fe2c84..2fe5ec6 100644
        case 'K':
                /*
                 * %pK cannot be used in IRQ context because its test
        case 'K':
                /*
                 * %pK cannot be used in IRQ context because its test
-@@ -1390,6 +1409,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
+@@ -1460,6 +1479,22 @@ char *pointer(const char *fmt, char *buf, char *end, void *ptr,
                                   ((const struct file *)ptr)->f_path.dentry,
                                   spec, fmt);
        }
                                   ((const struct file *)ptr)->f_path.dentry,
                                   spec, fmt);
        }
@@ -95243,7 +94727,7 @@ index 6fe2c84..2fe5ec6 100644
        spec.flags |= SMALL;
        if (spec.field_width == -1) {
                spec.field_width = default_width;
        spec.flags |= SMALL;
        if (spec.field_width == -1) {
                spec.field_width = default_width;
-@@ -2089,11 +2124,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2160,11 +2195,11 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
        typeof(type) value;                                             \
        if (sizeof(type) == 8) {                                        \
                args = PTR_ALIGN(args, sizeof(u32));                    \
        typeof(type) value;                                             \
        if (sizeof(type) == 8) {                                        \
                args = PTR_ALIGN(args, sizeof(u32));                    \
@@ -95258,7 +94742,7 @@ index 6fe2c84..2fe5ec6 100644
        }                                                               \
        args += sizeof(type);                                           \
        value;                                                          \
        }                                                               \
        args += sizeof(type);                                           \
        value;                                                          \
-@@ -2156,7 +2191,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
+@@ -2227,7 +2262,7 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf)
                case FORMAT_TYPE_STR: {
                        const char *str_arg = args;
                        args += strlen(str_arg) + 1;
                case FORMAT_TYPE_STR: {
                        const char *str_arg = args;
                        args += strlen(str_arg) + 1;
@@ -95275,10 +94759,10 @@ index 0000000..7cd6065
 @@ -0,0 +1 @@
 +-grsec
 diff --git a/mm/Kconfig b/mm/Kconfig
 @@ -0,0 +1 @@
 +-grsec
 diff --git a/mm/Kconfig b/mm/Kconfig
-index 886db21..f514de2 100644
+index 1d1ae6b..0f05885 100644
 --- a/mm/Kconfig
 +++ b/mm/Kconfig
 --- a/mm/Kconfig
 +++ b/mm/Kconfig
-@@ -333,10 +333,11 @@ config KSM
+@@ -341,10 +341,11 @@ config KSM
          root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
  
  config DEFAULT_MMAP_MIN_ADDR
          root has set /sys/kernel/mm/ksm/run to 1 (if CONFIG_SYSFS is set).
  
  config DEFAULT_MMAP_MIN_ADDR
@@ -95293,7 +94777,7 @@ index 886db21..f514de2 100644
          This is the portion of low virtual memory which should be protected
          from userspace allocation.  Keeping a user from writing to low pages
          can help reduce the impact of kernel NULL pointer bugs.
          This is the portion of low virtual memory which should be protected
          from userspace allocation.  Keeping a user from writing to low pages
          can help reduce the impact of kernel NULL pointer bugs.
-@@ -367,7 +368,7 @@ config MEMORY_FAILURE
+@@ -375,7 +376,7 @@ config MEMORY_FAILURE
  
  config HWPOISON_INJECT
        tristate "HWPoison pages injector"
  
  config HWPOISON_INJECT
        tristate "HWPoison pages injector"
@@ -95303,7 +94787,7 @@ index 886db21..f514de2 100644
  
  config NOMMU_INITIAL_TRIM_EXCESS
 diff --git a/mm/backing-dev.c b/mm/backing-dev.c
  
  config NOMMU_INITIAL_TRIM_EXCESS
 diff --git a/mm/backing-dev.c b/mm/backing-dev.c
-index 1706cbb..f89dbca 100644
+index 0ae0df5..82ac56b 100644
 --- a/mm/backing-dev.c
 +++ b/mm/backing-dev.c
 @@ -12,7 +12,7 @@
 --- a/mm/backing-dev.c
 +++ b/mm/backing-dev.c
 @@ -12,7 +12,7 @@
@@ -95315,7 +94799,7 @@ index 1706cbb..f89dbca 100644
  
  struct backing_dev_info default_backing_dev_info = {
        .name           = "default",
  
  struct backing_dev_info default_backing_dev_info = {
        .name           = "default",
-@@ -533,7 +533,7 @@ int bdi_setup_and_register(struct backing_dev_info *bdi, char *name,
+@@ -525,7 +525,7 @@ int bdi_setup_and_register(struct backing_dev_info *bdi, char *name,
                return err;
  
        err = bdi_register(bdi, NULL, "%.28s-%ld", name,
                return err;
  
        err = bdi_register(bdi, NULL, "%.28s-%ld", name,
@@ -95325,10 +94809,10 @@ index 1706cbb..f89dbca 100644
                bdi_destroy(bdi);
                return err;
 diff --git a/mm/filemap.c b/mm/filemap.c
                bdi_destroy(bdi);
                return err;
 diff --git a/mm/filemap.c b/mm/filemap.c
-index 90effcd..539aa64 100644
+index 14b4642..d71ba82 100644
 --- a/mm/filemap.c
 +++ b/mm/filemap.c
 --- a/mm/filemap.c
 +++ b/mm/filemap.c
-@@ -2092,7 +2092,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
+@@ -2101,7 +2101,7 @@ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
        struct address_space *mapping = file->f_mapping;
  
        if (!mapping->a_ops->readpage)
        struct address_space *mapping = file->f_mapping;
  
        if (!mapping->a_ops->readpage)
@@ -95337,7 +94821,7 @@ index 90effcd..539aa64 100644
        file_accessed(file);
        vma->vm_ops = &generic_file_vm_ops;
        return 0;
        file_accessed(file);
        vma->vm_ops = &generic_file_vm_ops;
        return 0;
-@@ -2270,6 +2270,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i
+@@ -2279,6 +2279,7 @@ inline int generic_write_checks(struct file *file, loff_t *pos, size_t *count, i
                          *pos = i_size_read(inode);
  
                if (limit != RLIM_INFINITY) {
                          *pos = i_size_read(inode);
  
                if (limit != RLIM_INFINITY) {
@@ -95362,10 +94846,10 @@ index 72b8fa3..c5b39f1 100644
         * Make sure the vma is shared, that it supports prefaulting,
         * and that the remapped range is valid and fully within
 diff --git a/mm/gup.c b/mm/gup.c
         * Make sure the vma is shared, that it supports prefaulting,
         * and that the remapped range is valid and fully within
 diff --git a/mm/gup.c b/mm/gup.c
-index 91d044b..a58ecf6 100644
+index cd62c8c..3bb2053 100644
 --- a/mm/gup.c
 +++ b/mm/gup.c
 --- a/mm/gup.c
 +++ b/mm/gup.c
-@@ -270,11 +270,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
+@@ -274,11 +274,6 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
        unsigned int fault_flags = 0;
        int ret;
  
        unsigned int fault_flags = 0;
        int ret;
  
@@ -95377,7 +94861,7 @@ index 91d044b..a58ecf6 100644
        if (*flags & FOLL_WRITE)
                fault_flags |= FAULT_FLAG_WRITE;
        if (nonblocking)
        if (*flags & FOLL_WRITE)
                fault_flags |= FAULT_FLAG_WRITE;
        if (nonblocking)
-@@ -436,14 +431,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+@@ -444,14 +439,14 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
        if (!(gup_flags & FOLL_FORCE))
                gup_flags |= FOLL_NUMA;
  
        if (!(gup_flags & FOLL_FORCE))
                gup_flags |= FOLL_NUMA;
  
@@ -95394,7 +94878,7 @@ index 91d044b..a58ecf6 100644
                        if (!vma && in_gate_area(mm, start)) {
                                int ret;
                                ret = get_gate_page(mm, start & PAGE_MASK,
                        if (!vma && in_gate_area(mm, start)) {
                                int ret;
                                ret = get_gate_page(mm, start & PAGE_MASK,
-@@ -455,7 +450,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
+@@ -463,7 +458,7 @@ long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
                                goto next_page;
                        }
  
                                goto next_page;
                        }
  
@@ -95403,7 +94887,7 @@ index 91d044b..a58ecf6 100644
                                return i ? : -EFAULT;
                        if (is_vm_hugetlb_page(vma)) {
                                i = follow_hugetlb_page(mm, vma, pages, vmas,
                                return i ? : -EFAULT;
                        if (is_vm_hugetlb_page(vma)) {
                                i = follow_hugetlb_page(mm, vma, pages, vmas,
-@@ -510,7 +505,7 @@ next_page:
+@@ -518,7 +513,7 @@ next_page:
                i += page_increm;
                start += page_increm * PAGE_SIZE;
                nr_pages -= page_increm;
                i += page_increm;
                start += page_increm * PAGE_SIZE;
                nr_pages -= page_increm;
@@ -95441,7 +94925,7 @@ index 123bcd3..0de52ba 100644
        set_page_address(page, (void *)vaddr);
  
 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
        set_page_address(page, (void *)vaddr);
  
 diff --git a/mm/hugetlb.c b/mm/hugetlb.c
-index eeceeeb..a209d58 100644
+index 9fd7227..5628939 100644
 --- a/mm/hugetlb.c
 +++ b/mm/hugetlb.c
 @@ -2258,6 +2258,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
 --- a/mm/hugetlb.c
 +++ b/mm/hugetlb.c
 @@ -2258,6 +2258,7 @@ static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
@@ -95578,7 +95062,7 @@ index eeceeeb..a209d58 100644
        if (!ptep)
                return VM_FAULT_OOM;
 diff --git a/mm/internal.h b/mm/internal.h
        if (!ptep)
                return VM_FAULT_OOM;
 diff --git a/mm/internal.h b/mm/internal.h
-index 5f2772f..4c3882c 100644
+index a4f90ba..fbdc32b 100644
 --- a/mm/internal.h
 +++ b/mm/internal.h
 @@ -134,6 +134,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order)
 --- a/mm/internal.h
 +++ b/mm/internal.h
 @@ -134,6 +134,7 @@ __find_buddy_index(unsigned long page_idx, unsigned int order)
@@ -95589,7 +95073,7 @@ index 5f2772f..4c3882c 100644
  extern void prep_compound_page(struct page *page, unsigned long order);
  #ifdef CONFIG_MEMORY_FAILURE
  extern bool is_free_buddy_page(struct page *page);
  extern void prep_compound_page(struct page *page, unsigned long order);
  #ifdef CONFIG_MEMORY_FAILURE
  extern bool is_free_buddy_page(struct page *page);
-@@ -376,7 +377,7 @@ extern u32 hwpoison_filter_enable;
+@@ -390,7 +391,7 @@ extern u32 hwpoison_filter_enable;
  
  extern unsigned long vm_mmap_pgoff(struct file *, unsigned long,
          unsigned long, unsigned long,
  
  extern unsigned long vm_mmap_pgoff(struct file *, unsigned long,
          unsigned long, unsigned long,
@@ -95599,10 +95083,10 @@ index 5f2772f..4c3882c 100644
  extern void set_pageblock_order(void);
  unsigned long reclaim_clean_pages_from_list(struct zone *zone,
 diff --git a/mm/iov_iter.c b/mm/iov_iter.c
  extern void set_pageblock_order(void);
  unsigned long reclaim_clean_pages_from_list(struct zone *zone,
 diff --git a/mm/iov_iter.c b/mm/iov_iter.c
-index 141dcf7..7327fd3 100644
+index e34a3cb..a810efe 100644
 --- a/mm/iov_iter.c
 +++ b/mm/iov_iter.c
 --- a/mm/iov_iter.c
 +++ b/mm/iov_iter.c
-@@ -173,7 +173,7 @@ static size_t __iovec_copy_from_user_inatomic(char *vaddr,
+@@ -307,7 +307,7 @@ static size_t __iovec_copy_from_user_inatomic(char *vaddr,
  
        while (bytes) {
                char __user *buf = iov->iov_base + base;
  
        while (bytes) {
                char __user *buf = iov->iov_base + base;
@@ -95611,7 +95095,7 @@ index 141dcf7..7327fd3 100644
  
                base = 0;
                left = __copy_from_user_inatomic(vaddr, buf, copy);
  
                base = 0;
                left = __copy_from_user_inatomic(vaddr, buf, copy);
-@@ -201,7 +201,7 @@ static size_t copy_from_user_atomic_iovec(struct page *page,
+@@ -335,7 +335,7 @@ static size_t copy_from_user_atomic_iovec(struct page *page,
  
        kaddr = kmap_atomic(page);
        if (likely(i->nr_segs == 1)) {
  
        kaddr = kmap_atomic(page);
        if (likely(i->nr_segs == 1)) {
@@ -95620,7 +95104,7 @@ index 141dcf7..7327fd3 100644
                char __user *buf = i->iov->iov_base + i->iov_offset;
                left = __copy_from_user_inatomic(kaddr + offset, buf, bytes);
                copied = bytes - left;
                char __user *buf = i->iov->iov_base + i->iov_offset;
                left = __copy_from_user_inatomic(kaddr + offset, buf, bytes);
                copied = bytes - left;
-@@ -231,7 +231,7 @@ static void advance_iovec(struct iov_iter *i, size_t bytes)
+@@ -365,7 +365,7 @@ static void advance_iovec(struct iov_iter *i, size_t bytes)
                 * zero-length segments (without overruning the iovec).
                 */
                while (bytes || unlikely(i->count && !iov->iov_len)) {
                 * zero-length segments (without overruning the iovec).
                 */
                while (bytes || unlikely(i->count && !iov->iov_len)) {
@@ -95754,7 +95238,7 @@ index 0938b30..199abe8 100644
        if (end == start)
                return error;
 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
        if (end == start)
                return error;
 diff --git a/mm/memory-failure.c b/mm/memory-failure.c
-index 44c6bd2..60369dc3 100644
+index 8639f6b..b623882a 100644
 --- a/mm/memory-failure.c
 +++ b/mm/memory-failure.c
 @@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0;
 --- a/mm/memory-failure.c
 +++ b/mm/memory-failure.c
 @@ -61,7 +61,7 @@ int sysctl_memory_failure_early_kill __read_mostly = 0;
@@ -95884,7 +95368,7 @@ index 44c6bd2..60369dc3 100644
        }
        unset_migratetype_isolate(page, MIGRATE_MOVABLE);
 diff --git a/mm/memory.c b/mm/memory.c
        }
        unset_migratetype_isolate(page, MIGRATE_MOVABLE);
 diff --git a/mm/memory.c b/mm/memory.c
-index 37b80fc..68218aa 100644
+index d5f2ae9..4d678b2 100644
 --- a/mm/memory.c
 +++ b/mm/memory.c
 @@ -415,6 +415,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
 --- a/mm/memory.c
 +++ b/mm/memory.c
 @@ -415,6 +415,7 @@ static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
@@ -96184,7 +95668,7 @@ index 37b80fc..68218aa 100644
  /*
   * This routine handles present pages, when users try to write
   * to a shared page. It is done by copying the page to a new address
  /*
   * This routine handles present pages, when users try to write
   * to a shared page. It is done by copying the page to a new address
-@@ -2217,6 +2424,12 @@ gotten:
+@@ -2218,6 +2425,12 @@ gotten:
         */
        page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
        if (likely(pte_same(*page_table, orig_pte))) {
         */
        page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
        if (likely(pte_same(*page_table, orig_pte))) {
@@ -96197,7 +95681,7 @@ index 37b80fc..68218aa 100644
                if (old_page) {
                        if (!PageAnon(old_page)) {
                                dec_mm_counter_fast(mm, MM_FILEPAGES);
                if (old_page) {
                        if (!PageAnon(old_page)) {
                                dec_mm_counter_fast(mm, MM_FILEPAGES);
-@@ -2270,6 +2483,10 @@ gotten:
+@@ -2271,6 +2484,10 @@ gotten:
                        page_remove_rmap(old_page);
                }
  
                        page_remove_rmap(old_page);
                }
  
@@ -96208,7 +95692,7 @@ index 37b80fc..68218aa 100644
                /* Free the old page.. */
                new_page = old_page;
                ret |= VM_FAULT_WRITE;
                /* Free the old page.. */
                new_page = old_page;
                ret |= VM_FAULT_WRITE;
-@@ -2544,6 +2761,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2545,6 +2762,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
        swap_free(entry);
        if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
                try_to_free_swap(page);
        swap_free(entry);
        if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
                try_to_free_swap(page);
@@ -96220,7 +95704,7 @@ index 37b80fc..68218aa 100644
        unlock_page(page);
        if (page != swapcache) {
                /*
        unlock_page(page);
        if (page != swapcache) {
                /*
-@@ -2567,6 +2789,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2568,6 +2790,11 @@ static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
  
        /* No need to invalidate - it was non-present before */
        update_mmu_cache(vma, address, page_table);
  
        /* No need to invalidate - it was non-present before */
        update_mmu_cache(vma, address, page_table);
@@ -96232,7 +95716,7 @@ index 37b80fc..68218aa 100644
  unlock:
        pte_unmap_unlock(page_table, ptl);
  out:
  unlock:
        pte_unmap_unlock(page_table, ptl);
  out:
-@@ -2586,40 +2813,6 @@ out_release:
+@@ -2587,40 +2814,6 @@ out_release:
  }
  
  /*
  }
  
  /*
@@ -96273,7 +95757,7 @@ index 37b80fc..68218aa 100644
   * We enter with non-exclusive mmap_sem (to exclude vma changes,
   * but allow concurrent faults), and pte mapped but not yet locked.
   * We return with mmap_sem still held, but pte unmapped and unlocked.
   * We enter with non-exclusive mmap_sem (to exclude vma changes,
   * but allow concurrent faults), and pte mapped but not yet locked.
   * We return with mmap_sem still held, but pte unmapped and unlocked.
-@@ -2629,27 +2822,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2630,27 +2823,23 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
                unsigned int flags)
  {
        struct mem_cgroup *memcg;
                unsigned int flags)
  {
        struct mem_cgroup *memcg;
@@ -96306,7 +95790,7 @@ index 37b80fc..68218aa 100644
        if (unlikely(anon_vma_prepare(vma)))
                goto oom;
        page = alloc_zeroed_user_highpage_movable(vma, address);
        if (unlikely(anon_vma_prepare(vma)))
                goto oom;
        page = alloc_zeroed_user_highpage_movable(vma, address);
-@@ -2673,6 +2862,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2674,6 +2863,11 @@ static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
        if (!pte_none(*page_table))
                goto release;
  
        if (!pte_none(*page_table))
                goto release;
  
@@ -96318,7 +95802,7 @@ index 37b80fc..68218aa 100644
        inc_mm_counter_fast(mm, MM_ANONPAGES);
        page_add_new_anon_rmap(page, vma, address);
        mem_cgroup_commit_charge(page, memcg, false);
        inc_mm_counter_fast(mm, MM_ANONPAGES);
        page_add_new_anon_rmap(page, vma, address);
        mem_cgroup_commit_charge(page, memcg, false);
-@@ -2682,6 +2876,12 @@ setpte:
+@@ -2683,6 +2877,12 @@ setpte:
  
        /* No need to invalidate - it was non-present before */
        update_mmu_cache(vma, address, page_table);
  
        /* No need to invalidate - it was non-present before */
        update_mmu_cache(vma, address, page_table);
@@ -96331,7 +95815,7 @@ index 37b80fc..68218aa 100644
  unlock:
        pte_unmap_unlock(page_table, ptl);
        return 0;
  unlock:
        pte_unmap_unlock(page_table, ptl);
        return 0;
-@@ -2912,6 +3112,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2913,6 +3113,11 @@ static int do_read_fault(struct mm_struct *mm, struct vm_area_struct *vma,
                return ret;
        }
        do_set_pte(vma, address, fault_page, pte, false, false);
                return ret;
        }
        do_set_pte(vma, address, fault_page, pte, false, false);
@@ -96343,7 +95827,7 @@ index 37b80fc..68218aa 100644
        unlock_page(fault_page);
  unlock_out:
        pte_unmap_unlock(pte, ptl);
        unlock_page(fault_page);
  unlock_out:
        pte_unmap_unlock(pte, ptl);
-@@ -2954,7 +3159,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2955,7 +3160,18 @@ static int do_cow_fault(struct mm_struct *mm, struct vm_area_struct *vma,
                page_cache_release(fault_page);
                goto uncharge_out;
        }
                page_cache_release(fault_page);
                goto uncharge_out;
        }
@@ -96362,7 +95846,7 @@ index 37b80fc..68218aa 100644
        mem_cgroup_commit_charge(new_page, memcg, false);
        lru_cache_add_active_or_unevictable(new_page, vma);
        pte_unmap_unlock(pte, ptl);
        mem_cgroup_commit_charge(new_page, memcg, false);
        lru_cache_add_active_or_unevictable(new_page, vma);
        pte_unmap_unlock(pte, ptl);
-@@ -3004,6 +3220,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3005,6 +3221,11 @@ static int do_shared_fault(struct mm_struct *mm, struct vm_area_struct *vma,
                return ret;
        }
        do_set_pte(vma, address, fault_page, pte, true, false);
                return ret;
        }
        do_set_pte(vma, address, fault_page, pte, true, false);
@@ -96374,7 +95858,7 @@ index 37b80fc..68218aa 100644
        pte_unmap_unlock(pte, ptl);
  
        if (set_page_dirty(fault_page))
        pte_unmap_unlock(pte, ptl);
  
        if (set_page_dirty(fault_page))
-@@ -3245,6 +3466,12 @@ static int handle_pte_fault(struct mm_struct *mm,
+@@ -3246,6 +3467,12 @@ static int handle_pte_fault(struct mm_struct *mm,
                if (flags & FAULT_FLAG_WRITE)
                        flush_tlb_fix_spurious_fault(vma, address);
        }
                if (flags & FAULT_FLAG_WRITE)
                        flush_tlb_fix_spurious_fault(vma, address);
        }
@@ -96387,7 +95871,7 @@ index 37b80fc..68218aa 100644
  unlock:
        pte_unmap_unlock(pte, ptl);
        return 0;
  unlock:
        pte_unmap_unlock(pte, ptl);
        return 0;
-@@ -3264,9 +3491,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -3265,9 +3492,41 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
        pmd_t *pmd;
        pte_t *pte;
  
        pmd_t *pmd;
        pte_t *pte;
  
@@ -96429,7 +95913,7 @@ index 37b80fc..68218aa 100644
        pgd = pgd_offset(mm, address);
        pud = pud_alloc(mm, pgd, address);
        if (!pud)
        pgd = pgd_offset(mm, address);
        pud = pud_alloc(mm, pgd, address);
        if (!pud)
-@@ -3400,6 +3659,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
+@@ -3401,6 +3660,23 @@ int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
        spin_unlock(&mm->page_table_lock);
        return 0;
  }
        spin_unlock(&mm->page_table_lock);
        return 0;
  }
@@ -96453,7 +95937,7 @@ index 37b80fc..68218aa 100644
  #endif /* __PAGETABLE_PUD_FOLDED */
  
  #ifndef __PAGETABLE_PMD_FOLDED
  #endif /* __PAGETABLE_PUD_FOLDED */
  
  #ifndef __PAGETABLE_PMD_FOLDED
-@@ -3430,6 +3706,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
+@@ -3431,6 +3707,30 @@ int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
        spin_unlock(&mm->page_table_lock);
        return 0;
  }
        spin_unlock(&mm->page_table_lock);
        return 0;
  }
@@ -96484,7 +95968,7 @@ index 37b80fc..68218aa 100644
  #endif /* __PAGETABLE_PMD_FOLDED */
  
  static int __follow_pte(struct mm_struct *mm, unsigned long address,
  #endif /* __PAGETABLE_PMD_FOLDED */
  
  static int __follow_pte(struct mm_struct *mm, unsigned long address,
-@@ -3539,8 +3839,8 @@ out:
+@@ -3540,8 +3840,8 @@ out:
        return ret;
  }
  
        return ret;
  }
  
@@ -96495,7 +95979,7 @@ index 37b80fc..68218aa 100644
  {
        resource_size_t phys_addr;
        unsigned long prot = 0;
  {
        resource_size_t phys_addr;
        unsigned long prot = 0;
-@@ -3566,8 +3866,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
+@@ -3567,8 +3867,8 @@ EXPORT_SYMBOL_GPL(generic_access_phys);
   * Access another process' address space as given in mm.  If non-NULL, use the
   * given task for page fault accounting.
   */
   * Access another process' address space as given in mm.  If non-NULL, use the
   * given task for page fault accounting.
   */
@@ -96506,7 +95990,7 @@ index 37b80fc..68218aa 100644
  {
        struct vm_area_struct *vma;
        void *old_buf = buf;
  {
        struct vm_area_struct *vma;
        void *old_buf = buf;
-@@ -3575,7 +3875,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3576,7 +3876,7 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
        down_read(&mm->mmap_sem);
        /* ignore errors, just check how much was successfully transferred */
        while (len) {
        down_read(&mm->mmap_sem);
        /* ignore errors, just check how much was successfully transferred */
        while (len) {
@@ -96515,7 +95999,7 @@ index 37b80fc..68218aa 100644
                void *maddr;
                struct page *page = NULL;
  
                void *maddr;
                struct page *page = NULL;
  
-@@ -3636,8 +3936,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
+@@ -3637,8 +3937,8 @@ static int __access_remote_vm(struct task_struct *tsk, struct mm_struct *mm,
   *
   * The caller must hold a reference on @mm.
   */
   *
   * The caller must hold a reference on @mm.
   */
@@ -96526,7 +96010,7 @@ index 37b80fc..68218aa 100644
  {
        return __access_remote_vm(NULL, mm, addr, buf, len, write);
  }
  {
        return __access_remote_vm(NULL, mm, addr, buf, len, write);
  }
-@@ -3647,11 +3947,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+@@ -3648,11 +3948,11 @@ int access_remote_vm(struct mm_struct *mm, unsigned long addr,
   * Source/target buffer must be kernel space,
   * Do not walk the page table directly, use get_user_pages
   */
   * Source/target buffer must be kernel space,
   * Do not walk the page table directly, use get_user_pages
   */
@@ -96542,7 +96026,7 @@ index 37b80fc..68218aa 100644
        mm = get_task_mm(tsk);
        if (!mm)
 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
        mm = get_task_mm(tsk);
        if (!mm)
 diff --git a/mm/mempolicy.c b/mm/mempolicy.c
-index 8f5330d..b41914b 100644
+index e58725a..e0be017 100644
 --- a/mm/mempolicy.c
 +++ b/mm/mempolicy.c
 @@ -750,6 +750,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
 --- a/mm/mempolicy.c
 +++ b/mm/mempolicy.c
 @@ -750,6 +750,10 @@ static int mbind_range(struct mm_struct *mm, unsigned long start,
@@ -96573,7 +96057,7 @@ index 8f5330d..b41914b 100644
        }
  
   out:
        }
  
   out:
-@@ -1225,6 +1239,17 @@ static long do_mbind(unsigned long start, unsigned long len,
+@@ -1212,6 +1226,17 @@ static long do_mbind(unsigned long start, unsigned long len,
  
        if (end < start)
                return -EINVAL;
  
        if (end < start)
                return -EINVAL;
@@ -96591,7 +96075,7 @@ index 8f5330d..b41914b 100644
        if (end == start)
                return 0;
  
        if (end == start)
                return 0;
  
-@@ -1450,8 +1475,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1437,8 +1462,7 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
         */
        tcred = __task_cred(task);
        if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) &&
         */
        tcred = __task_cred(task);
        if (!uid_eq(cred->euid, tcred->suid) && !uid_eq(cred->euid, tcred->uid) &&
@@ -96601,7 +96085,7 @@ index 8f5330d..b41914b 100644
                rcu_read_unlock();
                err = -EPERM;
                goto out_put;
                rcu_read_unlock();
                err = -EPERM;
                goto out_put;
-@@ -1482,6 +1506,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
+@@ -1469,6 +1493,15 @@ SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode,
                goto out;
        }
  
                goto out;
        }
  
@@ -96632,7 +96116,7 @@ index 0143995..b294728 100644
                err = -EPERM;
                goto out;
 diff --git a/mm/mlock.c b/mm/mlock.c
                err = -EPERM;
                goto out;
 diff --git a/mm/mlock.c b/mm/mlock.c
-index ce84cb0..6d5a9aa 100644
+index 73cf098..ab547c7 100644
 --- a/mm/mlock.c
 +++ b/mm/mlock.c
 @@ -14,6 +14,7 @@
 --- a/mm/mlock.c
 +++ b/mm/mlock.c
 @@ -14,6 +14,7 @@
@@ -96707,7 +96191,7 @@ index ce84cb0..6d5a9aa 100644
            capable(CAP_IPC_LOCK))
                ret = do_mlockall(flags);
 diff --git a/mm/mmap.c b/mm/mmap.c
            capable(CAP_IPC_LOCK))
                ret = do_mlockall(flags);
 diff --git a/mm/mmap.c b/mm/mmap.c
-index ebc25fa..0ef0db0 100644
+index ae91989..d8308c7 100644
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
 @@ -41,6 +41,7 @@
 --- a/mm/mmap.c
 +++ b/mm/mmap.c
 @@ -41,6 +41,7 @@
@@ -96764,7 +96248,7 @@ index ebc25fa..0ef0db0 100644
  }
  EXPORT_SYMBOL(vm_get_page_prot);
  
  }
  EXPORT_SYMBOL(vm_get_page_prot);
  
-@@ -95,6 +115,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly;
+@@ -114,6 +134,7 @@ unsigned long sysctl_overcommit_kbytes __read_mostly;
  int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
  unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */
  unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */
  int sysctl_max_map_count __read_mostly = DEFAULT_MAX_MAP_COUNT;
  unsigned long sysctl_user_reserve_kbytes __read_mostly = 1UL << 17; /* 128MB */
  unsigned long sysctl_admin_reserve_kbytes __read_mostly = 1UL << 13; /* 8MB */
@@ -96772,7 +96256,7 @@ index ebc25fa..0ef0db0 100644
  /*
   * Make sure vm_committed_as in one cacheline and not cacheline shared with
   * other variables. It can be updated by several CPUs frequently.
  /*
   * Make sure vm_committed_as in one cacheline and not cacheline shared with
   * other variables. It can be updated by several CPUs frequently.
-@@ -255,6 +276,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+@@ -274,6 +295,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
        struct vm_area_struct *next = vma->vm_next;
  
        might_sleep();
        struct vm_area_struct *next = vma->vm_next;
  
        might_sleep();
@@ -96780,20 +96264,30 @@ index ebc25fa..0ef0db0 100644
        if (vma->vm_ops && vma->vm_ops->close)
                vma->vm_ops->close(vma);
        if (vma->vm_file)
        if (vma->vm_ops && vma->vm_ops->close)
                vma->vm_ops->close(vma);
        if (vma->vm_file)
-@@ -299,6 +321,12 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
+@@ -287,6 +309,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len);
+ SYSCALL_DEFINE1(brk, unsigned long, brk)
+ {
++      unsigned long rlim;
+       unsigned long retval;
+       unsigned long newbrk, oldbrk;
+       struct mm_struct *mm = current->mm;
+@@ -317,7 +340,13 @@ SYSCALL_DEFINE1(brk, unsigned long, brk)
+        * segment grow beyond its set limit the in case where the limit is
         * not page aligned -Ram Gupta
         */
         * not page aligned -Ram Gupta
         */
-       rlim = rlimit(RLIMIT_DATA);
+-      if (check_data_rlimit(rlimit(RLIMIT_DATA), brk, mm->start_brk,
++      rlim = rlimit(RLIMIT_DATA);
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      /* force a minimum 16MB brk heap on setuid/setgid binaries */
 +      if (rlim < PAGE_SIZE && (get_dumpable(mm) != SUID_DUMP_USER) && gr_is_global_nonroot(current_uid()))
 +              rlim = 4096 * PAGE_SIZE;
 +#endif
 +#ifdef CONFIG_GRKERNSEC_PROC_MEMMAP
 +      /* force a minimum 16MB brk heap on setuid/setgid binaries */
 +      if (rlim < PAGE_SIZE && (get_dumpable(mm) != SUID_DUMP_USER) && gr_is_global_nonroot(current_uid()))
 +              rlim = 4096 * PAGE_SIZE;
 +#endif
-+      gr_learn_resource(current, RLIMIT_DATA, (brk - mm->start_brk) + (mm->end_data - mm->start_data), 1);
-       if (rlim < RLIM_INFINITY && (brk - mm->start_brk) +
-                       (mm->end_data - mm->start_data) > rlim)
++      if (check_data_rlimit(rlim, brk, mm->start_brk,
+                             mm->end_data, mm->start_data))
                goto out;
                goto out;
-@@ -949,6 +977,12 @@ static int
+@@ -976,6 +1005,12 @@ static int
  can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
        struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
  {
  can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
        struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
  {
@@ -96806,7 +96300,7 @@ index ebc25fa..0ef0db0 100644
        if (is_mergeable_vma(vma, file, vm_flags) &&
            is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
                if (vma->vm_pgoff == vm_pgoff)
        if (is_mergeable_vma(vma, file, vm_flags) &&
            is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
                if (vma->vm_pgoff == vm_pgoff)
-@@ -968,6 +1002,12 @@ static int
+@@ -995,6 +1030,12 @@ static int
  can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
        struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
  {
  can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
        struct anon_vma *anon_vma, struct file *file, pgoff_t vm_pgoff)
  {
@@ -96819,15 +96313,7 @@ index ebc25fa..0ef0db0 100644
        if (is_mergeable_vma(vma, file, vm_flags) &&
            is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
                pgoff_t vm_pglen;
        if (is_mergeable_vma(vma, file, vm_flags) &&
            is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
                pgoff_t vm_pglen;
-@@ -1010,13 +1050,20 @@ can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
- struct vm_area_struct *vma_merge(struct mm_struct *mm,
-                       struct vm_area_struct *prev, unsigned long addr,
-                       unsigned long end, unsigned long vm_flags,
--                      struct anon_vma *anon_vma, struct file *file,
-+                      struct anon_vma *anon_vma, struct file *file,
-                       pgoff_t pgoff, struct mempolicy *policy)
- {
-       pgoff_t pglen = (end - addr) >> PAGE_SHIFT;
+@@ -1044,6 +1085,13 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
        struct vm_area_struct *area, *next;
        int err;
  
        struct vm_area_struct *area, *next;
        int err;
  
@@ -96841,7 +96327,7 @@ index ebc25fa..0ef0db0 100644
        /*
         * We later require that vma->vm_flags == vm_flags,
         * so this tests vma->vm_flags & VM_SPECIAL, too.
        /*
         * We later require that vma->vm_flags == vm_flags,
         * so this tests vma->vm_flags & VM_SPECIAL, too.
-@@ -1032,6 +1079,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -1059,6 +1107,15 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
        if (next && next->vm_end == end)                /* cases 6, 7, 8 */
                next = next->vm_next;
  
        if (next && next->vm_end == end)                /* cases 6, 7, 8 */
                next = next->vm_next;
  
@@ -96857,7 +96343,7 @@ index ebc25fa..0ef0db0 100644
        /*
         * Can it merge with the predecessor?
         */
        /*
         * Can it merge with the predecessor?
         */
-@@ -1051,9 +1107,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+@@ -1078,9 +1135,24 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
                                                        /* cases 1, 6 */
                        err = vma_adjust(prev, prev->vm_start,
                                next->vm_end, prev->vm_pgoff, NULL);
                                                        /* cases 1, 6 */
                        err = vma_adjust(prev, prev->vm_start,
                                next->vm_end, prev->vm_pgoff, NULL);
@@ -96883,8 +96369,8 @@ index ebc25fa..0ef0db0 100644
                if (err)
                        return NULL;
                khugepaged_enter_vma_merge(prev, vm_flags);
                if (err)
                        return NULL;
                khugepaged_enter_vma_merge(prev, vm_flags);
-@@ -1067,12 +1138,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
-                       mpol_equal(policy, vma_policy(next)) &&
+@@ -1094,12 +1166,27 @@ struct vm_area_struct *vma_merge(struct mm_struct *mm,
+                       mpol_equal(policy, vma_policy(next)) &&
                        can_vma_merge_before(next, vm_flags,
                                        anon_vma, file, pgoff+pglen)) {
 -              if (prev && addr < prev->vm_end)        /* case 4 */
                        can_vma_merge_before(next, vm_flags,
                                        anon_vma, file, pgoff+pglen)) {
 -              if (prev && addr < prev->vm_end)        /* case 4 */
@@ -96913,7 +96399,7 @@ index ebc25fa..0ef0db0 100644
                if (err)
                        return NULL;
                khugepaged_enter_vma_merge(area, vm_flags);
                if (err)
                        return NULL;
                khugepaged_enter_vma_merge(area, vm_flags);
-@@ -1181,8 +1267,10 @@ none:
+@@ -1208,8 +1295,10 @@ none:
  void vm_stat_account(struct mm_struct *mm, unsigned long flags,
                                                struct file *file, long pages)
  {
  void vm_stat_account(struct mm_struct *mm, unsigned long flags,
                                                struct file *file, long pages)
  {
@@ -96926,7 +96412,7 @@ index ebc25fa..0ef0db0 100644
  
        mm->total_vm += pages;
  
  
        mm->total_vm += pages;
  
-@@ -1190,7 +1278,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags,
+@@ -1217,7 +1306,7 @@ void vm_stat_account(struct mm_struct *mm, unsigned long flags,
                mm->shared_vm += pages;
                if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC)
                        mm->exec_vm += pages;
                mm->shared_vm += pages;
                if ((flags & (VM_EXEC|VM_WRITE)) == VM_EXEC)
                        mm->exec_vm += pages;
@@ -96935,7 +96421,7 @@ index ebc25fa..0ef0db0 100644
                mm->stack_vm += pages;
  }
  #endif /* CONFIG_PROC_FS */
                mm->stack_vm += pages;
  }
  #endif /* CONFIG_PROC_FS */
-@@ -1220,6 +1308,7 @@ static inline int mlock_future_check(struct mm_struct *mm,
+@@ -1247,6 +1336,7 @@ static inline int mlock_future_check(struct mm_struct *mm,
                locked += mm->locked_vm;
                lock_limit = rlimit(RLIMIT_MEMLOCK);
                lock_limit >>= PAGE_SHIFT;
                locked += mm->locked_vm;
                lock_limit = rlimit(RLIMIT_MEMLOCK);
                lock_limit >>= PAGE_SHIFT;
@@ -96943,7 +96429,7 @@ index ebc25fa..0ef0db0 100644
                if (locked > lock_limit && !capable(CAP_IPC_LOCK))
                        return -EAGAIN;
        }
                if (locked > lock_limit && !capable(CAP_IPC_LOCK))
                        return -EAGAIN;
        }
-@@ -1246,7 +1335,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -1273,7 +1363,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
         * (the exception is when the underlying filesystem is noexec
         *  mounted, in which case we dont add PROT_EXEC.)
         */
         * (the exception is when the underlying filesystem is noexec
         *  mounted, in which case we dont add PROT_EXEC.)
         */
@@ -96952,7 +96438,7 @@ index ebc25fa..0ef0db0 100644
                if (!(file && (file->f_path.mnt->mnt_flags & MNT_NOEXEC)))
                        prot |= PROT_EXEC;
  
                if (!(file && (file->f_path.mnt->mnt_flags & MNT_NOEXEC)))
                        prot |= PROT_EXEC;
  
-@@ -1272,7 +1361,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -1299,7 +1389,7 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
        /* Obtain the address to map to. we verify (or select) it and ensure
         * that it represents a valid section of the address space.
         */
        /* Obtain the address to map to. we verify (or select) it and ensure
         * that it represents a valid section of the address space.
         */
@@ -96961,7 +96447,7 @@ index ebc25fa..0ef0db0 100644
        if (addr & ~PAGE_MASK)
                return addr;
  
        if (addr & ~PAGE_MASK)
                return addr;
  
-@@ -1283,6 +1372,43 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -1310,6 +1400,43 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
        vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) |
                        mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
  
        vm_flags = calc_vm_prot_bits(prot) | calc_vm_flag_bits(flags) |
                        mm->def_flags | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
  
@@ -97005,7 +96491,7 @@ index ebc25fa..0ef0db0 100644
        if (flags & MAP_LOCKED)
                if (!can_do_mlock())
                        return -EPERM;
        if (flags & MAP_LOCKED)
                if (!can_do_mlock())
                        return -EPERM;
-@@ -1370,6 +1496,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
+@@ -1397,6 +1524,9 @@ unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
                        vm_flags |= VM_NORESERVE;
        }
  
                        vm_flags |= VM_NORESERVE;
        }
  
@@ -97015,7 +96501,7 @@ index ebc25fa..0ef0db0 100644
        addr = mmap_region(file, addr, len, vm_flags, pgoff);
        if (!IS_ERR_VALUE(addr) &&
            ((vm_flags & VM_LOCKED) ||
        addr = mmap_region(file, addr, len, vm_flags, pgoff);
        if (!IS_ERR_VALUE(addr) &&
            ((vm_flags & VM_LOCKED) ||
-@@ -1463,7 +1592,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma)
+@@ -1490,7 +1620,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma)
        vm_flags_t vm_flags = vma->vm_flags;
  
        /* If it was private or non-writable, the write bit is already clear */
        vm_flags_t vm_flags = vma->vm_flags;
  
        /* If it was private or non-writable, the write bit is already clear */
@@ -97024,7 +96510,7 @@ index ebc25fa..0ef0db0 100644
                return 0;
  
        /* The backer wishes to know when pages are first written to? */
                return 0;
  
        /* The backer wishes to know when pages are first written to? */
-@@ -1509,7 +1638,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1541,7 +1671,22 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
        struct rb_node **rb_link, *rb_parent;
        unsigned long charged = 0;
  
        struct rb_node **rb_link, *rb_parent;
        unsigned long charged = 0;
  
@@ -97047,7 +96533,7 @@ index ebc25fa..0ef0db0 100644
        if (!may_expand_vm(mm, len >> PAGE_SHIFT)) {
                unsigned long nr_pages;
  
        if (!may_expand_vm(mm, len >> PAGE_SHIFT)) {
                unsigned long nr_pages;
  
-@@ -1528,11 +1672,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
+@@ -1560,11 +1705,10 @@ unsigned long mmap_region(struct file *file, unsigned long addr,
  
        /* Clear old maps */
        error = -ENOMEM;
  
        /* Clear old maps */
        error = -ENOMEM;
@@ -97060,7 +96546,7 @@ index ebc25fa..0ef0db0 100644
        }
  
        /*
        }
  
        /*
-@@ -1563,6 +1706,16 @@ munmap_back:
+@@ -1595,6 +1739,16 @@ munmap_back:
                goto unacct_error;
        }
  
                goto unacct_error;
        }
  
@@ -97077,7 +96563,7 @@ index ebc25fa..0ef0db0 100644
        vma->vm_mm = mm;
        vma->vm_start = addr;
        vma->vm_end = addr + len;
        vma->vm_mm = mm;
        vma->vm_start = addr;
        vma->vm_end = addr + len;
-@@ -1593,6 +1746,13 @@ munmap_back:
+@@ -1625,6 +1779,13 @@ munmap_back:
                if (error)
                        goto unmap_and_free_vma;
  
                if (error)
                        goto unmap_and_free_vma;
  
@@ -97091,7 +96577,7 @@ index ebc25fa..0ef0db0 100644
                /* Can addr have changed??
                 *
                 * Answer: Yes, several device drivers can do it in their
                /* Can addr have changed??
                 *
                 * Answer: Yes, several device drivers can do it in their
-@@ -1626,6 +1786,12 @@ munmap_back:
+@@ -1643,6 +1804,12 @@ munmap_back:
        }
  
        vma_link(mm, vma, prev, rb_link, rb_parent);
        }
  
        vma_link(mm, vma, prev, rb_link, rb_parent);
@@ -97104,7 +96590,7 @@ index ebc25fa..0ef0db0 100644
        /* Once vma denies write, undo our temporary denial count */
        if (file) {
                if (vm_flags & VM_SHARED)
        /* Once vma denies write, undo our temporary denial count */
        if (file) {
                if (vm_flags & VM_SHARED)
-@@ -1638,6 +1804,7 @@ out:
+@@ -1655,6 +1822,7 @@ out:
        perf_event_mmap(vma);
  
        vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
        perf_event_mmap(vma);
  
        vm_stat_account(mm, vm_flags, file, len >> PAGE_SHIFT);
@@ -97112,7 +96598,7 @@ index ebc25fa..0ef0db0 100644
        if (vm_flags & VM_LOCKED) {
                if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) ||
                                        vma == get_gate_vma(current->mm)))
        if (vm_flags & VM_LOCKED) {
                if (!((vm_flags & VM_SPECIAL) || is_vm_hugetlb_page(vma) ||
                                        vma == get_gate_vma(current->mm)))
-@@ -1673,6 +1840,12 @@ allow_write_and_free_vma:
+@@ -1692,6 +1860,12 @@ allow_write_and_free_vma:
        if (vm_flags & VM_DENYWRITE)
                allow_write_access(file);
  free_vma:
        if (vm_flags & VM_DENYWRITE)
                allow_write_access(file);
  free_vma:
@@ -97125,7 +96611,7 @@ index ebc25fa..0ef0db0 100644
        kmem_cache_free(vm_area_cachep, vma);
  unacct_error:
        if (charged)
        kmem_cache_free(vm_area_cachep, vma);
  unacct_error:
        if (charged)
-@@ -1680,7 +1853,63 @@ unacct_error:
+@@ -1699,7 +1873,63 @@ unacct_error:
        return error;
  }
  
        return error;
  }
  
@@ -97190,7 +96676,7 @@ index ebc25fa..0ef0db0 100644
  {
        /*
         * We implement the search by looking for an rbtree node that
  {
        /*
         * We implement the search by looking for an rbtree node that
-@@ -1728,11 +1957,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
+@@ -1747,11 +1977,29 @@ unsigned long unmapped_area(struct vm_unmapped_area_info *info)
                        }
                }
  
                        }
                }
  
@@ -97221,7 +96707,7 @@ index ebc25fa..0ef0db0 100644
                if (gap_end >= low_limit && gap_end - gap_start >= length)
                        goto found;
  
                if (gap_end >= low_limit && gap_end - gap_start >= length)
                        goto found;
  
-@@ -1782,7 +2029,7 @@ found:
+@@ -1801,7 +2049,7 @@ found:
        return gap_start;
  }
  
        return gap_start;
  }
  
@@ -97230,7 +96716,7 @@ index ebc25fa..0ef0db0 100644
  {
        struct mm_struct *mm = current->mm;
        struct vm_area_struct *vma;
  {
        struct mm_struct *mm = current->mm;
        struct vm_area_struct *vma;
-@@ -1836,6 +2083,24 @@ check_current:
+@@ -1855,6 +2103,24 @@ check_current:
                gap_end = vma->vm_start;
                if (gap_end < low_limit)
                        return -ENOMEM;
                gap_end = vma->vm_start;
                if (gap_end < low_limit)
                        return -ENOMEM;
@@ -97255,7 +96741,7 @@ index ebc25fa..0ef0db0 100644
                if (gap_start <= high_limit && gap_end - gap_start >= length)
                        goto found;
  
                if (gap_start <= high_limit && gap_end - gap_start >= length)
                        goto found;
  
-@@ -1899,6 +2164,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1918,6 +2184,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
        struct mm_struct *mm = current->mm;
        struct vm_area_struct *vma;
        struct vm_unmapped_area_info info;
        struct mm_struct *mm = current->mm;
        struct vm_area_struct *vma;
        struct vm_unmapped_area_info info;
@@ -97263,7 +96749,7 @@ index ebc25fa..0ef0db0 100644
  
        if (len > TASK_SIZE - mmap_min_addr)
                return -ENOMEM;
  
        if (len > TASK_SIZE - mmap_min_addr)
                return -ENOMEM;
-@@ -1906,11 +2172,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1925,11 +2192,15 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
        if (flags & MAP_FIXED)
                return addr;
  
        if (flags & MAP_FIXED)
                return addr;
  
@@ -97280,15 +96766,15 @@ index ebc25fa..0ef0db0 100644
                        return addr;
        }
  
                        return addr;
        }
  
-@@ -1919,6 +2189,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
+@@ -1938,6 +2209,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
        info.low_limit = mm->mmap_base;
        info.high_limit = TASK_SIZE;
        info.align_mask = 0;
 +      info.threadstack_offset = offset;
        return vm_unmapped_area(&info);
  }
        info.low_limit = mm->mmap_base;
        info.high_limit = TASK_SIZE;
        info.align_mask = 0;
 +      info.threadstack_offset = offset;
        return vm_unmapped_area(&info);
  }
- #endif        
-@@ -1937,6 +2208,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+ #endif
+@@ -1956,6 +2228,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
        struct mm_struct *mm = current->mm;
        unsigned long addr = addr0;
        struct vm_unmapped_area_info info;
        struct mm_struct *mm = current->mm;
        unsigned long addr = addr0;
        struct vm_unmapped_area_info info;
@@ -97296,7 +96782,7 @@ index ebc25fa..0ef0db0 100644
  
        /* requested length too big for entire address space */
        if (len > TASK_SIZE - mmap_min_addr)
  
        /* requested length too big for entire address space */
        if (len > TASK_SIZE - mmap_min_addr)
-@@ -1945,12 +2217,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1964,12 +2237,16 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
        if (flags & MAP_FIXED)
                return addr;
  
        if (flags & MAP_FIXED)
                return addr;
  
@@ -97314,7 +96800,7 @@ index ebc25fa..0ef0db0 100644
                        return addr;
        }
  
                        return addr;
        }
  
-@@ -1959,6 +2235,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1978,6 +2255,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
        info.low_limit = max(PAGE_SIZE, mmap_min_addr);
        info.high_limit = mm->mmap_base;
        info.align_mask = 0;
        info.low_limit = max(PAGE_SIZE, mmap_min_addr);
        info.high_limit = mm->mmap_base;
        info.align_mask = 0;
@@ -97322,7 +96808,7 @@ index ebc25fa..0ef0db0 100644
        addr = vm_unmapped_area(&info);
  
        /*
        addr = vm_unmapped_area(&info);
  
        /*
-@@ -1971,6 +2248,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -1990,6 +2268,12 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
                VM_BUG_ON(addr != -ENOMEM);
                info.flags = 0;
                info.low_limit = TASK_UNMAPPED_BASE;
                VM_BUG_ON(addr != -ENOMEM);
                info.flags = 0;
                info.low_limit = TASK_UNMAPPED_BASE;
@@ -97335,7 +96821,7 @@ index ebc25fa..0ef0db0 100644
                info.high_limit = TASK_SIZE;
                addr = vm_unmapped_area(&info);
        }
                info.high_limit = TASK_SIZE;
                addr = vm_unmapped_area(&info);
        }
-@@ -2071,6 +2354,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
+@@ -2090,6 +2374,28 @@ find_vma_prev(struct mm_struct *mm, unsigned long addr,
        return vma;
  }
  
        return vma;
  }
  
@@ -97364,7 +96850,7 @@ index ebc25fa..0ef0db0 100644
  /*
   * Verify that the stack growth is acceptable and
   * update accounting. This is shared with both the
  /*
   * Verify that the stack growth is acceptable and
   * update accounting. This is shared with both the
-@@ -2087,6 +2392,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2106,6 +2412,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
                return -ENOMEM;
  
        /* Stack limit test */
                return -ENOMEM;
  
        /* Stack limit test */
@@ -97372,7 +96858,7 @@ index ebc25fa..0ef0db0 100644
        if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
                return -ENOMEM;
  
        if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur))
                return -ENOMEM;
  
-@@ -2097,6 +2403,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2116,6 +2423,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
                locked = mm->locked_vm + grow;
                limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur);
                limit >>= PAGE_SHIFT;
                locked = mm->locked_vm + grow;
                limit = ACCESS_ONCE(rlim[RLIMIT_MEMLOCK].rlim_cur);
                limit >>= PAGE_SHIFT;
@@ -97380,7 +96866,7 @@ index ebc25fa..0ef0db0 100644
                if (locked > limit && !capable(CAP_IPC_LOCK))
                        return -ENOMEM;
        }
                if (locked > limit && !capable(CAP_IPC_LOCK))
                        return -ENOMEM;
        }
-@@ -2126,37 +2433,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
+@@ -2145,37 +2453,48 @@ static int acct_stack_growth(struct vm_area_struct *vma, unsigned long size, uns
   * PA-RISC uses this for its stack; IA64 for its Register Backing Store.
   * vma is the last one with address > vma->vm_end.  Have to extend vma.
   */
   * PA-RISC uses this for its stack; IA64 for its Register Backing Store.
   * vma is the last one with address > vma->vm_end.  Have to extend vma.
   */
@@ -97438,7 +96924,7 @@ index ebc25fa..0ef0db0 100644
                unsigned long size, grow;
  
                size = address - vma->vm_start;
                unsigned long size, grow;
  
                size = address - vma->vm_start;
-@@ -2191,6 +2509,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
+@@ -2210,6 +2529,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
                        }
                }
        }
                        }
                }
        }
@@ -97447,7 +96933,7 @@ index ebc25fa..0ef0db0 100644
        vma_unlock_anon_vma(vma);
        khugepaged_enter_vma_merge(vma, vma->vm_flags);
        validate_mm(vma->vm_mm);
        vma_unlock_anon_vma(vma);
        khugepaged_enter_vma_merge(vma, vma->vm_flags);
        validate_mm(vma->vm_mm);
-@@ -2205,6 +2525,8 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2224,6 +2545,8 @@ int expand_downwards(struct vm_area_struct *vma,
                                   unsigned long address)
  {
        int error;
                                   unsigned long address)
  {
        int error;
@@ -97456,7 +96942,7 @@ index ebc25fa..0ef0db0 100644
  
        /*
         * We must make sure the anon_vma is allocated
  
        /*
         * We must make sure the anon_vma is allocated
-@@ -2218,6 +2540,15 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2237,6 +2560,15 @@ int expand_downwards(struct vm_area_struct *vma,
        if (error)
                return error;
  
        if (error)
                return error;
  
@@ -97472,7 +96958,7 @@ index ebc25fa..0ef0db0 100644
        vma_lock_anon_vma(vma);
  
        /*
        vma_lock_anon_vma(vma);
  
        /*
-@@ -2227,9 +2558,17 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2246,9 +2578,17 @@ int expand_downwards(struct vm_area_struct *vma,
         */
  
        /* Somebody else might have raced and expanded it already */
         */
  
        /* Somebody else might have raced and expanded it already */
@@ -97491,7 +96977,7 @@ index ebc25fa..0ef0db0 100644
                size = vma->vm_end - address;
                grow = (vma->vm_start - address) >> PAGE_SHIFT;
  
                size = vma->vm_end - address;
                grow = (vma->vm_start - address) >> PAGE_SHIFT;
  
-@@ -2254,13 +2593,27 @@ int expand_downwards(struct vm_area_struct *vma,
+@@ -2273,13 +2613,27 @@ int expand_downwards(struct vm_area_struct *vma,
                                vma->vm_pgoff -= grow;
                                anon_vma_interval_tree_post_update_vma(vma);
                                vma_gap_update(vma);
                                vma->vm_pgoff -= grow;
                                anon_vma_interval_tree_post_update_vma(vma);
                                vma_gap_update(vma);
@@ -97519,7 +97005,7 @@ index ebc25fa..0ef0db0 100644
        khugepaged_enter_vma_merge(vma, vma->vm_flags);
        validate_mm(vma->vm_mm);
        return error;
        khugepaged_enter_vma_merge(vma, vma->vm_flags);
        validate_mm(vma->vm_mm);
        return error;
-@@ -2358,6 +2711,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2377,6 +2731,13 @@ static void remove_vma_list(struct mm_struct *mm, struct vm_area_struct *vma)
        do {
                long nrpages = vma_pages(vma);
  
        do {
                long nrpages = vma_pages(vma);
  
@@ -97533,7 +97019,7 @@ index ebc25fa..0ef0db0 100644
                if (vma->vm_flags & VM_ACCOUNT)
                        nr_accounted += nrpages;
                vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages);
                if (vma->vm_flags & VM_ACCOUNT)
                        nr_accounted += nrpages;
                vm_stat_account(mm, vma->vm_flags, vma->vm_file, -nrpages);
-@@ -2402,6 +2762,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2421,6 +2782,16 @@ detach_vmas_to_be_unmapped(struct mm_struct *mm, struct vm_area_struct *vma,
        insertion_point = (prev ? &prev->vm_next : &mm->mmap);
        vma->vm_prev = NULL;
        do {
        insertion_point = (prev ? &prev->vm_next : &mm->mmap);
        vma->vm_prev = NULL;
        do {
@@ -97550,7 +97036,7 @@ index ebc25fa..0ef0db0 100644
                vma_rb_erase(vma, &mm->mm_rb);
                mm->map_count--;
                tail_vma = vma;
                vma_rb_erase(vma, &mm->mm_rb);
                mm->map_count--;
                tail_vma = vma;
-@@ -2429,14 +2799,33 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -2448,14 +2819,33 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
        struct vm_area_struct *new;
        int err = -ENOMEM;
  
        struct vm_area_struct *new;
        int err = -ENOMEM;
  
@@ -97584,7 +97070,7 @@ index ebc25fa..0ef0db0 100644
        /* most fields are the same, copy all, and then fixup */
        *new = *vma;
  
        /* most fields are the same, copy all, and then fixup */
        *new = *vma;
  
-@@ -2449,6 +2838,22 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -2468,6 +2858,22 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
                new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
        }
  
                new->vm_pgoff += ((addr - vma->vm_start) >> PAGE_SHIFT);
        }
  
@@ -97607,7 +97093,7 @@ index ebc25fa..0ef0db0 100644
        err = vma_dup_policy(vma, new);
        if (err)
                goto out_free_vma;
        err = vma_dup_policy(vma, new);
        if (err)
                goto out_free_vma;
-@@ -2468,6 +2873,38 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -2488,6 +2894,38 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
        else
                err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
        else
                err = vma_adjust(vma, vma->vm_start, addr, vma->vm_pgoff, new);
  
@@ -97646,7 +97132,7 @@ index ebc25fa..0ef0db0 100644
        /* Success. */
        if (!err)
                return 0;
        /* Success. */
        if (!err)
                return 0;
-@@ -2477,10 +2914,18 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -2497,10 +2935,18 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
                new->vm_ops->close(new);
        if (new->vm_file)
                fput(new->vm_file);
                new->vm_ops->close(new);
        if (new->vm_file)
                fput(new->vm_file);
@@ -97666,7 +97152,7 @@ index ebc25fa..0ef0db0 100644
        kmem_cache_free(vm_area_cachep, new);
   out_err:
        return err;
        kmem_cache_free(vm_area_cachep, new);
   out_err:
        return err;
-@@ -2493,6 +2938,15 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma,
+@@ -2513,6 +2959,15 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
  int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
              unsigned long addr, int new_below)
  {
  int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
              unsigned long addr, int new_below)
  {
@@ -97682,7 +97168,7 @@ index ebc25fa..0ef0db0 100644
        if (mm->map_count >= sysctl_max_map_count)
                return -ENOMEM;
  
        if (mm->map_count >= sysctl_max_map_count)
                return -ENOMEM;
  
-@@ -2504,11 +2958,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2524,11 +2979,30 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
   * work.  This now handles partial unmappings.
   * Jeremy Fitzhardinge <jeremy@goop.org>
   */
   * work.  This now handles partial unmappings.
   * Jeremy Fitzhardinge <jeremy@goop.org>
   */
@@ -97713,7 +97199,7 @@ index ebc25fa..0ef0db0 100644
        if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start)
                return -EINVAL;
  
        if ((start & ~PAGE_MASK) || start > TASK_SIZE || len > TASK_SIZE-start)
                return -EINVAL;
  
-@@ -2583,6 +3056,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
+@@ -2604,6 +3078,8 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len)
        /* Fix up all other VM information */
        remove_vma_list(mm, vma);
  
        /* Fix up all other VM information */
        remove_vma_list(mm, vma);
  
@@ -97722,7 +97208,7 @@ index ebc25fa..0ef0db0 100644
        return 0;
  }
  
        return 0;
  }
  
-@@ -2591,6 +3066,13 @@ int vm_munmap(unsigned long start, size_t len)
+@@ -2612,6 +3088,13 @@ int vm_munmap(unsigned long start, size_t len)
        int ret;
        struct mm_struct *mm = current->mm;
  
        int ret;
        struct mm_struct *mm = current->mm;
  
@@ -97736,7 +97222,7 @@ index ebc25fa..0ef0db0 100644
        down_write(&mm->mmap_sem);
        ret = do_munmap(mm, start, len);
        up_write(&mm->mmap_sem);
        down_write(&mm->mmap_sem);
        ret = do_munmap(mm, start, len);
        up_write(&mm->mmap_sem);
-@@ -2604,16 +3086,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
+@@ -2625,16 +3108,6 @@ SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len)
        return vm_munmap(addr, len);
  }
  
        return vm_munmap(addr, len);
  }
  
@@ -97753,15 +97239,15 @@ index ebc25fa..0ef0db0 100644
  /*
   *  this is really a simplified "do_mmap".  it only handles
   *  anonymous maps.  eventually we may be able to do some
  /*
   *  this is really a simplified "do_mmap".  it only handles
   *  anonymous maps.  eventually we may be able to do some
-@@ -2627,6 +3099,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
-       struct rb_node ** rb_link, * rb_parent;
+@@ -2648,6 +3121,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+       struct rb_node **rb_link, *rb_parent;
        pgoff_t pgoff = addr >> PAGE_SHIFT;
        int error;
 +      unsigned long charged;
  
        len = PAGE_ALIGN(len);
        if (!len)
        pgoff_t pgoff = addr >> PAGE_SHIFT;
        int error;
 +      unsigned long charged;
  
        len = PAGE_ALIGN(len);
        if (!len)
-@@ -2634,10 +3107,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2655,10 +3129,24 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
  
        flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
  
  
        flags = VM_DATA_DEFAULT_FLAGS | VM_ACCOUNT | mm->def_flags;
  
@@ -97786,7 +97272,7 @@ index ebc25fa..0ef0db0 100644
        error = mlock_future_check(mm, mm->def_flags, len);
        if (error)
                return error;
        error = mlock_future_check(mm, mm->def_flags, len);
        if (error)
                return error;
-@@ -2651,21 +3138,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2672,21 +3160,20 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
        /*
         * Clear old maps.  this also does some error checking for us
         */
        /*
         * Clear old maps.  this also does some error checking for us
         */
@@ -97811,7 +97297,7 @@ index ebc25fa..0ef0db0 100644
                return -ENOMEM;
  
        /* Can we just expand an old private anonymous mapping? */
                return -ENOMEM;
  
        /* Can we just expand an old private anonymous mapping? */
-@@ -2679,7 +3165,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2700,7 +3187,7 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
         */
        vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
        if (!vma) {
         */
        vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
        if (!vma) {
@@ -97820,7 +97306,7 @@ index ebc25fa..0ef0db0 100644
                return -ENOMEM;
        }
  
                return -ENOMEM;
        }
  
-@@ -2693,10 +3179,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
+@@ -2714,10 +3201,11 @@ static unsigned long do_brk(unsigned long addr, unsigned long len)
        vma_link(mm, vma, prev, rb_link, rb_parent);
  out:
        perf_event_mmap(vma);
        vma_link(mm, vma, prev, rb_link, rb_parent);
  out:
        perf_event_mmap(vma);
@@ -97834,7 +97320,7 @@ index ebc25fa..0ef0db0 100644
        return addr;
  }
  
        return addr;
  }
  
-@@ -2758,6 +3245,7 @@ void exit_mmap(struct mm_struct *mm)
+@@ -2779,6 +3267,7 @@ void exit_mmap(struct mm_struct *mm)
        while (vma) {
                if (vma->vm_flags & VM_ACCOUNT)
                        nr_accounted += vma_pages(vma);
        while (vma) {
                if (vma->vm_flags & VM_ACCOUNT)
                        nr_accounted += vma_pages(vma);
@@ -97842,7 +97328,7 @@ index ebc25fa..0ef0db0 100644
                vma = remove_vma(vma);
        }
        vm_unacct_memory(nr_accounted);
                vma = remove_vma(vma);
        }
        vm_unacct_memory(nr_accounted);
-@@ -2775,6 +3263,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2796,6 +3285,13 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
        struct vm_area_struct *prev;
        struct rb_node **rb_link, *rb_parent;
  
        struct vm_area_struct *prev;
        struct rb_node **rb_link, *rb_parent;
  
@@ -97856,7 +97342,7 @@ index ebc25fa..0ef0db0 100644
        /*
         * The vm_pgoff of a purely anonymous vma should be irrelevant
         * until its first write fault, when page's anon_vma and index
        /*
         * The vm_pgoff of a purely anonymous vma should be irrelevant
         * until its first write fault, when page's anon_vma and index
-@@ -2798,7 +3293,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
+@@ -2819,7 +3315,21 @@ int insert_vm_struct(struct mm_struct *mm, struct vm_area_struct *vma)
             security_vm_enough_memory_mm(mm, vma_pages(vma)))
                return -ENOMEM;
  
             security_vm_enough_memory_mm(mm, vma_pages(vma)))
                return -ENOMEM;
  
@@ -97878,7 +97364,7 @@ index ebc25fa..0ef0db0 100644
        return 0;
  }
  
        return 0;
  }
  
-@@ -2817,6 +3326,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -2838,6 +3348,8 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
        struct rb_node **rb_link, *rb_parent;
        bool faulted_in_anon_vma = true;
  
        struct rb_node **rb_link, *rb_parent;
        bool faulted_in_anon_vma = true;
  
@@ -97887,7 +97373,7 @@ index ebc25fa..0ef0db0 100644
        /*
         * If anonymous vma has not yet been faulted, update new pgoff
         * to match new location, to increase its chance of merging.
        /*
         * If anonymous vma has not yet been faulted, update new pgoff
         * to match new location, to increase its chance of merging.
-@@ -2881,6 +3392,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+@@ -2902,6 +3414,39 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
        return NULL;
  }
  
        return NULL;
  }
  
@@ -97927,7 +97413,7 @@ index ebc25fa..0ef0db0 100644
  /*
   * Return true if the calling process may expand its vm space by the passed
   * number of pages
  /*
   * Return true if the calling process may expand its vm space by the passed
   * number of pages
-@@ -2892,6 +3436,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages)
+@@ -2913,6 +3458,7 @@ int may_expand_vm(struct mm_struct *mm, unsigned long npages)
  
        lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT;
  
  
        lim = rlimit(RLIMIT_AS) >> PAGE_SHIFT;
  
@@ -97935,7 +97421,7 @@ index ebc25fa..0ef0db0 100644
        if (cur + npages > lim)
                return 0;
        return 1;
        if (cur + npages > lim)
                return 0;
        return 1;
-@@ -2974,6 +3519,22 @@ static struct vm_area_struct *__install_special_mapping(
+@@ -2995,6 +3541,22 @@ static struct vm_area_struct *__install_special_mapping(
        vma->vm_start = addr;
        vma->vm_end = addr + len;
  
        vma->vm_start = addr;
        vma->vm_end = addr + len;
  
@@ -97959,7 +97445,7 @@ index ebc25fa..0ef0db0 100644
        vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
  
 diff --git a/mm/mprotect.c b/mm/mprotect.c
        vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
  
 diff --git a/mm/mprotect.c b/mm/mprotect.c
-index c43d557..0b7ccd2 100644
+index ace9345..63320dc 100644
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
 @@ -24,10 +24,18 @@
 --- a/mm/mprotect.c
 +++ b/mm/mprotect.c
 @@ -24,10 +24,18 @@
@@ -97979,9 +97465,9 @@ index c43d557..0b7ccd2 100644
  #include <asm/tlbflush.h>
 +#include <asm/mmu_context.h>
  
  #include <asm/tlbflush.h>
 +#include <asm/mmu_context.h>
  
- #ifndef pgprot_modify
- static inline pgprot_t pgprot_modify(pgprot_t oldprot, pgprot_t newprot)
-@@ -256,6 +264,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
+ /*
+  * For a prot_numa update we only hold mmap_sem for read so there is a
+@@ -251,6 +259,48 @@ unsigned long change_protection(struct vm_area_struct *vma, unsigned long start,
        return pages;
  }
  
        return pages;
  }
  
@@ -98030,7 +97516,7 @@ index c43d557..0b7ccd2 100644
  int
  mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
        unsigned long start, unsigned long end, unsigned long newflags)
  int
  mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
        unsigned long start, unsigned long end, unsigned long newflags)
-@@ -268,11 +318,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
+@@ -263,11 +313,29 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
        int error;
        int dirty_accountable = 0;
  
        int error;
        int dirty_accountable = 0;
  
@@ -98060,7 +97546,7 @@ index c43d557..0b7ccd2 100644
        /*
         * If we make a private mapping writable we increase our commit;
         * but (without finer accounting) cannot reduce our commit if we
        /*
         * If we make a private mapping writable we increase our commit;
         * but (without finer accounting) cannot reduce our commit if we
-@@ -289,6 +357,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
+@@ -284,6 +352,42 @@ mprotect_fixup(struct vm_area_struct *vma, struct vm_area_struct **pprev,
                }
        }
  
                }
        }
  
@@ -98103,7 +97589,7 @@ index c43d557..0b7ccd2 100644
        /*
         * First try to merge with previous and/or next vma.
         */
        /*
         * First try to merge with previous and/or next vma.
         */
-@@ -319,9 +423,21 @@ success:
+@@ -314,7 +418,19 @@ success:
         * vm_flags and vm_page_prot are protected by the mmap_sem
         * held in write mode.
         */
         * vm_flags and vm_page_prot are protected by the mmap_sem
         * held in write mode.
         */
@@ -98120,13 +97606,10 @@ index c43d557..0b7ccd2 100644
 +              mm->binfmt->handle_mprotect(vma, newflags);
 +#endif
 +
 +              mm->binfmt->handle_mprotect(vma, newflags);
 +#endif
 +
-       vma->vm_page_prot = pgprot_modify(vma->vm_page_prot,
--                                        vm_get_page_prot(newflags));
-+                                        vm_get_page_prot(vma->vm_flags));
+       dirty_accountable = vma_wants_writenotify(vma);
+       vma_set_page_prot(vma);
  
  
-       if (vma_wants_writenotify(vma)) {
-               vma->vm_page_prot = vm_get_page_prot(newflags & ~VM_SHARED);
-@@ -360,6 +476,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -350,6 +466,17 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
        end = start + len;
        if (end <= start)
                return -ENOMEM;
        end = start + len;
        if (end <= start)
                return -ENOMEM;
@@ -98144,7 +97627,7 @@ index c43d557..0b7ccd2 100644
        if (!arch_validate_prot(prot))
                return -EINVAL;
  
        if (!arch_validate_prot(prot))
                return -EINVAL;
  
-@@ -367,7 +494,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -357,7 +484,7 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
        /*
         * Does the application expect PROT_READ to imply PROT_EXEC:
         */
        /*
         * Does the application expect PROT_READ to imply PROT_EXEC:
         */
@@ -98153,7 +97636,7 @@ index c43d557..0b7ccd2 100644
                prot |= PROT_EXEC;
  
        vm_flags = calc_vm_prot_bits(prot);
                prot |= PROT_EXEC;
  
        vm_flags = calc_vm_prot_bits(prot);
-@@ -399,6 +526,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -389,6 +516,11 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
        if (start > vma->vm_start)
                prev = vma;
  
        if (start > vma->vm_start)
                prev = vma;
  
@@ -98165,7 +97648,7 @@ index c43d557..0b7ccd2 100644
        for (nstart = start ; ; ) {
                unsigned long newflags;
  
        for (nstart = start ; ; ) {
                unsigned long newflags;
  
-@@ -409,6 +541,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -399,6 +531,14 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
  
                /* newflags >> 4 shift VM_MAY% in place of VM_% */
                if ((newflags & ~(newflags >> 4)) & (VM_READ | VM_WRITE | VM_EXEC)) {
  
                /* newflags >> 4 shift VM_MAY% in place of VM_% */
                if ((newflags & ~(newflags >> 4)) & (VM_READ | VM_WRITE | VM_EXEC)) {
@@ -98180,7 +97663,7 @@ index c43d557..0b7ccd2 100644
                        error = -EACCES;
                        goto out;
                }
                        error = -EACCES;
                        goto out;
                }
-@@ -423,6 +563,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
+@@ -413,6 +553,9 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len,
                error = mprotect_fixup(vma, &prev, nstart, tmp, newflags);
                if (error)
                        goto out;
                error = mprotect_fixup(vma, &prev, nstart, tmp, newflags);
                if (error)
                        goto out;
@@ -98191,7 +97674,7 @@ index c43d557..0b7ccd2 100644
  
                if (nstart < prev->vm_end)
 diff --git a/mm/mremap.c b/mm/mremap.c
  
                if (nstart < prev->vm_end)
 diff --git a/mm/mremap.c b/mm/mremap.c
-index 05f1180..c3cde48 100644
+index b147f66..98a695a 100644
 --- a/mm/mremap.c
 +++ b/mm/mremap.c
 @@ -144,6 +144,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
 --- a/mm/mremap.c
 +++ b/mm/mremap.c
 @@ -144,6 +144,12 @@ static void move_ptes(struct vm_area_struct *vma, pmd_t *old_pmd,
@@ -98207,7 +97690,7 @@ index 05f1180..c3cde48 100644
                pte = move_soft_dirty_pte(pte);
                set_pte_at(mm, new_addr, new_pte, pte);
        }
                pte = move_soft_dirty_pte(pte);
                set_pte_at(mm, new_addr, new_pte, pte);
        }
-@@ -344,6 +350,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
+@@ -345,6 +351,11 @@ static struct vm_area_struct *vma_to_resize(unsigned long addr,
        if (is_vm_hugetlb_page(vma))
                goto Einval;
  
        if (is_vm_hugetlb_page(vma))
                goto Einval;
  
@@ -98219,7 +97702,7 @@ index 05f1180..c3cde48 100644
        /* We can't remap across vm area boundaries */
        if (old_len > vma->vm_end - addr)
                goto Efault;
        /* We can't remap across vm area boundaries */
        if (old_len > vma->vm_end - addr)
                goto Efault;
-@@ -399,20 +410,25 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
+@@ -400,20 +411,25 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
        unsigned long ret = -EINVAL;
        unsigned long charged = 0;
        unsigned long map_flags;
        unsigned long ret = -EINVAL;
        unsigned long charged = 0;
        unsigned long map_flags;
@@ -98250,7 +97733,7 @@ index 05f1180..c3cde48 100644
                goto out;
  
        ret = do_munmap(mm, new_addr, new_len);
                goto out;
  
        ret = do_munmap(mm, new_addr, new_len);
-@@ -481,6 +497,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -482,6 +498,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
        unsigned long ret = -EINVAL;
        unsigned long charged = 0;
        bool locked = false;
        unsigned long ret = -EINVAL;
        unsigned long charged = 0;
        bool locked = false;
@@ -98258,7 +97741,7 @@ index 05f1180..c3cde48 100644
  
        if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
                return ret;
  
        if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
                return ret;
-@@ -502,6 +519,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -503,6 +520,17 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
        if (!new_len)
                return ret;
  
        if (!new_len)
                return ret;
  
@@ -98276,7 +97759,7 @@ index 05f1180..c3cde48 100644
        down_write(&current->mm->mmap_sem);
  
        if (flags & MREMAP_FIXED) {
        down_write(&current->mm->mmap_sem);
  
        if (flags & MREMAP_FIXED) {
-@@ -552,6 +580,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -553,6 +581,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
                                new_addr = addr;
                        }
                        ret = addr;
                                new_addr = addr;
                        }
                        ret = addr;
@@ -98284,7 +97767,7 @@ index 05f1180..c3cde48 100644
                        goto out;
                }
        }
                        goto out;
                }
        }
-@@ -575,7 +604,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
+@@ -576,7 +605,12 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
                        goto out;
                }
  
                        goto out;
                }
  
@@ -98298,7 +97781,7 @@ index 05f1180..c3cde48 100644
  out:
        if (ret & ~PAGE_MASK)
 diff --git a/mm/nommu.c b/mm/nommu.c
  out:
        if (ret & ~PAGE_MASK)
 diff --git a/mm/nommu.c b/mm/nommu.c
-index a881d96..e5932cd 100644
+index bd1808e..b63d87c 100644
 --- a/mm/nommu.c
 +++ b/mm/nommu.c
 @@ -70,7 +70,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT;
 --- a/mm/nommu.c
 +++ b/mm/nommu.c
 @@ -70,7 +70,6 @@ int sysctl_max_map_count = DEFAULT_MAX_MAP_COUNT;
@@ -98365,7 +97848,7 @@ index a881d96..e5932cd 100644
        struct mm_struct *mm;
  
 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
        struct mm_struct *mm;
  
 diff --git a/mm/page-writeback.c b/mm/page-writeback.c
-index ba5fd97..5a95869 100644
+index 19ceae8..70848ee 100644
 --- a/mm/page-writeback.c
 +++ b/mm/page-writeback.c
 @@ -664,7 +664,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
 --- a/mm/page-writeback.c
 +++ b/mm/page-writeback.c
 @@ -664,7 +664,7 @@ static long long pos_ratio_polynom(unsigned long setpoint,
@@ -98378,10 +97861,10 @@ index ba5fd97..5a95869 100644
                                        unsigned long bg_thresh,
                                        unsigned long dirty,
 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
                                        unsigned long bg_thresh,
                                        unsigned long dirty,
 diff --git a/mm/page_alloc.c b/mm/page_alloc.c
-index c5fe124..2cf7f17 100644
+index 616a2c9..0e755f6 100644
 --- a/mm/page_alloc.c
 +++ b/mm/page_alloc.c
 --- a/mm/page_alloc.c
 +++ b/mm/page_alloc.c
-@@ -61,6 +61,7 @@
+@@ -59,6 +59,7 @@
  #include <linux/page-debug-flags.h>
  #include <linux/hugetlb.h>
  #include <linux/sched/rt.h>
  #include <linux/page-debug-flags.h>
  #include <linux/hugetlb.h>
  #include <linux/sched/rt.h>
@@ -98389,7 +97872,7 @@ index c5fe124..2cf7f17 100644
  
  #include <asm/sections.h>
  #include <asm/tlbflush.h>
  
  #include <asm/sections.h>
  #include <asm/tlbflush.h>
-@@ -357,7 +358,7 @@ out:
+@@ -356,7 +357,7 @@ out:
   * This usage means that zero-order pages may not be compound.
   */
  
   * This usage means that zero-order pages may not be compound.
   */
  
@@ -98398,7 +97881,7 @@ index c5fe124..2cf7f17 100644
  {
        __free_pages_ok(page, compound_order(page));
  }
  {
        __free_pages_ok(page, compound_order(page));
  }
-@@ -740,6 +741,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+@@ -741,6 +742,10 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
        int i;
        int bad = 0;
  
        int i;
        int bad = 0;
  
@@ -98409,7 +97892,7 @@ index c5fe124..2cf7f17 100644
        trace_mm_page_free(page, order);
        kmemcheck_free_shadow(page, order);
  
        trace_mm_page_free(page, order);
        kmemcheck_free_shadow(page, order);
  
-@@ -756,6 +761,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
+@@ -757,6 +762,12 @@ static bool free_pages_prepare(struct page *page, unsigned int order)
                debug_check_no_obj_freed(page_address(page),
                                           PAGE_SIZE << order);
        }
                debug_check_no_obj_freed(page_address(page),
                                           PAGE_SIZE << order);
        }
@@ -98422,7 +97905,7 @@ index c5fe124..2cf7f17 100644
        arch_free_page(page, order);
        kernel_map_pages(page, 1 << order, 0);
  
        arch_free_page(page, order);
        kernel_map_pages(page, 1 << order, 0);
  
-@@ -779,6 +790,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
+@@ -780,6 +791,20 @@ static void __free_pages_ok(struct page *page, unsigned int order)
        local_irq_restore(flags);
  }
  
        local_irq_restore(flags);
  }
  
@@ -98443,7 +97926,7 @@ index c5fe124..2cf7f17 100644
  void __init __free_pages_bootmem(struct page *page, unsigned int order)
  {
        unsigned int nr_pages = 1 << order;
  void __init __free_pages_bootmem(struct page *page, unsigned int order)
  {
        unsigned int nr_pages = 1 << order;
-@@ -794,6 +819,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order)
+@@ -795,6 +820,19 @@ void __init __free_pages_bootmem(struct page *page, unsigned int order)
        __ClearPageReserved(p);
        set_page_count(p, 0);
  
        __ClearPageReserved(p);
        set_page_count(p, 0);
  
@@ -98463,7 +97946,7 @@ index c5fe124..2cf7f17 100644
        page_zone(page)->managed_pages += nr_pages;
        set_page_refcounted(page);
        __free_pages(page, order);
        page_zone(page)->managed_pages += nr_pages;
        set_page_refcounted(page);
        __free_pages(page, order);
-@@ -922,8 +960,10 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags)
+@@ -923,8 +961,10 @@ static int prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags)
        arch_alloc_page(page, order);
        kernel_map_pages(page, 1 << order, 1);
  
        arch_alloc_page(page, order);
        kernel_map_pages(page, 1 << order, 1);
  
@@ -98474,25 +97957,25 @@ index c5fe124..2cf7f17 100644
  
        if (order && (gfp_flags & __GFP_COMP))
                prep_compound_page(page, order);
  
        if (order && (gfp_flags & __GFP_COMP))
                prep_compound_page(page, order);
-@@ -1601,7 +1641,7 @@ again:
+@@ -1602,7 +1642,7 @@ again:
        }
  
        __mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
 -      if (atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
 +      if (atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
        }
  
        __mod_zone_page_state(zone, NR_ALLOC_BATCH, -(1 << order));
 -      if (atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
 +      if (atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH]) <= 0 &&
-           !zone_is_fair_depleted(zone))
-               zone_set_flag(zone, ZONE_FAIR_DEPLETED);
+           !test_bit(ZONE_FAIR_DEPLETED, &zone->flags))
+               set_bit(ZONE_FAIR_DEPLETED, &zone->flags);
  
  
-@@ -1922,7 +1962,7 @@ static void reset_alloc_batches(struct zone *preferred_zone)
+@@ -1923,7 +1963,7 @@ static void reset_alloc_batches(struct zone *preferred_zone)
        do {
                mod_zone_page_state(zone, NR_ALLOC_BATCH,
                        high_wmark_pages(zone) - low_wmark_pages(zone) -
 -                      atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]));
 +                      atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH]));
        do {
                mod_zone_page_state(zone, NR_ALLOC_BATCH,
                        high_wmark_pages(zone) - low_wmark_pages(zone) -
 -                      atomic_long_read(&zone->vm_stat[NR_ALLOC_BATCH]));
 +                      atomic_long_read_unchecked(&zone->vm_stat[NR_ALLOC_BATCH]));
-               zone_clear_flag(zone, ZONE_FAIR_DEPLETED);
+               clear_bit(ZONE_FAIR_DEPLETED, &zone->flags);
        } while (zone++ != preferred_zone);
  }
        } while (zone++ != preferred_zone);
  }
-@@ -5699,7 +5739,7 @@ static void __setup_per_zone_wmarks(void)
+@@ -5698,7 +5738,7 @@ static void __setup_per_zone_wmarks(void)
  
                __mod_zone_page_state(zone, NR_ALLOC_BATCH,
                        high_wmark_pages(zone) - low_wmark_pages(zone) -
  
                __mod_zone_page_state(zone, NR_ALLOC_BATCH,
                        high_wmark_pages(zone) - low_wmark_pages(zone) -
@@ -98502,10 +97985,10 @@ index c5fe124..2cf7f17 100644
                setup_zone_migrate_reserve(zone);
                spin_unlock_irqrestore(&zone->lock, flags);
 diff --git a/mm/percpu.c b/mm/percpu.c
                setup_zone_migrate_reserve(zone);
                spin_unlock_irqrestore(&zone->lock, flags);
 diff --git a/mm/percpu.c b/mm/percpu.c
-index 2139e30..1d45bce 100644
+index 014bab6..db5a76f 100644
 --- a/mm/percpu.c
 +++ b/mm/percpu.c
 --- a/mm/percpu.c
 +++ b/mm/percpu.c
-@@ -123,7 +123,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly;
+@@ -131,7 +131,7 @@ static unsigned int pcpu_low_unit_cpu __read_mostly;
  static unsigned int pcpu_high_unit_cpu __read_mostly;
  
  /* the address of the first chunk which starts with the kernel static area */
  static unsigned int pcpu_high_unit_cpu __read_mostly;
  
  /* the address of the first chunk which starts with the kernel static area */
@@ -98566,7 +98049,7 @@ index 5077afc..846c9ef 100644
        if (!mm || IS_ERR(mm)) {
                rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
 diff --git a/mm/rmap.c b/mm/rmap.c
        if (!mm || IS_ERR(mm)) {
                rc = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
 diff --git a/mm/rmap.c b/mm/rmap.c
-index e01318d..25117ca 100644
+index 3e4c721..a5e3e39 100644
 --- a/mm/rmap.c
 +++ b/mm/rmap.c
 @@ -164,6 +164,10 @@ int anon_vma_prepare(struct vm_area_struct *vma)
 --- a/mm/rmap.c
 +++ b/mm/rmap.c
 @@ -164,6 +164,10 @@ int anon_vma_prepare(struct vm_area_struct *vma)
@@ -98655,7 +98138,7 @@ index e01318d..25117ca 100644
  {
        struct anon_vma_chain *avc;
        struct anon_vma *anon_vma;
  {
        struct anon_vma_chain *avc;
        struct anon_vma *anon_vma;
-@@ -374,8 +408,10 @@ static void anon_vma_ctor(void *data)
+@@ -376,8 +410,10 @@ static void anon_vma_ctor(void *data)
  void __init anon_vma_init(void)
  {
        anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma),
  void __init anon_vma_init(void)
  {
        anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma),
@@ -98669,7 +98152,7 @@ index e01318d..25117ca 100644
  
  /*
 diff --git a/mm/shmem.c b/mm/shmem.c
  
  /*
 diff --git a/mm/shmem.c b/mm/shmem.c
-index 469f90d..34a09ee 100644
+index 185836b..d7255a1 100644
 --- a/mm/shmem.c
 +++ b/mm/shmem.c
 @@ -33,7 +33,7 @@
 --- a/mm/shmem.c
 +++ b/mm/shmem.c
 @@ -33,7 +33,7 @@
@@ -98690,7 +98173,7 @@ index 469f90d..34a09ee 100644
  
  /*
   * shmem_fallocate communicates with shmem_fault or shmem_writepage via
  
  /*
   * shmem_fallocate communicates with shmem_fault or shmem_writepage via
-@@ -2524,6 +2524,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = {
+@@ -2558,6 +2558,11 @@ static const struct xattr_handler *shmem_xattr_handlers[] = {
  static int shmem_xattr_validate(const char *name)
  {
        struct { const char *prefix; size_t len; } arr[] = {
  static int shmem_xattr_validate(const char *name)
  {
        struct { const char *prefix; size_t len; } arr[] = {
@@ -98702,7 +98185,7 @@ index 469f90d..34a09ee 100644
                { XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN },
                { XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN }
        };
                { XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN },
                { XATTR_TRUSTED_PREFIX, XATTR_TRUSTED_PREFIX_LEN }
        };
-@@ -2579,6 +2584,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name,
+@@ -2613,6 +2618,15 @@ static int shmem_setxattr(struct dentry *dentry, const char *name,
        if (err)
                return err;
  
        if (err)
                return err;
  
@@ -98718,7 +98201,7 @@ index 469f90d..34a09ee 100644
        return simple_xattr_set(&info->xattrs, name, value, size, flags);
  }
  
        return simple_xattr_set(&info->xattrs, name, value, size, flags);
  }
  
-@@ -2962,8 +2976,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
+@@ -2996,8 +3010,7 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
        int err = -ENOMEM;
  
        /* Round up to L1_CACHE_BYTES to resist false sharing */
        int err = -ENOMEM;
  
        /* Round up to L1_CACHE_BYTES to resist false sharing */
@@ -98729,10 +98212,10 @@ index 469f90d..34a09ee 100644
                return -ENOMEM;
  
 diff --git a/mm/slab.c b/mm/slab.c
                return -ENOMEM;
  
 diff --git a/mm/slab.c b/mm/slab.c
-index 7c52b38..3ccc17e 100644
+index f34e053..78a3839 100644
 --- a/mm/slab.c
 +++ b/mm/slab.c
 --- a/mm/slab.c
 +++ b/mm/slab.c
-@@ -316,10 +316,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
+@@ -314,10 +314,12 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
                if ((x)->max_freeable < i)                              \
                        (x)->max_freeable = i;                          \
        } while (0)
                if ((x)->max_freeable < i)                              \
                        (x)->max_freeable = i;                          \
        } while (0)
@@ -98749,7 +98232,7 @@ index 7c52b38..3ccc17e 100644
  #else
  #define       STATS_INC_ACTIVE(x)     do { } while (0)
  #define       STATS_DEC_ACTIVE(x)     do { } while (0)
  #else
  #define       STATS_INC_ACTIVE(x)     do { } while (0)
  #define       STATS_DEC_ACTIVE(x)     do { } while (0)
-@@ -336,6 +338,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
+@@ -334,6 +336,8 @@ static void kmem_cache_node_init(struct kmem_cache_node *parent)
  #define STATS_INC_ALLOCMISS(x)        do { } while (0)
  #define STATS_INC_FREEHIT(x)  do { } while (0)
  #define STATS_INC_FREEMISS(x) do { } while (0)
  #define STATS_INC_ALLOCMISS(x)        do { } while (0)
  #define STATS_INC_FREEHIT(x)  do { } while (0)
  #define STATS_INC_FREEMISS(x) do { } while (0)
@@ -98758,7 +98241,7 @@ index 7c52b38..3ccc17e 100644
  #endif
  
  #if DEBUG
  #endif
  
  #if DEBUG
-@@ -452,7 +456,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page,
+@@ -450,7 +454,7 @@ static inline void *index_to_obj(struct kmem_cache *cache, struct page *page,
   *   reciprocal_divide(offset, cache->reciprocal_buffer_size)
   */
  static inline unsigned int obj_to_index(const struct kmem_cache *cache,
   *   reciprocal_divide(offset, cache->reciprocal_buffer_size)
   */
  static inline unsigned int obj_to_index(const struct kmem_cache *cache,
@@ -98767,22 +98250,25 @@ index 7c52b38..3ccc17e 100644
  {
        u32 offset = (obj - page->s_mem);
        return reciprocal_divide(offset, cache->reciprocal_buffer_size);
  {
        u32 offset = (obj - page->s_mem);
        return reciprocal_divide(offset, cache->reciprocal_buffer_size);
-@@ -1462,12 +1466,12 @@ void __init kmem_cache_init(void)
+@@ -1438,7 +1442,7 @@ void __init kmem_cache_init(void)
+        * structures first.  Without this, further allocations will bug.
         */
         */
-       kmalloc_caches[INDEX_AC] = create_kmalloc_cache("kmalloc-ac",
--                                      kmalloc_size(INDEX_AC), ARCH_KMALLOC_FLAGS);
-+                                      kmalloc_size(INDEX_AC), SLAB_USERCOPY | ARCH_KMALLOC_FLAGS);
-       if (INDEX_AC != INDEX_NODE)
-               kmalloc_caches[INDEX_NODE] =
-                       create_kmalloc_cache("kmalloc-node",
+       kmalloc_caches[INDEX_NODE] = create_kmalloc_cache("kmalloc-node",
 -                              kmalloc_size(INDEX_NODE), ARCH_KMALLOC_FLAGS);
 +                              kmalloc_size(INDEX_NODE), SLAB_USERCOPY | ARCH_KMALLOC_FLAGS);
 -                              kmalloc_size(INDEX_NODE), ARCH_KMALLOC_FLAGS);
 +                              kmalloc_size(INDEX_NODE), SLAB_USERCOPY | ARCH_KMALLOC_FLAGS);
+       slab_state = PARTIAL_NODE;
  
        slab_early_init = 0;
  
        slab_early_init = 0;
+@@ -2059,7 +2063,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+       cachep = find_mergeable(size, align, flags, name, ctor);
+       if (cachep) {
+-              cachep->refcount++;
++              atomic_inc(&cachep->refcount);
  
  
-@@ -3384,6 +3388,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
+               /*
+                * Adjust the object sizes so that we clear
+@@ -3352,6 +3356,20 @@ static inline void __cache_free(struct kmem_cache *cachep, void *objp,
        struct array_cache *ac = cpu_cache_get(cachep);
  
        check_irq_off();
        struct array_cache *ac = cpu_cache_get(cachep);
  
        check_irq_off();
@@ -98803,7 +98289,7 @@ index 7c52b38..3ccc17e 100644
        kmemleak_free_recursive(objp, cachep->flags);
        objp = cache_free_debugcheck(cachep, objp, caller);
  
        kmemleak_free_recursive(objp, cachep->flags);
        objp = cache_free_debugcheck(cachep, objp, caller);
  
-@@ -3607,6 +3625,7 @@ void kfree(const void *objp)
+@@ -3557,6 +3575,7 @@ void kfree(const void *objp)
  
        if (unlikely(ZERO_OR_NULL_PTR(objp)))
                return;
  
        if (unlikely(ZERO_OR_NULL_PTR(objp)))
                return;
@@ -98811,7 +98297,7 @@ index 7c52b38..3ccc17e 100644
        local_irq_save(flags);
        kfree_debugcheck(objp);
        c = virt_to_cache(objp);
        local_irq_save(flags);
        kfree_debugcheck(objp);
        c = virt_to_cache(objp);
-@@ -4056,14 +4075,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
+@@ -3979,14 +3998,22 @@ void slabinfo_show_stats(struct seq_file *m, struct kmem_cache *cachep)
        }
        /* cpu stats */
        {
        }
        /* cpu stats */
        {
@@ -98838,7 +98324,7 @@ index 7c52b38..3ccc17e 100644
  #endif
  }
  
  #endif
  }
  
-@@ -4281,13 +4308,69 @@ static const struct file_operations proc_slabstats_operations = {
+@@ -4200,13 +4227,69 @@ static const struct file_operations proc_slabstats_operations = {
  static int __init slab_proc_init(void)
  {
  #ifdef CONFIG_DEBUG_SLAB_LEAK
  static int __init slab_proc_init(void)
  {
  #ifdef CONFIG_DEBUG_SLAB_LEAK
@@ -98910,10 +98396,19 @@ index 7c52b38..3ccc17e 100644
   * ksize - get the actual amount of memory allocated for a given object
   * @objp: Pointer to the object
 diff --git a/mm/slab.h b/mm/slab.h
   * ksize - get the actual amount of memory allocated for a given object
   * @objp: Pointer to the object
 diff --git a/mm/slab.h b/mm/slab.h
-index 0e0fdd3..d0fd761 100644
+index ab019e6..fbcac34 100644
 --- a/mm/slab.h
 +++ b/mm/slab.h
 --- a/mm/slab.h
 +++ b/mm/slab.h
-@@ -32,6 +32,20 @@ extern struct list_head slab_caches;
+@@ -22,7 +22,7 @@ struct kmem_cache {
+       unsigned int align;     /* Alignment as calculated */
+       unsigned long flags;    /* Active flags on the slab */
+       const char *name;       /* Slab name for sysfs */
+-      int refcount;           /* Use counter */
++      atomic_t refcount;      /* Use counter */
+       void (*ctor)(void *);   /* Called on object slot creation */
+       struct list_head list;  /* List of all slab caches on the system */
+ };
+@@ -66,6 +66,20 @@ extern struct list_head slab_caches;
  /* The slab cache that manages slab cache information */
  extern struct kmem_cache *kmem_cache;
  
  /* The slab cache that manages slab cache information */
  extern struct kmem_cache *kmem_cache;
  
@@ -98934,7 +98429,7 @@ index 0e0fdd3..d0fd761 100644
  unsigned long calculate_alignment(unsigned long flags,
                unsigned long align, unsigned long size);
  
  unsigned long calculate_alignment(unsigned long flags,
                unsigned long align, unsigned long size);
  
-@@ -67,7 +81,8 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -116,7 +130,8 @@ static inline unsigned long kmem_cache_flags(unsigned long object_size,
  
  /* Legal flag mask for kmem_cache_create(), for various configurations */
  #define SLAB_CORE_FLAGS (SLAB_HWCACHE_ALIGN | SLAB_CACHE_DMA | SLAB_PANIC | \
  
  /* Legal flag mask for kmem_cache_create(), for various configurations */
  #define SLAB_CORE_FLAGS (SLAB_HWCACHE_ALIGN | SLAB_CACHE_DMA | SLAB_PANIC | \
@@ -98944,7 +98439,7 @@ index 0e0fdd3..d0fd761 100644
  
  #if defined(CONFIG_DEBUG_SLAB)
  #define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER)
  
  #if defined(CONFIG_DEBUG_SLAB)
  #define SLAB_DEBUG_FLAGS (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER)
-@@ -251,6 +266,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
+@@ -300,6 +315,9 @@ static inline struct kmem_cache *cache_from_obj(struct kmem_cache *s, void *x)
                return s;
  
        page = virt_to_head_page(x);
                return s;
  
        page = virt_to_head_page(x);
@@ -98955,7 +98450,7 @@ index 0e0fdd3..d0fd761 100644
        if (slab_equal_or_root(cachep, s))
                return cachep;
 diff --git a/mm/slab_common.c b/mm/slab_common.c
        if (slab_equal_or_root(cachep, s))
                return cachep;
 diff --git a/mm/slab_common.c b/mm/slab_common.c
-index d319502..da7714e 100644
+index dcdab81..3576646 100644
 --- a/mm/slab_common.c
 +++ b/mm/slab_common.c
 @@ -25,11 +25,35 @@
 --- a/mm/slab_common.c
 +++ b/mm/slab_common.c
 @@ -25,11 +25,35 @@
@@ -98992,10 +98487,28 @@ index d319502..da7714e 100644
 +early_param("pax_sanitize_slab", pax_sanitize_slab_setup);
 +#endif
 +
 +early_param("pax_sanitize_slab", pax_sanitize_slab_setup);
 +#endif
 +
- #ifdef CONFIG_DEBUG_VM
- static int kmem_cache_sanity_check(const char *name, size_t size)
+ /*
+  * Set of flags that will prevent slab merging
+  */
+@@ -44,7 +68,7 @@ struct kmem_cache *kmem_cache;
+  * Merge control. If this is set then no merging of slab caches will occur.
+  * (Could be removed. This was introduced to pacify the merge skeptics.)
+  */
+-static int slab_nomerge;
++static int slab_nomerge = 1;
+ static int __init setup_slab_nomerge(char *str)
  {
  {
-@@ -160,7 +184,7 @@ do_kmem_cache_create(char *name, size_t object_size, size_t size, size_t align,
+@@ -218,7 +242,7 @@ int slab_unmergeable(struct kmem_cache *s)
+       /*
+        * We may have set a slab to be unmergeable during bootstrap.
+        */
+-      if (s->refcount < 0)
++      if (atomic_read(&s->refcount) < 0)
+               return 1;
+       return 0;
+@@ -322,7 +346,7 @@ do_kmem_cache_create(char *name, size_t object_size, size_t size, size_t align,
        if (err)
                goto out_free_cache;
  
        if (err)
                goto out_free_cache;
  
@@ -99004,7 +98517,7 @@ index d319502..da7714e 100644
        list_add(&s->list, &slab_caches);
  out:
        if (err)
        list_add(&s->list, &slab_caches);
  out:
        if (err)
-@@ -222,6 +246,13 @@ kmem_cache_create(const char *name, size_t size, size_t align,
+@@ -386,6 +410,13 @@ kmem_cache_create(const char *name, size_t size, size_t align,
         */
        flags &= CACHE_CREATE_MASK;
  
         */
        flags &= CACHE_CREATE_MASK;
  
@@ -99018,7 +98531,7 @@ index d319502..da7714e 100644
        s = __kmem_cache_alias(name, size, align, flags, ctor);
        if (s)
                goto out_unlock;
        s = __kmem_cache_alias(name, size, align, flags, ctor);
        if (s)
                goto out_unlock;
-@@ -341,8 +372,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
+@@ -505,8 +536,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
  
        mutex_lock(&slab_mutex);
  
  
        mutex_lock(&slab_mutex);
  
@@ -99028,7 +98541,7 @@ index d319502..da7714e 100644
                goto out_unlock;
  
        if (memcg_cleanup_cache_params(s) != 0)
                goto out_unlock;
  
        if (memcg_cleanup_cache_params(s) != 0)
-@@ -362,7 +392,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
+@@ -526,7 +556,7 @@ void kmem_cache_destroy(struct kmem_cache *s)
                rcu_barrier();
  
        memcg_free_cache_params(s);
                rcu_barrier();
  
        memcg_free_cache_params(s);
@@ -99037,7 +98550,7 @@ index d319502..da7714e 100644
        sysfs_slab_remove(s);
  #else
        slab_kmem_cache_release(s);
        sysfs_slab_remove(s);
  #else
        slab_kmem_cache_release(s);
-@@ -418,7 +448,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz
+@@ -582,7 +612,7 @@ void __init create_boot_cache(struct kmem_cache *s, const char *name, size_t siz
                panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n",
                                        name, size, err);
  
                panic("Creation of kmalloc slab %s size=%zu failed. Reason %d\n",
                                        name, size, err);
  
@@ -99046,7 +98559,7 @@ index d319502..da7714e 100644
  }
  
  struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
  }
  
  struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
-@@ -431,7 +461,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
+@@ -595,7 +625,7 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name, size_t size,
  
        create_boot_cache(s, name, size, flags);
        list_add(&s->list, &slab_caches);
  
        create_boot_cache(s, name, size, flags);
        list_add(&s->list, &slab_caches);
@@ -99055,7 +98568,7 @@ index d319502..da7714e 100644
        return s;
  }
  
        return s;
  }
  
-@@ -443,6 +473,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
+@@ -607,6 +637,11 @@ struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1];
  EXPORT_SYMBOL(kmalloc_dma_caches);
  #endif
  
  EXPORT_SYMBOL(kmalloc_dma_caches);
  #endif
  
@@ -99067,7 +98580,7 @@ index d319502..da7714e 100644
  /*
   * Conversion table for small slabs sizes / 8 to the index in the
   * kmalloc array. This is necessary for slabs < 192 since we have non power
  /*
   * Conversion table for small slabs sizes / 8 to the index in the
   * kmalloc array. This is necessary for slabs < 192 since we have non power
-@@ -507,6 +542,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
+@@ -671,6 +706,13 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
                return kmalloc_dma_caches[index];
  
  #endif
                return kmalloc_dma_caches[index];
  
  #endif
@@ -99081,7 +98594,7 @@ index d319502..da7714e 100644
        return kmalloc_caches[index];
  }
  
        return kmalloc_caches[index];
  }
  
-@@ -563,7 +605,7 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -727,7 +769,7 @@ void __init create_kmalloc_caches(unsigned long flags)
        for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
                if (!kmalloc_caches[i]) {
                        kmalloc_caches[i] = create_kmalloc_cache(NULL,
        for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
                if (!kmalloc_caches[i]) {
                        kmalloc_caches[i] = create_kmalloc_cache(NULL,
@@ -99090,7 +98603,7 @@ index d319502..da7714e 100644
                }
  
                /*
                }
  
                /*
-@@ -572,10 +614,10 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -736,10 +778,10 @@ void __init create_kmalloc_caches(unsigned long flags)
                 * earlier power of two caches
                 */
                if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
                 * earlier power of two caches
                 */
                if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
@@ -99103,7 +98616,7 @@ index d319502..da7714e 100644
        }
  
        /* Kmalloc array is now usable */
        }
  
        /* Kmalloc array is now usable */
-@@ -608,6 +650,23 @@ void __init create_kmalloc_caches(unsigned long flags)
+@@ -772,6 +814,23 @@ void __init create_kmalloc_caches(unsigned long flags)
                }
        }
  #endif
                }
        }
  #endif
@@ -99127,7 +98640,7 @@ index d319502..da7714e 100644
  }
  #endif /* !CONFIG_SLOB */
  
  }
  #endif /* !CONFIG_SLOB */
  
-@@ -666,6 +725,9 @@ void print_slabinfo_header(struct seq_file *m)
+@@ -830,6 +889,9 @@ void print_slabinfo_header(struct seq_file *m)
        seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> "
                 "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
        seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
        seq_puts(m, " : globalstat <listallocs> <maxobjs> <grown> <reaped> "
                 "<error> <maxfreeable> <nodeallocs> <remotefrees> <alienoverflow>");
        seq_puts(m, " : cpustat <allochit> <allocmiss> <freehit> <freemiss>");
@@ -99138,7 +98651,7 @@ index d319502..da7714e 100644
        seq_putc(m, '\n');
  }
 diff --git a/mm/slob.c b/mm/slob.c
        seq_putc(m, '\n');
  }
 diff --git a/mm/slob.c b/mm/slob.c
-index 21980e0..975f1bf 100644
+index 96a8620..3e7e663 100644
 --- a/mm/slob.c
 +++ b/mm/slob.c
 @@ -157,7 +157,7 @@ static void set_slob(slob_t *s, slobidx_t size, slob_t *next)
 --- a/mm/slob.c
 +++ b/mm/slob.c
 @@ -157,7 +157,7 @@ static void set_slob(slob_t *s, slobidx_t size, slob_t *next)
@@ -99307,7 +98820,7 @@ index 21980e0..975f1bf 100644
        return ret;
  }
  
        return ret;
  }
  
-@@ -493,34 +517,112 @@ void kfree(const void *block)
+@@ -491,34 +515,112 @@ void kfree(const void *block)
                return;
        kmemleak_free(block);
  
                return;
        kmemleak_free(block);
  
@@ -99429,7 +98942,7 @@ index 21980e0..975f1bf 100644
  }
  EXPORT_SYMBOL(ksize);
  
  }
  EXPORT_SYMBOL(ksize);
  
-@@ -536,23 +638,33 @@ int __kmem_cache_create(struct kmem_cache *c, unsigned long flags)
+@@ -534,23 +636,33 @@ int __kmem_cache_create(struct kmem_cache *c, unsigned long flags)
  
  void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
  {
  
  void *slob_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
  {
@@ -99465,7 +98978,7 @@ index 21980e0..975f1bf 100644
  
        if (b && c->ctor)
                c->ctor(b);
  
        if (b && c->ctor)
                c->ctor(b);
-@@ -582,12 +694,16 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node)
+@@ -580,12 +692,16 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t gfp, int node)
  EXPORT_SYMBOL(kmem_cache_alloc_node);
  #endif
  
  EXPORT_SYMBOL(kmem_cache_alloc_node);
  #endif
  
@@ -99486,7 +98999,7 @@ index 21980e0..975f1bf 100644
  }
  
  static void kmem_rcu_free(struct rcu_head *head)
  }
  
  static void kmem_rcu_free(struct rcu_head *head)
-@@ -595,22 +711,36 @@ static void kmem_rcu_free(struct rcu_head *head)
+@@ -593,22 +709,36 @@ static void kmem_rcu_free(struct rcu_head *head)
        struct slob_rcu *slob_rcu = (struct slob_rcu *)head;
        void *b = (void *)slob_rcu - (slob_rcu->size - sizeof(struct slob_rcu));
  
        struct slob_rcu *slob_rcu = (struct slob_rcu *)head;
        void *b = (void *)slob_rcu - (slob_rcu->size - sizeof(struct slob_rcu));
  
@@ -99528,10 +99041,10 @@ index 21980e0..975f1bf 100644
  EXPORT_SYMBOL(kmem_cache_free);
  
 diff --git a/mm/slub.c b/mm/slub.c
  EXPORT_SYMBOL(kmem_cache_free);
  
 diff --git a/mm/slub.c b/mm/slub.c
-index 3e8afcc..d6e2c89 100644
+index ae7b9f1..7b3fdbe 100644
 --- a/mm/slub.c
 +++ b/mm/slub.c
 --- a/mm/slub.c
 +++ b/mm/slub.c
-@@ -207,7 +207,7 @@ struct track {
+@@ -197,7 +197,7 @@ struct track {
  
  enum track_item { TRACK_ALLOC, TRACK_FREE };
  
  
  enum track_item { TRACK_ALLOC, TRACK_FREE };
  
@@ -99540,7 +99053,7 @@ index 3e8afcc..d6e2c89 100644
  static int sysfs_slab_add(struct kmem_cache *);
  static int sysfs_slab_alias(struct kmem_cache *, const char *);
  static void memcg_propagate_slab_attrs(struct kmem_cache *s);
  static int sysfs_slab_add(struct kmem_cache *);
  static int sysfs_slab_alias(struct kmem_cache *, const char *);
  static void memcg_propagate_slab_attrs(struct kmem_cache *s);
-@@ -545,7 +545,7 @@ static void print_track(const char *s, struct track *t)
+@@ -535,7 +535,7 @@ static void print_track(const char *s, struct track *t)
        if (!t->addr)
                return;
  
        if (!t->addr)
                return;
  
@@ -99549,7 +99062,7 @@ index 3e8afcc..d6e2c89 100644
               s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid);
  #ifdef CONFIG_STACKTRACE
        {
               s, (void *)t->addr, jiffies - t->when, t->cpu, t->pid);
  #ifdef CONFIG_STACKTRACE
        {
-@@ -2643,6 +2643,14 @@ static __always_inline void slab_free(struct kmem_cache *s,
+@@ -2645,6 +2645,14 @@ static __always_inline void slab_free(struct kmem_cache *s,
  
        slab_free_hook(s, x);
  
  
        slab_free_hook(s, x);
  
@@ -99564,16 +99077,7 @@ index 3e8afcc..d6e2c89 100644
  redo:
        /*
         * Determine the currently cpus per cpu slab.
  redo:
        /*
         * Determine the currently cpus per cpu slab.
-@@ -2710,7 +2718,7 @@ static int slub_min_objects;
-  * Merge control. If this is set then no merging of slab caches will occur.
-  * (Could be removed. This was introduced to pacify the merge skeptics.)
-  */
--static int slub_nomerge;
-+static int slub_nomerge = 1;
- /*
-  * Calculate the order of allocation given an slab object size.
-@@ -2986,6 +2994,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
+@@ -2982,6 +2990,9 @@ static int calculate_sizes(struct kmem_cache *s, int forced_order)
        s->inuse = size;
  
        if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) ||
        s->inuse = size;
  
        if (((flags & (SLAB_DESTROY_BY_RCU | SLAB_POISON)) ||
@@ -99583,7 +99087,7 @@ index 3e8afcc..d6e2c89 100644
                s->ctor)) {
                /*
                 * Relocate free pointer after the object if it is not
                s->ctor)) {
                /*
                 * Relocate free pointer after the object if it is not
-@@ -3313,6 +3324,59 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node)
+@@ -3301,6 +3312,59 @@ void *__kmalloc_node(size_t size, gfp_t flags, int node)
  EXPORT_SYMBOL(__kmalloc_node);
  #endif
  
  EXPORT_SYMBOL(__kmalloc_node);
  #endif
  
@@ -99643,7 +99147,7 @@ index 3e8afcc..d6e2c89 100644
  size_t ksize(const void *object)
  {
        struct page *page;
  size_t ksize(const void *object)
  {
        struct page *page;
-@@ -3341,6 +3405,7 @@ void kfree(const void *x)
+@@ -3329,6 +3393,7 @@ void kfree(const void *x)
        if (unlikely(ZERO_OR_NULL_PTR(x)))
                return;
  
        if (unlikely(ZERO_OR_NULL_PTR(x)))
                return;
  
@@ -99651,16 +99155,7 @@ index 3e8afcc..d6e2c89 100644
        page = virt_to_head_page(x);
        if (unlikely(!PageSlab(page))) {
                BUG_ON(!PageCompound(page));
        page = virt_to_head_page(x);
        if (unlikely(!PageSlab(page))) {
                BUG_ON(!PageCompound(page));
-@@ -3642,7 +3707,7 @@ static int slab_unmergeable(struct kmem_cache *s)
-       /*
-        * We may have set a slab to be unmergeable during bootstrap.
-        */
--      if (s->refcount < 0)
-+      if (atomic_read(&s->refcount) < 0)
-               return 1;
-       return 0;
-@@ -3699,7 +3764,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3624,7 +3689,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
                int i;
                struct kmem_cache *c;
  
                int i;
                struct kmem_cache *c;
  
@@ -99669,7 +99164,7 @@ index 3e8afcc..d6e2c89 100644
  
                /*
                 * Adjust the object sizes so that we clear
  
                /*
                 * Adjust the object sizes so that we clear
-@@ -3718,7 +3783,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
+@@ -3643,7 +3708,7 @@ __kmem_cache_alias(const char *name, size_t size, size_t align,
                }
  
                if (sysfs_slab_alias(s, name)) {
                }
  
                if (sysfs_slab_alias(s, name)) {
@@ -99678,7 +99173,7 @@ index 3e8afcc..d6e2c89 100644
                        s = NULL;
                }
        }
                        s = NULL;
                }
        }
-@@ -3835,7 +3900,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
+@@ -3760,7 +3825,7 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
  }
  #endif
  
  }
  #endif
  
@@ -99687,7 +99182,7 @@ index 3e8afcc..d6e2c89 100644
  static int count_inuse(struct page *page)
  {
        return page->inuse;
  static int count_inuse(struct page *page)
  {
        return page->inuse;
-@@ -4116,7 +4181,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
+@@ -4041,7 +4106,11 @@ static int list_locations(struct kmem_cache *s, char *buf,
                len += sprintf(buf + len, "%7ld ", l->count);
  
                if (l->addr)
                len += sprintf(buf + len, "%7ld ", l->count);
  
                if (l->addr)
@@ -99699,7 +99194,7 @@ index 3e8afcc..d6e2c89 100644
                else
                        len += sprintf(buf + len, "<not-available>");
  
                else
                        len += sprintf(buf + len, "<not-available>");
  
-@@ -4218,12 +4287,12 @@ static void __init resiliency_test(void)
+@@ -4143,12 +4212,12 @@ static void __init resiliency_test(void)
        validate_slab_cache(kmalloc_caches[9]);
  }
  #else
        validate_slab_cache(kmalloc_caches[9]);
  }
  #else
@@ -99714,7 +99209,7 @@ index 3e8afcc..d6e2c89 100644
  enum slab_stat_type {
        SL_ALL,                 /* All slabs */
        SL_PARTIAL,             /* Only partially allocated slabs */
  enum slab_stat_type {
        SL_ALL,                 /* All slabs */
        SL_PARTIAL,             /* Only partially allocated slabs */
-@@ -4460,13 +4529,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
+@@ -4385,13 +4454,17 @@ static ssize_t ctor_show(struct kmem_cache *s, char *buf)
  {
        if (!s->ctor)
                return 0;
  {
        if (!s->ctor)
                return 0;
@@ -99733,7 +99228,7 @@ index 3e8afcc..d6e2c89 100644
  }
  SLAB_ATTR_RO(aliases);
  
  }
  SLAB_ATTR_RO(aliases);
  
-@@ -4554,6 +4627,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
+@@ -4479,6 +4552,22 @@ static ssize_t cache_dma_show(struct kmem_cache *s, char *buf)
  SLAB_ATTR_RO(cache_dma);
  #endif
  
  SLAB_ATTR_RO(cache_dma);
  #endif
  
@@ -99756,7 +99251,25 @@ index 3e8afcc..d6e2c89 100644
  static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf)
  {
        return sprintf(buf, "%d\n", !!(s->flags & SLAB_DESTROY_BY_RCU));
  static ssize_t destroy_by_rcu_show(struct kmem_cache *s, char *buf)
  {
        return sprintf(buf, "%d\n", !!(s->flags & SLAB_DESTROY_BY_RCU));
-@@ -4888,6 +4977,12 @@ static struct attribute *slab_attrs[] = {
+@@ -4534,7 +4623,7 @@ static ssize_t trace_store(struct kmem_cache *s, const char *buf,
+        * as well as cause other issues like converting a mergeable
+        * cache into an umergeable one.
+        */
+-      if (s->refcount > 1)
++      if (atomic_read(&s->refcount) > 1)
+               return -EINVAL;
+       s->flags &= ~SLAB_TRACE;
+@@ -4654,7 +4743,7 @@ static ssize_t failslab_show(struct kmem_cache *s, char *buf)
+ static ssize_t failslab_store(struct kmem_cache *s, const char *buf,
+                                                       size_t length)
+ {
+-      if (s->refcount > 1)
++      if (atomic_read(&s->refcount) > 1)
+               return -EINVAL;
+       s->flags &= ~SLAB_FAILSLAB;
+@@ -4824,6 +4913,12 @@ static struct attribute *slab_attrs[] = {
  #ifdef CONFIG_ZONE_DMA
        &cache_dma_attr.attr,
  #endif
  #ifdef CONFIG_ZONE_DMA
        &cache_dma_attr.attr,
  #endif
@@ -99769,7 +99282,7 @@ index 3e8afcc..d6e2c89 100644
  #ifdef CONFIG_NUMA
        &remote_node_defrag_ratio_attr.attr,
  #endif
  #ifdef CONFIG_NUMA
        &remote_node_defrag_ratio_attr.attr,
  #endif
-@@ -5132,6 +5227,7 @@ static char *create_unique_id(struct kmem_cache *s)
+@@ -5068,6 +5163,7 @@ static char *create_unique_id(struct kmem_cache *s)
        return name;
  }
  
        return name;
  }
  
@@ -99777,7 +99290,7 @@ index 3e8afcc..d6e2c89 100644
  static int sysfs_slab_add(struct kmem_cache *s)
  {
        int err;
  static int sysfs_slab_add(struct kmem_cache *s)
  {
        int err;
-@@ -5205,6 +5301,7 @@ void sysfs_slab_remove(struct kmem_cache *s)
+@@ -5141,6 +5237,7 @@ void sysfs_slab_remove(struct kmem_cache *s)
        kobject_del(&s->kobj);
        kobject_put(&s->kobj);
  }
        kobject_del(&s->kobj);
        kobject_put(&s->kobj);
  }
@@ -99785,7 +99298,7 @@ index 3e8afcc..d6e2c89 100644
  
  /*
   * Need to buffer aliases during bootup until sysfs becomes
  
  /*
   * Need to buffer aliases during bootup until sysfs becomes
-@@ -5218,6 +5315,7 @@ struct saved_alias {
+@@ -5154,6 +5251,7 @@ struct saved_alias {
  
  static struct saved_alias *alias_list;
  
  
  static struct saved_alias *alias_list;
  
@@ -99793,7 +99306,7 @@ index 3e8afcc..d6e2c89 100644
  static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
  {
        struct saved_alias *al;
  static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
  {
        struct saved_alias *al;
-@@ -5240,6 +5338,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
+@@ -5176,6 +5274,7 @@ static int sysfs_slab_alias(struct kmem_cache *s, const char *name)
        alias_list = al;
        return 0;
  }
        alias_list = al;
        return 0;
  }
@@ -99837,7 +99350,7 @@ index d1b48b6..6e8590e 100644
                }
        }
 diff --git a/mm/swap.c b/mm/swap.c
                }
        }
 diff --git a/mm/swap.c b/mm/swap.c
-index 6b2dc38..46b79ba 100644
+index 8a12b33..7068e78 100644
 --- a/mm/swap.c
 +++ b/mm/swap.c
 @@ -31,6 +31,7 @@
 --- a/mm/swap.c
 +++ b/mm/swap.c
 @@ -31,6 +31,7 @@
@@ -99909,10 +99422,10 @@ index 8798b2e..348f9dd 100644
  
        if (S_ISREG(inode->i_mode))
 diff --git a/mm/util.c b/mm/util.c
  
        if (S_ISREG(inode->i_mode))
 diff --git a/mm/util.c b/mm/util.c
-index 093c973..b70a268 100644
+index fec39d4..3e60325 100644
 --- a/mm/util.c
 +++ b/mm/util.c
 --- a/mm/util.c
 +++ b/mm/util.c
-@@ -202,6 +202,12 @@ done:
+@@ -195,6 +195,12 @@ struct task_struct *task_of_stack(struct task_struct *task,
  void arch_pick_mmap_layout(struct mm_struct *mm)
  {
        mm->mmap_base = TASK_UNMAPPED_BASE;
  void arch_pick_mmap_layout(struct mm_struct *mm)
  {
        mm->mmap_base = TASK_UNMAPPED_BASE;
@@ -99925,7 +99438,7 @@ index 093c973..b70a268 100644
        mm->get_unmapped_area = arch_get_unmapped_area;
  }
  #endif
        mm->get_unmapped_area = arch_get_unmapped_area;
  }
  #endif
-@@ -378,6 +384,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen)
+@@ -371,6 +377,9 @@ int get_cmdline(struct task_struct *task, char *buffer, int buflen)
        if (!mm->arg_end)
                goto out_mm;    /* Shh! No looking before we're done */
  
        if (!mm->arg_end)
                goto out_mm;    /* Shh! No looking before we're done */
  
@@ -99936,7 +99449,7 @@ index 093c973..b70a268 100644
  
        if (len > buflen)
 diff --git a/mm/vmalloc.c b/mm/vmalloc.c
  
        if (len > buflen)
 diff --git a/mm/vmalloc.c b/mm/vmalloc.c
-index 2b0aa54..b451f74 100644
+index 90520af..24231aa 100644
 --- a/mm/vmalloc.c
 +++ b/mm/vmalloc.c
 @@ -40,6 +40,21 @@ struct vfree_deferred {
 --- a/mm/vmalloc.c
 +++ b/mm/vmalloc.c
 @@ -40,6 +40,21 @@ struct vfree_deferred {
@@ -100219,10 +99732,10 @@ index 2b0aa54..b451f74 100644
        if (v->nr_pages)
                seq_printf(m, " pages=%d", v->nr_pages);
 diff --git a/mm/vmstat.c b/mm/vmstat.c
        if (v->nr_pages)
                seq_printf(m, " pages=%d", v->nr_pages);
 diff --git a/mm/vmstat.c b/mm/vmstat.c
-index e9ab104..de275bd 100644
+index 1b12d39..57b29b2 100644
 --- a/mm/vmstat.c
 +++ b/mm/vmstat.c
 --- a/mm/vmstat.c
 +++ b/mm/vmstat.c
-@@ -20,6 +20,7 @@
+@@ -22,6 +22,7 @@
  #include <linux/writeback.h>
  #include <linux/compaction.h>
  #include <linux/mm_inline.h>
  #include <linux/writeback.h>
  #include <linux/compaction.h>
  #include <linux/mm_inline.h>
@@ -100230,7 +99743,7 @@ index e9ab104..de275bd 100644
  
  #include "internal.h"
  
  
  #include "internal.h"
  
-@@ -79,7 +80,7 @@ void vm_events_fold_cpu(int cpu)
+@@ -81,7 +82,7 @@ void vm_events_fold_cpu(int cpu)
   *
   * vm_stat contains the global counters
   */
   *
   * vm_stat contains the global counters
   */
@@ -100239,16 +99752,16 @@ index e9ab104..de275bd 100644
  EXPORT_SYMBOL(vm_stat);
  
  #ifdef CONFIG_SMP
  EXPORT_SYMBOL(vm_stat);
  
  #ifdef CONFIG_SMP
-@@ -425,7 +426,7 @@ static inline void fold_diff(int *diff)
+@@ -433,7 +434,7 @@ static int fold_diff(int *diff)
  
        for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
  
        for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
-               if (diff[i])
+               if (diff[i]) {
 -                      atomic_long_add(diff[i], &vm_stat[i]);
 +                      atomic_long_add_unchecked(diff[i], &vm_stat[i]);
 -                      atomic_long_add(diff[i], &vm_stat[i]);
 +                      atomic_long_add_unchecked(diff[i], &vm_stat[i]);
- }
- /*
-@@ -457,7 +458,7 @@ static void refresh_cpu_vm_stats(void)
+                       changes++;
+       }
+       return changes;
+@@ -471,7 +472,7 @@ static int refresh_cpu_vm_stats(void)
                        v = this_cpu_xchg(p->vm_stat_diff[i], 0);
                        if (v) {
  
                        v = this_cpu_xchg(p->vm_stat_diff[i], 0);
                        if (v) {
  
@@ -100257,7 +99770,7 @@ index e9ab104..de275bd 100644
                                global_diff[i] += v;
  #ifdef CONFIG_NUMA
                                /* 3 seconds idle till flush */
                                global_diff[i] += v;
  #ifdef CONFIG_NUMA
                                /* 3 seconds idle till flush */
-@@ -519,7 +520,7 @@ void cpu_vm_stats_fold(int cpu)
+@@ -535,7 +536,7 @@ void cpu_vm_stats_fold(int cpu)
  
                                v = p->vm_stat_diff[i];
                                p->vm_stat_diff[i] = 0;
  
                                v = p->vm_stat_diff[i];
                                p->vm_stat_diff[i] = 0;
@@ -100266,7 +99779,7 @@ index e9ab104..de275bd 100644
                                global_diff[i] += v;
                        }
        }
                                global_diff[i] += v;
                        }
        }
-@@ -539,8 +540,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset)
+@@ -555,8 +556,8 @@ void drain_zonestat(struct zone *zone, struct per_cpu_pageset *pset)
                if (pset->vm_stat_diff[i]) {
                        int v = pset->vm_stat_diff[i];
                        pset->vm_stat_diff[i] = 0;
                if (pset->vm_stat_diff[i]) {
                        int v = pset->vm_stat_diff[i];
                        pset->vm_stat_diff[i] = 0;
@@ -100277,7 +99790,7 @@ index e9ab104..de275bd 100644
                }
  }
  #endif
                }
  }
  #endif
-@@ -1163,10 +1164,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
+@@ -1189,10 +1190,22 @@ static void *vmstat_start(struct seq_file *m, loff_t *pos)
        stat_items_size += sizeof(struct vm_event_state);
  #endif
  
        stat_items_size += sizeof(struct vm_event_state);
  #endif
  
@@ -100301,7 +99814,7 @@ index e9ab104..de275bd 100644
        for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
                v[i] = global_page_state(i);
        v += NR_VM_ZONE_STAT_ITEMS;
        for (i = 0; i < NR_VM_ZONE_STAT_ITEMS; i++)
                v[i] = global_page_state(i);
        v += NR_VM_ZONE_STAT_ITEMS;
-@@ -1315,10 +1328,16 @@ static int __init setup_vmstat(void)
+@@ -1424,10 +1437,16 @@ static int __init setup_vmstat(void)
        cpu_notifier_register_done();
  #endif
  #ifdef CONFIG_PROC_FS
        cpu_notifier_register_done();
  #endif
  #ifdef CONFIG_PROC_FS
@@ -100345,6 +99858,19 @@ index 64c6bed..b79a5de 100644
                        struct vlan_net *vn;
  
                        vn = net_generic(net, vlan_net_id);
                        struct vlan_net *vn;
  
                        vn = net_generic(net, vlan_net_id);
+diff --git a/net/8021q/vlan_netlink.c b/net/8021q/vlan_netlink.c
+index 8ac8a5c..991defc 100644
+--- a/net/8021q/vlan_netlink.c
++++ b/net/8021q/vlan_netlink.c
+@@ -238,7 +238,7 @@ nla_put_failure:
+       return -EMSGSIZE;
+ }
+-struct rtnl_link_ops vlan_link_ops __read_mostly = {
++struct rtnl_link_ops vlan_link_ops = {
+       .kind           = "vlan",
+       .maxtype        = IFLA_VLAN_MAX,
+       .policy         = vlan_policy,
 diff --git a/net/9p/client.c b/net/9p/client.c
 index e86a9bea..e91f70e 100644
 --- a/net/9p/client.c
 diff --git a/net/9p/client.c b/net/9p/client.c
 index e86a9bea..e91f70e 100644
 --- a/net/9p/client.c
@@ -100637,9 +100163,18 @@ index 1e80539..676c37a 100644
        if (ogm_packet->flags & BATADV_DIRECTLINK)
                has_directlink_flag = true;
 diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
        if (ogm_packet->flags & BATADV_DIRECTLINK)
                has_directlink_flag = true;
 diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
-index fc1835c..eead856 100644
+index fc1835c..42f2c2f 100644
 --- a/net/batman-adv/fragmentation.c
 +++ b/net/batman-adv/fragmentation.c
 --- a/net/batman-adv/fragmentation.c
 +++ b/net/batman-adv/fragmentation.c
+@@ -251,7 +251,7 @@ batadv_frag_merge_packets(struct hlist_head *chain, struct sk_buff *skb)
+       kfree(entry);
+       /* Make room for the rest of the fragments. */
+-      if (pskb_expand_head(skb_out, 0, size - skb->len, GFP_ATOMIC) < 0) {
++      if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) {
+               kfree_skb(skb_out);
+               skb_out = NULL;
+               goto free;
 @@ -450,7 +450,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb,
        frag_header.packet_type = BATADV_UNICAST_FRAG;
        frag_header.version = BATADV_COMPAT_VERSION;
 @@ -450,7 +450,7 @@ bool batadv_frag_send_packet(struct sk_buff *skb,
        frag_header.packet_type = BATADV_UNICAST_FRAG;
        frag_header.version = BATADV_COMPAT_VERSION;
@@ -100650,7 +100185,7 @@ index fc1835c..eead856 100644
        frag_header.no = 0;
        frag_header.total_size = htons(skb->len);
 diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
        frag_header.no = 0;
        frag_header.total_size = htons(skb->len);
 diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c
-index 5467955..30cc771 100644
+index 5467955..75ad4e3 100644
 --- a/net/batman-adv/soft-interface.c
 +++ b/net/batman-adv/soft-interface.c
 @@ -296,7 +296,7 @@ send:
 --- a/net/batman-adv/soft-interface.c
 +++ b/net/batman-adv/soft-interface.c
 @@ -296,7 +296,7 @@ send:
@@ -100680,6 +100215,15 @@ index 5467955..30cc771 100644
  
        bat_priv->primary_if = NULL;
        bat_priv->num_ifaces = 0;
  
        bat_priv->primary_if = NULL;
        bat_priv->num_ifaces = 0;
+@@ -983,7 +983,7 @@ int batadv_softif_is_valid(const struct net_device *net_dev)
+       return 0;
+ }
+-struct rtnl_link_ops batadv_link_ops __read_mostly = {
++struct rtnl_link_ops batadv_link_ops = {
+       .kind           = "batadv",
+       .priv_size      = sizeof(struct batadv_priv),
+       .setup          = batadv_softif_init_early,
 diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
 index 8854c05..ee5d5497 100644
 --- a/net/batman-adv/types.h
 diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
 index 8854c05..ee5d5497 100644
 --- a/net/batman-adv/types.h
@@ -100711,6 +100255,46 @@ index 8854c05..ee5d5497 100644
        atomic_t bcast_queue_left;
        atomic_t batman_queue_left;
        char num_ifaces;
        atomic_t bcast_queue_left;
        atomic_t batman_queue_left;
        char num_ifaces;
+diff --git a/net/bluetooth/6lowpan.c b/net/bluetooth/6lowpan.c
+index c2e0d14..bfa852b 100644
+--- a/net/bluetooth/6lowpan.c
++++ b/net/bluetooth/6lowpan.c
+@@ -367,7 +367,6 @@ static int recv_pkt(struct sk_buff *skb, struct net_device *dev,
+ drop:
+       dev->stats.rx_dropped++;
+-      kfree_skb(skb);
+       return NET_RX_DROP;
+ }
+diff --git a/net/bluetooth/bnep/core.c b/net/bluetooth/bnep/core.c
+index 85bcc21..ce82722d 100644
+--- a/net/bluetooth/bnep/core.c
++++ b/net/bluetooth/bnep/core.c
+@@ -533,6 +533,9 @@ int bnep_add_connection(struct bnep_connadd_req *req, struct socket *sock)
+       BT_DBG("");
++      if (!l2cap_is_socket(sock))
++              return -EBADFD;
++
+       baswap((void *) dst, &l2cap_pi(sock->sk)->chan->dst);
+       baswap((void *) src, &l2cap_pi(sock->sk)->chan->src);
+diff --git a/net/bluetooth/cmtp/core.c b/net/bluetooth/cmtp/core.c
+index 67fe5e8..278a194 100644
+--- a/net/bluetooth/cmtp/core.c
++++ b/net/bluetooth/cmtp/core.c
+@@ -334,6 +334,9 @@ int cmtp_add_connection(struct cmtp_connadd_req *req, struct socket *sock)
+       BT_DBG("");
++      if (!l2cap_is_socket(sock))
++              return -EBADFD;
++
+       session = kzalloc(sizeof(struct cmtp_session), GFP_KERNEL);
+       if (!session)
+               return -ENOMEM;
 diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
 index 115f149..f0ba286 100644
 --- a/net/bluetooth/hci_sock.c
 diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
 index 115f149..f0ba286 100644
 --- a/net/bluetooth/hci_sock.c
@@ -100724,11 +100308,31 @@ index 115f149..f0ba286 100644
                if (copy_from_user(&uf, optval, len)) {
                        err = -EFAULT;
                        break;
                if (copy_from_user(&uf, optval, len)) {
                        err = -EFAULT;
                        break;
+diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
+index 1b7d605..02ebd10 100644
+--- a/net/bluetooth/hidp/core.c
++++ b/net/bluetooth/hidp/core.c
+@@ -1318,13 +1318,14 @@ int hidp_connection_add(struct hidp_connadd_req *req,
+ {
+       struct hidp_session *session;
+       struct l2cap_conn *conn;
+-      struct l2cap_chan *chan = l2cap_pi(ctrl_sock->sk)->chan;
++      struct l2cap_chan *chan;
+       int ret;
+       ret = hidp_verify_sockets(ctrl_sock, intr_sock);
+       if (ret)
+               return ret;
++      chan = l2cap_pi(ctrl_sock->sk)->chan;
+       conn = NULL;
+       l2cap_chan_lock(chan);
+       if (chan->conn)
 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
 diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
-index 14ca8ae..262d49a 100644
+index b6f9777..36d3039 100644
 --- a/net/bluetooth/l2cap_core.c
 +++ b/net/bluetooth/l2cap_core.c
 --- a/net/bluetooth/l2cap_core.c
 +++ b/net/bluetooth/l2cap_core.c
-@@ -3565,8 +3565,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
+@@ -3512,8 +3512,10 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
                        break;
  
                case L2CAP_CONF_RFC:
                        break;
  
                case L2CAP_CONF_RFC:
@@ -100742,10 +100346,10 @@ index 14ca8ae..262d49a 100644
                        if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
                            rfc.mode != chan->mode)
 diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
                        if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
                            rfc.mode != chan->mode)
 diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
-index 1884f72..b3b71f9 100644
+index 31f106e..323f606 100644
 --- a/net/bluetooth/l2cap_sock.c
 +++ b/net/bluetooth/l2cap_sock.c
 --- a/net/bluetooth/l2cap_sock.c
 +++ b/net/bluetooth/l2cap_sock.c
-@@ -629,7 +629,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
+@@ -628,7 +628,8 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
        struct sock *sk = sock->sk;
        struct l2cap_chan *chan = l2cap_pi(sk)->chan;
        struct l2cap_options opts;
        struct sock *sk = sock->sk;
        struct l2cap_chan *chan = l2cap_pi(sk)->chan;
        struct l2cap_options opts;
@@ -100755,7 +100359,7 @@ index 1884f72..b3b71f9 100644
        u32 opt;
  
        BT_DBG("sk %p", sk);
        u32 opt;
  
        BT_DBG("sk %p", sk);
-@@ -656,7 +657,7 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
+@@ -655,7 +656,7 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
                opts.max_tx   = chan->max_tx;
                opts.txwin_size = chan->tx_win;
  
                opts.max_tx   = chan->max_tx;
                opts.txwin_size = chan->tx_win;
  
@@ -100764,7 +100368,7 @@ index 1884f72..b3b71f9 100644
                if (copy_from_user((char *) &opts, optval, len)) {
                        err = -EFAULT;
                        break;
                if (copy_from_user((char *) &opts, optval, len)) {
                        err = -EFAULT;
                        break;
-@@ -743,7 +744,8 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
+@@ -742,7 +743,8 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
        struct bt_security sec;
        struct bt_power pwr;
        struct l2cap_conn *conn;
        struct bt_security sec;
        struct bt_power pwr;
        struct l2cap_conn *conn;
@@ -100774,7 +100378,7 @@ index 1884f72..b3b71f9 100644
        u32 opt;
  
        BT_DBG("sk %p", sk);
        u32 opt;
  
        BT_DBG("sk %p", sk);
-@@ -767,7 +769,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
+@@ -766,7 +768,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
  
                sec.level = BT_SECURITY_LOW;
  
  
                sec.level = BT_SECURITY_LOW;
  
@@ -100836,11 +100440,24 @@ index 8e385a0..a5bdd8e 100644
  
        tty_port_close(&dev->port, tty, filp);
  }
  
        tty_port_close(&dev->port, tty, filp);
  }
+diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c
+index e5ec470..cbfabd1 100644
+--- a/net/bridge/br_netlink.c
++++ b/net/bridge/br_netlink.c
+@@ -564,7 +564,7 @@ static struct rtnl_af_ops br_af_ops = {
+       .get_link_af_size       = br_get_link_af_size,
+ };
+-struct rtnl_link_ops br_link_ops __read_mostly = {
++struct rtnl_link_ops br_link_ops = {
+       .kind                   = "bridge",
+       .priv_size              = sizeof(struct net_bridge),
+       .setup                  = br_dev_setup,
 diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
 diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c
-index 6d69631..b8fdc85 100644
+index d9a8c05..8dadc6c6 100644
 --- a/net/bridge/netfilter/ebtables.c
 +++ b/net/bridge/netfilter/ebtables.c
 --- a/net/bridge/netfilter/ebtables.c
 +++ b/net/bridge/netfilter/ebtables.c
-@@ -1518,7 +1518,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
+@@ -1533,7 +1533,7 @@ static int do_ebt_get_ctl(struct sock *sk, int cmd, void __user *user, int *len)
                        tmp.valid_hooks = t->table->valid_hooks;
                }
                mutex_unlock(&ebt_mutex);
                        tmp.valid_hooks = t->table->valid_hooks;
                }
                mutex_unlock(&ebt_mutex);
@@ -100849,7 +100466,7 @@ index 6d69631..b8fdc85 100644
                        BUGPRINT("c2u Didn't work\n");
                        ret = -EFAULT;
                        break;
                        BUGPRINT("c2u Didn't work\n");
                        ret = -EFAULT;
                        break;
-@@ -2324,7 +2324,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
+@@ -2339,7 +2339,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
                        goto out;
                tmp.valid_hooks = t->valid_hooks;
  
                        goto out;
                tmp.valid_hooks = t->valid_hooks;
  
@@ -100858,7 +100475,7 @@ index 6d69631..b8fdc85 100644
                        ret = -EFAULT;
                        break;
                }
                        ret = -EFAULT;
                        break;
                }
-@@ -2335,7 +2335,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
+@@ -2350,7 +2350,7 @@ static int compat_do_ebt_get_ctl(struct sock *sk, int cmd,
                tmp.entries_size = t->table->entries_size;
                tmp.valid_hooks = t->table->valid_hooks;
  
                tmp.entries_size = t->table->entries_size;
                tmp.valid_hooks = t->table->valid_hooks;
  
@@ -100910,6 +100527,19 @@ index f5afda1..dcf770a 100644
                                         p->sequence_no);
                        list_del(&p->list);
                        goto out;
                                         p->sequence_no);
                        list_del(&p->list);
                        goto out;
+diff --git a/net/caif/chnl_net.c b/net/caif/chnl_net.c
+index 4589ff67..46d6b8f 100644
+--- a/net/caif/chnl_net.c
++++ b/net/caif/chnl_net.c
+@@ -516,7 +516,7 @@ static const struct nla_policy ipcaif_policy[IFLA_CAIF_MAX + 1] = {
+ };
+-static struct rtnl_link_ops ipcaif_link_ops __read_mostly = {
++static struct rtnl_link_ops ipcaif_link_ops = {
+       .kind           = "caif",
+       .priv_size      = sizeof(struct chnl_net),
+       .setup          = ipcaif_net_setup,
 diff --git a/net/can/af_can.c b/net/can/af_can.c
 index ce82337..5d17b4d 100644
 --- a/net/can/af_can.c
 diff --git a/net/can/af_can.c b/net/can/af_can.c
 index ce82337..5d17b4d 100644
 --- a/net/can/af_can.c
@@ -100981,7 +100611,7 @@ index 1a19b98..df2b4ec 100644
        if (!can_dir) {
                printk(KERN_INFO "can: failed to create /proc/net/can . "
 diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
        if (!can_dir) {
                printk(KERN_INFO "can: failed to create /proc/net/can . "
 diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
-index 9f02369..e6160e9 100644
+index 8d1653c..77ad145 100644
 --- a/net/ceph/messenger.c
 +++ b/net/ceph/messenger.c
 @@ -188,7 +188,7 @@ static void con_fault(struct ceph_connection *con);
 --- a/net/ceph/messenger.c
 +++ b/net/ceph/messenger.c
 @@ -188,7 +188,7 @@ static void con_fault(struct ceph_connection *con);
@@ -101156,7 +100786,7 @@ index fdbc9a8..cd6972c 100644
  
        return err;
 diff --git a/net/core/dev.c b/net/core/dev.c
  
        return err;
 diff --git a/net/core/dev.c b/net/core/dev.c
-index cf8a95f..2837211 100644
+index 945bbd0..8b1a370 100644
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -1683,14 +1683,14 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
 --- a/net/core/dev.c
 +++ b/net/core/dev.c
 @@ -1683,14 +1683,14 @@ int __dev_forward_skb(struct net_device *dev, struct sk_buff *skb)
@@ -101176,25 +100806,16 @@ index cf8a95f..2837211 100644
                kfree_skb(skb);
                return NET_RX_DROP;
        }
                kfree_skb(skb);
                return NET_RX_DROP;
        }
-@@ -2487,7 +2487,7 @@ static int illegal_highdma(struct net_device *dev, struct sk_buff *skb)
- struct dev_gso_cb {
-       void (*destructor)(struct sk_buff *skb);
--};
-+} __no_const;
- #define DEV_GSO_CB(skb) ((struct dev_gso_cb *)(skb)->cb)
-@@ -2952,7 +2952,7 @@ recursion_alert:
-       rc = -ENETDOWN;
+@@ -2985,7 +2985,7 @@ recursion_alert:
+ drop:
        rcu_read_unlock_bh();
  
 -      atomic_long_inc(&dev->tx_dropped);
 +      atomic_long_inc_unchecked(&dev->tx_dropped);
        rcu_read_unlock_bh();
  
 -      atomic_long_inc(&dev->tx_dropped);
 +      atomic_long_inc_unchecked(&dev->tx_dropped);
-       kfree_skb(skb);
+       kfree_skb_list(skb);
        return rc;
  out:
        return rc;
  out:
-@@ -3296,7 +3296,7 @@ enqueue:
+@@ -3328,7 +3328,7 @@ enqueue:
  
        local_irq_restore(flags);
  
  
        local_irq_restore(flags);
  
@@ -101203,16 +100824,16 @@ index cf8a95f..2837211 100644
        kfree_skb(skb);
        return NET_RX_DROP;
  }
        kfree_skb(skb);
        return NET_RX_DROP;
  }
-@@ -3373,7 +3373,7 @@ int netif_rx_ni(struct sk_buff *skb)
+@@ -3405,7 +3405,7 @@ int netif_rx_ni(struct sk_buff *skb)
  }
  EXPORT_SYMBOL(netif_rx_ni);
  
 -static void net_tx_action(struct softirq_action *h)
 +static __latent_entropy void net_tx_action(void)
  {
  }
  EXPORT_SYMBOL(netif_rx_ni);
  
 -static void net_tx_action(struct softirq_action *h)
 +static __latent_entropy void net_tx_action(void)
  {
-       struct softnet_data *sd = &__get_cpu_var(softnet_data);
+       struct softnet_data *sd = this_cpu_ptr(&softnet_data);
  
  
-@@ -3706,7 +3706,7 @@ ncls:
+@@ -3738,7 +3738,7 @@ ncls:
                        ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
        } else {
  drop:
                        ret = pt_prev->func(skb, skb->dev, pt_prev, orig_dev);
        } else {
  drop:
@@ -101221,16 +100842,16 @@ index cf8a95f..2837211 100644
                kfree_skb(skb);
                /* Jamal, now you will not able to escape explaining
                 * me how you were going to use this. :-)
                kfree_skb(skb);
                /* Jamal, now you will not able to escape explaining
                 * me how you were going to use this. :-)
-@@ -4426,7 +4426,7 @@ void netif_napi_del(struct napi_struct *napi)
+@@ -4502,7 +4502,7 @@ void netif_napi_del(struct napi_struct *napi)
  }
  EXPORT_SYMBOL(netif_napi_del);
  
 -static void net_rx_action(struct softirq_action *h)
 +static __latent_entropy void net_rx_action(void)
  {
  }
  EXPORT_SYMBOL(netif_napi_del);
  
 -static void net_rx_action(struct softirq_action *h)
 +static __latent_entropy void net_rx_action(void)
  {
-       struct softnet_data *sd = &__get_cpu_var(softnet_data);
+       struct softnet_data *sd = this_cpu_ptr(&softnet_data);
        unsigned long time_limit = jiffies + 2;
        unsigned long time_limit = jiffies + 2;
-@@ -6480,8 +6480,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
+@@ -6548,8 +6548,8 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
        } else {
                netdev_stats_to_stats64(storage, &dev->stats);
        }
        } else {
                netdev_stats_to_stats64(storage, &dev->stats);
        }
@@ -101242,28 +100863,29 @@ index cf8a95f..2837211 100644
  }
  EXPORT_SYMBOL(dev_get_stats);
 diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c
  }
  EXPORT_SYMBOL(dev_get_stats);
 diff --git a/net/core/dev_ioctl.c b/net/core/dev_ioctl.c
-index cf999e0..c59a9754 100644
+index 72e899a..79a9409 100644
 --- a/net/core/dev_ioctl.c
 +++ b/net/core/dev_ioctl.c
 --- a/net/core/dev_ioctl.c
 +++ b/net/core/dev_ioctl.c
-@@ -366,9 +366,13 @@ void dev_load(struct net *net, const char *name)
+@@ -365,8 +365,13 @@ void dev_load(struct net *net, const char *name)
+       no_module = !dev;
        if (no_module && capable(CAP_NET_ADMIN))
                no_module = request_module("netdev-%s", name);
        if (no_module && capable(CAP_NET_ADMIN))
                no_module = request_module("netdev-%s", name);
-       if (no_module && capable(CAP_SYS_MODULE)) {
+-      if (no_module && capable(CAP_SYS_MODULE))
++      if (no_module && capable(CAP_SYS_MODULE)) {
 +#ifdef CONFIG_GRKERNSEC_MODHARDEN
 +              ___request_module(true, "grsec_modharden_netdev", "%s", name);
 +#else
 +#ifdef CONFIG_GRKERNSEC_MODHARDEN
 +              ___request_module(true, "grsec_modharden_netdev", "%s", name);
 +#else
-               if (!request_module("%s", name))
-                       pr_warn("Loading kernel module for a network device with CAP_SYS_MODULE (deprecated).  Use CAP_NET_ADMIN and alias netdev-%s instead.\n",
-                               name);
+               request_module("%s", name);
 +#endif
 +#endif
-       }
++      }
  }
  EXPORT_SYMBOL(dev_load);
  }
  EXPORT_SYMBOL(dev_load);
 diff --git a/net/core/filter.c b/net/core/filter.c
 diff --git a/net/core/filter.c b/net/core/filter.c
-index d814b8a..b5ab778 100644
+index 647b122..18a7ff6 100644
 --- a/net/core/filter.c
 +++ b/net/core/filter.c
 --- a/net/core/filter.c
 +++ b/net/core/filter.c
-@@ -559,7 +559,11 @@ do_pass:
+@@ -532,7 +532,11 @@ do_pass:
  
                /* Unkown instruction. */
                default:
  
                /* Unkown instruction. */
                default:
@@ -101276,7 +100898,7 @@ index d814b8a..b5ab778 100644
                }
  
                insn++;
                }
  
                insn++;
-@@ -606,7 +610,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen)
+@@ -576,7 +580,7 @@ static int check_load_and_stores(const struct sock_filter *filter, int flen)
        u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */
        int pc, ret = 0;
  
        u16 *masks, memvalid = 0; /* One bit per cell, 16 cells */
        int pc, ret = 0;
  
@@ -101285,21 +100907,7 @@ index d814b8a..b5ab778 100644
  
        masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL);
        if (!masks)
  
        masks = kmalloc_array(flen, sizeof(*masks), GFP_KERNEL);
        if (!masks)
-@@ -933,7 +937,7 @@ static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp)
-       /* Expand fp for appending the new filter representation. */
-       old_fp = fp;
--      fp = krealloc(old_fp, bpf_prog_size(new_len), GFP_KERNEL);
-+      fp = bpf_prog_realloc(old_fp, bpf_prog_size(new_len), 0);
-       if (!fp) {
-               /* The old_fp is still around in case we couldn't
-                * allocate new memory, so uncharge on that one.
-@@ -1013,11 +1017,11 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
-       if (fprog->filter == NULL)
-               return -EINVAL;
--      fp = kmalloc(bpf_prog_size(fprog->len), GFP_KERNEL);
-+      fp = bpf_prog_alloc(bpf_prog_size(fprog->len), 0);
+@@ -987,7 +991,7 @@ int bpf_prog_create(struct bpf_prog **pfp, struct sock_fprog_kern *fprog)
        if (!fp)
                return -ENOMEM;
  
        if (!fp)
                return -ENOMEM;
  
@@ -101308,30 +100916,6 @@ index d814b8a..b5ab778 100644
  
        fp->len = fprog->len;
        /* Since unattached filters are not copied back to user
  
        fp->len = fprog->len;
        /* Since unattached filters are not copied back to user
-@@ -1069,12 +1073,12 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
-       if (fprog->filter == NULL)
-               return -EINVAL;
--      prog = kmalloc(bpf_fsize, GFP_KERNEL);
-+      prog = bpf_prog_alloc(bpf_fsize, 0);
-       if (!prog)
-               return -ENOMEM;
-       if (copy_from_user(prog->insns, fprog->filter, fsize)) {
--              kfree(prog);
-+              __bpf_prog_free(prog);
-               return -EFAULT;
-       }
-@@ -1082,7 +1086,7 @@ int sk_attach_filter(struct sock_fprog *fprog, struct sock *sk)
-       err = bpf_prog_store_orig_filter(prog, fprog);
-       if (err) {
--              kfree(prog);
-+              __bpf_prog_free(prog);
-               return -ENOMEM;
-       }
 diff --git a/net/core/flow.c b/net/core/flow.c
 index a0348fd..6951c76 100644
 --- a/net/core/flow.c
 diff --git a/net/core/flow.c b/net/core/flow.c
 index a0348fd..6951c76 100644
 --- a/net/core/flow.c
@@ -101472,7 +101056,7 @@ index 9dd0669..c52fb1b 100644
  static DEVICE_ATTR_RO(carrier_changes);
  
 diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
  static DEVICE_ATTR_RO(carrier_changes);
  
 diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
-index 7c6b51a..e9dd57f 100644
+index 7f15517..f7d65c0 100644
 --- a/net/core/net_namespace.c
 +++ b/net/core/net_namespace.c
 @@ -445,7 +445,7 @@ static int __register_pernet_operations(struct list_head *list,
 --- a/net/core/net_namespace.c
 +++ b/net/core/net_namespace.c
 @@ -445,7 +445,7 @@ static int __register_pernet_operations(struct list_head *list,
@@ -101512,10 +101096,10 @@ index 7c6b51a..e9dd57f 100644
        return error;
  }
 diff --git a/net/core/netpoll.c b/net/core/netpoll.c
        return error;
  }
 diff --git a/net/core/netpoll.c b/net/core/netpoll.c
-index 907fb5e..8260f040b 100644
+index e6645b4..43e1af9 100644
 --- a/net/core/netpoll.c
 +++ b/net/core/netpoll.c
 --- a/net/core/netpoll.c
 +++ b/net/core/netpoll.c
-@@ -382,7 +382,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
+@@ -379,7 +379,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
        struct udphdr *udph;
        struct iphdr *iph;
        struct ethhdr *eth;
        struct udphdr *udph;
        struct iphdr *iph;
        struct ethhdr *eth;
@@ -101524,7 +101108,7 @@ index 907fb5e..8260f040b 100644
        struct ipv6hdr *ip6h;
  
        udp_len = len + sizeof(*udph);
        struct ipv6hdr *ip6h;
  
        udp_len = len + sizeof(*udph);
-@@ -453,7 +453,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
+@@ -450,7 +450,7 @@ void netpoll_send_udp(struct netpoll *np, const char *msg, int len)
                put_unaligned(0x45, (unsigned char *)iph);
                iph->tos      = 0;
                put_unaligned(htons(ip_len), &(iph->tot_len));
                put_unaligned(0x45, (unsigned char *)iph);
                iph->tos      = 0;
                put_unaligned(htons(ip_len), &(iph->tot_len));
@@ -101534,10 +101118,10 @@ index 907fb5e..8260f040b 100644
                iph->ttl      = 64;
                iph->protocol = IPPROTO_UDP;
 diff --git a/net/core/pktgen.c b/net/core/pktgen.c
                iph->ttl      = 64;
                iph->protocol = IPPROTO_UDP;
 diff --git a/net/core/pktgen.c b/net/core/pktgen.c
-index 8b849dd..cd88bfc 100644
+index 443256b..bbff424 100644
 --- a/net/core/pktgen.c
 +++ b/net/core/pktgen.c
 --- a/net/core/pktgen.c
 +++ b/net/core/pktgen.c
-@@ -3723,7 +3723,7 @@ static int __net_init pg_net_init(struct net *net)
+@@ -3753,7 +3753,7 @@ static int __net_init pg_net_init(struct net *net)
        pn->net = net;
        INIT_LIST_HEAD(&pn->pktgen_threads);
        pn->pktgen_exiting = false;
        pn->net = net;
        INIT_LIST_HEAD(&pn->pktgen_threads);
        pn->pktgen_exiting = false;
@@ -101547,7 +101131,7 @@ index 8b849dd..cd88bfc 100644
                pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR);
                return -ENODEV;
 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
                pr_warn("cannot create /proc/net/%s\n", PG_PROC_DIR);
                return -ENODEV;
 diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
-index f0493e3..0f43f7a 100644
+index 76321ea..3129bd6 100644
 --- a/net/core/rtnetlink.c
 +++ b/net/core/rtnetlink.c
 @@ -58,7 +58,7 @@ struct rtnl_link {
 --- a/net/core/rtnetlink.c
 +++ b/net/core/rtnetlink.c
 @@ -58,7 +58,7 @@ struct rtnl_link {
@@ -101635,47 +101219,10 @@ index b442e7e..6f5b5a2 100644
        {
                struct socket *sock;
 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
        {
                struct socket *sock;
 diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index 8d28969..4d36260 100644
+index 32e31c2..e981248 100644
 --- a/net/core/skbuff.c
 +++ b/net/core/skbuff.c
 --- a/net/core/skbuff.c
 +++ b/net/core/skbuff.c
-@@ -360,18 +360,29 @@ refill:
-                               goto end;
-               }
-               nc->frag.size = PAGE_SIZE << order;
--recycle:
--              atomic_set(&nc->frag.page->_count, NETDEV_PAGECNT_MAX_BIAS);
-+              /* Even if we own the page, we do not use atomic_set().
-+               * This would break get_page_unless_zero() users.
-+               */
-+              atomic_add(NETDEV_PAGECNT_MAX_BIAS - 1,
-+                         &nc->frag.page->_count);
-               nc->pagecnt_bias = NETDEV_PAGECNT_MAX_BIAS;
-               nc->frag.offset = 0;
-       }
-       if (nc->frag.offset + fragsz > nc->frag.size) {
--              /* avoid unnecessary locked operations if possible */
--              if ((atomic_read(&nc->frag.page->_count) == nc->pagecnt_bias) ||
--                  atomic_sub_and_test(nc->pagecnt_bias, &nc->frag.page->_count))
--                      goto recycle;
--              goto refill;
-+              if (atomic_read(&nc->frag.page->_count) != nc->pagecnt_bias) {
-+                      if (!atomic_sub_and_test(nc->pagecnt_bias,
-+                                               &nc->frag.page->_count))
-+                              goto refill;
-+                      /* OK, page count is 0, we can safely set it */
-+                      atomic_set(&nc->frag.page->_count,
-+                                 NETDEV_PAGECNT_MAX_BIAS);
-+              } else {
-+                      atomic_add(NETDEV_PAGECNT_MAX_BIAS - nc->pagecnt_bias,
-+                                 &nc->frag.page->_count);
-+              }
-+              nc->pagecnt_bias = NETDEV_PAGECNT_MAX_BIAS;
-+              nc->frag.offset = 0;
-       }
-       data = page_address(nc->frag.page) + nc->frag.offset;
-@@ -2011,7 +2022,7 @@ EXPORT_SYMBOL(__skb_checksum);
+@@ -2025,7 +2025,7 @@ EXPORT_SYMBOL(__skb_checksum);
  __wsum skb_checksum(const struct sk_buff *skb, int offset,
                    int len, __wsum csum)
  {
  __wsum skb_checksum(const struct sk_buff *skb, int offset,
                    int len, __wsum csum)
  {
@@ -101684,7 +101231,7 @@ index 8d28969..4d36260 100644
                .update  = csum_partial_ext,
                .combine = csum_block_add_ext,
        };
                .update  = csum_partial_ext,
                .combine = csum_block_add_ext,
        };
-@@ -3237,13 +3248,15 @@ void __init skb_init(void)
+@@ -3255,12 +3255,14 @@ void __init skb_init(void)
        skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
                                              sizeof(struct sk_buff),
                                              0,
        skbuff_head_cache = kmem_cache_create("skbuff_head_cache",
                                              sizeof(struct sk_buff),
                                              0,
@@ -101693,8 +101240,7 @@ index 8d28969..4d36260 100644
 +                                            SLAB_NO_SANITIZE,
                                              NULL);
        skbuff_fclone_cache = kmem_cache_create("skbuff_fclone_cache",
 +                                            SLAB_NO_SANITIZE,
                                              NULL);
        skbuff_fclone_cache = kmem_cache_create("skbuff_fclone_cache",
-                                               (2*sizeof(struct sk_buff)) +
-                                               sizeof(atomic_t),
+                                               sizeof(struct sk_buff_fclones),
                                                0,
 -                                              SLAB_HWCACHE_ALIGN|SLAB_PANIC,
 +                                              SLAB_HWCACHE_ALIGN|SLAB_PANIC|
                                                0,
 -                                              SLAB_HWCACHE_ALIGN|SLAB_PANIC,
 +                                              SLAB_HWCACHE_ALIGN|SLAB_PANIC|
@@ -101703,10 +101249,10 @@ index 8d28969..4d36260 100644
  }
  
 diff --git a/net/core/sock.c b/net/core/sock.c
  }
  
 diff --git a/net/core/sock.c b/net/core/sock.c
-index 9c3f823..bd8c884 100644
+index 15e0c67..0310f4a 100644
 --- a/net/core/sock.c
 +++ b/net/core/sock.c
 --- a/net/core/sock.c
 +++ b/net/core/sock.c
-@@ -442,7 +442,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -441,7 +441,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
        struct sk_buff_head *list = &sk->sk_receive_queue;
  
        if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
        struct sk_buff_head *list = &sk->sk_receive_queue;
  
        if (atomic_read(&sk->sk_rmem_alloc) >= sk->sk_rcvbuf) {
@@ -101715,7 +101261,7 @@ index 9c3f823..bd8c884 100644
                trace_sock_rcvqueue_full(sk, skb);
                return -ENOMEM;
        }
                trace_sock_rcvqueue_full(sk, skb);
                return -ENOMEM;
        }
-@@ -452,7 +452,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -451,7 +451,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
                return err;
  
        if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
                return err;
  
        if (!sk_rmem_schedule(sk, skb, skb->truesize)) {
@@ -101724,7 +101270,7 @@ index 9c3f823..bd8c884 100644
                return -ENOBUFS;
        }
  
                return -ENOBUFS;
        }
  
-@@ -472,7 +472,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
+@@ -464,7 +464,7 @@ int sock_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
        skb_dst_force(skb);
  
        spin_lock_irqsave(&list->lock, flags);
        skb_dst_force(skb);
  
        spin_lock_irqsave(&list->lock, flags);
@@ -101733,7 +101279,7 @@ index 9c3f823..bd8c884 100644
        __skb_queue_tail(list, skb);
        spin_unlock_irqrestore(&list->lock, flags);
  
        __skb_queue_tail(list, skb);
        spin_unlock_irqrestore(&list->lock, flags);
  
-@@ -492,7 +492,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -484,7 +484,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
        skb->dev = NULL;
  
        if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
        skb->dev = NULL;
  
        if (sk_rcvqueues_full(sk, sk->sk_rcvbuf)) {
@@ -101742,7 +101288,7 @@ index 9c3f823..bd8c884 100644
                goto discard_and_relse;
        }
        if (nested)
                goto discard_and_relse;
        }
        if (nested)
-@@ -510,7 +510,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
+@@ -502,7 +502,7 @@ int sk_receive_skb(struct sock *sk, struct sk_buff *skb, const int nested)
                mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
        } else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
                bh_unlock_sock(sk);
                mutex_release(&sk->sk_lock.dep_map, 1, _RET_IP_);
        } else if (sk_add_backlog(sk, skb, sk->sk_rcvbuf)) {
                bh_unlock_sock(sk);
@@ -101751,7 +101297,7 @@ index 9c3f823..bd8c884 100644
                goto discard_and_relse;
        }
  
                goto discard_and_relse;
        }
  
-@@ -999,12 +999,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -991,12 +991,12 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
                struct timeval tm;
        } v;
  
                struct timeval tm;
        } v;
  
@@ -101767,7 +101313,7 @@ index 9c3f823..bd8c884 100644
                return -EINVAL;
  
        memset(&v, 0, sizeof(v));
                return -EINVAL;
  
        memset(&v, 0, sizeof(v));
-@@ -1142,11 +1142,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1134,11 +1134,11 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
  
        case SO_PEERNAME:
        {
  
        case SO_PEERNAME:
        {
@@ -101781,7 +101327,7 @@ index 9c3f823..bd8c884 100644
                        return -EINVAL;
                if (copy_to_user(optval, address, len))
                        return -EFAULT;
                        return -EINVAL;
                if (copy_to_user(optval, address, len))
                        return -EFAULT;
-@@ -1227,7 +1227,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
+@@ -1219,7 +1219,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
  
        if (len > lv)
                len = lv;
  
        if (len > lv)
                len = lv;
@@ -101790,16 +101336,7 @@ index 9c3f823..bd8c884 100644
                return -EFAULT;
  lenout:
        if (put_user(len, optlen))
                return -EFAULT;
  lenout:
        if (put_user(len, optlen))
-@@ -1723,6 +1723,8 @@ EXPORT_SYMBOL(sock_kmalloc);
-  */
- void sock_kfree_s(struct sock *sk, void *mem, int size)
- {
-+      if (WARN_ON_ONCE(!mem))
-+              return;
-       kfree(mem);
-       atomic_sub(size, &sk->sk_omem_alloc);
- }
-@@ -2369,7 +2371,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
+@@ -2315,7 +2315,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
         */
        smp_wmb();
        atomic_set(&sk->sk_refcnt, 1);
         */
        smp_wmb();
        atomic_set(&sk->sk_refcnt, 1);
@@ -101808,15 +101345,15 @@ index 9c3f823..bd8c884 100644
  }
  EXPORT_SYMBOL(sock_init_data);
  
  }
  EXPORT_SYMBOL(sock_init_data);
  
-@@ -2497,6 +2499,7 @@ void sock_enable_timestamp(struct sock *sk, int flag)
+@@ -2443,6 +2443,7 @@ void sock_enable_timestamp(struct sock *sk, int flag)
  int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
                       int level, int type)
  {
 +      struct sock_extended_err ee;
        struct sock_exterr_skb *serr;
  int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
                       int level, int type)
  {
 +      struct sock_extended_err ee;
        struct sock_exterr_skb *serr;
-       struct sk_buff *skb, *skb2;
+       struct sk_buff *skb;
        int copied, err;
        int copied, err;
-@@ -2518,7 +2521,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
+@@ -2464,7 +2465,8 @@ int sock_recv_errqueue(struct sock *sk, struct msghdr *msg, int len,
        sock_recv_timestamp(msg, sk, skb);
  
        serr = SKB_EXT_ERR(skb);
        sock_recv_timestamp(msg, sk, skb);
  
        serr = SKB_EXT_ERR(skb);
@@ -101967,10 +101504,10 @@ index cf9cd13..50683950 100644
        .exit = sysctl_core_net_exit,
  };
 diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
        .exit = sysctl_core_net_exit,
  };
 diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c
-index ae011b4..d2d18bf 100644
+index 25733d5..b9360f0 100644
 --- a/net/decnet/af_decnet.c
 +++ b/net/decnet/af_decnet.c
 --- a/net/decnet/af_decnet.c
 +++ b/net/decnet/af_decnet.c
-@@ -465,6 +465,7 @@ static struct proto dn_proto = {
+@@ -466,6 +466,7 @@ static struct proto dn_proto = {
        .sysctl_rmem            = sysctl_decnet_rmem,
        .max_header             = DN_MAX_NSP_DATA_HEADER + 64,
        .obj_size               = sizeof(struct dn_sock),
        .sysctl_rmem            = sysctl_decnet_rmem,
        .max_header             = DN_MAX_NSP_DATA_HEADER + 64,
        .obj_size               = sizeof(struct dn_sock),
@@ -101979,10 +101516,10 @@ index ae011b4..d2d18bf 100644
  
  static struct sock *dn_alloc_sock(struct net *net, struct socket *sock, gfp_t gfp)
 diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
  
  static struct sock *dn_alloc_sock(struct net *net, struct socket *sock, gfp_t gfp)
 diff --git a/net/decnet/dn_dev.c b/net/decnet/dn_dev.c
-index 3b726f3..1af6368 100644
+index 4400da7..3429972 100644
 --- a/net/decnet/dn_dev.c
 +++ b/net/decnet/dn_dev.c
 --- a/net/decnet/dn_dev.c
 +++ b/net/decnet/dn_dev.c
-@@ -200,7 +200,7 @@ static struct dn_dev_sysctl_table {
+@@ -201,7 +201,7 @@ static struct dn_dev_sysctl_table {
                .extra1 = &min_t3,
                .extra2 = &max_t3
        },
                .extra1 = &min_t3,
                .extra2 = &max_t3
        },
@@ -102013,8 +101550,34 @@ index 5325b54..a0d4d69 100644
                return -EFAULT;
  
        *lenp = len;
                return -EFAULT;
  
        *lenp = len;
+diff --git a/net/hsr/hsr_netlink.c b/net/hsr/hsr_netlink.c
+index a2c7e4c..3dc9f67 100644
+--- a/net/hsr/hsr_netlink.c
++++ b/net/hsr/hsr_netlink.c
+@@ -102,7 +102,7 @@ nla_put_failure:
+       return -EMSGSIZE;
+ }
+-static struct rtnl_link_ops hsr_link_ops __read_mostly = {
++static struct rtnl_link_ops hsr_link_ops = {
+       .kind           = "hsr",
+       .maxtype        = IFLA_HSR_MAX,
+       .policy         = hsr_policy,
+diff --git a/net/ieee802154/6lowpan_rtnl.c b/net/ieee802154/6lowpan_rtnl.c
+index 4413629..dea596a 100644
+--- a/net/ieee802154/6lowpan_rtnl.c
++++ b/net/ieee802154/6lowpan_rtnl.c
+@@ -635,7 +635,7 @@ static void lowpan_dellink(struct net_device *dev, struct list_head *head)
+       dev_put(real_dev);
+ }
+-static struct rtnl_link_ops lowpan_link_ops __read_mostly = {
++static struct rtnl_link_ops lowpan_link_ops = {
+       .kind           = "lowpan",
+       .priv_size      = sizeof(struct lowpan_dev_info),
+       .setup          = lowpan_setup,
 diff --git a/net/ieee802154/reassembly.c b/net/ieee802154/reassembly.c
 diff --git a/net/ieee802154/reassembly.c b/net/ieee802154/reassembly.c
-index 32755cb..236d827 100644
+index 7cfcd68..84ca5b7 100644
 --- a/net/ieee802154/reassembly.c
 +++ b/net/ieee802154/reassembly.c
 @@ -433,14 +433,13 @@ static struct ctl_table lowpan_frags_ctl_table[] = {
 --- a/net/ieee802154/reassembly.c
 +++ b/net/ieee802154/reassembly.c
 @@ -433,14 +433,13 @@ static struct ctl_table lowpan_frags_ctl_table[] = {
@@ -102057,11 +101620,44 @@ index 32755cb..236d827 100644
  err_alloc:
        return -ENOMEM;
  }
  err_alloc:
        return -ENOMEM;
  }
+diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
+index e67da4e..da217942 100644
+--- a/net/ipv4/af_inet.c
++++ b/net/ipv4/af_inet.c
+@@ -1392,7 +1392,7 @@ int inet_recv_error(struct sock *sk, struct msghdr *msg, int len, int *addr_len)
+               return ip_recv_error(sk, msg, len, addr_len);
+ #if IS_ENABLED(CONFIG_IPV6)
+       if (sk->sk_family == AF_INET6)
+-              return pingv6_ops.ipv6_recv_error(sk, msg, len, addr_len);
++              return pingv6_ops->ipv6_recv_error(sk, msg, len, addr_len);
+ #endif
+       return -EINVAL;
+ }
 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
 diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
-index 214882e..f958b50 100644
+index 214882e..ec032f6 100644
 --- a/net/ipv4/devinet.c
 +++ b/net/ipv4/devinet.c
 --- a/net/ipv4/devinet.c
 +++ b/net/ipv4/devinet.c
-@@ -1548,7 +1548,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
+@@ -69,7 +69,8 @@
+ static struct ipv4_devconf ipv4_devconf = {
+       .data = {
+-              [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
++              [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 0,
++              [IPV4_DEVCONF_RP_FILTER - 1] = 1,
+               [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
+               [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
+               [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
+@@ -80,7 +81,8 @@ static struct ipv4_devconf ipv4_devconf = {
+ static struct ipv4_devconf ipv4_devconf_dflt = {
+       .data = {
+-              [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
++              [IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 0,
++              [IPV4_DEVCONF_RP_FILTER - 1] = 1,
+               [IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
+               [IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
+               [IPV4_DEVCONF_SHARED_MEDIA - 1] = 1,
+@@ -1548,7 +1550,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
                idx = 0;
                head = &net->dev_index_head[h];
                rcu_read_lock();
                idx = 0;
                head = &net->dev_index_head[h];
                rcu_read_lock();
@@ -102070,7 +101666,7 @@ index 214882e..f958b50 100644
                          net->dev_base_seq;
                hlist_for_each_entry_rcu(dev, head, index_hlist) {
                        if (idx < s_idx)
                          net->dev_base_seq;
                hlist_for_each_entry_rcu(dev, head, index_hlist) {
                        if (idx < s_idx)
-@@ -1866,7 +1866,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb,
+@@ -1866,7 +1868,7 @@ static int inet_netconf_dump_devconf(struct sk_buff *skb,
                idx = 0;
                head = &net->dev_index_head[h];
                rcu_read_lock();
                idx = 0;
                head = &net->dev_index_head[h];
                rcu_read_lock();
@@ -102079,7 +101675,7 @@ index 214882e..f958b50 100644
                          net->dev_base_seq;
                hlist_for_each_entry_rcu(dev, head, index_hlist) {
                        if (idx < s_idx)
                          net->dev_base_seq;
                hlist_for_each_entry_rcu(dev, head, index_hlist) {
                        if (idx < s_idx)
-@@ -2101,7 +2101,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write,
+@@ -2101,7 +2103,7 @@ static int ipv4_doint_and_flush(struct ctl_table *ctl, int write,
  #define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \
        DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush)
  
  #define DEVINET_SYSCTL_FLUSHING_ENTRY(attr, name) \
        DEVINET_SYSCTL_COMPLEX_ENTRY(attr, name, ipv4_doint_and_flush)
  
@@ -102088,7 +101684,7 @@ index 214882e..f958b50 100644
        struct ctl_table_header *sysctl_header;
        struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX];
  } devinet_sysctl = {
        struct ctl_table_header *sysctl_header;
        struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX];
  } devinet_sysctl = {
-@@ -2233,7 +2233,7 @@ static __net_init int devinet_init_net(struct net *net)
+@@ -2233,7 +2235,7 @@ static __net_init int devinet_init_net(struct net *net)
        int err;
        struct ipv4_devconf *all, *dflt;
  #ifdef CONFIG_SYSCTL
        int err;
        struct ipv4_devconf *all, *dflt;
  #ifdef CONFIG_SYSCTL
@@ -102097,7 +101693,7 @@ index 214882e..f958b50 100644
        struct ctl_table_header *forw_hdr;
  #endif
  
        struct ctl_table_header *forw_hdr;
  #endif
  
-@@ -2251,7 +2251,7 @@ static __net_init int devinet_init_net(struct net *net)
+@@ -2251,7 +2253,7 @@ static __net_init int devinet_init_net(struct net *net)
                        goto err_alloc_dflt;
  
  #ifdef CONFIG_SYSCTL
                        goto err_alloc_dflt;
  
  #ifdef CONFIG_SYSCTL
@@ -102106,7 +101702,7 @@ index 214882e..f958b50 100644
                if (tbl == NULL)
                        goto err_alloc_ctl;
  
                if (tbl == NULL)
                        goto err_alloc_ctl;
  
-@@ -2271,7 +2271,10 @@ static __net_init int devinet_init_net(struct net *net)
+@@ -2271,7 +2273,10 @@ static __net_init int devinet_init_net(struct net *net)
                goto err_reg_dflt;
  
        err = -ENOMEM;
                goto err_reg_dflt;
  
        err = -ENOMEM;
@@ -102118,7 +101714,7 @@ index 214882e..f958b50 100644
        if (forw_hdr == NULL)
                goto err_reg_ctl;
        net->ipv4.forw_hdr = forw_hdr;
        if (forw_hdr == NULL)
                goto err_reg_ctl;
        net->ipv4.forw_hdr = forw_hdr;
-@@ -2287,8 +2290,7 @@ err_reg_ctl:
+@@ -2287,8 +2292,7 @@ err_reg_ctl:
  err_reg_dflt:
        __devinet_sysctl_unregister(all);
  err_reg_all:
  err_reg_dflt:
        __devinet_sysctl_unregister(all);
  err_reg_all:
@@ -102129,10 +101725,10 @@ index 214882e..f958b50 100644
  #endif
        if (dflt != &ipv4_devconf_dflt)
 diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
  #endif
        if (dflt != &ipv4_devconf_dflt)
 diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c
-index 255aa99..45c78f8 100644
+index 23104a3..9f5570b 100644
 --- a/net/ipv4/fib_frontend.c
 +++ b/net/ipv4/fib_frontend.c
 --- a/net/ipv4/fib_frontend.c
 +++ b/net/ipv4/fib_frontend.c
-@@ -1015,12 +1015,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
+@@ -1017,12 +1017,12 @@ static int fib_inetaddr_event(struct notifier_block *this, unsigned long event,
  #ifdef CONFIG_IP_ROUTE_MULTIPATH
                fib_sync_up(dev);
  #endif
  #ifdef CONFIG_IP_ROUTE_MULTIPATH
                fib_sync_up(dev);
  #endif
@@ -102147,7 +101743,7 @@ index 255aa99..45c78f8 100644
                if (ifa->ifa_dev->ifa_list == NULL) {
                        /* Last address was deleted from this interface.
                         * Disable IP.
                if (ifa->ifa_dev->ifa_list == NULL) {
                        /* Last address was deleted from this interface.
                         * Disable IP.
-@@ -1058,7 +1058,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
+@@ -1060,7 +1060,7 @@ static int fib_netdev_event(struct notifier_block *this, unsigned long event, vo
  #ifdef CONFIG_IP_ROUTE_MULTIPATH
                fib_sync_up(dev);
  #endif
  #ifdef CONFIG_IP_ROUTE_MULTIPATH
                fib_sync_up(dev);
  #endif
@@ -102157,10 +101753,10 @@ index 255aa99..45c78f8 100644
                break;
        case NETDEV_DOWN:
 diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
                break;
        case NETDEV_DOWN:
 diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c
-index 4a74ea8..32335a7 100644
+index f99f41b..1879da9 100644
 --- a/net/ipv4/fib_semantics.c
 +++ b/net/ipv4/fib_semantics.c
 --- a/net/ipv4/fib_semantics.c
 +++ b/net/ipv4/fib_semantics.c
-@@ -768,7 +768,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh)
+@@ -770,7 +770,7 @@ __be32 fib_info_update_nh_saddr(struct net *net, struct fib_nh *nh)
        nh->nh_saddr = inet_select_addr(nh->nh_dev,
                                        nh->nh_gw,
                                        nh->nh_parent->fib_scope);
        nh->nh_saddr = inet_select_addr(nh->nh_dev,
                                        nh->nh_gw,
                                        nh->nh_parent->fib_scope);
@@ -102169,29 +101765,8 @@ index 4a74ea8..32335a7 100644
  
        return nh->nh_saddr;
  }
  
        return nh->nh_saddr;
  }
-diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
-index dd73bea..a2eec02 100644
---- a/net/ipv4/gre_offload.c
-+++ b/net/ipv4/gre_offload.c
-@@ -59,13 +59,13 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb,
-       if (csum)
-               skb->encap_hdr_csum = 1;
--      if (unlikely(!pskb_may_pull(skb, ghl)))
--              goto out;
--
-       /* setup inner skb. */
-       skb->protocol = greh->protocol;
-       skb->encapsulation = 0;
-+      if (unlikely(!pskb_may_pull(skb, ghl)))
-+              goto out;
-+
-       __skb_pull(skb, ghl);
-       skb_reset_mac_header(skb);
-       skb_set_network_header(skb, skb_inner_network_offset(skb));
 diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
 diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
-index 43116e8..ba0916a8 100644
+index 9111a4e..3576905 100644
 --- a/net/ipv4/inet_hashtables.c
 +++ b/net/ipv4/inet_hashtables.c
 @@ -18,6 +18,7 @@
 --- a/net/ipv4/inet_hashtables.c
 +++ b/net/ipv4/inet_hashtables.c
 @@ -18,6 +18,7 @@
@@ -102221,10 +101796,10 @@ index 43116e8..ba0916a8 100644
                        inet_twsk_deschedule(tw, death_row);
                        while (twrefcnt) {
 diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
                        inet_twsk_deschedule(tw, death_row);
                        while (twrefcnt) {
 diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c
-index bd5f592..e80e605 100644
+index 241afd7..31b95d5 100644
 --- a/net/ipv4/inetpeer.c
 +++ b/net/ipv4/inetpeer.c
 --- a/net/ipv4/inetpeer.c
 +++ b/net/ipv4/inetpeer.c
-@@ -482,7 +482,7 @@ relookup:
+@@ -461,7 +461,7 @@ relookup:
        if (p) {
                p->daddr = *daddr;
                atomic_set(&p->refcnt, 1);
        if (p) {
                p->daddr = *daddr;
                atomic_set(&p->refcnt, 1);
@@ -102234,7 +101809,7 @@ index bd5f592..e80e605 100644
                p->rate_tokens = 0;
                /* 60*HZ is arbitrary, but chosen enough high so that the first
 diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
                p->rate_tokens = 0;
                /* 60*HZ is arbitrary, but chosen enough high so that the first
 diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c
-index 15f0e2b..8cf8177 100644
+index 2811cc1..ad5a534 100644
 --- a/net/ipv4/ip_fragment.c
 +++ b/net/ipv4/ip_fragment.c
 @@ -268,7 +268,7 @@ static inline int ip_frag_too_far(struct ipq *qp)
 --- a/net/ipv4/ip_fragment.c
 +++ b/net/ipv4/ip_fragment.c
 @@ -268,7 +268,7 @@ static inline int ip_frag_too_far(struct ipq *qp)
@@ -102285,7 +101860,7 @@ index 15f0e2b..8cf8177 100644
        return -ENOMEM;
  }
 diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
        return -ENOMEM;
  }
 diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
-index 9b84254..c776611 100644
+index 12055fd..df852c4 100644
 --- a/net/ipv4/ip_gre.c
 +++ b/net/ipv4/ip_gre.c
 @@ -115,7 +115,7 @@ static bool log_ecn_error = true;
 --- a/net/ipv4/ip_gre.c
 +++ b/net/ipv4/ip_gre.c
 @@ -115,7 +115,7 @@ static bool log_ecn_error = true;
@@ -102297,8 +101872,8 @@ index 9b84254..c776611 100644
  static int ipgre_tunnel_init(struct net_device *dev);
  
  static int ipgre_net_id __read_mostly;
  static int ipgre_tunnel_init(struct net_device *dev);
  
  static int ipgre_net_id __read_mostly;
-@@ -733,7 +733,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
-       [IFLA_GRE_PMTUDISC]     = { .type = NLA_U8 },
+@@ -815,7 +815,7 @@ static const struct nla_policy ipgre_policy[IFLA_GRE_MAX + 1] = {
+       [IFLA_GRE_ENCAP_DPORT]  = { .type = NLA_U16 },
  };
  
 -static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
  };
  
 -static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
@@ -102306,7 +101881,7 @@ index 9b84254..c776611 100644
        .kind           = "gre",
        .maxtype        = IFLA_GRE_MAX,
        .policy         = ipgre_policy,
        .kind           = "gre",
        .maxtype        = IFLA_GRE_MAX,
        .policy         = ipgre_policy,
-@@ -747,7 +747,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
+@@ -829,7 +829,7 @@ static struct rtnl_link_ops ipgre_link_ops __read_mostly = {
        .fill_info      = ipgre_fill_info,
  };
  
        .fill_info      = ipgre_fill_info,
  };
  
@@ -102340,24 +101915,11 @@ index 3d4da2c..40f9c29 100644
                                        icmp_send(skb, ICMP_DEST_UNREACH,
                                                  ICMP_PROT_UNREACH, 0);
                                }
                                        icmp_send(skb, ICMP_DEST_UNREACH,
                                                  ICMP_PROT_UNREACH, 0);
                                }
-diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
-index c43a1e2..73cbbe1 100644
---- a/net/ipv4/ip_output.c
-+++ b/net/ipv4/ip_output.c
-@@ -231,7 +231,7 @@ static int ip_finish_output_gso(struct sk_buff *skb)
-        */
-       features = netif_skb_features(skb);
-       segs = skb_gso_segment(skb, features & ~NETIF_F_GSO_MASK);
--      if (IS_ERR(segs)) {
-+      if (IS_ERR_OR_NULL(segs)) {
-               kfree_skb(skb);
-               return -ENOMEM;
-       }
 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
 diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
-index 2407e5d..edc2f1a 100644
+index 9daf217..dc6972d 100644
 --- a/net/ipv4/ip_sockglue.c
 +++ b/net/ipv4/ip_sockglue.c
 --- a/net/ipv4/ip_sockglue.c
 +++ b/net/ipv4/ip_sockglue.c
-@@ -1188,7 +1188,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
+@@ -1177,7 +1177,8 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
                len = min_t(unsigned int, len, opt->optlen);
                if (put_user(len, optlen))
                        return -EFAULT;
                len = min_t(unsigned int, len, opt->optlen);
                if (put_user(len, optlen))
                        return -EFAULT;
@@ -102367,7 +101929,7 @@ index 2407e5d..edc2f1a 100644
                        return -EFAULT;
                return 0;
        }
                        return -EFAULT;
                return 0;
        }
-@@ -1319,7 +1320,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
+@@ -1308,7 +1309,7 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
                if (sk->sk_type != SOCK_STREAM)
                        return -ENOPROTOOPT;
  
                if (sk->sk_type != SOCK_STREAM)
                        return -ENOPROTOOPT;
  
@@ -102377,7 +101939,7 @@ index 2407e5d..edc2f1a 100644
                msg.msg_flags = flags;
  
 diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
                msg.msg_flags = flags;
  
 diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c
-index e453cb7..3c8d952 100644
+index 1a7e979..fd05aa4 100644
 --- a/net/ipv4/ip_vti.c
 +++ b/net/ipv4/ip_vti.c
 @@ -45,7 +45,7 @@
 --- a/net/ipv4/ip_vti.c
 +++ b/net/ipv4/ip_vti.c
 @@ -45,7 +45,7 @@
@@ -102399,10 +101961,10 @@ index e453cb7..3c8d952 100644
        .maxtype        = IFLA_VTI_MAX,
        .policy         = vti_policy,
 diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
        .maxtype        = IFLA_VTI_MAX,
        .policy         = vti_policy,
 diff --git a/net/ipv4/ipconfig.c b/net/ipv4/ipconfig.c
-index 5bbef4f..5bc4fb6 100644
+index 648fa14..97864d0 100644
 --- a/net/ipv4/ipconfig.c
 +++ b/net/ipv4/ipconfig.c
 --- a/net/ipv4/ipconfig.c
 +++ b/net/ipv4/ipconfig.c
-@@ -332,7 +332,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
+@@ -333,7 +333,7 @@ static int __init ic_devinet_ioctl(unsigned int cmd, struct ifreq *arg)
  
        mm_segment_t oldfs = get_fs();
        set_fs(get_ds());
  
        mm_segment_t oldfs = get_fs();
        set_fs(get_ds());
@@ -102411,7 +101973,7 @@ index 5bbef4f..5bc4fb6 100644
        set_fs(oldfs);
        return res;
  }
        set_fs(oldfs);
        return res;
  }
-@@ -343,7 +343,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
+@@ -344,7 +344,7 @@ static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
  
        mm_segment_t oldfs = get_fs();
        set_fs(get_ds());
  
        mm_segment_t oldfs = get_fs();
        set_fs(get_ds());
@@ -102420,7 +101982,7 @@ index 5bbef4f..5bc4fb6 100644
        set_fs(oldfs);
        return res;
  }
        set_fs(oldfs);
        return res;
  }
-@@ -354,7 +354,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
+@@ -355,7 +355,7 @@ static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
  
        mm_segment_t oldfs = get_fs();
        set_fs(get_ds());
  
        mm_segment_t oldfs = get_fs();
        set_fs(get_ds());
@@ -102430,7 +101992,7 @@ index 5bbef4f..5bc4fb6 100644
        return res;
  }
 diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
        return res;
  }
 diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c
-index 62eaa00..29b2dc2 100644
+index 37096d6..86abb03 100644
 --- a/net/ipv4/ipip.c
 +++ b/net/ipv4/ipip.c
 @@ -124,7 +124,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
 --- a/net/ipv4/ipip.c
 +++ b/net/ipv4/ipip.c
 @@ -124,7 +124,7 @@ MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN");
@@ -102442,8 +102004,8 @@ index 62eaa00..29b2dc2 100644
  
  static int ipip_err(struct sk_buff *skb, u32 info)
  {
  
  static int ipip_err(struct sk_buff *skb, u32 info)
  {
-@@ -409,7 +409,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = {
-       [IFLA_IPTUN_PMTUDISC]           = { .type = NLA_U8 },
+@@ -487,7 +487,7 @@ static const struct nla_policy ipip_policy[IFLA_IPTUN_MAX + 1] = {
+       [IFLA_IPTUN_ENCAP_DPORT]        = { .type = NLA_U16 },
  };
  
 -static struct rtnl_link_ops ipip_link_ops __read_mostly = {
  };
  
 -static struct rtnl_link_ops ipip_link_ops __read_mostly = {
@@ -102550,7 +102112,7 @@ index 99e810f..3711b81 100644
  
        case IPT_SO_GET_ENTRIES:
 diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
  
        case IPT_SO_GET_ENTRIES:
 diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c
-index 2510c02..cfb34fa 100644
+index e90f83a..3e6acca 100644
 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
 +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
 @@ -720,7 +720,7 @@ static int clusterip_net_init(struct net *net)
 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c
 +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c
 @@ -720,7 +720,7 @@ static int clusterip_net_init(struct net *net)
@@ -102563,7 +102125,7 @@ index 2510c02..cfb34fa 100644
                pr_err("Unable to proc dir entry\n");
                return -ENOMEM;
 diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
                pr_err("Unable to proc dir entry\n");
                return -ENOMEM;
 diff --git a/net/ipv4/ping.c b/net/ipv4/ping.c
-index a3c59a0..ec620a50 100644
+index 5d740cc..b2842b9 100644
 --- a/net/ipv4/ping.c
 +++ b/net/ipv4/ping.c
 @@ -59,7 +59,7 @@ struct ping_table {
 --- a/net/ipv4/ping.c
 +++ b/net/ipv4/ping.c
 @@ -59,7 +59,7 @@ struct ping_table {
@@ -102575,7 +102137,7 @@ index a3c59a0..ec620a50 100644
  EXPORT_SYMBOL_GPL(pingv6_ops);
  
  static u16 ping_port_rover;
  EXPORT_SYMBOL_GPL(pingv6_ops);
  
  static u16 ping_port_rover;
-@@ -348,7 +348,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk,
+@@ -350,7 +350,7 @@ static int ping_check_bind_addr(struct sock *sk, struct inet_sock *isk,
                                return -ENODEV;
                        }
                }
                                return -ENODEV;
                        }
                }
@@ -102584,7 +102146,7 @@ index a3c59a0..ec620a50 100644
                                                    scoped);
                rcu_read_unlock();
  
                                                    scoped);
                rcu_read_unlock();
  
-@@ -556,7 +556,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info)
+@@ -558,7 +558,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info)
                }
  #if IS_ENABLED(CONFIG_IPV6)
        } else if (skb->protocol == htons(ETH_P_IPV6)) {
                }
  #if IS_ENABLED(CONFIG_IPV6)
        } else if (skb->protocol == htons(ETH_P_IPV6)) {
@@ -102593,7 +102155,7 @@ index a3c59a0..ec620a50 100644
  #endif
        }
  
  #endif
        }
  
-@@ -574,7 +574,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info)
+@@ -576,7 +576,7 @@ void ping_err(struct sk_buff *skb, int offset, u32 info)
                                      info, (u8 *)icmph);
  #if IS_ENABLED(CONFIG_IPV6)
                } else if (family == AF_INET6) {
                                      info, (u8 *)icmph);
  #if IS_ENABLED(CONFIG_IPV6)
                } else if (family == AF_INET6) {
@@ -102602,16 +102164,7 @@ index a3c59a0..ec620a50 100644
                                                   info, (u8 *)icmph);
  #endif
                }
                                                   info, (u8 *)icmph);
  #endif
                }
-@@ -858,7 +858,7 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
-                       return ip_recv_error(sk, msg, len, addr_len);
- #if IS_ENABLED(CONFIG_IPV6)
-               } else if (family == AF_INET6) {
--                      return pingv6_ops.ipv6_recv_error(sk, msg, len,
-+                      return pingv6_ops->ipv6_recv_error(sk, msg, len,
-                                                         addr_len);
- #endif
-               }
-@@ -916,10 +916,10 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
+@@ -910,10 +910,10 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                }
  
                if (inet6_sk(sk)->rxopt.all)
                }
  
                if (inet6_sk(sk)->rxopt.all)
@@ -102624,7 +102177,7 @@ index a3c59a0..ec620a50 100644
                else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags)
                        ip_cmsg_recv(msg, skb);
  #endif
                else if (skb->protocol == htons(ETH_P_IP) && isk->cmsg_flags)
                        ip_cmsg_recv(msg, skb);
  #endif
-@@ -1111,7 +1111,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -1105,7 +1105,7 @@ static void ping_v4_format_sock(struct sock *sp, struct seq_file *f,
                from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
                0, sock_i_ino(sp),
                atomic_read(&sp->sk_refcnt), sp,
                from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
                0, sock_i_ino(sp),
                atomic_read(&sp->sk_refcnt), sp,
@@ -102689,7 +102242,7 @@ index 739db31..74f0210 100644
  
  static int raw_seq_show(struct seq_file *seq, void *v)
 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
  
  static int raw_seq_show(struct seq_file *seq, void *v)
 diff --git a/net/ipv4/route.c b/net/ipv4/route.c
-index 29836f8..bd1e2ba 100644
+index 6a2155b..d426880 100644
 --- a/net/ipv4/route.c
 +++ b/net/ipv4/route.c
 @@ -228,7 +228,7 @@ static const struct seq_operations rt_cache_seq_ops = {
 --- a/net/ipv4/route.c
 +++ b/net/ipv4/route.c
 @@ -228,7 +228,7 @@ static const struct seq_operations rt_cache_seq_ops = {
@@ -102810,7 +102363,7 @@ index 29836f8..bd1e2ba 100644
  #ifdef CONFIG_IP_ROUTE_CLASSID
        ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct), __alignof__(struct ip_rt_acct));
 diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
  #ifdef CONFIG_IP_ROUTE_CLASSID
        ip_rt_acct = __alloc_percpu(256 * sizeof(struct ip_rt_acct), __alignof__(struct ip_rt_acct));
 diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
-index 79a007c..5023029 100644
+index b3c53c8..35cc18d 100644
 --- a/net/ipv4/sysctl_net_ipv4.c
 +++ b/net/ipv4/sysctl_net_ipv4.c
 @@ -60,7 +60,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write,
 --- a/net/ipv4/sysctl_net_ipv4.c
 +++ b/net/ipv4/sysctl_net_ipv4.c
 @@ -60,7 +60,7 @@ static int ipv4_local_port_range(struct ctl_table *table, int write,
@@ -102867,7 +102420,7 @@ index 79a007c..5023029 100644
        struct tcp_fastopen_context *ctxt;
        int ret;
        u32  user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
        struct tcp_fastopen_context *ctxt;
        int ret;
        u32  user_key[4]; /* 16 bytes, matching TCP_FASTOPEN_KEY_LENGTH */
-@@ -857,13 +857,12 @@ static struct ctl_table ipv4_net_table[] = {
+@@ -874,13 +874,12 @@ static struct ctl_table ipv4_net_table[] = {
  
  static __net_init int ipv4_sysctl_init_net(struct net *net)
  {
  
  static __net_init int ipv4_sysctl_init_net(struct net *net)
  {
@@ -102883,7 +102436,7 @@ index 79a007c..5023029 100644
                if (table == NULL)
                        goto err_alloc;
  
                if (table == NULL)
                        goto err_alloc;
  
-@@ -872,7 +871,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
+@@ -889,7 +888,10 @@ static __net_init int ipv4_sysctl_init_net(struct net *net)
                        table[i].data += (void *)net - (void *)&init_net;
        }
  
                        table[i].data += (void *)net - (void *)&init_net;
        }
  
@@ -102896,10 +102449,10 @@ index 79a007c..5023029 100644
                goto err_reg;
  
 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
                goto err_reg;
  
 diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
-index a906e02..f3b6a0f 100644
+index d107ee2..bcebf11 100644
 --- a/net/ipv4/tcp_input.c
 +++ b/net/ipv4/tcp_input.c
 --- a/net/ipv4/tcp_input.c
 +++ b/net/ipv4/tcp_input.c
-@@ -755,7 +755,7 @@ static void tcp_update_pacing_rate(struct sock *sk)
+@@ -765,7 +765,7 @@ static void tcp_update_pacing_rate(struct sock *sk)
         * without any lock. We want to make sure compiler wont store
         * intermediate values in this location.
         */
         * without any lock. We want to make sure compiler wont store
         * intermediate values in this location.
         */
@@ -102908,7 +102461,7 @@ index a906e02..f3b6a0f 100644
                                                sk->sk_max_pacing_rate);
  }
  
                                                sk->sk_max_pacing_rate);
  }
  
-@@ -4488,7 +4488,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
+@@ -4527,7 +4527,7 @@ static struct sk_buff *tcp_collapse_one(struct sock *sk, struct sk_buff *skb,
   * simplifies code)
   */
  static void
   * simplifies code)
   */
  static void
@@ -102917,7 +102470,7 @@ index a906e02..f3b6a0f 100644
             struct sk_buff *head, struct sk_buff *tail,
             u32 start, u32 end)
  {
             struct sk_buff *head, struct sk_buff *tail,
             u32 start, u32 end)
  {
-@@ -5546,6 +5546,7 @@ discard:
+@@ -5506,6 +5506,7 @@ discard:
            tcp_paws_reject(&tp->rx_opt, 0))
                goto discard_and_undo;
  
            tcp_paws_reject(&tp->rx_opt, 0))
                goto discard_and_undo;
  
@@ -102925,7 +102478,7 @@ index a906e02..f3b6a0f 100644
        if (th->syn) {
                /* We see SYN without ACK. It is attempt of
                 * simultaneous connect with crossed SYNs.
        if (th->syn) {
                /* We see SYN without ACK. It is attempt of
                 * simultaneous connect with crossed SYNs.
-@@ -5596,6 +5597,7 @@ discard:
+@@ -5556,6 +5557,7 @@ discard:
                goto discard;
  #endif
        }
                goto discard;
  #endif
        }
@@ -102933,7 +102486,7 @@ index a906e02..f3b6a0f 100644
        /* "fifth, if neither of the SYN or RST bits is set then
         * drop the segment and return."
         */
        /* "fifth, if neither of the SYN or RST bits is set then
         * drop the segment and return."
         */
-@@ -5642,7 +5644,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
+@@ -5602,7 +5604,7 @@ int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
                        goto discard;
  
                if (th->syn) {
                        goto discard;
  
                if (th->syn) {
@@ -102943,13 +102496,13 @@ index a906e02..f3b6a0f 100644
                        if (icsk->icsk_af_ops->conn_request(sk, skb) < 0)
                                return 1;
 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
                        if (icsk->icsk_af_ops->conn_request(sk, skb) < 0)
                                return 1;
 diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
-index 3f49eae..bde687a 100644
+index ef7089c..a3e65fb 100644
 --- a/net/ipv4/tcp_ipv4.c
 +++ b/net/ipv4/tcp_ipv4.c
 --- a/net/ipv4/tcp_ipv4.c
 +++ b/net/ipv4/tcp_ipv4.c
-@@ -91,6 +91,10 @@ int sysctl_tcp_low_latency __read_mostly;
+@@ -89,6 +89,10 @@ int sysctl_tcp_tw_reuse __read_mostly;
+ int sysctl_tcp_low_latency __read_mostly;
  EXPORT_SYMBOL(sysctl_tcp_low_latency);
  
  EXPORT_SYMBOL(sysctl_tcp_low_latency);
  
 +#ifdef CONFIG_GRKERNSEC_BLACKHOLE
 +extern int grsec_enable_blackhole;
 +#endif
 +#ifdef CONFIG_GRKERNSEC_BLACKHOLE
 +extern int grsec_enable_blackhole;
 +#endif
@@ -102957,7 +102510,7 @@ index 3f49eae..bde687a 100644
  #ifdef CONFIG_TCP_MD5SIG
  static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
                               __be32 daddr, __be32 saddr, const struct tcphdr *th);
  #ifdef CONFIG_TCP_MD5SIG
  static int tcp_v4_md5_hash_hdr(char *md5_hash, const struct tcp_md5sig_key *key,
                               __be32 daddr, __be32 saddr, const struct tcphdr *th);
-@@ -1487,6 +1491,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1469,6 +1473,9 @@ int tcp_v4_do_rcv(struct sock *sk, struct sk_buff *skb)
        return 0;
  
  reset:
        return 0;
  
  reset:
@@ -102990,7 +102543,7 @@ index 3f49eae..bde687a 100644
  
        if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
                NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
  
        if (unlikely(iph->ttl < inet_sk(sk)->min_ttl)) {
                NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
-@@ -1704,6 +1718,10 @@ csum_error:
+@@ -1694,6 +1708,10 @@ csum_error:
  bad_packet:
                TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
        } else {
  bad_packet:
                TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
        } else {
@@ -103002,7 +102555,7 @@ index 3f49eae..bde687a 100644
        }
  
 diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
        }
  
 diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c
-index 1649988..6251843 100644
+index 63d2680..2db9d6b 100644
 --- a/net/ipv4/tcp_minisocks.c
 +++ b/net/ipv4/tcp_minisocks.c
 @@ -27,6 +27,10 @@
 --- a/net/ipv4/tcp_minisocks.c
 +++ b/net/ipv4/tcp_minisocks.c
 @@ -27,6 +27,10 @@
@@ -103016,7 +102569,7 @@ index 1649988..6251843 100644
  int sysctl_tcp_syncookies __read_mostly = 1;
  EXPORT_SYMBOL(sysctl_tcp_syncookies);
  
  int sysctl_tcp_syncookies __read_mostly = 1;
  EXPORT_SYMBOL(sysctl_tcp_syncookies);
  
-@@ -740,7 +744,10 @@ embryonic_reset:
+@@ -739,7 +743,10 @@ embryonic_reset:
                 * avoid becoming vulnerable to outside attack aiming at
                 * resetting legit local connections.
                 */
                 * avoid becoming vulnerable to outside attack aiming at
                 * resetting legit local connections.
                 */
@@ -103029,10 +102582,10 @@ index 1649988..6251843 100644
                reqsk_fastopen_remove(sk, req, true);
                tcp_reset(sk);
 diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
                reqsk_fastopen_remove(sk, req, true);
                tcp_reset(sk);
 diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c
-index 3b66610..bfbe23a 100644
+index ebf5ff5..4d1ff32 100644
 --- a/net/ipv4/tcp_probe.c
 +++ b/net/ipv4/tcp_probe.c
 --- a/net/ipv4/tcp_probe.c
 +++ b/net/ipv4/tcp_probe.c
-@@ -238,7 +238,7 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf,
+@@ -236,7 +236,7 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf,
                if (cnt + width >= len)
                        break;
  
                if (cnt + width >= len)
                        break;
  
@@ -103042,7 +102595,7 @@ index 3b66610..bfbe23a 100644
                cnt += width;
        }
 diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
                cnt += width;
        }
 diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
-index df90cd1..9ab2c9b 100644
+index 9b21ae8..4eb67df 100644
 --- a/net/ipv4/tcp_timer.c
 +++ b/net/ipv4/tcp_timer.c
 @@ -22,6 +22,10 @@
 --- a/net/ipv4/tcp_timer.c
 +++ b/net/ipv4/tcp_timer.c
 @@ -22,6 +22,10 @@
@@ -103056,7 +102609,7 @@ index df90cd1..9ab2c9b 100644
  int sysctl_tcp_syn_retries __read_mostly = TCP_SYN_RETRIES;
  int sysctl_tcp_synack_retries __read_mostly = TCP_SYNACK_RETRIES;
  int sysctl_tcp_keepalive_time __read_mostly = TCP_KEEPALIVE_TIME;
  int sysctl_tcp_syn_retries __read_mostly = TCP_SYN_RETRIES;
  int sysctl_tcp_synack_retries __read_mostly = TCP_SYNACK_RETRIES;
  int sysctl_tcp_keepalive_time __read_mostly = TCP_KEEPALIVE_TIME;
-@@ -192,6 +196,13 @@ static int tcp_write_timeout(struct sock *sk)
+@@ -191,6 +195,13 @@ static int tcp_write_timeout(struct sock *sk)
                }
        }
  
                }
        }
  
@@ -103071,7 +102624,7 @@ index df90cd1..9ab2c9b 100644
                                  syn_set ? 0 : icsk->icsk_user_timeout, syn_set)) {
                /* Has it gone just too far? */
 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
                                  syn_set ? 0 : icsk->icsk_user_timeout, syn_set)) {
                /* Has it gone just too far? */
 diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
-index f57c0e4..cf24bd0 100644
+index cd0db54..93a6518 100644
 --- a/net/ipv4/udp.c
 +++ b/net/ipv4/udp.c
 @@ -87,6 +87,7 @@
 --- a/net/ipv4/udp.c
 +++ b/net/ipv4/udp.c
 @@ -87,6 +87,7 @@
@@ -103082,7 +102635,7 @@ index f57c0e4..cf24bd0 100644
  #include <linux/socket.h>
  #include <linux/sockios.h>
  #include <linux/igmp.h>
  #include <linux/socket.h>
  #include <linux/sockios.h>
  #include <linux/igmp.h>
-@@ -113,6 +114,10 @@
+@@ -114,6 +115,10 @@
  #include <net/busy_poll.h>
  #include "udp_impl.h"
  
  #include <net/busy_poll.h>
  #include "udp_impl.h"
  
@@ -103093,7 +102646,7 @@ index f57c0e4..cf24bd0 100644
  struct udp_table udp_table __read_mostly;
  EXPORT_SYMBOL(udp_table);
  
  struct udp_table udp_table __read_mostly;
  EXPORT_SYMBOL(udp_table);
  
-@@ -594,6 +599,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,
+@@ -595,6 +600,9 @@ static inline bool __udp_is_mcast_sock(struct net *net, struct sock *sk,
        return true;
  }
  
        return true;
  }
  
@@ -103103,7 +102656,7 @@ index f57c0e4..cf24bd0 100644
  /*
   * This routine is called by the ICMP module when it gets some
   * sort of error condition.  If err < 0 then the socket should
  /*
   * This routine is called by the ICMP module when it gets some
   * sort of error condition.  If err < 0 then the socket should
-@@ -931,9 +939,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
+@@ -932,9 +940,18 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
                dport = usin->sin_port;
                if (dport == 0)
                        return -EINVAL;
                dport = usin->sin_port;
                if (dport == 0)
                        return -EINVAL;
@@ -103122,7 +102675,7 @@ index f57c0e4..cf24bd0 100644
                daddr = inet->inet_daddr;
                dport = inet->inet_dport;
                /* Open fast path for connected socket.
                daddr = inet->inet_daddr;
                dport = inet->inet_dport;
                /* Open fast path for connected socket.
-@@ -1181,7 +1198,7 @@ static unsigned int first_packet_length(struct sock *sk)
+@@ -1182,7 +1199,7 @@ static unsigned int first_packet_length(struct sock *sk)
                                 IS_UDPLITE(sk));
                UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
                                 IS_UDPLITE(sk));
                                 IS_UDPLITE(sk));
                UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
                                 IS_UDPLITE(sk));
@@ -103131,7 +102684,7 @@ index f57c0e4..cf24bd0 100644
                __skb_unlink(skb, rcvq);
                __skb_queue_tail(&list_kill, skb);
        }
                __skb_unlink(skb, rcvq);
                __skb_queue_tail(&list_kill, skb);
        }
-@@ -1261,6 +1278,10 @@ try_again:
+@@ -1262,6 +1279,10 @@ try_again:
        if (!skb)
                goto out;
  
        if (!skb)
                goto out;
  
@@ -103142,7 +102695,7 @@ index f57c0e4..cf24bd0 100644
        ulen = skb->len - sizeof(struct udphdr);
        copied = len;
        if (copied > ulen)
        ulen = skb->len - sizeof(struct udphdr);
        copied = len;
        if (copied > ulen)
-@@ -1294,7 +1315,7 @@ try_again:
+@@ -1295,7 +1316,7 @@ try_again:
        if (unlikely(err)) {
                trace_kfree_skb(skb, udp_recvmsg);
                if (!peeked) {
        if (unlikely(err)) {
                trace_kfree_skb(skb, udp_recvmsg);
                if (!peeked) {
@@ -103151,7 +102704,7 @@ index f57c0e4..cf24bd0 100644
                        UDP_INC_STATS_USER(sock_net(sk),
                                           UDP_MIB_INERRORS, is_udplite);
                }
                        UDP_INC_STATS_USER(sock_net(sk),
                                           UDP_MIB_INERRORS, is_udplite);
                }
-@@ -1591,7 +1612,7 @@ csum_error:
+@@ -1592,7 +1613,7 @@ csum_error:
        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
  drop:
        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_CSUMERRORS, is_udplite);
  drop:
        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
@@ -103160,7 +102713,7 @@ index f57c0e4..cf24bd0 100644
        kfree_skb(skb);
        return -1;
  }
        kfree_skb(skb);
        return -1;
  }
-@@ -1610,7 +1631,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
+@@ -1611,7 +1632,7 @@ static void flush_stack(struct sock **stack, unsigned int count,
                        skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
  
                if (!skb1) {
                        skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
  
                if (!skb1) {
@@ -103169,7 +102722,7 @@ index f57c0e4..cf24bd0 100644
                        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
                                         IS_UDPLITE(sk));
                        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
                        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
                                         IS_UDPLITE(sk));
                        UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -1807,6 +1828,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+@@ -1812,6 +1833,9 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
                goto csum_error;
  
        UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
                goto csum_error;
  
        UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
@@ -103179,7 +102732,7 @@ index f57c0e4..cf24bd0 100644
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
  
        /*
        icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
  
        /*
-@@ -2393,7 +2417,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
+@@ -2398,7 +2422,7 @@ static void udp4_format_sock(struct sock *sp, struct seq_file *f,
                from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
                0, sock_i_ino(sp),
                atomic_read(&sp->sk_refcnt), sp,
                from_kuid_munged(seq_user_ns(f), sock_i_uid(sp)),
                0, sock_i_ino(sp),
                atomic_read(&sp->sk_refcnt), sp,
@@ -103242,9 +102795,27 @@ index 6156f68..d6ab46d 100644
        return -ENOMEM;
  }
 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
        return -ENOMEM;
  }
 diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
-index 3e118df..27b16cf 100644
+index 0169ccf..50d7b04 100644
 --- a/net/ipv6/addrconf.c
 +++ b/net/ipv6/addrconf.c
 --- a/net/ipv6/addrconf.c
 +++ b/net/ipv6/addrconf.c
+@@ -171,7 +171,7 @@ static struct ipv6_devconf ipv6_devconf __read_mostly = {
+       .hop_limit              = IPV6_DEFAULT_HOPLIMIT,
+       .mtu6                   = IPV6_MIN_MTU,
+       .accept_ra              = 1,
+-      .accept_redirects       = 1,
++      .accept_redirects       = 0,
+       .autoconf               = 1,
+       .force_mld_version      = 0,
+       .mldv1_unsolicited_report_interval = 10 * HZ,
+@@ -208,7 +208,7 @@ static struct ipv6_devconf ipv6_devconf_dflt __read_mostly = {
+       .hop_limit              = IPV6_DEFAULT_HOPLIMIT,
+       .mtu6                   = IPV6_MIN_MTU,
+       .accept_ra              = 1,
+-      .accept_redirects       = 1,
++      .accept_redirects       = 0,
+       .autoconf               = 1,
+       .force_mld_version      = 0,
+       .mldv1_unsolicited_report_interval = 10 * HZ,
 @@ -604,7 +604,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
                idx = 0;
                head = &net->dev_index_head[h];
 @@ -604,7 +604,7 @@ static int inet6_netconf_dump_devconf(struct sk_buff *skb,
                idx = 0;
                head = &net->dev_index_head[h];
@@ -103263,7 +102834,7 @@ index 3e118df..27b16cf 100644
  
                if (ops->ndo_do_ioctl) {
                        mm_segment_t oldfs = get_fs();
  
                if (ops->ndo_do_ioctl) {
                        mm_segment_t oldfs = get_fs();
-@@ -3531,16 +3531,23 @@ static const struct file_operations if6_fops = {
+@@ -3534,16 +3534,23 @@ static const struct file_operations if6_fops = {
        .release        = seq_release_net,
  };
  
        .release        = seq_release_net,
  };
  
@@ -103288,7 +102859,7 @@ index 3e118df..27b16cf 100644
  }
  
  static struct pernet_operations if6_proc_net_ops = {
  }
  
  static struct pernet_operations if6_proc_net_ops = {
-@@ -4156,7 +4163,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
+@@ -4159,7 +4166,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
        s_ip_idx = ip_idx = cb->args[2];
  
        rcu_read_lock();
        s_ip_idx = ip_idx = cb->args[2];
  
        rcu_read_lock();
@@ -103297,7 +102868,7 @@ index 3e118df..27b16cf 100644
        for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
                idx = 0;
                head = &net->dev_index_head[h];
        for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) {
                idx = 0;
                head = &net->dev_index_head[h];
-@@ -4784,7 +4791,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
+@@ -4788,7 +4795,7 @@ static void __ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
                rt_genid_bump_ipv6(net);
                break;
        }
                rt_genid_bump_ipv6(net);
                break;
        }
@@ -103306,7 +102877,7 @@ index 3e118df..27b16cf 100644
  }
  
  static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
  }
  
  static void ipv6_ifa_notify(int event, struct inet6_ifaddr *ifp)
-@@ -4804,7 +4811,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
+@@ -4808,7 +4815,7 @@ int addrconf_sysctl_forward(struct ctl_table *ctl, int write,
        int *valp = ctl->data;
        int val = *valp;
        loff_t pos = *ppos;
        int *valp = ctl->data;
        int val = *valp;
        loff_t pos = *ppos;
@@ -103315,7 +102886,7 @@ index 3e118df..27b16cf 100644
        int ret;
  
        /*
        int ret;
  
        /*
-@@ -4889,7 +4896,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
+@@ -4893,7 +4900,7 @@ int addrconf_sysctl_disable(struct ctl_table *ctl, int write,
        int *valp = ctl->data;
        int val = *valp;
        loff_t pos = *ppos;
        int *valp = ctl->data;
        int val = *valp;
        loff_t pos = *ppos;
@@ -103325,23 +102896,23 @@ index 3e118df..27b16cf 100644
  
        /*
 diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
  
        /*
 diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
-index 2daa3a1..341066c 100644
+index e8c4400..a4cd5da 100644
 --- a/net/ipv6/af_inet6.c
 +++ b/net/ipv6/af_inet6.c
 @@ -766,7 +766,7 @@ static int __net_init inet6_net_init(struct net *net)
        net->ipv6.sysctl.icmpv6_time = 1*HZ;
        net->ipv6.sysctl.flowlabel_consistency = 1;
        net->ipv6.sysctl.auto_flowlabels = 0;
 --- a/net/ipv6/af_inet6.c
 +++ b/net/ipv6/af_inet6.c
 @@ -766,7 +766,7 @@ static int __net_init inet6_net_init(struct net *net)
        net->ipv6.sysctl.icmpv6_time = 1*HZ;
        net->ipv6.sysctl.flowlabel_consistency = 1;
        net->ipv6.sysctl.auto_flowlabels = 0;
--      atomic_set(&net->ipv6.rt_genid, 0);
-+      atomic_set_unchecked(&net->ipv6.rt_genid, 0);
+-      atomic_set(&net->ipv6.fib6_sernum, 1);
++      atomic_set_unchecked(&net->ipv6.fib6_sernum, 1);
  
        err = ipv6_init_mibs(net);
        if (err)
 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
  
        err = ipv6_init_mibs(net);
        if (err)
 diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c
-index 2753319..b7e625c 100644
+index 2cdc383..09cffb8 100644
 --- a/net/ipv6/datagram.c
 +++ b/net/ipv6/datagram.c
 --- a/net/ipv6/datagram.c
 +++ b/net/ipv6/datagram.c
-@@ -939,5 +939,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
+@@ -928,5 +928,5 @@ void ip6_dgram_sock_seq_show(struct seq_file *seq, struct sock *sp,
                   0,
                   sock_i_ino(sp),
                   atomic_read(&sp->sk_refcnt), sp,
                   0,
                   sock_i_ino(sp),
                   atomic_read(&sp->sk_refcnt), sp,
@@ -103349,10 +102920,10 @@ index 2753319..b7e625c 100644
 +                 atomic_read_unchecked(&sp->sk_drops));
  }
 diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
 +                 atomic_read_unchecked(&sp->sk_drops));
  }
 diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
-index 06ba3e5..5c08d38 100644
+index 97ae700..18dcae0 100644
 --- a/net/ipv6/icmp.c
 +++ b/net/ipv6/icmp.c
 --- a/net/ipv6/icmp.c
 +++ b/net/ipv6/icmp.c
-@@ -993,7 +993,7 @@ static struct ctl_table ipv6_icmp_table_template[] = {
+@@ -997,7 +997,7 @@ static struct ctl_table ipv6_icmp_table_template[] = {
  
  struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net)
  {
  
  struct ctl_table * __net_init ipv6_icmp_sysctl_init(struct net *net)
  {
@@ -103361,8 +102932,24 @@ index 06ba3e5..5c08d38 100644
  
        table = kmemdup(ipv6_icmp_table_template,
                        sizeof(ipv6_icmp_table_template),
  
        table = kmemdup(ipv6_icmp_table_template,
                        sizeof(ipv6_icmp_table_template),
+diff --git a/net/ipv6/ip6_fib.c b/net/ipv6/ip6_fib.c
+index b2d1838..0194c04 100644
+--- a/net/ipv6/ip6_fib.c
++++ b/net/ipv6/ip6_fib.c
+@@ -99,9 +99,9 @@ static int fib6_new_sernum(struct net *net)
+       int new, old;
+       do {
+-              old = atomic_read(&net->ipv6.fib6_sernum);
++              old = atomic_read_unchecked(&net->ipv6.fib6_sernum);
+               new = old < INT_MAX ? old + 1 : 1;
+-      } while (atomic_cmpxchg(&net->ipv6.fib6_sernum,
++      } while (atomic_cmpxchg_unchecked(&net->ipv6.fib6_sernum,
+                               old, new) != old);
+       return new;
+ }
 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
 diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c
-index cacb493..3cae894 100644
+index 0e32d2e..98cbe65 100644
 --- a/net/ipv6/ip6_gre.c
 +++ b/net/ipv6/ip6_gre.c
 @@ -71,8 +71,8 @@ struct ip6gre_net {
 --- a/net/ipv6/ip6_gre.c
 +++ b/net/ipv6/ip6_gre.c
 @@ -71,8 +71,8 @@ struct ip6gre_net {
@@ -103376,7 +102963,7 @@ index cacb493..3cae894 100644
  static int ip6gre_tunnel_init(struct net_device *dev);
  static void ip6gre_tunnel_setup(struct net_device *dev);
  static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t);
  static int ip6gre_tunnel_init(struct net_device *dev);
  static void ip6gre_tunnel_setup(struct net_device *dev);
  static void ip6gre_tunnel_link(struct ip6gre_net *ign, struct ip6_tnl *t);
-@@ -1285,7 +1285,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
+@@ -1289,7 +1289,7 @@ static void ip6gre_fb_tunnel_init(struct net_device *dev)
  }
  
  
  }
  
  
@@ -103385,7 +102972,7 @@ index cacb493..3cae894 100644
        .handler     = ip6gre_rcv,
        .err_handler = ip6gre_err,
        .flags       = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
        .handler     = ip6gre_rcv,
        .err_handler = ip6gre_err,
        .flags       = INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
-@@ -1646,7 +1646,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = {
+@@ -1650,7 +1650,7 @@ static const struct nla_policy ip6gre_policy[IFLA_GRE_MAX + 1] = {
        [IFLA_GRE_FLAGS]       = { .type = NLA_U32 },
  };
  
        [IFLA_GRE_FLAGS]       = { .type = NLA_U32 },
  };
  
@@ -103394,7 +102981,7 @@ index cacb493..3cae894 100644
        .kind           = "ip6gre",
        .maxtype        = IFLA_GRE_MAX,
        .policy         = ip6gre_policy,
        .kind           = "ip6gre",
        .maxtype        = IFLA_GRE_MAX,
        .policy         = ip6gre_policy,
-@@ -1660,7 +1660,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
+@@ -1664,7 +1664,7 @@ static struct rtnl_link_ops ip6gre_link_ops __read_mostly = {
        .fill_info      = ip6gre_fill_info,
  };
  
        .fill_info      = ip6gre_fill_info,
  };
  
@@ -103403,20 +102990,8 @@ index cacb493..3cae894 100644
        .kind           = "ip6gretap",
        .maxtype        = IFLA_GRE_MAX,
        .policy         = ip6gre_policy,
        .kind           = "ip6gretap",
        .maxtype        = IFLA_GRE_MAX,
        .policy         = ip6gre_policy,
-diff --git a/net/ipv6/ip6_offload.c b/net/ipv6/ip6_offload.c
-index 65eda2a..620a102 100644
---- a/net/ipv6/ip6_offload.c
-+++ b/net/ipv6/ip6_offload.c
-@@ -46,6 +46,7 @@ static int ipv6_gso_pull_exthdrs(struct sk_buff *skb, int proto)
-               if (unlikely(!pskb_may_pull(skb, len)))
-                       break;
-+              opth = (void *)skb->data;
-               proto = opth->nexthdr;
-               __skb_pull(skb, len);
-       }
 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
 diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
-index d2eeb3b..c186e9a 100644
+index 9cb94cf..5678108 100644
 --- a/net/ipv6/ip6_tunnel.c
 +++ b/net/ipv6/ip6_tunnel.c
 @@ -86,7 +86,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
 --- a/net/ipv6/ip6_tunnel.c
 +++ b/net/ipv6/ip6_tunnel.c
 @@ -86,7 +86,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
@@ -103438,7 +103013,7 @@ index d2eeb3b..c186e9a 100644
        .maxtype        = IFLA_IPTUN_MAX,
        .policy         = ip6_tnl_policy,
 diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
        .maxtype        = IFLA_IPTUN_MAX,
        .policy         = ip6_tnl_policy,
 diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c
-index 99c9487..63f4d92 100644
+index bcda14d..49378c9 100644
 --- a/net/ipv6/ip6_vti.c
 +++ b/net/ipv6/ip6_vti.c
 @@ -62,7 +62,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
 --- a/net/ipv6/ip6_vti.c
 +++ b/net/ipv6/ip6_vti.c
 @@ -62,7 +62,7 @@ static u32 HASH(const struct in6_addr *addr1, const struct in6_addr *addr2)
@@ -103450,7 +103025,7 @@ index 99c9487..63f4d92 100644
  
  static int vti6_net_id __read_mostly;
  struct vti6_net {
  
  static int vti6_net_id __read_mostly;
  struct vti6_net {
-@@ -972,7 +972,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = {
+@@ -981,7 +981,7 @@ static const struct nla_policy vti6_policy[IFLA_VTI_MAX + 1] = {
        [IFLA_VTI_OKEY]         = { .type = NLA_U32 },
  };
  
        [IFLA_VTI_OKEY]         = { .type = NLA_U32 },
  };
  
@@ -103460,10 +103035,10 @@ index 99c9487..63f4d92 100644
        .maxtype        = IFLA_VTI_MAX,
        .policy         = vti6_policy,
 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
        .maxtype        = IFLA_VTI_MAX,
        .policy         = vti6_policy,
 diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
-index 0c28998..d0a2ecd 100644
+index e1a9583..7dd8f4d 100644
 --- a/net/ipv6/ipv6_sockglue.c
 +++ b/net/ipv6/ipv6_sockglue.c
 --- a/net/ipv6/ipv6_sockglue.c
 +++ b/net/ipv6/ipv6_sockglue.c
-@@ -995,7 +995,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
+@@ -993,7 +993,7 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname,
                if (sk->sk_type != SOCK_STREAM)
                        return -ENOPROTOOPT;
  
                if (sk->sk_type != SOCK_STREAM)
                        return -ENOPROTOOPT;
  
@@ -103624,7 +103199,7 @@ index 5b7a1ed..d9da205 100644
        inet6_unregister_protosw(&pingv6_protosw);
  }
 diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
        inet6_unregister_protosw(&pingv6_protosw);
  }
 diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
-index 2d6f860..b0165f5 100644
+index 1752cd0..3c6af41 100644
 --- a/net/ipv6/proc.c
 +++ b/net/ipv6/proc.c
 @@ -309,7 +309,7 @@ static int __net_init ipv6_proc_init_net(struct net *net)
 --- a/net/ipv6/proc.c
 +++ b/net/ipv6/proc.c
 @@ -309,7 +309,7 @@ static int __net_init ipv6_proc_init_net(struct net *net)
@@ -103637,7 +103212,7 @@ index 2d6f860..b0165f5 100644
                goto proc_dev_snmp6_fail;
        return 0;
 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
                goto proc_dev_snmp6_fail;
        return 0;
 diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
-index 39d4422..b0979547 100644
+index 896af88..6e2ba628 100644
 --- a/net/ipv6/raw.c
 +++ b/net/ipv6/raw.c
 @@ -388,7 +388,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb)
 --- a/net/ipv6/raw.c
 +++ b/net/ipv6/raw.c
 @@ -388,7 +388,7 @@ static inline int rawv6_rcv_skb(struct sock *sk, struct sk_buff *skb)
@@ -103712,10 +103287,10 @@ index 39d4422..b0979547 100644
                return 0;
        default:
 diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
                return 0;
        default:
 diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c
-index c6557d9..173e728 100644
+index 1a157ca..9fc05f4 100644
 --- a/net/ipv6/reassembly.c
 +++ b/net/ipv6/reassembly.c
 --- a/net/ipv6/reassembly.c
 +++ b/net/ipv6/reassembly.c
-@@ -627,12 +627,11 @@ static struct ctl_table ip6_frags_ctl_table[] = {
+@@ -625,12 +625,11 @@ static struct ctl_table ip6_frags_ctl_table[] = {
  
  static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
  {
  
  static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
  {
@@ -103730,7 +103305,7 @@ index c6557d9..173e728 100644
                if (table == NULL)
                        goto err_alloc;
  
                if (table == NULL)
                        goto err_alloc;
  
-@@ -646,9 +645,10 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
+@@ -644,9 +643,10 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
                /* Don't export sysctls to unprivileged users */
                if (net->user_ns != &init_user_ns)
                        table[0].procname = NULL;
                /* Don't export sysctls to unprivileged users */
                if (net->user_ns != &init_user_ns)
                        table[0].procname = NULL;
@@ -103743,7 +103318,7 @@ index c6557d9..173e728 100644
        if (hdr == NULL)
                goto err_reg;
  
        if (hdr == NULL)
                goto err_reg;
  
-@@ -656,8 +656,7 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
+@@ -654,8 +654,7 @@ static int __net_init ip6_frags_ns_sysctl_register(struct net *net)
        return 0;
  
  err_reg:
        return 0;
  
  err_reg:
@@ -103754,10 +103329,10 @@ index c6557d9..173e728 100644
        return -ENOMEM;
  }
 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
        return -ENOMEM;
  }
 diff --git a/net/ipv6/route.c b/net/ipv6/route.c
-index bafde82..af2c91f 100644
+index a318dd89..7ecfea6 100644
 --- a/net/ipv6/route.c
 +++ b/net/ipv6/route.c
 --- a/net/ipv6/route.c
 +++ b/net/ipv6/route.c
-@@ -2967,7 +2967,7 @@ struct ctl_table ipv6_route_table_template[] = {
+@@ -2965,7 +2965,7 @@ struct ctl_table ipv6_route_table_template[] = {
  
  struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net)
  {
  
  struct ctl_table * __net_init ipv6_route_sysctl_init(struct net *net)
  {
@@ -103767,7 +103342,7 @@ index bafde82..af2c91f 100644
        table = kmemdup(ipv6_route_table_template,
                        sizeof(ipv6_route_table_template),
 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
        table = kmemdup(ipv6_route_table_template,
                        sizeof(ipv6_route_table_template),
 diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c
-index ca1c7c4..37fba59 100644
+index a24557a..00a9ed1 100644
 --- a/net/ipv6/sit.c
 +++ b/net/ipv6/sit.c
 @@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev);
 --- a/net/ipv6/sit.c
 +++ b/net/ipv6/sit.c
 @@ -74,7 +74,7 @@ static void ipip6_tunnel_setup(struct net_device *dev);
@@ -103779,30 +103354,7 @@ index ca1c7c4..37fba59 100644
  
  static int sit_net_id __read_mostly;
  struct sit_net {
  
  static int sit_net_id __read_mostly;
  struct sit_net {
-@@ -484,11 +484,11 @@ static void ipip6_tunnel_uninit(struct net_device *dev)
-  */
- static int ipip6_err_gen_icmpv6_unreach(struct sk_buff *skb)
- {
--      const struct iphdr *iph = (const struct iphdr *) skb->data;
-+      int ihl = ((const struct iphdr *)skb->data)->ihl*4;
-       struct rt6_info *rt;
-       struct sk_buff *skb2;
--      if (!pskb_may_pull(skb, iph->ihl * 4 + sizeof(struct ipv6hdr) + 8))
-+      if (!pskb_may_pull(skb, ihl + sizeof(struct ipv6hdr) + 8))
-               return 1;
-       skb2 = skb_clone(skb, GFP_ATOMIC);
-@@ -497,7 +497,7 @@ static int ipip6_err_gen_icmpv6_unreach(struct sk_buff *skb)
-               return 1;
-       skb_dst_drop(skb2);
--      skb_pull(skb2, iph->ihl * 4);
-+      skb_pull(skb2, ihl);
-       skb_reset_network_header(skb2);
-       rt = rt6_lookup(dev_net(skb->dev), &ipv6_hdr(skb2)->saddr, NULL, 0, 0);
-@@ -1659,7 +1659,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
+@@ -1750,7 +1750,7 @@ static void ipip6_dellink(struct net_device *dev, struct list_head *head)
                unregister_netdevice_queue(dev, head);
  }
  
                unregister_netdevice_queue(dev, head);
  }
  
@@ -103812,10 +103364,10 @@ index ca1c7c4..37fba59 100644
        .maxtype        = IFLA_IPTUN_MAX,
        .policy         = ipip6_policy,
 diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
        .maxtype        = IFLA_IPTUN_MAX,
        .policy         = ipip6_policy,
 diff --git a/net/ipv6/sysctl_net_ipv6.c b/net/ipv6/sysctl_net_ipv6.c
-index 0c56c93..ece50df 100644
+index c5c10fa..2577d51 100644
 --- a/net/ipv6/sysctl_net_ipv6.c
 +++ b/net/ipv6/sysctl_net_ipv6.c
 --- a/net/ipv6/sysctl_net_ipv6.c
 +++ b/net/ipv6/sysctl_net_ipv6.c
-@@ -68,7 +68,7 @@ static struct ctl_table ipv6_rotable[] = {
+@@ -78,7 +78,7 @@ static struct ctl_table ipv6_rotable[] = {
  
  static int __net_init ipv6_sysctl_net_init(struct net *net)
  {
  
  static int __net_init ipv6_sysctl_net_init(struct net *net)
  {
@@ -103825,11 +103377,11 @@ index 0c56c93..ece50df 100644
        struct ctl_table *ipv6_icmp_table;
        int err;
 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
        struct ctl_table *ipv6_icmp_table;
        int err;
 diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
-index 264c0f2..b6512c6 100644
+index c277951..c7ee5bf 100644
 --- a/net/ipv6/tcp_ipv6.c
 +++ b/net/ipv6/tcp_ipv6.c
 --- a/net/ipv6/tcp_ipv6.c
 +++ b/net/ipv6/tcp_ipv6.c
-@@ -102,6 +102,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
-               inet6_sk(sk)->rx_dst_cookie = rt->rt6i_node->fn_sernum;
+@@ -104,6 +104,10 @@ static void inet6_sk_rx_dst_set(struct sock *sk, const struct sk_buff *skb)
+       }
  }
  
 +#ifdef CONFIG_GRKERNSEC_BLACKHOLE
  }
  
 +#ifdef CONFIG_GRKERNSEC_BLACKHOLE
@@ -103839,7 +103391,7 @@ index 264c0f2..b6512c6 100644
  static void tcp_v6_hash(struct sock *sk)
  {
        if (sk->sk_state != TCP_CLOSE) {
  static void tcp_v6_hash(struct sock *sk)
  {
        if (sk->sk_state != TCP_CLOSE) {
-@@ -1333,6 +1337,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
+@@ -1341,6 +1345,9 @@ static int tcp_v6_do_rcv(struct sock *sk, struct sk_buff *skb)
        return 0;
  
  reset:
        return 0;
  
  reset:
@@ -103849,10 +103401,10 @@ index 264c0f2..b6512c6 100644
        tcp_v6_send_reset(sk, skb);
  discard:
        if (opt_skb)
        tcp_v6_send_reset(sk, skb);
  discard:
        if (opt_skb)
-@@ -1417,12 +1424,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
-       TCP_SKB_CB(skb)->sacked = 0;
+@@ -1434,12 +1441,20 @@ static int tcp_v6_rcv(struct sk_buff *skb)
  
  
-       sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest);
+       sk = __inet6_lookup_skb(&tcp_hashinfo, skb, th->source, th->dest,
+                               tcp_v6_iif(skb));
 -      if (!sk)
 +      if (!sk) {
 +#ifdef CONFIG_GRKERNSEC_BLACKHOLE
 -      if (!sk)
 +      if (!sk) {
 +#ifdef CONFIG_GRKERNSEC_BLACKHOLE
@@ -103872,7 +103424,7 @@ index 264c0f2..b6512c6 100644
  
        if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) {
                NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
  
        if (hdr->hop_limit < inet6_sk(sk)->min_hopcount) {
                NET_INC_STATS_BH(net, LINUX_MIB_TCPMINTTLDROP);
-@@ -1479,6 +1494,10 @@ csum_error:
+@@ -1486,6 +1501,10 @@ csum_error:
  bad_packet:
                TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
        } else {
  bad_packet:
                TCP_INC_STATS_BH(net, TCP_MIB_INERRS);
        } else {
@@ -103884,7 +103436,7 @@ index 264c0f2..b6512c6 100644
        }
  
 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
        }
  
 diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
-index 4836af8..0e52bbd 100644
+index f6ba535..b41033f 100644
 --- a/net/ipv6/udp.c
 +++ b/net/ipv6/udp.c
 @@ -76,6 +76,10 @@ static unsigned int udp6_ehashfn(struct net *net,
 --- a/net/ipv6/udp.c
 +++ b/net/ipv6/udp.c
 @@ -76,6 +76,10 @@ static unsigned int udp6_ehashfn(struct net *net,
@@ -103925,7 +103477,7 @@ index 4836af8..0e52bbd 100644
                        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
                                          IS_UDPLITE(sk));
                        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
                        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
                                          IS_UDPLITE(sk));
                        UDP6_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
-@@ -915,6 +919,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
+@@ -919,6 +923,9 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
                goto csum_error;
  
        UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
                goto csum_error;
  
        UDP6_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
@@ -103936,45 +103488,20 @@ index 4836af8..0e52bbd 100644
  
        kfree_skb(skb);
 diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
  
        kfree_skb(skb);
 diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c
-index 2a0bbda..442240d 100644
+index 5f98364..5ca982a 100644
 --- a/net/ipv6/xfrm6_policy.c
 +++ b/net/ipv6/xfrm6_policy.c
 --- a/net/ipv6/xfrm6_policy.c
 +++ b/net/ipv6/xfrm6_policy.c
-@@ -170,8 +170,10 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
-               case IPPROTO_DCCP:
-                       if (!onlyproto && (nh + offset + 4 < skb->data ||
-                            pskb_may_pull(skb, nh + offset + 4 - skb->data))) {
--                              __be16 *ports = (__be16 *)exthdr;
-+                              __be16 *ports;
-+                              nh = skb_network_header(skb);
-+                              ports = (__be16 *)(nh + offset);
-                               fl6->fl6_sport = ports[!!reverse];
-                               fl6->fl6_dport = ports[!reverse];
-                       }
-@@ -180,8 +182,10 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
-               case IPPROTO_ICMPV6:
-                       if (!onlyproto && pskb_may_pull(skb, nh + offset + 2 - skb->data)) {
--                              u8 *icmp = (u8 *)exthdr;
-+                              u8 *icmp;
-+                              nh = skb_network_header(skb);
-+                              icmp = (u8 *)(nh + offset);
-                               fl6->fl6_icmp_type = icmp[0];
-                               fl6->fl6_icmp_code = icmp[1];
-                       }
-@@ -192,8 +196,9 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
-               case IPPROTO_MH:
-                       if (!onlyproto && pskb_may_pull(skb, nh + offset + 3 - skb->data)) {
-                               struct ip6_mh *mh;
--                              mh = (struct ip6_mh *)exthdr;
-+                              nh = skb_network_header(skb);
-+                              mh = (struct ip6_mh *)(nh + offset);
-                               fl6->fl6_mh_type = mh->ip6mh_type;
-                       }
-                       fl6->flowi6_proto = nexthdr;
-@@ -212,11 +217,11 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
+@@ -130,8 +130,8 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
+ {
+       struct flowi6 *fl6 = &fl->u.ip6;
+       int onlyproto = 0;
+-      u16 offset = skb_network_header_len(skb);
+       const struct ipv6hdr *hdr = ipv6_hdr(skb);
++      u16 offset = sizeof(*hdr);
+       struct ipv6_opt_hdr *exthdr;
+       const unsigned char *nh = skb_network_header(skb);
+       u8 nexthdr = nh[IP6CB(skb)->nhoff];
+@@ -217,11 +217,11 @@ _decode_session6(struct sk_buff *skb, struct flowi *fl, int reverse)
        }
  }
  
        }
  }
  
@@ -103988,7 +103515,7 @@ index 2a0bbda..442240d 100644
        return dst_entries_get_fast(ops) > ops->gc_thresh * 2;
  }
  
        return dst_entries_get_fast(ops) > ops->gc_thresh * 2;
  }
  
-@@ -329,19 +334,19 @@ static struct ctl_table xfrm6_policy_table[] = {
+@@ -334,19 +334,19 @@ static struct ctl_table xfrm6_policy_table[] = {
  
  static int __net_init xfrm6_net_init(struct net *net)
  {
  
  static int __net_init xfrm6_net_init(struct net *net)
  {
@@ -104013,7 +103540,7 @@ index 2a0bbda..442240d 100644
        if (!hdr)
                goto err_reg;
  
        if (!hdr)
                goto err_reg;
  
-@@ -349,8 +354,7 @@ static int __net_init xfrm6_net_init(struct net *net)
+@@ -354,8 +354,7 @@ static int __net_init xfrm6_net_init(struct net *net)
        return 0;
  
  err_reg:
        return 0;
  
  err_reg:
@@ -104141,7 +103668,7 @@ index a089b6b..3ca3b60 100644
        memcpy(iucv->src_name, name, 8);
  }
 diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
        memcpy(iucv->src_name, name, 8);
  }
 diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c
-index da78793..bdd78cf 100644
+index 2a6a1fd..6c112b0 100644
 --- a/net/iucv/iucv.c
 +++ b/net/iucv/iucv.c
 @@ -702,7 +702,7 @@ static int iucv_cpu_notify(struct notifier_block *self,
 --- a/net/iucv/iucv.c
 +++ b/net/iucv/iucv.c
 @@ -702,7 +702,7 @@ static int iucv_cpu_notify(struct notifier_block *self,
@@ -104260,10 +103787,10 @@ index 1a3c7e0..80f8b0c 100644
                goto out;
  
 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
                goto out;
  
 diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
-index 927b4ea..88a30e2 100644
+index 343da1e..509873f 100644
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
 --- a/net/mac80211/cfg.c
 +++ b/net/mac80211/cfg.c
-@@ -540,7 +540,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
+@@ -541,7 +541,7 @@ static int ieee80211_set_monitor_channel(struct wiphy *wiphy,
                        ret = ieee80211_vif_use_channel(sdata, chandef,
                                        IEEE80211_CHANCTX_EXCLUSIVE);
                }
                        ret = ieee80211_vif_use_channel(sdata, chandef,
                                        IEEE80211_CHANCTX_EXCLUSIVE);
                }
@@ -104272,7 +103799,7 @@ index 927b4ea..88a30e2 100644
                local->_oper_chandef = *chandef;
                ieee80211_hw_config(local, 0);
        }
                local->_oper_chandef = *chandef;
                ieee80211_hw_config(local, 0);
        }
-@@ -3286,7 +3286,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
+@@ -3326,7 +3326,7 @@ static void ieee80211_mgmt_frame_register(struct wiphy *wiphy,
                else
                        local->probe_req_reg--;
  
                else
                        local->probe_req_reg--;
  
@@ -104281,9 +103808,9 @@ index 927b4ea..88a30e2 100644
                        break;
  
                ieee80211_queue_work(&local->hw, &local->reconfig_filter);
                        break;
  
                ieee80211_queue_work(&local->hw, &local->reconfig_filter);
-@@ -3420,8 +3420,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
+@@ -3460,8 +3460,8 @@ static int ieee80211_cfg_get_channel(struct wiphy *wiphy,
        if (chanctx_conf) {
        if (chanctx_conf) {
-               *chandef = chanctx_conf->def;
+               *chandef = sdata->vif.bss_conf.chandef;
                ret = 0;
 -      } else if (local->open_count > 0 &&
 -                 local->open_count == local->monitors &&
                ret = 0;
 -      } else if (local->open_count > 0 &&
 -                 local->open_count == local->monitors &&
@@ -104293,10 +103820,10 @@ index 927b4ea..88a30e2 100644
                if (local->use_chanctx)
                        *chandef = local->monitor_chandef;
 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
                if (local->use_chanctx)
                        *chandef = local->monitor_chandef;
 diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
-index 5d102b5..6199fca 100644
+index 8c68da3..0695016 100644
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -28,6 +28,7 @@
+@@ -29,6 +29,7 @@
  #include <net/ieee80211_radiotap.h>
  #include <net/cfg80211.h>
  #include <net/mac80211.h>
  #include <net/ieee80211_radiotap.h>
  #include <net/cfg80211.h>
  #include <net/mac80211.h>
@@ -104304,7 +103831,7 @@ index 5d102b5..6199fca 100644
  #include "key.h"
  #include "sta_info.h"
  #include "debug.h"
  #include "key.h"
  #include "sta_info.h"
  #include "debug.h"
-@@ -1055,7 +1056,7 @@ struct ieee80211_local {
+@@ -1057,7 +1058,7 @@ struct ieee80211_local {
        /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
        spinlock_t queue_stop_reason_lock;
  
        /* also used to protect ampdu_ac_queue and amdpu_ac_stop_refcnt */
        spinlock_t queue_stop_reason_lock;
  
@@ -104314,10 +103841,10 @@ index 5d102b5..6199fca 100644
        /* number of interfaces with corresponding FIF_ flags */
        int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll,
 diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
        /* number of interfaces with corresponding FIF_ flags */
        int fif_fcsfail, fif_plcpfail, fif_control, fif_other_bss, fif_pspoll,
 diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
-index 3538e5e..0aa7879 100644
+index eeae0ab..0f24585 100644
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
 --- a/net/mac80211/iface.c
 +++ b/net/mac80211/iface.c
-@@ -531,7 +531,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -533,7 +533,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
                break;
        }
  
                break;
        }
  
@@ -104326,7 +103853,7 @@ index 3538e5e..0aa7879 100644
                res = drv_start(local);
                if (res)
                        goto err_del_bss;
                res = drv_start(local);
                if (res)
                        goto err_del_bss;
-@@ -578,7 +578,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -580,7 +580,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
                        res = drv_add_interface(local, sdata);
                        if (res)
                                goto err_stop;
                        res = drv_add_interface(local, sdata);
                        if (res)
                                goto err_stop;
@@ -104335,7 +103862,7 @@ index 3538e5e..0aa7879 100644
                        res = ieee80211_add_virtual_monitor(local);
                        if (res)
                                goto err_stop;
                        res = ieee80211_add_virtual_monitor(local);
                        if (res)
                                goto err_stop;
-@@ -687,7 +687,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -689,7 +689,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
                atomic_inc(&local->iff_promiscs);
  
        if (coming_up)
                atomic_inc(&local->iff_promiscs);
  
        if (coming_up)
@@ -104344,7 +103871,7 @@ index 3538e5e..0aa7879 100644
  
        if (hw_reconf_flags)
                ieee80211_hw_config(local, hw_reconf_flags);
  
        if (hw_reconf_flags)
                ieee80211_hw_config(local, hw_reconf_flags);
-@@ -725,7 +725,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
+@@ -727,7 +727,7 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
   err_del_interface:
        drv_remove_interface(local, sdata);
   err_stop:
   err_del_interface:
        drv_remove_interface(local, sdata);
   err_stop:
@@ -104353,7 +103880,7 @@ index 3538e5e..0aa7879 100644
                drv_stop(local);
   err_del_bss:
        sdata->bss = NULL;
                drv_stop(local);
   err_del_bss:
        sdata->bss = NULL;
-@@ -891,7 +891,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -893,7 +893,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
        }
  
        if (going_down)
        }
  
        if (going_down)
@@ -104362,7 +103889,7 @@ index 3538e5e..0aa7879 100644
  
        switch (sdata->vif.type) {
        case NL80211_IFTYPE_AP_VLAN:
  
        switch (sdata->vif.type) {
        case NL80211_IFTYPE_AP_VLAN:
-@@ -952,7 +952,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -955,7 +955,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
        }
        spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
  
        }
        spin_unlock_irqrestore(&local->queue_stop_reason_lock, flags);
  
@@ -104371,7 +103898,7 @@ index 3538e5e..0aa7879 100644
                ieee80211_clear_tx_pending(local);
  
        /*
                ieee80211_clear_tx_pending(local);
  
        /*
-@@ -995,7 +995,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -998,7 +998,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
        if (cancel_scan)
                flush_delayed_work(&local->scan_work);
  
        if (cancel_scan)
                flush_delayed_work(&local->scan_work);
  
@@ -104380,7 +103907,7 @@ index 3538e5e..0aa7879 100644
                ieee80211_stop_device(local);
  
                /* no reconfiguring after stop! */
                ieee80211_stop_device(local);
  
                /* no reconfiguring after stop! */
-@@ -1006,7 +1006,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
+@@ -1009,7 +1009,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata,
        ieee80211_configure_filter(local);
        ieee80211_hw_config(local, hw_reconf_flags);
  
        ieee80211_configure_filter(local);
        ieee80211_hw_config(local, hw_reconf_flags);
  
@@ -104390,10 +103917,10 @@ index 3538e5e..0aa7879 100644
  }
  
 diff --git a/net/mac80211/main.c b/net/mac80211/main.c
  }
  
 diff --git a/net/mac80211/main.c b/net/mac80211/main.c
-index e0ab432..36b7b94 100644
+index 0de7c93..884b2ca 100644
 --- a/net/mac80211/main.c
 +++ b/net/mac80211/main.c
 --- a/net/mac80211/main.c
 +++ b/net/mac80211/main.c
-@@ -174,7 +174,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
+@@ -175,7 +175,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
                changed &= ~(IEEE80211_CONF_CHANGE_CHANNEL |
                             IEEE80211_CONF_CHANGE_POWER);
  
                changed &= ~(IEEE80211_CONF_CHANGE_CHANNEL |
                             IEEE80211_CONF_CHANGE_POWER);
  
@@ -104447,10 +103974,10 @@ index 6081329..ab23834 100644
  
        if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) {
 diff --git a/net/mac80211/util.c b/net/mac80211/util.c
  
        if (local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) {
 diff --git a/net/mac80211/util.c b/net/mac80211/util.c
-index 725af7a..a21a20a 100644
+index 3c61060..7bed2e3 100644
 --- a/net/mac80211/util.c
 +++ b/net/mac80211/util.c
 --- a/net/mac80211/util.c
 +++ b/net/mac80211/util.c
-@@ -1643,7 +1643,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -1669,7 +1669,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
        }
  #endif
        /* everything else happens only if HW was up & running */
        }
  #endif
        /* everything else happens only if HW was up & running */
@@ -104459,7 +103986,7 @@ index 725af7a..a21a20a 100644
                goto wake_up;
  
        /*
                goto wake_up;
  
        /*
-@@ -1869,7 +1869,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
+@@ -1895,7 +1895,7 @@ int ieee80211_reconfig(struct ieee80211_local *local)
        local->in_reconfig = false;
        barrier();
  
        local->in_reconfig = false;
        barrier();
  
@@ -104469,10 +103996,10 @@ index 725af7a..a21a20a 100644
  
        /*
 diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
  
        /*
 diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
-index 6d77cce..36e2fc3 100644
+index ae5096ab..e5aa70a 100644
 --- a/net/netfilter/Kconfig
 +++ b/net/netfilter/Kconfig
 --- a/net/netfilter/Kconfig
 +++ b/net/netfilter/Kconfig
-@@ -1096,6 +1096,16 @@ config NETFILTER_XT_MATCH_ESP
+@@ -1105,6 +1105,16 @@ config NETFILTER_XT_MATCH_ESP
  
          To compile it as a module, choose M here.  If unsure, say N.
  
  
          To compile it as a module, choose M here.  If unsure, say N.
  
@@ -104490,10 +104017,10 @@ index 6d77cce..36e2fc3 100644
        tristate '"hashlimit" match support'
        depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
 diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
        tristate '"hashlimit" match support'
        depends on (IP6_NF_IPTABLES || IP6_NF_IPTABLES=n)
 diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
-index fad5fdb..ba3672a 100644
+index a9571be..c59e173 100644
 --- a/net/netfilter/Makefile
 +++ b/net/netfilter/Makefile
 --- a/net/netfilter/Makefile
 +++ b/net/netfilter/Makefile
-@@ -136,6 +136,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o
+@@ -137,6 +137,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_DEVGROUP) += xt_devgroup.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_DSCP) += xt_dscp.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_ECN) += xt_ecn.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_ESP) += xt_esp.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_DSCP) += xt_dscp.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_ECN) += xt_ecn.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_ESP) += xt_esp.o
@@ -104502,10 +104029,10 @@ index fad5fdb..ba3672a 100644
  obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o
 diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
  obj-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += xt_helper.o
  obj-$(CONFIG_NETFILTER_XT_MATCH_HL) += xt_hl.o
 diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c
-index 6582dce..a911da7 100644
+index d259da3..6a32b2c 100644
 --- a/net/netfilter/ipset/ip_set_core.c
 +++ b/net/netfilter/ipset/ip_set_core.c
 --- a/net/netfilter/ipset/ip_set_core.c
 +++ b/net/netfilter/ipset/ip_set_core.c
-@@ -1921,7 +1921,7 @@ done:
+@@ -1952,7 +1952,7 @@ done:
        return ret;
  }
  
        return ret;
  }
  
@@ -104515,10 +104042,10 @@ index 6582dce..a911da7 100644
        .get_optmin     = SO_IP_SET,
        .get_optmax     = SO_IP_SET + 1,
 diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
        .get_optmin     = SO_IP_SET,
        .get_optmax     = SO_IP_SET + 1,
 diff --git a/net/netfilter/ipvs/ip_vs_conn.c b/net/netfilter/ipvs/ip_vs_conn.c
-index 610e19c..08d0c3f 100644
+index b0f7b62..0541842 100644
 --- a/net/netfilter/ipvs/ip_vs_conn.c
 +++ b/net/netfilter/ipvs/ip_vs_conn.c
 --- a/net/netfilter/ipvs/ip_vs_conn.c
 +++ b/net/netfilter/ipvs/ip_vs_conn.c
-@@ -556,7 +556,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest)
+@@ -572,7 +572,7 @@ ip_vs_bind_dest(struct ip_vs_conn *cp, struct ip_vs_dest *dest)
        /* Increase the refcnt counter of the dest */
        ip_vs_dest_hold(dest);
  
        /* Increase the refcnt counter of the dest */
        ip_vs_dest_hold(dest);
  
@@ -104527,7 +104054,7 @@ index 610e19c..08d0c3f 100644
        if (cp->protocol != IPPROTO_UDP)
                conn_flags &= ~IP_VS_CONN_F_ONE_PACKET;
        flags = cp->flags;
        if (cp->protocol != IPPROTO_UDP)
                conn_flags &= ~IP_VS_CONN_F_ONE_PACKET;
        flags = cp->flags;
-@@ -899,7 +899,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p,
+@@ -922,7 +922,7 @@ ip_vs_conn_new(const struct ip_vs_conn_param *p, int dest_af,
  
        cp->control = NULL;
        atomic_set(&cp->n_control, 0);
  
        cp->control = NULL;
        atomic_set(&cp->n_control, 0);
@@ -104536,7 +104063,7 @@ index 610e19c..08d0c3f 100644
  
        cp->packet_xmit = NULL;
        cp->app = NULL;
  
        cp->packet_xmit = NULL;
        cp->app = NULL;
-@@ -1187,7 +1187,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp)
+@@ -1229,7 +1229,7 @@ static inline int todrop_entry(struct ip_vs_conn *cp)
  
        /* Don't drop the entry if its number of incoming packets is not
           located in [0, 8] */
  
        /* Don't drop the entry if its number of incoming packets is not
           located in [0, 8] */
@@ -104546,10 +104073,10 @@ index 610e19c..08d0c3f 100644
  
        if (!todrop_rate[i]) return 0;
 diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
  
        if (!todrop_rate[i]) return 0;
 diff --git a/net/netfilter/ipvs/ip_vs_core.c b/net/netfilter/ipvs/ip_vs_core.c
-index 5c34e8d..0d8eb7f 100644
+index 990decb..5075248 100644
 --- a/net/netfilter/ipvs/ip_vs_core.c
 +++ b/net/netfilter/ipvs/ip_vs_core.c
 --- a/net/netfilter/ipvs/ip_vs_core.c
 +++ b/net/netfilter/ipvs/ip_vs_core.c
-@@ -567,7 +567,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
+@@ -568,7 +568,7 @@ int ip_vs_leave(struct ip_vs_service *svc, struct sk_buff *skb,
                ret = cp->packet_xmit(skb, cp, pd->pp, iph);
                /* do not touch skb anymore */
  
                ret = cp->packet_xmit(skb, cp, pd->pp, iph);
                /* do not touch skb anymore */
  
@@ -104558,7 +104085,7 @@ index 5c34e8d..0d8eb7f 100644
                ip_vs_conn_put(cp);
                return ret;
        }
                ip_vs_conn_put(cp);
                return ret;
        }
-@@ -1711,7 +1711,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
+@@ -1712,7 +1712,7 @@ ip_vs_in(unsigned int hooknum, struct sk_buff *skb, int af)
        if (cp->flags & IP_VS_CONN_F_ONE_PACKET)
                pkts = sysctl_sync_threshold(ipvs);
        else
        if (cp->flags & IP_VS_CONN_F_ONE_PACKET)
                pkts = sysctl_sync_threshold(ipvs);
        else
@@ -104568,10 +104095,10 @@ index 5c34e8d..0d8eb7f 100644
        if (ipvs->sync_state & IP_VS_STATE_MASTER)
                ip_vs_sync_conn(net, cp, pkts);
 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
        if (ipvs->sync_state & IP_VS_STATE_MASTER)
                ip_vs_sync_conn(net, cp, pkts);
 diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
-index fd3f444..ab28fa24 100644
+index ac7ba68..9735acb9 100644
 --- a/net/netfilter/ipvs/ip_vs_ctl.c
 +++ b/net/netfilter/ipvs/ip_vs_ctl.c
 --- a/net/netfilter/ipvs/ip_vs_ctl.c
 +++ b/net/netfilter/ipvs/ip_vs_ctl.c
-@@ -794,7 +794,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
+@@ -800,7 +800,7 @@ __ip_vs_update_dest(struct ip_vs_service *svc, struct ip_vs_dest *dest,
                 */
                ip_vs_rs_hash(ipvs, dest);
        }
                 */
                ip_vs_rs_hash(ipvs, dest);
        }
@@ -104580,7 +104107,7 @@ index fd3f444..ab28fa24 100644
  
        /* bind the service */
        old_svc = rcu_dereference_protected(dest->svc, 1);
  
        /* bind the service */
        old_svc = rcu_dereference_protected(dest->svc, 1);
-@@ -1654,7 +1654,7 @@ proc_do_sync_ports(struct ctl_table *table, int write,
+@@ -1665,7 +1665,7 @@ proc_do_sync_ports(struct ctl_table *table, int write,
   *    align with netns init in ip_vs_control_net_init()
   */
  
   *    align with netns init in ip_vs_control_net_init()
   */
  
@@ -104589,7 +104116,7 @@ index fd3f444..ab28fa24 100644
        {
                .procname       = "amemthresh",
                .maxlen         = sizeof(int),
        {
                .procname       = "amemthresh",
                .maxlen         = sizeof(int),
-@@ -1989,7 +1989,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
+@@ -2000,7 +2000,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
                                           "      %-7s %-6d %-10d %-10d\n",
                                           &dest->addr.in6,
                                           ntohs(dest->port),
                                           "      %-7s %-6d %-10d %-10d\n",
                                           &dest->addr.in6,
                                           ntohs(dest->port),
@@ -104598,7 +104125,7 @@ index fd3f444..ab28fa24 100644
                                           atomic_read(&dest->weight),
                                           atomic_read(&dest->activeconns),
                                           atomic_read(&dest->inactconns));
                                           atomic_read(&dest->weight),
                                           atomic_read(&dest->activeconns),
                                           atomic_read(&dest->inactconns));
-@@ -2000,7 +2000,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
+@@ -2011,7 +2011,7 @@ static int ip_vs_info_seq_show(struct seq_file *seq, void *v)
                                           "%-7s %-6d %-10d %-10d\n",
                                           ntohl(dest->addr.ip),
                                           ntohs(dest->port),
                                           "%-7s %-6d %-10d %-10d\n",
                                           ntohl(dest->addr.ip),
                                           ntohs(dest->port),
@@ -104607,7 +104134,7 @@ index fd3f444..ab28fa24 100644
                                           atomic_read(&dest->weight),
                                           atomic_read(&dest->activeconns),
                                           atomic_read(&dest->inactconns));
                                           atomic_read(&dest->weight),
                                           atomic_read(&dest->activeconns),
                                           atomic_read(&dest->inactconns));
-@@ -2471,7 +2471,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get,
+@@ -2500,7 +2500,7 @@ __ip_vs_get_dest_entries(struct net *net, const struct ip_vs_get_dests *get,
  
                        entry.addr = dest->addr.ip;
                        entry.port = dest->port;
  
                        entry.addr = dest->addr.ip;
                        entry.port = dest->port;
@@ -104616,7 +104143,7 @@ index fd3f444..ab28fa24 100644
                        entry.weight = atomic_read(&dest->weight);
                        entry.u_threshold = dest->u_threshold;
                        entry.l_threshold = dest->l_threshold;
                        entry.weight = atomic_read(&dest->weight);
                        entry.u_threshold = dest->u_threshold;
                        entry.l_threshold = dest->l_threshold;
-@@ -3010,7 +3010,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest)
+@@ -3040,7 +3040,7 @@ static int ip_vs_genl_fill_dest(struct sk_buff *skb, struct ip_vs_dest *dest)
        if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) ||
            nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) ||
            nla_put_u32(skb, IPVS_DEST_ATTR_FWD_METHOD,
        if (nla_put(skb, IPVS_DEST_ATTR_ADDR, sizeof(dest->addr), &dest->addr) ||
            nla_put_be16(skb, IPVS_DEST_ATTR_PORT, dest->port) ||
            nla_put_u32(skb, IPVS_DEST_ATTR_FWD_METHOD,
@@ -104625,7 +104152,7 @@ index fd3f444..ab28fa24 100644
                         IP_VS_CONN_F_FWD_MASK)) ||
            nla_put_u32(skb, IPVS_DEST_ATTR_WEIGHT,
                        atomic_read(&dest->weight)) ||
                         IP_VS_CONN_F_FWD_MASK)) ||
            nla_put_u32(skb, IPVS_DEST_ATTR_WEIGHT,
                        atomic_read(&dest->weight)) ||
-@@ -3600,7 +3600,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct net *net)
+@@ -3673,7 +3673,7 @@ static int __net_init ip_vs_control_net_init_sysctl(struct net *net)
  {
        int idx;
        struct netns_ipvs *ipvs = net_ipvs(net);
  {
        int idx;
        struct netns_ipvs *ipvs = net_ipvs(net);
@@ -104635,7 +104162,7 @@ index fd3f444..ab28fa24 100644
        atomic_set(&ipvs->dropentry, 0);
        spin_lock_init(&ipvs->dropentry_lock);
 diff --git a/net/netfilter/ipvs/ip_vs_lblc.c b/net/netfilter/ipvs/ip_vs_lblc.c
        atomic_set(&ipvs->dropentry, 0);
        spin_lock_init(&ipvs->dropentry_lock);
 diff --git a/net/netfilter/ipvs/ip_vs_lblc.c b/net/netfilter/ipvs/ip_vs_lblc.c
-index 547ff33..c8c8117 100644
+index 127f140..553d652 100644
 --- a/net/netfilter/ipvs/ip_vs_lblc.c
 +++ b/net/netfilter/ipvs/ip_vs_lblc.c
 @@ -118,7 +118,7 @@ struct ip_vs_lblc_table {
 --- a/net/netfilter/ipvs/ip_vs_lblc.c
 +++ b/net/netfilter/ipvs/ip_vs_lblc.c
 @@ -118,7 +118,7 @@ struct ip_vs_lblc_table {
@@ -104648,7 +104175,7 @@ index 547ff33..c8c8117 100644
                .procname       = "lblc_expiration",
                .data           = NULL,
 diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c b/net/netfilter/ipvs/ip_vs_lblcr.c
                .procname       = "lblc_expiration",
                .data           = NULL,
 diff --git a/net/netfilter/ipvs/ip_vs_lblcr.c b/net/netfilter/ipvs/ip_vs_lblcr.c
-index 3f21a2f..a112e85 100644
+index 2229d2d..b32b785 100644
 --- a/net/netfilter/ipvs/ip_vs_lblcr.c
 +++ b/net/netfilter/ipvs/ip_vs_lblcr.c
 @@ -289,7 +289,7 @@ struct ip_vs_lblcr_table {
 --- a/net/netfilter/ipvs/ip_vs_lblcr.c
 +++ b/net/netfilter/ipvs/ip_vs_lblcr.c
 @@ -289,7 +289,7 @@ struct ip_vs_lblcr_table {
@@ -104661,7 +104188,7 @@ index 3f21a2f..a112e85 100644
                .procname       = "lblcr_expiration",
                .data           = NULL,
 diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
                .procname       = "lblcr_expiration",
                .data           = NULL,
 diff --git a/net/netfilter/ipvs/ip_vs_sync.c b/net/netfilter/ipvs/ip_vs_sync.c
-index eadffb2..c2feeae 100644
+index 7162c86..9eeb60e 100644
 --- a/net/netfilter/ipvs/ip_vs_sync.c
 +++ b/net/netfilter/ipvs/ip_vs_sync.c
 @@ -609,7 +609,7 @@ static void ip_vs_sync_conn_v0(struct net *net, struct ip_vs_conn *cp,
 --- a/net/netfilter/ipvs/ip_vs_sync.c
 +++ b/net/netfilter/ipvs/ip_vs_sync.c
 @@ -609,7 +609,7 @@ static void ip_vs_sync_conn_v0(struct net *net, struct ip_vs_conn *cp,
@@ -104682,7 +104209,7 @@ index eadffb2..c2feeae 100644
        else
                pkts = sysctl_sync_threshold(ipvs);
        goto sloop;
        else
                pkts = sysctl_sync_threshold(ipvs);
        goto sloop;
-@@ -894,7 +894,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param,
+@@ -901,7 +901,7 @@ static void ip_vs_proc_conn(struct net *net, struct ip_vs_conn_param *param,
  
        if (opt)
                memcpy(&cp->in_seq, opt, sizeof(*opt));
  
        if (opt)
                memcpy(&cp->in_seq, opt, sizeof(*opt));
@@ -104692,10 +104219,10 @@ index eadffb2..c2feeae 100644
        cp->old_state = cp->state;
        /*
 diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
        cp->old_state = cp->state;
        /*
 diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c
-index 56896a4..dfe3806 100644
+index bd90bf8..816a020d 100644
 --- a/net/netfilter/ipvs/ip_vs_xmit.c
 +++ b/net/netfilter/ipvs/ip_vs_xmit.c
 --- a/net/netfilter/ipvs/ip_vs_xmit.c
 +++ b/net/netfilter/ipvs/ip_vs_xmit.c
-@@ -1114,7 +1114,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
+@@ -1215,7 +1215,7 @@ ip_vs_icmp_xmit(struct sk_buff *skb, struct ip_vs_conn *cp,
                else
                        rc = NF_ACCEPT;
                /* do not touch skb anymore */
                else
                        rc = NF_ACCEPT;
                /* do not touch skb anymore */
@@ -104704,7 +104231,7 @@ index 56896a4..dfe3806 100644
                goto out;
        }
  
                goto out;
        }
  
-@@ -1206,7 +1206,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
+@@ -1308,7 +1308,7 @@ ip_vs_icmp_xmit_v6(struct sk_buff *skb, struct ip_vs_conn *cp,
                else
                        rc = NF_ACCEPT;
                /* do not touch skb anymore */
                else
                        rc = NF_ACCEPT;
                /* do not touch skb anymore */
@@ -104727,7 +104254,7 @@ index a4b5e2a..13b1de3 100644
        table = kmemdup(acct_sysctl_table, sizeof(acct_sysctl_table),
                        GFP_KERNEL);
 diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
        table = kmemdup(acct_sysctl_table, sizeof(acct_sysctl_table),
                        GFP_KERNEL);
 diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
-index de88c4a..ec84234 100644
+index 5016a69..594f8e9 100644
 --- a/net/netfilter/nf_conntrack_core.c
 +++ b/net/netfilter/nf_conntrack_core.c
 @@ -1739,6 +1739,10 @@ void nf_conntrack_init_end(void)
 --- a/net/netfilter/nf_conntrack_core.c
 +++ b/net/netfilter/nf_conntrack_core.c
 @@ -1739,6 +1739,10 @@ void nf_conntrack_init_end(void)
@@ -104793,7 +104320,7 @@ index b65d586..beec902 100644
  {
        if (users > 0)
 diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
  {
        if (users > 0)
 diff --git a/net/netfilter/nf_conntrack_standalone.c b/net/netfilter/nf_conntrack_standalone.c
-index f641751..d3c5b51 100644
+index cf65a1e..2f291e9 100644
 --- a/net/netfilter/nf_conntrack_standalone.c
 +++ b/net/netfilter/nf_conntrack_standalone.c
 @@ -471,7 +471,7 @@ static struct ctl_table nf_ct_netfilter_table[] = {
 --- a/net/netfilter/nf_conntrack_standalone.c
 +++ b/net/netfilter/nf_conntrack_standalone.c
 @@ -471,7 +471,7 @@ static struct ctl_table nf_ct_netfilter_table[] = {
@@ -104819,7 +104346,7 @@ index 7a394df..bd91a8a 100644
        table = kmemdup(tstamp_sysctl_table, sizeof(tstamp_sysctl_table),
                        GFP_KERNEL);
 diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
        table = kmemdup(tstamp_sysctl_table, sizeof(tstamp_sysctl_table),
                        GFP_KERNEL);
 diff --git a/net/netfilter/nf_log.c b/net/netfilter/nf_log.c
-index daad602..384be13 100644
+index d719764..311bc60 100644
 --- a/net/netfilter/nf_log.c
 +++ b/net/netfilter/nf_log.c
 @@ -353,7 +353,7 @@ static const struct file_operations nflog_file_ops = {
 --- a/net/netfilter/nf_log.c
 +++ b/net/netfilter/nf_log.c
 @@ -353,7 +353,7 @@ static const struct file_operations nflog_file_ops = {
@@ -104874,7 +104401,7 @@ index c68c1e5..8b5d670 100644
  }
  EXPORT_SYMBOL(nf_unregister_sockopt);
 diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
  }
  EXPORT_SYMBOL(nf_unregister_sockopt);
 diff --git a/net/netfilter/nfnetlink_log.c b/net/netfilter/nfnetlink_log.c
-index 3250735..1fac969 100644
+index 5f1be5b..2cba8cd 100644
 --- a/net/netfilter/nfnetlink_log.c
 +++ b/net/netfilter/nfnetlink_log.c
 @@ -80,7 +80,7 @@ static int nfnl_log_net_id __read_mostly;
 --- a/net/netfilter/nfnetlink_log.c
 +++ b/net/netfilter/nfnetlink_log.c
 @@ -80,7 +80,7 @@ static int nfnl_log_net_id __read_mostly;
@@ -104895,41 +104422,6 @@ index 3250735..1fac969 100644
                goto nla_put_failure;
  
        if (data_len) {
                goto nla_put_failure;
  
        if (data_len) {
-diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c
-index 108120f..5b169db 100644
---- a/net/netfilter/nfnetlink_queue_core.c
-+++ b/net/netfilter/nfnetlink_queue_core.c
-@@ -665,7 +665,7 @@ nfqnl_enqueue_packet(struct nf_queue_entry *entry, unsigned int queuenum)
-        * returned by nf_queue.  For instance, callers rely on -ECANCELED to
-        * mean 'ignore this hook'.
-        */
--      if (IS_ERR(segs))
-+      if (IS_ERR_OR_NULL(segs))
-               goto out_err;
-       queued = 0;
-       err = 0;
-diff --git a/net/netfilter/nft_compat.c b/net/netfilter/nft_compat.c
-index 5b5ab9e..fc1015c 100644
---- a/net/netfilter/nft_compat.c
-+++ b/net/netfilter/nft_compat.c
-@@ -225,7 +225,7 @@ target_dump_info(struct sk_buff *skb, const struct xt_target *t, const void *in)
-               /* We want to reuse existing compat_to_user */
-               old_fs = get_fs();
-               set_fs(KERNEL_DS);
--              t->compat_to_user(out, in);
-+              t->compat_to_user((void __force_user *)out, in);
-               set_fs(old_fs);
-               ret = nla_put(skb, NFTA_TARGET_INFO, XT_ALIGN(t->targetsize), out);
-               kfree(out);
-@@ -421,7 +421,7 @@ match_dump_info(struct sk_buff *skb, const struct xt_match *m, const void *in)
-               /* We want to reuse existing compat_to_user */
-               old_fs = get_fs();
-               set_fs(KERNEL_DS);
--              m->compat_to_user(out, in);
-+              m->compat_to_user((void __force_user *)out, in);
-               set_fs(old_fs);
-               ret = nla_put(skb, NFTA_MATCH_INFO, XT_ALIGN(m->matchsize), out);
-               kfree(out);
 diff --git a/net/netfilter/xt_gradm.c b/net/netfilter/xt_gradm.c
 new file mode 100644
 index 0000000..c566332
 diff --git a/net/netfilter/xt_gradm.c b/net/netfilter/xt_gradm.c
 new file mode 100644
 index 0000000..c566332
@@ -104988,7 +104480,7 @@ index 0000000..c566332
 +MODULE_ALIAS("ipt_gradm");
 +MODULE_ALIAS("ip6t_gradm");
 diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
 +MODULE_ALIAS("ipt_gradm");
 +MODULE_ALIAS("ip6t_gradm");
 diff --git a/net/netfilter/xt_hashlimit.c b/net/netfilter/xt_hashlimit.c
-index 47dc683..2e0d52c 100644
+index 05fbc2a..4424b5c 100644
 --- a/net/netfilter/xt_hashlimit.c
 +++ b/net/netfilter/xt_hashlimit.c
 @@ -871,11 +871,11 @@ static int __net_init hashlimit_proc_net_init(struct net *net)
 --- a/net/netfilter/xt_hashlimit.c
 +++ b/net/netfilter/xt_hashlimit.c
 @@ -871,11 +871,11 @@ static int __net_init hashlimit_proc_net_init(struct net *net)
@@ -105053,7 +104545,7 @@ index 11de55e..f25e448 100644
        return 0;
  }
 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
        return 0;
  }
 diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
-index 0007b81..cb08369 100644
+index b6bf8e8..7884ddf 100644
 --- a/net/netlink/af_netlink.c
 +++ b/net/netlink/af_netlink.c
 @@ -273,7 +273,7 @@ static void netlink_overrun(struct sock *sk)
 --- a/net/netlink/af_netlink.c
 +++ b/net/netlink/af_netlink.c
 @@ -273,7 +273,7 @@ static void netlink_overrun(struct sock *sk)
@@ -105074,24 +104566,86 @@ index 0007b81..cb08369 100644
                           sock_i_ino(s)
                        );
  
                           sock_i_ino(s)
                        );
  
-diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
-index 64dc864..7a9e2a4 100644
---- a/net/openvswitch/datapath.c
-+++ b/net/openvswitch/datapath.c
-@@ -332,6 +332,8 @@ static int queue_gso_packets(struct datapath *dp, struct sk_buff *skb,
-       segs = __skb_gso_segment(skb, NETIF_F_SG, false);
-       if (IS_ERR(segs))
-               return PTR_ERR(segs);
-+      if (segs == NULL)
-+              return -EINVAL;
+diff --git a/net/openvswitch/vport-internal_dev.c b/net/openvswitch/vport-internal_dev.c
+index 8451612..c8872bc 100644
+--- a/net/openvswitch/vport-internal_dev.c
++++ b/net/openvswitch/vport-internal_dev.c
+@@ -122,7 +122,7 @@ static const struct net_device_ops internal_dev_netdev_ops = {
+       .ndo_get_stats64 = internal_dev_get_stats,
+ };
  
  
-       /* Queue all of the segments. */
-       skb = segs;
+-static struct rtnl_link_ops internal_dev_link_ops __read_mostly = {
++static struct rtnl_link_ops internal_dev_link_ops = {
+       .kind = "openvswitch",
+ };
+diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c
+index 6015802..e81e8bf 100644
+--- a/net/openvswitch/vport.c
++++ b/net/openvswitch/vport.c
+@@ -269,10 +269,10 @@ void ovs_vport_get_stats(struct vport *vport, struct ovs_vport_stats *stats)
+        * netdev-stats can be directly read over netlink-ioctl.
+        */
+-      stats->rx_errors  = atomic_long_read(&vport->err_stats.rx_errors);
+-      stats->tx_errors  = atomic_long_read(&vport->err_stats.tx_errors);
+-      stats->tx_dropped = atomic_long_read(&vport->err_stats.tx_dropped);
+-      stats->rx_dropped = atomic_long_read(&vport->err_stats.rx_dropped);
++      stats->rx_errors  = atomic_long_read_unchecked(&vport->err_stats.rx_errors);
++      stats->tx_errors  = atomic_long_read_unchecked(&vport->err_stats.tx_errors);
++      stats->tx_dropped = atomic_long_read_unchecked(&vport->err_stats.tx_dropped);
++      stats->rx_dropped = atomic_long_read_unchecked(&vport->err_stats.rx_dropped);
+       for_each_possible_cpu(i) {
+               const struct pcpu_sw_netstats *percpu_stats;
+@@ -503,19 +503,19 @@ static void ovs_vport_record_error(struct vport *vport,
+ {
+       switch (err_type) {
+       case VPORT_E_RX_DROPPED:
+-              atomic_long_inc(&vport->err_stats.rx_dropped);
++              atomic_long_inc_unchecked(&vport->err_stats.rx_dropped);
+               break;
+       case VPORT_E_RX_ERROR:
+-              atomic_long_inc(&vport->err_stats.rx_errors);
++              atomic_long_inc_unchecked(&vport->err_stats.rx_errors);
+               break;
+       case VPORT_E_TX_DROPPED:
+-              atomic_long_inc(&vport->err_stats.tx_dropped);
++              atomic_long_inc_unchecked(&vport->err_stats.tx_dropped);
+               break;
+       case VPORT_E_TX_ERROR:
+-              atomic_long_inc(&vport->err_stats.tx_errors);
++              atomic_long_inc_unchecked(&vport->err_stats.tx_errors);
+               break;
+       }
+diff --git a/net/openvswitch/vport.h b/net/openvswitch/vport.h
+index 8942125..03ed887 100644
+--- a/net/openvswitch/vport.h
++++ b/net/openvswitch/vport.h
+@@ -61,10 +61,10 @@ int ovs_vport_send(struct vport *, struct sk_buff *);
+ /* The following definitions are for implementers of vport devices: */
+ struct vport_err_stats {
+-      atomic_long_t rx_dropped;
+-      atomic_long_t rx_errors;
+-      atomic_long_t tx_dropped;
+-      atomic_long_t tx_errors;
++      atomic_long_unchecked_t rx_dropped;
++      atomic_long_unchecked_t rx_errors;
++      atomic_long_unchecked_t tx_dropped;
++      atomic_long_unchecked_t tx_errors;
+ };
+ /**
+  * struct vport_portids - array of netlink portids of a vport.
 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
 diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
-index 93896d2..b701c88 100644
+index 07c04a8..3ca11eb 100644
 --- a/net/packet/af_packet.c
 +++ b/net/packet/af_packet.c
 --- a/net/packet/af_packet.c
 +++ b/net/packet/af_packet.c
-@@ -275,7 +275,7 @@ static int packet_direct_xmit(struct sk_buff *skb)
+@@ -269,7 +269,7 @@ static int packet_direct_xmit(struct sk_buff *skb)
  
        return ret;
  drop:
  
        return ret;
  drop:
@@ -105100,7 +104654,7 @@ index 93896d2..b701c88 100644
        kfree_skb(skb);
        return NET_XMIT_DROP;
  }
        kfree_skb(skb);
        return NET_XMIT_DROP;
  }
-@@ -1842,7 +1842,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
+@@ -1836,7 +1836,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
  
        spin_lock(&sk->sk_receive_queue.lock);
        po->stats.stats1.tp_packets++;
  
        spin_lock(&sk->sk_receive_queue.lock);
        po->stats.stats1.tp_packets++;
@@ -105109,7 +104663,7 @@ index 93896d2..b701c88 100644
        __skb_queue_tail(&sk->sk_receive_queue, skb);
        spin_unlock(&sk->sk_receive_queue.lock);
        sk->sk_data_ready(sk);
        __skb_queue_tail(&sk->sk_receive_queue, skb);
        spin_unlock(&sk->sk_receive_queue.lock);
        sk->sk_data_ready(sk);
-@@ -1851,7 +1851,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
+@@ -1845,7 +1845,7 @@ static int packet_rcv(struct sk_buff *skb, struct net_device *dev,
  drop_n_acct:
        spin_lock(&sk->sk_receive_queue.lock);
        po->stats.stats1.tp_drops++;
  drop_n_acct:
        spin_lock(&sk->sk_receive_queue.lock);
        po->stats.stats1.tp_drops++;
@@ -105118,7 +104672,7 @@ index 93896d2..b701c88 100644
        spin_unlock(&sk->sk_receive_queue.lock);
  
  drop_n_restore:
        spin_unlock(&sk->sk_receive_queue.lock);
  
  drop_n_restore:
-@@ -3466,7 +3466,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3460,7 +3460,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
        case PACKET_HDRLEN:
                if (len > sizeof(int))
                        len = sizeof(int);
        case PACKET_HDRLEN:
                if (len > sizeof(int))
                        len = sizeof(int);
@@ -105127,7 +104681,7 @@ index 93896d2..b701c88 100644
                        return -EFAULT;
                switch (val) {
                case TPACKET_V1:
                        return -EFAULT;
                switch (val) {
                case TPACKET_V1:
-@@ -3512,7 +3512,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
+@@ -3506,7 +3506,7 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
                len = lv;
        if (put_user(len, optlen))
                return -EFAULT;
                len = lv;
        if (put_user(len, optlen))
                return -EFAULT;
@@ -105320,42 +104874,6 @@ index aa8bf67..b70133c 100644
  }
  #endif
  
  }
  #endif
  
-diff --git a/net/rds/rdma.c b/net/rds/rdma.c
-index 4e37c1c..40084d8 100644
---- a/net/rds/rdma.c
-+++ b/net/rds/rdma.c
-@@ -564,12 +564,12 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
-       if (rs->rs_bound_addr == 0) {
-               ret = -ENOTCONN; /* XXX not a great errno */
--              goto out;
-+              goto out_ret;
-       }
-       if (args->nr_local > UIO_MAXIOV) {
-               ret = -EMSGSIZE;
--              goto out;
-+              goto out_ret;
-       }
-       /* Check whether to allocate the iovec area */
-@@ -578,7 +578,7 @@ int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
-               iovs = sock_kmalloc(rds_rs_to_sk(rs), iov_size, GFP_KERNEL);
-               if (!iovs) {
-                       ret = -ENOMEM;
--                      goto out;
-+                      goto out_ret;
-               }
-       }
-@@ -696,6 +696,7 @@ out:
-       if (iovs != iovstack)
-               sock_kfree_s(rds_rs_to_sk(rs), iovs, iov_size);
-       kfree(pages);
-+out_ret:
-       if (ret)
-               rds_rdma_free_op(op);
-       else
 diff --git a/net/rds/rds.h b/net/rds/rds.h
 index 48f8ffc..0ef3eec 100644
 --- a/net/rds/rds.h
 diff --git a/net/rds/rds.h b/net/rds/rds.h
 index 48f8ffc..0ef3eec 100644
 --- a/net/rds/rds.h
@@ -105369,43 +104887,6 @@ index 48f8ffc..0ef3eec 100644
  
  struct rds_sock {
        struct sock             rs_sk;
  
  struct rds_sock {
        struct sock             rs_sk;
-diff --git a/net/rds/send.c b/net/rds/send.c
-index 2371816..0a64541 100644
---- a/net/rds/send.c
-+++ b/net/rds/send.c
-@@ -593,8 +593,11 @@ static void rds_send_remove_from_sock(struct list_head *messages, int status)
-                               sock_put(rds_rs_to_sk(rs));
-                       }
-                       rs = rm->m_rs;
--                      sock_hold(rds_rs_to_sk(rs));
-+                      if (rs)
-+                              sock_hold(rds_rs_to_sk(rs));
-               }
-+              if (!rs)
-+                      goto unlock_and_drop;
-               spin_lock(&rs->rs_lock);
-               if (test_and_clear_bit(RDS_MSG_ON_SOCK, &rm->m_flags)) {
-@@ -638,9 +641,6 @@ unlock_and_drop:
-  * queue. This means that in the TCP case, the message may not have been
-  * assigned the m_ack_seq yet - but that's fine as long as tcp_is_acked
-  * checks the RDS_MSG_HAS_ACK_SEQ bit.
-- *
-- * XXX It's not clear to me how this is safely serialized with socket
-- * destruction.  Maybe it should bail if it sees SOCK_DEAD.
-  */
- void rds_send_drop_acked(struct rds_connection *conn, u64 ack,
-                        is_acked_func is_acked)
-@@ -711,6 +711,9 @@ void rds_send_drop_to(struct rds_sock *rs, struct sockaddr_in *dest)
-                */
-               if (!test_and_clear_bit(RDS_MSG_ON_CONN, &rm->m_flags)) {
-                       spin_unlock_irqrestore(&conn->c_lock, flags);
-+                      spin_lock_irqsave(&rm->m_rs_lock, flags);
-+                      rm->m_rs = NULL;
-+                      spin_unlock_irqrestore(&rm->m_rs_lock, flags);
-                       continue;
-               }
-               list_del_init(&rm->m_conn_item);
 diff --git a/net/rds/tcp.c b/net/rds/tcp.c
 index edac9ef..16bcb98 100644
 --- a/net/rds/tcp.c
 diff --git a/net/rds/tcp.c b/net/rds/tcp.c
 index edac9ef..16bcb98 100644
 --- a/net/rds/tcp.c
@@ -105552,10 +105033,10 @@ index e7ed43a..6afa140 100644
  
        ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len);
 diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c
  
        ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 2, len);
 diff --git a/net/rxrpc/ar-input.c b/net/rxrpc/ar-input.c
-index 63b21e5..330232e 100644
+index 481f89f..ceeaf8d 100644
 --- a/net/rxrpc/ar-input.c
 +++ b/net/rxrpc/ar-input.c
 --- a/net/rxrpc/ar-input.c
 +++ b/net/rxrpc/ar-input.c
-@@ -338,9 +338,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb)
+@@ -331,9 +331,9 @@ void rxrpc_fast_process_packet(struct rxrpc_call *call, struct sk_buff *skb)
        /* track the latest serial number on this connection for ACK packet
         * information */
        serial = ntohl(sp->hdr.serial);
        /* track the latest serial number on this connection for ACK packet
         * information */
        serial = ntohl(sp->hdr.serial);
@@ -105698,10 +105179,10 @@ index f226709..0e735a8 100644
  
        ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 3, len);
 diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
  
        ret = kernel_sendmsg(conn->trans->local->socket, &msg, iov, 3, len);
 diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
-index fc04fe9..8167357 100644
+index 6efca30..1259f82 100644
 --- a/net/sched/sch_generic.c
 +++ b/net/sched/sch_generic.c
 --- a/net/sched/sch_generic.c
 +++ b/net/sched/sch_generic.c
-@@ -310,7 +310,7 @@ void netif_carrier_on(struct net_device *dev)
+@@ -349,7 +349,7 @@ void netif_carrier_on(struct net_device *dev)
        if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
                if (dev->reg_state == NETREG_UNINITIALIZED)
                        return;
        if (test_and_clear_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
                if (dev->reg_state == NETREG_UNINITIALIZED)
                        return;
@@ -105710,7 +105191,7 @@ index fc04fe9..8167357 100644
                linkwatch_fire_event(dev);
                if (netif_running(dev))
                        __netdev_watchdog_up(dev);
                linkwatch_fire_event(dev);
                if (netif_running(dev))
                        __netdev_watchdog_up(dev);
-@@ -329,7 +329,7 @@ void netif_carrier_off(struct net_device *dev)
+@@ -368,7 +368,7 @@ void netif_carrier_off(struct net_device *dev)
        if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
                if (dev->reg_state == NETREG_UNINITIALIZED)
                        return;
        if (!test_and_set_bit(__LINK_STATE_NOCARRIER, &dev->state)) {
                if (dev->reg_state == NETREG_UNINITIALIZED)
                        return;
@@ -105751,7 +105232,7 @@ index 0e4198e..f94193e 100644
  
  /* Initialize IPv6 support and register with socket layer.  */
 diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
  
  /* Initialize IPv6 support and register with socket layer.  */
 diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c
-index 6240834..cac4b52 100644
+index 8f34b27..b105385 100644
 --- a/net/sctp/protocol.c
 +++ b/net/sctp/protocol.c
 @@ -836,8 +836,10 @@ int sctp_register_af(struct sctp_af *af)
 --- a/net/sctp/protocol.c
 +++ b/net/sctp/protocol.c
 @@ -836,8 +836,10 @@ int sctp_register_af(struct sctp_af *af)
@@ -105938,7 +105419,7 @@ index 2e9ada1..40f425d 100644
  
        table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL);
 diff --git a/net/socket.c b/net/socket.c
  
        table = kmemdup(sctp_net_table, sizeof(sctp_net_table), GFP_KERNEL);
 diff --git a/net/socket.c b/net/socket.c
-index 4cdbc10..f075204 100644
+index fe20c31..83a0ed6 100644
 --- a/net/socket.c
 +++ b/net/socket.c
 @@ -89,6 +89,7 @@
 --- a/net/socket.c
 +++ b/net/socket.c
 @@ -89,6 +89,7 @@
@@ -105976,7 +105457,7 @@ index 4cdbc10..f075204 100644
  
  static struct file_system_type sock_fs_type = {
        .name =         "sockfs",
  
  static struct file_system_type sock_fs_type = {
        .name =         "sockfs",
-@@ -1265,6 +1268,8 @@ int __sock_create(struct net *net, int family, int type, int protocol,
+@@ -1263,6 +1266,8 @@ int __sock_create(struct net *net, int family, int type, int protocol,
                return -EAFNOSUPPORT;
        if (type < 0 || type >= SOCK_MAX)
                return -EINVAL;
                return -EAFNOSUPPORT;
        if (type < 0 || type >= SOCK_MAX)
                return -EINVAL;
@@ -105985,7 +105466,7 @@ index 4cdbc10..f075204 100644
  
        /* Compatibility.
  
  
        /* Compatibility.
  
-@@ -1285,6 +1290,20 @@ int __sock_create(struct net *net, int family, int type, int protocol,
+@@ -1283,6 +1288,20 @@ int __sock_create(struct net *net, int family, int type, int protocol,
        if (err)
                return err;
  
        if (err)
                return err;
  
@@ -106006,7 +105487,7 @@ index 4cdbc10..f075204 100644
        /*
         *      Allocate the socket and allow the family to set things up. if
         *      the protocol is 0, the family is instructed to select an appropriate
        /*
         *      Allocate the socket and allow the family to set things up. if
         *      the protocol is 0, the family is instructed to select an appropriate
-@@ -1536,6 +1555,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+@@ -1534,6 +1553,14 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
        if (sock) {
                err = move_addr_to_kernel(umyaddr, addrlen, &address);
                if (err >= 0) {
        if (sock) {
                err = move_addr_to_kernel(umyaddr, addrlen, &address);
                if (err >= 0) {
@@ -106021,7 +105502,7 @@ index 4cdbc10..f075204 100644
                        err = security_socket_bind(sock,
                                                   (struct sockaddr *)&address,
                                                   addrlen);
                        err = security_socket_bind(sock,
                                                   (struct sockaddr *)&address,
                                                   addrlen);
-@@ -1544,6 +1571,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
+@@ -1542,6 +1569,7 @@ SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen)
                                                      (struct sockaddr *)
                                                      &address, addrlen);
                }
                                                      (struct sockaddr *)
                                                      &address, addrlen);
                }
@@ -106029,7 +105510,7 @@ index 4cdbc10..f075204 100644
                fput_light(sock->file, fput_needed);
        }
        return err;
                fput_light(sock->file, fput_needed);
        }
        return err;
-@@ -1567,10 +1595,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
+@@ -1565,10 +1593,20 @@ SYSCALL_DEFINE2(listen, int, fd, int, backlog)
                if ((unsigned int)backlog > somaxconn)
                        backlog = somaxconn;
  
                if ((unsigned int)backlog > somaxconn)
                        backlog = somaxconn;
  
@@ -106050,7 +105531,7 @@ index 4cdbc10..f075204 100644
                fput_light(sock->file, fput_needed);
        }
        return err;
                fput_light(sock->file, fput_needed);
        }
        return err;
-@@ -1614,6 +1652,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
+@@ -1612,6 +1650,18 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
        newsock->type = sock->type;
        newsock->ops = sock->ops;
  
        newsock->type = sock->type;
        newsock->ops = sock->ops;
  
@@ -106069,7 +105550,7 @@ index 4cdbc10..f075204 100644
        /*
         * We don't need try_module_get here, as the listening socket (sock)
         * has the protocol module (sock->ops->owner) held.
        /*
         * We don't need try_module_get here, as the listening socket (sock)
         * has the protocol module (sock->ops->owner) held.
-@@ -1659,6 +1709,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
+@@ -1657,6 +1707,8 @@ SYSCALL_DEFINE4(accept4, int, fd, struct sockaddr __user *, upeer_sockaddr,
        fd_install(newfd, newfile);
        err = newfd;
  
        fd_install(newfd, newfile);
        err = newfd;
  
@@ -106078,7 +105559,7 @@ index 4cdbc10..f075204 100644
  out_put:
        fput_light(sock->file, fput_needed);
  out:
  out_put:
        fput_light(sock->file, fput_needed);
  out:
-@@ -1691,6 +1743,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
+@@ -1689,6 +1741,7 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
                int, addrlen)
  {
        struct socket *sock;
                int, addrlen)
  {
        struct socket *sock;
@@ -106086,7 +105567,7 @@ index 4cdbc10..f075204 100644
        struct sockaddr_storage address;
        int err, fput_needed;
  
        struct sockaddr_storage address;
        int err, fput_needed;
  
-@@ -1701,6 +1754,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
+@@ -1699,6 +1752,17 @@ SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr,
        if (err < 0)
                goto out_put;
  
        if (err < 0)
                goto out_put;
  
@@ -106104,7 +105585,7 @@ index 4cdbc10..f075204 100644
        err =
            security_socket_connect(sock, (struct sockaddr *)&address, addrlen);
        if (err)
        err =
            security_socket_connect(sock, (struct sockaddr *)&address, addrlen);
        if (err)
-@@ -1782,6 +1846,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
+@@ -1780,6 +1844,8 @@ SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr,
   *    the protocol.
   */
  
   *    the protocol.
   */
  
@@ -106113,7 +105594,7 @@ index 4cdbc10..f075204 100644
  SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
                unsigned int, flags, struct sockaddr __user *, addr,
                int, addr_len)
  SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
                unsigned int, flags, struct sockaddr __user *, addr,
                int, addr_len)
-@@ -1848,7 +1914,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
+@@ -1846,7 +1912,7 @@ SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size,
        struct socket *sock;
        struct iovec iov;
        struct msghdr msg;
        struct socket *sock;
        struct iovec iov;
        struct msghdr msg;
@@ -106122,7 +105603,7 @@ index 4cdbc10..f075204 100644
        int err, err2;
        int fput_needed;
  
        int err, err2;
        int fput_needed;
  
-@@ -2077,7 +2143,7 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
+@@ -2075,7 +2141,7 @@ static int ___sys_sendmsg(struct socket *sock, struct msghdr __user *msg,
                 * checking falls down on this.
                 */
                if (copy_from_user(ctl_buf,
                 * checking falls down on this.
                 */
                if (copy_from_user(ctl_buf,
@@ -106131,7 +105612,7 @@ index 4cdbc10..f075204 100644
                                   ctl_len))
                        goto out_freectl;
                msg_sys->msg_control = ctl_buf;
                                   ctl_len))
                        goto out_freectl;
                msg_sys->msg_control = ctl_buf;
-@@ -2228,7 +2294,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
+@@ -2226,7 +2292,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
        int err, total_len, len;
  
        /* kernel mode address */
        int err, total_len, len;
  
        /* kernel mode address */
@@ -106140,7 +105621,7 @@ index 4cdbc10..f075204 100644
  
        /* user mode address pointers */
        struct sockaddr __user *uaddr;
  
        /* user mode address pointers */
        struct sockaddr __user *uaddr;
-@@ -2257,7 +2323,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
+@@ -2255,7 +2321,7 @@ static int ___sys_recvmsg(struct socket *sock, struct msghdr __user *msg,
        /* Save the user-mode address (verify_iovec will change the
         * kernel msghdr to use the kernel address space)
         */
        /* Save the user-mode address (verify_iovec will change the
         * kernel msghdr to use the kernel address space)
         */
@@ -106149,7 +105630,7 @@ index 4cdbc10..f075204 100644
        uaddr_len = COMPAT_NAMELEN(msg);
        if (MSG_CMSG_COMPAT & flags)
                err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
        uaddr_len = COMPAT_NAMELEN(msg);
        if (MSG_CMSG_COMPAT & flags)
                err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE);
-@@ -2898,7 +2964,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
+@@ -2896,7 +2962,7 @@ static int ethtool_ioctl(struct net *net, struct compat_ifreq __user *ifr32)
        ifr = compat_alloc_user_space(buf_size);
        rxnfc = (void __user *)ifr + ALIGN(sizeof(struct ifreq), 8);
  
        ifr = compat_alloc_user_space(buf_size);
        rxnfc = (void __user *)ifr + ALIGN(sizeof(struct ifreq), 8);
  
@@ -106158,7 +105639,7 @@ index 4cdbc10..f075204 100644
                return -EFAULT;
  
        if (put_user(convert_in ? rxnfc : compat_ptr(data),
                return -EFAULT;
  
        if (put_user(convert_in ? rxnfc : compat_ptr(data),
-@@ -3009,7 +3075,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,
+@@ -3007,7 +3073,7 @@ static int bond_ioctl(struct net *net, unsigned int cmd,
                old_fs = get_fs();
                set_fs(KERNEL_DS);
                err = dev_ioctl(net, cmd,
                old_fs = get_fs();
                set_fs(KERNEL_DS);
                err = dev_ioctl(net, cmd,
@@ -106167,7 +105648,7 @@ index 4cdbc10..f075204 100644
                set_fs(old_fs);
  
                return err;
                set_fs(old_fs);
  
                return err;
-@@ -3102,7 +3168,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,
+@@ -3100,7 +3166,7 @@ static int compat_sioc_ifmap(struct net *net, unsigned int cmd,
  
        old_fs = get_fs();
        set_fs(KERNEL_DS);
  
        old_fs = get_fs();
        set_fs(KERNEL_DS);
@@ -106176,7 +105657,7 @@ index 4cdbc10..f075204 100644
        set_fs(old_fs);
  
        if (cmd == SIOCGIFMAP && !err) {
        set_fs(old_fs);
  
        if (cmd == SIOCGIFMAP && !err) {
-@@ -3186,7 +3252,7 @@ static int routing_ioctl(struct net *net, struct socket *sock,
+@@ -3184,7 +3250,7 @@ static int routing_ioctl(struct net *net, struct socket *sock,
                ret |= get_user(rtdev, &(ur4->rt_dev));
                if (rtdev) {
                        ret |= copy_from_user(devname, compat_ptr(rtdev), 15);
                ret |= get_user(rtdev, &(ur4->rt_dev));
                if (rtdev) {
                        ret |= copy_from_user(devname, compat_ptr(rtdev), 15);
@@ -106185,7 +105666,7 @@ index 4cdbc10..f075204 100644
                        devname[15] = 0;
                } else
                        r4.rt_dev = NULL;
                        devname[15] = 0;
                } else
                        r4.rt_dev = NULL;
-@@ -3413,8 +3479,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
+@@ -3411,8 +3477,8 @@ int kernel_getsockopt(struct socket *sock, int level, int optname,
        int __user *uoptlen;
        int err;
  
        int __user *uoptlen;
        int err;
  
@@ -106196,7 +105677,7 @@ index 4cdbc10..f075204 100644
  
        set_fs(KERNEL_DS);
        if (level == SOL_SOCKET)
  
        set_fs(KERNEL_DS);
        if (level == SOL_SOCKET)
-@@ -3434,7 +3500,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
+@@ -3432,7 +3498,7 @@ int kernel_setsockopt(struct socket *sock, int level, int optname,
        char __user *uoptval;
        int err;
  
        char __user *uoptval;
        int err;
  
@@ -106241,7 +105722,7 @@ index 0663621..c4928d4 100644
                goto out_nomem;
        cd->u.procfs.channel_ent = NULL;
 diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
                goto out_nomem;
        cd->u.procfs.channel_ent = NULL;
 diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c
-index e0b94ce..6135813 100644
+index 9acd6ce..4353a72 100644
 --- a/net/sunrpc/clnt.c
 +++ b/net/sunrpc/clnt.c
 @@ -1428,7 +1428,9 @@ call_start(struct rpc_task *task)
 --- a/net/sunrpc/clnt.c
 +++ b/net/sunrpc/clnt.c
 @@ -1428,7 +1428,9 @@ call_start(struct rpc_task *task)
@@ -106256,7 +105737,7 @@ index e0b94ce..6135813 100644
        task->tk_action = call_reserve;
  }
 diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
        task->tk_action = call_reserve;
  }
 diff --git a/net/sunrpc/sched.c b/net/sunrpc/sched.c
-index 9358c79..22d0a5b 100644
+index fe3441a..922c29e 100644
 --- a/net/sunrpc/sched.c
 +++ b/net/sunrpc/sched.c
 @@ -261,9 +261,9 @@ static int rpc_wait_bit_killable(struct wait_bit_key *key)
 --- a/net/sunrpc/sched.c
 +++ b/net/sunrpc/sched.c
 @@ -261,9 +261,9 @@ static int rpc_wait_bit_killable(struct wait_bit_key *key)
@@ -106285,10 +105766,10 @@ index 5453049..465669a 100644
                return -ENOMEM;
  
 diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
                return -ENOMEM;
  
 diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
-index 1db5007..6e66296 100644
+index ca8a795..ddfc41b 100644
 --- a/net/sunrpc/svc.c
 +++ b/net/sunrpc/svc.c
 --- a/net/sunrpc/svc.c
 +++ b/net/sunrpc/svc.c
-@@ -1167,7 +1167,9 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
+@@ -1165,7 +1165,9 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
        svc_putnl(resv, RPC_SUCCESS);
  
        /* Bump per-procedure stats counter */
        svc_putnl(resv, RPC_SUCCESS);
  
        /* Bump per-procedure stats counter */
@@ -106486,7 +105967,7 @@ index 9f1b506..2e0b321 100644
                goto err;
        return write_len - bc;
 diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
                goto err;
        return write_len - bc;
 diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
-index 374feb4..46487d5 100644
+index 4e61880..1f0d963 100644
 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
 +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
 @@ -295,7 +295,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
 --- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
 +++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
 @@ -295,7 +295,7 @@ static void rq_cq_reap(struct svcxprt_rdma *xprt)
@@ -106548,10 +106029,10 @@ index e7000be..e3b0ba7 100644
                int mode = (table->mode >> 6) & 7;
                return (mode << 6) | (mode << 3) | mode;
 diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
                int mode = (table->mode >> 6) & 7;
                return (mode << 6) | (mode << 3) | mode;
 diff --git a/net/tipc/subscr.c b/net/tipc/subscr.c
-index 6424372..afd36e9 100644
+index 31b5cb2..566ff01 100644
 --- a/net/tipc/subscr.c
 +++ b/net/tipc/subscr.c
 --- a/net/tipc/subscr.c
 +++ b/net/tipc/subscr.c
-@@ -97,7 +97,7 @@ static void subscr_send_event(struct tipc_subscription *sub, u32 found_lower,
+@@ -96,7 +96,7 @@ static void subscr_send_event(struct tipc_subscription *sub, u32 found_lower,
        struct tipc_subscriber *subscriber = sub->subscriber;
        struct kvec msg_sect;
  
        struct tipc_subscriber *subscriber = sub->subscriber;
        struct kvec msg_sect;
  
@@ -106792,21 +106273,8 @@ index 0917f04..f4e3d8c 100644
                return -ENOMEM;
  
        if (!proc_create("x25/route", S_IRUGO, init_net.proc_net,
                return -ENOMEM;
  
        if (!proc_create("x25/route", S_IRUGO, init_net.proc_net,
-diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
-index c51e8f7b..e44f360 100644
---- a/net/xfrm/xfrm_output.c
-+++ b/net/xfrm/xfrm_output.c
-@@ -157,6 +157,8 @@ static int xfrm_output_gso(struct sk_buff *skb)
-       kfree_skb(skb);
-       if (IS_ERR(segs))
-               return PTR_ERR(segs);
-+      if (segs == NULL)
-+              return -EINVAL;
-       do {
-               struct sk_buff *nskb = segs->next;
 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
 diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
-index fdde51f..4839450 100644
+index 88bf289..7b0741b 100644
 --- a/net/xfrm/xfrm_policy.c
 +++ b/net/xfrm/xfrm_policy.c
 @@ -330,7 +330,7 @@ static void xfrm_policy_kill(struct xfrm_policy *policy)
 --- a/net/xfrm/xfrm_policy.c
 +++ b/net/xfrm/xfrm_policy.c
 @@ -330,7 +330,7 @@ static void xfrm_policy_kill(struct xfrm_policy *policy)
@@ -106818,7 +106286,7 @@ index fdde51f..4839450 100644
  
        if (del_timer(&policy->polq.hold_timer))
                xfrm_pol_put(policy);
  
        if (del_timer(&policy->polq.hold_timer))
                xfrm_pol_put(policy);
-@@ -664,7 +664,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl)
+@@ -781,7 +781,7 @@ int xfrm_policy_insert(int dir, struct xfrm_policy *policy, int excl)
                hlist_add_head(&policy->bydst, chain);
        xfrm_pol_hold(policy);
        net->xfrm.policy_count[dir]++;
                hlist_add_head(&policy->bydst, chain);
        xfrm_pol_hold(policy);
        net->xfrm.policy_count[dir]++;
@@ -106827,7 +106295,7 @@ index fdde51f..4839450 100644
  
        /* After previous checking, family can either be AF_INET or AF_INET6 */
        if (policy->family == AF_INET)
  
        /* After previous checking, family can either be AF_INET or AF_INET6 */
        if (policy->family == AF_INET)
-@@ -1754,7 +1754,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
+@@ -1871,7 +1871,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
  
        xdst->num_pols = num_pols;
        memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols);
  
        xdst->num_pols = num_pols;
        memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols);
@@ -106836,7 +106304,7 @@ index fdde51f..4839450 100644
  
        return xdst;
  }
  
        return xdst;
  }
-@@ -2570,10 +2570,11 @@ void xfrm_garbage_collect(struct net *net)
+@@ -2685,10 +2685,11 @@ void xfrm_garbage_collect(struct net *net)
  }
  EXPORT_SYMBOL(xfrm_garbage_collect);
  
  }
  EXPORT_SYMBOL(xfrm_garbage_collect);
  
@@ -106849,7 +106317,7 @@ index fdde51f..4839450 100644
  
  static void xfrm_init_pmtu(struct dst_entry *dst)
  {
  
  static void xfrm_init_pmtu(struct dst_entry *dst)
  {
-@@ -2623,7 +2624,7 @@ static int xfrm_bundle_ok(struct xfrm_dst *first)
+@@ -2738,7 +2739,7 @@ static int xfrm_bundle_ok(struct xfrm_dst *first)
                if (xdst->xfrm_genid != dst->xfrm->genid)
                        return 0;
                if (xdst->num_pols > 0 &&
                if (xdst->xfrm_genid != dst->xfrm->genid)
                        return 0;
                if (xdst->num_pols > 0 &&
@@ -106858,7 +106326,7 @@ index fdde51f..4839450 100644
                        return 0;
  
                mtu = dst_mtu(dst->child);
                        return 0;
  
                mtu = dst_mtu(dst->child);
-@@ -2711,8 +2712,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)
+@@ -2826,8 +2827,6 @@ int xfrm_policy_register_afinfo(struct xfrm_policy_afinfo *afinfo)
                        dst_ops->link_failure = xfrm_link_failure;
                if (likely(dst_ops->neigh_lookup == NULL))
                        dst_ops->neigh_lookup = xfrm_neigh_lookup;
                        dst_ops->link_failure = xfrm_link_failure;
                if (likely(dst_ops->neigh_lookup == NULL))
                        dst_ops->neigh_lookup = xfrm_neigh_lookup;
@@ -106867,7 +106335,7 @@ index fdde51f..4839450 100644
                rcu_assign_pointer(xfrm_policy_afinfo[afinfo->family], afinfo);
        }
        spin_unlock(&xfrm_policy_afinfo_lock);
                rcu_assign_pointer(xfrm_policy_afinfo[afinfo->family], afinfo);
        }
        spin_unlock(&xfrm_policy_afinfo_lock);
-@@ -2766,7 +2765,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
+@@ -2881,7 +2880,6 @@ int xfrm_policy_unregister_afinfo(struct xfrm_policy_afinfo *afinfo)
                dst_ops->check = NULL;
                dst_ops->negative_advice = NULL;
                dst_ops->link_failure = NULL;
                dst_ops->check = NULL;
                dst_ops->negative_advice = NULL;
                dst_ops->link_failure = NULL;
@@ -106875,7 +106343,7 @@ index fdde51f..4839450 100644
        }
        return err;
  }
        }
        return err;
  }
-@@ -3151,7 +3149,7 @@ static int xfrm_policy_migrate(struct xfrm_policy *pol,
+@@ -3277,7 +3275,7 @@ static int xfrm_policy_migrate(struct xfrm_policy *pol,
                               sizeof(pol->xfrm_vec[i].saddr));
                        pol->xfrm_vec[i].encap_family = mp->new_family;
                        /* flush bundles */
                               sizeof(pol->xfrm_vec[i].saddr));
                        pol->xfrm_vec[i].encap_family = mp->new_family;
                        /* flush bundles */
@@ -106885,10 +106353,10 @@ index fdde51f..4839450 100644
        }
  
 diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
        }
  
 diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
-index 0ab5413..73dd2cf 100644
+index de971b6..b843409 100644
 --- a/net/xfrm/xfrm_state.c
 +++ b/net/xfrm/xfrm_state.c
 --- a/net/xfrm/xfrm_state.c
 +++ b/net/xfrm/xfrm_state.c
-@@ -173,12 +173,14 @@ int xfrm_register_type(const struct xfrm_type *type, unsigned short family)
+@@ -166,12 +166,14 @@ int xfrm_register_type(const struct xfrm_type *type, unsigned short family)
  
        if (unlikely(afinfo == NULL))
                return -EAFNOSUPPORT;
  
        if (unlikely(afinfo == NULL))
                return -EAFNOSUPPORT;
@@ -106906,7 +106374,7 @@ index 0ab5413..73dd2cf 100644
                err = -EEXIST;
        spin_unlock_bh(&xfrm_type_lock);
        xfrm_state_put_afinfo(afinfo);
                err = -EEXIST;
        spin_unlock_bh(&xfrm_type_lock);
        xfrm_state_put_afinfo(afinfo);
-@@ -194,13 +196,16 @@ int xfrm_unregister_type(const struct xfrm_type *type, unsigned short family)
+@@ -187,13 +189,16 @@ int xfrm_unregister_type(const struct xfrm_type *type, unsigned short family)
  
        if (unlikely(afinfo == NULL))
                return -EAFNOSUPPORT;
  
        if (unlikely(afinfo == NULL))
                return -EAFNOSUPPORT;
@@ -106925,7 +106393,7 @@ index 0ab5413..73dd2cf 100644
        spin_unlock_bh(&xfrm_type_lock);
        xfrm_state_put_afinfo(afinfo);
        return err;
        spin_unlock_bh(&xfrm_type_lock);
        xfrm_state_put_afinfo(afinfo);
        return err;
-@@ -210,7 +215,6 @@ EXPORT_SYMBOL(xfrm_unregister_type);
+@@ -203,7 +208,6 @@ EXPORT_SYMBOL(xfrm_unregister_type);
  static const struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family)
  {
        struct xfrm_state_afinfo *afinfo;
  static const struct xfrm_type *xfrm_get_type(u8 proto, unsigned short family)
  {
        struct xfrm_state_afinfo *afinfo;
@@ -106933,7 +106401,7 @@ index 0ab5413..73dd2cf 100644
        const struct xfrm_type *type;
        int modload_attempted = 0;
  
        const struct xfrm_type *type;
        int modload_attempted = 0;
  
-@@ -218,9 +222,8 @@ retry:
+@@ -211,9 +215,8 @@ retry:
        afinfo = xfrm_state_get_afinfo(family);
        if (unlikely(afinfo == NULL))
                return NULL;
        afinfo = xfrm_state_get_afinfo(family);
        if (unlikely(afinfo == NULL))
                return NULL;
@@ -106944,7 +106412,7 @@ index 0ab5413..73dd2cf 100644
        if (unlikely(type && !try_module_get(type->owner)))
                type = NULL;
        if (!type && !modload_attempted) {
        if (unlikely(type && !try_module_get(type->owner)))
                type = NULL;
        if (!type && !modload_attempted) {
-@@ -254,7 +257,7 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family)
+@@ -247,7 +250,7 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family)
                return -EAFNOSUPPORT;
  
        err = -EEXIST;
                return -EAFNOSUPPORT;
  
        err = -EEXIST;
@@ -106953,7 +106421,7 @@ index 0ab5413..73dd2cf 100644
        spin_lock_bh(&xfrm_mode_lock);
        if (modemap[mode->encap])
                goto out;
        spin_lock_bh(&xfrm_mode_lock);
        if (modemap[mode->encap])
                goto out;
-@@ -263,8 +266,10 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family)
+@@ -256,8 +259,10 @@ int xfrm_register_mode(struct xfrm_mode *mode, int family)
        if (!try_module_get(afinfo->owner))
                goto out;
  
        if (!try_module_get(afinfo->owner))
                goto out;
  
@@ -106965,7 +106433,7 @@ index 0ab5413..73dd2cf 100644
        err = 0;
  
  out:
        err = 0;
  
  out:
-@@ -288,10 +293,12 @@ int xfrm_unregister_mode(struct xfrm_mode *mode, int family)
+@@ -281,10 +286,12 @@ int xfrm_unregister_mode(struct xfrm_mode *mode, int family)
                return -EAFNOSUPPORT;
  
        err = -ENOENT;
                return -EAFNOSUPPORT;
  
        err = -ENOENT;
@@ -106979,7 +106447,7 @@ index 0ab5413..73dd2cf 100644
                module_put(mode->afinfo->owner);
                err = 0;
        }
                module_put(mode->afinfo->owner);
                err = 0;
        }
-@@ -1512,10 +1519,10 @@ EXPORT_SYMBOL(xfrm_find_acq_byseq);
+@@ -1505,10 +1512,10 @@ EXPORT_SYMBOL(xfrm_find_acq_byseq);
  u32 xfrm_get_acqseq(void)
  {
        u32 res;
  u32 xfrm_get_acqseq(void)
  {
        u32 res;
@@ -107006,7 +106474,7 @@ index 05a6e3d..6716ec9 100644
        __xfrm_sysctl_init(net);
  
 diff --git a/scripts/Makefile.build b/scripts/Makefile.build
        __xfrm_sysctl_init(net);
  
 diff --git a/scripts/Makefile.build b/scripts/Makefile.build
-index bf3e677..c7d426e 100644
+index 649ce68..f6bc05c 100644
 --- a/scripts/Makefile.build
 +++ b/scripts/Makefile.build
 @@ -60,7 +60,7 @@ endif
 --- a/scripts/Makefile.build
 +++ b/scripts/Makefile.build
 @@ -60,7 +60,7 @@ endif
@@ -107019,10 +106487,10 @@ index bf3e677..c7d426e 100644
  endif
  
 diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
  endif
  
 diff --git a/scripts/Makefile.clean b/scripts/Makefile.clean
-index a651cee..6b3b9a3 100644
+index b1c668d..638055f 100644
 --- a/scripts/Makefile.clean
 +++ b/scripts/Makefile.clean
 --- a/scripts/Makefile.clean
 +++ b/scripts/Makefile.clean
-@@ -43,7 +43,8 @@ subdir-ymn   := $(addprefix $(obj)/,$(subdir-ymn))
+@@ -41,7 +41,8 @@ subdir-ymn   := $(addprefix $(obj)/,$(subdir-ymn))
  __clean-files := $(extra-y) $(extra-m) $(extra-)       \
                   $(always) $(targets) $(clean-files)   \
                   $(host-progs)                         \
  __clean-files := $(extra-y) $(extra-m) $(extra-)       \
                   $(always) $(targets) $(clean-files)   \
                   $(host-progs)                         \
@@ -107033,7 +106501,7 @@ index a651cee..6b3b9a3 100644
  __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
  
 diff --git a/scripts/Makefile.host b/scripts/Makefile.host
  __clean-files   := $(filter-out $(no-clean-files), $(__clean-files))
  
 diff --git a/scripts/Makefile.host b/scripts/Makefile.host
-index ab5980f..85fd3e1 100644
+index 133edfa..c9aa07f 100644
 --- a/scripts/Makefile.host
 +++ b/scripts/Makefile.host
 @@ -20,7 +20,19 @@
 --- a/scripts/Makefile.host
 +++ b/scripts/Makefile.host
 @@ -20,7 +20,19 @@
@@ -107087,25 +106555,7 @@ index ab5980f..85fd3e1 100644
  host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
  
  obj-dirs += $(host-objdirs)
  host-objdirs    := $(addprefix $(obj)/,$(host-objdirs))
  
  obj-dirs += $(host-objdirs)
-@@ -96,7 +125,7 @@ quiet_cmd_host-cmulti       = HOSTLD  $@
-       cmd_host-cmulti = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
-                         $(addprefix $(obj)/,$($(@F)-objs)) \
-                         $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
--$(host-cmulti): $(obj)/%: $(host-cobjs) FORCE
-+$(host-cmulti): $(obj)/%: $(host-cobjs) $(host-cshlib) FORCE
-       $(call if_changed,host-cmulti)
- # Create .o file from a single .c file
-@@ -113,7 +142,7 @@ quiet_cmd_host-cxxmulti    = HOSTLD  $@
-                         $(foreach o,objs cxxobjs,\
-                         $(addprefix $(obj)/,$($(@F)-$(o)))) \
-                         $(HOST_LOADLIBES) $(HOSTLOADLIBES_$(@F))
--$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) FORCE
-+$(host-cxxmulti): $(obj)/%: $(host-cobjs) $(host-cxxobjs) $(host-cshlib) FORCE
-       $(call if_changed,host-cxxmulti)
- # Create .o file from a single .cc (C++) file
-@@ -122,5 +151,37 @@ quiet_cmd_host-cxxobjs    = HOSTCXX $@
+@@ -124,5 +153,37 @@ quiet_cmd_host-cxxobjs    = HOSTCXX $@
  $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
        $(call if_changed_dep,host-cxxobjs)
  
  $(host-cxxobjs): $(obj)/%.o: $(src)/%.cc FORCE
        $(call if_changed_dep,host-cxxobjs)
  
@@ -107249,7 +106699,7 @@ index 0000000..42018ed
 +fi
 +exit 1
 diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
 +fi
 +exit 1
 diff --git a/scripts/headers_install.sh b/scripts/headers_install.sh
-index 5de5660..d3deb89 100644
+index fdebd66..a349e33 100755
 --- a/scripts/headers_install.sh
 +++ b/scripts/headers_install.sh
 @@ -32,6 +32,7 @@ do
 --- a/scripts/headers_install.sh
 +++ b/scripts/headers_install.sh
 @@ -32,6 +32,7 @@ do
@@ -107261,7 +106711,7 @@ index 5de5660..d3deb89 100644
                -e 's@^#include <linux/compiler.h>@@' \
                -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
 diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
                -e 's@^#include <linux/compiler.h>@@' \
                -e 's/(^|[^a-zA-Z0-9])__packed([^a-zA-Z0-9_]|$)/\1__attribute__((packed))\2/g' \
 diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
-index 86a4fe7..99e91f9 100644
+index 86a4fe7..99e91f9 100755
 --- a/scripts/link-vmlinux.sh
 +++ b/scripts/link-vmlinux.sh
 @@ -166,7 +166,7 @@ else
 --- a/scripts/link-vmlinux.sh
 +++ b/scripts/link-vmlinux.sh
 @@ -166,7 +166,7 @@ else
@@ -107341,10 +106791,10 @@ index e614ef6..d9d2b01 100644
        sprintf(alias, "dmi*");
  
 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
        sprintf(alias, "dmi*");
  
 diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
-index 091d905..77b88c7 100644
+index d439856..10c1eac 100644
 --- a/scripts/mod/modpost.c
 +++ b/scripts/mod/modpost.c
 --- a/scripts/mod/modpost.c
 +++ b/scripts/mod/modpost.c
-@@ -920,6 +920,7 @@ enum mismatch {
+@@ -921,6 +921,7 @@ enum mismatch {
        ANY_INIT_TO_ANY_EXIT,
        ANY_EXIT_TO_ANY_INIT,
        EXPORT_TO_INIT_EXIT,
        ANY_INIT_TO_ANY_EXIT,
        ANY_EXIT_TO_ANY_INIT,
        EXPORT_TO_INIT_EXIT,
@@ -107352,7 +106802,7 @@ index 091d905..77b88c7 100644
  };
  
  struct sectioncheck {
  };
  
  struct sectioncheck {
-@@ -1006,6 +1007,12 @@ const struct sectioncheck sectioncheck[] = {
+@@ -1007,6 +1008,12 @@ static const struct sectioncheck sectioncheck[] = {
        .tosec   = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
        .mismatch = EXPORT_TO_INIT_EXIT,
        .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
        .tosec   = { INIT_SECTIONS, EXIT_SECTIONS, NULL },
        .mismatch = EXPORT_TO_INIT_EXIT,
        .symbol_white_list = { DEFAULT_SYMBOL_WHITE_LIST, NULL },
@@ -107365,7 +106815,7 @@ index 091d905..77b88c7 100644
  }
  };
  
  }
  };
  
-@@ -1126,10 +1133,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
+@@ -1127,10 +1134,10 @@ static Elf_Sym *find_elf_symbol(struct elf_info *elf, Elf64_Sword addr,
                        continue;
                if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
                        continue;
                        continue;
                if (ELF_ST_TYPE(sym->st_info) == STT_SECTION)
                        continue;
@@ -107378,7 +106828,7 @@ index 091d905..77b88c7 100644
                if (d < 0)
                        d = addr - sym->st_value;
                if (d < distance) {
                if (d < 0)
                        d = addr - sym->st_value;
                if (d < distance) {
-@@ -1407,6 +1414,14 @@ static void report_sec_mismatch(const char *modname,
+@@ -1408,6 +1415,14 @@ static void report_sec_mismatch(const char *modname,
                tosym, prl_to, prl_to, tosym);
                free(prl_to);
                break;
                tosym, prl_to, prl_to, tosym);
                free(prl_to);
                break;
@@ -107393,7 +106843,7 @@ index 091d905..77b88c7 100644
        }
        fprintf(stderr, "\n");
  }
        }
        fprintf(stderr, "\n");
  }
-@@ -1658,7 +1673,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
+@@ -1659,7 +1674,7 @@ static void section_rel(const char *modname, struct elf_info *elf,
  static void check_sec_ref(struct module *mod, const char *modname,
                          struct elf_info *elf)
  {
  static void check_sec_ref(struct module *mod, const char *modname,
                          struct elf_info *elf)
  {
@@ -107402,7 +106852,7 @@ index 091d905..77b88c7 100644
        Elf_Shdr *sechdrs = elf->sechdrs;
  
        /* Walk through all sections */
        Elf_Shdr *sechdrs = elf->sechdrs;
  
        /* Walk through all sections */
-@@ -1789,7 +1804,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
+@@ -1790,7 +1805,7 @@ void __attribute__((format(printf, 2, 3))) buf_printf(struct buffer *buf,
        va_end(ap);
  }
  
        va_end(ap);
  }
  
@@ -107411,7 +106861,7 @@ index 091d905..77b88c7 100644
  {
        if (buf->size - buf->pos < len) {
                buf->size += len + SZ;
  {
        if (buf->size - buf->pos < len) {
                buf->size += len + SZ;
-@@ -2008,7 +2023,7 @@ static void write_if_changed(struct buffer *b, const char *fname)
+@@ -2009,7 +2024,7 @@ static void write_if_changed(struct buffer *b, const char *fname)
        if (fstat(fileno(file), &st) < 0)
                goto close_write;
  
        if (fstat(fileno(file), &st) < 0)
                goto close_write;
  
@@ -107471,8 +106921,21 @@ index 0865b3e..7235dd4 100644
        __ksymtab               : { *(SORT(___ksymtab+*)) }
        __ksymtab_gpl           : { *(SORT(___ksymtab_gpl+*)) }
        __ksymtab_unused        : { *(SORT(___ksymtab_unused+*)) }
        __ksymtab               : { *(SORT(___ksymtab+*)) }
        __ksymtab_gpl           : { *(SORT(___ksymtab_gpl+*)) }
        __ksymtab_unused        : { *(SORT(___ksymtab_unused+*)) }
+diff --git a/scripts/package/Makefile b/scripts/package/Makefile
+index 99ca6e7..3a1a1a1 100644
+--- a/scripts/package/Makefile
++++ b/scripts/package/Makefile
+@@ -46,7 +46,7 @@ rpm-pkg rpm: FORCE
+       ln -sf $(srctree) $(KERNELPATH)
+       $(CONFIG_SHELL) $(MKSPEC) >$(objtree)/kernel.spec
+       $(CONFIG_SHELL) $(srctree)/scripts/setlocalversion --save-scmversion
+-      tar -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(TAR_CONTENT)
++      tar --owner=root --group=root -cz $(RCS_TAR_IGNORE) -f $(KERNELPATH).tar.gz $(TAR_CONTENT)
+       rm $(KERNELPATH)
+       rm -f $(objtree)/.scmversion
+       $(CONFIG_SHELL) $(srctree)/scripts/mkversion > $(objtree)/.tmp_version
 diff --git a/scripts/package/builddeb b/scripts/package/builddeb
 diff --git a/scripts/package/builddeb b/scripts/package/builddeb
-index 7c0e6e4..bf2c90e 100644
+index 5972624..4028795 100755
 --- a/scripts/package/builddeb
 +++ b/scripts/package/builddeb
 @@ -293,6 +293,7 @@ fi
 --- a/scripts/package/builddeb
 +++ b/scripts/package/builddeb
 @@ -293,6 +293,7 @@ fi
@@ -107484,13 +106947,22 @@ index 7c0e6e4..bf2c90e 100644
  mkdir -p "$destdir"
  (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
 diff --git a/scripts/package/mkspec b/scripts/package/mkspec
  mkdir -p "$destdir"
  (cd $srctree; tar -c -f - -T -) < "$objtree/debian/hdrsrcfiles" | (cd $destdir; tar -xf -)
 diff --git a/scripts/package/mkspec b/scripts/package/mkspec
-index 1395760..e4f4ac4 100755
+index 1395760..bca2734 100755
 --- a/scripts/package/mkspec
 +++ b/scripts/package/mkspec
 --- a/scripts/package/mkspec
 +++ b/scripts/package/mkspec
-@@ -82,6 +82,16 @@ echo ""
- fi
+@@ -121,29 +121,40 @@ echo 'rm -f $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE/{build,source}"
+ echo "mkdir -p "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE"
+ echo "EXCLUDES=\"$RCS_TAR_IGNORE --exclude .tmp_versions --exclude=*vmlinux* --exclude=*.o --exclude=*.ko --exclude=*.cmd --exclude=Documentation --exclude=firmware --exclude .config.old --exclude .missing-syscalls.d\""
+ echo "tar "'$EXCLUDES'" -cf- . | (cd "'$RPM_BUILD_ROOT'"/usr/src/kernels/$KERNELRELEASE;tar xvf -)"
+-echo 'cd $RPM_BUILD_ROOT'"/lib/modules/$KERNELRELEASE"
+-echo "ln -sf /usr/src/kernels/$KERNELRELEASE build"
+-echo "ln -sf /usr/src/kernels/$KERNELRELEASE source"
  
  
- echo "%install"
+ echo ""
+ echo "%clean"
+ echo 'rm -rf $RPM_BUILD_ROOT'
+ echo ""
++echo "%pre"
 +echo 'chmod -f 0500 /boot'
 +echo 'if [ -d /lib/modules ]; then'
 +echo 'chmod -f 0500 /lib/modules'
 +echo 'chmod -f 0500 /boot'
 +echo 'if [ -d /lib/modules ]; then'
 +echo 'chmod -f 0500 /lib/modules'
@@ -107501,27 +106973,46 @@ index 1395760..e4f4ac4 100755
 +echo 'if [ -d /lib64/modules ]; then'
 +echo 'chmod -f 0500 /lib64/modules'
 +echo 'fi'
 +echo 'if [ -d /lib64/modules ]; then'
 +echo 'chmod -f 0500 /lib64/modules'
 +echo 'fi'
- echo 'KBUILD_IMAGE=$(make image_name)'
- echo "%ifarch ia64"
- echo 'mkdir -p $RPM_BUILD_ROOT/boot/efi $RPM_BUILD_ROOT/lib/modules'
-@@ -139,7 +149,7 @@ echo "rm -f /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm
++echo ""
++echo "%post devel"
++echo "ln -sf /usr/src/kernels/$KERNELRELEASE /lib/modules/$KERNELRELEASE/build"
++echo "ln -sf /usr/src/kernels/$KERNELRELEASE /lib/modules/$KERNELRELEASE/source"
++echo ""
+ echo "%post"
+-echo "if [ -x /sbin/installkernel -a -r /boot/vmlinuz-$KERNELRELEASE -a -r /boot/System.map-$KERNELRELEASE ]; then"
+-echo "cp /boot/vmlinuz-$KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm"
+-echo "cp /boot/System.map-$KERNELRELEASE /boot/System.map-$KERNELRELEASE-rpm"
+-echo "rm -f /boot/vmlinuz-$KERNELRELEASE /boot/System.map-$KERNELRELEASE"
+-echo "/sbin/installkernel $KERNELRELEASE /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm"
+-echo "rm -f /boot/vmlinuz-$KERNELRELEASE-rpm /boot/System.map-$KERNELRELEASE-rpm"
++echo "if [ -x /sbin/dracut ]; then"
++echo '/sbin/new-kernel-pkg --dracut --mkinitrd --depmod --install --make-default '"$KERNELRELEASE"' || exit $?'
++echo "else"
++echo '/sbin/new-kernel-pkg --mkinitrd --depmod --install --make-default '"$KERNELRELEASE"' || exit $?'
  echo "fi"
  echo ""
  echo "%files"
 -echo '%defattr (-, root, root)'
 +echo '%defattr (400, root, root, 500)'
  echo "%dir /lib/modules"
  echo "fi"
  echo ""
  echo "%files"
 -echo '%defattr (-, root, root)'
 +echo '%defattr (400, root, root, 500)'
  echo "%dir /lib/modules"
- echo "/lib/modules/$KERNELRELEASE"
+-echo "/lib/modules/$KERNELRELEASE"
  echo "%exclude /lib/modules/$KERNELRELEASE/build"
  echo "%exclude /lib/modules/$KERNELRELEASE/build"
-@@ -152,7 +162,7 @@ echo '%defattr (-, root, root)'
+ echo "%exclude /lib/modules/$KERNELRELEASE/source"
++echo "/lib/modules/$KERNELRELEASE"
+ echo "/lib/firmware/$KERNELRELEASE"
+ echo "/boot/*"
+ echo ""
+@@ -152,8 +163,7 @@ echo '%defattr (-, root, root)'
  echo "/usr/include"
  echo ""
  echo "%files devel"
 -echo '%defattr (-, root, root)'
 +echo '%defattr (400, root, root, 500)'
  echo "/usr/include"
  echo ""
  echo "%files devel"
 -echo '%defattr (-, root, root)'
 +echo '%defattr (400, root, root, 500)'
++echo "%dir /lib/modules/$KERNELRELEASE"
  echo "/usr/src/kernels/$KERNELRELEASE"
  echo "/usr/src/kernels/$KERNELRELEASE"
- echo "/lib/modules/$KERNELRELEASE/build"
- echo "/lib/modules/$KERNELRELEASE/source"
+-echo "/lib/modules/$KERNELRELEASE/build"
+-echo "/lib/modules/$KERNELRELEASE/source"
+ echo ""
 diff --git a/scripts/pnmtologo.c b/scripts/pnmtologo.c
 index 4718d78..9220d58 100644
 --- a/scripts/pnmtologo.c
 diff --git a/scripts/pnmtologo.c b/scripts/pnmtologo.c
 index 4718d78..9220d58 100644
 --- a/scripts/pnmtologo.c
@@ -107553,7 +107044,7 @@ index 4718d78..9220d58 100644
      write_hex_cnt = 0;
      for (i = 0; i < logo_clutsize; i++) {
 diff --git a/scripts/sortextable.h b/scripts/sortextable.h
      write_hex_cnt = 0;
      for (i = 0; i < logo_clutsize; i++) {
 diff --git a/scripts/sortextable.h b/scripts/sortextable.h
-index 8fac3fd..32ff38d 100644
+index ba87004..3f4852c 100644
 --- a/scripts/sortextable.h
 +++ b/scripts/sortextable.h
 @@ -108,9 +108,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
 --- a/scripts/sortextable.h
 +++ b/scripts/sortextable.h
 @@ -108,9 +108,9 @@ do_func(Elf_Ehdr *ehdr, char const *const fname, table_sort_t custom_sort)
@@ -107570,7 +107061,7 @@ index 8fac3fd..32ff38d 100644
        unsigned int secindex_strings;
  
 diff --git a/scripts/tags.sh b/scripts/tags.sh
        unsigned int secindex_strings;
  
 diff --git a/scripts/tags.sh b/scripts/tags.sh
-index 293828b..9fbe696 100755
+index cdb491d..8d32bfc 100755
 --- a/scripts/tags.sh
 +++ b/scripts/tags.sh
 @@ -26,7 +26,7 @@ else
 --- a/scripts/tags.sh
 +++ b/scripts/tags.sh
 @@ -26,7 +26,7 @@ else
@@ -107583,10 +107074,10 @@ index 293828b..9fbe696 100755
  # Find all available archs
  find_all_archs()
 diff --git a/security/Kconfig b/security/Kconfig
  # Find all available archs
  find_all_archs()
 diff --git a/security/Kconfig b/security/Kconfig
-index beb86b5..00daaca 100644
+index beb86b5..1a953b1 100644
 --- a/security/Kconfig
 +++ b/security/Kconfig
 --- a/security/Kconfig
 +++ b/security/Kconfig
-@@ -4,6 +4,969 @@
+@@ -4,6 +4,974 @@
  
  menu "Security options"
  
  
  menu "Security options"
  
@@ -107750,6 +107241,11 @@ index beb86b5..00daaca 100644
 +      help
 +        Choose this option if this kernel is running as a VirtualBox guest or host.
 +
 +      help
 +        Choose this option if this kernel is running as a VirtualBox guest or host.
 +
++config GRKERNSEC_CONFIG_VIRT_HYPERV
++      bool "Hyper-V"
++      help
++        Choose this option if this kernel is running as a Hyper-V guest.
++
 +endchoice
 +
 +choice
 +endchoice
 +
 +choice
@@ -108556,7 +108052,7 @@ index beb86b5..00daaca 100644
  source security/keys/Kconfig
  
  config SECURITY_DMESG_RESTRICT
  source security/keys/Kconfig
  
  config SECURITY_DMESG_RESTRICT
-@@ -103,7 +1066,7 @@ config INTEL_TXT
+@@ -103,7 +1071,7 @@ config INTEL_TXT
  config LSM_MMAP_MIN_ADDR
        int "Low address space for LSM to protect from user allocation"
        depends on SECURITY && SECURITY_SELINUX
  config LSM_MMAP_MIN_ADDR
        int "Low address space for LSM to protect from user allocation"
        depends on SECURITY && SECURITY_SELINUX
@@ -108581,7 +108077,7 @@ index fdaa50c..2761dcb 100644
                old_dentry->d_inode->i_uid,
                old_dentry->d_inode->i_mode
 diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
                old_dentry->d_inode->i_uid,
                old_dentry->d_inode->i_mode
 diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c
-index 9981000..eb21356 100644
+index 65ca451..ad6f22d 100644
 --- a/security/apparmor/lsm.c
 +++ b/security/apparmor/lsm.c
 @@ -186,7 +186,7 @@ static int common_perm_dir_dentry(int op, struct path *dir,
 --- a/security/apparmor/lsm.c
 +++ b/security/apparmor/lsm.c
 @@ -186,7 +186,7 @@ static int common_perm_dir_dentry(int op, struct path *dir,
@@ -108670,10 +108166,10 @@ index bab0611..f9a0ff5 100644
                if (bprm->cap_effective)
                        return 1;
 diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
                if (bprm->cap_effective)
                        return 1;
 diff --git a/security/integrity/ima/ima.h b/security/integrity/ima/ima.h
-index 0fb456c..83711f9 100644
+index 8ee997d..24c174b 100644
 --- a/security/integrity/ima/ima.h
 +++ b/security/integrity/ima/ima.h
 --- a/security/integrity/ima/ima.h
 +++ b/security/integrity/ima/ima.h
-@@ -118,8 +118,8 @@ int ima_init_template(void);
+@@ -116,8 +116,8 @@ int ima_init_template(void);
  extern spinlock_t ima_queue_lock;
  
  struct ima_h_table {
  extern spinlock_t ima_queue_lock;
  
  struct ima_h_table {
@@ -108685,7 +108181,7 @@ index 0fb456c..83711f9 100644
  };
  extern struct ima_h_table ima_htable;
 diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c
  };
  extern struct ima_h_table ima_htable;
 diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c
-index d9cd5ce..c5c29ac 100644
+index 8688597..9fa80d2 100644
 --- a/security/integrity/ima/ima_api.c
 +++ b/security/integrity/ima/ima_api.c
 @@ -137,7 +137,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename,
 --- a/security/integrity/ima/ima_api.c
 +++ b/security/integrity/ima/ima_api.c
 @@ -137,7 +137,7 @@ void ima_add_violation(struct file *file, const unsigned char *filename,
@@ -108743,7 +108239,7 @@ index 3478965..ec7bb9e 100644
        if (iov != iovstack)
                kfree(iov);
 diff --git a/security/keys/internal.h b/security/keys/internal.h
        if (iov != iovstack)
                kfree(iov);
 diff --git a/security/keys/internal.h b/security/keys/internal.h
-index 5f20da0..444ccf1 100644
+index 200e378..cdc74b5 100644
 --- a/security/keys/internal.h
 +++ b/security/keys/internal.h
 @@ -244,7 +244,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t,
 --- a/security/keys/internal.h
 +++ b/security/keys/internal.h
 @@ -244,7 +244,7 @@ extern long keyctl_instantiate_key_iov(key_serial_t,
@@ -108756,7 +108252,7 @@ index 5f20da0..444ccf1 100644
  #ifdef CONFIG_PERSISTENT_KEYRINGS
  extern long keyctl_get_persistent(uid_t, key_serial_t);
 diff --git a/security/keys/key.c b/security/keys/key.c
  #ifdef CONFIG_PERSISTENT_KEYRINGS
  extern long keyctl_get_persistent(uid_t, key_serial_t);
 diff --git a/security/keys/key.c b/security/keys/key.c
-index 6d0cad1..8f957df 100644
+index e17ba6a..2cc04a6 100644
 --- a/security/keys/key.c
 +++ b/security/keys/key.c
 @@ -285,7 +285,7 @@ struct key *key_alloc(struct key_type *type, const char *desc,
 --- a/security/keys/key.c
 +++ b/security/keys/key.c
 @@ -285,7 +285,7 @@ struct key *key_alloc(struct key_type *type, const char *desc,
@@ -108813,10 +108309,10 @@ index 6d0cad1..8f957df 100644
        /* record the root user tracking */
        rb_link_node(&root_key_user.node,
 diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
        /* record the root user tracking */
        rb_link_node(&root_key_user.node,
 diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
-index eff88a5..51d35ef 100644
+index 4743d71..170a185 100644
 --- a/security/keys/keyctl.c
 +++ b/security/keys/keyctl.c
 --- a/security/keys/keyctl.c
 +++ b/security/keys/keyctl.c
-@@ -1004,7 +1004,7 @@ static int keyctl_change_reqkey_auth(struct key *key)
+@@ -1000,7 +1000,7 @@ static int keyctl_change_reqkey_auth(struct key *key)
  /*
   * Copy the iovec data from userspace
   */
  /*
   * Copy the iovec data from userspace
   */
@@ -108825,7 +108321,7 @@ index eff88a5..51d35ef 100644
                                 unsigned ioc)
  {
        for (; ioc > 0; ioc--) {
                                 unsigned ioc)
  {
        for (; ioc > 0; ioc--) {
-@@ -1026,7 +1026,7 @@ static long copy_from_user_iovec(void *buffer, const struct iovec *iov,
+@@ -1022,7 +1022,7 @@ static long copy_from_user_iovec(void *buffer, const struct iovec *iov,
   * If successful, 0 will be returned.
   */
  long keyctl_instantiate_key_common(key_serial_t id,
   * If successful, 0 will be returned.
   */
  long keyctl_instantiate_key_common(key_serial_t id,
@@ -108834,7 +108330,7 @@ index eff88a5..51d35ef 100644
                                   unsigned ioc,
                                   size_t plen,
                                   key_serial_t ringid)
                                   unsigned ioc,
                                   size_t plen,
                                   key_serial_t ringid)
-@@ -1121,7 +1121,7 @@ long keyctl_instantiate_key(key_serial_t id,
+@@ -1117,7 +1117,7 @@ long keyctl_instantiate_key(key_serial_t id,
                        [0].iov_len  = plen
                };
  
                        [0].iov_len  = plen
                };
  
@@ -108843,7 +108339,7 @@ index eff88a5..51d35ef 100644
        }
  
        return keyctl_instantiate_key_common(id, NULL, 0, 0, ringid);
        }
  
        return keyctl_instantiate_key_common(id, NULL, 0, 0, ringid);
-@@ -1154,7 +1154,7 @@ long keyctl_instantiate_key_iov(key_serial_t id,
+@@ -1150,7 +1150,7 @@ long keyctl_instantiate_key_iov(key_serial_t id,
        if (ret == 0)
                goto no_payload_free;
  
        if (ret == 0)
                goto no_payload_free;
  
@@ -108873,7 +108369,7 @@ index f728728..6457a0c 100644
  
  /*
 diff --git a/security/security.c b/security/security.c
  
  /*
 diff --git a/security/security.c b/security/security.c
-index e41b1a8..b66a558 100644
+index 18b35c6..c9fbc92 100644
 --- a/security/security.c
 +++ b/security/security.c
 @@ -33,8 +33,8 @@
 --- a/security/security.c
 +++ b/security/security.c
 @@ -33,8 +33,8 @@
@@ -108931,7 +108427,7 @@ index a18f1fa..c9b9fc4 100644
                lock = &avc_cache.slots_lock[hvalue];
  
 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
                lock = &avc_cache.slots_lock[hvalue];
  
 diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
-index e03bad5..b15da09 100644
+index c603b20..8716ec9 100644
 --- a/security/selinux/hooks.c
 +++ b/security/selinux/hooks.c
 @@ -95,8 +95,6 @@
 --- a/security/selinux/hooks.c
 +++ b/security/selinux/hooks.c
 @@ -95,8 +95,6 @@
@@ -108943,7 +108439,7 @@ index e03bad5..b15da09 100644
  /* SECMARK reference count */
  static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0);
  
  /* SECMARK reference count */
  static atomic_t selinux_secmark_refcount = ATOMIC_INIT(0);
  
-@@ -5772,7 +5770,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer)
+@@ -5809,7 +5807,7 @@ static int selinux_key_getsecurity(struct key *key, char **_buffer)
  
  #endif
  
  
  #endif
  
@@ -108952,7 +108448,7 @@ index e03bad5..b15da09 100644
        .name =                         "selinux",
  
        .ptrace_access_check =          selinux_ptrace_access_check,
        .name =                         "selinux",
  
        .ptrace_access_check =          selinux_ptrace_access_check,
-@@ -6128,6 +6126,9 @@ static void selinux_nf_ip_exit(void)
+@@ -6150,6 +6148,9 @@ static void selinux_nf_ip_exit(void)
  #ifdef CONFIG_SECURITY_SELINUX_DISABLE
  static int selinux_disabled;
  
  #ifdef CONFIG_SECURITY_SELINUX_DISABLE
  static int selinux_disabled;
  
@@ -108962,7 +108458,7 @@ index e03bad5..b15da09 100644
  int selinux_disable(void)
  {
        if (ss_initialized) {
  int selinux_disable(void)
  {
        if (ss_initialized) {
-@@ -6145,7 +6146,9 @@ int selinux_disable(void)
+@@ -6167,7 +6168,9 @@ int selinux_disable(void)
        selinux_disabled = 1;
        selinux_enabled = 0;
  
        selinux_disabled = 1;
        selinux_enabled = 0;
  
@@ -108987,10 +108483,10 @@ index 1450f85..a91e0bc 100644
        }
        rtnl_unlock();
 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
        }
        rtnl_unlock();
 diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index e6ab307..2008c98 100644
+index d515ec2..8a4ca71 100644
 --- a/security/smack/smack_lsm.c
 +++ b/security/smack/smack_lsm.c
 --- a/security/smack/smack_lsm.c
 +++ b/security/smack/smack_lsm.c
-@@ -3849,7 +3849,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
+@@ -4079,7 +4079,7 @@ static int smack_inode_getsecctx(struct inode *inode, void **ctx, u32 *ctxlen)
        return 0;
  }
  
        return 0;
  }
  
@@ -109358,10 +108854,10 @@ index 2d957ba..fda022c 100644
        if (err < 0)
                return err;
 diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
        if (err < 0)
                return err;
 diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
-index a95356f..0f5eabf 100644
+index 166d59c..89e3889 100644
 --- a/sound/core/pcm_native.c
 +++ b/sound/core/pcm_native.c
 --- a/sound/core/pcm_native.c
 +++ b/sound/core/pcm_native.c
-@@ -2815,11 +2815,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
+@@ -2931,11 +2931,11 @@ int snd_pcm_kernel_ioctl(struct snd_pcm_substream *substream,
        switch (substream->stream) {
        case SNDRV_PCM_STREAM_PLAYBACK:
                result = snd_pcm_playback_ioctl1(NULL, substream, cmd,
        switch (substream->stream) {
        case SNDRV_PCM_STREAM_PLAYBACK:
                result = snd_pcm_playback_ioctl1(NULL, substream, cmd,
@@ -109785,7 +109281,7 @@ index 4c41c90..37f3631 100644
        return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, &ops,
                                              sizeof(struct snd_emu10k1_synth_arg));
 diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
        return snd_seq_device_register_driver(SNDRV_SEQ_DEV_ID_EMU10K1_SYNTH, &ops,
                                              sizeof(struct snd_emu10k1_synth_arg));
 diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
-index ec6a7d0..4e578f7 100644
+index 15e0089..ad6bc9b 100644
 --- a/sound/pci/hda/hda_codec.c
 +++ b/sound/pci/hda/hda_codec.c
 @@ -966,14 +966,10 @@ find_codec_preset(struct hda_codec *codec)
 --- a/sound/pci/hda/hda_codec.c
 +++ b/sound/pci/hda/hda_codec.c
 @@ -966,14 +966,10 @@ find_codec_preset(struct hda_codec *codec)
@@ -109805,7 +109301,7 @@ index ec6a7d0..4e578f7 100644
                mod_requested++;
                goto again;
        }
                mod_requested++;
                goto again;
        }
-@@ -2780,7 +2776,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec,
+@@ -2800,7 +2796,7 @@ static int get_kctl_0dB_offset(struct hda_codec *codec,
                /* FIXME: set_fs() hack for obtaining user-space TLV data */
                mm_segment_t fs = get_fs();
                set_fs(get_ds());
                /* FIXME: set_fs() hack for obtaining user-space TLV data */
                mm_segment_t fs = get_fs();
                set_fs(get_ds());
@@ -109872,10 +109368,10 @@ index 81c916a..516f0bf 100644
        chip->pci = pci;
        chip->irq = -1;
 diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
        chip->pci = pci;
        chip->irq = -1;
 diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
-index a3e0a0d..ab98399 100644
+index b60ff56..7307f0f 100644
 --- a/sound/soc/soc-core.c
 +++ b/sound/soc/soc-core.c
 --- a/sound/soc/soc-core.c
 +++ b/sound/soc/soc-core.c
-@@ -2286,8 +2286,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
+@@ -2132,8 +2132,10 @@ int snd_soc_set_ac97_ops_of_reset(struct snd_ac97_bus_ops *ops,
        if (ret)
                return ret;
  
        if (ret)
                return ret;
  
@@ -117683,10 +117179,10 @@ index 0000000..4378111
 +}
 diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
 new file mode 100644
 +}
 diff --git a/tools/gcc/size_overflow_plugin/size_overflow_hash.data b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
 new file mode 100644
-index 0000000..f527934
+index 0000000..f38f762
 --- /dev/null
 +++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
 --- /dev/null
 +++ b/tools/gcc/size_overflow_plugin/size_overflow_hash.data
-@@ -0,0 +1,5911 @@
+@@ -0,0 +1,6029 @@
 +intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL
 +storvsc_connect_to_vsp_22 storvsc_connect_to_vsp 2 22 NULL
 +compat_sock_setsockopt_23 compat_sock_setsockopt 5 23 NULL
 +intel_fake_agp_alloc_by_type_1 intel_fake_agp_alloc_by_type 1 1 NULL
 +storvsc_connect_to_vsp_22 storvsc_connect_to_vsp 2 22 NULL
 +compat_sock_setsockopt_23 compat_sock_setsockopt 5 23 NULL
@@ -117708,6 +117204,7 @@ index 0000000..f527934
 +iscsi_session_setup_196 iscsi_session_setup 4-5 196 NULL
 +obd_proc_jobid_var_seq_write_199 obd_proc_jobid_var_seq_write 3 199 NULL
 +ll_xattr_cache_seq_write_250 ll_xattr_cache_seq_write 3 250 NULL
 +iscsi_session_setup_196 iscsi_session_setup 4-5 196 NULL
 +obd_proc_jobid_var_seq_write_199 obd_proc_jobid_var_seq_write 3 199 NULL
 +ll_xattr_cache_seq_write_250 ll_xattr_cache_seq_write 3 250 NULL
++vpdma_create_desc_list_255 vpdma_create_desc_list 2 255 NULL
 +br_port_info_size_268 br_port_info_size 0 268 NULL
 +read_file_war_stats_292 read_file_war_stats 3 292 NULL
 +SYSC_connect_304 SYSC_connect 3 304 NULL
 +br_port_info_size_268 br_port_info_size 0 268 NULL
 +read_file_war_stats_292 read_file_war_stats 3 292 NULL
 +SYSC_connect_304 SYSC_connect 3 304 NULL
@@ -117721,6 +117218,7 @@ index 0000000..f527934
 +nvme_trans_modesel_data_488 nvme_trans_modesel_data 4 488 NULL
 +iwl_dbgfs_protection_mode_write_502 iwl_dbgfs_protection_mode_write 3 502 NULL
 +rx_rx_defrag_end_read_505 rx_rx_defrag_end_read 3 505 NULL
 +nvme_trans_modesel_data_488 nvme_trans_modesel_data 4 488 NULL
 +iwl_dbgfs_protection_mode_write_502 iwl_dbgfs_protection_mode_write 3 502 NULL
 +rx_rx_defrag_end_read_505 rx_rx_defrag_end_read 3 505 NULL
++smp_send_cmd_512 smp_send_cmd 3 512 NULL
 +ocfs2_validate_meta_ecc_bhs_527 ocfs2_validate_meta_ecc_bhs 0 527 NULL
 +zlib_deflate_workspacesize_537 zlib_deflate_workspacesize 0-1-2 537 NULL
 +iwl_dbgfs_wowlan_sram_read_540 iwl_dbgfs_wowlan_sram_read 3 540 NULL
 +ocfs2_validate_meta_ecc_bhs_527 ocfs2_validate_meta_ecc_bhs 0 527 NULL
 +zlib_deflate_workspacesize_537 zlib_deflate_workspacesize 0-1-2 537 NULL
 +iwl_dbgfs_wowlan_sram_read_540 iwl_dbgfs_wowlan_sram_read 3 540 NULL
@@ -117842,6 +117340,7 @@ index 0000000..f527934
 +nvif_object_sclass_1940 nvif_object_sclass 3 1940 &cyttsp_probe_1940
 +ieee80211_if_fmt_dot11MeshConfirmTimeout_1945 ieee80211_if_fmt_dot11MeshConfirmTimeout 3 1945 NULL
 +ivtv_v4l2_read_1964 ivtv_v4l2_read 3 1964 NULL
 +nvif_object_sclass_1940 nvif_object_sclass 3 1940 &cyttsp_probe_1940
 +ieee80211_if_fmt_dot11MeshConfirmTimeout_1945 ieee80211_if_fmt_dot11MeshConfirmTimeout 3 1945 NULL
 +ivtv_v4l2_read_1964 ivtv_v4l2_read 3 1964 NULL
++qla2xxx_get_vpd_field_1965 qla2xxx_get_vpd_field 4 1965 NULL
 +sel_read_avc_hash_stats_1984 sel_read_avc_hash_stats 3 1984 NULL
 +gpio_power_write_1991 gpio_power_write 3 1991 NULL
 +__alloc_bootmem_node_1992 __alloc_bootmem_node 2 1992 NULL
 +sel_read_avc_hash_stats_1984 sel_read_avc_hash_stats 3 1984 NULL
 +gpio_power_write_1991 gpio_power_write 3 1991 NULL
 +__alloc_bootmem_node_1992 __alloc_bootmem_node 2 1992 NULL
@@ -117876,6 +117375,7 @@ index 0000000..f527934
 +sel_write_avc_cache_threshold_2256 sel_write_avc_cache_threshold 3 2256 NULL
 +do_update_counters_2259 do_update_counters 4 2259 NULL
 +ath6kl_wmi_bssinfo_event_rx_2275 ath6kl_wmi_bssinfo_event_rx 3 2275 NULL
 +sel_write_avc_cache_threshold_2256 sel_write_avc_cache_threshold 3 2256 NULL
 +do_update_counters_2259 do_update_counters 4 2259 NULL
 +ath6kl_wmi_bssinfo_event_rx_2275 ath6kl_wmi_bssinfo_event_rx 3 2275 NULL
++vpdma_alloc_desc_buf_2278 vpdma_alloc_desc_buf 2 2278 NULL
 +debug_debug5_read_2291 debug_debug5_read 3 2291 NULL
 +sr_read_cmd_2299 sr_read_cmd 5 2299 NULL
 +kvm_clear_guest_page_2308 kvm_clear_guest_page 4 2308 NULL
 +debug_debug5_read_2291 debug_debug5_read 3 2291 NULL
 +sr_read_cmd_2299 sr_read_cmd 5 2299 NULL
 +kvm_clear_guest_page_2308 kvm_clear_guest_page 4 2308 NULL
@@ -117913,6 +117413,7 @@ index 0000000..f527934
 +osc_build_ppga_2670 osc_build_ppga 2 2670 NULL
 +ffs_ep0_read_2672 ffs_ep0_read 3 2672 NULL
 +oti6858_write_2692 oti6858_write 4 2692 NULL
 +osc_build_ppga_2670 osc_build_ppga 2 2670 NULL
 +ffs_ep0_read_2672 ffs_ep0_read 3 2672 NULL
 +oti6858_write_2692 oti6858_write 4 2692 NULL
++copy_to_iter_iovec_2697 copy_to_iter_iovec 2 2697 NULL
 +nfc_llcp_send_ui_frame_2702 nfc_llcp_send_ui_frame 5 2702 NULL
 +memcpy_fromiovecend_2707 memcpy_fromiovecend 3-4 2707 NULL
 +lprocfs_stats_counter_size_2708 lprocfs_stats_counter_size 0 2708 NULL
 +nfc_llcp_send_ui_frame_2702 nfc_llcp_send_ui_frame 5 2702 NULL
 +memcpy_fromiovecend_2707 memcpy_fromiovecend 3-4 2707 NULL
 +lprocfs_stats_counter_size_2708 lprocfs_stats_counter_size 0 2708 NULL
@@ -117957,6 +117458,7 @@ index 0000000..f527934
 +hfsplus_asc2uni_3071 hfsplus_asc2uni 0 3071 NULL nohasharray
 +dac960_user_command_proc_write_3071 dac960_user_command_proc_write 3 3071 &hfsplus_asc2uni_3071
 +read_file_antenna_diversity_3077 read_file_antenna_diversity 3 3077 NULL
 +hfsplus_asc2uni_3071 hfsplus_asc2uni 0 3071 NULL nohasharray
 +dac960_user_command_proc_write_3071 dac960_user_command_proc_write 3 3071 &hfsplus_asc2uni_3071
 +read_file_antenna_diversity_3077 read_file_antenna_diversity 3 3077 NULL
++bio_integrity_intervals_3094 bio_integrity_intervals 0-2 3094 NULL
 +ttusb2_msg_3100 ttusb2_msg 4 3100 NULL
 +rb_alloc_3102 rb_alloc 1 3102 NULL
 +ufshcd_get_rsp_upiu_result_3114 ufshcd_get_rsp_upiu_result 0 3114 NULL
 +ttusb2_msg_3100 ttusb2_msg 4 3100 NULL
 +rb_alloc_3102 rb_alloc 1 3102 NULL
 +ufshcd_get_rsp_upiu_result_3114 ufshcd_get_rsp_upiu_result 0 3114 NULL
@@ -117971,6 +117473,7 @@ index 0000000..f527934
 +compat_do_ip6t_set_ctl_3184 compat_do_ip6t_set_ctl 4 3184 NULL
 +mempool_create_node_3191 mempool_create_node 1 3191 NULL
 +alloc_context_3194 alloc_context 1 3194 NULL
 +compat_do_ip6t_set_ctl_3184 compat_do_ip6t_set_ctl 4 3184 NULL
 +mempool_create_node_3191 mempool_create_node 1 3191 NULL
 +alloc_context_3194 alloc_context 1 3194 NULL
++dma_init_coherent_memory_3197 dma_init_coherent_memory 3 3197 NULL
 +shmem_pread_slow_3198 shmem_pread_slow 3-2 3198 NULL
 +codec_reg_write_file_3204 codec_reg_write_file 3 3204 NULL
 +SyS_sendto_3219 SyS_sendto 6 3219 NULL
 +shmem_pread_slow_3198 shmem_pread_slow 3-2 3198 NULL
 +codec_reg_write_file_3204 codec_reg_write_file 3 3204 NULL
 +SyS_sendto_3219 SyS_sendto 6 3219 NULL
@@ -118006,6 +117509,7 @@ index 0000000..f527934
 +mem_tx_free_mem_blks_read_3521 mem_tx_free_mem_blks_read 3 3521 NULL
 +SyS_semtimedop_3532 SyS_semtimedop 3 3532 NULL
 +SyS_readv_3539 SyS_readv 3 3539 NULL
 +mem_tx_free_mem_blks_read_3521 mem_tx_free_mem_blks_read 3 3521 NULL
 +SyS_semtimedop_3532 SyS_semtimedop 3 3532 NULL
 +SyS_readv_3539 SyS_readv 3 3539 NULL
++nouveau_fuse_create__3546 nouveau_fuse_create_ 4 3546 NULL
 +btrfs_dir_name_len_3549 btrfs_dir_name_len 0 3549 NULL
 +alloc_smp_resp_3566 alloc_smp_resp 1 3566 NULL
 +evtchn_read_3569 evtchn_read 3 3569 NULL
 +btrfs_dir_name_len_3549 btrfs_dir_name_len 0 3549 NULL
 +alloc_smp_resp_3566 alloc_smp_resp 1 3566 NULL
 +evtchn_read_3569 evtchn_read 3 3569 NULL
@@ -118016,6 +117520,7 @@ index 0000000..f527934
 +edac_mc_alloc_3611 edac_mc_alloc 4 3611 NULL
 +tx_tx_starts_read_3617 tx_tx_starts_read 3 3617 NULL
 +aligned_kmalloc_3628 aligned_kmalloc 1 3628 NULL
 +edac_mc_alloc_3611 edac_mc_alloc 4 3611 NULL
 +tx_tx_starts_read_3617 tx_tx_starts_read 3 3617 NULL
 +aligned_kmalloc_3628 aligned_kmalloc 1 3628 NULL
++fm10k_alloc_q_vector_3638 fm10k_alloc_q_vector 4-6 3638 NULL
 +ath6kl_disconnect_timeout_read_3650 ath6kl_disconnect_timeout_read 3 3650 NULL
 +i915_compat_ioctl_3656 i915_compat_ioctl 2 3656 NULL
 +_iwl_dbgfs_tx_flush_write_3675 _iwl_dbgfs_tx_flush_write 3 3675 NULL
 +ath6kl_disconnect_timeout_read_3650 ath6kl_disconnect_timeout_read 3 3650 NULL
 +i915_compat_ioctl_3656 i915_compat_ioctl 2 3656 NULL
 +_iwl_dbgfs_tx_flush_write_3675 _iwl_dbgfs_tx_flush_write 3 3675 NULL
@@ -118025,6 +117530,7 @@ index 0000000..f527934
 +sctp_setsockopt_auth_key_3793 sctp_setsockopt_auth_key 3 3793 NULL
 +ncp_file_write_3813 ncp_file_write 3 3813 NULL
 +llc_ui_recvmsg_3826 llc_ui_recvmsg 4 3826 NULL
 +sctp_setsockopt_auth_key_3793 sctp_setsockopt_auth_key 3 3793 NULL
 +ncp_file_write_3813 ncp_file_write 3 3813 NULL
 +llc_ui_recvmsg_3826 llc_ui_recvmsg 4 3826 NULL
++ceph_do_getattr_3838 ceph_do_getattr 0 3838 NULL
 +create_one_cdev_3852 create_one_cdev 2 3852 NULL
 +smk_read_onlycap_3855 smk_read_onlycap 3 3855 NULL
 +get_fd_set_3866 get_fd_set 1 3866 NULL
 +create_one_cdev_3852 create_one_cdev 2 3852 NULL
 +smk_read_onlycap_3855 smk_read_onlycap 3 3855 NULL
 +get_fd_set_3866 get_fd_set 1 3866 NULL
@@ -118066,7 +117572,8 @@ index 0000000..f527934
 +get_connectors_for_crtc_4291 get_connectors_for_crtc 0 4291 NULL
 +__usbnet_read_cmd_4299 __usbnet_read_cmd 7 4299 NULL
 +dvb_ringbuffer_pkt_read_user_4303 dvb_ringbuffer_pkt_read_user 2-3-5 4303 NULL
 +get_connectors_for_crtc_4291 get_connectors_for_crtc 0 4291 NULL
 +__usbnet_read_cmd_4299 __usbnet_read_cmd 7 4299 NULL
 +dvb_ringbuffer_pkt_read_user_4303 dvb_ringbuffer_pkt_read_user 2-3-5 4303 NULL
-+count_strings_4315 count_strings 0 4315 NULL
++count_strings_4315 count_strings 0 4315 NULL nohasharray
++cfg80211_inform_bss_4315 cfg80211_inform_bss 9 4315 &count_strings_4315
 +nouveau_fifo_create__4327 nouveau_fifo_create_ 5-6 4327 NULL
 +snd_rawmidi_kernel_read_4328 snd_rawmidi_kernel_read 3 4328 NULL
 +ima_eventdigest_init_common_4338 ima_eventdigest_init_common 2 4338 NULL
 +nouveau_fifo_create__4327 nouveau_fifo_create_ 5-6 4327 NULL
 +snd_rawmidi_kernel_read_4328 snd_rawmidi_kernel_read 3 4328 NULL
 +ima_eventdigest_init_common_4338 ima_eventdigest_init_common 2 4338 NULL
@@ -118139,6 +117646,8 @@ index 0000000..f527934
 +ppp_cp_parse_cr_5214 ppp_cp_parse_cr 4 5214 NULL
 +dwc2_hcd_urb_alloc_5217 dwc2_hcd_urb_alloc 2 5217 NULL
 +ath6kl_debug_roam_tbl_event_5224 ath6kl_debug_roam_tbl_event 3 5224 NULL
 +ppp_cp_parse_cr_5214 ppp_cp_parse_cr 4 5214 NULL
 +dwc2_hcd_urb_alloc_5217 dwc2_hcd_urb_alloc 2 5217 NULL
 +ath6kl_debug_roam_tbl_event_5224 ath6kl_debug_roam_tbl_event 3 5224 NULL
++ipv4_tun_to_nlattr_5261 ipv4_tun_to_nlattr 4 5261 NULL
++dvb_ringbuffer_write_user_5270 dvb_ringbuffer_write_user 3 5270 NULL
 +xgmac_reg_addr_read_5278 xgmac_reg_addr_read 3 5278 NULL
 +usb_descriptor_fillbuf_5302 usb_descriptor_fillbuf 0 5302 NULL
 +r592_write_fifo_pio_5315 r592_write_fifo_pio 3 5315 NULL
 +xgmac_reg_addr_read_5278 xgmac_reg_addr_read 3 5278 NULL
 +usb_descriptor_fillbuf_5302 usb_descriptor_fillbuf 0 5302 NULL
 +r592_write_fifo_pio_5315 r592_write_fifo_pio 3 5315 NULL
@@ -118152,6 +117661,7 @@ index 0000000..f527934
 +ll_xattr_cache_refill_5468 ll_xattr_cache_refill 0 5468 NULL
 +kernfs_fop_write_5471 kernfs_fop_write 3 5471 NULL
 +xfs_efi_init_5476 xfs_efi_init 2 5476 NULL
 +ll_xattr_cache_refill_5468 ll_xattr_cache_refill 0 5468 NULL
 +kernfs_fop_write_5471 kernfs_fop_write 3 5471 NULL
 +xfs_efi_init_5476 xfs_efi_init 2 5476 NULL
++pci_enable_msix_exact_5482 pci_enable_msix_exact 3 5482 NULL
 +cifs_security_flags_proc_write_5484 cifs_security_flags_proc_write 3 5484 NULL
 +tty_write_5494 tty_write 3 5494 NULL
 +tomoyo_update_domain_5498 tomoyo_update_domain 2 5498 NULL nohasharray
 +cifs_security_flags_proc_write_5484 cifs_security_flags_proc_write 3 5484 NULL
 +tty_write_5494 tty_write 3 5494 NULL
 +tomoyo_update_domain_5498 tomoyo_update_domain 2 5498 NULL nohasharray
@@ -118172,7 +117682,8 @@ index 0000000..f527934
 +sctp_setsockopt_autoclose_5775 sctp_setsockopt_autoclose 3 5775 NULL
 +__vxge_hw_blockpool_malloc_5786 __vxge_hw_blockpool_malloc 2 5786 NULL
 +nvme_trans_bdev_char_page_5797 nvme_trans_bdev_char_page 3 5797 NULL
 +sctp_setsockopt_autoclose_5775 sctp_setsockopt_autoclose 3 5775 NULL
 +__vxge_hw_blockpool_malloc_5786 __vxge_hw_blockpool_malloc 2 5786 NULL
 +nvme_trans_bdev_char_page_5797 nvme_trans_bdev_char_page 3 5797 NULL
-+skb_copy_datagram_iovec_5806 skb_copy_datagram_iovec 2-4 5806 NULL
++skb_copy_datagram_iovec_5806 skb_copy_datagram_iovec 2-4 5806 NULL nohasharray
++ath10k_core_create_5806 ath10k_core_create 1 5806 &skb_copy_datagram_iovec_5806
 +nv50_disp_pioc_create__5812 nv50_disp_pioc_create_ 5 5812 NULL
 +ceph_x_encrypt_buflen_5829 ceph_x_encrypt_buflen 0-1 5829 NULL
 +ceph_msg_new_5846 ceph_msg_new 2 5846 NULL
 +nv50_disp_pioc_create__5812 nv50_disp_pioc_create_ 5 5812 NULL
 +ceph_x_encrypt_buflen_5829 ceph_x_encrypt_buflen 0-1 5829 NULL
 +ceph_msg_new_5846 ceph_msg_new 2 5846 NULL
@@ -118255,6 +117766,7 @@ index 0000000..f527934
 +check_clk_sync_6717 check_clk_sync 2 6717 NULL
 +video_proc_write_6724 video_proc_write 3 6724 NULL
 +posix_acl_xattr_count_6725 posix_acl_xattr_count 0-1 6725 NULL
 +check_clk_sync_6717 check_clk_sync 2 6717 NULL
 +video_proc_write_6724 video_proc_write 3 6724 NULL
 +posix_acl_xattr_count_6725 posix_acl_xattr_count 0-1 6725 NULL
++inet_recv_error_6744 inet_recv_error 3 6744 NULL
 +kobject_add_varg_6781 kobject_add_varg 0 6781 NULL
 +iwl_dbgfs_channels_read_6784 iwl_dbgfs_channels_read 3 6784 NULL
 +ieee80211_if_read_6785 ieee80211_if_read 3 6785 NULL
 +kobject_add_varg_6781 kobject_add_varg 0 6781 NULL
 +iwl_dbgfs_channels_read_6784 iwl_dbgfs_channels_read 3 6784 NULL
 +ieee80211_if_read_6785 ieee80211_if_read 3 6785 NULL
@@ -118262,8 +117774,10 @@ index 0000000..f527934
 +hdlcdrv_register_6792 hdlcdrv_register 2 6792 NULL
 +ll_xattr_cache_find_6798 ll_xattr_cache_find 0 6798 NULL
 +tx_tx_done_data_read_6799 tx_tx_done_data_read 3 6799 NULL
 +hdlcdrv_register_6792 hdlcdrv_register 2 6792 NULL
 +ll_xattr_cache_find_6798 ll_xattr_cache_find 0 6798 NULL
 +tx_tx_done_data_read_6799 tx_tx_done_data_read 3 6799 NULL
++rounded_hashtable_size_6802 rounded_hashtable_size 0 6802 NULL
 +lbs_rdrf_write_6826 lbs_rdrf_write 3 6826 NULL
 +calc_pages_for_6838 calc_pages_for 0-1-2 6838 NULL
 +lbs_rdrf_write_6826 lbs_rdrf_write 3 6826 NULL
 +calc_pages_for_6838 calc_pages_for 0-1-2 6838 NULL
++blk_alloc_flush_queue_6839 blk_alloc_flush_queue 3 6839 NULL
 +mon_bin_read_6841 mon_bin_read 3 6841 NULL
 +snd_cs4281_BA0_read_6847 snd_cs4281_BA0_read 5 6847 NULL
 +perf_output_sample_ustack_6868 perf_output_sample_ustack 2 6868 NULL
 +mon_bin_read_6841 mon_bin_read 3 6841 NULL
 +snd_cs4281_BA0_read_6847 snd_cs4281_BA0_read 5 6847 NULL
 +perf_output_sample_ustack_6868 perf_output_sample_ustack 2 6868 NULL
@@ -118302,6 +117816,7 @@ index 0000000..f527934
 +osc_resend_count_seq_write_7120 osc_resend_count_seq_write 3 7120 NULL
 +qib_format_hwerrors_7133 qib_format_hwerrors 5 7133 NULL
 +kvm_mmu_notifier_test_young_7139 kvm_mmu_notifier_test_young 3 7139 NULL
 +osc_resend_count_seq_write_7120 osc_resend_count_seq_write 3 7120 NULL
 +qib_format_hwerrors_7133 qib_format_hwerrors 5 7133 NULL
 +kvm_mmu_notifier_test_young_7139 kvm_mmu_notifier_test_young 3 7139 NULL
++qlcnic_enable_msix_7144 qlcnic_enable_msix 2 7144 NULL
 +__alloc_objio_seg_7203 __alloc_objio_seg 1 7203 NULL
 +hdlc_loop_7255 hdlc_loop 0 7255 NULL
 +rx_rate_rx_frames_per_rates_read_7282 rx_rate_rx_frames_per_rates_read 3 7282 NULL nohasharray
 +__alloc_objio_seg_7203 __alloc_objio_seg 1 7203 NULL
 +hdlc_loop_7255 hdlc_loop 0 7255 NULL
 +rx_rate_rx_frames_per_rates_read_7282 rx_rate_rx_frames_per_rates_read 3 7282 NULL nohasharray
@@ -118426,8 +117941,10 @@ index 0000000..f527934
 +ctrl_out_8712 ctrl_out 3-5 8712 NULL
 +tracing_max_lat_write_8728 tracing_max_lat_write 3 8728 NULL
 +jffs2_acl_count_8729 jffs2_acl_count 0-1 8729 NULL
 +ctrl_out_8712 ctrl_out 3-5 8712 NULL
 +tracing_max_lat_write_8728 tracing_max_lat_write 3 8728 NULL
 +jffs2_acl_count_8729 jffs2_acl_count 0-1 8729 NULL
++iov_iter_zero_8748 iov_iter_zero 1 8748 NULL
 +tx_tx_exch_expiry_read_8749 tx_tx_exch_expiry_read 3 8749 NULL
 +compound_order_8750 compound_order 0 8750 NULL
 +tx_tx_exch_expiry_read_8749 tx_tx_exch_expiry_read 3 8749 NULL
 +compound_order_8750 compound_order 0 8750 NULL
++cfg80211_inform_bss_width_8754 cfg80211_inform_bss_width 10 8754 NULL
 +yurex_write_8761 yurex_write 3 8761 NULL
 +joydev_compat_ioctl_8765 joydev_compat_ioctl 2 8765 NULL
 +kstrtoint_from_user_8778 kstrtoint_from_user 2 8778 NULL
 +yurex_write_8761 yurex_write 3 8761 NULL
 +joydev_compat_ioctl_8765 joydev_compat_ioctl 2 8765 NULL
 +kstrtoint_from_user_8778 kstrtoint_from_user 2 8778 NULL
@@ -118576,6 +118093,7 @@ index 0000000..f527934
 +SYSC_move_pages_9986 SYSC_move_pages 2 9986 NULL
 +ceph_oloc_oid_to_pg_10003 ceph_oloc_oid_to_pg 0 10003 NULL
 +aat2870_dump_reg_10019 aat2870_dump_reg 0 10019 NULL
 +SYSC_move_pages_9986 SYSC_move_pages 2 9986 NULL
 +ceph_oloc_oid_to_pg_10003 ceph_oloc_oid_to_pg 0 10003 NULL
 +aat2870_dump_reg_10019 aat2870_dump_reg 0 10019 NULL
++asymmetric_key_generate_id_10064 asymmetric_key_generate_id 2-4 10064 NULL
 +ieee80211_set_probe_resp_10077 ieee80211_set_probe_resp 3 10077 NULL
 +get_elem_size_10110 get_elem_size 0-2 10110 NULL nohasharray
 +dynamic_ps_timeout_read_10110 dynamic_ps_timeout_read 3 10110 &get_elem_size_10110
 +ieee80211_set_probe_resp_10077 ieee80211_set_probe_resp 3 10077 NULL
 +get_elem_size_10110 get_elem_size 0-2 10110 NULL nohasharray
 +dynamic_ps_timeout_read_10110 dynamic_ps_timeout_read 3 10110 &get_elem_size_10110
@@ -118661,16 +118179,19 @@ index 0000000..f527934
 +SetLineNumber_11023 SetLineNumber 0 11023 NULL
 +nouveau_gpio_create__11048 nouveau_gpio_create_ 4 11048 NULL
 +tda10048_writeregbulk_11050 tda10048_writeregbulk 4 11050 NULL
 +SetLineNumber_11023 SetLineNumber 0 11023 NULL
 +nouveau_gpio_create__11048 nouveau_gpio_create_ 4 11048 NULL
 +tda10048_writeregbulk_11050 tda10048_writeregbulk 4 11050 NULL
-+insert_inline_extent_backref_11063 insert_inline_extent_backref 8 11063 NULL
++insert_inline_extent_backref_11063 insert_inline_extent_backref 8 11063 NULL nohasharray
++qlcnic_83xx_calculate_msix_vector_11063 qlcnic_83xx_calculate_msix_vector 0 11063 &insert_inline_extent_backref_11063
 +xfs_collapse_file_space_11075 xfs_collapse_file_space 2-3 11075 NULL
 +tcp_send_mss_11079 tcp_send_mss 0 11079 NULL
 +count_argc_11083 count_argc 0 11083 NULL
 +kvm_write_guest_cached_11106 kvm_write_guest_cached 4 11106 NULL
 +tw_change_queue_depth_11116 tw_change_queue_depth 2 11116 NULL
 +xfs_collapse_file_space_11075 xfs_collapse_file_space 2-3 11075 NULL
 +tcp_send_mss_11079 tcp_send_mss 0 11079 NULL
 +count_argc_11083 count_argc 0 11083 NULL
 +kvm_write_guest_cached_11106 kvm_write_guest_cached 4 11106 NULL
 +tw_change_queue_depth_11116 tw_change_queue_depth 2 11116 NULL
++tc90522_master_xfer_11119 tc90522_master_xfer 3 11119 NULL
 +page_offset_11120 page_offset 0 11120 NULL
 +tracing_buffers_read_11124 tracing_buffers_read 3 11124 NULL
 +alloc_alien_cache_11127 alloc_alien_cache 2 11127 NULL
 +snd_gf1_pcm_playback_silence_11172 snd_gf1_pcm_playback_silence 3-4 11172 NULL
 +page_offset_11120 page_offset 0 11120 NULL
 +tracing_buffers_read_11124 tracing_buffers_read 3 11124 NULL
 +alloc_alien_cache_11127 alloc_alien_cache 2 11127 NULL
 +snd_gf1_pcm_playback_silence_11172 snd_gf1_pcm_playback_silence 3-4 11172 NULL
++copy_from_iter_iovec_11196 copy_from_iter_iovec 2 11196 NULL
 +il_dbgfs_rx_queue_read_11221 il_dbgfs_rx_queue_read 3 11221 NULL
 +comedi_alloc_spriv_11234 comedi_alloc_spriv 2 11234 NULL
 +of_irq_count_11253 of_irq_count 0 11253 NULL
 +il_dbgfs_rx_queue_read_11221 il_dbgfs_rx_queue_read 3 11221 NULL
 +comedi_alloc_spriv_11234 comedi_alloc_spriv 2 11234 NULL
 +of_irq_count_11253 of_irq_count 0 11253 NULL
@@ -118746,6 +118267,7 @@ index 0000000..f527934
 +sctp_setsockopt_maxseg_11829 sctp_setsockopt_maxseg 3 11829 NULL
 +rts51x_read_status_11830 rts51x_read_status 4 11830 NULL
 +unix_stream_connect_11844 unix_stream_connect 3 11844 NULL
 +sctp_setsockopt_maxseg_11829 sctp_setsockopt_maxseg 3 11829 NULL
 +rts51x_read_status_11830 rts51x_read_status 4 11830 NULL
 +unix_stream_connect_11844 unix_stream_connect 3 11844 NULL
++pci_enable_msix_range_11852 pci_enable_msix_range 0-4 11852 NULL
 +ecryptfs_copy_filename_11868 ecryptfs_copy_filename 4 11868 NULL
 +l2cap_chan_send_11878 l2cap_chan_send 3 11878 NULL
 +ieee80211_rx_bss_info_11887 ieee80211_rx_bss_info 3 11887 NULL
 +ecryptfs_copy_filename_11868 ecryptfs_copy_filename 4 11868 NULL
 +l2cap_chan_send_11878 l2cap_chan_send 3 11878 NULL
 +ieee80211_rx_bss_info_11887 ieee80211_rx_bss_info 3 11887 NULL
@@ -118915,6 +118437,7 @@ index 0000000..f527934
 +udf_direct_IO_13765 udf_direct_IO 4 13765 NULL
 +ieee802154_alloc_device_13767 ieee802154_alloc_device 1 13767 NULL
 +fb_sys_read_13778 fb_sys_read 3 13778 NULL
 +udf_direct_IO_13765 udf_direct_IO 4 13765 NULL
 +ieee802154_alloc_device_13767 ieee802154_alloc_device 1 13767 NULL
 +fb_sys_read_13778 fb_sys_read 3 13778 NULL
++alloc_indirect_13783 alloc_indirect 1 13783 NULL
 +ath6kl_mgmt_powersave_ap_13791 ath6kl_mgmt_powersave_ap 6 13791 NULL
 +random_read_13815 random_read 3 13815 NULL
 +mutex_lock_interruptible_nested_13817 mutex_lock_interruptible_nested 0 13817 NULL
 +ath6kl_mgmt_powersave_ap_13791 ath6kl_mgmt_powersave_ap 6 13791 NULL
 +random_read_13815 random_read 3 13815 NULL
 +mutex_lock_interruptible_nested_13817 mutex_lock_interruptible_nested 0 13817 NULL
@@ -119062,6 +118585,7 @@ index 0000000..f527934
 +kovaplus_sysfs_read_15337 kovaplus_sysfs_read 6 15337 NULL
 +ioread16_15342 ioread16 0 15342 NULL
 +ept_prefetch_gpte_15348 ept_prefetch_gpte 4 15348 NULL
 +kovaplus_sysfs_read_15337 kovaplus_sysfs_read 6 15337 NULL
 +ioread16_15342 ioread16 0 15342 NULL
 +ept_prefetch_gpte_15348 ept_prefetch_gpte 4 15348 NULL
++blkdev_readpages_15357 blkdev_readpages 4 15357 NULL
 +acpi_ut_create_string_object_15360 acpi_ut_create_string_object 1 15360 NULL
 +graph_depth_read_15371 graph_depth_read 3 15371 NULL
 +fq_codel_zalloc_15378 fq_codel_zalloc 1 15378 NULL
 +acpi_ut_create_string_object_15360 acpi_ut_create_string_object 1 15360 NULL
 +graph_depth_read_15371 graph_depth_read 3 15371 NULL
 +fq_codel_zalloc_15378 fq_codel_zalloc 1 15378 NULL
@@ -119232,6 +118756,7 @@ index 0000000..f527934
 +ath6kl_wmi_send_mgmt_cmd_17347 ath6kl_wmi_send_mgmt_cmd 7 17347 NULL
 +mdc_import_seq_write_17409 mdc_import_seq_write 3 17409 NULL
 +lpfc_debugfs_dif_err_write_17424 lpfc_debugfs_dif_err_write 3 17424 NULL
 +ath6kl_wmi_send_mgmt_cmd_17347 ath6kl_wmi_send_mgmt_cmd 7 17347 NULL
 +mdc_import_seq_write_17409 mdc_import_seq_write 3 17409 NULL
 +lpfc_debugfs_dif_err_write_17424 lpfc_debugfs_dif_err_write 3 17424 NULL
++copy_from_iter_17433 copy_from_iter 2 17433 NULL
 +sta_connected_time_read_17435 sta_connected_time_read 3 17435 NULL
 +libcfs_ipif_enumerate_17445 libcfs_ipif_enumerate 0 17445 NULL
 +nla_get_u32_17455 nla_get_u32 0 17455 NULL
 +sta_connected_time_read_17435 sta_connected_time_read 3 17435 NULL
 +libcfs_ipif_enumerate_17445 libcfs_ipif_enumerate 0 17445 NULL
 +nla_get_u32_17455 nla_get_u32 0 17455 NULL
@@ -119261,6 +118786,7 @@ index 0000000..f527934
 +nv92_gpio_intr_mask_17773 nv92_gpio_intr_mask 4-3 17773 NULL
 +shrink_slab_node_17794 shrink_slab_node 3 17794 NULL
 +lpuart_copy_rx_to_tty_17801 lpuart_copy_rx_to_tty 3 17801 NULL
 +nv92_gpio_intr_mask_17773 nv92_gpio_intr_mask 4-3 17773 NULL
 +shrink_slab_node_17794 shrink_slab_node 3 17794 NULL
 +lpuart_copy_rx_to_tty_17801 lpuart_copy_rx_to_tty 3 17801 NULL
++_iwl_dbgfs_set_nic_temperature_write_17804 _iwl_dbgfs_set_nic_temperature_write 3 17804 NULL
 +gnet_stats_copy_app_17821 gnet_stats_copy_app 3 17821 NULL
 +cipso_v4_gentag_rbm_17836 cipso_v4_gentag_rbm 0 17836 NULL
 +em28xx_audio_ep_packet_size_17844 em28xx_audio_ep_packet_size 0 17844 NULL
 +gnet_stats_copy_app_17821 gnet_stats_copy_app 3 17821 NULL
 +cipso_v4_gentag_rbm_17836 cipso_v4_gentag_rbm 0 17836 NULL
 +em28xx_audio_ep_packet_size_17844 em28xx_audio_ep_packet_size 0 17844 NULL
@@ -119383,6 +118909,7 @@ index 0000000..f527934
 +devm_mdiobus_alloc_size_18902 devm_mdiobus_alloc_size 2 18902 NULL
 +tracing_thresh_write_18909 tracing_thresh_write 3 18909 NULL
 +ceph_setxattr_18913 ceph_setxattr 4 18913 NULL
 +devm_mdiobus_alloc_size_18902 devm_mdiobus_alloc_size 2 18902 NULL
 +tracing_thresh_write_18909 tracing_thresh_write 3 18909 NULL
 +ceph_setxattr_18913 ceph_setxattr 4 18913 NULL
++xfs_buf_read_uncached_18922 xfs_buf_read_uncached 3 18922 NULL
 +ieee80211_rx_mgmt_disassoc_18927 ieee80211_rx_mgmt_disassoc 3 18927 NULL
 +snapshot_write_next_18937 snapshot_write_next 0 18937 NULL
 +__nla_reserve_18974 __nla_reserve 3 18974 NULL
 +ieee80211_rx_mgmt_disassoc_18927 ieee80211_rx_mgmt_disassoc 3 18927 NULL
 +snapshot_write_next_18937 snapshot_write_next 0 18937 NULL
 +__nla_reserve_18974 __nla_reserve 3 18974 NULL
@@ -119470,6 +118997,7 @@ index 0000000..f527934
 +aes_decrypt_interrupt_read_19910 aes_decrypt_interrupt_read 3 19910 NULL
 +ps_upsd_max_apturn_read_19918 ps_upsd_max_apturn_read 3 19918 NULL
 +mangle_name_19923 mangle_name 0 19923 NULL
 +aes_decrypt_interrupt_read_19910 aes_decrypt_interrupt_read 3 19910 NULL
 +ps_upsd_max_apturn_read_19918 ps_upsd_max_apturn_read 3 19918 NULL
 +mangle_name_19923 mangle_name 0 19923 NULL
++tipc_sk_show_19928 tipc_sk_show 3-0 19928 NULL
 +cgroup_task_count_19930 cgroup_task_count 0 19930 NULL
 +guest_read_tsc_19931 guest_read_tsc 0 19931 NULL
 +azx_get_pos_lpib_19933 azx_get_pos_lpib 0 19933 NULL
 +cgroup_task_count_19930 cgroup_task_count 0 19930 NULL
 +guest_read_tsc_19931 guest_read_tsc 0 19931 NULL
 +azx_get_pos_lpib_19933 azx_get_pos_lpib 0 19933 NULL
@@ -119479,7 +119007,8 @@ index 0000000..f527934
 +ll_xattr_cache_list_19954 ll_xattr_cache_list 0 19954 NULL
 +get_jack_mode_name_19976 get_jack_mode_name 4 19976 NULL
 +attach_hdlc_protocol_19986 attach_hdlc_protocol 3 19986 NULL
 +ll_xattr_cache_list_19954 ll_xattr_cache_list 0 19954 NULL
 +get_jack_mode_name_19976 get_jack_mode_name 4 19976 NULL
 +attach_hdlc_protocol_19986 attach_hdlc_protocol 3 19986 NULL
-+rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 NULL
++rtw_set_wps_probe_resp_19989 rtw_set_wps_probe_resp 3 19989 NULL nohasharray
++i40e_reserve_msix_vectors_19989 i40e_reserve_msix_vectors 2 19989 &rtw_set_wps_probe_resp_19989
 +lustre_pack_request_19992 lustre_pack_request 3 19992 NULL
 +find_overflow_devnum_19995 find_overflow_devnum 0 19995 NULL
 +diva_um_idi_read_20003 diva_um_idi_read 0 20003 NULL
 +lustre_pack_request_19992 lustre_pack_request 3 19992 NULL
 +find_overflow_devnum_19995 find_overflow_devnum 0 19995 NULL
 +diva_um_idi_read_20003 diva_um_idi_read 0 20003 NULL
@@ -119577,6 +119106,7 @@ index 0000000..f527934
 +vfio_msi_enable_20906 vfio_msi_enable 2 20906 NULL
 +lbs_rdbbp_write_20918 lbs_rdbbp_write 3 20918 NULL
 +htable_bits_20933 htable_bits 0 20933 NULL
 +vfio_msi_enable_20906 vfio_msi_enable 2 20906 NULL
 +lbs_rdbbp_write_20918 lbs_rdbbp_write 3 20918 NULL
 +htable_bits_20933 htable_bits 0 20933 NULL
++cfg80211_rx_assoc_resp_20934 cfg80211_rx_assoc_resp 4 20934 NULL
 +altera_set_ir_post_20948 altera_set_ir_post 2 20948 NULL
 +rx_rx_phy_hdr_read_20950 rx_rx_phy_hdr_read 3 20950 NULL
 +rsxx_cram_read_20957 rsxx_cram_read 3 20957 NULL
 +altera_set_ir_post_20948 altera_set_ir_post 2 20948 NULL
 +rx_rx_phy_hdr_read_20950 rx_rx_phy_hdr_read 3 20950 NULL
 +rsxx_cram_read_20957 rsxx_cram_read 3 20957 NULL
@@ -119600,6 +119130,7 @@ index 0000000..f527934
 +_efx_mcdi_rpc_async_21119 _efx_mcdi_rpc_async 4-5 21119 NULL
 +i2400m_rx_trace_21127 i2400m_rx_trace 3 21127 NULL
 +mei_dbgfs_read_active_21172 mei_dbgfs_read_active 3 21172 NULL
 +_efx_mcdi_rpc_async_21119 _efx_mcdi_rpc_async 4-5 21119 NULL
 +i2400m_rx_trace_21127 i2400m_rx_trace 3 21127 NULL
 +mei_dbgfs_read_active_21172 mei_dbgfs_read_active 3 21172 NULL
++bioset_create_nobvec_21180 bioset_create_nobvec 1 21180 NULL
 +cx18_v4l2_read_21196 cx18_v4l2_read 3 21196 NULL
 +ipc_rcu_alloc_21208 ipc_rcu_alloc 1 21208 NULL
 +scsi_execute_req_flags_21215 scsi_execute_req_flags 5 21215 NULL
 +cx18_v4l2_read_21196 cx18_v4l2_read 3 21196 NULL
 +ipc_rcu_alloc_21208 ipc_rcu_alloc 1 21208 NULL
 +scsi_execute_req_flags_21215 scsi_execute_req_flags 5 21215 NULL
@@ -119646,7 +119177,8 @@ index 0000000..f527934
 +atalk_sendmsg_21677 atalk_sendmsg 4 21677 NULL
 +ocfs2_xattr_get_nolock_21678 ocfs2_xattr_get_nolock 0 21678 NULL
 +regmap_register_patch_21681 regmap_register_patch 3 21681 NULL
 +atalk_sendmsg_21677 atalk_sendmsg 4 21677 NULL
 +ocfs2_xattr_get_nolock_21678 ocfs2_xattr_get_nolock 0 21678 NULL
 +regmap_register_patch_21681 regmap_register_patch 3 21681 NULL
-+rtllib_alloc_txb_21687 rtllib_alloc_txb 1 21687 NULL
++rtllib_alloc_txb_21687 rtllib_alloc_txb 1 21687 NULL nohasharray
++proc_maps_open_21687 proc_maps_open 4 21687 &rtllib_alloc_txb_21687
 +evdev_ioctl_handler_21705 evdev_ioctl_handler 2 21705 NULL
 +unix_skb_len_21722 unix_skb_len 0 21722 NULL
 +lprocfs_wr_import_21728 lprocfs_wr_import 3 21728 NULL
 +evdev_ioctl_handler_21705 evdev_ioctl_handler 2 21705 NULL
 +unix_skb_len_21722 unix_skb_len 0 21722 NULL
 +lprocfs_wr_import_21728 lprocfs_wr_import 3 21728 NULL
@@ -119659,10 +119191,12 @@ index 0000000..f527934
 +oom_adj_read_21847 oom_adj_read 3 21847 NULL
 +lpfc_idiag_extacc_avail_get_21865 lpfc_idiag_extacc_avail_get 0-3 21865 NULL
 +brcms_debugfs_hardware_read_21867 brcms_debugfs_hardware_read 3 21867 NULL
 +oom_adj_read_21847 oom_adj_read 3 21847 NULL
 +lpfc_idiag_extacc_avail_get_21865 lpfc_idiag_extacc_avail_get 0-3 21865 NULL
 +brcms_debugfs_hardware_read_21867 brcms_debugfs_hardware_read 3 21867 NULL
++msix_capability_init_21870 msix_capability_init 0 21870 NULL
 +sisusbcon_bmove_21873 sisusbcon_bmove 6-5-7 21873 NULL
 +ldlm_lock_create_21888 ldlm_lock_create 7 21888 NULL
 +__btrfs_direct_write_21894 __btrfs_direct_write 3 21894 NULL
 +sisusbcon_bmove_21873 sisusbcon_bmove 6-5-7 21873 NULL
 +ldlm_lock_create_21888 ldlm_lock_create 7 21888 NULL
 +__btrfs_direct_write_21894 __btrfs_direct_write 3 21894 NULL
-+dbAllocCtl_21911 dbAllocCtl 0 21911 NULL
++dbAllocCtl_21911 dbAllocCtl 0 21911 NULL nohasharray
++nvme_submit_sync_cmd_21911 nvme_submit_sync_cmd 0 21911 &dbAllocCtl_21911
 +qsfp_1_read_21915 qsfp_1_read 3 21915 NULL
 +twl_i2c_write_u16_21953 twl_i2c_write_u16 3 21953 NULL
 +__build_xattrs_21979 __build_xattrs 0 21979 NULL
 +qsfp_1_read_21915 qsfp_1_read 3 21915 NULL
 +twl_i2c_write_u16_21953 twl_i2c_write_u16 3 21953 NULL
 +__build_xattrs_21979 __build_xattrs 0 21979 NULL
@@ -119708,10 +119242,12 @@ index 0000000..f527934
 +queue_max_segments_22441 queue_max_segments 0 22441 NULL
 +handle_received_packet_22457 handle_received_packet 3 22457 NULL
 +ecryptfs_write_22488 ecryptfs_write 4-3 22488 NULL
 +queue_max_segments_22441 queue_max_segments 0 22441 NULL
 +handle_received_packet_22457 handle_received_packet 3 22457 NULL
 +ecryptfs_write_22488 ecryptfs_write 4-3 22488 NULL
-+qib_user_sdma_alloc_header_22490 qib_user_sdma_alloc_header 2 22490 NULL
++qib_user_sdma_alloc_header_22490 qib_user_sdma_alloc_header 2 22490 NULL nohasharray
++video_write_22490 video_write 3 22490 &qib_user_sdma_alloc_header_22490
 +cache_write_procfs_22491 cache_write_procfs 3 22491 NULL
 +mutex_lock_interruptible_22505 mutex_lock_interruptible 0 22505 NULL
 +trim_no_bitmap_22524 trim_no_bitmap 4-3 22524 NULL
 +cache_write_procfs_22491 cache_write_procfs 3 22491 NULL
 +mutex_lock_interruptible_22505 mutex_lock_interruptible 0 22505 NULL
 +trim_no_bitmap_22524 trim_no_bitmap 4-3 22524 NULL
++ntb_setup_bwd_msix_22549 ntb_setup_bwd_msix 2 22549 NULL
 +ocfs2_read_extent_block_22550 ocfs2_read_extent_block 0 22550 NULL
 +agp_alloc_page_array_22554 agp_alloc_page_array 1 22554 NULL
 +dbFindCtl_22587 dbFindCtl 0 22587 NULL
 +ocfs2_read_extent_block_22550 ocfs2_read_extent_block 0 22550 NULL
 +agp_alloc_page_array_22554 agp_alloc_page_array 1 22554 NULL
 +dbFindCtl_22587 dbFindCtl 0 22587 NULL
@@ -119783,6 +119319,7 @@ index 0000000..f527934
 +gss_pipe_downcall_23182 gss_pipe_downcall 3 23182 NULL
 +mpi_alloc_limb_space_23190 mpi_alloc_limb_space 1 23190 NULL
 +tipc_sendmcast_23214 tipc_sendmcast 4 23214 NULL
 +gss_pipe_downcall_23182 gss_pipe_downcall 3 23182 NULL
 +mpi_alloc_limb_space_23190 mpi_alloc_limb_space 1 23190 NULL
 +tipc_sendmcast_23214 tipc_sendmcast 4 23214 NULL
++mcryptd_alloc_instance_23221 mcryptd_alloc_instance 2-3 23221 NULL
 +nft_hash_tbl_alloc_23224 nft_hash_tbl_alloc 1 23224 NULL
 +tty_buffer_request_room_23228 tty_buffer_request_room 2-0 23228 NULL
 +xlog_get_bp_23229 xlog_get_bp 2 23229 NULL nohasharray
 +nft_hash_tbl_alloc_23224 nft_hash_tbl_alloc 1 23224 NULL
 +tty_buffer_request_room_23228 tty_buffer_request_room 2-0 23228 NULL
 +xlog_get_bp_23229 xlog_get_bp 2 23229 NULL nohasharray
@@ -119854,6 +119391,7 @@ index 0000000..f527934
 +size_roundup_power2_23958 size_roundup_power2 0-1 23958 NULL
 +sddr55_write_data_23983 sddr55_write_data 4 23983 NULL
 +zd_usb_iowrite16v_async_23984 zd_usb_iowrite16v_async 3 23984 NULL
 +size_roundup_power2_23958 size_roundup_power2 0-1 23958 NULL
 +sddr55_write_data_23983 sddr55_write_data 4 23983 NULL
 +zd_usb_iowrite16v_async_23984 zd_usb_iowrite16v_async 3 23984 NULL
++xfs_zero_file_space_24000 xfs_zero_file_space 2-3 24000 NULL
 +cxgb_alloc_mem_24007 cxgb_alloc_mem 1 24007 NULL
 +give_pages_24021 give_pages 3 24021 NULL
 +adis16400_show_serial_number_24037 adis16400_show_serial_number 3 24037 NULL
 +cxgb_alloc_mem_24007 cxgb_alloc_mem 1 24007 NULL
 +give_pages_24021 give_pages 3 24021 NULL
 +adis16400_show_serial_number_24037 adis16400_show_serial_number 3 24037 NULL
@@ -119874,6 +119412,7 @@ index 0000000..f527934
 +safe_prepare_write_buffer_24187 safe_prepare_write_buffer 3 24187 NULL
 +nv94_aux_24197 nv94_aux 3-6 24197 NULL
 +ieee80211_if_read_dot11MeshHWMPpreqMinInterval_24208 ieee80211_if_read_dot11MeshHWMPpreqMinInterval 3 24208 NULL
 +safe_prepare_write_buffer_24187 safe_prepare_write_buffer 3 24187 NULL
 +nv94_aux_24197 nv94_aux 3-6 24197 NULL
 +ieee80211_if_read_dot11MeshHWMPpreqMinInterval_24208 ieee80211_if_read_dot11MeshHWMPpreqMinInterval 3 24208 NULL
++efx_vf_size_24213 efx_vf_size 0 24213 NULL
 +tcpprobe_sprint_24222 tcpprobe_sprint 0-2 24222 NULL
 +pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 3-2-1 24224 NULL nohasharray
 +mei_amthif_read_24224 mei_amthif_read 4 24224 &pcpu_embed_first_chunk_24224
 +tcpprobe_sprint_24222 tcpprobe_sprint 0-2 24222 NULL
 +pcpu_embed_first_chunk_24224 pcpu_embed_first_chunk 3-2-1 24224 NULL nohasharray
 +mei_amthif_read_24224 mei_amthif_read 4 24224 &pcpu_embed_first_chunk_24224
@@ -119896,6 +119435,7 @@ index 0000000..f527934
 +osc_cur_grant_bytes_seq_write_24396 osc_cur_grant_bytes_seq_write 3 24396 NULL
 +getxattr_24398 getxattr 4 24398 NULL nohasharray
 +pvr2_v4l2_ioctl_24398 pvr2_v4l2_ioctl 2 24398 &getxattr_24398
 +osc_cur_grant_bytes_seq_write_24396 osc_cur_grant_bytes_seq_write 3 24396 NULL
 +getxattr_24398 getxattr 4 24398 NULL nohasharray
 +pvr2_v4l2_ioctl_24398 pvr2_v4l2_ioctl 2 24398 &getxattr_24398
++populate_msi_sysfs_24399 populate_msi_sysfs 0 24399 NULL
 +blk_update_bidi_request_24415 blk_update_bidi_request 3-4 24415 NULL
 +nvme_trans_log_supp_pages_24418 nvme_trans_log_supp_pages 3 24418 NULL
 +b43_debugfs_read_24425 b43_debugfs_read 3 24425 NULL
 +blk_update_bidi_request_24415 blk_update_bidi_request 3-4 24415 NULL
 +nvme_trans_log_supp_pages_24418 nvme_trans_log_supp_pages 3 24418 NULL
 +b43_debugfs_read_24425 b43_debugfs_read 3 24425 NULL
@@ -119918,7 +119458,8 @@ index 0000000..f527934
 +SyS_pselect6_24582 SyS_pselect6 1 24582 NULL
 +udf_compute_nr_groups_24594 udf_compute_nr_groups 0 24594 NULL
 +sensor_hub_get_physical_device_count_24605 sensor_hub_get_physical_device_count 0 24605 NULL nohasharray
 +SyS_pselect6_24582 SyS_pselect6 1 24582 NULL
 +udf_compute_nr_groups_24594 udf_compute_nr_groups 0 24594 NULL
 +sensor_hub_get_physical_device_count_24605 sensor_hub_get_physical_device_count 0 24605 NULL nohasharray
-+lov_alloc_memmd_24605 lov_alloc_memmd 2 24605 &sensor_hub_get_physical_device_count_24605
++lov_alloc_memmd_24605 lov_alloc_memmd 2 24605 &sensor_hub_get_physical_device_count_24605 nohasharray
++i915_error_state_buf_init_24605 i915_error_state_buf_init 3 24605 &lov_alloc_memmd_24605
 +SyS_poll_24620 SyS_poll 2 24620 NULL
 +context_alloc_24645 context_alloc 3 24645 NULL
 +blk_rq_err_bytes_24650 blk_rq_err_bytes 0 24650 NULL
 +SyS_poll_24620 SyS_poll 2 24620 NULL
 +context_alloc_24645 context_alloc 3 24645 NULL
 +blk_rq_err_bytes_24650 blk_rq_err_bytes 0 24650 NULL
@@ -119947,7 +119488,8 @@ index 0000000..f527934
 +ocfs2_fiemap_24949 ocfs2_fiemap 4-3 24949 NULL
 +packet_sendmsg_24954 packet_sendmsg 4 24954 NULL
 +twl_i2c_write_u8_24976 twl_i2c_write_u8 3 24976 NULL
 +ocfs2_fiemap_24949 ocfs2_fiemap 4-3 24949 NULL
 +packet_sendmsg_24954 packet_sendmsg 4 24954 NULL
 +twl_i2c_write_u8_24976 twl_i2c_write_u8 3 24976 NULL
-+llc_ui_sendmsg_24987 llc_ui_sendmsg 4 24987 NULL
++llc_ui_sendmsg_24987 llc_ui_sendmsg 4 24987 NULL nohasharray
++ath10k_fw_crash_dump_read_24987 ath10k_fw_crash_dump_read 3 24987 &llc_ui_sendmsg_24987
 +info_debugfs_read_helper_24988 info_debugfs_read_helper 0 24988 NULL
 +key_conf_hw_key_idx_read_25003 key_conf_hw_key_idx_read 3 25003 NULL
 +il_dbgfs_channels_read_25005 il_dbgfs_channels_read 3 25005 NULL
 +info_debugfs_read_helper_24988 info_debugfs_read_helper 0 24988 NULL
 +key_conf_hw_key_idx_read_25003 key_conf_hw_key_idx_read 3 25003 NULL
 +il_dbgfs_channels_read_25005 il_dbgfs_channels_read 3 25005 NULL
@@ -119957,6 +119499,7 @@ index 0000000..f527934
 +btrfs_stack_key_blockptr_25058 btrfs_stack_key_blockptr 0 25058 NULL
 +gs_buf_alloc_25067 gs_buf_alloc 2 25067 NULL
 +ll_track_pid_seq_write_25068 ll_track_pid_seq_write 3 25068 NULL
 +btrfs_stack_key_blockptr_25058 btrfs_stack_key_blockptr 0 25058 NULL
 +gs_buf_alloc_25067 gs_buf_alloc 2 25067 NULL
 +ll_track_pid_seq_write_25068 ll_track_pid_seq_write 3 25068 NULL
++do_add_page_to_bio_25071 do_add_page_to_bio 2 25071 NULL
 +SYSC_listxattr_25072 SYSC_listxattr 3 25072 NULL
 +ima_appraise_measurement_25093 ima_appraise_measurement 6 25093 NULL
 +snd_rawmidi_kernel_write_25106 snd_rawmidi_kernel_write 3 25106 NULL
 +SYSC_listxattr_25072 SYSC_listxattr 3 25072 NULL
 +ima_appraise_measurement_25093 ima_appraise_measurement 6 25093 NULL
 +snd_rawmidi_kernel_write_25106 snd_rawmidi_kernel_write 3 25106 NULL
@@ -119970,6 +119513,7 @@ index 0000000..f527934
 +crypto_alloc_instance2_25277 crypto_alloc_instance2 3 25277 NULL
 +vfs_writev_25278 vfs_writev 3 25278 NULL
 +l2tp_session_create_25286 l2tp_session_create 1 25286 NULL
 +crypto_alloc_instance2_25277 crypto_alloc_instance2 3 25277 NULL
 +vfs_writev_25278 vfs_writev 3 25278 NULL
 +l2tp_session_create_25286 l2tp_session_create 1 25286 NULL
++cx25821_write_frame_25315 cx25821_write_frame 3 25315 NULL
 +ath9k_debugfs_read_buf_25316 ath9k_debugfs_read_buf 3 25316 NULL
 +rng_buffer_size_25348 rng_buffer_size 0 25348 NULL
 +SYSC_kexec_load_25361 SYSC_kexec_load 2 25361 NULL
 +ath9k_debugfs_read_buf_25316 ath9k_debugfs_read_buf 3 25316 NULL
 +rng_buffer_size_25348 rng_buffer_size 0 25348 NULL
 +SYSC_kexec_load_25361 SYSC_kexec_load 2 25361 NULL
@@ -120046,6 +119590,7 @@ index 0000000..f527934
 +mwifiex_regrdwr_write_26225 mwifiex_regrdwr_write 3 26225 NULL
 +_scsih_change_queue_depth_26230 _scsih_change_queue_depth 2 26230 NULL
 +rxrpc_recvmsg_26233 rxrpc_recvmsg 4 26233 NULL
 +mwifiex_regrdwr_write_26225 mwifiex_regrdwr_write 3 26225 NULL
 +_scsih_change_queue_depth_26230 _scsih_change_queue_depth 2 26230 NULL
 +rxrpc_recvmsg_26233 rxrpc_recvmsg 4 26233 NULL
++nlm_end_grace_read_26234 nlm_end_grace_read 3 26234 NULL
 +genwqe_ffdc_buff_size_26263 genwqe_ffdc_buff_size 0 26263 NULL
 +crypto_ctxsize_26278 crypto_ctxsize 0 26278 NULL
 +wacom_set_device_mode_26280 wacom_set_device_mode 3 26280 NULL
 +genwqe_ffdc_buff_size_26263 genwqe_ffdc_buff_size 0 26263 NULL
 +crypto_ctxsize_26278 crypto_ctxsize 0 26278 NULL
 +wacom_set_device_mode_26280 wacom_set_device_mode 3 26280 NULL
@@ -120063,7 +119608,8 @@ index 0000000..f527934
 +enc_pools_add_pages_26461 enc_pools_add_pages 1 26461 &tower_read_26461
 +ib_alloc_device_26483 ib_alloc_device 1 26483 NULL
 +ulong_write_file_26485 ulong_write_file 3 26485 NULL
 +enc_pools_add_pages_26461 enc_pools_add_pages 1 26461 &tower_read_26461
 +ib_alloc_device_26483 ib_alloc_device 1 26483 NULL
 +ulong_write_file_26485 ulong_write_file 3 26485 NULL
-+dvb_ca_en50221_io_ioctl_26490 dvb_ca_en50221_io_ioctl 2 26490 NULL
++dvb_ca_en50221_io_ioctl_26490 dvb_ca_en50221_io_ioctl 2 26490 NULL nohasharray
++msi_verify_entries_26490 msi_verify_entries 0 26490 &dvb_ca_en50221_io_ioctl_26490
 +read_vmcore_26501 read_vmcore 3 26501 NULL
 +uhid_char_write_26502 uhid_char_write 3 26502 NULL
 +vfio_pci_set_msi_trigger_26507 vfio_pci_set_msi_trigger 4-3 26507 NULL
 +read_vmcore_26501 read_vmcore 3 26501 NULL
 +uhid_char_write_26502 uhid_char_write 3 26502 NULL
 +vfio_pci_set_msi_trigger_26507 vfio_pci_set_msi_trigger 4-3 26507 NULL
@@ -120090,6 +119636,7 @@ index 0000000..f527934
 +cipso_v4_genopt_26812 cipso_v4_genopt 0 26812 NULL
 +iwl_trans_read_mem32_26825 iwl_trans_read_mem32 0 26825 NULL
 +smk_write_load_26829 smk_write_load 3 26829 NULL
 +cipso_v4_genopt_26812 cipso_v4_genopt 0 26812 NULL
 +iwl_trans_read_mem32_26825 iwl_trans_read_mem32 0 26825 NULL
 +smk_write_load_26829 smk_write_load 3 26829 NULL
++snd_pcm_action_mutex_26832 snd_pcm_action_mutex 0 26832 NULL
 +scnprint_id_26842 scnprint_id 3-0 26842 NULL
 +ecryptfs_miscdev_write_26847 ecryptfs_miscdev_write 3 26847 NULL
 +ss_alloc_ep_req_26848 ss_alloc_ep_req 2 26848 NULL
 +scnprint_id_26842 scnprint_id 3-0 26842 NULL
 +ecryptfs_miscdev_write_26847 ecryptfs_miscdev_write 3 26847 NULL
 +ss_alloc_ep_req_26848 ss_alloc_ep_req 2 26848 NULL
@@ -120147,7 +119694,8 @@ index 0000000..f527934
 +hcd_buffer_alloc_27495 hcd_buffer_alloc 2 27495 NULL
 +ip_set_get_h32_27498 ip_set_get_h32 0 27498 NULL
 +btrfs_get_64_27499 btrfs_get_64 0 27499 NULL
 +hcd_buffer_alloc_27495 hcd_buffer_alloc 2 27495 NULL
 +ip_set_get_h32_27498 ip_set_get_h32 0 27498 NULL
 +btrfs_get_64_27499 btrfs_get_64 0 27499 NULL
-+garmin_read_process_27509 garmin_read_process 3 27509 NULL
++garmin_read_process_27509 garmin_read_process 3 27509 NULL nohasharray
++mcryptd_hash_setkey_27509 mcryptd_hash_setkey 3 27509 &garmin_read_process_27509
 +oti_alloc_cookies_27510 oti_alloc_cookies 2 27510 NULL
 +ib_copy_to_udata_27525 ib_copy_to_udata 3 27525 NULL
 +snd_sonicvibes_getdmaa_27552 snd_sonicvibes_getdmaa 0 27552 NULL
 +oti_alloc_cookies_27510 oti_alloc_cookies 2 27510 NULL
 +ib_copy_to_udata_27525 ib_copy_to_udata 3 27525 NULL
 +snd_sonicvibes_getdmaa_27552 snd_sonicvibes_getdmaa 0 27552 NULL
@@ -120259,6 +119807,7 @@ index 0000000..f527934
 +setup_usemap_28636 setup_usemap 3-4 28636 NULL
 +qib_handle_6120_hwerrors_28642 qib_handle_6120_hwerrors 3 28642 NULL
 +p9_fcall_alloc_28652 p9_fcall_alloc 1 28652 NULL
 +setup_usemap_28636 setup_usemap 3-4 28636 NULL
 +qib_handle_6120_hwerrors_28642 qib_handle_6120_hwerrors 3 28642 NULL
 +p9_fcall_alloc_28652 p9_fcall_alloc 1 28652 NULL
++iwl_dbgfs_nic_temp_read_28662 iwl_dbgfs_nic_temp_read 3 28662 NULL
 +blk_queue_resize_tags_28670 blk_queue_resize_tags 2 28670 NULL
 +SyS_setgroups16_28686 SyS_setgroups16 1 28686 NULL
 +kvm_mmu_get_page_28692 kvm_mmu_get_page 2 28692 NULL
 +blk_queue_resize_tags_28670 blk_queue_resize_tags 2 28670 NULL
 +SyS_setgroups16_28686 SyS_setgroups16 1 28686 NULL
 +kvm_mmu_get_page_28692 kvm_mmu_get_page 2 28692 NULL
@@ -120326,6 +119875,7 @@ index 0000000..f527934
 +crypto_ahash_alignmask_29445 crypto_ahash_alignmask 0 29445 NULL
 +p9_client_prepare_req_29448 p9_client_prepare_req 3 29448 NULL
 +validate_scan_freqs_29462 validate_scan_freqs 0 29462 NULL
 +crypto_ahash_alignmask_29445 crypto_ahash_alignmask 0 29445 NULL
 +p9_client_prepare_req_29448 p9_client_prepare_req 3 29448 NULL
 +validate_scan_freqs_29462 validate_scan_freqs 0 29462 NULL
++memcg_update_cache_params_29465 memcg_update_cache_params 2 29465 NULL
 +SyS_flistxattr_29474 SyS_flistxattr 3 29474 NULL
 +do_register_entry_29478 do_register_entry 4 29478 NULL
 +simple_strtoul_29480 simple_strtoul 0 29480 NULL
 +SyS_flistxattr_29474 SyS_flistxattr 3 29474 NULL
 +do_register_entry_29478 do_register_entry 4 29478 NULL
 +simple_strtoul_29480 simple_strtoul 0 29480 NULL
@@ -120334,6 +119884,7 @@ index 0000000..f527934
 +usnic_vnic_spec_dump_29508 usnic_vnic_spec_dump 2 29508 NULL
 +write_file_regidx_29517 write_file_regidx 3 29517 NULL
 +atk_debugfs_ggrp_read_29522 atk_debugfs_ggrp_read 3 29522 NULL
 +usnic_vnic_spec_dump_29508 usnic_vnic_spec_dump 2 29508 NULL
 +write_file_regidx_29517 write_file_regidx 3 29517 NULL
 +atk_debugfs_ggrp_read_29522 atk_debugfs_ggrp_read 3 29522 NULL
++pci_enable_msix_29524 pci_enable_msix 0 29524 NULL
 +mic_vringh_copy_29531 mic_vringh_copy 4 29531 NULL
 +ftrace_write_29551 ftrace_write 3 29551 NULL
 +idetape_queue_rw_tail_29562 idetape_queue_rw_tail 3 29562 NULL
 +mic_vringh_copy_29531 mic_vringh_copy 4 29531 NULL
 +ftrace_write_29551 ftrace_write 3 29551 NULL
 +idetape_queue_rw_tail_29562 idetape_queue_rw_tail 3 29562 NULL
@@ -120358,6 +119909,7 @@ index 0000000..f527934
 +xfs_new_eof_29737 xfs_new_eof 2 29737 NULL
 +std_nic_write_29752 std_nic_write 3 29752 NULL
 +static_key_count_29771 static_key_count 0 29771 NULL
 +xfs_new_eof_29737 xfs_new_eof 2 29737 NULL
 +std_nic_write_29752 std_nic_write 3 29752 NULL
 +static_key_count_29771 static_key_count 0 29771 NULL
++tg3_irq_count_29786 tg3_irq_count 0 29786 NULL
 +dbAlloc_29794 dbAlloc 0 29794 NULL
 +tcp_sendpage_29829 tcp_sendpage 4 29829 NULL
 +__probe_kernel_write_29842 __probe_kernel_write 3 29842 NULL
 +dbAlloc_29794 dbAlloc 0 29794 NULL
 +tcp_sendpage_29829 tcp_sendpage 4 29829 NULL
 +__probe_kernel_write_29842 __probe_kernel_write 3 29842 NULL
@@ -120372,6 +119924,7 @@ index 0000000..f527934
 +write_file_queue_29922 write_file_queue 3 29922 NULL
 +__btrfs_getxattr_29947 __btrfs_getxattr 0 29947 NULL nohasharray
 +ipv6_recv_error_29947 ipv6_recv_error 3 29947 &__btrfs_getxattr_29947
 +write_file_queue_29922 write_file_queue 3 29922 NULL
 +__btrfs_getxattr_29947 __btrfs_getxattr 0 29947 NULL nohasharray
 +ipv6_recv_error_29947 ipv6_recv_error 3 29947 &__btrfs_getxattr_29947
++zero_iovec_29955 zero_iovec 1 29955 NULL
 +dev_mem_write_30028 dev_mem_write 3 30028 NULL
 +alloc_netdev_mqs_30030 alloc_netdev_mqs 1 30030 NULL
 +sysfs_add_file_mode_ns_30038 sysfs_add_file_mode_ns 0 30038 NULL
 +dev_mem_write_30028 dev_mem_write 3 30028 NULL
 +alloc_netdev_mqs_30030 alloc_netdev_mqs 1 30030 NULL
 +sysfs_add_file_mode_ns_30038 sysfs_add_file_mode_ns 0 30038 NULL
@@ -120423,7 +119976,8 @@ index 0000000..f527934
 +dwc3_testmode_write_30516 dwc3_testmode_write 3 30516 NULL
 +debug_debug2_read_30526 debug_debug2_read 3 30526 NULL nohasharray
 +set_config_30526 set_config 0 30526 &debug_debug2_read_30526
 +dwc3_testmode_write_30516 dwc3_testmode_write 3 30516 NULL
 +debug_debug2_read_30526 debug_debug2_read 3 30526 NULL nohasharray
 +set_config_30526 set_config 0 30526 &debug_debug2_read_30526
-+xfs_sb_version_hasftype_30559 xfs_sb_version_hasftype 0 30559 NULL
++xfs_sb_version_hasftype_30559 xfs_sb_version_hasftype 0 30559 NULL nohasharray
++ixgbevf_acquire_msix_vectors_30559 ixgbevf_acquire_msix_vectors 2 30559 &xfs_sb_version_hasftype_30559
 +disk_expand_part_tbl_30561 disk_expand_part_tbl 2 30561 NULL
 +set_le_30581 set_le 4 30581 NULL
 +blk_init_tags_30592 blk_init_tags 1 30592 NULL
 +disk_expand_part_tbl_30561 disk_expand_part_tbl 2 30561 NULL
 +set_le_30581 set_le 4 30581 NULL
 +blk_init_tags_30592 blk_init_tags 1 30592 NULL
@@ -120451,9 +120005,11 @@ index 0000000..f527934
 +ath10k_write_fw_dbglog_30835 ath10k_write_fw_dbglog 3 30835 NULL
 +of_gpio_named_count_30841 of_gpio_named_count 0 30841 NULL
 +sctp_setsockopt_auth_chunk_30843 sctp_setsockopt_auth_chunk 3 30843 NULL
 +ath10k_write_fw_dbglog_30835 ath10k_write_fw_dbglog 3 30835 NULL
 +of_gpio_named_count_30841 of_gpio_named_count 0 30841 NULL
 +sctp_setsockopt_auth_chunk_30843 sctp_setsockopt_auth_chunk 3 30843 NULL
++cfg80211_rx_mgmt_30844 cfg80211_rx_mgmt 5 30844 NULL
 +wd_autoreset_write_30862 wd_autoreset_write 3 30862 NULL
 +ieee80211_if_fmt_dropped_frames_no_route_30884 ieee80211_if_fmt_dropped_frames_no_route 3 30884 NULL
 +pn_recvmsg_30887 pn_recvmsg 4 30887 NULL
 +wd_autoreset_write_30862 wd_autoreset_write 3 30862 NULL
 +ieee80211_if_fmt_dropped_frames_no_route_30884 ieee80211_if_fmt_dropped_frames_no_route 3 30884 NULL
 +pn_recvmsg_30887 pn_recvmsg 4 30887 NULL
++copy_to_iter_30901 copy_to_iter 2 30901 NULL
 +usnic_debugfs_buildinfo_read_30928 usnic_debugfs_buildinfo_read 3 30928 NULL
 +sctp_setsockopt_rtoinfo_30941 sctp_setsockopt_rtoinfo 3 30941 NULL
 +tty_insert_flip_string_flags_30969 tty_insert_flip_string_flags 4 30969 NULL
 +usnic_debugfs_buildinfo_read_30928 usnic_debugfs_buildinfo_read 3 30928 NULL
 +sctp_setsockopt_rtoinfo_30941 sctp_setsockopt_rtoinfo 3 30941 NULL
 +tty_insert_flip_string_flags_30969 tty_insert_flip_string_flags 4 30969 NULL
@@ -120471,6 +120027,7 @@ index 0000000..f527934
 +kimage_normal_alloc_31140 kimage_normal_alloc 3 31140 NULL
 +size_inside_page_31141 size_inside_page 0 31141 NULL
 +w9966_v4l_read_31148 w9966_v4l_read 3 31148 NULL
 +kimage_normal_alloc_31140 kimage_normal_alloc 3 31140 NULL
 +size_inside_page_31141 size_inside_page 0 31141 NULL
 +w9966_v4l_read_31148 w9966_v4l_read 3 31148 NULL
++nvme_set_features_31169 nvme_set_features 0 31169 NULL
 +ch_do_scsi_31171 ch_do_scsi 4 31171 NULL
 +r592_read_fifo_pio_31198 r592_read_fifo_pio 3 31198 NULL
 +mtdchar_readoob_31200 mtdchar_readoob 4 31200 NULL
 +ch_do_scsi_31171 ch_do_scsi 4 31171 NULL
 +r592_read_fifo_pio_31198 r592_read_fifo_pio 3 31198 NULL
 +mtdchar_readoob_31200 mtdchar_readoob 4 31200 NULL
@@ -120482,6 +120039,7 @@ index 0000000..f527934
 +_create_sg_bios_31244 _create_sg_bios 4 31244 NULL
 +ieee80211_if_read_last_beacon_31257 ieee80211_if_read_last_beacon 3 31257 NULL
 +hash_netportnet4_expire_31290 hash_netportnet4_expire 4 31290 NULL
 +_create_sg_bios_31244 _create_sg_bios 4 31244 NULL
 +ieee80211_if_read_last_beacon_31257 ieee80211_if_read_last_beacon 3 31257 NULL
 +hash_netportnet4_expire_31290 hash_netportnet4_expire 4 31290 NULL
++iwl_dbgfs_set_nic_temperature_read_31300 iwl_dbgfs_set_nic_temperature_read 3 31300 NULL
 +uvc_simplify_fraction_31303 uvc_simplify_fraction 3 31303 NULL
 +sisusbcon_scroll_31315 sisusbcon_scroll 5-2-3 31315 NULL
 +command_file_write_31318 command_file_write 3 31318 NULL
 +uvc_simplify_fraction_31303 uvc_simplify_fraction 3 31303 NULL
 +sisusbcon_scroll_31315 sisusbcon_scroll 5-2-3 31315 NULL
 +command_file_write_31318 command_file_write 3 31318 NULL
@@ -120573,6 +120131,7 @@ index 0000000..f527934
 +kiblnd_alloc_pages_32092 kiblnd_alloc_pages 3 32092 NULL
 +bio_alloc_32095 bio_alloc 2 32095 NULL
 +ath6kl_fwlog_read_32101 ath6kl_fwlog_read 3 32101 NULL
 +kiblnd_alloc_pages_32092 kiblnd_alloc_pages 3 32092 NULL
 +bio_alloc_32095 bio_alloc 2 32095 NULL
 +ath6kl_fwlog_read_32101 ath6kl_fwlog_read 3 32101 NULL
++wil_read_file_recovery_32104 wil_read_file_recovery 3 32104 NULL
 +disk_status_32120 disk_status 4 32120 NULL
 +kobject_add_internal_32133 kobject_add_internal 0 32133 NULL
 +venus_link_32165 venus_link 5 32165 NULL
 +disk_status_32120 disk_status 4 32120 NULL
 +kobject_add_internal_32133 kobject_add_internal 0 32133 NULL
 +venus_link_32165 venus_link 5 32165 NULL
@@ -120745,7 +120304,8 @@ index 0000000..f527934
 +ixgbe_dbg_netdev_ops_write_34141 ixgbe_dbg_netdev_ops_write 3 34141 NULL
 +shmem_pread_fast_34147 shmem_pread_fast 3 34147 NULL
 +skb_to_sgvec_34171 skb_to_sgvec 0 34171 NULL
 +ixgbe_dbg_netdev_ops_write_34141 ixgbe_dbg_netdev_ops_write 3 34141 NULL
 +shmem_pread_fast_34147 shmem_pread_fast 3 34147 NULL
 +skb_to_sgvec_34171 skb_to_sgvec 0 34171 NULL
-+rsi_debug_zone_write_34206 rsi_debug_zone_write 3 34206 NULL
++rsi_debug_zone_write_34206 rsi_debug_zone_write 3 34206 NULL nohasharray
++rbd_osd_req_create_34206 rbd_osd_req_create 3 34206 &rsi_debug_zone_write_34206
 +ext4_da_write_begin_34215 ext4_da_write_begin 3-4 34215 NULL
 +bl_pipe_downcall_34264 bl_pipe_downcall 3 34264 NULL
 +device_private_init_34279 device_private_init 0 34279 NULL
 +ext4_da_write_begin_34215 ext4_da_write_begin 3-4 34215 NULL
 +bl_pipe_downcall_34264 bl_pipe_downcall 3 34264 NULL
 +device_private_init_34279 device_private_init 0 34279 NULL
@@ -120831,6 +120391,7 @@ index 0000000..f527934
 +sisusb_copy_memory_35016 sisusb_copy_memory 4 35016 NULL
 +coda_psdev_read_35029 coda_psdev_read 3 35029 NULL
 +hwdep_read_locked_35037 hwdep_read_locked 3 35037 NULL
 +sisusb_copy_memory_35016 sisusb_copy_memory 4 35016 NULL
 +coda_psdev_read_35029 coda_psdev_read 3 35029 NULL
 +hwdep_read_locked_35037 hwdep_read_locked 3 35037 NULL
++proc_setgroups_write_35039 proc_setgroups_write 3 35039 NULL
 +pwr_connection_out_of_sync_read_35061 pwr_connection_out_of_sync_read 3 35061 NULL
 +__kfifo_uint_must_check_helper_35097 __kfifo_uint_must_check_helper 0-1 35097 NULL
 +capi_write_35104 capi_write 3 35104 NULL nohasharray
 +pwr_connection_out_of_sync_read_35061 pwr_connection_out_of_sync_read 3 35061 NULL
 +__kfifo_uint_must_check_helper_35097 __kfifo_uint_must_check_helper 0-1 35097 NULL
 +capi_write_35104 capi_write 3 35104 NULL nohasharray
@@ -120853,7 +120414,8 @@ index 0000000..f527934
 +dma_show_regs_35266 dma_show_regs 3 35266 NULL
 +irda_recvmsg_stream_35280 irda_recvmsg_stream 4 35280 NULL
 +i2o_block_end_request_35282 i2o_block_end_request 3 35282 NULL
 +dma_show_regs_35266 dma_show_regs 3 35266 NULL
 +irda_recvmsg_stream_35280 irda_recvmsg_stream 4 35280 NULL
 +i2o_block_end_request_35282 i2o_block_end_request 3 35282 NULL
-+isr_rx_rdys_read_35283 isr_rx_rdys_read 3 35283 NULL
++isr_rx_rdys_read_35283 isr_rx_rdys_read 3 35283 NULL nohasharray
++nvkm_notify_init_35283 nvkm_notify_init 7 35283 &isr_rx_rdys_read_35283
 +__btrfs_buffered_write_35311 __btrfs_buffered_write 3 35311 NULL nohasharray
 +brcmf_sdio_forensic_read_35311 brcmf_sdio_forensic_read 3 35311 &__btrfs_buffered_write_35311
 +tracing_read_pipe_35312 tracing_read_pipe 3 35312 NULL
 +__btrfs_buffered_write_35311 __btrfs_buffered_write 3 35311 NULL nohasharray
 +brcmf_sdio_forensic_read_35311 brcmf_sdio_forensic_read 3 35311 &__btrfs_buffered_write_35311
 +tracing_read_pipe_35312 tracing_read_pipe 3 35312 NULL
@@ -120987,6 +120549,7 @@ index 0000000..f527934
 +iscsi_host_alloc_36671 iscsi_host_alloc 2 36671 NULL
 +xillybus_read_36678 xillybus_read 3 36678 NULL
 +gsmtty_write_36702 gsmtty_write 3 36702 NULL
 +iscsi_host_alloc_36671 iscsi_host_alloc 2 36671 NULL
 +xillybus_read_36678 xillybus_read 3 36678 NULL
 +gsmtty_write_36702 gsmtty_write 3 36702 NULL
++path_getxattr_36717 path_getxattr 4 36717 NULL
 +snd_rawmidi_kernel_read1_36740 snd_rawmidi_kernel_read1 4-0 36740 NULL
 +cxgbi_device_register_36746 cxgbi_device_register 1-2 36746 NULL
 +ps_poll_upsd_timeouts_read_36755 ps_poll_upsd_timeouts_read 3 36755 NULL
 +snd_rawmidi_kernel_read1_36740 snd_rawmidi_kernel_read1 4-0 36740 NULL
 +cxgbi_device_register_36746 cxgbi_device_register 1-2 36746 NULL
 +ps_poll_upsd_timeouts_read_36755 ps_poll_upsd_timeouts_read 3 36755 NULL
@@ -121154,6 +120717,7 @@ index 0000000..f527934
 +dev_names_read_38509 dev_names_read 3 38509 NULL
 +iscsi_create_iface_38510 iscsi_create_iface 5 38510 NULL
 +event_rx_mismatch_read_38518 event_rx_mismatch_read 3 38518 NULL
 +dev_names_read_38509 dev_names_read 3 38509 NULL
 +iscsi_create_iface_38510 iscsi_create_iface 5 38510 NULL
 +event_rx_mismatch_read_38518 event_rx_mismatch_read 3 38518 NULL
++set_queue_count_38519 set_queue_count 0 38519 NULL
 +ubifs_idx_node_sz_38546 ubifs_idx_node_sz 0-2 38546 NULL
 +btrfs_discard_extent_38547 btrfs_discard_extent 2 38547 NULL
 +kuc_len_38557 kuc_len 0-1 38557 NULL
 +ubifs_idx_node_sz_38546 ubifs_idx_node_sz 0-2 38546 NULL
 +btrfs_discard_extent_38547 btrfs_discard_extent 2 38547 NULL
 +kuc_len_38557 kuc_len 0-1 38557 NULL
@@ -121207,6 +120771,7 @@ index 0000000..f527934
 +ath9k_hw_ar9003_dump_eeprom_39156 ath9k_hw_ar9003_dump_eeprom 5-4 39156 NULL
 +echo_client_kbrw_39170 echo_client_kbrw 6 39170 NULL
 +ext3_xattr_check_names_39174 ext3_xattr_check_names 0 39174 NULL
 +ath9k_hw_ar9003_dump_eeprom_39156 ath9k_hw_ar9003_dump_eeprom 5-4 39156 NULL
 +echo_client_kbrw_39170 echo_client_kbrw 6 39170 NULL
 +ext3_xattr_check_names_39174 ext3_xattr_check_names 0 39174 NULL
++mlx4_en_create_tx_ring_39179 mlx4_en_create_tx_ring 4 39179 NULL
 +ubi_more_update_data_39189 ubi_more_update_data 4 39189 NULL
 +qcam_read_bytes_39205 qcam_read_bytes 0 39205 NULL
 +ivtv_v4l2_write_39226 ivtv_v4l2_write 3 39226 NULL
 +ubi_more_update_data_39189 ubi_more_update_data 4 39189 NULL
 +qcam_read_bytes_39205 qcam_read_bytes 0 39205 NULL
 +ivtv_v4l2_write_39226 ivtv_v4l2_write 3 39226 NULL
@@ -121288,7 +120853,8 @@ index 0000000..f527934
 +sctp_setsockopt_delayed_ack_40129 sctp_setsockopt_delayed_ack 3 40129 NULL
 +dwc2_max_desc_num_40132 dwc2_max_desc_num 0 40132 NULL
 +rx_rx_frame_checksum_read_40140 rx_rx_frame_checksum_read 3 40140 NULL
 +sctp_setsockopt_delayed_ack_40129 sctp_setsockopt_delayed_ack 3 40129 NULL
 +dwc2_max_desc_num_40132 dwc2_max_desc_num 0 40132 NULL
 +rx_rx_frame_checksum_read_40140 rx_rx_frame_checksum_read 3 40140 NULL
-+ath10k_write_simulate_fw_crash_40143 ath10k_write_simulate_fw_crash 3 40143 NULL
++ath10k_write_simulate_fw_crash_40143 ath10k_write_simulate_fw_crash 3 40143 NULL nohasharray
++kvm_mmu_notifier_clear_flush_young_40143 kvm_mmu_notifier_clear_flush_young 3-4 40143 &ath10k_write_simulate_fw_crash_40143
 +iwch_alloc_fastreg_pbl_40153 iwch_alloc_fastreg_pbl 2 40153 NULL
 +pt_write_40159 pt_write 3 40159 NULL
 +scsi_sg_count_40182 scsi_sg_count 0 40182 NULL
 +iwch_alloc_fastreg_pbl_40153 iwch_alloc_fastreg_pbl 2 40153 NULL
 +pt_write_40159 pt_write 3 40159 NULL
 +scsi_sg_count_40182 scsi_sg_count 0 40182 NULL
@@ -121315,6 +120881,7 @@ index 0000000..f527934
 +get_chars_40373 get_chars 3 40373 NULL
 +fb_prepare_extra_logos_40429 fb_prepare_extra_logos 0-2 40429 NULL
 +proc_write_driver_40432 proc_write_driver 3 40432 NULL
 +get_chars_40373 get_chars 3 40373 NULL
 +fb_prepare_extra_logos_40429 fb_prepare_extra_logos 0-2 40429 NULL
 +proc_write_driver_40432 proc_write_driver 3 40432 NULL
++repair_io_failure_40452 repair_io_failure 4-3 40452 NULL
 +tomoyo_update_policy_40458 tomoyo_update_policy 2 40458 NULL
 +zd_usb_scnprint_id_40459 zd_usb_scnprint_id 0-3 40459 NULL
 +gp2ap020a00f_write_event_threshold_40461 gp2ap020a00f_write_event_threshold 2 40461 NULL
 +tomoyo_update_policy_40458 tomoyo_update_policy 2 40458 NULL
 +zd_usb_scnprint_id_40459 zd_usb_scnprint_id 0-3 40459 NULL
 +gp2ap020a00f_write_event_threshold_40461 gp2ap020a00f_write_event_threshold 2 40461 NULL
@@ -121328,6 +120895,7 @@ index 0000000..f527934
 +ixgbe_dbg_reg_ops_read_40540 ixgbe_dbg_reg_ops_read 3 40540 NULL
 +ima_write_policy_40548 ima_write_policy 3 40548 NULL
 +esp_alloc_tmp_40558 esp_alloc_tmp 3-2 40558 NULL
 +ixgbe_dbg_reg_ops_read_40540 ixgbe_dbg_reg_ops_read 3 40540 NULL
 +ima_write_policy_40548 ima_write_policy 3 40548 NULL
 +esp_alloc_tmp_40558 esp_alloc_tmp 3-2 40558 NULL
++bl_alloc_init_bio_40569 bl_alloc_init_bio 1 40569 NULL
 +get_priv_descr_and_size_40612 get_priv_descr_and_size 0 40612 NULL
 +twl4030_kpwrite_u8_40665 twl4030_kpwrite_u8 3 40665 NULL
 +__cfg80211_roamed_40668 __cfg80211_roamed 4-6 40668 NULL
 +get_priv_descr_and_size_40612 get_priv_descr_and_size 0 40612 NULL
 +twl4030_kpwrite_u8_40665 twl4030_kpwrite_u8 3 40665 NULL
 +__cfg80211_roamed_40668 __cfg80211_roamed 4-6 40668 NULL
@@ -121364,6 +120932,7 @@ index 0000000..f527934
 +gfs2_ea_find_40913 gfs2_ea_find 0 40913 NULL
 +vol_cdev_write_40915 vol_cdev_write 3 40915 NULL
 +snd_vx_create_40948 snd_vx_create 4 40948 NULL
 +gfs2_ea_find_40913 gfs2_ea_find 0 40913 NULL
 +vol_cdev_write_40915 vol_cdev_write 3 40915 NULL
 +snd_vx_create_40948 snd_vx_create 4 40948 NULL
++path_listxattr_40949 path_listxattr 3 40949 NULL
 +rds_sendmsg_40976 rds_sendmsg 4 40976 NULL
 +ima_appraise_measurement_40978 ima_appraise_measurement 6 40978 NULL
 +il_dbgfs_fh_reg_read_40993 il_dbgfs_fh_reg_read 3 40993 NULL
 +rds_sendmsg_40976 rds_sendmsg 4 40976 NULL
 +ima_appraise_measurement_40978 ima_appraise_measurement 6 40978 NULL
 +il_dbgfs_fh_reg_read_40993 il_dbgfs_fh_reg_read 3 40993 NULL
@@ -121382,12 +120951,14 @@ index 0000000..f527934
 +nvme_map_user_pages_41093 nvme_map_user_pages 4-3 41093 NULL nohasharray
 +roccat_read_41093 roccat_read 3 41093 &nvme_map_user_pages_41093
 +dma_attach_41094 dma_attach 5-6 41094 NULL
 +nvme_map_user_pages_41093 nvme_map_user_pages 4-3 41093 NULL nohasharray
 +roccat_read_41093 roccat_read 3 41093 &nvme_map_user_pages_41093
 +dma_attach_41094 dma_attach 5-6 41094 NULL
++nl80211_send_mlme_event_41099 nl80211_send_mlme_event 4 41099 NULL
 +provide_user_output_41105 provide_user_output 3 41105 NULL
 +f_audio_buffer_alloc_41110 f_audio_buffer_alloc 1 41110 NULL
 +ath10k_read_wmi_services_41112 ath10k_read_wmi_services 3 41112 NULL
 +v4l2_ctrl_new_int_menu_41151 v4l2_ctrl_new_int_menu 4 41151 NULL
 +tx_frag_mpdu_alloc_failed_read_41167 tx_frag_mpdu_alloc_failed_read 3 41167 NULL
 +dvb_ca_write_41171 dvb_ca_write 3 41171 NULL
 +provide_user_output_41105 provide_user_output 3 41105 NULL
 +f_audio_buffer_alloc_41110 f_audio_buffer_alloc 1 41110 NULL
 +ath10k_read_wmi_services_41112 ath10k_read_wmi_services 3 41112 NULL
 +v4l2_ctrl_new_int_menu_41151 v4l2_ctrl_new_int_menu 4 41151 NULL
 +tx_frag_mpdu_alloc_failed_read_41167 tx_frag_mpdu_alloc_failed_read 3 41167 NULL
 +dvb_ca_write_41171 dvb_ca_write 3 41171 NULL
++netif_get_num_default_rss_queues_41187 netif_get_num_default_rss_queues 0 41187 NULL
 +dfs_file_write_41196 dfs_file_write 3 41196 NULL
 +nfs_page_array_len_41219 nfs_page_array_len 0-2-1 41219 NULL
 +cfg80211_process_disassoc_41231 cfg80211_process_disassoc 3 41231 NULL
 +dfs_file_write_41196 dfs_file_write 3 41196 NULL
 +nfs_page_array_len_41219 nfs_page_array_len 0-2-1 41219 NULL
 +cfg80211_process_disassoc_41231 cfg80211_process_disassoc 3 41231 NULL
@@ -121524,7 +121095,8 @@ index 0000000..f527934
 +ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout_42635 ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout 3 42635 NULL
 +scsi_activate_tcq_42640 scsi_activate_tcq 2 42640 NULL
 +br_mdb_rehash_42643 br_mdb_rehash 2 42643 NULL
 +ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout_42635 ieee80211_if_fmt_dot11MeshHWMPactivePathTimeout 3 42635 NULL
 +scsi_activate_tcq_42640 scsi_activate_tcq 2 42640 NULL
 +br_mdb_rehash_42643 br_mdb_rehash 2 42643 NULL
-+parport_pc_compat_write_block_pio_42644 parport_pc_compat_write_block_pio 3 42644 NULL
++parport_pc_compat_write_block_pio_42644 parport_pc_compat_write_block_pio 3 42644 NULL nohasharray
++num_controllers_42644 num_controllers 0 42644 &parport_pc_compat_write_block_pio_42644
 +_regmap_raw_write_42652 _regmap_raw_write 4-2 42652 NULL
 +request_key_and_link_42693 request_key_and_link 4 42693 NULL
 +vb2_read_42703 vb2_read 3 42703 NULL
 +_regmap_raw_write_42652 _regmap_raw_write 4-2 42652 NULL
 +request_key_and_link_42693 request_key_and_link 4 42693 NULL
 +vb2_read_42703 vb2_read 3 42703 NULL
@@ -121553,11 +121125,13 @@ index 0000000..f527934
 +sta_last_rx_rate_read_42909 sta_last_rx_rate_read 3 42909 NULL
 +sctp_getsockopt_maxburst_42941 sctp_getsockopt_maxburst 2 42941 NULL
 +vx_reset_chk_42946 vx_reset_chk 0 42946 NULL
 +sta_last_rx_rate_read_42909 sta_last_rx_rate_read 3 42909 NULL
 +sctp_getsockopt_maxburst_42941 sctp_getsockopt_maxburst 2 42941 NULL
 +vx_reset_chk_42946 vx_reset_chk 0 42946 NULL
++ntb_setup_snb_msix_42971 ntb_setup_snb_msix 2 42971 NULL
 +compat_udpv6_setsockopt_42981 compat_udpv6_setsockopt 5 42981 NULL
 +nfs_idmap_get_desc_42990 nfs_idmap_get_desc 4-2 42990 NULL nohasharray
 +rtw_os_xmit_resource_alloc_42990 rtw_os_xmit_resource_alloc 3 42990 &nfs_idmap_get_desc_42990
 +isr_rx_mem_overflow_read_43025 isr_rx_mem_overflow_read 3 43025 NULL
 +wep_default_key_count_read_43035 wep_default_key_count_read 3 43035 NULL
 +compat_udpv6_setsockopt_42981 compat_udpv6_setsockopt 5 42981 NULL
 +nfs_idmap_get_desc_42990 nfs_idmap_get_desc 4-2 42990 NULL nohasharray
 +rtw_os_xmit_resource_alloc_42990 rtw_os_xmit_resource_alloc 3 42990 &nfs_idmap_get_desc_42990
 +isr_rx_mem_overflow_read_43025 isr_rx_mem_overflow_read 3 43025 NULL
 +wep_default_key_count_read_43035 wep_default_key_count_read 3 43035 NULL
++__bioset_create_43059 __bioset_create 1 43059 NULL
 +nouveau_gpuobj_create__43072 nouveau_gpuobj_create_ 9 43072 NULL
 +nfs_map_group_to_gid_43082 nfs_map_group_to_gid 3 43082 NULL
 +_xfer_secondary_pool_43089 _xfer_secondary_pool 2 43089 NULL
 +nouveau_gpuobj_create__43072 nouveau_gpuobj_create_ 9 43072 NULL
 +nfs_map_group_to_gid_43082 nfs_map_group_to_gid 3 43082 NULL
 +_xfer_secondary_pool_43089 _xfer_secondary_pool 2 43089 NULL
@@ -121697,6 +121271,7 @@ index 0000000..f527934
 +mpi_resize_44674 mpi_resize 2 44674 NULL
 +sysfs_create_link_44685 sysfs_create_link 0 44685 NULL
 +ts_read_44687 ts_read 3 44687 NULL
 +mpi_resize_44674 mpi_resize 2 44674 NULL
 +sysfs_create_link_44685 sysfs_create_link 0 44685 NULL
 +ts_read_44687 ts_read 3 44687 NULL
++write_file_spectral_bins_44696 write_file_spectral_bins 3 44696 NULL
 +lov_emerg_alloc_44698 lov_emerg_alloc 1 44698 NULL
 +C_SYSC_select_44701 C_SYSC_select 1 44701 NULL
 +__generic_block_fiemap_44713 __generic_block_fiemap 4 44713 NULL nohasharray
 +lov_emerg_alloc_44698 lov_emerg_alloc 1 44698 NULL
 +C_SYSC_select_44701 C_SYSC_select 1 44701 NULL
 +__generic_block_fiemap_44713 __generic_block_fiemap 4 44713 NULL nohasharray
@@ -121705,6 +121280,7 @@ index 0000000..f527934
 +_zd_iowrite32v_locked_44725 _zd_iowrite32v_locked 3 44725 NULL
 +clusterip_proc_write_44729 clusterip_proc_write 3 44729 NULL
 +fib_count_nexthops_44730 fib_count_nexthops 0 44730 NULL
 +_zd_iowrite32v_locked_44725 _zd_iowrite32v_locked 3 44725 NULL
 +clusterip_proc_write_44729 clusterip_proc_write 3 44729 NULL
 +fib_count_nexthops_44730 fib_count_nexthops 0 44730 NULL
++efx_wanted_parallelism_44732 efx_wanted_parallelism 0 44732 NULL
 +key_tx_rx_count_read_44742 key_tx_rx_count_read 3 44742 NULL
 +bch_bio_max_sectors_44755 bch_bio_max_sectors 0 44755 NULL
 +tnode_new_44757 tnode_new 3 44757 NULL nohasharray
 +key_tx_rx_count_read_44742 key_tx_rx_count_read 3 44742 NULL
 +bch_bio_max_sectors_44755 bch_bio_max_sectors 0 44755 NULL
 +tnode_new_44757 tnode_new 3 44757 NULL nohasharray
@@ -121859,6 +121435,7 @@ index 0000000..f527934
 +mthca_alloc_cq_buf_46512 mthca_alloc_cq_buf 3 46512 NULL
 +kmsg_read_46514 kmsg_read 3 46514 NULL nohasharray
 +nouveau_drm_ioctl_46514 nouveau_drm_ioctl 2 46514 &kmsg_read_46514
 +mthca_alloc_cq_buf_46512 mthca_alloc_cq_buf 3 46512 NULL
 +kmsg_read_46514 kmsg_read 3 46514 NULL nohasharray
 +nouveau_drm_ioctl_46514 nouveau_drm_ioctl 2 46514 &kmsg_read_46514
++nlm_end_grace_write_46517 nlm_end_grace_write 3 46517 NULL
 +nl80211_send_rx_assoc_46538 nl80211_send_rx_assoc 4 46538 NULL
 +__btrfs_free_extent_46573 __btrfs_free_extent 7 46573 NULL
 +dn_current_mss_46574 dn_current_mss 0 46574 NULL
 +nl80211_send_rx_assoc_46538 nl80211_send_rx_assoc 4 46538 NULL
 +__btrfs_free_extent_46573 __btrfs_free_extent 7 46573 NULL
 +dn_current_mss_46574 dn_current_mss 0 46574 NULL
@@ -121891,6 +121468,7 @@ index 0000000..f527934
 +lov_iocontrol_46876 lov_iocontrol 3 46876 NULL
 +ixgbe_dbg_reg_ops_write_46895 ixgbe_dbg_reg_ops_write 3 46895 NULL
 +sk_mem_pages_46896 sk_mem_pages 0-1 46896 NULL
 +lov_iocontrol_46876 lov_iocontrol 3 46876 NULL
 +ixgbe_dbg_reg_ops_write_46895 ixgbe_dbg_reg_ops_write 3 46895 NULL
 +sk_mem_pages_46896 sk_mem_pages 0-1 46896 NULL
++alloc_cmdid_46904 alloc_cmdid 0 46904 NULL
 +ieee80211_if_fmt_power_mode_46906 ieee80211_if_fmt_power_mode 3 46906 NULL
 +wlcore_alloc_hw_46917 wlcore_alloc_hw 1-3 46917 NULL
 +fb_write_46924 fb_write 3 46924 NULL
 +ieee80211_if_fmt_power_mode_46906 ieee80211_if_fmt_power_mode 3 46906 NULL
 +wlcore_alloc_hw_46917 wlcore_alloc_hw 1-3 46917 NULL
 +fb_write_46924 fb_write 3 46924 NULL
@@ -121923,8 +121501,10 @@ index 0000000..f527934
 +vsnprintf_47291 vsnprintf 0 47291 NULL
 +SYSC_semop_47292 SYSC_semop 3 47292 NULL
 +tx_internal_desc_overflow_read_47300 tx_internal_desc_overflow_read 3 47300 NULL
 +vsnprintf_47291 vsnprintf 0 47291 NULL
 +SYSC_semop_47292 SYSC_semop 3 47292 NULL
 +tx_internal_desc_overflow_read_47300 tx_internal_desc_overflow_read 3 47300 NULL
++virtqueue_add_47306 virtqueue_add 3 47306 NULL
 +nouveau_fb_create__47316 nouveau_fb_create_ 4 47316 NULL
 +ieee80211_if_read_dot11MeshHoldingTimeout_47356 ieee80211_if_read_dot11MeshHoldingTimeout 3 47356 NULL
 +nouveau_fb_create__47316 nouveau_fb_create_ 4 47316 NULL
 +ieee80211_if_read_dot11MeshHoldingTimeout_47356 ieee80211_if_read_dot11MeshHoldingTimeout 3 47356 NULL
++nvme_submit_admin_cmd_47357 nvme_submit_admin_cmd 0 47357 NULL
 +avc_get_hash_stats_47359 avc_get_hash_stats 0 47359 NULL
 +kvm_arch_create_memslot_47364 kvm_arch_create_memslot 3 47364 NULL nohasharray
 +__output_copy_user_47364 __output_copy_user 3 47364 &kvm_arch_create_memslot_47364
 +avc_get_hash_stats_47359 avc_get_hash_stats 0 47359 NULL
 +kvm_arch_create_memslot_47364 kvm_arch_create_memslot 3 47364 NULL nohasharray
 +__output_copy_user_47364 __output_copy_user 3 47364 &kvm_arch_create_memslot_47364
@@ -121980,6 +121560,7 @@ index 0000000..f527934
 +W6692_empty_Bfifo_47804 W6692_empty_Bfifo 2 47804 NULL
 +lov_packmd_47810 lov_packmd 0 47810 NULL
 +tree_mod_log_insert_move_47823 tree_mod_log_insert_move 5 47823 NULL
 +W6692_empty_Bfifo_47804 W6692_empty_Bfifo 2 47804 NULL
 +lov_packmd_47810 lov_packmd 0 47810 NULL
 +tree_mod_log_insert_move_47823 tree_mod_log_insert_move 5 47823 NULL
++read_file_spectral_bins_47829 read_file_spectral_bins 3 47829 NULL
 +pinconf_dbg_config_write_47835 pinconf_dbg_config_write 3 47835 NULL
 +KEY_SIZE_47855 KEY_SIZE 0 47855 NULL
 +vhci_read_47878 vhci_read 3 47878 NULL
 +pinconf_dbg_config_write_47835 pinconf_dbg_config_write 3 47835 NULL
 +KEY_SIZE_47855 KEY_SIZE 0 47855 NULL
 +vhci_read_47878 vhci_read 3 47878 NULL
@@ -121987,6 +121568,7 @@ index 0000000..f527934
 +cfs_percpt_alloc_47918 cfs_percpt_alloc 2 47918 NULL
 +comedi_write_47926 comedi_write 3 47926 NULL
 +nvme_trans_get_blk_desc_len_47946 nvme_trans_get_blk_desc_len 0-2 47946 NULL
 +cfs_percpt_alloc_47918 cfs_percpt_alloc 2 47918 NULL
 +comedi_write_47926 comedi_write 3 47926 NULL
 +nvme_trans_get_blk_desc_len_47946 nvme_trans_get_blk_desc_len 0-2 47946 NULL
++arch_setup_msi_irq_47959 arch_setup_msi_irq 0 47959 NULL
 +gether_get_ifname_47972 gether_get_ifname 3 47972 NULL
 +mempool_resize_47983 mempool_resize 2 47983 NULL nohasharray
 +iwl_dbgfs_ucode_tracing_read_47983 iwl_dbgfs_ucode_tracing_read 3 47983 &mempool_resize_47983
 +gether_get_ifname_47972 gether_get_ifname 3 47972 NULL
 +mempool_resize_47983 mempool_resize 2 47983 NULL nohasharray
 +iwl_dbgfs_ucode_tracing_read_47983 iwl_dbgfs_ucode_tracing_read 3 47983 &mempool_resize_47983
@@ -122100,7 +121682,8 @@ index 0000000..f527934
 +compat_do_readv_writev_49102 compat_do_readv_writev 4 49102 NULL
 +xfrm_replay_state_esn_len_49119 xfrm_replay_state_esn_len 0 49119 NULL
 +ll_max_cached_mb_seq_write_49122 ll_max_cached_mb_seq_write 3 49122 NULL
 +compat_do_readv_writev_49102 compat_do_readv_writev 4 49102 NULL
 +xfrm_replay_state_esn_len_49119 xfrm_replay_state_esn_len 0 49119 NULL
 +ll_max_cached_mb_seq_write_49122 ll_max_cached_mb_seq_write 3 49122 NULL
-+pt_read_49136 pt_read 3 49136 NULL
++pt_read_49136 pt_read 3 49136 NULL nohasharray
++netxen_setup_msi_interrupts_49136 netxen_setup_msi_interrupts 2 49136 &pt_read_49136
 +ipwireless_tty_received_49154 ipwireless_tty_received 3 49154 NULL
 +f2fs_acl_count_49155 f2fs_acl_count 0-1 49155 NULL
 +ipw_queue_tx_init_49161 ipw_queue_tx_init 3 49161 NULL
 +ipwireless_tty_received_49154 ipwireless_tty_received 3 49154 NULL
 +f2fs_acl_count_49155 f2fs_acl_count 0-1 49155 NULL
 +ipw_queue_tx_init_49161 ipw_queue_tx_init 3 49161 NULL
@@ -122183,6 +121766,7 @@ index 0000000..f527934
 +security_context_to_sid_50019 security_context_to_sid 2 50019 NULL
 +isdn_read_50021 isdn_read 3 50021 NULL
 +mdc_rename_pack_50023 mdc_rename_pack 4-6 50023 NULL
 +security_context_to_sid_50019 security_context_to_sid 2 50019 NULL
 +isdn_read_50021 isdn_read 3 50021 NULL
 +mdc_rename_pack_50023 mdc_rename_pack 4-6 50023 NULL
++xlog_recovery_process_trans_50028 xlog_recovery_process_trans 4 50028 NULL
 +brcmf_debugfs_chipinfo_read_50033 brcmf_debugfs_chipinfo_read 3 50033 NULL
 +ioread8_50049 ioread8 0 50049 NULL
 +fuse_conn_max_background_write_50061 fuse_conn_max_background_write 3 50061 NULL
 +brcmf_debugfs_chipinfo_read_50033 brcmf_debugfs_chipinfo_read 3 50033 NULL
 +ioread8_50049 ioread8 0 50049 NULL
 +fuse_conn_max_background_write_50061 fuse_conn_max_background_write 3 50061 NULL
@@ -122286,12 +121870,15 @@ index 0000000..f527934
 +srpt_alloc_ioctx_51042 srpt_alloc_ioctx 2-3 51042 NULL
 +do_arpt_set_ctl_51053 do_arpt_set_ctl 4 51053 NULL
 +wusb_prf_64_51065 wusb_prf_64 7 51065 NULL
 +srpt_alloc_ioctx_51042 srpt_alloc_ioctx 2-3 51042 NULL
 +do_arpt_set_ctl_51053 do_arpt_set_ctl 4 51053 NULL
 +wusb_prf_64_51065 wusb_prf_64 7 51065 NULL
++rsc_mgr_init_51067 rsc_mgr_init 3 51067 NULL
 +jbd2_journal_init_revoke_51088 jbd2_journal_init_revoke 2 51088 NULL
 +jbd2_journal_init_revoke_51088 jbd2_journal_init_revoke 2 51088 NULL
++__ipv4_tun_to_nlattr_51095 __ipv4_tun_to_nlattr 4 51095 NULL
 +__ocfs2_find_path_51096 __ocfs2_find_path 0 51096 NULL
 +ti_recv_51110 ti_recv 3 51110 NULL
 +alloc_rtllib_51136 alloc_rtllib 1 51136 NULL
 +simple_xattr_set_51140 simple_xattr_set 4 51140 NULL
 +xfs_trans_get_efd_51148 xfs_trans_get_efd 3 51148 NULL
 +__ocfs2_find_path_51096 __ocfs2_find_path 0 51096 NULL
 +ti_recv_51110 ti_recv 3 51110 NULL
 +alloc_rtllib_51136 alloc_rtllib 1 51136 NULL
 +simple_xattr_set_51140 simple_xattr_set 4 51140 NULL
 +xfs_trans_get_efd_51148 xfs_trans_get_efd 3 51148 NULL
++i40evf_acquire_msix_vectors_51190 i40evf_acquire_msix_vectors 2 51190 NULL
 +iwl_dbgfs_bcast_filters_macs_read_51231 iwl_dbgfs_bcast_filters_macs_read 3 51231 NULL
 +nf_ct_ext_create_51232 nf_ct_ext_create 3 51232 NULL
 +snd_pcm_write_51235 snd_pcm_write 3 51235 NULL
 +iwl_dbgfs_bcast_filters_macs_read_51231 iwl_dbgfs_bcast_filters_macs_read 3 51231 NULL
 +nf_ct_ext_create_51232 nf_ct_ext_create 3 51232 NULL
 +snd_pcm_write_51235 snd_pcm_write 3 51235 NULL
@@ -122316,6 +121903,7 @@ index 0000000..f527934
 +hfsplus_brec_read_51436 hfsplus_brec_read 0 51436 NULL
 +ieee80211_if_read_dot11MeshHWMPRootMode_51441 ieee80211_if_read_dot11MeshHWMPRootMode 3 51441 NULL
 +print_devstats_dot11ACKFailureCount_51443 print_devstats_dot11ACKFailureCount 3 51443 NULL
 +hfsplus_brec_read_51436 hfsplus_brec_read 0 51436 NULL
 +ieee80211_if_read_dot11MeshHWMPRootMode_51441 ieee80211_if_read_dot11MeshHWMPRootMode 3 51441 NULL
 +print_devstats_dot11ACKFailureCount_51443 print_devstats_dot11ACKFailureCount 3 51443 NULL
++vmxnet3_acquire_msix_vectors_51462 vmxnet3_acquire_msix_vectors 2 51462 NULL
 +____alloc_ei_netdev_51475 ____alloc_ei_netdev 1 51475 NULL
 +xfs_buf_get_uncached_51477 xfs_buf_get_uncached 2 51477 NULL
 +osc_brw_internal_51489 osc_brw_internal 5 51489 NULL
 +____alloc_ei_netdev_51475 ____alloc_ei_netdev 1 51475 NULL
 +xfs_buf_get_uncached_51477 xfs_buf_get_uncached 2 51477 NULL
 +osc_brw_internal_51489 osc_brw_internal 5 51489 NULL
@@ -122463,6 +122051,7 @@ index 0000000..f527934
 +pvr2_ctrl_value_to_sym_internal_52881 pvr2_ctrl_value_to_sym_internal 5 52881 NULL
 +cache_read_procfs_52882 cache_read_procfs 3 52882 NULL
 +kvm_kvzalloc_52894 kvm_kvzalloc 1 52894 NULL
 +pvr2_ctrl_value_to_sym_internal_52881 pvr2_ctrl_value_to_sym_internal 5 52881 NULL
 +cache_read_procfs_52882 cache_read_procfs 3 52882 NULL
 +kvm_kvzalloc_52894 kvm_kvzalloc 1 52894 NULL
++copy_from_iter_bvec_52912 copy_from_iter_bvec 0-2 52912 NULL
 +dio_bio_reap_52913 dio_bio_reap 0 52913 NULL
 +__kfifo_out_peek_r_52919 __kfifo_out_peek_r 3 52919 NULL
 +iblock_get_bio_52936 iblock_get_bio 3 52936 NULL
 +dio_bio_reap_52913 dio_bio_reap 0 52913 NULL
 +__kfifo_out_peek_r_52919 __kfifo_out_peek_r 3 52919 NULL
 +iblock_get_bio_52936 iblock_get_bio 3 52936 NULL
@@ -122476,10 +122065,12 @@ index 0000000..f527934
 +bio_cur_bytes_53037 bio_cur_bytes 0 53037 NULL
 +nv50_chan_create_53039 nv50_chan_create 5 53039 NULL
 +regcache_lzo_block_count_53056 regcache_lzo_block_count 0 53056 NULL
 +bio_cur_bytes_53037 bio_cur_bytes 0 53037 NULL
 +nv50_chan_create_53039 nv50_chan_create 5 53039 NULL
 +regcache_lzo_block_count_53056 regcache_lzo_block_count 0 53056 NULL
++fimc_get_alpha_mask_53057 fimc_get_alpha_mask 0 53057 NULL
 +cfi_read_query_53066 cfi_read_query 0 53066 NULL
 +iwl_dbgfs_interrupt_write_53069 iwl_dbgfs_interrupt_write 3 53069 NULL
 +mwifiex_debug_read_53074 mwifiex_debug_read 3 53074 NULL
 +mic_virtio_copy_from_user_53107 mic_virtio_copy_from_user 3 53107 NULL
 +cfi_read_query_53066 cfi_read_query 0 53066 NULL
 +iwl_dbgfs_interrupt_write_53069 iwl_dbgfs_interrupt_write 3 53069 NULL
 +mwifiex_debug_read_53074 mwifiex_debug_read 3 53074 NULL
 +mic_virtio_copy_from_user_53107 mic_virtio_copy_from_user 3 53107 NULL
++ath10k_mac_create_53118 ath10k_mac_create 1 53118 NULL
 +verity_status_53120 verity_status 5 53120 NULL
 +brcmf_usb_dl_cmd_53130 brcmf_usb_dl_cmd 4 53130 NULL
 +ps_poll_ps_poll_max_ap_turn_read_53140 ps_poll_ps_poll_max_ap_turn_read 3 53140 NULL
 +verity_status_53120 verity_status 5 53120 NULL
 +brcmf_usb_dl_cmd_53130 brcmf_usb_dl_cmd 4 53130 NULL
 +ps_poll_ps_poll_max_ap_turn_read_53140 ps_poll_ps_poll_max_ap_turn_read 3 53140 NULL
@@ -122572,6 +122163,7 @@ index 0000000..f527934
 +pi_read_regr_54231 pi_read_regr 0 54231 NULL
 +mcp23s08_read_regs_54246 mcp23s08_read_regs 4 54246 NULL
 +reada_add_block_54247 reada_add_block 2 54247 NULL
 +pi_read_regr_54231 pi_read_regr 0 54231 NULL
 +mcp23s08_read_regs_54246 mcp23s08_read_regs 4 54246 NULL
 +reada_add_block_54247 reada_add_block 2 54247 NULL
++write_file_spec_scan_ctl_54248 write_file_spec_scan_ctl 3 54248 NULL
 +xfs_dir2_sf_addname_hard_54254 xfs_dir2_sf_addname_hard 3 54254 NULL
 +ceph_msgpool_get_54258 ceph_msgpool_get 2 54258 NULL
 +audio_write_54261 audio_write 4 54261 NULL nohasharray
 +xfs_dir2_sf_addname_hard_54254 xfs_dir2_sf_addname_hard 3 54254 NULL
 +ceph_msgpool_get_54258 ceph_msgpool_get 2 54258 NULL
 +audio_write_54261 audio_write 4 54261 NULL nohasharray
@@ -122583,6 +122175,7 @@ index 0000000..f527934
 +dlm_alloc_pagevec_54296 dlm_alloc_pagevec 1 54296 NULL
 +reclaim_pages_54301 reclaim_pages 3 54301 NULL
 +sprintf_54306 sprintf 0 54306 NULL
 +dlm_alloc_pagevec_54296 dlm_alloc_pagevec 1 54296 NULL
 +reclaim_pages_54301 reclaim_pages 3 54301 NULL
 +sprintf_54306 sprintf 0 54306 NULL
++path_setxattr_54308 path_setxattr 4 54308 NULL
 +bio_add_pc_page_54319 bio_add_pc_page 4 54319 NULL
 +br_fdb_fillbuf_54339 br_fdb_fillbuf 0 54339 NULL
 +__alloc_dev_table_54343 __alloc_dev_table 2 54343 NULL
 +bio_add_pc_page_54319 bio_add_pc_page 4 54319 NULL
 +br_fdb_fillbuf_54339 br_fdb_fillbuf 0 54339 NULL
 +__alloc_dev_table_54343 __alloc_dev_table 2 54343 NULL
@@ -122593,7 +122186,8 @@ index 0000000..f527934
 +do_dccp_setsockopt_54377 do_dccp_setsockopt 5 54377 &intel_sdvo_write_cmd_54377
 +ah_alloc_tmp_54378 ah_alloc_tmp 3-2 54378 NULL
 +snd_pcm_oss_read2_54387 snd_pcm_oss_read2 0-3 54387 NULL
 +do_dccp_setsockopt_54377 do_dccp_setsockopt 5 54377 &intel_sdvo_write_cmd_54377
 +ah_alloc_tmp_54378 ah_alloc_tmp 3-2 54378 NULL
 +snd_pcm_oss_read2_54387 snd_pcm_oss_read2 0-3 54387 NULL
-+iwl_dbgfs_power_save_status_read_54392 iwl_dbgfs_power_save_status_read 3 54392 NULL
++iwl_dbgfs_power_save_status_read_54392 iwl_dbgfs_power_save_status_read 3 54392 NULL nohasharray
++hash_mac4_expire_54392 hash_mac4_expire 4 54392 &iwl_dbgfs_power_save_status_read_54392
 +ll_ra_count_get_54410 ll_ra_count_get 3 54410 NULL
 +copy_gadget_strings_54417 copy_gadget_strings 2-3 54417 NULL
 +sparse_early_mem_maps_alloc_node_54485 sparse_early_mem_maps_alloc_node 4 54485 NULL
 +ll_ra_count_get_54410 ll_ra_count_get 3 54410 NULL
 +copy_gadget_strings_54417 copy_gadget_strings 2-3 54417 NULL
 +sparse_early_mem_maps_alloc_node_54485 sparse_early_mem_maps_alloc_node 4 54485 NULL
@@ -122616,6 +122210,7 @@ index 0000000..f527934
 +irq_timeout_read_54653 irq_timeout_read 3 54653 NULL
 +dns_resolver_read_54658 dns_resolver_read 3 54658 NULL
 +twl6030_interrupt_mask_54659 twl6030_interrupt_mask 2 54659 NULL
 +irq_timeout_read_54653 irq_timeout_read 3 54653 NULL
 +dns_resolver_read_54658 dns_resolver_read 3 54658 NULL
 +twl6030_interrupt_mask_54659 twl6030_interrupt_mask 2 54659 NULL
++simple_alloc_urb_54661 simple_alloc_urb 3 54661 NULL
 +tdp_page_fault_54663 tdp_page_fault 2 54663 NULL
 +bus_add_device_54665 bus_add_device 0 54665 NULL
 +cw1200_queue_stats_init_54670 cw1200_queue_stats_init 2 54670 NULL
 +tdp_page_fault_54663 tdp_page_fault 2 54663 NULL
 +bus_add_device_54665 bus_add_device 0 54665 NULL
 +cw1200_queue_stats_init_54670 cw1200_queue_stats_init 2 54670 NULL
@@ -122673,6 +122268,7 @@ index 0000000..f527934
 +sched_feat_write_55202 sched_feat_write 3 55202 NULL
 +ht40allow_map_read_55209 ht40allow_map_read 3 55209 NULL
 +__kfifo_dma_out_prepare_r_55211 __kfifo_dma_out_prepare_r 4-5 55211 NULL
 +sched_feat_write_55202 sched_feat_write 3 55202 NULL
 +ht40allow_map_read_55209 ht40allow_map_read 3 55209 NULL
 +__kfifo_dma_out_prepare_r_55211 __kfifo_dma_out_prepare_r 4-5 55211 NULL
++mlx4_load_one_55213 mlx4_load_one 3 55213 NULL
 +do_raw_setsockopt_55215 do_raw_setsockopt 5 55215 NULL
 +qxl_alloc_client_monitors_config_55216 qxl_alloc_client_monitors_config 2 55216 NULL
 +nouveau_mc_create__55217 nouveau_mc_create_ 4 55217 NULL
 +do_raw_setsockopt_55215 do_raw_setsockopt 5 55215 NULL
 +qxl_alloc_client_monitors_config_55216 qxl_alloc_client_monitors_config 2 55216 NULL
 +nouveau_mc_create__55217 nouveau_mc_create_ 4 55217 NULL
@@ -122786,7 +122382,8 @@ index 0000000..f527934
 +ocfs2_control_read_56405 ocfs2_control_read 3 56405 NULL
 +store_msg_56417 store_msg 3 56417 NULL
 +pppol2tp_sendmsg_56420 pppol2tp_sendmsg 4 56420 NULL
 +ocfs2_control_read_56405 ocfs2_control_read 3 56405 NULL
 +store_msg_56417 store_msg 3 56417 NULL
 +pppol2tp_sendmsg_56420 pppol2tp_sendmsg 4 56420 NULL
-+l2cap_segment_le_sdu_56426 l2cap_segment_le_sdu 4 56426 NULL
++l2cap_segment_le_sdu_56426 l2cap_segment_le_sdu 4 56426 NULL nohasharray
++nvme_submit_cmd_56426 nvme_submit_cmd 0 56426 &l2cap_segment_le_sdu_56426
 +lprocfs_fid_space_seq_write_56431 lprocfs_fid_space_seq_write 3 56431 NULL nohasharray
 +ec_dbgfs_cmd_read_56431 ec_dbgfs_cmd_read 3 56431 &lprocfs_fid_space_seq_write_56431
 +fl_create_56435 fl_create 5 56435 NULL
 +lprocfs_fid_space_seq_write_56431 lprocfs_fid_space_seq_write 3 56431 NULL nohasharray
 +ec_dbgfs_cmd_read_56431 ec_dbgfs_cmd_read 3 56431 &lprocfs_fid_space_seq_write_56431
 +fl_create_56435 fl_create 5 56435 NULL
@@ -122891,6 +122488,7 @@ index 0000000..f527934
 +bzImage64_load_57388 bzImage64_load 7 57388 NULL
 +read_file_blob_57406 read_file_blob 3 57406 NULL
 +enclosure_register_57412 enclosure_register 3 57412 NULL
 +bzImage64_load_57388 bzImage64_load 7 57388 NULL
 +read_file_blob_57406 read_file_blob 3 57406 NULL
 +enclosure_register_57412 enclosure_register 3 57412 NULL
++read_file_eeprom_57428 read_file_eeprom 3 57428 NULL
 +compat_keyctl_instantiate_key_iov_57431 compat_keyctl_instantiate_key_iov 3 57431 NULL
 +copy_to_user_fromio_57432 copy_to_user_fromio 3 57432 NULL
 +__roundup_pow_of_two_57461 __roundup_pow_of_two 0 57461 NULL
 +compat_keyctl_instantiate_key_iov_57431 compat_keyctl_instantiate_key_iov 3 57431 NULL
 +copy_to_user_fromio_57432 copy_to_user_fromio 3 57432 NULL
 +__roundup_pow_of_two_57461 __roundup_pow_of_two 0 57461 NULL
@@ -122915,6 +122513,7 @@ index 0000000..f527934
 +ldlm_cli_enqueue_local_57582 ldlm_cli_enqueue_local 11 57582 NULL
 +il_dbgfs_interrupt_write_57591 il_dbgfs_interrupt_write 3 57591 NULL
 +read_file_spectral_fft_period_57593 read_file_spectral_fft_period 3 57593 NULL
 +ldlm_cli_enqueue_local_57582 ldlm_cli_enqueue_local 11 57582 NULL
 +il_dbgfs_interrupt_write_57591 il_dbgfs_interrupt_write 3 57591 NULL
 +read_file_spectral_fft_period_57593 read_file_spectral_fft_period 3 57593 NULL
++copy_to_iter_bvec_57604 copy_to_iter_bvec 0-2 57604 NULL
 +tx_tx_retry_template_read_57623 tx_tx_retry_template_read 3 57623 NULL
 +sisusbcon_putcs_57630 sisusbcon_putcs 3 57630 NULL
 +mem_read_57631 mem_read 3 57631 NULL
 +tx_tx_retry_template_read_57623 tx_tx_retry_template_read 3 57623 NULL
 +sisusbcon_putcs_57630 sisusbcon_putcs 3 57630 NULL
 +mem_read_57631 mem_read 3 57631 NULL
@@ -122992,6 +122591,7 @@ index 0000000..f527934
 +nv_rd08_58472 nv_rd08 0 58472 NULL
 +snd_gf1_read_addr_58483 snd_gf1_read_addr 0 58483 NULL
 +snd_rme96_capture_copy_58484 snd_rme96_capture_copy 5 58484 NULL
 +nv_rd08_58472 nv_rd08 0 58472 NULL
 +snd_gf1_read_addr_58483 snd_gf1_read_addr 0 58483 NULL
 +snd_rme96_capture_copy_58484 snd_rme96_capture_copy 5 58484 NULL
++dw_spi_show_regs_58486 dw_spi_show_regs 3 58486 NULL
 +btrfs_cont_expand_58498 btrfs_cont_expand 2-3 58498 NULL
 +tcf_hash_create_58507 tcf_hash_create 4 58507 NULL
 +cifs_write_from_iter_58526 cifs_write_from_iter 2 58526 NULL
 +btrfs_cont_expand_58498 btrfs_cont_expand 2-3 58498 NULL
 +tcf_hash_create_58507 tcf_hash_create 4 58507 NULL
 +cifs_write_from_iter_58526 cifs_write_from_iter 2 58526 NULL
@@ -123076,6 +122676,7 @@ index 0000000..f527934
 +ib_copy_from_udata_59502 ib_copy_from_udata 3 59502 NULL
 +C_SYSC_get_mempolicy_59516 C_SYSC_get_mempolicy 3 59516 NULL
 +mic_vringh_copy_59523 mic_vringh_copy 4 59523 NULL
 +ib_copy_from_udata_59502 ib_copy_from_udata 3 59502 NULL
 +C_SYSC_get_mempolicy_59516 C_SYSC_get_mempolicy 3 59516 NULL
 +mic_vringh_copy_59523 mic_vringh_copy 4 59523 NULL
++msix_setup_entries_59545 msix_setup_entries 0 59545 NULL
 +mpi_get_nbits_59551 mpi_get_nbits 0 59551 NULL
 +tunables_write_59563 tunables_write 3 59563 NULL
 +bio_split_59564 bio_split 2 59564 NULL
 +mpi_get_nbits_59551 mpi_get_nbits 0 59551 NULL
 +tunables_write_59563 tunables_write 3 59563 NULL
 +bio_split_59564 bio_split 2 59564 NULL
@@ -123140,6 +122741,7 @@ index 0000000..f527934
 +ieee80211_if_fmt_fwded_frames_60103 ieee80211_if_fmt_fwded_frames 3 60103 NULL
 +SYSC_msgsnd_60113 SYSC_msgsnd 3 60113 NULL
 +nfs_idmap_request_key_60124 nfs_idmap_request_key 2 60124 NULL
 +ieee80211_if_fmt_fwded_frames_60103 ieee80211_if_fmt_fwded_frames 3 60103 NULL
 +SYSC_msgsnd_60113 SYSC_msgsnd 3 60113 NULL
 +nfs_idmap_request_key_60124 nfs_idmap_request_key 2 60124 NULL
++pcpu_need_to_extend_60133 pcpu_need_to_extend 0 60133 NULL
 +__mutex_lock_common_60134 __mutex_lock_common 0 60134 NULL
 +ld_usb_read_60156 ld_usb_read 3 60156 NULL
 +jmb38x_ms_count_slots_60164 jmb38x_ms_count_slots 0 60164 NULL
 +__mutex_lock_common_60134 __mutex_lock_common 0 60134 NULL
 +ld_usb_read_60156 ld_usb_read 3 60156 NULL
 +jmb38x_ms_count_slots_60164 jmb38x_ms_count_slots 0 60164 NULL
@@ -123147,7 +122749,8 @@ index 0000000..f527934
 +jffs2_alloc_full_dirent_60179 jffs2_alloc_full_dirent 1 60179 NULL nohasharray
 +sg_build_sgat_60179 sg_build_sgat 3 60179 &jffs2_alloc_full_dirent_60179
 +fuse_async_req_send_60183 fuse_async_req_send 0-3 60183 NULL
 +jffs2_alloc_full_dirent_60179 jffs2_alloc_full_dirent 1 60179 NULL nohasharray
 +sg_build_sgat_60179 sg_build_sgat 3 60179 &jffs2_alloc_full_dirent_60179
 +fuse_async_req_send_60183 fuse_async_req_send 0-3 60183 NULL
-+rx_rx_tkip_replays_read_60193 rx_rx_tkip_replays_read 3 60193 NULL
++rx_rx_tkip_replays_read_60193 rx_rx_tkip_replays_read 3 60193 NULL nohasharray
++arch_setup_msi_irqs_60193 arch_setup_msi_irqs 0 60193 &rx_rx_tkip_replays_read_60193
 +qib_reg_phys_mr_60202 qib_reg_phys_mr 3 60202 NULL
 +btrfs_get_token_16_60220 btrfs_get_token_16 0 60220 NULL
 +irq_alloc_domain_generic_chips_60264 irq_alloc_domain_generic_chips 2-3 60264 NULL
 +qib_reg_phys_mr_60202 qib_reg_phys_mr 3 60202 NULL
 +btrfs_get_token_16_60220 btrfs_get_token_16 0 60220 NULL
 +irq_alloc_domain_generic_chips_60264 irq_alloc_domain_generic_chips 2-3 60264 NULL
@@ -123206,6 +122809,7 @@ index 0000000..f527934
 +ath6kl_lrssi_roam_read_61022 ath6kl_lrssi_roam_read 3 61022 NULL
 +graph_depth_write_61024 graph_depth_write 3 61024 NULL
 +sdhci_pltfm_register_61031 sdhci_pltfm_register 3 61031 NULL
 +ath6kl_lrssi_roam_read_61022 ath6kl_lrssi_roam_read 3 61022 NULL
 +graph_depth_write_61024 graph_depth_write 3 61024 NULL
 +sdhci_pltfm_register_61031 sdhci_pltfm_register 3 61031 NULL
++read_file_ackto_61037 read_file_ackto 3 61037 NULL
 +lpfc_idiag_queacc_write_61043 lpfc_idiag_queacc_write 3 61043 NULL
 +symtab_init_61050 symtab_init 2 61050 NULL
 +fuse_send_write_61053 fuse_send_write 0-4 61053 NULL
 +lpfc_idiag_queacc_write_61043 lpfc_idiag_queacc_write 3 61043 NULL
 +symtab_init_61050 symtab_init 2 61050 NULL
 +fuse_send_write_61053 fuse_send_write 0-4 61053 NULL
@@ -123225,6 +122829,7 @@ index 0000000..f527934
 +arch_hibernation_header_save_61212 arch_hibernation_header_save 0 61212 NULL
 +smk_read_ambient_61220 smk_read_ambient 3 61220 NULL
 +v9fs_mmap_file_read_61262 v9fs_mmap_file_read 3 61262 NULL
 +arch_hibernation_header_save_61212 arch_hibernation_header_save 0 61212 NULL
 +smk_read_ambient_61220 smk_read_ambient 3 61220 NULL
 +v9fs_mmap_file_read_61262 v9fs_mmap_file_read 3 61262 NULL
++kvm_age_hva_61267 kvm_age_hva 2-3 61267 NULL
 +find_get_pages_tag_61270 find_get_pages_tag 0 61270 NULL nohasharray
 +btrfs_bio_alloc_61270 btrfs_bio_alloc 3 61270 &find_get_pages_tag_61270 nohasharray
 +ifalias_store_61270 ifalias_store 4 61270 &btrfs_bio_alloc_61270
 +find_get_pages_tag_61270 find_get_pages_tag 0 61270 NULL nohasharray
 +btrfs_bio_alloc_61270 btrfs_bio_alloc 3 61270 &find_get_pages_tag_61270 nohasharray
 +ifalias_store_61270 ifalias_store 4 61270 &btrfs_bio_alloc_61270
@@ -123239,6 +122844,7 @@ index 0000000..f527934
 +rx_rx_wa_ba_not_expected_read_61341 rx_rx_wa_ba_not_expected_read 3 61341 NULL
 +__dm_get_reserved_ios_61342 __dm_get_reserved_ios 0-3-2 61342 NULL
 +f1x_map_sysaddr_to_csrow_61344 f1x_map_sysaddr_to_csrow 2 61344 NULL
 +rx_rx_wa_ba_not_expected_read_61341 rx_rx_wa_ba_not_expected_read 3 61341 NULL
 +__dm_get_reserved_ios_61342 __dm_get_reserved_ios 0-3-2 61342 NULL
 +f1x_map_sysaddr_to_csrow_61344 f1x_map_sysaddr_to_csrow 2 61344 NULL
++wil_write_file_recovery_61354 wil_write_file_recovery 3 61354 NULL
 +debug_debug4_read_61367 debug_debug4_read 3 61367 NULL
 +system_enable_write_61396 system_enable_write 3 61396 NULL
 +xfs_zero_remaining_bytes_61423 xfs_zero_remaining_bytes 3 61423 NULL
 +debug_debug4_read_61367 debug_debug4_read 3 61367 NULL
 +system_enable_write_61396 system_enable_write 3 61396 NULL
 +xfs_zero_remaining_bytes_61423 xfs_zero_remaining_bytes 3 61423 NULL
@@ -123281,6 +122887,7 @@ index 0000000..f527934
 +bfad_debugfs_write_regwr_61841 bfad_debugfs_write_regwr 3 61841 NULL
 +regcache_sync_block_61846 regcache_sync_block 5-4 61846 NULL
 +ath9k_hw_def_dump_eeprom_61853 ath9k_hw_def_dump_eeprom 5-4 61853 NULL
 +bfad_debugfs_write_regwr_61841 bfad_debugfs_write_regwr 3 61841 NULL
 +regcache_sync_block_61846 regcache_sync_block 5-4 61846 NULL
 +ath9k_hw_def_dump_eeprom_61853 ath9k_hw_def_dump_eeprom 5-4 61853 NULL
++__skb_flow_dissect_61855 __skb_flow_dissect 5 61855 NULL
 +evdev_compute_buffer_size_61863 evdev_compute_buffer_size 0 61863 NULL
 +SYSC_lsetxattr_61869 SYSC_lsetxattr 4 61869 NULL
 +get_fw_name_61874 get_fw_name 3 61874 NULL
 +evdev_compute_buffer_size_61863 evdev_compute_buffer_size 0 61863 NULL
 +SYSC_lsetxattr_61869 SYSC_lsetxattr 4 61869 NULL
 +get_fw_name_61874 get_fw_name 3 61874 NULL
@@ -123304,6 +122911,7 @@ index 0000000..f527934
 +SyS_setxattr_62019 SyS_setxattr 4 62019 NULL
 +jffs2_do_unlink_62020 jffs2_do_unlink 4 62020 NULL
 +SYSC_select_62024 SYSC_select 1 62024 NULL
 +SyS_setxattr_62019 SyS_setxattr 4 62019 NULL
 +jffs2_do_unlink_62020 jffs2_do_unlink 4 62020 NULL
 +SYSC_select_62024 SYSC_select 1 62024 NULL
++comedi_write_array_to_buffer_62032 comedi_write_array_to_buffer 3 62032 NULL
 +pmcraid_build_passthrough_ioadls_62034 pmcraid_build_passthrough_ioadls 2 62034 NULL
 +sctp_user_addto_chunk_62047 sctp_user_addto_chunk 2-3 62047 NULL
 +do_pselect_62061 do_pselect 1 62061 NULL
 +pmcraid_build_passthrough_ioadls_62034 pmcraid_build_passthrough_ioadls 2 62034 NULL
 +sctp_user_addto_chunk_62047 sctp_user_addto_chunk 2-3 62047 NULL
 +do_pselect_62061 do_pselect 1 62061 NULL
@@ -123367,6 +122975,7 @@ index 0000000..f527934
 +ptlrpc_req_set_repsize_62784 ptlrpc_req_set_repsize 2 62784 NULL
 +SyS_sched_getaffinity_62786 SyS_sched_getaffinity 2 62786 NULL
 +dm_stats_account_io_62787 dm_stats_account_io 3 62787 NULL
 +ptlrpc_req_set_repsize_62784 ptlrpc_req_set_repsize 2 62784 NULL
 +SyS_sched_getaffinity_62786 SyS_sched_getaffinity 2 62786 NULL
 +dm_stats_account_io_62787 dm_stats_account_io 3 62787 NULL
++__add_action_62798 __add_action 4 62798 NULL
 +tracing_total_entries_read_62817 tracing_total_entries_read 3 62817 NULL
 +__rounddown_pow_of_two_62836 __rounddown_pow_of_two 0 62836 NULL
 +bio_get_nr_vecs_62838 bio_get_nr_vecs 0 62838 NULL
 +tracing_total_entries_read_62817 tracing_total_entries_read 3 62817 NULL
 +__rounddown_pow_of_two_62836 __rounddown_pow_of_two 0 62836 NULL
 +bio_get_nr_vecs_62838 bio_get_nr_vecs 0 62838 NULL
@@ -123436,6 +123045,7 @@ index 0000000..f527934
 +write_file_spectral_fft_period_63696 write_file_spectral_fft_period 3 63696 NULL
 +nouveau_object_create__63715 nouveau_object_create_ 5 63715 NULL
 +btrfs_insert_delayed_dir_index_63720 btrfs_insert_delayed_dir_index 4 63720 NULL
 +write_file_spectral_fft_period_63696 write_file_spectral_fft_period 3 63696 NULL
 +nouveau_object_create__63715 nouveau_object_create_ 5 63715 NULL
 +btrfs_insert_delayed_dir_index_63720 btrfs_insert_delayed_dir_index 4 63720 NULL
++ntb_debugfs_read_63728 ntb_debugfs_read 3 63728 NULL
 +selinux_secctx_to_secid_63744 selinux_secctx_to_secid 2 63744 NULL
 +snd_pcm_oss_read1_63771 snd_pcm_oss_read1 3 63771 NULL
 +snd_opl4_mem_proc_read_63774 snd_opl4_mem_proc_read 5 63774 NULL
 +selinux_secctx_to_secid_63744 selinux_secctx_to_secid 2 63744 NULL
 +snd_pcm_oss_read1_63771 snd_pcm_oss_read1 3 63771 NULL
 +snd_opl4_mem_proc_read_63774 snd_opl4_mem_proc_read 5 63774 NULL
@@ -123461,6 +123071,7 @@ index 0000000..f527934
 +SyS_rt_sigpending_64018 SyS_rt_sigpending 2 64018 NULL
 +dbAllocDmapLev_64030 dbAllocDmapLev 0 64030 NULL
 +SyS_fsetxattr_64039 SyS_fsetxattr 4 64039 NULL
 +SyS_rt_sigpending_64018 SyS_rt_sigpending 2 64018 NULL
 +dbAllocDmapLev_64030 dbAllocDmapLev 0 64030 NULL
 +SyS_fsetxattr_64039 SyS_fsetxattr 4 64039 NULL
++nl80211_send_rx_assoc_64040 nl80211_send_rx_assoc 4 64040 NULL
 +__sock_create_64069 __sock_create 0 64069 NULL
 +get_u8_64076 get_u8 0 64076 NULL
 +xilly_malloc_64077 xilly_malloc 2 64077 NULL
 +__sock_create_64069 __sock_create 0 64069 NULL
 +get_u8_64076 get_u8 0 64076 NULL
 +xilly_malloc_64077 xilly_malloc 2 64077 NULL
@@ -123496,9 +123107,11 @@ index 0000000..f527934
 +sisusbcon_clear_64329 sisusbcon_clear 4-3-5 64329 NULL
 +ts_write_64336 ts_write 3 64336 NULL
 +usbtmc_write_64340 usbtmc_write 3 64340 NULL
 +sisusbcon_clear_64329 sisusbcon_clear 4-3-5 64329 NULL
 +ts_write_64336 ts_write 3 64336 NULL
 +usbtmc_write_64340 usbtmc_write 3 64340 NULL
++qlcnic_82xx_calculate_msix_vector_64354 qlcnic_82xx_calculate_msix_vector 0 64354 NULL
 +user_regset_copyin_64360 user_regset_copyin 7 64360 NULL
 +wlc_phy_loadsampletable_nphy_64367 wlc_phy_loadsampletable_nphy 3 64367 NULL
 +user_regset_copyin_64360 user_regset_copyin 7 64360 NULL
 +wlc_phy_loadsampletable_nphy_64367 wlc_phy_loadsampletable_nphy 3 64367 NULL
-+reg_create_64372 reg_create 5 64372 NULL
++reg_create_64372 reg_create 5 64372 NULL nohasharray
++bnx2_enable_msix_64372 bnx2_enable_msix 2 64372 &reg_create_64372
 +ilo_write_64378 ilo_write 3 64378 NULL
 +btrfs_map_block_64379 btrfs_map_block 3 64379 NULL
 +vmcs_readl_64381 vmcs_readl 0 64381 NULL
 +ilo_write_64378 ilo_write 3 64378 NULL
 +btrfs_map_block_64379 btrfs_map_block 3 64379 NULL
 +vmcs_readl_64381 vmcs_readl 0 64381 NULL
@@ -123569,6 +123182,7 @@ index 0000000..f527934
 +batadv_socket_write_65083 batadv_socket_write 3 65083 NULL
 +ocfs2_truncate_cluster_pages_65086 ocfs2_truncate_cluster_pages 2 65086 NULL
 +ath9k_dump_mci_btcoex_65090 ath9k_dump_mci_btcoex 0-3 65090 NULL
 +batadv_socket_write_65083 batadv_socket_write 3 65083 NULL
 +ocfs2_truncate_cluster_pages_65086 ocfs2_truncate_cluster_pages 2 65086 NULL
 +ath9k_dump_mci_btcoex_65090 ath9k_dump_mci_btcoex 0-3 65090 NULL
++usbtest_alloc_urb_65115 usbtest_alloc_urb 3-5 65115 NULL
 +rx_rx_done_read_65217 rx_rx_done_read 3 65217 NULL
 +nouveau_event_create_65229 nouveau_event_create 2-1 65229 NULL
 +print_endpoint_stat_65232 print_endpoint_stat 0-4-3 65232 NULL
 +rx_rx_done_read_65217 rx_rx_done_read 3 65217 NULL
 +nouveau_event_create_65229 nouveau_event_create 2-1 65229 NULL
 +print_endpoint_stat_65232 print_endpoint_stat 0-4-3 65232 NULL
@@ -125032,10 +124646,10 @@ index 88461f0..6fb70a0 100644
  
  #endif /* _TOOLS_LINUX_COMPILER_H */
 diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile
  
  #endif /* _TOOLS_LINUX_COMPILER_H */
 diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile
-index ce00f7e..0aca5e4 100644
+index 36c08b1..87c72d1 100644
 --- a/tools/lib/api/Makefile
 +++ b/tools/lib/api/Makefile
 --- a/tools/lib/api/Makefile
 +++ b/tools/lib/api/Makefile
-@@ -16,7 +16,7 @@ LIB_OBJS += $(OUTPUT)fs/fs.o
+@@ -21,7 +21,7 @@ LIB_OBJS += $(OUTPUT)fd/array.o
  
  LIBFILE = libapikfs.a
  
  
  LIBFILE = libapikfs.a
  
@@ -125070,10 +124684,10 @@ index 0a578fe..b81f62d 100644
  })
  
 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
  })
  
 diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
-index 6a3f29b..a1d2e93 100644
+index 3cee7b1..29cb7d8 100644
 --- a/virt/kvm/kvm_main.c
 +++ b/virt/kvm/kvm_main.c
 --- a/virt/kvm/kvm_main.c
 +++ b/virt/kvm/kvm_main.c
-@@ -77,12 +77,17 @@ LIST_HEAD(vm_list);
+@@ -78,12 +78,17 @@ LIST_HEAD(vm_list);
  
  static cpumask_var_t cpus_hardware_enabled;
  static int kvm_usage_count = 0;
  
  static cpumask_var_t cpus_hardware_enabled;
  static int kvm_usage_count = 0;
@@ -125093,7 +124707,7 @@ index 6a3f29b..a1d2e93 100644
  
  struct dentry *kvm_debugfs_dir;
  
  
  struct dentry *kvm_debugfs_dir;
  
-@@ -780,7 +785,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
+@@ -786,7 +791,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
        /* We can read the guest memory with __xxx_user() later on. */
        if ((mem->slot < KVM_USER_MEM_SLOTS) &&
            ((mem->userspace_addr & (PAGE_SIZE - 1)) ||
        /* We can read the guest memory with __xxx_user() later on. */
        if ((mem->slot < KVM_USER_MEM_SLOTS) &&
            ((mem->userspace_addr & (PAGE_SIZE - 1)) ||
@@ -125102,7 +124716,7 @@ index 6a3f29b..a1d2e93 100644
                        (void __user *)(unsigned long)mem->userspace_addr,
                        mem->memory_size)))
                goto out;
                        (void __user *)(unsigned long)mem->userspace_addr,
                        mem->memory_size)))
                goto out;
-@@ -1637,9 +1642,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
+@@ -1690,9 +1695,17 @@ EXPORT_SYMBOL_GPL(kvm_read_guest_cached);
  
  int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len)
  {
  
  int kvm_clear_guest_page(struct kvm *kvm, gfn_t gfn, int offset, int len)
  {
@@ -125122,7 +124736,7 @@ index 6a3f29b..a1d2e93 100644
  }
  EXPORT_SYMBOL_GPL(kvm_clear_guest_page);
  
  }
  EXPORT_SYMBOL_GPL(kvm_clear_guest_page);
  
-@@ -1889,7 +1902,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
+@@ -1941,7 +1954,7 @@ static int kvm_vcpu_release(struct inode *inode, struct file *filp)
        return 0;
  }
  
        return 0;
  }
  
@@ -125131,7 +124745,7 @@ index 6a3f29b..a1d2e93 100644
        .release        = kvm_vcpu_release,
        .unlocked_ioctl = kvm_vcpu_ioctl,
  #ifdef CONFIG_COMPAT
        .release        = kvm_vcpu_release,
        .unlocked_ioctl = kvm_vcpu_ioctl,
  #ifdef CONFIG_COMPAT
-@@ -2593,7 +2606,7 @@ out:
+@@ -2650,7 +2663,7 @@ out:
  }
  #endif
  
  }
  #endif
  
@@ -125140,7 +124754,7 @@ index 6a3f29b..a1d2e93 100644
        .release        = kvm_vm_release,
        .unlocked_ioctl = kvm_vm_ioctl,
  #ifdef CONFIG_COMPAT
        .release        = kvm_vm_release,
        .unlocked_ioctl = kvm_vm_ioctl,
  #ifdef CONFIG_COMPAT
-@@ -2666,7 +2679,7 @@ out:
+@@ -2721,7 +2734,7 @@ out:
        return r;
  }
  
        return r;
  }
  
@@ -125149,7 +124763,7 @@ index 6a3f29b..a1d2e93 100644
        .unlocked_ioctl = kvm_dev_ioctl,
        .compat_ioctl   = kvm_dev_ioctl,
        .llseek         = noop_llseek,
        .unlocked_ioctl = kvm_dev_ioctl,
        .compat_ioctl   = kvm_dev_ioctl,
        .llseek         = noop_llseek,
-@@ -2692,7 +2705,7 @@ static void hardware_enable_nolock(void *junk)
+@@ -2747,7 +2760,7 @@ static void hardware_enable_nolock(void *junk)
  
        if (r) {
                cpumask_clear_cpu(cpu, cpus_hardware_enabled);
  
        if (r) {
                cpumask_clear_cpu(cpu, cpus_hardware_enabled);
@@ -125158,7 +124772,7 @@ index 6a3f29b..a1d2e93 100644
                printk(KERN_INFO "kvm: enabling virtualization on "
                                 "CPU%d failed\n", cpu);
        }
                printk(KERN_INFO "kvm: enabling virtualization on "
                                 "CPU%d failed\n", cpu);
        }
-@@ -2748,10 +2761,10 @@ static int hardware_enable_all(void)
+@@ -2803,10 +2816,10 @@ static int hardware_enable_all(void)
  
        kvm_usage_count++;
        if (kvm_usage_count == 1) {
  
        kvm_usage_count++;
        if (kvm_usage_count == 1) {
@@ -125171,7 +124785,7 @@ index 6a3f29b..a1d2e93 100644
                        hardware_disable_all_nolock();
                        r = -EBUSY;
                }
                        hardware_disable_all_nolock();
                        r = -EBUSY;
                }
-@@ -3156,7 +3169,7 @@ static void kvm_sched_out(struct preempt_notifier *pn,
+@@ -3213,7 +3226,7 @@ static void kvm_sched_out(struct preempt_notifier *pn,
        kvm_arch_vcpu_put(vcpu);
  }
  
        kvm_arch_vcpu_put(vcpu);
  }
  
@@ -125180,7 +124794,7 @@ index 6a3f29b..a1d2e93 100644
                  struct module *module)
  {
        int r;
                  struct module *module)
  {
        int r;
-@@ -3203,7 +3216,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3260,7 +3273,7 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
        if (!vcpu_align)
                vcpu_align = __alignof__(struct kvm_vcpu);
        kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align,
        if (!vcpu_align)
                vcpu_align = __alignof__(struct kvm_vcpu);
        kvm_vcpu_cache = kmem_cache_create("kvm_vcpu", vcpu_size, vcpu_align,
@@ -125189,7 +124803,7 @@ index 6a3f29b..a1d2e93 100644
        if (!kvm_vcpu_cache) {
                r = -ENOMEM;
                goto out_free_3;
        if (!kvm_vcpu_cache) {
                r = -ENOMEM;
                goto out_free_3;
-@@ -3213,9 +3226,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3270,9 +3283,11 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
        if (r)
                goto out_free;
  
        if (r)
                goto out_free;
  
@@ -125201,7 +124815,7 @@ index 6a3f29b..a1d2e93 100644
  
        r = misc_register(&kvm_dev);
        if (r) {
  
        r = misc_register(&kvm_dev);
        if (r) {
-@@ -3225,9 +3240,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
+@@ -3282,9 +3297,6 @@ int kvm_init(void *opaque, unsigned vcpu_size, unsigned vcpu_align,
  
        register_syscore_ops(&kvm_syscore_ops);
  
  
        register_syscore_ops(&kvm_syscore_ops);