kernel: Update to 3.14.2.
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 20 Apr 2014 12:51:32 +0000 (14:51 +0200)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 28 Apr 2014 11:32:38 +0000 (13:32 +0200)
12 files changed:
kernel/config-arm-generic
kernel/config-armv5tel-default
kernel/config-armv7hl-default
kernel/config-armv7hl-lpae
kernel/config-generic
kernel/config-i686-default
kernel/config-i686-legacy
kernel/config-x86-generic
kernel/config-x86_64-default
kernel/kernel.nm
kernel/patches/grsecurity-3.0-3.14.2-201404270907.patch [moved from kernel/patches/grsecurity-3.0-3.13.2-201402091134.patch with 93% similarity]
kernel/patches/linux-3.12-imx6-utilite.patch [deleted file]

index 5b3431a..c753196 100644 (file)
@@ -57,8 +57,8 @@ CONFIG_LBDAF=y
 # CONFIG_ARCH_W90X900 is not set
 # CONFIG_ARCH_LPC32XX is not set
 # CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_MSM_NODT is not set
+# CONFIG_ARCH_SHMOBILE_LEGACY is not set
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
 # CONFIG_ARCH_S3C24XX is not set
@@ -249,6 +249,7 @@ CONFIG_NET_VENDOR_FARADAY=y
 # CONFIG_FTMAC100 is not set
 # CONFIG_FTGMAC100 is not set
 CONFIG_MV643XX_ETH=m
+CONFIG_MVNETA=m
 # CONFIG_MLX4_EN is not set
 # CONFIG_MLX4_CORE is not set
 CONFIG_AX88796=m
@@ -272,7 +273,7 @@ CONFIG_MDIO_BUS_MUX_MMIOREG=m
 #
 # Input Device Drivers
 #
-# CONFIG_KEYBOARD_SH_KEYSC is not set
+# CONFIG_INPUT_GPIO_BEEPER is not set
 
 #
 # Hardware I/O ports
@@ -297,6 +298,11 @@ CONFIG_SERIAL_OF_PLATFORM=y
 CONFIG_SERIAL_ST_ASC=m
 # CONFIG_HVC_DCC is not set
 
+#
+# Multiplexer I2C Chip support
+#
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+
 #
 # PC SMBus host controller drivers
 #
@@ -310,8 +316,6 @@ CONFIG_I2C_SIS630=m
 # I2C system bus drivers (mostly embedded / system-on-chip)
 #
 # CONFIG_I2C_DESIGNWARE_PLATFORM is not set
-CONFIG_I2C_SH_MOBILE=m
-CONFIG_I2C_RCAR=m
 
 #
 # Pin controllers
@@ -319,6 +323,10 @@ CONFIG_I2C_RCAR=m
 CONFIG_PINMUX=y
 CONFIG_PINCONF=y
 CONFIG_GENERIC_PINCONF=y
+# CONFIG_PINCTRL_AS3722 is not set
+# CONFIG_PINCTRL_CAPRI is not set
+CONFIG_PINCTRL_MSM=y
+CONFIG_PINCTRL_MSM8X74=m
 CONFIG_PINCTRL_MVEBU=y
 CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
 CONFIG_ARCH_REQUIRE_GPIOLIB=y
@@ -348,6 +356,7 @@ CONFIG_GPIO_BCM_KONA=y
 #
 # CONFIG_APM_POWER is not set
 # CONFIG_CHARGER_MANAGER is not set
+CONFIG_POWER_RESET_AS3722=y
 CONFIG_POWER_RESET_GPIO=y
 CONFIG_POWER_RESET_QNAP=y
 CONFIG_POWER_RESET_RESTART=y
@@ -357,22 +366,26 @@ CONFIG_POWER_RESET_VEXPRESS=y
 # Native drivers
 #
 CONFIG_SENSORS_VEXPRESS=m
+# CONFIG_THERMAL_OF is not set
 
 #
 # Watchdog Device Drivers
 #
+# CONFIG_GPIO_WATCHDOG is not set
 # CONFIG_DW_WATCHDOG is not set
 # CONFIG_MAX63XX_WATCHDOG is not set
 
 #
 # Multifunction device drivers
 #
+CONFIG_MFD_AS3722=y
 # CONFIG_MFD_ASIC3 is not set
 # CONFIG_HTC_EGPIO is not set
 
 #
 # STMicroelectronics STMPE Interface Drivers
 #
+CONFIG_TWL4030_POWER=y
 # CONFIG_MFD_T7L66XB is not set
 # CONFIG_MFD_TC6387XB is not set
 # CONFIG_MFD_TC6393XB is not set
@@ -382,10 +395,39 @@ CONFIG_REGULATOR=y
 CONFIG_REGULATOR_FIXED_VOLTAGE=y
 # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
 # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+CONFIG_REGULATOR_88PM800=m
+CONFIG_REGULATOR_ACT8865=m
+CONFIG_REGULATOR_AAT2870=m
+CONFIG_REGULATOR_AS3711=m
+CONFIG_REGULATOR_AS3722=m
+CONFIG_REGULATOR_DA903X=m
+CONFIG_REGULATOR_DA9052=m
+CONFIG_REGULATOR_DA9055=m
+CONFIG_REGULATOR_DA9063=m
 CONFIG_REGULATOR_DA9210=m
 CONFIG_REGULATOR_LP8755=m
+CONFIG_REGULATOR_MAX14577=m
+CONFIG_REGULATOR_MAX8907=m
+CONFIG_REGULATOR_MAX8925=m
+CONFIG_REGULATOR_MAX8997=m
+CONFIG_REGULATOR_MAX8998=m
+CONFIG_REGULATOR_MAX77686=m
+CONFIG_REGULATOR_MAX77693=m
+CONFIG_REGULATOR_PALMAS=m
 CONFIG_REGULATOR_PFUZE100=m
+CONFIG_REGULATOR_RC5T583=m
+CONFIG_REGULATOR_S2MPS11=m
+CONFIG_REGULATOR_S5M8767=m
+CONFIG_REGULATOR_TPS65090=m
+CONFIG_REGULATOR_TPS6586X=m
+CONFIG_REGULATOR_TPS65910=m
+CONFIG_REGULATOR_TPS65912=m
+CONFIG_REGULATOR_TPS80031=m
 CONFIG_REGULATOR_VEXPRESS=m
+CONFIG_REGULATOR_WM831X=m
+CONFIG_REGULATOR_WM8350=m
+CONFIG_REGULATOR_WM8400=m
+CONFIG_REGULATOR_WM8994=m
 
 #
 # Media digital TV PCI Adapters
@@ -435,6 +477,12 @@ CONFIG_SND_DESIGNWARE_I2S=m
 CONFIG_SND_SOC_I2C_AND_SPI=m
 CONFIG_SND_SIMPLE_CARD=m
 
+#
+# USB Imaging devices
+#
+CONFIG_USB_MUSB_DSPS=m
+CONFIG_USB_MUSB_AM335X_CHILD=m
+
 #
 # USB Physical Layer drivers
 #
@@ -445,11 +493,13 @@ CONFIG_USB_ULPI=y
 #
 # MMC/SD/SDIO Host Controller Drivers
 #
+CONFIG_MMC_SDHCI_OF_ARASAN=m
 CONFIG_MMC_MVSDIO=m
 CONFIG_MMC_DW=m
-# CONFIG_MMC_DW_IDMAC is not set
+CONFIG_MMC_DW_IDMAC=y
 CONFIG_MMC_DW_PLTFM=m
 CONFIG_MMC_DW_EXYNOS=m
+CONFIG_MMC_DW_K3=m
 CONFIG_MMC_DW_PCI=m
 
 #
@@ -462,6 +512,12 @@ CONFIG_LEDS_REGULATOR=m
 #
 # CONFIG_EDAC is not set
 
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_AS3722=m
+CONFIG_RTC_DRV_HYM8563=m
+
 #
 # on-CPU RTC drivers
 #
@@ -479,6 +535,13 @@ CONFIG_DMA_OF=y
 #
 # Common Clock Framework
 #
+CONFIG_COMMON_CLK_SI570=m
+CONFIG_COMMON_CLK_QCOM=m
+CONFIG_MSM_GCC_8660=m
+CONFIG_MSM_GCC_8960=m
+CONFIG_MSM_MMCC_8960=m
+CONFIG_MSM_GCC_8974=m
+CONFIG_MSM_MMCC_8974=m
 CONFIG_MVEBU_CLK_COMMON=y
 
 #
@@ -487,7 +550,6 @@ CONFIG_MVEBU_CLK_COMMON=y
 CONFIG_CLKSRC_OF=y
 CONFIG_CLKSRC_MMIO=y
 CONFIG_OF_IOMMU=y
-# CONFIG_SHMOBILE_IOMMU is not set
 
 #
 # Rpmsg drivers
@@ -522,11 +584,13 @@ CONFIG_PHY_EXYNOS_DP_VIDEO=m
 #
 # Runtime Testing
 #
+# 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_UART_PL01X is not set
+# CONFIG_DEBUG_SET_MODULE_RONX is not set
 
 #
 # Executable Protections
index e14fa04..66cd54a 100644 (file)
@@ -147,7 +147,7 @@ CONFIG_RFKILL_REGULATOR=m
 # Generic Driver Options
 #
 # CONFIG_FIRMWARE_IN_KERNEL is not set
-CONFIG_REGMAP_I2C=m
+CONFIG_REGMAP_MMIO=m
 
 #
 # Bus devices
@@ -207,14 +207,20 @@ CONFIG_PCMCIA_XIRCOM=m
 #
 # Input device support
 #
-# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_MATRIXKMAP=m
 
 #
 # Input Device Drivers
 #
+CONFIG_KEYBOARD_ADP5520=m
 # CONFIG_KEYBOARD_SAMSUNG is not set
+CONFIG_KEYBOARD_STMPE=m
+CONFIG_KEYBOARD_TC3589X=m
 # CONFIG_MOUSE_GPIO is not set
+CONFIG_INPUT_TWL4030_PWRBUTTON=m
+CONFIG_INPUT_TWL4030_VIBRA=m
+CONFIG_INPUT_TWL6040_VIBRA=m
 
 #
 # Hardware I/O ports
@@ -229,7 +235,10 @@ CONFIG_SERIAL_ARC=m
 CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
 CONFIG_PPDEV=m
-CONFIG_I2C=m
+
+#
+# Multiplexer I2C Chip support
+#
 CONFIG_I2C_ALGOBIT=m
 
 #
@@ -251,6 +260,7 @@ CONFIG_I2C_PARPORT=m
 # Pin controllers
 #
 CONFIG_PINCTRL_SINGLE=m
+CONFIG_PINCTRL_PALMAS=y
 CONFIG_PINCTRL_KIRKWOOD=y
 
 #
@@ -258,29 +268,66 @@ CONFIG_PINCTRL_KIRKWOOD=y
 #
 CONFIG_GPIO_GENERIC_PLATFORM=y
 
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_TWL4030 is not set
+# CONFIG_GPIO_TWL6040 is not set
+
 #
 # SPI GPIO expanders:
 #
 CONFIG_GPIO_MCP23S08=m
 
+#
+# 1-wire Slaves
+#
+CONFIG_MAX8925_POWER=m
+CONFIG_WM831X_BACKUP=m
+CONFIG_WM831X_POWER=m
+CONFIG_WM8350_POWER=m
+CONFIG_BATTERY_88PM860X=m
+CONFIG_BATTERY_DA9030=m
+CONFIG_BATTERY_DA9052=m
+CONFIG_BATTERY_TWL4030_MADC=m
+CONFIG_CHARGER_88PM860X=m
+CONFIG_BATTERY_RX51=m
+CONFIG_CHARGER_TWL4030=m
+CONFIG_CHARGER_LP8788=m
+CONFIG_CHARGER_MAX8997=m
+CONFIG_CHARGER_MAX8998=m
+CONFIG_CHARGER_TPS65090=m
+
 #
 # Native drivers
 #
-CONFIG_CPU_THERMAL=y
+CONFIG_SENSORS_DA9052_ADC=m
+CONFIG_SENSORS_DA9055=m
+CONFIG_SENSORS_TWL4030_MADC=m
+CONFIG_SENSORS_WM831X=m
+CONFIG_SENSORS_WM8350=m
 CONFIG_KIRKWOOD_THERMAL=m
 
 #
 # Watchdog Device Drivers
 #
+CONFIG_DA9052_WATCHDOG=m
+CONFIG_DA9055_WATCHDOG=m
+CONFIG_WM831X_WATCHDOG=m
+CONFIG_WM8350_WATCHDOG=m
 CONFIG_ORION_WATCHDOG=m
+CONFIG_TWL4030_WATCHDOG=m
 
 #
 # Multifunction device drivers
 #
-CONFIG_MFD_CORE=m
 # CONFIG_ABX500_CORE is not set
+
+#
+# STMicroelectronics STMPE Interface Drivers
+#
 # CONFIG_MFD_SYSCON is not set
-# CONFIG_MFD_TPS65912 is not set
+CONFIG_REGULATOR_88PM8607=m
 # CONFIG_REGULATOR_AD5398 is not set
 # CONFIG_REGULATOR_FAN53555 is not set
 # CONFIG_REGULATOR_GPIO is not set
@@ -288,6 +335,7 @@ CONFIG_MFD_CORE=m
 # CONFIG_REGULATOR_LP3971 is not set
 # CONFIG_REGULATOR_LP3972 is not set
 CONFIG_REGULATOR_LP872X=m
+CONFIG_REGULATOR_LP8788=m
 # CONFIG_REGULATOR_MAX1586 is not set
 # CONFIG_REGULATOR_MAX8649 is not set
 # CONFIG_REGULATOR_MAX8660 is not set
@@ -297,43 +345,18 @@ CONFIG_REGULATOR_LP872X=m
 # CONFIG_REGULATOR_TPS62360 is not set
 # CONFIG_REGULATOR_TPS65023 is not set
 # CONFIG_REGULATOR_TPS6507X is not set
-
-#
-# Multimedia core support
-#
-CONFIG_VIDEO_V4L2=m
+CONFIG_REGULATOR_TWL4030=m
 
 #
 # Supported MMC/SDIO adapters
 #
 # CONFIG_MEDIA_PARPORT_SUPPORT is not set
 
-#
-# Media ancillary drivers (tuners, sensors, i2c, frontends)
-#
-CONFIG_VIDEO_IR_I2C=m
-
-#
-# soc_camera sensor drivers
-#
-CONFIG_MEDIA_TUNER=m
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA827X=m
-CONFIG_MEDIA_TUNER_TDA18271=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_MEDIA_TUNER_XC4000=m
-CONFIG_MEDIA_TUNER_MC44S803=m
-
 #
 # Graphics support
 #
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
-CONFIG_DRM_KMS_HELPER=m
 
 #
 # I2C encoder or helper chips
@@ -393,16 +416,50 @@ CONFIG_MMC_SDHCI=m
 #
 # LED drivers
 #
+CONFIG_LEDS_88PM860X=m
 # CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_LP8788=m
+CONFIG_LEDS_WM831X_STATUS=m
+CONFIG_LEDS_WM8350=m
+CONFIG_LEDS_DA903X=m
+CONFIG_LEDS_DA9052=m
 CONFIG_LEDS_PWM=m
+CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_NS2=m
 CONFIG_LEDS_NETXBIG=m
+CONFIG_LEDS_MAX8997=m
 
 #
 # LED Triggers
 #
 CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_88PM860X=m
+CONFIG_RTC_DRV_88PM80X=m
+CONFIG_RTC_DRV_LP8788=m
+CONFIG_RTC_DRV_MAX8907=m
+CONFIG_RTC_DRV_MAX8925=m
+CONFIG_RTC_DRV_MAX8998=m
+CONFIG_RTC_DRV_MAX8997=m
+CONFIG_RTC_DRV_MAX77686=m
+CONFIG_RTC_DRV_PALMAS=m
+CONFIG_RTC_DRV_TWL4030=m
+CONFIG_RTC_DRV_TPS6586X=m
+CONFIG_RTC_DRV_TPS65910=m
+CONFIG_RTC_DRV_TPS80031=m
+CONFIG_RTC_DRV_RC5T583=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_DA9052=m
+CONFIG_RTC_DRV_DA9055=m
+CONFIG_RTC_DRV_WM831X=m
+CONFIG_RTC_DRV_WM8350=m
+
 #
 # Microsoft Hyper-V guest support
 #
@@ -411,6 +468,8 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 #
 # Common Clock Framework
 #
+CONFIG_COMMON_CLK_WM831X=m
+CONFIG_COMMON_CLK_MAX77686=m
 CONFIG_KIRKWOOD_CLK=y
 
 #
@@ -418,14 +477,28 @@ CONFIG_KIRKWOOD_CLK=y
 #
 CONFIG_ORION_TIMER=y
 
+#
+# Analog to digital converters
+#
+CONFIG_LP8788_ADC=y
+CONFIG_TWL6030_GPADC=m
+
 #
 # Temperature sensors
 #
 CONFIG_PWM=y
 CONFIG_PWM_SYSFS=y
+CONFIG_PWM_LP3943=m
 CONFIG_PWM_PCA9685=m
+CONFIG_PWM_TWL=m
+CONFIG_PWM_TWL_LED=m
 CONFIG_ORION_IRQCHIP=y
 
+#
+# PHY Subsystem
+#
+CONFIG_PHY_MVEBU_SATA=y
+
 #
 # Lock Debugging (spinlocks, mutexes, etc...)
 #
index 73dd9ec..0f9716e 100644 (file)
@@ -78,15 +78,33 @@ CONFIG_ARCH_BCM=y
 #
 # CONFIG_ARCH_BCM_MOBILE is not set
 CONFIG_ARCH_BCM2835=y
+CONFIG_ARCH_BERLIN=y
+
+#
+# Marvell Berlin SoC variants
+#
+CONFIG_MACH_BERLIN_BG2=y
+CONFIG_MACH_BERLIN_BG2CD=y
 # CONFIG_ARCH_CNS3XXX is not set
 CONFIG_ARCH_HIGHBANK=y
+CONFIG_ARCH_HI3xxx=y
 CONFIG_ARCH_KEYSTONE=y
+CONFIG_ARCH_MSM=y
+CONFIG_ARCH_MSM_DT=y
+
+#
+# Qualcomm MSM SoC Selection
+#
+CONFIG_ARCH_MSM8X60=y
+CONFIG_ARCH_MSM8960=y
+CONFIG_ARCH_MSM8974=y
+CONFIG_MSM_SCM=y
+CONFIG_MSM_TIMER=y
 CONFIG_ARCH_MXC=y
 
 #
 # Freescale i.MX support
 #
-CONFIG_MXC_IRQ_PRIOR=y
 CONFIG_MXC_TZIC=y
 CONFIG_MXC_AVIC=y
 CONFIG_MXC_DEBUG_BOARD=y
@@ -118,6 +136,7 @@ CONFIG_MACH_IMX31_DT=y
 #
 # MX35 platforms:
 #
+CONFIG_MACH_IMX35_DT=y
 CONFIG_MACH_PCM043=y
 CONFIG_MACH_MX35_3DS=y
 CONFIG_MACH_EUKREA_CPUIMX35SD=y
@@ -135,6 +154,7 @@ CONFIG_MACH_EUKREA_MBIMXSD51_BASEBOARD=y
 #
 # Device tree only
 #
+CONFIG_SOC_IMX50=y
 CONFIG_SOC_IMX53=y
 CONFIG_SOC_IMX6Q=y
 CONFIG_SOC_IMX6SL=y
@@ -180,6 +200,7 @@ CONFIG_ARCH_OMAP4=y
 CONFIG_SOC_OMAP5=y
 CONFIG_SOC_AM33XX=y
 CONFIG_SOC_AM43XX=y
+CONFIG_SOC_DRA7XX=y
 CONFIG_ARCH_OMAP2PLUS=y
 
 #
@@ -188,7 +209,6 @@ CONFIG_ARCH_OMAP2PLUS=y
 CONFIG_ARCH_OMAP2PLUS_TYPICAL=y
 CONFIG_SOC_HAS_OMAP2_SDRC=y
 CONFIG_SOC_HAS_REALTIME_COUNTER=y
-CONFIG_SOC_DRA7XX=y
 CONFIG_SOC_OMAP3430=y
 CONFIG_SOC_TI81XX=y
 CONFIG_OMAP_PACKAGE_CBB=y
@@ -223,25 +243,7 @@ CONFIG_ARCH_SOCFPGA=y
 CONFIG_ARCH_STI=y
 CONFIG_SOC_STIH415=y
 CONFIG_SOC_STIH416=y
-CONFIG_ARCH_SHMOBILE_MULTI=y
-
-#
-# SH-Mobile System Type
-#
-CONFIG_ARCH_EMEV2=y
-
-#
-# SH-Mobile Board Type
-#
-CONFIG_MACH_KZM9D=y
-
-#
-# Timer and clock configuration
-#
-CONFIG_SHMOBILE_TIMER_HZ=128
-CONFIG_SH_TIMER_CMT=y
-CONFIG_SH_TIMER_TMU=y
-CONFIG_EM_TIMER_STI=y
+# CONFIG_ARCH_SHMOBILE_MULTI is not set
 CONFIG_ARCH_SUNXI=y
 CONFIG_ARCH_SIRF=y
 
@@ -292,6 +294,13 @@ 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
+
+#
+# Firmware options
+#
+# CONFIG_TRUSTED_FOUNDATIONS is not set
 
 #
 # Processor Type
@@ -431,7 +440,6 @@ CONFIG_NET_FLOW_LIMIT=y
 #
 CONFIG_FIRMWARE_IN_KERNEL=y
 CONFIG_SOC_BUS=y
-CONFIG_REGMAP_I2C=y
 CONFIG_REGMAP_MMIO=y
 
 #
@@ -577,8 +585,9 @@ CONFIG_NET_VENDOR_ALLWINNER=y
 CONFIG_SUN4I_EMAC=m
 CONFIG_NET_VENDOR_FREESCALE=y
 CONFIG_FEC=m
-CONFIG_MVNETA=m
 CONFIG_SFC_MTD=y
+CONFIG_DWMAC_SUNXI=y
+CONFIG_DWMAC_STI=y
 # CONFIG_TI_DAVINCI_EMAC is not set
 CONFIG_TI_DAVINCI_MDIO=m
 CONFIG_TI_DAVINCI_CPDMA=m
@@ -608,18 +617,11 @@ CONFIG_KEYBOARD_SAMSUNG=y
 # CONFIG_KEYBOARD_STMPE is not set
 CONFIG_KEYBOARD_OMAP4=m
 # CONFIG_KEYBOARD_TC3589X is not set
-CONFIG_KEYBOARD_TWL4030=m
 CONFIG_MOUSE_GPIO=m
-# CONFIG_INPUT_88PM860X_ONKEY is not set
-# CONFIG_INPUT_88PM80X_ONKEY is not set
 # CONFIG_INPUT_AB8500_PONKEY is not set
-# CONFIG_INPUT_MAX8925_ONKEY is not set
 CONFIG_INPUT_TWL4030_PWRBUTTON=y
 CONFIG_INPUT_TWL4030_VIBRA=y
 CONFIG_INPUT_TWL6040_VIBRA=y
-# CONFIG_INPUT_DA9052_ONKEY is not set
-# CONFIG_INPUT_DA9055_ONKEY is not set
-# CONFIG_INPUT_WM831X_ON is not set
 CONFIG_INPUT_SIRFSOC_ONKEY=y
 
 #
@@ -641,6 +643,8 @@ CONFIG_SERIAL_IMX=y
 CONFIG_SERIAL_IMX_CONSOLE=y
 CONFIG_SERIAL_UARTLITE=y
 CONFIG_SERIAL_UARTLITE_CONSOLE=y
+CONFIG_SERIAL_MSM=y
+CONFIG_SERIAL_MSM_CONSOLE=y
 CONFIG_SERIAL_VT8500=y
 CONFIG_SERIAL_VT8500_CONSOLE=y
 CONFIG_SERIAL_OMAP=y
@@ -653,7 +657,11 @@ CONFIG_HW_RANDOM_BCM2835=y
 CONFIG_HW_RANDOM_OMAP=m
 CONFIG_HW_RANDOM_OMAP3_ROM=m
 CONFIG_HW_RANDOM_MXC_RNGA=m
-CONFIG_I2C=y
+CONFIG_HW_RANDOM_MSM=m
+
+#
+# Multiplexer I2C Chip support
+#
 CONFIG_I2C_ALGOBIT=y
 
 #
@@ -679,10 +687,10 @@ CONFIG_PINCTRL_AB8500=y
 CONFIG_PINCTRL_AB8540=y
 CONFIG_PINCTRL_AB9540=y
 CONFIG_PINCTRL_AB8505=y
-# CONFIG_PINCTRL_AS3722 is not set
 CONFIG_PINCTRL_BCM2835=y
 CONFIG_PINCTRL_IMX=y
 CONFIG_PINCTRL_IMX35=y
+CONFIG_PINCTRL_IMX50=y
 CONFIG_PINCTRL_IMX51=y
 CONFIG_PINCTRL_IMX53=y
 CONFIG_PINCTRL_IMX6Q=y
@@ -692,7 +700,7 @@ CONFIG_PINCTRL_NOMADIK=y
 CONFIG_PINCTRL_DB8500=y
 CONFIG_PINCTRL_DB8540=y
 CONFIG_PINCTRL_ROCKCHIP=y
-# CONFIG_PINCTRL_SINGLE is not set
+CONFIG_PINCTRL_SINGLE=y
 CONFIG_PINCTRL_SIRF=y
 CONFIG_PINCTRL_SUNXI=y
 CONFIG_PINCTRL_ST=y
@@ -700,6 +708,7 @@ CONFIG_PINCTRL_TEGRA=y
 CONFIG_PINCTRL_TEGRA20=y
 CONFIG_PINCTRL_TEGRA30=y
 CONFIG_PINCTRL_TEGRA114=y
+CONFIG_PINCTRL_TEGRA124=y
 # CONFIG_PINCTRL_PALMAS is not set
 CONFIG_PINCTRL_ARMADA_370=y
 CONFIG_PINCTRL_ARMADA_XP=y
@@ -707,13 +716,13 @@ CONFIG_PINCTRL_WMT=y
 CONFIG_PINCTRL_WM8750=y
 CONFIG_PINCTRL_WM8850=y
 CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-# CONFIG_GPIO_DA9052 is not set
-# CONFIG_GPIO_DA9055 is not set
 
 #
 # Memory mapped GPIO drivers:
 #
+# CONFIG_GPIO_DAVINCI is not set
 # CONFIG_GPIO_GENERIC_PLATFORM is not set
+# CONFIG_GPIO_MSM_V2 is not set
 CONFIG_GPIO_MXC=y
 CONFIG_GPIO_PL061=y
 # CONFIG_GPIO_XILINX is not set
@@ -722,30 +731,14 @@ CONFIG_GPIO_PL061=y
 # I2C GPIO expanders:
 #
 CONFIG_GPIO_MC9S08DZ60=y
-# CONFIG_GPIO_RC5T583 is not set
-# CONFIG_GPIO_SX150X is not set
-# CONFIG_GPIO_STMPE is not set
-# CONFIG_GPIO_TC3589X is not set
-# CONFIG_GPIO_TPS65912 is not set
 CONFIG_GPIO_TWL4030=m
 CONFIG_GPIO_TWL6040=m
-# CONFIG_GPIO_WM831X is not set
-# CONFIG_GPIO_WM8350 is not set
-# CONFIG_GPIO_WM8994 is not set
-# CONFIG_GPIO_ADP5520 is not set
 
 #
 # SPI GPIO expanders:
 #
 # CONFIG_GPIO_MCP23S08 is not set
 
-#
-# MODULbus GPIO expanders:
-#
-# CONFIG_GPIO_PALMAS is not set
-# CONFIG_GPIO_TPS6586X is not set
-# CONFIG_GPIO_TPS65910 is not set
-
 #
 # 1-wire Bus Masters
 #
@@ -769,6 +762,7 @@ CONFIG_W1_MASTER_MXC=m
 # CONFIG_CHARGER_MAX8998 is not set
 # CONFIG_CHARGER_TPS65090 is not set
 # CONFIG_AB8500_BM is not set
+CONFIG_POWER_RESET_MSM=y
 
 #
 # Native drivers
@@ -798,39 +792,19 @@ CONFIG_DRA752_THERMAL=y
 # CONFIG_WM8350_WATCHDOG is not set
 # CONFIG_ARM_SP805_WATCHDOG is not set
 CONFIG_OMAP_WATCHDOG=y
+CONFIG_DAVINCI_WATCHDOG=m
 CONFIG_SUNXI_WATCHDOG=m
 # CONFIG_TWL4030_WATCHDOG is not set
 CONFIG_IMX2_WDT=m
 CONFIG_UX500_WATCHDOG=y
 CONFIG_SIRFSOC_WATCHDOG=m
 CONFIG_BCM2835_WDT=m
+CONFIG_BCM_KONA_WDT=m
+# CONFIG_BCM_KONA_WDT_DEBUG is not set
 
 #
 # Multifunction device drivers
 #
-CONFIG_MFD_CORE=y
-CONFIG_MFD_AS3711=y
-CONFIG_MFD_AS3722=y
-CONFIG_PMIC_ADP5520=y
-CONFIG_MFD_AAT2870_CORE=y
-CONFIG_PMIC_DA903X=y
-CONFIG_PMIC_DA9052=y
-CONFIG_MFD_DA9052_I2C=y
-CONFIG_MFD_DA9055=y
-CONFIG_MFD_DA9063=y
-CONFIG_HTC_I2CPLD=y
-CONFIG_MFD_88PM800=m
-CONFIG_MFD_88PM805=m
-CONFIG_MFD_88PM860X=y
-CONFIG_MFD_MAX77686=y
-CONFIG_MFD_MAX77693=y
-CONFIG_MFD_MAX8907=m
-CONFIG_MFD_MAX8925=y
-CONFIG_MFD_MAX8997=y
-CONFIG_MFD_MAX8998=y
-CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
-CONFIG_MFD_SMSC=y
 CONFIG_ABX500_CORE=y
 CONFIG_AB3100_CORE=y
 CONFIG_AB3100_OTP=y
@@ -838,47 +812,17 @@ CONFIG_AB8500_CORE=y
 # CONFIG_AB8500_DEBUG is not set
 CONFIG_AB8500_GPADC=y
 CONFIG_MFD_DB8500_PRCMU=y
-CONFIG_MFD_STMPE=y
 
 #
 # STMicroelectronics STMPE Interface Drivers
 #
-CONFIG_STMPE_I2C=y
 CONFIG_MFD_SYSCON=y
-CONFIG_MFD_LP8788=y
 CONFIG_MFD_OMAP_USB_HOST=y
-CONFIG_MFD_PALMAS=y
-CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS6586X=y
-CONFIG_MFD_TPS65910=y
-CONFIG_MFD_TPS65912=y
-CONFIG_MFD_TPS65912_I2C=y
-CONFIG_MFD_TPS80031=y
-CONFIG_TWL4030_CORE=y
-CONFIG_TWL4030_MADC=m
-CONFIG_TWL4030_POWER=y
-CONFIG_MFD_TWL4030_AUDIO=y
-CONFIG_TWL6040_CORE=y
-CONFIG_MFD_TC3589X=y
-CONFIG_MFD_WM8400=y
-CONFIG_MFD_WM831X=y
-CONFIG_MFD_WM831X_I2C=y
-CONFIG_MFD_WM8350=y
-CONFIG_MFD_WM8350_I2C=y
-CONFIG_MFD_WM8994=y
-CONFIG_REGULATOR_88PM800=m
 CONFIG_REGULATOR_88PM8607=y
 CONFIG_REGULATOR_AD5398=m
 CONFIG_REGULATOR_ANATOP=m
-CONFIG_REGULATOR_AAT2870=m
 CONFIG_REGULATOR_AB3100=y
 CONFIG_REGULATOR_AB8500=y
-CONFIG_REGULATOR_AS3711=m
-CONFIG_REGULATOR_AS3722=m
-CONFIG_REGULATOR_DA903X=m
-CONFIG_REGULATOR_DA9052=m
-CONFIG_REGULATOR_DA9055=m
-CONFIG_REGULATOR_DA9063=m
 CONFIG_REGULATOR_DBX500_PRCMU=y
 CONFIG_REGULATOR_DB8500_PRCMU=y
 CONFIG_REGULATOR_FAN53555=m
@@ -891,38 +835,14 @@ CONFIG_REGULATOR_LP8788=y
 CONFIG_REGULATOR_MAX1586=m
 CONFIG_REGULATOR_MAX8649=m
 CONFIG_REGULATOR_MAX8660=m
-CONFIG_REGULATOR_MAX8907=m
-CONFIG_REGULATOR_MAX8925=m
 CONFIG_REGULATOR_MAX8952=m
 CONFIG_REGULATOR_MAX8973=m
-CONFIG_REGULATOR_MAX8997=m
-CONFIG_REGULATOR_MAX8998=m
-CONFIG_REGULATOR_MAX77686=m
-CONFIG_REGULATOR_MAX77693=m
-CONFIG_REGULATOR_PALMAS=m
-CONFIG_REGULATOR_RC5T583=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
 CONFIG_REGULATOR_TI_ABB=y
 CONFIG_REGULATOR_TPS51632=m
 CONFIG_REGULATOR_TPS62360=m
 CONFIG_REGULATOR_TPS65023=m
 CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_TPS65090=m
-CONFIG_REGULATOR_TPS6586X=m
-CONFIG_REGULATOR_TPS65910=m
-CONFIG_REGULATOR_TPS65912=m
-CONFIG_REGULATOR_TPS80031=m
 CONFIG_REGULATOR_TWL4030=y
-CONFIG_REGULATOR_WM831X=m
-CONFIG_REGULATOR_WM8350=m
-CONFIG_REGULATOR_WM8400=m
-CONFIG_REGULATOR_WM8994=m
-
-#
-# Multimedia core support
-#
-CONFIG_VIDEO_V4L2=y
 
 #
 # Media drivers
@@ -940,33 +860,12 @@ CONFIG_VIDEO_CODA=m
 CONFIG_VIDEO_TI_VPE=m
 # CONFIG_VIDEO_TI_VPE_DEBUG is not set
 
-#
-# Media ancillary drivers (tuners, sensors, i2c, frontends)
-#
-CONFIG_VIDEO_IR_I2C=y
-
-#
-# soc_camera sensor drivers
-#
-CONFIG_MEDIA_TUNER=y
-CONFIG_MEDIA_TUNER_SIMPLE=y
-CONFIG_MEDIA_TUNER_TDA8290=y
-CONFIG_MEDIA_TUNER_TDA827X=y
-CONFIG_MEDIA_TUNER_TDA18271=y
-CONFIG_MEDIA_TUNER_TDA9887=y
-CONFIG_MEDIA_TUNER_MT20XX=y
-CONFIG_MEDIA_TUNER_XC2028=y
-CONFIG_MEDIA_TUNER_XC5000=y
-CONFIG_MEDIA_TUNER_XC4000=y
-CONFIG_MEDIA_TUNER_MC44S803=y
-
 #
 # Graphics support
 #
 CONFIG_TEGRA_HOST1X=y
 # CONFIG_TEGRA_HOST1X_FIREWALL is not set
 CONFIG_DRM=y
-CONFIG_DRM_KMS_HELPER=y
 
 #
 # I2C encoder or helper chips
@@ -976,12 +875,14 @@ CONFIG_DRM_EXYNOS_DMABUF=y
 CONFIG_DRM_EXYNOS_HDMI=y
 CONFIG_DRM_EXYNOS_VIDI=y
 CONFIG_DRM_EXYNOS_G2D=y
+CONFIG_DRM_EXYNOS_IPP=y
+CONFIG_DRM_EXYNOS_FIMC=y
+CONFIG_DRM_EXYNOS_ROTATOR=y
 # CONFIG_DRM_UDL is not set
 CONFIG_DRM_OMAP=m
 CONFIG_DRM_OMAP_NUM_CRTCS=1
-CONFIG_DRM_TEGRA=y
-# CONFIG_DRM_TEGRA_DEBUG is not set
-# CONFIG_DRM_TEGRA_STAGING is not set
+# CONFIG_DRM_MSM is not set
+# CONFIG_DRM_TEGRA is not set
 # CONFIG_VIDEO_OUTPUT_CONTROL is not set
 CONFIG_VIDEOMODE_HELPERS=y
 CONFIG_FB_MODE_HELPERS=y
@@ -995,6 +896,7 @@ CONFIG_FB_MODE_HELPERS=y
 # CONFIG_FB_WM8505 is not set
 # CONFIG_FB_XILINX is not set
 # CONFIG_FB_DA8XX is not set
+# CONFIG_FB_MSM is not set
 # CONFIG_FB_MX3 is not set
 CONFIG_OMAP2_VRFB=y
 CONFIG_OMAP2_DSS=y
@@ -1022,16 +924,6 @@ CONFIG_DISPLAY_PANEL_DPI=m
 CONFIG_DISPLAY_PANEL_DSI_CM=m
 CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m
 # CONFIG_LCD_PLATFORM is not set
-# CONFIG_BACKLIGHT_DA903X is not set
-# CONFIG_BACKLIGHT_DA9052 is not set
-# CONFIG_BACKLIGHT_MAX8925 is not set
-# CONFIG_BACKLIGHT_WM831X is not set
-# CONFIG_BACKLIGHT_ADP5520 is not set
-# CONFIG_BACKLIGHT_88PM860X is not set
-# CONFIG_BACKLIGHT_AAT2870 is not set
-# CONFIG_BACKLIGHT_LP8788 is not set
-# CONFIG_BACKLIGHT_PANDORA is not set
-# CONFIG_BACKLIGHT_AS3711 is not set
 
 #
 # Console display driver support
@@ -1040,8 +932,13 @@ CONFIG_SND_DMAENGINE_PCM=m
 CONFIG_SND_ARMAACI=m
 CONFIG_SND_SOC_AC97_BUS=y
 CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
+CONFIG_SND_SOC_ADI=m
+CONFIG_SND_SOC_ADI_AXI_I2S=m
+CONFIG_SND_SOC_ADI_AXI_SPDIF=m
+CONFIG_SND_BCM2835_SOC_I2S=m
 CONFIG_SND_DAVINCI_SOC=m
 CONFIG_SND_DAVINCI_SOC_MCASP=m
+CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m
 CONFIG_SND_AM33XX_SOC_EVM=m
 CONFIG_SND_SOC_FSL_SSI=m
 CONFIG_SND_SOC_FSL_SPDIF=m
@@ -1079,15 +976,16 @@ CONFIG_SND_SOC_TEGRA_WM8903=m
 CONFIG_SND_SOC_TEGRA_WM9712=m
 CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
 CONFIG_SND_SOC_TEGRA_ALC5632=m
+CONFIG_SND_SOC_TEGRA_MAX98090=m
 CONFIG_SND_SOC_UX500=m
 # CONFIG_SND_SOC_UX500_PLAT_DMA is not set
 # CONFIG_SND_SOC_UX500_MACH_MOP500 is not set
 CONFIG_SND_SOC_ALC5632=m
 CONFIG_SND_SOC_DMIC=m
+CONFIG_SND_SOC_MAX98090=m
 CONFIG_SND_SOC_HDMI_CODEC=m
 CONFIG_SND_SOC_RT5640=m
 CONFIG_SND_SOC_SGTL5000=m
-CONFIG_SND_SOC_SPDIF=m
 CONFIG_SND_SOC_TLV320AIC23=m
 CONFIG_SND_SOC_TLV320AIC3X=m
 CONFIG_SND_SOC_TWL4030=m
@@ -1109,24 +1007,35 @@ CONFIG_USB_ARCH_HAS_EHCI=y
 CONFIG_USB_EHCI_MXC=m
 CONFIG_USB_EHCI_HCD_OMAP=y
 CONFIG_USB_EHCI_HCD_ORION=m
+CONFIG_USB_EHCI_MSM=m
 CONFIG_USB_EHCI_TEGRA=y
-# CONFIG_USB_CNS3XXX_EHCI is not set
 CONFIG_USB_OHCI_HCD_OMAP3=y
-CONFIG_USB_CNS3XXX_OHCI=y
 CONFIG_USB_UHCI_SUPPORT_NON_PCI_HC=y
 CONFIG_USB_UHCI_PLATFORM=y
 CONFIG_USB_IMX21_HCD=m
 
+#
+# USB Imaging devices
+#
+CONFIG_USB_MUSB_OMAP2PLUS=m
+CONFIG_USB_MUSB_AM35X=m
+# CONFIG_USB_INVENTRA_DMA is not set
+# CONFIG_USB_TI_CPPI41_DMA is not set
+# CONFIG_USB_TUSB_OMAP_DMA is not set
+
 #
 # USB Physical Layer drivers
 #
 CONFIG_AB8500_USB=m
+CONFIG_KEYSTONE_USB_PHY=m
 CONFIG_NOP_USB_XCEIV=y
 CONFIG_OMAP_CONTROL_USB=m
 CONFIG_OMAP_USB3=m
 CONFIG_SAMSUNG_USBPHY=y
 CONFIG_SAMSUNG_USB2PHY=y
 CONFIG_SAMSUNG_USB3PHY=y
+CONFIG_TWL6030_USB=m
+CONFIG_USB_MSM_OTG=m
 CONFIG_USB_MXS_PHY=m
 CONFIG_USB_ULPI_VIEWPORT=y
 CONFIG_MMC=y
@@ -1142,7 +1051,6 @@ CONFIG_MMC_BLOCK=y
 CONFIG_MMC_ARMMMCI=m
 CONFIG_MMC_SDHCI=y
 CONFIG_MMC_SDHCI_IO_ACCESSORS=y
-CONFIG_MMC_SDHCI_CNS3XXX=m
 CONFIG_MMC_SDHCI_ESDHC_IMX=m
 CONFIG_MMC_SDHCI_TEGRA=m
 CONFIG_MMC_SDHCI_SIRF=m
@@ -1182,7 +1090,6 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=y
 #
 # CONFIG_RTC_DRV_88PM860X is not set
 # CONFIG_RTC_DRV_88PM80X is not set
-CONFIG_RTC_DRV_AS3722=m
 # CONFIG_RTC_DRV_LP8788 is not set
 # CONFIG_RTC_DRV_MAX8907 is not set
 # CONFIG_RTC_DRV_MAX8925 is not set
@@ -1195,7 +1102,6 @@ CONFIG_RTC_DRV_AS3722=m
 # CONFIG_RTC_DRV_TPS65910 is not set
 # CONFIG_RTC_DRV_TPS80031 is not set
 # CONFIG_RTC_DRV_RC5T583 is not set
-CONFIG_RTC_DRV_S5M=m
 
 #
 # Platform RTC drivers
@@ -1215,6 +1121,7 @@ CONFIG_RTC_DRV_OMAP=m
 CONFIG_RTC_DRV_PL030=m
 CONFIG_RTC_DRV_PL031=m
 CONFIG_RTC_DRV_VT8500=m
+CONFIG_RTC_DRV_SUNXI=m
 CONFIG_RTC_DRV_TEGRA=m
 CONFIG_RTC_DRV_MXC=m
 CONFIG_RTC_DRV_SIRFSOC=m
@@ -1234,9 +1141,16 @@ CONFIG_IMX_SDMA=m
 CONFIG_IMX_DMA=m
 # CONFIG_MXS_DMA is not set
 CONFIG_DMA_OMAP=y
+CONFIG_DMA_BCM2835=m
 CONFIG_TI_CPPI41=m
+CONFIG_K3_DMA=m
 CONFIG_DMA_VIRTUAL_CHANNELS=y
 
+#
+# DMA Clients
+#
+# CONFIG_VFIO is not set
+
 #
 # Speakup console speech
 #
@@ -1253,11 +1167,10 @@ CONFIG_DMA_VIRTUAL_CHANNELS=y
 # CONFIG_COMMON_CLK_WM831X is not set
 CONFIG_COMMON_CLK_VERSATILE=y
 # CONFIG_COMMON_CLK_MAX77686 is not set
-CONFIG_COMMON_CLK_S2MPS11=m
-CONFIG_CLK_TWL6040=m
 CONFIG_COMMON_CLK_AXI_CLKGEN=m
 CONFIG_COMMON_CLK_KEYSTONE=y
 CONFIG_MVEBU_CLK_CPU=y
+CONFIG_MVEBU_CLK_COREDIV=y
 CONFIG_ARMADA_370_CLK=y
 CONFIG_ARMADA_XP_CLK=y
 CONFIG_HWSPINLOCK=m
@@ -1271,6 +1184,7 @@ CONFIG_DW_APB_TIMER=y
 CONFIG_DW_APB_TIMER_OF=y
 CONFIG_ARMADA_370_XP_TIMER=y
 CONFIG_SUN4I_TIMER=y
+CONFIG_SUN5I_HSTIMER=y
 CONFIG_VT8500_TIMER=y
 CONFIG_CADENCE_TTC_TIMER=y
 CONFIG_CLKSRC_NOMADIK_MTU=y
@@ -1285,6 +1199,9 @@ CONFIG_PL320_MBOX=y
 CONFIG_OMAP_MBOX=m
 CONFIG_OMAP2PLUS_MBOX=m
 CONFIG_OMAP_MBOX_KFIFO_SIZE=256
+CONFIG_IOMMU_API=y
+CONFIG_MSM_IOMMU=y
+CONFIG_IOMMU_PGTABLES_L2=y
 # CONFIG_OMAP_IOMMU is not set
 # CONFIG_TEGRA_IOMMU_GART is not set
 # CONFIG_TEGRA_IOMMU_SMMU is not set
@@ -1309,12 +1226,14 @@ CONFIG_TEGRA30_MC=y
 CONFIG_ARM_GIC=y
 CONFIG_ARM_VIC=y
 CONFIG_ARM_VIC_NR=2
+CONFIG_DW_APB_ICTL=y
 CONFIG_ARCH_HAS_RESET_CONTROLLER=y
 
 #
 # PHY Subsystem
 #
 CONFIG_OMAP_USB2=m
+CONFIG_TWL4030_USB=m
 
 #
 # File systems
index e1e6180..5105723 100644 (file)
@@ -25,8 +25,16 @@ CONFIG_TICK_CPU_ACCOUNTING=y
 # CONFIG_ARCH_MULTI_V6 is not set
 # CONFIG_ARCH_MVEBU is not set
 # CONFIG_ARCH_BCM is not set
+
+#
+# Marvell Berlin SoC variants
+#
 # CONFIG_ARCH_HIGHBANK is not set
 # CONFIG_ARCH_KEYSTONE is not set
+
+#
+# Qualcomm MSM SoC Selection
+#
 # CONFIG_ARCH_MXC is not set
 
 #
@@ -37,12 +45,12 @@ CONFIG_TICK_CPU_ACCOUNTING=y
 # CONFIG_ARCH_OMAP4 is not set
 # CONFIG_SOC_AM33XX is not set
 # CONFIG_SOC_AM43XX is not set
+# CONFIG_SOC_DRA7XX is not set
 
 #
 # TI OMAP2/3/4 Specific Features
 #
 # CONFIG_SOC_HAS_OMAP2_SDRC is not set
-# CONFIG_SOC_DRA7XX is not set
 
 #
 # OMAP Legacy Platform Data Board Type
@@ -50,7 +58,6 @@ CONFIG_TICK_CPU_ACCOUNTING=y
 # CONFIG_ARCH_ROCKCHIP is not set
 # CONFIG_ARCH_SOCFPGA is not set
 # CONFIG_ARCH_STI is not set
-# CONFIG_ARCH_SHMOBILE_MULTI is not set
 # CONFIG_ARCH_SUNXI is not set
 # CONFIG_ARCH_SIRF is not set
 
@@ -72,10 +79,11 @@ CONFIG_TICK_CPU_ACCOUNTING=y
 #
 CONFIG_ARM_LPAE=y
 CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
-# CONFIG_CACHE_L2X0 is not set
+CONFIG_CACHE_PL310=y
 # CONFIG_ARM_ERRATA_430973 is not set
 # CONFIG_ARM_ERRATA_643719 is not set
 # CONFIG_ARM_ERRATA_720789 is not set
+CONFIG_PL310_ERRATA_753970=y
 # CONFIG_ARM_ERRATA_754322 is not set
 # CONFIG_ARM_ERRATA_754327 is not set
 # CONFIG_ARM_ERRATA_764369 is not set
@@ -134,7 +142,7 @@ CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20"
 # Generic Driver Options
 #
 # CONFIG_FIRMWARE_IN_KERNEL is not set
-CONFIG_REGMAP_I2C=m
+CONFIG_REGMAP_MMIO=m
 
 #
 # Bus devices
@@ -217,6 +225,10 @@ CONFIG_PRINTER=m
 CONFIG_LP_CONSOLE=y
 CONFIG_PPDEV=m
 CONFIG_HW_RANDOM_OMAP=y
+
+#
+# Multiplexer I2C Chip support
+#
 CONFIG_I2C_ALGOBIT=m
 
 #
@@ -234,12 +246,6 @@ CONFIG_I2C_PARPORT=m
 #
 # CONFIG_PPS_CLIENT_PARPORT is not set
 
-#
-# Pin controllers
-#
-# CONFIG_PINMUX is not set
-# CONFIG_PINCONF is not set
-
 #
 # Texas Instruments thermal drivers
 #
@@ -253,7 +259,6 @@ CONFIG_I2C_PARPORT=m
 #
 # Multifunction device drivers
 #
-CONFIG_MFD_CORE=m
 # CONFIG_MFD_AS3711 is not set
 # CONFIG_MFD_AS3722 is not set
 # CONFIG_PMIC_ADP5520 is not set
@@ -327,14 +332,12 @@ CONFIG_MFD_CORE=m
 # CONFIG_TEGRA_HOST1X is not set
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
-CONFIG_DRM_KMS_HELPER=m
 
 #
 # I2C encoder or helper chips
 #
 # CONFIG_DRM_EXYNOS is not set
 CONFIG_DRM_UDL=m
-# CONFIG_DRM_TEGRA is not set
 CONFIG_VIDEO_OUTPUT_CONTROL=m
 # CONFIG_FB_MODE_HELPERS is not set
 
@@ -410,6 +413,7 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 # CONFIG_TI_EDMA is not set
 # CONFIG_DMA_OMAP is not set
 # CONFIG_TI_CPPI41 is not set
+CONFIG_DMA_VIRTUAL_CHANNELS=m
 
 #
 # Microsoft Hyper-V guest support
@@ -438,6 +442,7 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m
 #
 CONFIG_PWM=y
 CONFIG_PWM_SYSFS=y
+CONFIG_PWM_LP3943=m
 CONFIG_PWM_PCA9685=m
 # CONFIG_PWM_TEGRA is not set
 
index 4eb1887..ade6c5a 100644 (file)
@@ -102,7 +102,6 @@ CONFIG_IPC_NS=y
 CONFIG_USER_NS=y
 CONFIG_PID_NS=y
 CONFIG_NET_NS=y
-CONFIG_UIDGID_STRICT_TYPE_CHECKS=y
 CONFIG_SCHED_AUTOGROUP=y
 # CONFIG_SYSFS_DEPRECATED is not set
 CONFIG_RELAY=y
@@ -155,6 +154,7 @@ CONFIG_HAVE_OPROFILE=y
 # CONFIG_KPROBES is not set
 CONFIG_JUMP_LABEL=y
 # CONFIG_HAVE_64BIT_ALIGNED_ACCESS is not set
+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
 CONFIG_HAVE_KPROBES=y
 CONFIG_HAVE_KRETPROBES=y
 CONFIG_HAVE_ARCH_TRACEHOOK=y
@@ -168,6 +168,11 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y
 CONFIG_HAVE_ARCH_JUMP_LABEL=y
 CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
 CONFIG_SECCOMP_FILTER=y
+CONFIG_HAVE_CC_STACKPROTECTOR=y
+CONFIG_CC_STACKPROTECTOR=y
+# CONFIG_CC_STACKPROTECTOR_NONE is not set
+CONFIG_CC_STACKPROTECTOR_REGULAR=y
+# CONFIG_CC_STACKPROTECTOR_STRONG is not set
 CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
 CONFIG_OLD_SIGSUSPEND3=y
 
@@ -242,6 +247,7 @@ CONFIG_FREEZER=y
 # Processor type and features
 #
 CONFIG_ZONE_DMA=y
+CONFIG_NO_BOOTMEM=y
 CONFIG_SWIOTLB=y
 CONFIG_IOMMU_HELPER=y
 CONFIG_PREEMPT_NONE=y
@@ -263,8 +269,8 @@ CONFIG_CLEANCACHE=y
 CONFIG_CMA=y
 # CONFIG_CMA_DEBUG is not set
 # CONFIG_ZBUD is not set
+# CONFIG_ZSMALLOC is not set
 CONFIG_SECCOMP=y
-CONFIG_CC_STACKPROTECTOR=y
 # CONFIG_HZ_100 is not set
 # CONFIG_HZ_250 is not set
 CONFIG_HZ_300=y
@@ -490,6 +496,7 @@ CONFIG_NF_NAT_SIP=m
 CONFIG_NF_NAT_TFTP=m
 CONFIG_NETFILTER_SYNPROXY=m
 CONFIG_NF_TABLES=m
+CONFIG_NF_TABLES_INET=m
 CONFIG_NFT_EXTHDR=m
 CONFIG_NFT_META=m
 CONFIG_NFT_CT=m
@@ -499,6 +506,9 @@ CONFIG_NFT_COUNTER=m
 CONFIG_NFT_LOG=m
 CONFIG_NFT_LIMIT=m
 CONFIG_NFT_NAT=m
+CONFIG_NFT_QUEUE=m
+CONFIG_NFT_REJECT=m
+CONFIG_NFT_REJECT_INET=m
 # CONFIG_NFT_COMPAT is not set
 CONFIG_NETFILTER_XTABLES=y
 
@@ -543,6 +553,7 @@ CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
 #
 CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
 CONFIG_NETFILTER_XT_MATCH_BPF=m
+CONFIG_NETFILTER_XT_MATCH_CGROUP=m
 CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
 CONFIG_NETFILTER_XT_MATCH_COMMENT=m
 CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
@@ -559,8 +570,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m
 CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
 CONFIG_NETFILTER_XT_MATCH_HELPER=m
 CONFIG_NETFILTER_XT_MATCH_HL=m
+CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
 CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
 # CONFIG_NETFILTER_XT_MATCH_IPVS is not set
+CONFIG_NETFILTER_XT_MATCH_L2TP=m
 CONFIG_NETFILTER_XT_MATCH_LENGTH=m
 CONFIG_NETFILTER_XT_MATCH_LIMIT=m
 CONFIG_NETFILTER_XT_MATCH_MAC=m
@@ -647,9 +660,9 @@ CONFIG_NF_DEFRAG_IPV4=y
 CONFIG_NF_CONNTRACK_IPV4=y
 # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
 CONFIG_NF_TABLES_IPV4=m
-CONFIG_NFT_REJECT_IPV4=m
 CONFIG_NFT_CHAIN_ROUTE_IPV4=m
 CONFIG_NFT_CHAIN_NAT_IPV4=m
+CONFIG_NFT_REJECT_IPV4=m
 CONFIG_NF_TABLES_ARP=m
 CONFIG_IP_NF_IPTABLES=y
 CONFIG_IP_NF_MATCH_AH=m
@@ -686,6 +699,7 @@ CONFIG_NF_CONNTRACK_IPV6=y
 CONFIG_NF_TABLES_IPV6=m
 CONFIG_NFT_CHAIN_ROUTE_IPV6=m
 CONFIG_NFT_CHAIN_NAT_IPV6=m
+CONFIG_NFT_REJECT_IPV6=m
 CONFIG_IP6_NF_IPTABLES=y
 CONFIG_IP6_NF_MATCH_AH=m
 CONFIG_IP6_NF_MATCH_EUI64=m
@@ -772,6 +786,7 @@ CONFIG_LLC=y
 # CONFIG_LAPB is not set
 # CONFIG_PHONET is not set
 # CONFIG_IEEE802154 is not set
+CONFIG_6LOWPAN_IPHC=m
 CONFIG_NET_SCHED=y
 
 #
@@ -798,6 +813,8 @@ CONFIG_NET_SCH_QFQ=m
 CONFIG_NET_SCH_CODEL=m
 CONFIG_NET_SCH_FQ_CODEL=m
 CONFIG_NET_SCH_FQ=m
+CONFIG_NET_SCH_HHF=m
+CONFIG_NET_SCH_PIE=m
 CONFIG_NET_SCH_INGRESS=m
 CONFIG_NET_SCH_PLUG=m
 
@@ -853,7 +870,8 @@ CONFIG_NETLINK_MMAP=y
 CONFIG_NETLINK_DIAG=m
 # CONFIG_NET_MPLS_GSO is not set
 # CONFIG_HSR is not set
-CONFIG_NETPRIO_CGROUP=m
+CONFIG_CGROUP_NET_PRIO=m
+CONFIG_CGROUP_NET_CLASSID=y
 CONFIG_NET_RX_BUSY_POLL=y
 CONFIG_BQL=y
 
@@ -955,6 +973,7 @@ CONFIG_FW_LOADER_USER_HELPER=y
 # CONFIG_DEBUG_DEVRES is not set
 # CONFIG_GENERIC_CPU_DEVICES is not set
 CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
 CONFIG_REGMAP_IRQ=y
 CONFIG_DMA_SHARED_BUFFER=y
 
@@ -1111,7 +1130,6 @@ CONFIG_AIC7XXX_RESET_DELAY_MS=5000
 CONFIG_AIC7XXX_DEBUG_ENABLE=y
 CONFIG_AIC7XXX_DEBUG_MASK=0
 CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
-# CONFIG_SCSI_AIC7XXX_OLD is not set
 CONFIG_SCSI_AIC79XX=m
 CONFIG_AIC79XX_CMDS_PER_DEVICE=32
 CONFIG_AIC79XX_RESET_DELAY_MS=4000
@@ -1169,7 +1187,7 @@ CONFIG_SCSI_DC390T=m
 CONFIG_SCSI_PMCRAID=m
 CONFIG_SCSI_PM8001=m
 # CONFIG_SCSI_SRP is not set
-CONFIG_SCSI_BFA_FC=m
+# CONFIG_SCSI_BFA_FC is not set
 CONFIG_SCSI_VIRTIO=m
 CONFIG_SCSI_CHELSIO_FCOE=m
 CONFIG_SCSI_DH=y
@@ -1290,11 +1308,13 @@ CONFIG_MD_FAULTY=m
 CONFIG_BCACHE=m
 # CONFIG_BCACHE_DEBUG is not set
 # CONFIG_BCACHE_CLOSURES_DEBUG is not set
+CONFIG_BLK_DEV_DM_BUILTIN=y
 CONFIG_BLK_DEV_DM=y
 # CONFIG_DM_DEBUG is not set
-CONFIG_DM_BUFIO=m
+CONFIG_DM_BUFIO=y
 CONFIG_DM_BIO_PRISON=m
 CONFIG_DM_PERSISTENT_DATA=m
+# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set
 CONFIG_DM_CRYPT=m
 CONFIG_DM_SNAPSHOT=y
 # CONFIG_DM_THIN_PROVISIONING is not set
@@ -1469,6 +1489,8 @@ CONFIG_IXGBE=m
 CONFIG_IXGBE_HWMON=y
 CONFIG_IXGBEVF=m
 CONFIG_I40E=m
+CONFIG_I40E_VXLAN=y
+CONFIG_I40EVF=m
 CONFIG_NET_VENDOR_I825XX=y
 CONFIG_IP1000=m
 CONFIG_JME=m
@@ -1480,6 +1502,7 @@ CONFIG_SKGE_GENESIS=y
 CONFIG_SKY2=m
 # CONFIG_SKY2_DEBUG is not set
 CONFIG_NET_VENDOR_MELLANOX=y
+# CONFIG_MLX5_CORE is not set
 CONFIG_NET_VENDOR_MICREL=y
 # CONFIG_KS8842 is not set
 # CONFIG_KS8851_MLL is not set
@@ -1612,6 +1635,7 @@ CONFIG_USB_NET_HUAWEI_CDC_NCM=m
 CONFIG_USB_NET_CDC_MBIM=m
 CONFIG_USB_NET_DM9601=m
 CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
 CONFIG_USB_NET_SMSC75XX=m
 CONFIG_USB_NET_SMSC95XX=m
 CONFIG_USB_NET_GL620A=m
@@ -1665,6 +1689,7 @@ CONFIG_ATH9K=m
 CONFIG_ATH9K_PCI=y
 CONFIG_ATH9K_AHB=y
 # CONFIG_ATH9K_DEBUGFS is not set
+CONFIG_ATH9K_WOW=y
 # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set
 CONFIG_ATH9K_RFKILL=y
 CONFIG_ATH9K_HTC=m
@@ -1686,13 +1711,16 @@ CONFIG_ATH10K_PCI=m
 CONFIG_WCN36XX=m
 # CONFIG_WCN36XX_DEBUGFS is not set
 CONFIG_B43=m
+CONFIG_B43_BCMA=y
 CONFIG_B43_SSB=y
 CONFIG_B43_PCI_AUTOSELECT=y
 CONFIG_B43_PCICORE_AUTOSELECT=y
 CONFIG_B43_SDIO=y
+CONFIG_B43_BCMA_PIO=y
 CONFIG_B43_PIO=y
 CONFIG_B43_PHY_N=y
 CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
 CONFIG_B43_LEDS=y
 CONFIG_B43_HWRNG=y
 # CONFIG_B43_DEBUG is not set
@@ -1707,7 +1735,11 @@ CONFIG_B43LEGACY_PIO=y
 CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
 # CONFIG_B43LEGACY_DMA_MODE is not set
 # CONFIG_B43LEGACY_PIO_MODE is not set
+CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
 # CONFIG_BRCMFMAC is not set
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
 CONFIG_HOSTAP=m
 CONFIG_HOSTAP_FIRMWARE=y
 CONFIG_HOSTAP_FIRMWARE_NVRAM=y
@@ -1885,8 +1917,8 @@ CONFIG_HISAX_FRITZ_PCIPNP=m
 CONFIG_ISDN_CAPI=m
 CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
 CONFIG_CAPI_TRACE=y
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPI20=m
+CONFIG_ISDN_CAPI_MIDDLEWARE=y
 CONFIG_ISDN_CAPI_CAPIDRV=m
 
 #
@@ -1952,6 +1984,7 @@ CONFIG_KEYBOARD_LM8333=m
 # CONFIG_KEYBOARD_OPENCORES is not set
 # CONFIG_KEYBOARD_STOWAWAY is not set
 # CONFIG_KEYBOARD_SUNKBD is not set
+CONFIG_KEYBOARD_TWL4030=m
 # CONFIG_KEYBOARD_XTKBD is not set
 CONFIG_INPUT_MOUSE=y
 CONFIG_MOUSE_PS2=m
@@ -1974,8 +2007,11 @@ CONFIG_MOUSE_SYNAPTICS_USB=m
 # CONFIG_INPUT_TABLET is not set
 # CONFIG_INPUT_TOUCHSCREEN is not set
 CONFIG_INPUT_MISC=y
+# CONFIG_INPUT_88PM860X_ONKEY is not set
+# CONFIG_INPUT_88PM80X_ONKEY is not set
 # CONFIG_INPUT_AD714X is not set
 # CONFIG_INPUT_BMA150 is not set
+# CONFIG_INPUT_MAX8925_ONKEY is not set
 # CONFIG_INPUT_MMA8450 is not set
 # CONFIG_INPUT_MPU3050 is not set
 # CONFIG_INPUT_GP2A is not set
@@ -1990,6 +2026,9 @@ CONFIG_INPUT_RETU_PWRBUTTON=m
 CONFIG_INPUT_UINPUT=m
 # CONFIG_INPUT_PCF8574 is not set
 CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
+# CONFIG_INPUT_DA9052_ONKEY is not set
+# CONFIG_INPUT_DA9055_ONKEY is not set
+# CONFIG_INPUT_WM831X_ON is not set
 # CONFIG_INPUT_ADXL34X is not set
 # CONFIG_INPUT_IMS_PCU is not set
 # CONFIG_INPUT_CMA3000 is not set
@@ -2085,10 +2124,19 @@ CONFIG_R3964=m
 CONFIG_RAW_DRIVER=y
 CONFIG_MAX_RAW_DEVS=8192
 # CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
 CONFIG_I2C_BOARDINFO=y
 CONFIG_I2C_COMPAT=y
 CONFIG_I2C_CHARDEV=m
-# CONFIG_I2C_MUX is not set
+CONFIG_I2C_MUX=y
+
+#
+# Multiplexer I2C Chip support
+#
+CONFIG_I2C_MUX_GPIO=m
+CONFIG_I2C_MUX_PCA9541=m
+CONFIG_I2C_MUX_PCA954x=m
+CONFIG_I2C_MUX_PINCTRL=m
 CONFIG_I2C_HELPER_AUTO=y
 CONFIG_I2C_SMBUS=m
 CONFIG_I2C_ALGOPCA=m
@@ -2133,6 +2181,7 @@ CONFIG_I2C_SIMTEC=m
 #
 CONFIG_I2C_DIOLAN_U2C=m
 CONFIG_I2C_PARPORT_LIGHT=m
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
 # CONFIG_I2C_TAOS_EVM is not set
 CONFIG_I2C_TINY_USB=m
 CONFIG_I2C_VIPERBOARD=m
@@ -2188,20 +2237,33 @@ CONFIG_GPIOLIB=y
 CONFIG_GPIO_DEVRES=y
 # CONFIG_DEBUG_GPIO is not set
 CONFIG_GPIO_SYSFS=y
+# CONFIG_GPIO_DA9052 is not set
+# CONFIG_GPIO_DA9055 is not set
 
 #
 # Memory mapped GPIO drivers:
 #
+# CONFIG_GPIO_SCH311X is not set
 CONFIG_GPIO_TS5500=m
 # CONFIG_GPIO_VX855 is not set
 
 #
 # I2C GPIO expanders:
 #
+# CONFIG_GPIO_LP3943 is not set
 # CONFIG_GPIO_MAX7300 is not set
 # CONFIG_GPIO_MAX732X is not set
 # CONFIG_GPIO_PCA953X is not set
 # CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_RC5T583 is not set
+# CONFIG_GPIO_SX150X is not set
+# CONFIG_GPIO_STMPE is not set
+# CONFIG_GPIO_TC3589X is not set
+# CONFIG_GPIO_TPS65912 is not set
+# CONFIG_GPIO_WM831X is not set
+# CONFIG_GPIO_WM8350 is not set
+# CONFIG_GPIO_WM8994 is not set
+# CONFIG_GPIO_ADP5520 is not set
 # CONFIG_GPIO_ADP5588 is not set
 
 #
@@ -2227,6 +2289,9 @@ CONFIG_GPIO_TS5500=m
 #
 # MODULbus GPIO expanders:
 #
+# CONFIG_GPIO_PALMAS is not set
+# CONFIG_GPIO_TPS6586X is not set
+# CONFIG_GPIO_TPS65910 is not set
 
 #
 # USB GPIO expanders:
@@ -2278,6 +2343,7 @@ CONFIG_GENERIC_ADC_BATTERY=m
 # CONFIG_CHARGER_MAX8903 is not set
 # CONFIG_CHARGER_LP8727 is not set
 # CONFIG_CHARGER_GPIO is not set
+CONFIG_CHARGER_MAX14577=m
 # CONFIG_CHARGER_BQ2415X is not set
 # CONFIG_CHARGER_BQ24190 is not set
 # CONFIG_CHARGER_BQ24735 is not set
@@ -2470,38 +2536,94 @@ CONFIG_BCMA_POSSIBLE=y
 #
 # Broadcom specific AMBA
 #
-# CONFIG_BCMA is not set
+CONFIG_BCMA=m
+CONFIG_BCMA_BLOCKIO=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_HOST_SOC=y
+CONFIG_BCMA_DRIVER_GMAC_CMN=y
+# CONFIG_BCMA_DRIVER_GPIO is not set
+# CONFIG_BCMA_DEBUG is not set
 
 #
 # Multifunction device drivers
 #
+CONFIG_MFD_CORE=y
+CONFIG_MFD_AS3711=y
+CONFIG_PMIC_ADP5520=y
+CONFIG_MFD_AAT2870_CORE=y
 # CONFIG_MFD_CROS_EC is not set
+CONFIG_PMIC_DA903X=y
+CONFIG_PMIC_DA9052=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_DA9055=y
+CONFIG_MFD_DA9063=y
 # CONFIG_MFD_MC13XXX_I2C is not set
 # CONFIG_HTC_PASIC3 is not set
+CONFIG_HTC_I2CPLD=y
 CONFIG_LPC_ICH=m
 CONFIG_LPC_SCH=m
 # CONFIG_MFD_JANZ_CMODIO is not set
 CONFIG_MFD_KEMPLD=m
+CONFIG_MFD_88PM800=m
+CONFIG_MFD_88PM805=m
+CONFIG_MFD_88PM860X=y
+CONFIG_MFD_MAX14577=y
+CONFIG_MFD_MAX77686=y
+CONFIG_MFD_MAX77693=y
+CONFIG_MFD_MAX8907=m
+CONFIG_MFD_MAX8925=y
+CONFIG_MFD_MAX8997=y
+CONFIG_MFD_MAX8998=y
 CONFIG_MFD_VIPERBOARD=m
 CONFIG_MFD_RETU=m
 # CONFIG_MFD_PCF50633 is not set
 # CONFIG_UCB1400_CORE is not set
 # CONFIG_MFD_RDC321X is not set
 CONFIG_MFD_RTSX_PCI=m
+CONFIG_MFD_RC5T583=y
+CONFIG_MFD_SEC_CORE=y
 # CONFIG_MFD_SI476X_CORE is not set
 CONFIG_MFD_SM501=m
 CONFIG_MFD_SM501_GPIO=y
+CONFIG_MFD_SMSC=y
+CONFIG_MFD_STMPE=y
+
+#
+# STMicroelectronics STMPE Interface Drivers
+#
+CONFIG_STMPE_I2C=y
 # CONFIG_MFD_TI_AM335X_TSCADC is not set
+CONFIG_MFD_LP3943=m
+CONFIG_MFD_LP8788=y
+CONFIG_MFD_PALMAS=y
 # CONFIG_TPS6105X is not set
 # CONFIG_TPS65010 is not set
 # CONFIG_TPS6507X is not set
+CONFIG_MFD_TPS65090=y
 # CONFIG_MFD_TPS65217 is not set
+CONFIG_MFD_TPS6586X=y
+CONFIG_MFD_TPS65910=y
+CONFIG_MFD_TPS65912=y
+CONFIG_MFD_TPS65912_I2C=y
+CONFIG_MFD_TPS80031=y
+CONFIG_TWL4030_CORE=y
+CONFIG_TWL4030_MADC=m
+CONFIG_MFD_TWL4030_AUDIO=y
+CONFIG_TWL6040_CORE=y
 CONFIG_MFD_WL1273_CORE=m
 CONFIG_MFD_LM3533=m
 # CONFIG_MFD_TIMBERDALE is not set
+CONFIG_MFD_TC3589X=y
 # CONFIG_MFD_TMIO is not set
 CONFIG_MFD_VX855=m
 # CONFIG_MFD_ARIZONA_I2C is not set
+CONFIG_MFD_WM8400=y
+CONFIG_MFD_WM831X=y
+CONFIG_MFD_WM831X_I2C=y
+CONFIG_MFD_WM8350=y
+CONFIG_MFD_WM8350_I2C=y
+CONFIG_MFD_WM8994=y
 CONFIG_MEDIA_SUPPORT=y
 
 #
@@ -2515,6 +2637,7 @@ CONFIG_MEDIA_RC_SUPPORT=y
 CONFIG_MEDIA_CONTROLLER=y
 CONFIG_VIDEO_DEV=y
 CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_V4L2=y
 # CONFIG_VIDEO_ADV_DEBUG is not set
 # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
 CONFIG_VIDEO_TUNER=m
@@ -2528,7 +2651,6 @@ CONFIG_VIDEOBUF2_CORE=m
 CONFIG_VIDEOBUF2_MEMOPS=m
 CONFIG_VIDEOBUF2_DMA_CONTIG=m
 CONFIG_VIDEOBUF2_VMALLOC=m
-CONFIG_VIDEO_V4L2_INT_DEVICE=m
 CONFIG_DVB_CORE=y
 CONFIG_DVB_NET=y
 CONFIG_TTPCI_EEPROM=m
@@ -2623,7 +2745,6 @@ CONFIG_VIDEO_CPIA2=m
 CONFIG_USB_ZR364XX=m
 CONFIG_USB_STKWEBCAM=m
 CONFIG_USB_S2255=m
-# CONFIG_USB_SN9C102 is not set
 CONFIG_VIDEO_USBTV=m
 
 #
@@ -2703,6 +2824,7 @@ CONFIG_DVB_B2C2_FLEXCOP_USB=m
 # Webcam, TV (analog/digital) USB devices
 #
 CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
 CONFIG_VIDEO_EM28XX_ALSA=m
 CONFIG_VIDEO_EM28XX_DVB=m
 CONFIG_VIDEO_EM28XX_RC=m
@@ -2805,6 +2927,7 @@ CONFIG_SMS_SIANO_RC=y
 #
 CONFIG_MEDIA_SUBDRV_AUTOSELECT=y
 CONFIG_MEDIA_ATTACH=y
+CONFIG_VIDEO_IR_I2C=y
 
 #
 # Audio decoders, processors and mixers
@@ -2849,6 +2972,11 @@ CONFIG_VIDEO_MT9V011=m
 # Video improvement chips
 #
 
+#
+# Audio/Video compression chips
+#
+CONFIG_VIDEO_SAA6752HS=m
+
 #
 # Miscellaneous helper chips
 #
@@ -2874,13 +3002,24 @@ CONFIG_SOC_CAMERA_OV9640=m
 CONFIG_SOC_CAMERA_OV9740=m
 CONFIG_SOC_CAMERA_RJ54N1=m
 CONFIG_SOC_CAMERA_TW9910=m
+CONFIG_MEDIA_TUNER=y
+CONFIG_MEDIA_TUNER_SIMPLE=y
+CONFIG_MEDIA_TUNER_TDA8290=y
+CONFIG_MEDIA_TUNER_TDA827X=y
+CONFIG_MEDIA_TUNER_TDA18271=y
+CONFIG_MEDIA_TUNER_TDA9887=y
+CONFIG_MEDIA_TUNER_MT20XX=y
 CONFIG_MEDIA_TUNER_MT2060=m
 CONFIG_MEDIA_TUNER_MT2063=m
 CONFIG_MEDIA_TUNER_MT2266=m
 CONFIG_MEDIA_TUNER_MT2131=m
 CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_XC2028=y
+CONFIG_MEDIA_TUNER_XC5000=y
+CONFIG_MEDIA_TUNER_XC4000=y
 CONFIG_MEDIA_TUNER_MXL5005S=m
 CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_MC44S803=y
 CONFIG_MEDIA_TUNER_MAX2165=m
 CONFIG_MEDIA_TUNER_TDA18218=m
 CONFIG_MEDIA_TUNER_FC0011=m
@@ -2889,6 +3028,7 @@ CONFIG_MEDIA_TUNER_FC0013=m
 CONFIG_MEDIA_TUNER_TDA18212=m
 CONFIG_MEDIA_TUNER_E4000=m
 CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_M88TS2022=m
 CONFIG_MEDIA_TUNER_TUA9001=m
 CONFIG_MEDIA_TUNER_IT913X=m
 CONFIG_MEDIA_TUNER_R820T=m
@@ -2900,6 +3040,7 @@ CONFIG_DVB_STB0899=m
 CONFIG_DVB_STB6100=m
 CONFIG_DVB_STV090x=m
 CONFIG_DVB_STV6110x=m
+CONFIG_DVB_M88DS3103=m
 
 #
 # Multistandard (cable + terrestrial) frontends
@@ -3024,6 +3165,7 @@ CONFIG_DVB_AF9033=m
 #
 CONFIG_VGA_ARB=y
 CONFIG_VGA_ARB_MAX_GPUS=16
+CONFIG_DRM_KMS_HELPER=m
 CONFIG_DRM_KMS_FB_HELPER=y
 # CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
 CONFIG_DRM_TTM=m
@@ -3043,6 +3185,7 @@ CONFIG_DRM_AST=m
 CONFIG_DRM_MGAG200=m
 CONFIG_DRM_CIRRUS_QEMU=m
 CONFIG_DRM_QXL=m
+CONFIG_DRM_BOCHS=m
 # CONFIG_VGASTATE is not set
 CONFIG_HDMI=y
 CONFIG_FB=y
@@ -3069,6 +3212,7 @@ CONFIG_FB_TILEBLITTING=y
 # CONFIG_FB_ASILIANT is not set
 # CONFIG_FB_IMSTT is not set
 # CONFIG_FB_UVESA is not set
+# CONFIG_FB_OPENCORES is not set
 # CONFIG_FB_S1D13XXX is not set
 # CONFIG_FB_NVIDIA is not set
 # CONFIG_FB_RIVA is not set
@@ -3106,11 +3250,21 @@ CONFIG_LCD_CLASS_DEVICE=m
 CONFIG_BACKLIGHT_CLASS_DEVICE=y
 # CONFIG_BACKLIGHT_GENERIC is not set
 # CONFIG_BACKLIGHT_LM3533 is not set
+# CONFIG_BACKLIGHT_DA903X is not set
+# CONFIG_BACKLIGHT_DA9052 is not set
+# CONFIG_BACKLIGHT_MAX8925 is not set
+# CONFIG_BACKLIGHT_WM831X is not set
+# CONFIG_BACKLIGHT_ADP5520 is not set
 # CONFIG_BACKLIGHT_ADP8860 is not set
 # CONFIG_BACKLIGHT_ADP8870 is not set
+# CONFIG_BACKLIGHT_88PM860X is not set
+# CONFIG_BACKLIGHT_AAT2870 is not set
 # CONFIG_BACKLIGHT_LM3630A is not set
 # CONFIG_BACKLIGHT_LM3639 is not set
 # CONFIG_BACKLIGHT_LP855X is not set
+# CONFIG_BACKLIGHT_LP8788 is not set
+# CONFIG_BACKLIGHT_PANDORA is not set
+# CONFIG_BACKLIGHT_AS3711 is not set
 # CONFIG_BACKLIGHT_GPIO is not set
 # CONFIG_BACKLIGHT_LV5207LP is not set
 # CONFIG_BACKLIGHT_BD6107 is not set
@@ -3223,19 +3377,19 @@ CONFIG_SND_HDA_INPUT_BEEP=y
 CONFIG_SND_HDA_INPUT_BEEP_MODE=1
 CONFIG_SND_HDA_INPUT_JACK=y
 # CONFIG_SND_HDA_PATCH_LOADER is not set
-CONFIG_SND_HDA_CODEC_REALTEK=y
-CONFIG_SND_HDA_CODEC_ANALOG=y
-CONFIG_SND_HDA_CODEC_SIGMATEL=y
-CONFIG_SND_HDA_CODEC_VIA=y
-CONFIG_SND_HDA_CODEC_HDMI=y
-CONFIG_SND_HDA_CODEC_CIRRUS=y
-CONFIG_SND_HDA_CODEC_CONEXANT=y
-CONFIG_SND_HDA_CODEC_CA0110=y
-CONFIG_SND_HDA_CODEC_CA0132=y
+CONFIG_SND_HDA_CODEC_REALTEK=m
+CONFIG_SND_HDA_CODEC_ANALOG=m
+CONFIG_SND_HDA_CODEC_SIGMATEL=m
+CONFIG_SND_HDA_CODEC_VIA=m
+CONFIG_SND_HDA_CODEC_HDMI=m
+CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CONEXANT=m
+CONFIG_SND_HDA_CODEC_CA0110=m
+CONFIG_SND_HDA_CODEC_CA0132=m
 # CONFIG_SND_HDA_CODEC_CA0132_DSP is not set
-CONFIG_SND_HDA_CODEC_CMEDIA=y
-CONFIG_SND_HDA_CODEC_SI3054=y
-CONFIG_SND_HDA_GENERIC=y
+CONFIG_SND_HDA_CODEC_CMEDIA=m
+CONFIG_SND_HDA_CODEC_SI3054=m
+CONFIG_SND_HDA_GENERIC=m
 CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
 CONFIG_SND_HDSP=m
 CONFIG_SND_HDSPM=m
@@ -3381,7 +3535,7 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
 #
 CONFIG_USB_DEFAULT_PERSIST=y
 # CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_OTG is not set
+CONFIG_USB_OTG=y
 # CONFIG_USB_OTG_WHITELIST is not set
 # CONFIG_USB_OTG_BLACKLIST_HUB is not set
 CONFIG_USB_MON=m
@@ -3416,6 +3570,7 @@ CONFIG_USB_SL811_HCD_ISO=y
 # CONFIG_USB_R8A66597_HCD is not set
 CONFIG_USB_WHCI_HCD=m
 CONFIG_USB_HWA_HCD=m
+CONFIG_USB_HCD_BCMA=m
 CONFIG_USB_HCD_SSB=m
 # CONFIG_USB_HCD_TEST_MODE is not set
 
@@ -3456,6 +3611,12 @@ CONFIG_USB_STORAGE_ENE_UB6250=m
 #
 CONFIG_USB_MDC800=m
 CONFIG_USB_MICROTEK=m
+CONFIG_USB_MUSB_HDRC=m
+CONFIG_USB_MUSB_HOST=y
+CONFIG_USB_MUSB_TUSB6010=m
+CONFIG_USB_MUSB_UX500=m
+CONFIG_USB_UX500_DMA=y
+# CONFIG_MUSB_PIO_ONLY is not set
 CONFIG_USB_DWC3=m
 CONFIG_USB_DWC3_HOST=y
 
@@ -3464,11 +3625,15 @@ CONFIG_USB_DWC3_HOST=y
 #
 CONFIG_USB_DWC3_EXYNOS=m
 CONFIG_USB_DWC3_PCI=m
+CONFIG_USB_DWC3_KEYSTONE=m
 
 #
 # Debugging features
 #
 # CONFIG_USB_DWC3_DEBUG is not set
+CONFIG_USB_DWC2=m
+# CONFIG_USB_DWC2_DEBUG is not set
+# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
 CONFIG_USB_CHIPIDEA=m
 # CONFIG_USB_CHIPIDEA_HOST is not set
 # CONFIG_USB_CHIPIDEA_DEBUG is not set
@@ -3506,6 +3671,7 @@ CONFIG_USB_SERIAL_MCT_U232=m
 # CONFIG_USB_SERIAL_METRO is not set
 CONFIG_USB_SERIAL_MOS7720=m
 CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MXUPORT=m
 # CONFIG_USB_SERIAL_NAVMAN is not set
 CONFIG_USB_SERIAL_PL2303=m
 CONFIG_USB_SERIAL_OTI6858=m
@@ -3566,6 +3732,7 @@ CONFIG_USB_XUSBATM=m
 # USB Physical Layer drivers
 #
 CONFIG_USB_PHY=y
+CONFIG_USB_OTG_FSM=m
 CONFIG_USB_GPIO_VBUS=m
 CONFIG_USB_ISP1301=m
 CONFIG_USB_RCAR_PHY=m
@@ -3688,6 +3855,7 @@ CONFIG_RTC_DRV_MAX6900=m
 CONFIG_RTC_DRV_RS5C372=m
 CONFIG_RTC_DRV_ISL1208=m
 CONFIG_RTC_DRV_ISL12022=m
+CONFIG_RTC_DRV_ISL12057=m
 CONFIG_RTC_DRV_X1205=m
 CONFIG_RTC_DRV_PCF2127=m
 CONFIG_RTC_DRV_PCF8523=m
@@ -3702,6 +3870,7 @@ CONFIG_RTC_DRV_RX8581=m
 CONFIG_RTC_DRV_RX8025=m
 CONFIG_RTC_DRV_EM3027=m
 CONFIG_RTC_DRV_RV3029C2=m
+CONFIG_RTC_DRV_S5M=m
 
 #
 # SPI RTC drivers
@@ -3794,7 +3963,10 @@ CONFIG_RTLLIB_CRYPTO_WEP=m
 # CONFIG_RTL8192E is not set
 # CONFIG_R8712U is not set
 # CONFIG_R8188EU is not set
+CONFIG_R8821AE=m
 # CONFIG_RTS5139 is not set
+CONFIG_RTS5208=m
+# CONFIG_RTS5208_DEBUG is not set
 # CONFIG_TRANZPORT is not set
 # CONFIG_IDE_PHISON is not set
 # CONFIG_LINE6_USB is not set
@@ -3870,7 +4042,6 @@ CONFIG_RTLLIB_CRYPTO_WEP=m
 #
 # CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
 # CONFIG_IIO_SIMPLE_DUMMY is not set
-# CONFIG_ZSMALLOC is not set
 # CONFIG_FB_SM7XX is not set
 # CONFIG_CRYSTALHD is not set
 # CONFIG_FB_XGI is not set
@@ -3899,11 +4070,9 @@ CONFIG_BPCTL=m
 CONFIG_CED1401=m
 # CONFIG_DGRP is not set
 CONFIG_FIREWIRE_SERIAL=m
-CONFIG_USB_DWC2=m
-# CONFIG_USB_DWC2_DEBUG is not set
-# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
+CONFIG_FWTTY_MAX_TOTAL_PORTS=64
+CONFIG_FWTTY_MAX_CARD_PORTS=32
 # CONFIG_LUSTRE_FS is not set
-CONFIG_USB_BTMTK=m
 # CONFIG_XILLYBUS is not set
 # CONFIG_DGNC is not set
 # CONFIG_DGAP is not set
@@ -3914,8 +4083,9 @@ CONFIG_COMMON_CLK=y
 #
 # Common Clock Framework
 #
-# CONFIG_COMMON_CLK_DEBUG is not set
 CONFIG_COMMON_CLK_SI5351=m
+CONFIG_COMMON_CLK_S2MPS11=m
+CONFIG_CLK_TWL6040=m
 
 #
 # Hardware Spinlock drivers
@@ -3998,6 +4168,11 @@ CONFIG_IIO_ST_SENSORS_CORE=m
 # CONFIG_IIO_ST_GYRO_3AXIS is not set
 # CONFIG_ITG3200 is not set
 
+#
+# Humidity sensors
+#
+CONFIG_DHT11=m
+
 #
 # Inertial measurement units
 #
@@ -4008,6 +4183,7 @@ CONFIG_IIO_ST_SENSORS_CORE=m
 #
 # CONFIG_ADJD_S311 is not set
 # CONFIG_APDS9300 is not set
+CONFIG_CM32181=m
 # CONFIG_CM36651 is not set
 # CONFIG_GP2AP020A00F is not set
 # CONFIG_HID_SENSOR_ALS is not set
@@ -4025,6 +4201,11 @@ CONFIG_IIO_ST_SENSORS_CORE=m
 # CONFIG_HID_SENSOR_MAGNETOMETER_3D is not set
 # CONFIG_IIO_ST_MAGN_3AXIS is not set
 
+#
+# Inclinometer sensors
+#
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
+
 #
 # Triggers - standalone
 #
@@ -4034,6 +4215,7 @@ CONFIG_IIO_INTERRUPT_TRIGGER=m
 #
 # Pressure sensors
 #
+CONFIG_MPL3115=m
 CONFIG_IIO_ST_PRESS=m
 CONFIG_IIO_ST_PRESS_I2C=m
 
@@ -4043,14 +4225,15 @@ CONFIG_IIO_ST_PRESS_I2C=m
 # CONFIG_TMP006 is not set
 # CONFIG_VME_BUS is not set
 # CONFIG_IPACK_BUS is not set
-# CONFIG_RESET_CONTROLLER is not set
+CONFIG_RESET_CONTROLLER=y
 # CONFIG_FMC is not set
 
 #
 # PHY Subsystem
 #
-CONFIG_GENERIC_PHY=m
+CONFIG_GENERIC_PHY=y
 CONFIG_PHY_EXYNOS_MIPI_VIDEO=m
+CONFIG_BCM_KONA_USB2_PHY=m
 # CONFIG_POWERCAP is not set
 
 #
@@ -4115,7 +4298,6 @@ CONFIG_QUOTACTL=y
 CONFIG_AUTOFS4_FS=y
 CONFIG_FUSE_FS=m
 CONFIG_CUSE=m
-CONFIG_GENERIC_ACL=y
 
 #
 # Caches
@@ -4346,6 +4528,7 @@ CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
 # CONFIG_DETECT_HUNG_TASK is not set
 # CONFIG_PANIC_ON_OOPS is not set
 CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_PANIC_TIMEOUT=120
 CONFIG_SCHED_DEBUG=y
 CONFIG_SCHEDSTATS=y
 CONFIG_TIMER_STATS=y
@@ -4427,6 +4610,8 @@ CONFIG_ASYNC_RAID6_TEST=m
 # CONFIG_TEST_KSTRTOX is not set
 # CONFIG_BUILD_DOCSRC is not set
 # CONFIG_DMA_API_DEBUG is not set
+# CONFIG_TEST_MODULE is not set
+# CONFIG_TEST_USER_COPY is not set
 # CONFIG_SAMPLES is not set
 CONFIG_HAVE_ARCH_KGDB=y
 # CONFIG_KGDB is not set
index 7d39dde..9f81e21 100644 (file)
@@ -48,7 +48,7 @@ CONFIG_LBDAF=y
 #
 CONFIG_X86_BIGSMP=y
 # CONFIG_X86_GOLDFISH is not set
-# CONFIG_X86_WANT_INTEL_MID is not set
+# CONFIG_X86_INTEL_MID is not set
 # CONFIG_X86_RDC321X is not set
 CONFIG_X86_32_NON_STANDARD=y
 # CONFIG_X86_NUMAQ is not set
@@ -113,7 +113,7 @@ CONFIG_SPARSEMEM_STATIC=y
 CONFIG_HIGHPTE=y
 # CONFIG_MATH_EMULATION is not set
 CONFIG_PHYSICAL_START=0x400000
-CONFIG_X86_NEED_RELOCS=y
+CONFIG_RANDOMIZE_BASE_MAX_OFFSET=0x20000000
 CONFIG_PHYSICAL_ALIGN=0x400000
 
 #
index c3ae439..9ce1201 100644 (file)
@@ -1,4 +1,9 @@
 
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_CC_STACKPROTECTOR is not set
+
 #
 # Processor type and features
 #
@@ -28,6 +33,7 @@ CONFIG_OLPC_XO15_SCI=y
 # Generic Driver Options
 #
 # CONFIG_SYS_HYPERVISOR is not set
+CONFIG_REGMAP_MMIO=m
 CONFIG_DMA_CMA=y
 
 #
@@ -75,6 +81,7 @@ CONFIG_MDIO_BUS_MUX_MMIOREG=m
 # Input Device Drivers
 #
 CONFIG_MOUSE_PS2_OLPC=y
+# CONFIG_INPUT_GPIO_BEEPER is not set
 
 #
 # Hardware I/O ports
@@ -93,6 +100,11 @@ CONFIG_SERIO_APBPS2=m
 CONFIG_SERIAL_OF_PLATFORM=y
 # CONFIG_SERIAL_XILINX_PS_UART is not set
 
+#
+# Multiplexer I2C Chip support
+#
+# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set
+
 #
 # I2C system bus drivers (mostly embedded / system-on-chip)
 #
@@ -102,7 +114,15 @@ CONFIG_I2C_PXA_PCI=y
 #
 # Pin controllers
 #
+CONFIG_PINMUX=y
+CONFIG_PINCONF=y
+CONFIG_GENERIC_PINCONF=y
+CONFIG_PINCTRL_AS3722=y
+# CONFIG_PINCTRL_CAPRI is not set
+CONFIG_PINCTRL_MSM=y
+CONFIG_PINCTRL_MSM8X74=m
 # CONFIG_PINCTRL_SINGLE is not set
+CONFIG_PINCTRL_PALMAS=y
 CONFIG_OF_GPIO=y
 
 #
@@ -121,6 +141,11 @@ CONFIG_GPIO_ADNP=m
 CONFIG_GPIO_CS5535=y
 # CONFIG_GPIO_SODAVILLE is not set
 
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MCP23S08 is not set
+
 #
 # MODULbus GPIO expanders:
 #
@@ -130,12 +155,23 @@ CONFIG_GPIO_CS5535=y
 # 1-wire Slaves
 #
 CONFIG_BATTERY_OLPC=y
+CONFIG_POWER_RESET_AS3722=y
 CONFIG_POWER_RESET_GPIO=y
 
+#
+# ACPI drivers
+#
+# CONFIG_THERMAL_OF is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_GPIO_WATCHDOG is not set
+
 #
 # Multifunction device drivers
 #
-CONFIG_MFD_CORE=y
+CONFIG_MFD_AS3722=y
 
 #
 # Frame buffer hardware drivers
@@ -148,11 +184,28 @@ CONFIG_BACKLIGHT_PWM=m
 #
 # CONFIG_FB_SSD1307 is not set
 
+#
+# USB Imaging devices
+#
+CONFIG_USB_MUSB_DSPS=m
+CONFIG_USB_MUSB_AM335X_CHILD=m
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_SDHCI_OF_ARASAN=m
+
 #
 # LED drivers
 #
 CONFIG_LEDS_PWM=m
 
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_AS3722=m
+CONFIG_RTC_DRV_HYM8563=m
+
 #
 # on-CPU RTC drivers
 #
@@ -177,6 +230,13 @@ CONFIG_XO1_RFKILL=m
 # Common Clock Framework
 #
 # CONFIG_COMMON_CLK_SI5351 is not set
+CONFIG_COMMON_CLK_SI570=m
+CONFIG_COMMON_CLK_QCOM=m
+CONFIG_MSM_GCC_8660=m
+CONFIG_MSM_GCC_8960=m
+CONFIG_MSM_MMCC_8960=m
+CONFIG_MSM_GCC_8974=m
+CONFIG_MSM_MMCC_8974=m
 
 #
 # Hardware Spinlock drivers
@@ -193,7 +253,10 @@ CONFIG_OF_IOMMU=y
 #
 CONFIG_PWM=y
 CONFIG_PWM_SYSFS=y
+CONFIG_PWM_LP3943=m
 CONFIG_PWM_PCA9685=m
+CONFIG_PWM_TWL=m
+CONFIG_PWM_TWL_LED=m
 CONFIG_IRQCHIP=y
 
 #
index 09b67c3..66f76cf 100644 (file)
@@ -51,7 +51,6 @@ CONFIG_PCSPKR_PLATFORM=y
 #
 CONFIG_SLUB_CPU_PARTIAL=y
 CONFIG_OPROFILE_NMI_TIMER=y
-CONFIG_ARCH_USE_BUILTIN_BSWAP=y
 CONFIG_USER_RETURN_NOTIFIER=y
 CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
 
@@ -85,7 +84,6 @@ CONFIG_KVM_GUEST=y
 # CONFIG_KVM_DEBUG_FS is not set
 CONFIG_PARAVIRT_TIME_ACCOUNTING=y
 CONFIG_PARAVIRT_CLOCK=y
-CONFIG_NO_BOOTMEM=y
 # CONFIG_MEMTEST is not set
 # CONFIG_MK8 is not set
 # CONFIG_MCORE2 is not set
@@ -119,9 +117,9 @@ CONFIG_MICROCODE=m
 CONFIG_MICROCODE_INTEL=y
 CONFIG_MICROCODE_AMD=y
 CONFIG_MICROCODE_OLD_INTERFACE=y
-CONFIG_MICROCODE_INTEL_LIB=y
 # CONFIG_MICROCODE_INTEL_EARLY is not set
 # CONFIG_MICROCODE_AMD_EARLY is not set
+# CONFIG_X86_MSR is not set
 CONFIG_X86_CPUID=y
 CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
 CONFIG_ARCH_DMA_ADDR_T_64BIT=y
@@ -154,6 +152,8 @@ CONFIG_X86_SMAP=y
 CONFIG_EFI=y
 CONFIG_EFI_STUB=y
 CONFIG_RELOCATABLE=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_X86_NEED_RELOCS=y
 CONFIG_HOTPLUG_CPU=y
 # CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
 # CONFIG_DEBUG_HOTPLUG_CPU0 is not set
@@ -304,7 +304,6 @@ CONFIG_RFKILL_GPIO=m
 #
 # CONFIG_FIRMWARE_IN_KERNEL is not set
 CONFIG_SYS_HYPERVISOR=y
-CONFIG_REGMAP_I2C=m
 
 #
 # Bus devices
@@ -414,7 +413,6 @@ CONFIG_IXGBE_DCA=y
 CONFIG_MLX4_EN=m
 CONFIG_MLX4_CORE=m
 CONFIG_MLX4_DEBUG=y
-# CONFIG_MLX5_CORE is not set
 CONFIG_MYRI10GE_DCA=y
 CONFIG_PCH_GBE=m
 CONFIG_ATP=m
@@ -447,24 +445,31 @@ CONFIG_HISAX_ENTERNOW_PCI=y
 #
 # Input device support
 #
-# CONFIG_INPUT_FF_MEMLESS is not set
+CONFIG_INPUT_FF_MEMLESS=m
 CONFIG_INPUT_MATRIXKMAP=m
 
 #
 # Input Device Drivers
 #
+CONFIG_KEYBOARD_ADP5520=m
 # CONFIG_KEYBOARD_SAMSUNG is not set
+CONFIG_KEYBOARD_STMPE=m
+CONFIG_KEYBOARD_TC3589X=m
 CONFIG_MOUSE_PS2_LIFEBOOK=y
 # CONFIG_MOUSE_GPIO is not set
 CONFIG_INPUT_PCSPKR=m
 CONFIG_INPUT_APANEL=m
 CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_TWL4030_PWRBUTTON=m
+CONFIG_INPUT_TWL4030_VIBRA=m
+CONFIG_INPUT_TWL6040_VIBRA=m
 CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
 CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
 
 #
 # Hardware I/O ports
 #
+CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
 CONFIG_SERIO_I8042=y
 # CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PARKBD is not set
@@ -500,7 +505,10 @@ CONFIG_HPET=y
 # CONFIG_HPET_MMAP is not set
 CONFIG_HANGCHECK_TIMER=m
 # CONFIG_TELCLOCK is not set
-CONFIG_I2C=m
+
+#
+# Multiplexer I2C Chip support
+#
 CONFIG_I2C_ALGOBIT=m
 
 #
@@ -555,6 +563,12 @@ CONFIG_GPIO_SCH=m
 CONFIG_GPIO_ICH=m
 # CONFIG_GPIO_LYNXPOINT is not set
 
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_TWL4030 is not set
+# CONFIG_GPIO_TWL6040 is not set
+
 #
 # PCI GPIO expanders:
 #
@@ -563,9 +577,21 @@ CONFIG_GPIO_ICH=m
 # CONFIG_GPIO_PCH is not set
 
 #
-# SPI GPIO expanders:
+# 1-wire Slaves
 #
-# CONFIG_GPIO_MCP23S08 is not set
+CONFIG_MAX8925_POWER=m
+CONFIG_WM831X_BACKUP=m
+CONFIG_WM831X_POWER=m
+CONFIG_WM8350_POWER=m
+CONFIG_BATTERY_88PM860X=m
+CONFIG_BATTERY_DA9030=m
+CONFIG_BATTERY_DA9052=m
+CONFIG_BATTERY_TWL4030_MADC=m
+CONFIG_CHARGER_88PM860X=m
+CONFIG_BATTERY_RX51=m
+CONFIG_CHARGER_TWL4030=m
+CONFIG_CHARGER_LP8788=m
+CONFIG_CHARGER_TPS65090=m
 
 #
 # Native drivers
@@ -576,9 +602,14 @@ CONFIG_SENSORS_K8TEMP=m
 CONFIG_SENSORS_K10TEMP=m
 CONFIG_SENSORS_FAM15H_POWER=m
 CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_DA9052_ADC=m
+CONFIG_SENSORS_DA9055=m
 CONFIG_SENSORS_FSCHMD=m
 CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_TWL4030_MADC=m
 CONFIG_SENSORS_VIA_CPUTEMP=m
+CONFIG_SENSORS_WM831X=m
+CONFIG_SENSORS_WM8350=m
 CONFIG_SENSORS_APPLESMC=m
 
 #
@@ -586,13 +617,19 @@ CONFIG_SENSORS_APPLESMC=m
 #
 CONFIG_SENSORS_ACPI_POWER=m
 CONFIG_SENSORS_ATK0110=m
-CONFIG_CPU_THERMAL=y
 CONFIG_INTEL_POWERCLAMP=m
 CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_ACPI_INT3403_THERMAL=m
 
 #
 # Watchdog Device Drivers
 #
+CONFIG_DA9052_WATCHDOG=m
+CONFIG_DA9055_WATCHDOG=m
+CONFIG_WM831X_WATCHDOG=m
+CONFIG_WM8350_WATCHDOG=m
+CONFIG_DW_WATCHDOG=m
+CONFIG_TWL4030_WATCHDOG=m
 # CONFIG_ACQUIRE_WDT is not set
 # CONFIG_ADVANTECH_WDT is not set
 CONFIG_ALIM1535_WDT=m
@@ -632,17 +669,14 @@ CONFIG_XEN_WDT=m
 #
 # Multifunction device drivers
 #
-CONFIG_MFD_CORE=m
 CONFIG_MFD_CS5535=m
 # CONFIG_ABX500_CORE is not set
-# CONFIG_MFD_SYSCON is not set
-# CONFIG_MFD_TPS65912 is not set
-# CONFIG_REGULATOR is not set
 
 #
-# Multimedia core support
+# STMicroelectronics STMPE Interface Drivers
 #
-CONFIG_VIDEO_V4L2=m
+# CONFIG_MFD_SYSCON is not set
+# CONFIG_REGULATOR is not set
 
 #
 # Media drivers
@@ -675,26 +709,6 @@ CONFIG_VIDEO_SH_MOBILE_CEU=m
 #
 # CONFIG_MEDIA_PARPORT_SUPPORT is not set
 
-#
-# Media ancillary drivers (tuners, sensors, i2c, frontends)
-#
-CONFIG_VIDEO_IR_I2C=m
-
-#
-# soc_camera sensor drivers
-#
-CONFIG_MEDIA_TUNER=m
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA827X=m
-CONFIG_MEDIA_TUNER_TDA18271=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_MEDIA_TUNER_XC4000=m
-CONFIG_MEDIA_TUNER_MC44S803=m
-
 #
 # Graphics support
 #
@@ -703,10 +717,10 @@ CONFIG_AGP_AMD64=y
 CONFIG_AGP_INTEL=y
 CONFIG_AGP_SIS=y
 CONFIG_AGP_VIA=y
+CONFIG_INTEL_GTT=y
 CONFIG_VGA_SWITCHEROO=y
 CONFIG_DRM=m
 CONFIG_DRM_USB=m
-CONFIG_DRM_KMS_HELPER=m
 
 #
 # I2C encoder or helper chips
@@ -724,6 +738,7 @@ CONFIG_DRM_I915=m
 CONFIG_DRM_I915_KMS=y
 CONFIG_DRM_I915_FBDEV=y
 # CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set
+# CONFIG_DRM_I915_UMS is not set
 CONFIG_DRM_SIS=m
 CONFIG_DRM_GMA500=m
 CONFIG_DRM_GMA600=y
@@ -804,10 +819,18 @@ CONFIG_MMC_WBSD=m
 #
 # LED drivers
 #
+CONFIG_LEDS_88PM860X=m
 # CONFIG_LEDS_GPIO is not set
+CONFIG_LEDS_LP8788=m
 CONFIG_LEDS_CLEVO_MAIL=m
+CONFIG_LEDS_WM831X_STATUS=m
+CONFIG_LEDS_WM8350=m
+CONFIG_LEDS_DA903X=m
+CONFIG_LEDS_DA9052=m
 CONFIG_LEDS_INTEL_SS4200=m
+CONFIG_LEDS_ADP5520=m
 CONFIG_LEDS_DELL_NETBOOKS=m
+CONFIG_LEDS_MAX8997=m
 
 #
 # LED Triggers
@@ -834,6 +857,32 @@ CONFIG_EDAC_I5000=m
 CONFIG_EDAC_I5100=m
 CONFIG_EDAC_I7300=m
 
+#
+# I2C RTC drivers
+#
+CONFIG_RTC_DRV_88PM860X=m
+CONFIG_RTC_DRV_88PM80X=m
+CONFIG_RTC_DRV_LP8788=m
+CONFIG_RTC_DRV_MAX8907=m
+CONFIG_RTC_DRV_MAX8925=m
+CONFIG_RTC_DRV_MAX8998=m
+CONFIG_RTC_DRV_MAX8997=m
+CONFIG_RTC_DRV_MAX77686=m
+CONFIG_RTC_DRV_PALMAS=m
+CONFIG_RTC_DRV_TWL4030=m
+CONFIG_RTC_DRV_TPS6586X=m
+CONFIG_RTC_DRV_TPS65910=m
+CONFIG_RTC_DRV_TPS80031=m
+CONFIG_RTC_DRV_RC5T583=m
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_DA9052=m
+CONFIG_RTC_DRV_DA9055=m
+CONFIG_RTC_DRV_WM831X=m
+CONFIG_RTC_DRV_WM8350=m
+
 #
 # DMA Devices
 #
@@ -897,6 +946,7 @@ CONFIG_FUJITSU_LAPTOP=m
 # CONFIG_FUJITSU_TABLET is not set
 CONFIG_AMILO_RFKILL=m
 CONFIG_HP_ACCEL=m
+CONFIG_HP_WIRELESS=m
 CONFIG_HP_WMI=m
 CONFIG_MSI_LAPTOP=m
 CONFIG_PANASONIC_LAPTOP=m
@@ -936,6 +986,13 @@ CONFIG_INTEL_SMARTCONNECT=m
 CONFIG_PVPANIC=m
 CONFIG_CHROME_PLATFORMS=y
 CONFIG_CHROMEOS_LAPTOP=m
+# CONFIG_CHROMEOS_PSTORE is not set
+
+#
+# Common Clock Framework
+#
+CONFIG_COMMON_CLK_WM831X=m
+CONFIG_COMMON_CLK_MAX77686=m
 
 #
 # Hardware Spinlock drivers
@@ -949,6 +1006,12 @@ CONFIG_INTEL_IOMMU=y
 # CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
 CONFIG_INTEL_IOMMU_FLOPPY_WA=y
 
+#
+# Analog to digital converters
+#
+CONFIG_LP8788_ADC=y
+CONFIG_TWL6030_GPADC=m
+
 #
 # Temperature sensors
 #
@@ -965,6 +1028,7 @@ CONFIG_DELL_RBU=m
 CONFIG_DCDBAS=m
 CONFIG_DMIID=y
 CONFIG_DMI_SYSFS=y
+CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
 CONFIG_ISCSI_IBFT_FIND=y
 CONFIG_ISCSI_IBFT=m
 # CONFIG_GOOGLE_FIRMWARE is not set
@@ -1128,6 +1192,9 @@ CONFIG_CRYPTO_AES_NI_INTEL=y
 CONFIG_CRYPTO_DEV_PADLOCK=m
 CONFIG_CRYPTO_DEV_PADLOCK_AES=m
 CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+CONFIG_CRYPTO_DEV_CCP=y
+CONFIG_CRYPTO_DEV_CCP_DD=m
+CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
 CONFIG_KVM_APIC_ARCHITECTURE=y
 CONFIG_KVM_MMIO=y
 CONFIG_KVM_ASYNC_PF=y
index 5df966d..fb51863 100644 (file)
@@ -59,6 +59,7 @@ CONFIG_X86_NUMACHIP=y
 # CONFIG_X86_VSMP is not set
 # CONFIG_X86_UV is not set
 CONFIG_XEN_MAX_DOMAIN_MEMORY=500
+# CONFIG_XEN_PVH is not set
 # CONFIG_MPSC is not set
 CONFIG_GENERIC_CPU=y
 CONFIG_X86_MINIMUM_CPU_FAMILY=64
@@ -85,6 +86,7 @@ CONFIG_SPARSEMEM_VMEMMAP=y
 # CONFIG_MOVABLE_NODE is not set
 # CONFIG_MEMORY_HOTPLUG is not set
 CONFIG_PHYSICAL_START=0x1000000
+CONFIG_RANDOMIZE_BASE_MAX_OFFSET=0x40000000
 CONFIG_PHYSICAL_ALIGN=0x1000000
 CONFIG_USE_PERCPU_NUMA_NODE_ID=y
 
@@ -150,6 +152,7 @@ CONFIG_SGI_IOC4=m
 # Intel MIC Card Driver
 #
 # CONFIG_INTEL_MIC_CARD is not set
+CONFIG_GENWQE=m
 
 #
 # SCSI Transports
index 72cb854..2842e63 100644 (file)
@@ -4,8 +4,8 @@
 ###############################################################################
 
 name       = kernel
-version    = 3.13.2
-release    = 2
+version    = 3.14.2
+release    = 1
 thisapp    = linux-%{version}
 
 maintainer = Arne Fitzenreiter <arne.fitzenreiter@ipfire.org>
@@ -235,10 +235,10 @@ index b89a739..e289b9b 100644
 +zconf.lex.c
  zoffset.h
 diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index b9e9bd8..bf49b92 100644
+index 7116fda..d8ed6e8 100644
 --- a/Documentation/kernel-parameters.txt
 +++ b/Documentation/kernel-parameters.txt
-@@ -1033,6 +1033,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -1084,6 +1084,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0.
                        Default: 1024
  
@@ -249,7 +249,7 @@ index b9e9bd8..bf49b92 100644
        hashdist=       [KNL,NUMA] Large hashes allocated during boot
                        are distributed across NUMA nodes.  Defaults on
                        for 64-bit NUMA, off otherwise.
-@@ -2018,6 +2022,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2080,6 +2084,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
                        noexec=on: enable non-executable mappings (default)
                        noexec=off: disable non-executable mappings
  
@@ -260,7 +260,7 @@ index b9e9bd8..bf49b92 100644
        nosmap          [X86]
                        Disable SMAP (Supervisor Mode Access Prevention)
                        even if it is supported by processor.
-@@ -2285,6 +2293,25 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
+@@ -2347,6 +2355,25 @@ 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.
  
@@ -287,7 +287,7 @@ index b9e9bd8..bf49b92 100644
  
        pcd.            [PARIDE]
 diff --git a/Makefile b/Makefile
-index a7fd5d9..dc8e4db 100644
+index b2f7de8..9e2b63f 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -244,8 +244,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
@@ -298,27 +298,11 @@ index a7fd5d9..dc8e4db 100644
 -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  += $(call cc-option, -Wno-empty-body)
-+HOSTCXXFLAGS = -O2 -Wall -W -fno-delete-null-pointer-checks
++HOSTCXXFLAGS = -O2 -Wall -W -Wno-array-bounds
  
  # Decide whether to build built-in, modular, or both.
  # Normally, just do built-in.
-@@ -311,9 +312,15 @@ endif
- # If the user is running make -s (silent mode), suppress echoing of
- # commands
-+ifneq ($(filter 4.%,$(MAKE_VERSION)),)        # make-4
-+ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
-+ quiet=silent_
-+endif
-+else                                  # make-3.8x
- ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
-   quiet=silent_
- endif
-+endif
- export quiet Q KBUILD_VERBOSE
-@@ -417,8 +424,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
+@@ -423,8 +424,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \
  # Rules shared between *config targets and build targets
  
  # Basic helpers built in scripts/
@@ -329,7 +313,7 @@ index a7fd5d9..dc8e4db 100644
        $(Q)$(MAKE) $(build)=scripts/basic
        $(Q)rm -f .tmp_quiet_recordmcount
  
-@@ -579,6 +586,72 @@ else
+@@ -585,6 +586,72 @@ else
  KBUILD_CFLAGS += -O2
  endif
  
@@ -381,7 +365,7 @@ index a7fd5d9..dc8e4db 100644
 +GCC_PLUGINS_CFLAGS += $(SIZE_OVERFLOW_PLUGIN_CFLAGS) $(LATENT_ENTROPY_PLUGIN_CFLAGS) $(STRUCTLEAK_PLUGIN_CFLAGS)
 +GCC_PLUGINS_CFLAGS += $(RANDSTRUCT_PLUGIN_CFLAGS)
 +GCC_PLUGINS_AFLAGS := $(KERNEXEC_PLUGIN_AFLAGS)
-+export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGINS_AFLAGS CONSTIFY_PLUGIN
++export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGINS_AFLAGS CONSTIFY_PLUGIN LATENT_ENTROPY_PLUGIN_CFLAGS
 +ifeq ($(KBUILD_EXTMOD),)
 +gcc-plugins:
 +      $(Q)$(MAKE) $(build)=tools/gcc
@@ -402,16 +386,7 @@ index a7fd5d9..dc8e4db 100644
  include $(srctree)/arch/$(SRCARCH)/Makefile
  
  ifdef CONFIG_READABLE_ASM
-@@ -619,7 +692,7 @@ endif
- ifdef CONFIG_DEBUG_INFO
- KBUILD_CFLAGS += -g
--KBUILD_AFLAGS += -gdwarf-2
-+KBUILD_AFLAGS += -Wa,--gdwarf-2
- endif
- ifdef CONFIG_DEBUG_INFO_REDUCED
-@@ -754,7 +827,7 @@ export mod_sign_cmd
+@@ -779,7 +846,7 @@ export mod_sign_cmd
  
  
  ifeq ($(KBUILD_EXTMOD),)
@@ -420,7 +395,7 @@ index a7fd5d9..dc8e4db 100644
  
  vmlinux-dirs  := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
                     $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-@@ -803,6 +876,8 @@ endif
+@@ -828,6 +895,8 @@ endif
  
  # The actual objects are generated when descending, 
  # make sure no implicit rule kicks in
@@ -429,7 +404,7 @@ index a7fd5d9..dc8e4db 100644
  $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
  
  # Handle descending into subdirectories listed in $(vmlinux-dirs)
-@@ -812,7 +887,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
+@@ -837,7 +906,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ;
  # Error messages still appears in the original language
  
  PHONY += $(vmlinux-dirs)
@@ -438,7 +413,7 @@ index a7fd5d9..dc8e4db 100644
        $(Q)$(MAKE) $(build)=$@
  
  define filechk_kernel.release
-@@ -855,10 +930,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
+@@ -880,10 +949,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
  
  archprepare: archheaders archscripts prepare1 scripts_basic
  
@@ -452,7 +427,7 @@ index a7fd5d9..dc8e4db 100644
  prepare: prepare0
  
  # Generate some files
-@@ -966,6 +1044,8 @@ all: modules
+@@ -991,6 +1063,8 @@ all: modules
  #     using awk while concatenating to the final file.
  
  PHONY += modules
@@ -461,7 +436,7 @@ index a7fd5d9..dc8e4db 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.';
-@@ -981,7 +1061,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
+@@ -1006,7 +1080,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
  
  # Target to prepare building external modules
  PHONY += modules_prepare
@@ -470,7 +445,7 @@ index a7fd5d9..dc8e4db 100644
  
  # Target to install modules
  PHONY += modules_install
-@@ -1047,7 +1127,8 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \
+@@ -1072,7 +1146,8 @@ 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             \
@@ -480,7 +455,7 @@ index a7fd5d9..dc8e4db 100644
  
  # clean - Delete most, but leave enough to build external modules
  #
-@@ -1087,6 +1168,7 @@ distclean: mrproper
+@@ -1112,6 +1187,7 @@ distclean: mrproper
                \( -name '*.orig' -o -name '*.rej' -o -name '*~' \
                -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \
                -o -name '.*.rej' \
@@ -488,7 +463,7 @@ index a7fd5d9..dc8e4db 100644
                -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
                -type f -print | xargs rm -f
  
-@@ -1248,6 +1330,8 @@ PHONY += $(module-dirs) modules
+@@ -1273,6 +1349,8 @@ PHONY += $(module-dirs) modules
  $(module-dirs): crmodverdir $(objtree)/Module.symvers
        $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@)
  
@@ -497,7 +472,7 @@ index a7fd5d9..dc8e4db 100644
  modules: $(module-dirs)
        @$(kecho) '  Building modules, stage 2.';
        $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
-@@ -1387,17 +1471,21 @@ else
+@@ -1412,17 +1490,21 @@ else
          target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@))
  endif
  
@@ -523,7 +498,7 @@ index a7fd5d9..dc8e4db 100644
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
  %.symtypes: %.c prepare scripts FORCE
        $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@)
-@@ -1407,11 +1495,15 @@ endif
+@@ -1432,11 +1514,15 @@ endif
        $(cmd_crmodverdir)
        $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
        $(build)=$(build-dir)
@@ -874,10 +849,10 @@ index 98838a0..b304fb4 100644
                /* Allow reads even for write-only mappings */
                if (!(vma->vm_flags & (VM_READ | VM_WRITE)))
 diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
-index c1f1a7e..554b0cd 100644
+index 1594945..adf4001 100644
 --- a/arch/arm/Kconfig
 +++ b/arch/arm/Kconfig
-@@ -1828,7 +1828,7 @@ config ALIGNMENT_TRAP
+@@ -1862,7 +1862,7 @@ config ALIGNMENT_TRAP
  
  config UACCESS_WITH_MEMCPY
        bool "Use kernel mem{cpy,set}() for {copy_to,clear}_user()"
@@ -886,7 +861,7 @@ index c1f1a7e..554b0cd 100644
        default y if CPU_FEROCEON
        help
          Implement faster copy_to_user and clear_user methods for CPU
-@@ -2100,6 +2100,7 @@ config XIP_PHYS_ADDR
+@@ -2125,6 +2125,7 @@ config XIP_PHYS_ADDR
  config KEXEC
        bool "Kexec system call (EXPERIMENTAL)"
        depends on (!SMP || PM_SLEEP_SMP)
@@ -895,7 +870,7 @@ index c1f1a7e..554b0cd 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
-index 62d2cb5..7a13651 100644
+index 62d2cb5..09d45e3 100644
 --- a/arch/arm/include/asm/atomic.h
 +++ b/arch/arm/include/asm/atomic.h
 @@ -18,17 +18,35 @@
@@ -1398,7 +1373,7 @@ index 62d2cb5..7a13651 100644
  "     sbc     %R0, %R0, %R4\n"
  "     strexd  %1, %0, %H0, [%3]\n"
  "     teq     %1, #0\n"
-@@ -344,17 +691,28 @@ static inline long long atomic64_sub_return(long long i, atomic64_t *v)
+@@ -344,16 +691,29 @@ 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"
@@ -1425,14 +1400,13 @@ index 62d2cb5..7a13651 100644
        : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "r" (i)
        : "cc");
--
 -      smp_mb();
 -
--      return result;
+       return result;
  }
  
- static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old,
-@@ -382,6 +740,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old,
+@@ -382,6 +742,31 @@ static inline long long atomic64_cmpxchg(atomic64_t *ptr, long long old,
        return oldval;
  }
  
@@ -1464,7 +1438,7 @@ index 62d2cb5..7a13651 100644
  static inline long long atomic64_xchg(atomic64_t *ptr, long long new)
  {
        long long result;
-@@ -406,20 +789,34 @@ static inline long long atomic64_xchg(atomic64_t *ptr, long long new)
+@@ -406,20 +791,34 @@ 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;
@@ -1505,7 +1479,7 @@ index 62d2cb5..7a13651 100644
        : "=&r" (result), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter)
        : "cc");
-@@ -442,13 +839,25 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
+@@ -442,13 +841,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"
@@ -1534,7 +1508,7 @@ index 62d2cb5..7a13651 100644
        : "=&r" (val), "+r" (ret), "=&r" (tmp), "+Qo" (v->counter)
        : "r" (&v->counter), "r" (u), "r" (a)
        : "cc");
-@@ -461,10 +870,13 @@ static inline int atomic64_add_unless(atomic64_t *v, long long a, long long u)
+@@ -461,10 +872,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))
@@ -1572,7 +1546,7 @@ index 75fe66b..ba3dee4 100644
  
  #endif
 diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h
-index ee753f1..c9c30a5 100644
+index 8b8b616..d973d24 100644
 --- a/arch/arm/include/asm/cacheflush.h
 +++ b/arch/arm/include/asm/cacheflush.h
 @@ -116,7 +116,7 @@ struct cpu_cache_fns {
@@ -1585,7 +1559,7 @@ index ee753f1..c9c30a5 100644
  /*
   * Select the calling method
 diff --git a/arch/arm/include/asm/checksum.h b/arch/arm/include/asm/checksum.h
-index 6dcc164..b14d917 100644
+index 5233151..87a71fa 100644
 --- a/arch/arm/include/asm/checksum.h
 +++ b/arch/arm/include/asm/checksum.h
 @@ -37,7 +37,19 @@ __wsum
@@ -1810,28 +1784,36 @@ index 9e614a1..3302cca 100644
  struct dma_struct {
        void            *addr;          /* single DMA address           */
 diff --git a/arch/arm/include/asm/mach/map.h b/arch/arm/include/asm/mach/map.h
-index 2fe141f..192dc01 100644
+index f98c7f3..e5c626d 100644
 --- a/arch/arm/include/asm/mach/map.h
 +++ b/arch/arm/include/asm/mach/map.h
-@@ -27,13 +27,16 @@ struct map_desc {
- #define MT_MINICLEAN          6
- #define MT_LOW_VECTORS                7
- #define MT_HIGH_VECTORS               8
--#define MT_MEMORY             9
-+#define MT_MEMORY_RWX         9
- #define MT_ROM                        10
--#define MT_MEMORY_NONCACHED   11
-+#define MT_MEMORY_NONCACHED_RX        11
- #define MT_MEMORY_DTCM                12
- #define MT_MEMORY_ITCM                13
- #define MT_MEMORY_SO          14
- #define MT_MEMORY_DMA_READY   15
-+#define MT_MEMORY_RW          16
-+#define MT_MEMORY_RX          17
-+#define MT_MEMORY_NONCACHED_RW        18
+@@ -23,17 +23,19 @@ struct map_desc {
  
- #ifdef CONFIG_MMU
- extern void iotable_init(struct map_desc *, int);
+ /* types 0-3 are defined in asm/io.h */
+ enum {
+-      MT_UNCACHED = 4,
+-      MT_CACHECLEAN,
+-      MT_MINICLEAN,
++      MT_UNCACHED_RW = 4,
++      MT_CACHECLEAN_RO,
++      MT_MINICLEAN_RO,
+       MT_LOW_VECTORS,
+       MT_HIGH_VECTORS,
+-      MT_MEMORY_RWX,
++      __MT_MEMORY_RWX,
+       MT_MEMORY_RW,
+-      MT_ROM,
+-      MT_MEMORY_RWX_NONCACHED,
++      MT_MEMORY_RX,
++      MT_ROM_RX,
++      MT_MEMORY_RW_NONCACHED,
++      MT_MEMORY_RX_NONCACHED,
+       MT_MEMORY_RW_DTCM,
+-      MT_MEMORY_RWX_ITCM,
++      MT_MEMORY_RX_ITCM,
+       MT_MEMORY_RW_SO,
+       MT_MEMORY_DMA_READY,
+ };
 diff --git a/arch/arm/include/asm/outercache.h b/arch/arm/include/asm/outercache.h
 index f94784f..9a09a4a 100644
 --- a/arch/arm/include/asm/outercache.h
@@ -1846,10 +1828,18 @@ index f94784f..9a09a4a 100644
  extern struct outer_cache_fns outer_cache;
  
 diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h
-index 4355f0e..c229913 100644
+index 4355f0e..cd9168e 100644
 --- a/arch/arm/include/asm/page.h
 +++ b/arch/arm/include/asm/page.h
-@@ -114,7 +114,7 @@ struct cpu_user_fns {
+@@ -23,6 +23,7 @@
+ #else
++#include <linux/compiler.h>
+ #include <asm/glue.h>
+ /*
+@@ -114,7 +115,7 @@ struct cpu_user_fns {
        void (*cpu_clear_user_highpage)(struct page *page, unsigned long vaddr);
        void (*cpu_copy_user_highpage)(struct page *to, struct page *from,
                        unsigned long vaddr, struct vm_area_struct *vma);
@@ -1956,7 +1946,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
-index 86a659a..70e0120 100644
+index dfff709..ed4c4e7 100644
 --- a/arch/arm/include/asm/pgtable-2level.h
 +++ b/arch/arm/include/asm/pgtable-2level.h
 @@ -126,6 +126,9 @@
@@ -1982,7 +1972,7 @@ index 626989f..9d67a33 100644
  
  /*
 diff --git a/arch/arm/include/asm/pgtable-3level.h b/arch/arm/include/asm/pgtable-3level.h
-index 4f95039..b2dd513 100644
+index 85c60ad..b0bbd7e 100644
 --- a/arch/arm/include/asm/pgtable-3level.h
 +++ b/arch/arm/include/asm/pgtable-3level.h
 @@ -82,6 +82,7 @@
@@ -2002,7 +1992,7 @@ index 4f95039..b2dd513 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
-index 1571d12..b8a9b43 100644
+index 7d59b52..27a12f8 100644
 --- a/arch/arm/include/asm/pgtable.h
 +++ b/arch/arm/include/asm/pgtable.h
 @@ -33,6 +33,9 @@
@@ -2085,7 +2075,7 @@ index 1571d12..b8a9b43 100644
   */
  #define _L_PTE_DEFAULT        L_PTE_PRESENT | L_PTE_YOUNG
  
-@@ -260,7 +308,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
+@@ -262,7 +310,7 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
  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 |
@@ -2094,19 +2084,6 @@ index 1571d12..b8a9b43 100644
        pte_val(pte) = (pte_val(pte) & ~mask) | (pgprot_val(newprot) & mask);
        return pte;
  }
-diff --git a/arch/arm/include/asm/proc-fns.h b/arch/arm/include/asm/proc-fns.h
-index 5324c11..bcae5f0 100644
---- a/arch/arm/include/asm/proc-fns.h
-+++ b/arch/arm/include/asm/proc-fns.h
-@@ -75,7 +75,7 @@ extern struct processor {
-       unsigned int suspend_size;
-       void (*do_suspend)(void *);
-       void (*do_resume)(void *);
--} processor;
-+} __do_const processor;
- #ifndef MULTI_CPU
- extern void cpu_proc_init(void);
 diff --git a/arch/arm/include/asm/psci.h b/arch/arm/include/asm/psci.h
 index c4ae171..ea0c0c2 100644
 --- a/arch/arm/include/asm/psci.h
@@ -2177,7 +2154,7 @@ index 71a06b2..8bb9ae1 100644
  /*
   * Change these and you break ASM code in entry-common.S
 diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h
-index 72abdc5..9eba222 100644
+index 72abdc5..35acac1 100644
 --- a/arch/arm/include/asm/uaccess.h
 +++ b/arch/arm/include/asm/uaccess.h
 @@ -18,6 +18,7 @@
@@ -2256,7 +2233,15 @@ index 72abdc5..9eba222 100644
         })
  
  #else /* CONFIG_MMU */
-@@ -237,13 +273,17 @@ static inline void set_fs(mm_segment_t fs)
+@@ -220,6 +256,7 @@ static inline void set_fs(mm_segment_t fs)
+ #endif /* CONFIG_MMU */
++#define access_ok_noprefault(type,addr,size) access_ok((type),(addr),(size))
+ #define access_ok(type,addr,size)     (__range_ok(addr,size) == 0)
+ #define user_addr_max() \
+@@ -237,13 +274,17 @@ static inline void set_fs(mm_segment_t fs)
  #define __get_user(x,ptr)                                             \
  ({                                                                    \
        long __gu_err = 0;                                              \
@@ -2274,7 +2259,7 @@ index 72abdc5..9eba222 100644
        (void) 0;                                                       \
  })
  
-@@ -319,13 +359,17 @@ do {                                                                     \
+@@ -319,13 +360,17 @@ do {                                                                     \
  #define __put_user(x,ptr)                                             \
  ({                                                                    \
        long __pu_err = 0;                                              \
@@ -2292,7 +2277,7 @@ index 72abdc5..9eba222 100644
        (void) 0;                                                       \
  })
  
-@@ -425,11 +469,44 @@ do {                                                                     \
+@@ -425,11 +470,44 @@ do {                                                                     \
  
  
  #ifdef CONFIG_MMU
@@ -2340,7 +2325,7 @@ index 72abdc5..9eba222 100644
  #else
  #define __copy_from_user(to,from,n)   (memcpy(to, (void __force *)from, n), 0)
  #define __copy_to_user(to,from,n)     (memcpy((void __force *)to, from, n), 0)
-@@ -438,6 +515,9 @@ extern unsigned long __must_check __clear_user_std(void __user *addr, unsigned l
+@@ -438,6 +516,9 @@ extern unsigned long __must_check __clear_user_std(void __user *addr, unsigned l
  
  static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)
  {
@@ -2350,7 +2335,7 @@ index 72abdc5..9eba222 100644
        if (access_ok(VERIFY_READ, from, n))
                n = __copy_from_user(to, from, n);
        else /* security hole - plug it */
-@@ -447,6 +527,9 @@ static inline unsigned long __must_check copy_from_user(void *to, const void __u
+@@ -447,6 +528,9 @@ static inline unsigned long __must_check copy_from_user(void *to, const void __u
  
  static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n)
  {
@@ -2374,10 +2359,10 @@ index 5af0ed1..cea83883 100644
  #define PSR_ENDIAN_MASK       0x00000200      /* Endianness state mask */
  
 diff --git a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c
-index 1f031dd..d9b5e4a 100644
+index 85e664b..419a1cd 100644
 --- a/arch/arm/kernel/armksyms.c
 +++ b/arch/arm/kernel/armksyms.c
-@@ -53,7 +53,7 @@ EXPORT_SYMBOL(arm_delay_ops);
+@@ -55,7 +55,7 @@ EXPORT_SYMBOL(arm_delay_ops);
  
        /* networking */
  EXPORT_SYMBOL(csum_partial);
@@ -2386,7 +2371,7 @@ index 1f031dd..d9b5e4a 100644
  EXPORT_SYMBOL(csum_partial_copy_nocheck);
  EXPORT_SYMBOL(__csum_ipv6_magic);
  
-@@ -89,9 +89,9 @@ EXPORT_SYMBOL(__memzero);
+@@ -91,9 +91,9 @@ EXPORT_SYMBOL(__memzero);
  #ifdef CONFIG_MMU
  EXPORT_SYMBOL(copy_page);
  
@@ -2400,7 +2385,7 @@ index 1f031dd..d9b5e4a 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
-index b3fb8c9..59cfab2 100644
+index 1879e8d..b2207fc 100644
 --- a/arch/arm/kernel/entry-armv.S
 +++ b/arch/arm/kernel/entry-armv.S
 @@ -47,6 +47,87 @@
@@ -2552,22 +2537,23 @@ index b3fb8c9..59cfab2 100644
   ARM_BE8(rev  r0, r0)                         @ little endian instruction
  
        @ r0 = 32-bit ARM instruction which caused the exception
-@@ -450,10 +549,14 @@ __und_usr_thumb:
+@@ -450,11 +549,15 @@ __und_usr_thumb:
   */
        .arch   armv6t2
  #endif
 +      pax_open_userland
  2:    ldrht   r5, [r4]
 +      pax_close_userland
+ ARM_BE8(rev16 r5, r5)                         @ little endian instruction
        cmp     r5, #0xe800                     @ 32bit instruction if xx != 0
        blo     __und_usr_fault_16              @ 16bit undefined instruction
 +      pax_open_userland
  3:    ldrht   r0, [r2]
 +      pax_close_userland
+ 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
-       orr     r0, r0, r5, lsl #16
-@@ -482,7 +585,8 @@ ENDPROC(__und_usr)
+@@ -484,7 +587,8 @@ ENDPROC(__und_usr)
   */
        .pushsection .fixup, "ax"
        .align  2
@@ -2577,7 +2563,7 @@ index b3fb8c9..59cfab2 100644
        .popsection
        .pushsection __ex_table,"a"
        .long   1b, 4b
-@@ -692,7 +796,7 @@ ENTRY(__switch_to)
+@@ -694,7 +798,7 @@ ENTRY(__switch_to)
   THUMB(       str     lr, [ip], #4               )
        ldr     r4, [r2, #TI_TP_VALUE]
        ldr     r5, [r2, #TI_TP_VALUE + 4]
@@ -2586,7 +2572,7 @@ index b3fb8c9..59cfab2 100644
        ldr     r6, [r2, #TI_CPU_DOMAIN]
  #endif
        switch_tls r1, r4, r5, r3, r7
-@@ -701,7 +805,7 @@ ENTRY(__switch_to)
+@@ -703,7 +807,7 @@ ENTRY(__switch_to)
        ldr     r8, =__stack_chk_guard
        ldr     r7, [r7, #TSK_STACK_CANARY]
  #endif
@@ -2763,21 +2749,10 @@ index 918875d..cd5fa27 100644
                flush_icache_range((unsigned long)base + offset, offset +
                                   length);
 diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
-index 32f317e..710ae07 100644
+index f5f381d..a6f36a1 100644
 --- a/arch/arm/kernel/head.S
 +++ b/arch/arm/kernel/head.S
-@@ -52,7 +52,9 @@
-       .equ    swapper_pg_dir, KERNEL_RAM_VADDR - PG_DIR_SIZE
-       .macro  pgtbl, rd, phys
--      add     \rd, \phys, #TEXT_OFFSET - PG_DIR_SIZE
-+      mov     \rd, #TEXT_OFFSET
-+      sub     \rd, #PG_DIR_SIZE
-+      add     \rd, \rd, \phys
-       .endm
- /*
-@@ -436,7 +438,7 @@ __enable_mmu:
+@@ -437,7 +437,7 @@ __enable_mmu:
        mov     r5, #(domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \
                      domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
                      domain_val(DOMAIN_TABLE, DOMAIN_MANAGER) | \
@@ -2989,7 +2964,7 @@ index 0dd3b79..e018f64 100644
        if (secure_computing(scno) == -1)
                return -1;
 diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
-index 987a7f5..d9d6071 100644
+index 1e8b030..37c3022 100644
 --- a/arch/arm/kernel/setup.c
 +++ b/arch/arm/kernel/setup.c
 @@ -100,21 +100,23 @@ EXPORT_SYMBOL(system_serial_high);
@@ -3001,7 +2976,7 @@ index 987a7f5..d9d6071 100644
  
  #ifdef MULTI_CPU
 -struct processor processor __read_mostly;
-+struct processor processor;
++struct processor processor __read_only;
  #endif
  #ifdef MULTI_TLB
 -struct cpu_tlb_fns cpu_tlb __read_mostly;
@@ -3037,15 +3012,6 @@ index 987a7f5..d9d6071 100644
                         (mmfr0 & 0x000000f0) == 0x00000020)
                        cpu_arch = CPU_ARCH_ARMv6;
                else
-@@ -573,7 +579,7 @@ static void __init setup_processor(void)
-       __cpu_architecture = __get_cpu_architecture();
- #ifdef MULTI_CPU
--      processor = *list->proc;
-+      memcpy((void *)&processor, list->proc, sizeof processor);
- #endif
- #ifdef MULTI_TLB
-       cpu_tlb = *list->tlb;
 diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c
 index 04d6388..5115238 100644
 --- a/arch/arm/kernel/signal.c
@@ -3104,7 +3070,7 @@ index 04d6388..5115238 100644
 -      return page;
 -}
 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index dc894ab..f929a0d 100644
+index b7b4c86..47c4f77 100644
 --- a/arch/arm/kernel/smp.c
 +++ b/arch/arm/kernel/smp.c
 @@ -73,7 +73,7 @@ enum ipi_msg_type {
@@ -3116,15 +3082,38 @@ index dc894ab..f929a0d 100644
  
  void __init smp_set_ops(struct smp_operations *ops)
  {
+diff --git a/arch/arm/kernel/tcm.c b/arch/arm/kernel/tcm.c
+index 7a3be1d..b00c7de 100644
+--- a/arch/arm/kernel/tcm.c
++++ b/arch/arm/kernel/tcm.c
+@@ -61,7 +61,7 @@ static struct map_desc itcm_iomap[] __initdata = {
+               .virtual        = ITCM_OFFSET,
+               .pfn            = __phys_to_pfn(ITCM_OFFSET),
+               .length         = 0,
+-              .type           = MT_MEMORY_RWX_ITCM,
++              .type           = MT_MEMORY_RX_ITCM,
+       }
+ };
+@@ -267,7 +267,9 @@ no_dtcm:
+               start = &__sitcm_text;
+               end   = &__eitcm_text;
+               ram   = &__itcm_start;
++              pax_open_kernel();
+               memcpy(start, ram, itcm_code_sz);
++              pax_close_kernel();
+               pr_debug("CPU ITCM: copied code from %p - %p\n",
+                        start, end);
+               itcm_present = true;
 diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
-index 4636d56..ce4ec3d 100644
+index 172ee18..ce4ec3d 100644
 --- a/arch/arm/kernel/traps.c
 +++ b/arch/arm/kernel/traps.c
 @@ -62,7 +62,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
--      printk("[<%08lx>] (%pS) from [<%08lx>] (%pS)\n", where, (void *)where, from, (void *)from);
+-      printk("[<%08lx>] (%ps) from [<%08lx>] (%pS)\n", where, (void *)where, from, (void *)from);
 +      printk("[<%08lx>] (%pA) from [<%08lx>] (%pA)\n", where, (void *)where, from, (void *)from);
  #else
        printk("Function entered at [<%08lx>] from [<%08lx>]\n", where, from);
@@ -3242,10 +3231,10 @@ index 7bcee5c..e2f3249 100644
        __data_loc = .;
  #endif
 diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
-index 2a700e0..745b980 100644
+index bd18bb8..87ede26 100644
 --- a/arch/arm/kvm/arm.c
 +++ b/arch/arm/kvm/arm.c
-@@ -56,7 +56,7 @@ static unsigned long hyp_default_vectors;
+@@ -57,7 +57,7 @@ static unsigned long hyp_default_vectors;
  static DEFINE_PER_CPU(struct kvm_vcpu *, kvm_arm_running_vcpu);
  
  /* The VMID used in the VTTBR */
@@ -3254,7 +3243,7 @@ index 2a700e0..745b980 100644
  static u8 kvm_next_vmid;
  static DEFINE_SPINLOCK(kvm_vmid_lock);
  
-@@ -397,7 +397,7 @@ void force_vm_exit(const cpumask_t *mask)
+@@ -408,7 +408,7 @@ void force_vm_exit(const cpumask_t *mask)
   */
  static bool need_new_vmid_gen(struct kvm *kvm)
  {
@@ -3263,7 +3252,7 @@ index 2a700e0..745b980 100644
  }
  
  /**
-@@ -430,7 +430,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -441,7 +441,7 @@ static void update_vttbr(struct kvm *kvm)
  
        /* First user of a new VMID generation? */
        if (unlikely(kvm_next_vmid == 0)) {
@@ -3272,7 +3261,7 @@ index 2a700e0..745b980 100644
                kvm_next_vmid = 1;
  
                /*
-@@ -447,7 +447,7 @@ static void update_vttbr(struct kvm *kvm)
+@@ -458,7 +458,7 @@ static void update_vttbr(struct kvm *kvm)
                kvm_call_hyp(__kvm_flush_vm_context);
        }
  
@@ -3427,6 +3416,19 @@ 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
+index f7ca97b..3d7e719 100644
+--- 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)
+       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",
+               base, length, desc->virtual);
 diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c
 index f3407a5..bd4256f 100644
 --- a/arch/arm/mach-kirkwood/common.c
@@ -3465,10 +3467,10 @@ index f3407a5..bd4256f 100644
  
        if (IS_ERR(clk))
 diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
-index 827d1500..2885dc6 100644
+index aead77a..a2253fa 100644
 --- a/arch/arm/mach-omap2/board-n8x0.c
 +++ b/arch/arm/mach-omap2/board-n8x0.c
-@@ -627,7 +627,7 @@ static int n8x0_menelaus_late_init(struct device *dev)
+@@ -568,7 +568,7 @@ static int n8x0_menelaus_late_init(struct device *dev)
  }
  #endif
  
@@ -3478,7 +3480,7 @@ index 827d1500..2885dc6 100644
  };
  
 diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c
-index d24926e..a7645a6 100644
+index ab43755..ccfa231 100644
 --- a/arch/arm/mach-omap2/gpmc.c
 +++ b/arch/arm/mach-omap2/gpmc.c
 @@ -148,7 +148,6 @@ struct omap3_gpmc_regs {
@@ -3525,7 +3527,7 @@ index d24926e..a7645a6 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
-index f991016..145ebeb 100644
+index 667915d..2ee1219 100644
 --- 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 {
@@ -3560,10 +3562,10 @@ index 3664562..72f85c6 100644
  };
  
 diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c
-index e0a398c..a470fa5 100644
+index 01ef59d..32ae28a8 100644
 --- a/arch/arm/mach-omap2/omap_device.c
 +++ b/arch/arm/mach-omap2/omap_device.c
-@@ -508,7 +508,7 @@ void omap_device_delete(struct omap_device *od)
+@@ -510,7 +510,7 @@ void omap_device_delete(struct omap_device *od)
  struct platform_device __init *omap_device_build(const char *pdev_name,
                                                 int pdev_id,
                                                 struct omap_hwmod *oh,
@@ -3572,7 +3574,7 @@ index e0a398c..a470fa5 100644
  {
        struct omap_hwmod *ohs[] = { oh };
  
-@@ -536,7 +536,7 @@ struct platform_device __init *omap_device_build(const char *pdev_name,
+@@ -538,7 +538,7 @@ struct platform_device __init *omap_device_build(const char *pdev_name,
  struct platform_device __init *omap_device_build_ss(const char *pdev_name,
                                                    int pdev_id,
                                                    struct omap_hwmod **ohs,
@@ -3601,7 +3603,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
-index 8a1b5e0..5f30074 100644
+index 1f33f5d..b29fa75 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 {
@@ -3678,10 +3680,10 @@ index b82dcae..44ee5b6 100644
        cpuidle_coupled_parallel_barrier(dev, &abort_barrier);
  
 diff --git a/arch/arm/mach-ux500/setup.h b/arch/arm/mach-ux500/setup.h
-index bdb3564..cebb96f 100644
+index 2dea8b5..6499da2 100644
 --- a/arch/arm/mach-ux500/setup.h
 +++ b/arch/arm/mach-ux500/setup.h
-@@ -39,13 +39,6 @@ extern void ux500_timer_init(void);
+@@ -33,13 +33,6 @@ extern void ux500_timer_init(void);
        .type           = MT_DEVICE,            \
  }
  
@@ -3689,7 +3691,7 @@ index bdb3564..cebb96f 100644
 -      .virtual        = IO_ADDRESS(x),        \
 -      .pfn            = __phys_to_pfn(x),     \
 -      .length         = sz,                   \
--      .type           = MT_MEMORY,            \
+-      .type           = MT_MEMORY_RWX,                \
 -}
 -
  extern struct smp_operations ux500_smp_ops;
@@ -3799,10 +3801,10 @@ index 9240364..a2b8cf3 100644
                        goto fault;                             \
        } while (0)
 diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c
-index 447da6f..77a5057 100644
+index 7abde2c..9df495f 100644
 --- a/arch/arm/mm/cache-l2x0.c
 +++ b/arch/arm/mm/cache-l2x0.c
-@@ -45,7 +45,7 @@ struct l2x0_of_data {
+@@ -46,7 +46,7 @@ struct l2x0_of_data {
        void (*setup)(const struct device_node *, u32 *, u32 *);
        void (*save)(void);
        struct outer_cache_fns outer_cache;
@@ -3812,7 +3814,7 @@ index 447da6f..77a5057 100644
  static bool of_init = false;
  
 diff --git a/arch/arm/mm/context.c b/arch/arm/mm/context.c
-index 84e6f77..0b52f31 100644
+index 6eb97b3..ac509f6 100644
 --- a/arch/arm/mm/context.c
 +++ b/arch/arm/mm/context.c
 @@ -43,7 +43,7 @@
@@ -3824,25 +3826,25 @@ index 84e6f77..0b52f31 100644
  static DECLARE_BITMAP(asid_map, NUM_USER_ASIDS);
  
  static DEFINE_PER_CPU(atomic64_t, active_asids);
-@@ -180,7 +180,7 @@ static int is_reserved_asid(u64 asid)
- static u64 new_context(struct mm_struct *mm, unsigned int cpu)
+@@ -182,7 +182,7 @@ static u64 new_context(struct mm_struct *mm, unsigned int cpu)
  {
+       static u32 cur_idx = 1;
        u64 asid = atomic64_read(&mm->context.id);
 -      u64 generation = atomic64_read(&asid_generation);
 +      u64 generation = atomic64_read_unchecked(&asid_generation);
  
        if (asid != 0 && is_reserved_asid(asid)) {
                /*
-@@ -198,7 +198,7 @@ static u64 new_context(struct mm_struct *mm, unsigned int cpu)
+@@ -203,7 +203,7 @@ static u64 new_context(struct mm_struct *mm, unsigned int cpu)
                 */
-               asid = find_next_zero_bit(asid_map, NUM_USER_ASIDS, 1);
+               asid = find_next_zero_bit(asid_map, NUM_USER_ASIDS, cur_idx);
                if (asid == NUM_USER_ASIDS) {
 -                      generation = atomic64_add_return(ASID_FIRST_VERSION,
 +                      generation = atomic64_add_return_unchecked(ASID_FIRST_VERSION,
                                                         &asid_generation);
                        flush_context(cpu);
                        asid = find_next_zero_bit(asid_map, NUM_USER_ASIDS, 1);
-@@ -227,14 +227,14 @@ void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)
+@@ -234,14 +234,14 @@ void check_and_switch_context(struct mm_struct *mm, struct task_struct *tsk)
        cpu_set_reserved_ttbr0();
  
        asid = atomic64_read(&mm->context.id);
@@ -4104,7 +4106,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
-index 3e8f106..a0a1fe4 100644
+index 804d615..fcec50a 100644
 --- a/arch/arm/mm/init.c
 +++ b/arch/arm/mm/init.c
 @@ -30,6 +30,8 @@
@@ -4116,7 +4118,7 @@ index 3e8f106..a0a1fe4 100644
  
  #include <asm/mach/arch.h>
  #include <asm/mach/map.h>
-@@ -681,7 +683,46 @@ void free_initmem(void)
+@@ -625,7 +627,46 @@ void free_initmem(void)
  {
  #ifdef CONFIG_HAVE_TCM
        extern char __tcm_start, __tcm_end;
@@ -4164,18 +4166,18 @@ index 3e8f106..a0a1fe4 100644
        free_reserved_area(&__tcm_start, &__tcm_end, -1, "TCM link");
  #endif
 diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
-index f123d6e..04bf569 100644
+index f9c32ba..8540068 100644
 --- a/arch/arm/mm/ioremap.c
 +++ b/arch/arm/mm/ioremap.c
 @@ -392,9 +392,9 @@ __arm_ioremap_exec(phys_addr_t phys_addr, size_t size, bool cached)
        unsigned int mtype;
  
        if (cached)
--              mtype = MT_MEMORY;
+-              mtype = MT_MEMORY_RWX;
 +              mtype = MT_MEMORY_RX;
        else
--              mtype = MT_MEMORY_NONCACHED;
-+              mtype = MT_MEMORY_NONCACHED_RX;
+-              mtype = MT_MEMORY_RWX_NONCACHED;
++              mtype = MT_MEMORY_RX_NONCACHED;
  
        return __arm_ioremap_caller(phys_addr, size, mtype,
                        __builtin_return_address(0));
@@ -4291,10 +4293,10 @@ index 5e85ed3..b10a7ed 100644
        }
  }
 diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
-index 580ef2d..2da06ca 100644
+index a623cb3..a896d84 100644
 --- a/arch/arm/mm/mmu.c
 +++ b/arch/arm/mm/mmu.c
-@@ -38,6 +38,22 @@
+@@ -39,6 +39,22 @@
  #include "mm.h"
  #include "tcm.h"
  
@@ -4317,12 +4319,8 @@ index 580ef2d..2da06ca 100644
  /*
   * empty_zero_page is a special page that is used for
   * zero-initialized data and COW.
-@@ -230,10 +246,18 @@ __setup("noalign", noalign_setup);
- #endif /* ifdef CONFIG_CPU_CP15 / else */
--#define PROT_PTE_DEVICE               L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN
-+#define PROT_PTE_DEVICE               L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY
+@@ -235,7 +251,15 @@ __setup("noalign", noalign_setup);
+ #define PROT_PTE_S2_DEVICE    PROT_PTE_DEVICE
  #define PROT_SECT_DEVICE      PMD_TYPE_SECT|PMD_SECT_AP_WRITE
  
 -static struct mem_type mem_types[] = {
@@ -4338,27 +4336,32 @@ index 580ef2d..2da06ca 100644
        [MT_DEVICE] = {           /* Strongly ordered / ARMv6 shared device */
                .prot_pte       = PROT_PTE_DEVICE | L_PTE_MT_DEV_SHARED |
                                  L_PTE_SHARED,
-@@ -262,16 +286,16 @@ static struct mem_type mem_types[] = {
-       [MT_UNCACHED] = {
+@@ -264,19 +288,19 @@ static struct mem_type mem_types[] = {
+               .prot_sect      = PROT_SECT_DEVICE,
+               .domain         = DOMAIN_IO,
+       },
+-      [MT_UNCACHED] = {
++      [MT_UNCACHED_RW] = {
                .prot_pte       = PROT_PTE_DEVICE,
                .prot_l1        = PMD_TYPE_TABLE,
--              .prot_sect      = PMD_TYPE_SECT | PMD_SECT_XN,
-+              .prot_sect      = PROT_SECT_DEVICE,
+               .prot_sect      = PMD_TYPE_SECT | PMD_SECT_XN,
                .domain         = DOMAIN_IO,
        },
-       [MT_CACHECLEAN] = {
+-      [MT_CACHECLEAN] = {
 -              .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN,
-+              .prot_sect = PMD_TYPE_SECT | PMD_SECT_RDONLY,
++      [MT_CACHECLEAN_RO] = {
++              .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_RDONLY,
                .domain    = DOMAIN_KERNEL,
        },
  #ifndef CONFIG_ARM_LPAE
-       [MT_MINICLEAN] = {
+-      [MT_MINICLEAN] = {
 -              .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_MINICACHE,
-+              .prot_sect = PMD_TYPE_SECT | PMD_SECT_MINICACHE | PMD_SECT_RDONLY,
++      [MT_MINICLEAN_RO] = {
++              .prot_sect = PMD_TYPE_SECT | PMD_SECT_MINICACHE | PMD_SECT_XN | PMD_SECT_RDONLY,
                .domain    = DOMAIN_KERNEL,
        },
  #endif
-@@ -279,36 +303,54 @@ static struct mem_type mem_types[] = {
+@@ -284,15 +308,15 @@ static struct mem_type mem_types[] = {
                .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
                                L_PTE_RDONLY,
                .prot_l1   = PMD_TYPE_TABLE,
@@ -4372,161 +4375,123 @@ index 580ef2d..2da06ca 100644
 -              .domain    = DOMAIN_USER,
 +              .domain    = DOMAIN_VECTORS,
        },
--      [MT_MEMORY] = {
-+      [MT_MEMORY_RWX] = {
+-      [MT_MEMORY_RWX] = {
++      [__MT_MEMORY_RWX] = {
                .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY,
                .prot_l1   = PMD_TYPE_TABLE,
                .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
+@@ -305,17 +329,30 @@ static struct mem_type mem_types[] = {
+               .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
                .domain    = DOMAIN_KERNEL,
        },
-+      [MT_MEMORY_RW] = {
-+              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY,
-+              .prot_l1   = PMD_TYPE_TABLE,
-+              .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
-+              .domain    = DOMAIN_KERNEL,
-+      },
+-      [MT_ROM] = {
+-              .prot_sect = PMD_TYPE_SECT,
 +      [MT_MEMORY_RX] = {
 +              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_KERNEXEC,
 +              .prot_l1   = PMD_TYPE_TABLE,
 +              .prot_sect = PMD_TYPE_SECT | PMD_SECT_KERNEXEC,
 +              .domain    = DOMAIN_KERNEL,
 +      },
-       [MT_ROM] = {
--              .prot_sect = PMD_TYPE_SECT,
++      [MT_ROM_RX] = {
 +              .prot_sect = PMD_TYPE_SECT | PMD_SECT_RDONLY,
                .domain    = DOMAIN_KERNEL,
        },
--      [MT_MEMORY_NONCACHED] = {
-+      [MT_MEMORY_NONCACHED_RW] = {
+-      [MT_MEMORY_RWX_NONCACHED] = {
++      [MT_MEMORY_RW_NONCACHED] = {
                .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
                                L_PTE_MT_BUFFERABLE,
                .prot_l1   = PMD_TYPE_TABLE,
                .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE,
                .domain    = DOMAIN_KERNEL,
        },
-+      [MT_MEMORY_NONCACHED_RX] = {
++      [MT_MEMORY_RX_NONCACHED] = {
 +              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_KERNEXEC |
 +                              L_PTE_MT_BUFFERABLE,
 +              .prot_l1   = PMD_TYPE_TABLE,
 +              .prot_sect = PMD_TYPE_SECT | PMD_SECT_KERNEXEC,
 +              .domain    = DOMAIN_KERNEL,
 +      },
-       [MT_MEMORY_DTCM] = {
--              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
--                              L_PTE_XN,
-+              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY,
-               .prot_l1   = PMD_TYPE_TABLE,
--              .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN,
-+              .prot_sect = PMD_TYPE_SECT | PMD_SECT_RDONLY,
+       [MT_MEMORY_RW_DTCM] = {
+               .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
+                               L_PTE_XN,
+@@ -323,9 +360,10 @@ static struct mem_type mem_types[] = {
+               .prot_sect = PMD_TYPE_SECT | PMD_SECT_XN,
                .domain    = DOMAIN_KERNEL,
        },
-       [MT_MEMORY_ITCM] = {
-@@ -318,10 +360,10 @@ static struct mem_type mem_types[] = {
-       },
-       [MT_MEMORY_SO] = {
-               .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY |
--                              L_PTE_MT_UNCACHED | L_PTE_XN,
-+                              L_PTE_MT_UNCACHED,
+-      [MT_MEMORY_RWX_ITCM] = {
+-              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY,
++      [MT_MEMORY_RX_ITCM] = {
++              .prot_pte  = L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_KERNEXEC,
                .prot_l1   = PMD_TYPE_TABLE,
-               .prot_sect = PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_S |
--                              PMD_SECT_UNCACHED | PMD_SECT_XN,
-+                              PMD_SECT_UNCACHED,
++              .prot_sect = PMD_TYPE_SECT | PMD_SECT_KERNEXEC,
                .domain    = DOMAIN_KERNEL,
        },
-       [MT_MEMORY_DMA_READY] = {
-@@ -407,9 +449,35 @@ static void __init build_mem_type_table(void)
-                        * to prevent speculative instruction fetches.
-                        */
-                       mem_types[MT_DEVICE].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_DEVICE].prot_pte |= L_PTE_XN;
-                       mem_types[MT_DEVICE_NONSHARED].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_DEVICE_NONSHARED].prot_pte |= L_PTE_XN;
-                       mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_DEVICE_CACHED].prot_pte |= L_PTE_XN;
-                       mem_types[MT_DEVICE_WC].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_XN;
-+
-+                      /* Mark other regions on ARMv6+ as execute-never */
-+
-+#ifdef CONFIG_PAX_KERNEXEC
-+                      mem_types[MT_UNCACHED].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_UNCACHED].prot_pte |= L_PTE_XN;
-+                      mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_CACHECLEAN].prot_pte |= L_PTE_XN;
-+#ifndef CONFIG_ARM_LPAE
-+                      mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_MINICLEAN].prot_pte |= L_PTE_XN;
-+#endif
-+                      mem_types[MT_MEMORY_RW].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_MEMORY_RW].prot_pte |= L_PTE_XN;
-+                      mem_types[MT_MEMORY_NONCACHED_RW].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_MEMORY_NONCACHED_RW].prot_pte |= PMD_SECT_XN;
-+                      mem_types[MT_MEMORY_DTCM].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_MEMORY_DTCM].prot_pte |= L_PTE_XN;
-+#endif
-+
-+                      mem_types[MT_MEMORY_SO].prot_sect |= PMD_SECT_XN;
-+                      mem_types[MT_MEMORY_SO].prot_pte |= L_PTE_XN;
-               }
-               if (cpu_arch >= CPU_ARCH_ARMv7 && (cr & CR_TRE)) {
-                       /*
-@@ -470,6 +538,9 @@ static void __init build_mem_type_table(void)
+       [MT_MEMORY_RW_SO] = {
+@@ -524,9 +562,14 @@ static void __init build_mem_type_table(void)
+                * Mark cache clean areas and XIP ROM read only
                 * from SVC mode and no access from userspace.
                 */
-               mem_types[MT_ROM].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
+-              mem_types[MT_ROM].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
+-              mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
+-              mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
++              mem_types[MT_ROM_RX].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
 +#ifdef CONFIG_PAX_KERNEXEC
 +              mem_types[MT_MEMORY_RX].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
++              mem_types[MT_MEMORY_RX_NONCACHED].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
++              mem_types[MT_MEMORY_RX_ITCM].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
 +#endif
-               mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
-               mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
++              mem_types[MT_MINICLEAN_RO].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
++              mem_types[MT_CACHECLEAN_RO].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE;
  #endif
-@@ -487,11 +558,17 @@ static void __init build_mem_type_table(void)
+               if (is_smp()) {
+@@ -542,13 +585,17 @@ static void __init build_mem_type_table(void)
                        mem_types[MT_DEVICE_WC].prot_pte |= L_PTE_SHARED;
                        mem_types[MT_DEVICE_CACHED].prot_sect |= PMD_SECT_S;
                        mem_types[MT_DEVICE_CACHED].prot_pte |= L_PTE_SHARED;
--                      mem_types[MT_MEMORY].prot_sect |= PMD_SECT_S;
--                      mem_types[MT_MEMORY].prot_pte |= L_PTE_SHARED;
-+                      mem_types[MT_MEMORY_RWX].prot_sect |= PMD_SECT_S;
-+                      mem_types[MT_MEMORY_RWX].prot_pte |= L_PTE_SHARED;
-+                      mem_types[MT_MEMORY_RW].prot_sect |= PMD_SECT_S;
-+                      mem_types[MT_MEMORY_RW].prot_pte |= L_PTE_SHARED;
+-                      mem_types[MT_MEMORY_RWX].prot_sect |= PMD_SECT_S;
+-                      mem_types[MT_MEMORY_RWX].prot_pte |= L_PTE_SHARED;
++                      mem_types[__MT_MEMORY_RWX].prot_sect |= PMD_SECT_S;
++                      mem_types[__MT_MEMORY_RWX].prot_pte |= L_PTE_SHARED;
+                       mem_types[MT_MEMORY_RW].prot_sect |= PMD_SECT_S;
+                       mem_types[MT_MEMORY_RW].prot_pte |= L_PTE_SHARED;
 +                      mem_types[MT_MEMORY_RX].prot_sect |= PMD_SECT_S;
 +                      mem_types[MT_MEMORY_RX].prot_pte |= L_PTE_SHARED;
                        mem_types[MT_MEMORY_DMA_READY].prot_pte |= L_PTE_SHARED;
--                      mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_S;
--                      mem_types[MT_MEMORY_NONCACHED].prot_pte |= L_PTE_SHARED;
-+                      mem_types[MT_MEMORY_NONCACHED_RW].prot_sect |= PMD_SECT_S;
-+                      mem_types[MT_MEMORY_NONCACHED_RW].prot_pte |= L_PTE_SHARED;
-+                      mem_types[MT_MEMORY_NONCACHED_RX].prot_sect |= PMD_SECT_S;
-+                      mem_types[MT_MEMORY_NONCACHED_RX].prot_pte |= L_PTE_SHARED;
+-                      mem_types[MT_MEMORY_RWX_NONCACHED].prot_sect |= PMD_SECT_S;
+-                      mem_types[MT_MEMORY_RWX_NONCACHED].prot_pte |= L_PTE_SHARED;
++                      mem_types[MT_MEMORY_RW_NONCACHED].prot_sect |= PMD_SECT_S;
++                      mem_types[MT_MEMORY_RW_NONCACHED].prot_pte |= L_PTE_SHARED;
++                      mem_types[MT_MEMORY_RX_NONCACHED].prot_sect |= PMD_SECT_S;
++                      mem_types[MT_MEMORY_RX_NONCACHED].prot_pte |= L_PTE_SHARED;
                }
        }
  
-@@ -502,15 +579,20 @@ static void __init build_mem_type_table(void)
+@@ -559,15 +606,20 @@ static void __init build_mem_type_table(void)
        if (cpu_arch >= CPU_ARCH_ARMv6) {
                if (cpu_arch >= CPU_ARCH_ARMv7 && (cr & CR_TRE)) {
                        /* Non-cacheable Normal is XCB = 001 */
--                      mem_types[MT_MEMORY_NONCACHED].prot_sect |=
-+                      mem_types[MT_MEMORY_NONCACHED_RW].prot_sect |=
+-                      mem_types[MT_MEMORY_RWX_NONCACHED].prot_sect |=
++                      mem_types[MT_MEMORY_RW_NONCACHED].prot_sect |=
 +                              PMD_SECT_BUFFERED;
-+                      mem_types[MT_MEMORY_NONCACHED_RX].prot_sect |=
++                      mem_types[MT_MEMORY_RX_NONCACHED].prot_sect |=
                                PMD_SECT_BUFFERED;
                } else {
                        /* For both ARMv6 and non-TEX-remapping ARMv7 */
--                      mem_types[MT_MEMORY_NONCACHED].prot_sect |=
-+                      mem_types[MT_MEMORY_NONCACHED_RW].prot_sect |=
+-                      mem_types[MT_MEMORY_RWX_NONCACHED].prot_sect |=
++                      mem_types[MT_MEMORY_RW_NONCACHED].prot_sect |=
 +                              PMD_SECT_TEX(1);
-+                      mem_types[MT_MEMORY_NONCACHED_RX].prot_sect |=
++                      mem_types[MT_MEMORY_RX_NONCACHED].prot_sect |=
                                PMD_SECT_TEX(1);
                }
        } else {
--              mem_types[MT_MEMORY_NONCACHED].prot_sect |= PMD_SECT_BUFFERABLE;
-+              mem_types[MT_MEMORY_NONCACHED_RW].prot_sect |= PMD_SECT_BUFFERABLE;
-+              mem_types[MT_MEMORY_NONCACHED_RX].prot_sect |= PMD_SECT_BUFFERABLE;
+-              mem_types[MT_MEMORY_RWX_NONCACHED].prot_sect |= PMD_SECT_BUFFERABLE;
++              mem_types[MT_MEMORY_RW_NONCACHED].prot_sect |= PMD_SECT_BUFFERABLE;
++              mem_types[MT_MEMORY_RX_NONCACHED].prot_sect |= PMD_SECT_BUFFERABLE;
        }
  
  #ifdef CONFIG_ARM_LPAE
-@@ -526,6 +608,8 @@ static void __init build_mem_type_table(void)
+@@ -583,6 +635,8 @@ static void __init build_mem_type_table(void)
        vecs_pgprot |= PTE_EXT_AF;
  #endif
  
@@ -4535,26 +4500,47 @@ index 580ef2d..2da06ca 100644
        for (i = 0; i < 16; i++) {
                pteval_t v = pgprot_val(protection_map[i]);
                protection_map[i] = __pgprot(v | user_pgprot);
-@@ -543,10 +627,15 @@ static void __init build_mem_type_table(void)
+@@ -600,21 +654,24 @@ static void __init build_mem_type_table(void)
  
        mem_types[MT_LOW_VECTORS].prot_l1 |= ecc_mask;
        mem_types[MT_HIGH_VECTORS].prot_l1 |= ecc_mask;
--      mem_types[MT_MEMORY].prot_sect |= ecc_mask | cp->pmd;
--      mem_types[MT_MEMORY].prot_pte |= kern_pgprot;
-+      mem_types[MT_MEMORY_RWX].prot_sect |= ecc_mask | cp->pmd;
-+      mem_types[MT_MEMORY_RWX].prot_pte |= kern_pgprot;
-+      mem_types[MT_MEMORY_RW].prot_sect |= ecc_mask | cp->pmd;
-+      mem_types[MT_MEMORY_RW].prot_pte |= kern_pgprot;
+-      mem_types[MT_MEMORY_RWX].prot_sect |= ecc_mask | cp->pmd;
+-      mem_types[MT_MEMORY_RWX].prot_pte |= kern_pgprot;
++      mem_types[__MT_MEMORY_RWX].prot_sect |= ecc_mask | cp->pmd;
++      mem_types[__MT_MEMORY_RWX].prot_pte |= kern_pgprot;
+       mem_types[MT_MEMORY_RW].prot_sect |= ecc_mask | cp->pmd;
+       mem_types[MT_MEMORY_RW].prot_pte |= kern_pgprot;
 +      mem_types[MT_MEMORY_RX].prot_sect |= ecc_mask | cp->pmd;
 +      mem_types[MT_MEMORY_RX].prot_pte |= kern_pgprot;
        mem_types[MT_MEMORY_DMA_READY].prot_pte |= kern_pgprot;
--      mem_types[MT_MEMORY_NONCACHED].prot_sect |= ecc_mask;
-+      mem_types[MT_MEMORY_NONCACHED_RW].prot_sect |= ecc_mask;
-+      mem_types[MT_MEMORY_NONCACHED_RX].prot_sect |= ecc_mask;
-       mem_types[MT_ROM].prot_sect |= cp->pmd;
+-      mem_types[MT_MEMORY_RWX_NONCACHED].prot_sect |= ecc_mask;
+-      mem_types[MT_ROM].prot_sect |= cp->pmd;
++      mem_types[MT_MEMORY_RW_NONCACHED].prot_sect |= ecc_mask;
++      mem_types[MT_MEMORY_RX_NONCACHED].prot_sect |= ecc_mask;
++      mem_types[MT_ROM_RX].prot_sect |= cp->pmd;
  
        switch (cp->pmd) {
-@@ -1188,18 +1277,15 @@ void __init arm_mm_memblock_reserve(void)
+       case PMD_SECT_WT:
+-              mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_WT;
++              mem_types[MT_CACHECLEAN_RO].prot_sect |= PMD_SECT_WT;
+               break;
+       case PMD_SECT_WB:
+       case PMD_SECT_WBWA:
+-              mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_WB;
++              mem_types[MT_CACHECLEAN_RO].prot_sect |= PMD_SECT_WB;
+               break;
+       }
+       pr_info("Memory policy: %sData cache %s\n",
+@@ -832,7 +889,7 @@ static void __init create_mapping(struct map_desc *md)
+               return;
+       }
+-      if ((md->type == MT_DEVICE || md->type == MT_ROM) &&
++      if ((md->type == MT_DEVICE || md->type == MT_ROM_RX) &&
+           md->virtual >= PAGE_OFFSET &&
+           (md->virtual < VMALLOC_START || md->virtual >= VMALLOC_END)) {
+               printk(KERN_WARNING "BUG: mapping for 0x%08llx"
+@@ -1247,18 +1304,15 @@ void __init arm_mm_memblock_reserve(void)
   * called function.  This means you can't use any function or debugging
   * method which may touch any device, otherwise the kernel _will_ crash.
   */
@@ -4577,7 +4563,33 @@ index 580ef2d..2da06ca 100644
  
        for (addr = VMALLOC_START; addr; addr += PMD_SIZE)
                pmd_clear(pmd_off_k(addr));
-@@ -1239,7 +1325,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
+@@ -1271,7 +1325,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
+       map.pfn = __phys_to_pfn(CONFIG_XIP_PHYS_ADDR & SECTION_MASK);
+       map.virtual = MODULES_VADDR;
+       map.length = ((unsigned long)_etext - map.virtual + ~SECTION_MASK) & SECTION_MASK;
+-      map.type = MT_ROM;
++      map.type = MT_ROM_RX;
+       create_mapping(&map);
+ #endif
+@@ -1282,14 +1336,14 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
+       map.pfn = __phys_to_pfn(FLUSH_BASE_PHYS);
+       map.virtual = FLUSH_BASE;
+       map.length = SZ_1M;
+-      map.type = MT_CACHECLEAN;
++      map.type = MT_CACHECLEAN_RO;
+       create_mapping(&map);
+ #endif
+ #ifdef FLUSH_BASE_MINICACHE
+       map.pfn = __phys_to_pfn(FLUSH_BASE_PHYS + SZ_1M);
+       map.virtual = FLUSH_BASE_MINICACHE;
+       map.length = SZ_1M;
+-      map.type = MT_MINICLEAN;
++      map.type = MT_MINICLEAN_RO;
+       create_mapping(&map);
+ #endif
+@@ -1298,7 +1352,7 @@ static void __init devicemaps_init(const struct machine_desc *mdesc)
         * location (0xffff0000).  If we aren't using high-vectors, also
         * create a mapping at the low-vectors virtual address.
         */
@@ -4586,13 +4598,26 @@ index 580ef2d..2da06ca 100644
        map.virtual = 0xffff0000;
        map.length = PAGE_SIZE;
  #ifdef CONFIG_KUSER_HELPERS
-@@ -1311,8 +1397,39 @@ static void __init map_lowmem(void)
-               map.pfn = __phys_to_pfn(start);
-               map.virtual = __phys_to_virt(start);
-               map.length = end - start;
--              map.type = MT_MEMORY;
+@@ -1355,8 +1409,10 @@ static void __init kmap_init(void)
+ static void __init map_lowmem(void)
+ {
+       struct memblock_region *reg;
++#ifndef CONFIG_PAX_KERNEXEC
+       unsigned long kernel_x_start = round_down(__pa(_stext), SECTION_SIZE);
+       unsigned long kernel_x_end = round_up(__pa(__init_end), SECTION_SIZE);
++#endif
+       /* Map all the lowmem memory banks. */
+       for_each_memblock(memory, reg) {
+@@ -1369,11 +1425,48 @@ static void __init map_lowmem(void)
+               if (start >= end)
+                       break;
  
 +#ifdef CONFIG_PAX_KERNEXEC
++              map.pfn = __phys_to_pfn(start);
++              map.virtual = __phys_to_virt(start);
++              map.length = end - start;
++
 +              if (map.virtual <= (unsigned long)_stext && ((unsigned long)_end < (map.virtual + map.length))) {
 +                      struct map_desc kernel;
 +                      struct map_desc initmap;
@@ -4601,19 +4626,19 @@ index 580ef2d..2da06ca 100644
 +                      initmap.pfn = __phys_to_pfn(__pa(__init_begin));
 +                      initmap.virtual = (unsigned long)__init_begin;
 +                      initmap.length = _sdata - __init_begin;
-+                      initmap.type = MT_MEMORY_RWX;
++                      initmap.type = __MT_MEMORY_RWX;
 +                      create_mapping(&initmap);
 +
 +                      /* when freeing initmem we will make this RX */
 +                      kernel.pfn = __phys_to_pfn(__pa(_stext));
 +                      kernel.virtual = (unsigned long)_stext;
 +                      kernel.length = __init_begin - _stext;
-+                      kernel.type = MT_MEMORY_RWX;
++                      kernel.type = __MT_MEMORY_RWX;
 +                      create_mapping(&kernel);
 +
 +                      if (map.virtual < (unsigned long)_stext) {
 +                              map.length = (unsigned long)_stext - map.virtual;
-+                              map.type = MT_MEMORY_RWX;
++                              map.type = __MT_MEMORY_RWX;
 +                              create_mapping(&map);
 +                      }
 +
@@ -4621,12 +4646,49 @@ index 580ef2d..2da06ca 100644
 +                      map.virtual = (unsigned long)_sdata;
 +                      map.length = end - __pa(_sdata);
 +              }
-+#endif
 +
 +              map.type = MT_MEMORY_RW;
-               create_mapping(&map);
++              create_mapping(&map);
++#else
+               if (end < kernel_x_start || start >= kernel_x_end) {
+                       map.pfn = __phys_to_pfn(start);
+                       map.virtual = __phys_to_virt(start);
+                       map.length = end - start;
+-                      map.type = MT_MEMORY_RWX;
++                      map.type = __MT_MEMORY_RWX;
+                       create_mapping(&map);
+               } else {
+@@ -1390,7 +1483,7 @@ static void __init map_lowmem(void)
+                       map.pfn = __phys_to_pfn(kernel_x_start);
+                       map.virtual = __phys_to_virt(kernel_x_start);
+                       map.length = kernel_x_end - kernel_x_start;
+-                      map.type = MT_MEMORY_RWX;
++                      map.type = __MT_MEMORY_RWX;
+                       create_mapping(&map);
+@@ -1403,6 +1496,7 @@ static void __init map_lowmem(void)
+                               create_mapping(&map);
+                       }
+               }
++#endif
        }
  }
+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
++++ b/arch/arm/plat-iop/setup.c
+@@ -24,7 +24,7 @@ static struct map_desc iop3xx_std_desc[] __initdata = {
+               .virtual        = IOP3XX_PERIPHERAL_VIRT_BASE,
+               .pfn            = __phys_to_pfn(IOP3XX_PERIPHERAL_PHYS_BASE),
+               .length         = IOP3XX_PERIPHERAL_SIZE,
+-              .type           = MT_UNCACHED,
++              .type           = MT_UNCACHED_RW,
+        },
+ };
 diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c
 index a5bc92d..0bb4730 100644
 --- a/arch/arm/plat-omap/sram.c
@@ -4653,6 +4715,18 @@ index ce6d763..cfea917 100644
  
  extern void *samsung_dmadev_get_ops(void);
  extern void *s3c_dma_get_ops(void);
+diff --git a/arch/arm64/include/asm/uaccess.h b/arch/arm64/include/asm/uaccess.h
+index 6c0f684..5faea9d 100644
+--- a/arch/arm64/include/asm/uaccess.h
++++ b/arch/arm64/include/asm/uaccess.h
+@@ -99,6 +99,7 @@ static inline void set_fs(mm_segment_t fs)
+       flag;                                                           \
+ })
++#define access_ok_noprefault(type, addr, size) access_ok((type), (addr), (size))
+ #define access_ok(type, addr, size)   __range_ok(addr, size)
+ #define user_addr_max                 get_fs
 diff --git a/arch/avr32/include/asm/cache.h b/arch/avr32/include/asm/cache.h
 index c3a58a1..78fbf54 100644
 --- a/arch/avr32/include/asm/cache.h
@@ -4903,10 +4977,10 @@ index f4ca594..adc72fd6 100644
  #define __cacheline_aligned   __aligned(L1_CACHE_BYTES)
  #define ____cacheline_aligned __aligned(L1_CACHE_BYTES)
 diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
-index 4e4119b..dd7de0a 100644
+index 0c8e553..112d734 100644
 --- a/arch/ia64/Kconfig
 +++ b/arch/ia64/Kconfig
-@@ -554,6 +554,7 @@ source "drivers/sn/Kconfig"
+@@ -544,6 +544,7 @@ source "drivers/sn/Kconfig"
  config KEXEC
        bool "kexec system call"
        depends on !IA64_HP_SIM && (!SMP || HOTPLUG_CPU)
@@ -5049,10 +5123,18 @@ index 45698cd..e8e2dbc 100644
  
  static __always_inline void __ticket_spin_unlock_wait(arch_spinlock_t *lock)
 diff --git a/arch/ia64/include/asm/uaccess.h b/arch/ia64/include/asm/uaccess.h
-index 449c8c0..18965fb 100644
+index 449c8c0..3d4b1e9 100644
 --- a/arch/ia64/include/asm/uaccess.h
 +++ b/arch/ia64/include/asm/uaccess.h
-@@ -240,12 +240,24 @@ extern unsigned long __must_check __copy_user (void __user *to, const void __use
+@@ -70,6 +70,7 @@
+        && ((segment).seg == KERNEL_DS.seg                                             \
+            || likely(REGION_OFFSET((unsigned long) (addr)) < RGN_MAP_LIMIT)));        \
+ })
++#define access_ok_noprefault(type, addr, size) access_ok((type), (addr), (size))
+ #define access_ok(type, addr, size)   __access_ok((addr), (size), get_fs())
+ /*
+@@ -240,12 +241,24 @@ extern unsigned long __must_check __copy_user (void __user *to, const void __use
  static inline unsigned long
  __copy_to_user (void __user *to, const void *from, unsigned long count)
  {
@@ -5077,7 +5159,7 @@ index 449c8c0..18965fb 100644
        return __copy_user((__force void __user *) to, from, count);
  }
  
-@@ -255,10 +267,13 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
+@@ -255,10 +268,13 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
  ({                                                                                    \
        void __user *__cu_to = (to);                                                    \
        const void *__cu_from = (from);                                                 \
@@ -5093,7 +5175,7 @@ index 449c8c0..18965fb 100644
        __cu_len;                                                                       \
  })
  
-@@ -266,11 +281,14 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
+@@ -266,11 +282,14 @@ __copy_from_user (void *to, const void __user *from, unsigned long count)
  ({                                                                                    \
        void *__cu_to = (to);                                                           \
        const void __user *__cu_from = (from);                                          \
@@ -5250,10 +5332,10 @@ index 41e33f8..65180b2a 100644
  }
  
 diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S
-index 0ccb28f..8992469 100644
+index 84f8a52..7c76178 100644
 --- a/arch/ia64/kernel/vmlinux.lds.S
 +++ b/arch/ia64/kernel/vmlinux.lds.S
-@@ -198,7 +198,7 @@ SECTIONS {
+@@ -192,7 +192,7 @@ SECTIONS {
        /* Per-cpu data: */
        . = ALIGN(PERCPU_PAGE_SIZE);
        PERCPU_VADDR(SMP_CACHE_BYTES, PERCPU_ADDR, :percpu)
@@ -5334,7 +5416,7 @@ index 68232db..6ca80af 100644
  }
  
 diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
-index 88504ab..cbb6c9f 100644
+index 25c3502..560dae7 100644
 --- a/arch/ia64/mm/init.c
 +++ b/arch/ia64/mm/init.c
 @@ -120,6 +120,19 @@ ia64_init_addr_space (void)
@@ -5445,10 +5527,10 @@ index 4efe96a..60e8699 100644
  #define SMP_CACHE_BYTES       L1_CACHE_BYTES
  
 diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
-index 650de39..6982b02 100644
+index 95fa1f1..56a6fa2 100644
 --- a/arch/mips/Kconfig
 +++ b/arch/mips/Kconfig
-@@ -2268,6 +2268,7 @@ source "kernel/Kconfig.preempt"
+@@ -2298,6 +2298,7 @@ source "kernel/Kconfig.preempt"
  
  config KEXEC
        bool "Kexec system call"
@@ -5456,6 +5538,19 @@ index 650de39..6982b02 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
+diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c
+index 02f2444..506969c 100644
+--- a/arch/mips/cavium-octeon/dma-octeon.c
++++ b/arch/mips/cavium-octeon/dma-octeon.c
+@@ -199,7 +199,7 @@ static void octeon_dma_free_coherent(struct device *dev, size_t size,
+       if (dma_release_from_coherent(dev, order, vaddr))
+               return;
+-      swiotlb_free_coherent(dev, size, vaddr, dma_handle);
++      swiotlb_free_coherent(dev, size, vaddr, dma_handle, attrs);
+ }
+ 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 7eed2f2..c4e385d 100644
 --- a/arch/mips/include/asm/atomic.h
@@ -6381,10 +6476,10 @@ index b4db69f..8f3b093 100644
  #define SMP_CACHE_SHIFT               L1_CACHE_SHIFT
  #define SMP_CACHE_BYTES               L1_CACHE_BYTES
 diff --git a/arch/mips/include/asm/elf.h b/arch/mips/include/asm/elf.h
-index a66359e..d3d474a 100644
+index d414405..6bb4ba2 100644
 --- a/arch/mips/include/asm/elf.h
 +++ b/arch/mips/include/asm/elf.h
-@@ -373,13 +373,16 @@ extern const char *__elf_platform;
+@@ -398,13 +398,16 @@ extern const char *__elf_platform;
  #define ELF_ET_DYN_BASE               (TASK_SIZE / 3 * 2)
  #endif
  
@@ -6417,6 +6512,19 @@ index c1f6afa..38cc6e9 100644
 +#define arch_align_stack(x) ((x) & ~0xfUL)
  
  #endif /* _ASM_EXEC_H */
+diff --git a/arch/mips/include/asm/hw_irq.h b/arch/mips/include/asm/hw_irq.h
+index 9e8ef59..1139d6b 100644
+--- a/arch/mips/include/asm/hw_irq.h
++++ b/arch/mips/include/asm/hw_irq.h
+@@ -10,7 +10,7 @@
+ #include <linux/atomic.h>
+-extern atomic_t irq_err_count;
++extern atomic_unchecked_t irq_err_count;
+ /*
+  * interrupt-retrigger: NOP for now. This may not be appropriate for all
 diff --git a/arch/mips/include/asm/local.h b/arch/mips/include/asm/local.h
 index d44622c..64990d2 100644
 --- a/arch/mips/include/asm/local.h
@@ -6509,10 +6617,10 @@ index d44622c..64990d2 100644
  
  /**
 diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
-index f6be474..12ad554 100644
+index 5e08bcc..cfedefc 100644
 --- a/arch/mips/include/asm/page.h
 +++ b/arch/mips/include/asm/page.h
-@@ -95,7 +95,7 @@ extern void copy_user_highpage(struct page *to, struct page *from,
+@@ -120,7 +120,7 @@ extern void copy_user_highpage(struct page *to, struct page *from,
    #ifdef CONFIG_CPU_MIPS32
      typedef struct { unsigned long pte_low, pte_high; } pte_t;
      #define pte_val(x)          ((x).pte_low | ((unsigned long long)(x).pte_high << 32))
@@ -6537,6 +6645,20 @@ index b336037..5b874cc 100644
  #endif
  
  /*
+diff --git a/arch/mips/include/asm/pgtable.h b/arch/mips/include/asm/pgtable.h
+index 008324d..f67c239 100644
+--- a/arch/mips/include/asm/pgtable.h
++++ b/arch/mips/include/asm/pgtable.h
+@@ -20,6 +20,9 @@
+ #include <asm/io.h>
+ #include <asm/pgtable-bits.h>
++#define ktla_ktva(addr)               (addr)
++#define ktva_ktla(addr)               (addr)
++
+ struct mm_struct;
+ struct vm_area_struct;
 diff --git a/arch/mips/include/asm/smtc_proc.h b/arch/mips/include/asm/smtc_proc.h
 index 25da651..ae2a259 100644
 --- a/arch/mips/include/asm/smtc_proc.h
@@ -6550,21 +6672,21 @@ index 25da651..ae2a259 100644
  
  #endif /* __ASM_SMTC_PROC_H */
 diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h
-index 4f58ef6..5e7081b 100644
+index 24846f9..61c49f0 100644
 --- a/arch/mips/include/asm/thread_info.h
 +++ b/arch/mips/include/asm/thread_info.h
-@@ -115,6 +115,8 @@ static inline struct thread_info *current_thread_info(void)
- #define TIF_FPUBOUND          24      /* thread bound to FPU-full CPU set */
+@@ -116,6 +116,8 @@ static inline struct thread_info *current_thread_info(void)
  #define TIF_LOAD_WATCH                25      /* If set, load watch registers */
  #define TIF_SYSCALL_TRACEPOINT        26      /* syscall tracepoint instrumentation */
+ #define TIF_32BIT_FPREGS      27      /* 32-bit floating point registers */
 +/* li takes a 32bit immediate */
 +#define TIF_GRSEC_SETXID      29      /* update credentials on syscall entry/exit */
  #define TIF_SYSCALL_TRACE     31      /* syscall trace active */
  
  #define _TIF_SYSCALL_TRACE    (1<<TIF_SYSCALL_TRACE)
-@@ -132,13 +134,14 @@ static inline struct thread_info *current_thread_info(void)
- #define _TIF_FPUBOUND         (1<<TIF_FPUBOUND)
+@@ -134,13 +136,14 @@ static inline struct thread_info *current_thread_info(void)
  #define _TIF_LOAD_WATCH               (1<<TIF_LOAD_WATCH)
+ #define _TIF_32BIT_FPREGS     (1<<TIF_32BIT_FPREGS)
  #define _TIF_SYSCALL_TRACEPOINT       (1<<TIF_SYSCALL_TRACEPOINT)
 +#define _TIF_GRSEC_SETXID     (1<<TIF_GRSEC_SETXID)
  
@@ -6579,7 +6701,7 @@ index 4f58ef6..5e7081b 100644
  
  /* work to do on interrupt/exception return */
  #define _TIF_WORK_MASK                \
-@@ -146,7 +149,7 @@ static inline struct thread_info *current_thread_info(void)
+@@ -148,7 +151,7 @@ static inline struct thread_info *current_thread_info(void)
  /* work to do on any return to u-space */
  #define _TIF_ALLWORK_MASK     (_TIF_NOHZ | _TIF_WORK_MASK |           \
                                 _TIF_WORK_SYSCALL_EXIT |               \
@@ -6588,6 +6710,18 @@ index 4f58ef6..5e7081b 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
+index f3fa375..3af6637 100644
+--- a/arch/mips/include/asm/uaccess.h
++++ b/arch/mips/include/asm/uaccess.h
+@@ -128,6 +128,7 @@ extern u64 __ua_limit;
+       __ok == 0;                                                      \
+ })
++#define access_ok_noprefault(type, addr, size) access_ok((type), (addr), (size))
+ #define access_ok(type, addr, size)                                   \
+       likely(__access_ok((addr), (size), __access_mask))
 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
@@ -6607,10 +6741,10 @@ index 1188e00..41cf144 100644
  #include <linux/module.h>
  #include <linux/elfcore.h>
 diff --git a/arch/mips/kernel/binfmt_elfo32.c b/arch/mips/kernel/binfmt_elfo32.c
-index 202e581..689ca79 100644
+index 7faf5f2..f3d3cf4 100644
 --- a/arch/mips/kernel/binfmt_elfo32.c
 +++ b/arch/mips/kernel/binfmt_elfo32.c
-@@ -56,6 +56,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
+@@ -70,6 +70,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
  #undef ELF_ET_DYN_BASE
  #define ELF_ET_DYN_BASE               (TASK32_SIZE / 3 * 2)
  
@@ -6624,6 +6758,32 @@ index 202e581..689ca79 100644
  #include <asm/processor.h>
  
  /*
+diff --git a/arch/mips/kernel/i8259.c b/arch/mips/kernel/i8259.c
+index 2b91fe8..fe4f6b4 100644
+--- a/arch/mips/kernel/i8259.c
++++ b/arch/mips/kernel/i8259.c
+@@ -205,7 +205,7 @@ spurious_8259A_irq:
+                       printk(KERN_DEBUG "spurious 8259A interrupt: IRQ%d.\n", irq);
+                       spurious_irq_mask |= irqmask;
+               }
+-              atomic_inc(&irq_err_count);
++              atomic_inc_unchecked(&irq_err_count);
+               /*
+                * Theoretically we do not have to handle this IRQ,
+                * but in Linux this does not cause problems and is
+diff --git a/arch/mips/kernel/irq-gt641xx.c b/arch/mips/kernel/irq-gt641xx.c
+index 44a1f79..2bd6aa3 100644
+--- a/arch/mips/kernel/irq-gt641xx.c
++++ b/arch/mips/kernel/irq-gt641xx.c
+@@ -110,7 +110,7 @@ void gt641xx_irq_dispatch(void)
+               }
+       }
+-      atomic_inc(&irq_err_count);
++      atomic_inc_unchecked(&irq_err_count);
+ }
+ void __init gt641xx_irq_init(void)
 diff --git a/arch/mips/kernel/irq.c b/arch/mips/kernel/irq.c
 index d1fea7a..45602ea 100644
 --- a/arch/mips/kernel/irq.c
@@ -6650,10 +6810,10 @@ index d1fea7a..45602ea 100644
  
  void __init init_IRQ(void)
 diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
-index ddc7610..8c58f17 100644
+index 6ae540e..b7396dc 100644
 --- a/arch/mips/kernel/process.c
 +++ b/arch/mips/kernel/process.c
-@@ -566,15 +566,3 @@ unsigned long get_wchan(struct task_struct *task)
+@@ -562,15 +562,3 @@ unsigned long get_wchan(struct task_struct *task)
  out:
        return pc;
  }
@@ -6670,10 +6830,10 @@ index ddc7610..8c58f17 100644
 -      return sp & ALMASK;
 -}
 diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c
-index b52e1d2..1a3ca09 100644
+index 7da9b76..21578be 100644
 --- a/arch/mips/kernel/ptrace.c
 +++ b/arch/mips/kernel/ptrace.c
-@@ -652,6 +652,10 @@ long arch_ptrace(struct task_struct *child, long request,
+@@ -658,6 +658,10 @@ long arch_ptrace(struct task_struct *child, long request,
        return ret;
  }
  
@@ -6684,7 +6844,7 @@ index b52e1d2..1a3ca09 100644
  /*
   * Notification of system call entry/exit
   * - triggered by current->work.syscall_trace
-@@ -668,6 +672,11 @@ asmlinkage void syscall_trace_enter(struct pt_regs *regs)
+@@ -674,6 +678,11 @@ asmlinkage void syscall_trace_enter(struct pt_regs *regs)
            tracehook_report_syscall_entry(regs))
                ret = -1;
  
@@ -6696,6 +6856,38 @@ index b52e1d2..1a3ca09 100644
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
                trace_sys_enter(regs, regs->regs[2]);
  
+diff --git a/arch/mips/kernel/reset.c b/arch/mips/kernel/reset.c
+index 07fc524..b9d7f28 100644
+--- a/arch/mips/kernel/reset.c
++++ b/arch/mips/kernel/reset.c
+@@ -13,6 +13,7 @@
+ #include <linux/reboot.h>
+ #include <asm/reboot.h>
++#include <asm/bug.h>
+ /*
+  * Urgs ...  Too many MIPS machines to handle this in a generic way.
+@@ -29,16 +30,19 @@ void machine_restart(char *command)
+ {
+       if (_machine_restart)
+               _machine_restart(command);
++      BUG();
+ }
+ void machine_halt(void)
+ {
+       if (_machine_halt)
+               _machine_halt();
++      BUG();
+ }
+ void machine_power_off(void)
+ {
+       if (pm_power_off)
+               pm_power_off();
++      BUG();
+ }
 diff --git a/arch/mips/kernel/smtc-proc.c b/arch/mips/kernel/smtc-proc.c
 index c10aa84..9ec2e60 100644
 --- a/arch/mips/kernel/smtc-proc.c
@@ -6741,10 +6933,10 @@ index dfc1b91..11a2c07 100644
  
  
 diff --git a/arch/mips/kernel/sync-r4k.c b/arch/mips/kernel/sync-r4k.c
-index 84536bf..79caa4d 100644
+index c24ad5f..9983ab2 100644
 --- a/arch/mips/kernel/sync-r4k.c
 +++ b/arch/mips/kernel/sync-r4k.c
-@@ -21,8 +21,8 @@
+@@ -20,8 +20,8 @@
  #include <asm/mipsregs.h>
  
  static atomic_t count_start_flag = ATOMIC_INIT(0);
@@ -6755,7 +6947,7 @@ index 84536bf..79caa4d 100644
  static atomic_t count_reference = ATOMIC_INIT(0);
  
  #define COUNTON 100
-@@ -69,13 +69,13 @@ void synchronise_count_master(int cpu)
+@@ -68,13 +68,13 @@ void synchronise_count_master(int cpu)
  
        for (i = 0; i < NR_LOOPS; i++) {
                /* slaves loop on '!= 2' */
@@ -6772,7 +6964,7 @@ index 84536bf..79caa4d 100644
  
                /*
                 * Everyone initialises count in the last loop:
-@@ -86,11 +86,11 @@ void synchronise_count_master(int cpu)
+@@ -85,11 +85,11 @@ void synchronise_count_master(int cpu)
                /*
                 * Wait for all slaves to leave the synchronization point:
                 */
@@ -6787,7 +6979,7 @@ index 84536bf..79caa4d 100644
        }
        /* Arrange for an interrupt in a short while */
        write_c0_compare(read_c0_count() + COUNTON);
-@@ -131,8 +131,8 @@ void synchronise_count_slave(int cpu)
+@@ -130,8 +130,8 @@ void synchronise_count_slave(int cpu)
        initcount = atomic_read(&count_reference);
  
        for (i = 0; i < NR_LOOPS; i++) {
@@ -6798,7 +6990,7 @@ index 84536bf..79caa4d 100644
                        mb();
  
                /*
-@@ -141,8 +141,8 @@ void synchronise_count_slave(int cpu)
+@@ -140,8 +140,8 @@ void synchronise_count_slave(int cpu)
                if (i == NR_LOOPS-1)
                        write_c0_count(initcount);
  
@@ -6810,10 +7002,10 @@ index 84536bf..79caa4d 100644
        }
        /* Arrange for an interrupt in a short while */
 diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
-index f9c8746..78b64e3 100644
+index e0b4996..6b43ce7 100644
 --- a/arch/mips/kernel/traps.c
 +++ b/arch/mips/kernel/traps.c
-@@ -690,7 +690,18 @@ asmlinkage void do_ov(struct pt_regs *regs)
+@@ -691,7 +691,18 @@ asmlinkage void do_ov(struct pt_regs *regs)
        siginfo_t info;
  
        prev_state = exception_enter();
@@ -6877,7 +7069,7 @@ index becc42b..9e43d4b 100644
                tsk->thread.error_code = write;
  #if 0
 diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
-index f1baadd..8537544 100644
+index f1baadd..5472dca 100644
 --- a/arch/mips/mm/mmap.c
 +++ b/arch/mips/mm/mmap.c
 @@ -59,6 +59,7 @@ static unsigned long arch_get_unmapped_area_common(struct file *filp,
@@ -6906,7 +7098,7 @@ index f1baadd..8537544 100644
                vma = find_vma(mm, addr);
 -              if (TASK_SIZE - len >= addr &&
 -                  (!vma || addr + len <= vma->vm_start))
-+              if (TASK_SIZE - len >= addr && check_heap_stack_gap(vmm, addr, len, offset))
++              if (TASK_SIZE - len >= addr && check_heap_stack_gap(vma, addr, len, offset))
                        return addr;
        }
  
@@ -6981,6 +7173,58 @@ index f1baadd..8537544 100644
  int __virt_addr_valid(const volatile void *kaddr)
  {
        return pfn_valid(PFN_DOWN(virt_to_phys(kaddr)));
+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
++++ b/arch/mips/pci/pci-octeon.c
+@@ -327,8 +327,8 @@ static int octeon_write_config(struct pci_bus *bus, unsigned int devfn,
+ static struct pci_ops octeon_pci_ops = {
+-      octeon_read_config,
+-      octeon_write_config,
++      .read = octeon_read_config,
++      .write = octeon_write_config,
+ };
+ static struct resource octeon_pci_mem_resource = {
+diff --git a/arch/mips/pci/pcie-octeon.c b/arch/mips/pci/pcie-octeon.c
+index 5e36c33..eb4a17b 100644
+--- a/arch/mips/pci/pcie-octeon.c
++++ b/arch/mips/pci/pcie-octeon.c
+@@ -1792,8 +1792,8 @@ static int octeon_dummy_write_config(struct pci_bus *bus, unsigned int devfn,
+ }
+ static struct pci_ops octeon_pcie0_ops = {
+-      octeon_pcie0_read_config,
+-      octeon_pcie0_write_config,
++      .read = octeon_pcie0_read_config,
++      .write = octeon_pcie0_write_config,
+ };
+ static struct resource octeon_pcie0_mem_resource = {
+@@ -1813,8 +1813,8 @@ static struct pci_controller octeon_pcie0_controller = {
+ };
+ static struct pci_ops octeon_pcie1_ops = {
+-      octeon_pcie1_read_config,
+-      octeon_pcie1_write_config,
++      .read = octeon_pcie1_read_config,
++      .write = octeon_pcie1_write_config,
+ };
+ static struct resource octeon_pcie1_mem_resource = {
+@@ -1834,8 +1834,8 @@ static struct pci_controller octeon_pcie1_controller = {
+ };
+ static struct pci_ops octeon_dummy_ops = {
+-      octeon_dummy_read_config,
+-      octeon_dummy_write_config,
++      .read = octeon_dummy_read_config,
++      .write = octeon_dummy_write_config,
+ };
+ static struct resource octeon_dummy_mem_resource = {
 diff --git a/arch/mips/sgi-ip27/ip27-nmi.c b/arch/mips/sgi-ip27/ip27-nmi.c
 index a2358b4..7cead4f 100644
 --- a/arch/mips/sgi-ip27/ip27-nmi.c
@@ -7006,6 +7250,54 @@ index a2358b4..7cead4f 100644
  #endif
  
        /*
+diff --git a/arch/mips/sni/rm200.c b/arch/mips/sni/rm200.c
+index a046b30..6799527 100644
+--- a/arch/mips/sni/rm200.c
++++ b/arch/mips/sni/rm200.c
+@@ -270,7 +270,7 @@ spurious_8259A_irq:
+                              "spurious RM200 8259A interrupt: IRQ%d.\n", irq);
+                       spurious_irq_mask |= irqmask;
+               }
+-              atomic_inc(&irq_err_count);
++              atomic_inc_unchecked(&irq_err_count);
+               /*
+                * Theoretically we do not have to handle this IRQ,
+                * but in Linux this does not cause problems and is
+diff --git a/arch/mips/vr41xx/common/icu.c b/arch/mips/vr41xx/common/icu.c
+index 41e873b..34d33a7 100644
+--- a/arch/mips/vr41xx/common/icu.c
++++ b/arch/mips/vr41xx/common/icu.c
+@@ -653,7 +653,7 @@ static int icu_get_irq(unsigned int irq)
+       printk(KERN_ERR "spurious ICU interrupt: %04x,%04x\n", pend1, pend2);
+-      atomic_inc(&irq_err_count);
++      atomic_inc_unchecked(&irq_err_count);
+       return -1;
+ }
+diff --git a/arch/mips/vr41xx/common/irq.c b/arch/mips/vr41xx/common/irq.c
+index ae0e4ee..e8f0692 100644
+--- a/arch/mips/vr41xx/common/irq.c
++++ b/arch/mips/vr41xx/common/irq.c
+@@ -64,7 +64,7 @@ static void irq_dispatch(unsigned int irq)
+       irq_cascade_t *cascade;
+       if (irq >= NR_IRQS) {
+-              atomic_inc(&irq_err_count);
++              atomic_inc_unchecked(&irq_err_count);
+               return;
+       }
+@@ -84,7 +84,7 @@ static void irq_dispatch(unsigned int irq)
+               ret = cascade->get_irq(irq);
+               irq = ret;
+               if (ret < 0)
+-                      atomic_inc(&irq_err_count);
++                      atomic_inc_unchecked(&irq_err_count);
+               else
+                       irq_dispatch(irq);
+               if (!irqd_irq_disabled(idata) && chip->irq_unmask)
 diff --git a/arch/mn10300/proc-mn103e010/include/proc/cache.h b/arch/mn10300/proc-mn103e010/include/proc/cache.h
 index 967d144..db12197 100644
 --- a/arch/mn10300/proc-mn103e010/include/proc/cache.h
@@ -7116,7 +7408,7 @@ index 47f11c7..3420df2 100644
  
  #define SMP_CACHE_BYTES L1_CACHE_BYTES
 diff --git a/arch/parisc/include/asm/elf.h b/arch/parisc/include/asm/elf.h
-index ad2b503..bdf1651 100644
+index 3391d06..c23a2cc 100644
 --- a/arch/parisc/include/asm/elf.h
 +++ b/arch/parisc/include/asm/elf.h
 @@ -342,6 +342,13 @@ struct pt_regs;   /* forward declaration... */
@@ -7158,7 +7450,7 @@ index f213f5b..0af3e8e 100644
  #endif
  
 diff --git a/arch/parisc/include/asm/pgtable.h b/arch/parisc/include/asm/pgtable.h
-index 34899b5..02dd060 100644
+index 22b89d1..ce34230 100644
 --- a/arch/parisc/include/asm/pgtable.h
 +++ b/arch/parisc/include/asm/pgtable.h
 @@ -223,6 +223,17 @@ extern void purge_tlb_entries(struct mm_struct *, unsigned long);
@@ -7300,74 +7592,77 @@ index 50dfafc..b9fc230 100644
        DEBUGP("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
               me->arch.unwind_section, table, end, gp);
 diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c
-index 0d3a9d4..20a99b0 100644
+index b7cadc4..bf4a32d 100644
 --- a/arch/parisc/kernel/sys_parisc.c
 +++ b/arch/parisc/kernel/sys_parisc.c
-@@ -33,9 +33,11 @@
- #include <linux/utsname.h>
- #include <linux/personality.h>
--static unsigned long get_unshared_area(unsigned long addr, unsigned long len)
-+static unsigned long get_unshared_area(unsigned long addr, unsigned long len,
-+                                      unsigned long flags)
- {
+@@ -89,6 +89,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+       unsigned long task_size = TASK_SIZE;
+       int do_color_align, last_mmap;
        struct vm_unmapped_area_info info;
-+      unsigned long offset = gr_rand_threadstack_offset(current->mm, NULL, flags);
++      unsigned long offset = gr_rand_threadstack_offset(current->mm, filp, flags);
  
-       info.flags = 0;
-       info.length = len;
-@@ -43,6 +45,7 @@ static unsigned long get_unshared_area(unsigned long addr, unsigned long len)
-       info.high_limit = TASK_SIZE;
-       info.align_mask = 0;
-       info.align_offset = 0;
-+      info.threadstack_offset = offset;
-       return vm_unmapped_area(&info);
- }
+       if (len > task_size)
+               return -ENOMEM;
+@@ -106,6 +107,10 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+               goto found_addr;
+       }
  
-@@ -69,9 +72,10 @@ static unsigned long shared_align_offset(struct file *filp, unsigned long pgoff)
- }
++#ifdef CONFIG_PAX_RANDMMAP
++      if (!(mm->pax_flags & MF_PAX_RANDMMAP))
++#endif
++
+       if (addr) {
+               if (do_color_align && last_mmap)
+                       addr = COLOR_ALIGN(addr, last_mmap, pgoff);
+@@ -124,6 +129,7 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
+       info.high_limit = mmap_upper_limit();
+       info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0;
+       info.align_offset = shared_align_offset(last_mmap, pgoff);
++      info.threadstack_offset = offset;
+       addr = vm_unmapped_area(&info);
  
- static unsigned long get_shared_area(struct file *filp, unsigned long addr,
--              unsigned long len, unsigned long pgoff)
-+              unsigned long len, unsigned long pgoff, unsigned long flags)
- {
+ found_addr:
+@@ -143,6 +149,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+       unsigned long addr = addr0;
+       int do_color_align, last_mmap;
        struct vm_unmapped_area_info info;
 +      unsigned long offset = gr_rand_threadstack_offset(current->mm, filp, flags);
  
-       info.flags = 0;
-       info.length = len;
-@@ -79,6 +83,7 @@ static unsigned long get_shared_area(struct file *filp, unsigned long addr,
-       info.high_limit = TASK_SIZE;
-       info.align_mask = PAGE_MASK & (SHMLBA - 1);
-       info.align_offset = shared_align_offset(filp, pgoff);
-+      info.threadstack_offset = offset;
-       return vm_unmapped_area(&info);
- }
-@@ -93,13 +98,20 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
-                       return -EINVAL;
-               return addr;
+ #ifdef CONFIG_64BIT
+       /* This should only ever run for 32-bit processes.  */
+@@ -167,6 +174,10 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
        }
--      if (!addr)
-+      if (!addr) {
-               addr = TASK_UNMAPPED_BASE;
  
+       /* requesting a specific address */
 +#ifdef CONFIG_PAX_RANDMMAP
-+              if (current->mm->pax_flags & MF_PAX_RANDMMAP)
-+                      addr += current->mm->delta_mmap;
++      if (!(mm->pax_flags & MF_PAX_RANDMMAP))
 +#endif
 +
+       if (addr) {
+               if (do_color_align && last_mmap)
+                       addr = COLOR_ALIGN(addr, last_mmap, pgoff);
+@@ -184,6 +195,7 @@ arch_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+       info.high_limit = mm->mmap_base;
+       info.align_mask = last_mmap ? (PAGE_MASK & (SHMLBA - 1)) : 0;
+       info.align_offset = shared_align_offset(last_mmap, pgoff);
++      info.threadstack_offset = offset;
+       addr = vm_unmapped_area(&info);
+       if (!(addr & ~PAGE_MASK))
+               goto found_addr;
+@@ -249,6 +261,13 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
+       mm->mmap_legacy_base = mmap_legacy_base();
+       mm->mmap_base = mmap_upper_limit();
++#ifdef CONFIG_PAX_RANDMMAP
++      if (mm->pax_flags & MF_PAX_RANDMMAP) {
++              mm->mmap_legacy_base += mm->delta_mmap;
++              mm->mmap_base -= mm->delta_mmap + mm->delta_stack;
 +      }
++#endif
 +
-       if (filp || (flags & MAP_SHARED))
--              addr = get_shared_area(filp, addr, len, pgoff);
-+              addr = get_shared_area(filp, addr, len, pgoff, flags);
-       else
--              addr = get_unshared_area(addr, len);
-+              addr = get_unshared_area(addr, len, flags);
-       return addr;
- }
+       if (mmap_is_legacy()) {
+               mm->mmap_base = mm->mmap_legacy_base;
+               mm->get_unmapped_area = arch_get_unmapped_area;
 diff --git a/arch/parisc/kernel/traps.c b/arch/parisc/kernel/traps.c
 index 1cd1d0c..44ec918 100644
 --- a/arch/parisc/kernel/traps.c
@@ -7557,10 +7852,10 @@ index 9d08c71..e2b4d20 100644
        /*
         * If for any reason at all we couldn't handle the fault, make
 diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
-index b44b52c..4cd253c 100644
+index 957bf34..3430cc8 100644
 --- a/arch/powerpc/Kconfig
 +++ b/arch/powerpc/Kconfig
-@@ -382,6 +382,7 @@ config ARCH_ENABLE_MEMORY_HOTREMOVE
+@@ -393,6 +393,7 @@ config PPC64_SUPPORTS_MEMORY_FAILURE
  config KEXEC
        bool "kexec system call"
        depends on (PPC_BOOK3S || FSL_BOOKE || (44x && !SMP))
@@ -7590,7 +7885,7 @@ index e3b1d41..8e81edf 100644
  
  #endif /* __KERNEL__ */
 diff --git a/arch/powerpc/include/asm/cache.h b/arch/powerpc/include/asm/cache.h
-index 9e495c9..b6878e5 100644
+index ed0afc1..0332825 100644
 --- a/arch/powerpc/include/asm/cache.h
 +++ b/arch/powerpc/include/asm/cache.h
 @@ -3,6 +3,7 @@
@@ -7672,6 +7967,62 @@ index 5acabbd..7ea14fa 100644
  
  #endif        /* __KERNEL__ */
  #endif        /* _ASM_POWERPC_KMAP_TYPES_H */
+diff --git a/arch/powerpc/include/asm/local.h b/arch/powerpc/include/asm/local.h
+index b8da913..60b608a 100644
+--- a/arch/powerpc/include/asm/local.h
++++ b/arch/powerpc/include/asm/local.h
+@@ -9,15 +9,26 @@ typedef struct
+       atomic_long_t a;
+ } local_t;
++typedef struct
++{
++      atomic_long_unchecked_t a;
++} local_unchecked_t;
++
+ #define LOCAL_INIT(i) { ATOMIC_LONG_INIT(i) }
+ #define local_read(l) atomic_long_read(&(l)->a)
++#define local_read_unchecked(l)       atomic_long_read_unchecked(&(l)->a)
+ #define local_set(l,i)        atomic_long_set(&(l)->a, (i))
++#define local_set_unchecked(l,i)      atomic_long_set_unchecked(&(l)->a, (i))
+ #define local_add(i,l)        atomic_long_add((i),(&(l)->a))
++#define local_add_unchecked(i,l)      atomic_long_add_unchecked((i),(&(l)->a))
+ #define local_sub(i,l)        atomic_long_sub((i),(&(l)->a))
++#define local_sub_unchecked(i,l)      atomic_long_sub_unchecked((i),(&(l)->a))
+ #define local_inc(l)  atomic_long_inc(&(l)->a)
++#define local_inc_unchecked(l)        atomic_long_inc_unchecked(&(l)->a)
+ #define local_dec(l)  atomic_long_dec(&(l)->a)
++#define local_dec_unchecked(l)        atomic_long_dec_unchecked(&(l)->a)
+ static __inline__ long local_add_return(long a, local_t *l)
+ {
+@@ -35,6 +46,7 @@ static __inline__ long local_add_return(long a, local_t *l)
+       return t;
+ }
++#define local_add_return_unchecked(i, l) atomic_long_add_return_unchecked((i), (&(l)->a))
+ #define local_add_negative(a, l)      (local_add_return((a), (l)) < 0)
+@@ -54,6 +66,7 @@ static __inline__ long local_sub_return(long a, local_t *l)
+       return t;
+ }
++#define local_sub_return_unchecked(i, l) atomic_long_sub_return_unchecked((i), (&(l)->a))
+ static __inline__ long local_inc_return(local_t *l)
+ {
+@@ -101,6 +114,8 @@ static __inline__ long local_dec_return(local_t *l)
+ #define local_cmpxchg(l, o, n) \
+       (cmpxchg_local(&((l)->a.counter), (o), (n)))
++#define local_cmpxchg_unchecked(l, o, n) \
++      (cmpxchg_local(&((l)->a.counter), (o), (n)))
+ #define local_xchg(l, n) (xchg_local(&((l)->a.counter), (n)))
+ /**
 diff --git a/arch/powerpc/include/asm/mman.h b/arch/powerpc/include/asm/mman.h
 index 8565c25..2865190 100644
 --- a/arch/powerpc/include/asm/mman.h
@@ -7769,7 +8120,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
-index 7d6eacf..14c0240 100644
+index 3ebb188..e17dddf 100644
 --- a/arch/powerpc/include/asm/pgtable.h
 +++ b/arch/powerpc/include/asm/pgtable.h
 @@ -2,6 +2,7 @@
@@ -7778,8 +8129,8 @@ index 7d6eacf..14c0240 100644
  
 +#include <linux/const.h>
  #ifndef __ASSEMBLY__
+ #include <linux/mmdebug.h>
  #include <asm/processor.h>            /* For TASK_SIZE */
- #include <asm/mmu.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
@@ -7793,10 +8144,10 @@ 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
-index fa8388e..f985549 100644
+index 90c06ec..3517221 100644
 --- a/arch/powerpc/include/asm/reg.h
 +++ b/arch/powerpc/include/asm/reg.h
-@@ -239,6 +239,7 @@
+@@ -248,6 +248,7 @@
  #define SPRN_DBCR     0x136   /* e300 Data Breakpoint Control Reg */
  #define SPRN_DSISR    0x012   /* Data Storage Interrupt Status Register */
  #define   DSISR_NOHPTE                0x40000000      /* no translation found */
@@ -7818,28 +8169,19 @@ index 084e080..9415a3d 100644
  extern void smp_send_debugger_break(void);
  extern void start_secondary_resume(void);
 diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
-index 9854c56..7517190 100644
+index b034ecd..af7e31f 100644
 --- a/arch/powerpc/include/asm/thread_info.h
 +++ b/arch/powerpc/include/asm/thread_info.h
-@@ -91,7 +91,6 @@ static inline struct thread_info *current_thread_info(void)
- #define TIF_POLLING_NRFLAG    3       /* true if poll_idle() is polling
-                                          TIF_NEED_RESCHED */
- #define TIF_32BIT             4       /* 32 bit binary */
--#define TIF_PERFMON_WORK      5       /* work for pfm_handle_work() */
- #define TIF_PERFMON_CTXSW     6       /* perfmon needs ctxsw calls */
- #define TIF_SYSCALL_AUDIT     7       /* syscall auditing active */
- #define TIF_SINGLESTEP                8       /* singlestepping active */
-@@ -108,6 +107,9 @@ static inline struct thread_info *current_thread_info(void)
+@@ -107,6 +107,8 @@ static inline struct thread_info *current_thread_info(void)
  #if defined(CONFIG_PPC64)
  #define TIF_ELF2ABI           18      /* function descriptors must die! */
  #endif
-+#define TIF_PERFMON_WORK      19      /* work for pfm_handle_work() */
 +/* mask must be expressable within 16 bits to satisfy 'andi' instruction reqs */
-+#define TIF_GRSEC_SETXID      5       /* update credentials on syscall entry/exit */
++#define TIF_GRSEC_SETXID      6       /* update credentials on syscall entry/exit */
  
  /* as above, but as bit values */
  #define _TIF_SYSCALL_TRACE    (1<<TIF_SYSCALL_TRACE)
-@@ -127,9 +129,10 @@ static inline struct thread_info *current_thread_info(void)
+@@ -125,9 +127,10 @@ static inline struct thread_info *current_thread_info(void)
  #define _TIF_SYSCALL_TRACEPOINT       (1<<TIF_SYSCALL_TRACEPOINT)
  #define _TIF_EMULATE_STACK_STORE      (1<<TIF_EMULATE_STACK_STORE)
  #define _TIF_NOHZ             (1<<TIF_NOHZ)
@@ -7850,12 +8192,20 @@ index 9854c56..7517190 100644
 +                               _TIF_NOHZ | _TIF_GRSEC_SETXID)
  
  #define _TIF_USER_WORK_MASK   (_TIF_SIGPENDING | _TIF_NEED_RESCHED | \
-                                _TIF_NOTIFY_RESUME | _TIF_UPROBE)
+                                _TIF_NOTIFY_RESUME | _TIF_UPROBE | \
 diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h
-index 9485b43..4718d50 100644
+index 9485b43..3bd3c16 100644
 --- a/arch/powerpc/include/asm/uaccess.h
 +++ b/arch/powerpc/include/asm/uaccess.h
-@@ -318,52 +318,6 @@ do {                                                              \
+@@ -58,6 +58,7 @@
+ #endif
++#define access_ok_noprefault(type, addr, size) access_ok((type), (addr), (size))
+ #define access_ok(type, addr, size)           \
+       (__chk_user_ptr(addr),                  \
+        __access_ok((__force unsigned long)(addr), (size), get_fs()))
+@@ -318,52 +319,6 @@ do {                                                              \
  extern unsigned long __copy_tofrom_user(void __user *to,
                const void __user *from, unsigned long size);
  
@@ -7908,7 +8258,7 @@ index 9485b43..4718d50 100644
  static inline unsigned long __copy_from_user_inatomic(void *to,
                const void __user *from, unsigned long n)
  {
-@@ -387,6 +341,10 @@ static inline unsigned long __copy_from_user_inatomic(void *to,
+@@ -387,6 +342,10 @@ static inline unsigned long __copy_from_user_inatomic(void *to,
                if (ret == 0)
                        return 0;
        }
@@ -7919,7 +8269,7 @@ index 9485b43..4718d50 100644
        return __copy_tofrom_user((__force void __user *)to, from, n);
  }
  
-@@ -413,6 +371,10 @@ static inline unsigned long __copy_to_user_inatomic(void __user *to,
+@@ -413,6 +372,10 @@ static inline unsigned long __copy_to_user_inatomic(void __user *to,
                if (ret == 0)
                        return 0;
        }
@@ -7930,7 +8280,7 @@ index 9485b43..4718d50 100644
        return __copy_tofrom_user(to, (__force const void __user *)from, n);
  }
  
-@@ -430,6 +392,92 @@ static inline unsigned long __copy_to_user(void __user *to,
+@@ -430,6 +393,92 @@ static inline unsigned long __copy_to_user(void __user *to,
        return __copy_to_user_inatomic(to, from, size);
  }
  
@@ -8023,11 +8373,24 @@ index 9485b43..4718d50 100644
  extern unsigned long __clear_user(void __user *addr, unsigned long size);
  
  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 fcc9a89..07be2bb 100644
+--- a/arch/powerpc/kernel/Makefile
++++ b/arch/powerpc/kernel/Makefile
+@@ -26,6 +26,8 @@ CFLAGS_REMOVE_ftrace.o = -pg -mno-sched-epilog
+ CFLAGS_REMOVE_time.o = -pg -mno-sched-epilog
+ endif
++CFLAGS_REMOVE_prom_init.o += $(LATENT_ENTROPY_PLUGIN_CFLAGS)
++
+ obj-y                         := cputable.o ptrace.o syscalls.o \
+                                  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 e775156..af2d1c0 100644
+index 063b65d..7a26e9d 100644
 --- a/arch/powerpc/kernel/exceptions-64e.S
 +++ b/arch/powerpc/kernel/exceptions-64e.S
-@@ -759,6 +759,7 @@ storage_fault_common:
+@@ -771,6 +771,7 @@ storage_fault_common:
        std     r14,_DAR(r1)
        std     r15,_DSISR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
@@ -8035,7 +8398,7 @@ index e775156..af2d1c0 100644
        mr      r4,r14
        mr      r5,r15
        ld      r14,PACA_EXGEN+EX_R14(r13)
-@@ -767,8 +768,7 @@ storage_fault_common:
+@@ -779,8 +780,7 @@ storage_fault_common:
        cmpdi   r3,0
        bne-    1f
        b       .ret_from_except_lite
@@ -8046,10 +8409,10 @@ index e775156..af2d1c0 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
-index 9f905e4..1d6b3d2 100644
+index 38d5073..f00af8d 100644
 --- a/arch/powerpc/kernel/exceptions-64s.S
 +++ b/arch/powerpc/kernel/exceptions-64s.S
-@@ -1390,10 +1390,10 @@ handle_page_fault:
+@@ -1584,10 +1584,10 @@ handle_page_fault:
  11:   ld      r4,_DAR(r1)
        ld      r5,_DSISR(r1)
        addi    r3,r1,STACK_FRAME_OVERHEAD
@@ -8104,10 +8467,10 @@ index 6cff040..74ac5d1 100644
                            sechdrs, module);
  #endif
 diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
-index 4a96556..dd95f6c 100644
+index af064d2..ce56147 100644
 --- a/arch/powerpc/kernel/process.c
 +++ b/arch/powerpc/kernel/process.c
-@@ -888,8 +888,8 @@ void show_regs(struct pt_regs * regs)
+@@ -1009,8 +1009,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
         */
@@ -8118,7 +8481,7 @@ index 4a96556..dd95f6c 100644
  #endif
        show_stack(current, (unsigned long *) regs->gpr[1]);
        if (!user_mode(regs))
-@@ -1376,10 +1376,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1532,10 +1532,10 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
                newsp = stack[0];
                ip = stack[STACK_FRAME_LR_SAVE];
                if (!firstframe || ip != lr) {
@@ -8131,7 +8494,7 @@ index 4a96556..dd95f6c 100644
                                       (void *)current->ret_stack[curr_frame].ret);
                                curr_frame--;
                        }
-@@ -1399,7 +1399,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack)
+@@ -1555,7 +1555,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;
@@ -8140,7 +8503,7 @@ index 4a96556..dd95f6c 100644
                               regs->trap, (void *)regs->nip, (void *)lr);
                        firstframe = 1;
                }
-@@ -1435,58 +1435,3 @@ void notrace __ppc64_runlatch_off(void)
+@@ -1591,58 +1591,3 @@ void notrace __ppc64_runlatch_off(void)
        mtspr(SPRN_CTRLT, ctrl);
  }
  #endif /* CONFIG_PPC64 */
@@ -8239,10 +8602,10 @@ index 2e3d2bf..35df241 100644
  
        if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT)))
 diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
-index 68027bf..b26fd31 100644
+index a67e00a..f71d8c7 100644
 --- a/arch/powerpc/kernel/signal_32.c
 +++ b/arch/powerpc/kernel/signal_32.c
-@@ -1004,7 +1004,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
+@@ -1011,7 +1011,7 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
        /* Save user registers on the stack */
        frame = &rt_sf->uc.uc_mcontext;
        addr = frame;
@@ -8252,11 +8615,11 @@ index 68027bf..b26fd31 100644
                tramp = current->mm->context.vdso_base + vdso32_rt_sigtramp;
        } else {
 diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c
-index 4299104..29e2c51 100644
+index 8d253c2..405b337 100644
 --- a/arch/powerpc/kernel/signal_64.c
 +++ b/arch/powerpc/kernel/signal_64.c
 @@ -758,7 +758,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info,
- #endif
+       current->thread.fp_state.fpscr = 0;
  
        /* Set up to return from userspace. */
 -      if (vdso64_rt_sigtramp && current->mm->context.vdso_base) {
@@ -8265,7 +8628,7 @@ index 4299104..29e2c51 100644
        } else {
                err |= setup_trampoline(__NR_rt_sigreturn, &frame->tramp[0]);
 diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
-index 907a472..4ba206f 100644
+index 33cd7a0..d615344 100644
 --- a/arch/powerpc/kernel/traps.c
 +++ b/arch/powerpc/kernel/traps.c
 @@ -142,6 +142,8 @@ static unsigned __kprobes long oops_begin(struct pt_regs *regs)
@@ -8317,6 +8680,19 @@ index 094e45c..d82b848 100644
        if (IS_ERR_VALUE(vdso_base)) {
                rc = vdso_base;
                goto fail_mmapsem;
+diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c
+index 3cf541a..ab2d825 100644
+--- a/arch/powerpc/kvm/powerpc.c
++++ b/arch/powerpc/kvm/powerpc.c
+@@ -1153,7 +1153,7 @@ void kvmppc_init_lpid(unsigned long nr_lpids_param)
+ }
+ EXPORT_SYMBOL_GPL(kvmppc_init_lpid);
+-int kvm_arch_init(void *opaque)
++int kvm_arch_init(const void *opaque)
+ {
+       return 0;
+ }
 diff --git a/arch/powerpc/lib/usercopy_64.c b/arch/powerpc/lib/usercopy_64.c
 index 5eea6f3..5d10396 100644
 --- a/arch/powerpc/lib/usercopy_64.c
@@ -8453,10 +8829,15 @@ index 51ab9e7..7d3c78b 100644
                goto bail;
        }
 diff --git a/arch/powerpc/mm/mmap.c b/arch/powerpc/mm/mmap.c
-index cb8bdbe..d770680 100644
+index cb8bdbe..cde4bc7 100644
 --- a/arch/powerpc/mm/mmap.c
 +++ b/arch/powerpc/mm/mmap.c
-@@ -57,6 +57,10 @@ static unsigned long mmap_rnd(void)
+@@ -53,10 +53,14 @@ static inline int mmap_is_legacy(void)
+       return sysctl_legacy_va_layout;
+ }
+-static unsigned long mmap_rnd(void)
++static unsigned long mmap_rnd(struct mm_struct *mm)
  {
        unsigned long rnd = 0;
  
@@ -8467,6 +8848,24 @@ index cb8bdbe..d770680 100644
        if (current->flags & PF_RANDOMIZE) {
                /* 8MB for 32bit, 1GB for 64bit */
                if (is_32bit_task())
+@@ -67,7 +71,7 @@ static unsigned long mmap_rnd(void)
+       return rnd << PAGE_SHIFT;
+ }
+-static inline unsigned long mmap_base(void)
++static inline unsigned long mmap_base(struct mm_struct *mm)
+ {
+       unsigned long gap = rlimit(RLIMIT_STACK);
+@@ -76,7 +80,7 @@ static inline unsigned long mmap_base(void)
+       else if (gap > MAX_GAP)
+               gap = MAX_GAP;
+-      return PAGE_ALIGN(TASK_SIZE - gap - mmap_rnd());
++      return PAGE_ALIGN(TASK_SIZE - gap - mmap_rnd(mm));
+ }
+ /*
 @@ -91,9 +95,21 @@ void arch_pick_mmap_layout(struct mm_struct *mm)
         */
        if (mmap_is_legacy()) {
@@ -8479,7 +8878,8 @@ index cb8bdbe..d770680 100644
 +
                mm->get_unmapped_area = arch_get_unmapped_area;
        } else {
-               mm->mmap_base = mmap_base();
+-              mm->mmap_base = mmap_base();
++              mm->mmap_base = mmap_base(mm);
 +
 +#ifdef CONFIG_PAX_RANDMMAP
 +              if (mm->pax_flags & MF_PAX_RANDMMAP)
@@ -8490,7 +8890,7 @@ index cb8bdbe..d770680 100644
        }
  }
 diff --git a/arch/powerpc/mm/slice.c b/arch/powerpc/mm/slice.c
-index 7ce9cf3..a964087 100644
+index b0c75cc..ef7fb93 100644
 --- 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,
@@ -8517,7 +8917,7 @@ index 7ce9cf3..a964087 100644
                if (!slice_scan_available(addr, available, 1, &addr))
 @@ -410,6 +416,11 @@ unsigned long slice_get_unmapped_area(unsigned long addr, unsigned long len,
        if (fixed && addr > (mm->task_size - len))
-               return -EINVAL;
+               return -ENOMEM;
  
 +#ifdef CONFIG_PAX_RANDMMAP
 +      if (!fixed && (mm->pax_flags & MF_PAX_RANDMMAP))
@@ -8527,6 +8927,21 @@ index 7ce9cf3..a964087 100644
        /* If hint, make sure it matches our alignment restrictions */
        if (!fixed && addr) {
                addr = _ALIGN_UP(addr, 1ul << pshift);
+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
++++ b/arch/powerpc/platforms/cell/celleb_scc_pciex.c
+@@ -400,8 +400,8 @@ static int scc_pciex_write_config(struct pci_bus *bus, unsigned int devfn,
+ }
+ static struct pci_ops scc_pciex_pci_ops = {
+-      scc_pciex_read_config,
+-      scc_pciex_write_config,
++      .read = scc_pciex_read_config,
++      .write = scc_pciex_write_config,
+ };
+ static void pciex_clear_intr_all(unsigned int __iomem *base)
 diff --git a/arch/powerpc/platforms/cell/spufs/file.c b/arch/powerpc/platforms/cell/spufs/file.c
 index 9098692..3d54cd1 100644
 --- a/arch/powerpc/platforms/cell/spufs/file.c
@@ -8624,10 +9039,18 @@ index c4a93d6..4d2a9b4 100644
  
  #endif /* __ASM_EXEC_H */
 diff --git a/arch/s390/include/asm/uaccess.h b/arch/s390/include/asm/uaccess.h
-index 79330af..a3a7b06 100644
+index 79330af..254cf37 100644
 --- a/arch/s390/include/asm/uaccess.h
 +++ b/arch/s390/include/asm/uaccess.h
-@@ -245,6 +245,10 @@ static inline unsigned long __must_check
+@@ -59,6 +59,7 @@ static inline int __range_ok(unsigned long addr, unsigned long size)
+       __range_ok((unsigned long)(addr), (size));      \
+ })
++#define access_ok_noprefault(type, addr, size) access_ok((type), (addr), (size))
+ #define access_ok(type, addr, size) __access_ok(addr, size)
+ /*
+@@ -245,6 +246,10 @@ static inline unsigned long __must_check
  copy_to_user(void __user *to, const void *from, unsigned long n)
  {
        might_fault();
@@ -8638,7 +9061,7 @@ index 79330af..a3a7b06 100644
        return __copy_to_user(to, from, n);
  }
  
-@@ -268,6 +272,9 @@ copy_to_user(void __user *to, const void *from, unsigned long n)
+@@ -268,6 +273,9 @@ copy_to_user(void __user *to, const void *from, unsigned long n)
  static inline unsigned long __must_check
  __copy_from_user(void *to, const void __user *from, unsigned long n)
  {
@@ -8648,7 +9071,7 @@ index 79330af..a3a7b06 100644
        return uaccess.copy_from_user(n, from, to);
  }
  
-@@ -296,10 +303,14 @@ __compiletime_warning("copy_from_user() buffer size is not provably correct")
+@@ -296,10 +304,14 @@ __compiletime_warning("copy_from_user() buffer size is not provably correct")
  static inline unsigned long __must_check
  copy_from_user(void *to, const void __user *from, unsigned long n)
  {
@@ -8741,10 +9164,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
-index 7ed0d4e..1dfc145 100644
+index dd14532..1dfc145 100644
 --- a/arch/s390/kernel/process.c
 +++ b/arch/s390/kernel/process.c
-@@ -242,39 +242,3 @@ unsigned long get_wchan(struct task_struct *p)
+@@ -242,37 +242,3 @@ unsigned long get_wchan(struct task_struct *p)
        }
        return 0;
  }
@@ -8767,22 +9190,20 @@ index 7ed0d4e..1dfc145 100644
 -
 -unsigned long arch_randomize_brk(struct mm_struct *mm)
 -{
--      unsigned long ret = PAGE_ALIGN(mm->brk + brk_rnd());
+-      unsigned long ret;
 -
--      if (ret < mm->brk)
--              return mm->brk;
--      return ret;
+-      ret = PAGE_ALIGN(mm->brk + brk_rnd());
+-      return (ret > mm->brk) ? ret : mm->brk;
 -}
 -
 -unsigned long randomize_et_dyn(unsigned long base)
 -{
--      unsigned long ret = PAGE_ALIGN(base + brk_rnd());
+-      unsigned long ret;
 -
 -      if (!(current->flags & PF_RANDOMIZE))
 -              return base;
--      if (ret < base)
--              return base;
--      return ret;
+-      ret = PAGE_ALIGN(base + brk_rnd());
+-      return (ret > base) ? ret : base;
 -}
 diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
 index 9b436c2..54fbf0a 100644
@@ -9239,6 +9660,19 @@ index bcfe063..b333142 100644
  
  static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long addr)
  {
+diff --git a/arch/sparc/include/asm/pgtable.h b/arch/sparc/include/asm/pgtable.h
+index 59ba6f6..4518128 100644
+--- a/arch/sparc/include/asm/pgtable.h
++++ b/arch/sparc/include/asm/pgtable.h
+@@ -5,4 +5,8 @@
+ #else
+ #include <asm/pgtable_32.h>
+ #endif
++
++#define ktla_ktva(addr)               (addr)
++#define ktva_ktla(addr)               (addr)
++
+ #endif
 diff --git a/arch/sparc/include/asm/pgtable_32.h b/arch/sparc/include/asm/pgtable_32.h
 index 502f632..da1917f 100644
 --- a/arch/sparc/include/asm/pgtable_32.h
@@ -9581,10 +10015,10 @@ index d15cc17..d0ae796 100644
  extra-y     := head_$(BITS).o
  
 diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c
-index fdd819d..5af08c8 100644
+index 510baec..9ff2607 100644
 --- a/arch/sparc/kernel/process_32.c
 +++ b/arch/sparc/kernel/process_32.c
-@@ -116,14 +116,14 @@ void show_regs(struct pt_regs *r)
+@@ -115,14 +115,14 @@ void show_regs(struct pt_regs *r)
  
          printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx    %s\n",
               r->psr, r->pc, r->npc, r->y, print_tainted());
@@ -9601,7 +10035,7 @@ index fdd819d..5af08c8 100644
  
        printk("%%L: %08lx %08lx  %08lx %08lx  %08lx %08lx  %08lx %08lx\n",
               rw->locals[0], rw->locals[1], rw->locals[2], rw->locals[3],
-@@ -160,7 +160,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
+@@ -159,7 +159,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp)
                rw = (struct reg_window32 *) fp;
                pc = rw->ins[7];
                printk("[%08lx : ", pc);
@@ -9611,10 +10045,10 @@ index fdd819d..5af08c8 100644
        } while (++count < 16);
        printk("\n");
 diff --git a/arch/sparc/kernel/process_64.c b/arch/sparc/kernel/process_64.c
-index 32a280e..84fc6a9 100644
+index d7b4967..2edf827 100644
 --- a/arch/sparc/kernel/process_64.c
 +++ b/arch/sparc/kernel/process_64.c
-@@ -159,7 +159,7 @@ static void show_regwindow(struct pt_regs *regs)
+@@ -161,7 +161,7 @@ static void show_regwindow(struct pt_regs *regs)
        printk("i4: %016lx i5: %016lx i6: %016lx i7: %016lx\n",
               rwk->ins[4], rwk->ins[5], rwk->ins[6], rwk->ins[7]);
        if (regs->tstate & TSTATE_PRIV)
@@ -9623,7 +10057,7 @@ index 32a280e..84fc6a9 100644
  }
  
  void show_regs(struct pt_regs *regs)
-@@ -168,7 +168,7 @@ void show_regs(struct pt_regs *regs)
+@@ -170,7 +170,7 @@ void show_regs(struct pt_regs *regs)
  
        printk("TSTATE: %016lx TPC: %016lx TNPC: %016lx Y: %08x    %s\n", regs->tstate,
               regs->tpc, regs->tnpc, regs->y, print_tainted());
@@ -9632,7 +10066,7 @@ index 32a280e..84fc6a9 100644
        printk("g0: %016lx g1: %016lx g2: %016lx g3: %016lx\n",
               regs->u_regs[0], regs->u_regs[1], regs->u_regs[2],
               regs->u_regs[3]);
-@@ -181,7 +181,7 @@ void show_regs(struct pt_regs *regs)
+@@ -183,7 +183,7 @@ void show_regs(struct pt_regs *regs)
        printk("o4: %016lx o5: %016lx sp: %016lx ret_pc: %016lx\n",
               regs->u_regs[12], regs->u_regs[13], regs->u_regs[14],
               regs->u_regs[15]);
@@ -9641,7 +10075,7 @@ index 32a280e..84fc6a9 100644
        show_regwindow(regs);
        show_stack(current, (unsigned long *) regs->u_regs[UREG_FP]);
  }
-@@ -270,7 +270,7 @@ void arch_trigger_all_cpu_backtrace(void)
+@@ -272,7 +272,7 @@ void arch_trigger_all_cpu_backtrace(void)
                       ((tp && tp->task) ? tp->task->pid : -1));
  
                if (gp->tstate & TSTATE_PRIV) {
@@ -9940,7 +10374,7 @@ index beb0b5a..5a153f7 100644
        }
  }
 diff --git a/arch/sparc/kernel/syscalls.S b/arch/sparc/kernel/syscalls.S
-index 87729ff..192f9d8 100644
+index 33a17e7..d87fb1f 100644
 --- a/arch/sparc/kernel/syscalls.S
 +++ b/arch/sparc/kernel/syscalls.S
 @@ -52,7 +52,7 @@ sys32_rt_sigreturn:
@@ -9961,7 +10395,7 @@ index 87729ff..192f9d8 100644
        bne,pn  %icc, linux_syscall_trace32             ! CTI
         mov    %i0, %l5                                ! IEU1
  5:    call    %l7                                     ! CTI   Group brk forced
-@@ -207,7 +207,7 @@ linux_sparc_syscall:
+@@ -208,7 +208,7 @@ linux_sparc_syscall:
  
        mov     %i3, %o3                                ! IEU1
        mov     %i4, %o4                                ! IEU0  Group
@@ -11316,10 +11750,10 @@ index 69bb818..6ca35c8 100644
         * load/store/atomic was a write or not, it only says that there
         * was no match.  So in such a case we (carefully) read the
 diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
-index 3096317..a7b7654 100644
+index 9bd9ce8..dc84852 100644
 --- a/arch/sparc/mm/hugetlbpage.c
 +++ b/arch/sparc/mm/hugetlbpage.c
-@@ -26,7 +26,8 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp,
+@@ -25,8 +25,10 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp,
                                                        unsigned long addr,
                                                        unsigned long len,
                                                        unsigned long pgoff,
@@ -11327,9 +11761,11 @@ index 3096317..a7b7654 100644
 +                                                      unsigned long flags,
 +                                                      unsigned long offset)
  {
++      struct mm_struct *mm = current->mm;
        unsigned long task_size = TASK_SIZE;
        struct vm_unmapped_area_info info;
-@@ -36,15 +37,22 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp,
+@@ -35,15 +37,22 @@ static unsigned long hugetlb_get_unmapped_area_bottomup(struct file *filp,
  
        info.flags = 0;
        info.length = len;
@@ -11353,7 +11789,7 @@ index 3096317..a7b7654 100644
                info.high_limit = task_size;
                addr = vm_unmapped_area(&info);
        }
-@@ -56,7 +64,8 @@ static unsigned long
+@@ -55,7 +64,8 @@ static unsigned long
  hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
                                  const unsigned long len,
                                  const unsigned long pgoff,
@@ -11363,7 +11799,7 @@ index 3096317..a7b7654 100644
  {
        struct mm_struct *mm = current->mm;
        unsigned long addr = addr0;
-@@ -71,6 +80,7 @@ hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -70,6 +80,7 @@ hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
        info.high_limit = mm->mmap_base;
        info.align_mask = PAGE_MASK & ~HPAGE_MASK;
        info.align_offset = 0;
@@ -11371,7 +11807,7 @@ index 3096317..a7b7654 100644
        addr = vm_unmapped_area(&info);
  
        /*
-@@ -83,6 +93,12 @@ hugetlb_get_unmapped_area_topdown(struct file *filp, const unsigned long addr0,
+@@ -82,6 +93,12 @@ hugetlb_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;
@@ -11384,7 +11820,7 @@ index 3096317..a7b7654 100644
                info.high_limit = STACK_TOP32;
                addr = vm_unmapped_area(&info);
        }
-@@ -97,6 +113,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
+@@ -96,6 +113,7 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
        struct mm_struct *mm = current->mm;
        struct vm_area_struct *vma;
        unsigned long task_size = TASK_SIZE;
@@ -11392,7 +11828,7 @@ index 3096317..a7b7654 100644
  
        if (test_thread_flag(TIF_32BIT))
                task_size = STACK_TOP32;
-@@ -112,19 +129,22 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
+@@ -111,19 +129,22 @@ hugetlb_get_unmapped_area(struct file *file, unsigned long addr,
                return addr;
        }
  
@@ -11420,7 +11856,7 @@ index 3096317..a7b7654 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
-index 5322e53..f820c5e 100644
+index eafbc65..5a8070d 100644
 --- a/arch/sparc/mm/init_64.c
 +++ b/arch/sparc/mm/init_64.c
 @@ -188,9 +188,9 @@ unsigned long sparc64_kern_sec_context __read_mostly;
@@ -11662,10 +12098,19 @@ 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
-index 0952ecd..75e0e8a 100644
+index 0af5250..59f9597 100644
 --- a/arch/x86/Kconfig
 +++ b/arch/x86/Kconfig
-@@ -249,7 +249,7 @@ config X86_HT
+@@ -126,7 +126,7 @@ config X86
+       select RTC_LIB
+       select HAVE_DEBUG_STACKOVERFLOW
+       select HAVE_IRQ_EXIT_ON_IRQ_STACK if X86_64
+-      select HAVE_CC_STACKPROTECTOR
++      select HAVE_CC_STACKPROTECTOR if X86_64 || !PAX_MEMORY_UDEREF
+ config INSTRUCTION_DECODER
+       def_bool y
+@@ -251,7 +251,7 @@ config X86_HT
  
  config X86_32_LAZY_GS
        def_bool y
@@ -11674,15 +12119,15 @@ index 0952ecd..75e0e8a 100644
  
  config ARCH_HWEIGHT_CFLAGS
        string
-@@ -1104,6 +1104,7 @@ config MICROCODE_EARLY
+@@ -589,6 +589,7 @@ config SCHED_OMIT_FRAME_POINTER
  
- config X86_MSR
-       tristate "/dev/cpu/*/msr - Model-specific register support"
-+      depends on !GRKERNSEC_KMEM
+ menuconfig HYPERVISOR_GUEST
+       bool "Linux guest support"
++      depends on !GRKERNSEC_CONFIG_AUTO || GRKERNSEC_CONFIG_VIRT_GUEST || (GRKERNSEC_CONFIG_VIRT_HOST && GRKERNSEC_CONFIG_VIRT_XEN)
        ---help---
-         This device gives privileged processes access to the x86
-         Model-Specific Registers (MSRs).  It is a character device with
-@@ -1127,7 +1128,7 @@ choice
+         Say Y here to enable options for running Linux under various hyper-
+         visors. This option enables basic hypervisor detection and platform
+@@ -1111,7 +1112,7 @@ choice
  
  config NOHIGHMEM
        bool "off"
@@ -11691,7 +12136,7 @@ index 0952ecd..75e0e8a 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
-@@ -1164,7 +1165,7 @@ config NOHIGHMEM
+@@ -1148,7 +1149,7 @@ config NOHIGHMEM
  
  config HIGHMEM4G
        bool "4GB"
@@ -11700,7 +12145,7 @@ index 0952ecd..75e0e8a 100644
        ---help---
          Select this if you have a 32-bit processor and between 1 and 4
          gigabytes of physical RAM.
-@@ -1217,7 +1218,7 @@ config PAGE_OFFSET
+@@ -1201,7 +1202,7 @@ config PAGE_OFFSET
        hex
        default 0xB0000000 if VMSPLIT_3G_OPT
        default 0x80000000 if VMSPLIT_2G
@@ -11709,15 +12154,7 @@ index 0952ecd..75e0e8a 100644
        default 0x40000000 if VMSPLIT_1G
        default 0xC0000000
        depends on X86_32
-@@ -1619,6 +1620,7 @@ config SECCOMP
- config CC_STACKPROTECTOR
-       bool "Enable -fstack-protector buffer overflow detection"
-+      depends on X86_64 || !PAX_MEMORY_UDEREF
-       ---help---
-         This option turns on the -fstack-protector GCC feature. This
-         feature puts, at the beginning of functions, a canary value on
-@@ -1637,6 +1639,7 @@ source kernel/Kconfig.hz
+@@ -1605,6 +1606,7 @@ source kernel/Kconfig.hz
  
  config KEXEC
        bool "kexec system call"
@@ -11725,16 +12162,18 @@ index 0952ecd..75e0e8a 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
-@@ -1738,6 +1741,8 @@ config X86_NEED_RELOCS
+@@ -1756,7 +1758,9 @@ config X86_NEED_RELOCS
  config PHYSICAL_ALIGN
        hex "Alignment value to which kernel should be aligned"
-       default "0x1000000"
+-      default "0x200000"
++      default "0x1000000"
 +      range 0x200000 0x1000000 if PAX_KERNEXEC && X86_PAE
 +      range 0x400000 0x1000000 if PAX_KERNEXEC && !X86_PAE
        range 0x2000 0x1000000 if X86_32
        range 0x200000 0x1000000 if X86_64
        ---help---
-@@ -1817,9 +1822,10 @@ config DEBUG_HOTPLUG_CPU0
+@@ -1836,9 +1840,10 @@ config DEBUG_HOTPLUG_CPU0
          If unsure, say N.
  
  config COMPAT_VDSO
@@ -11747,7 +12186,7 @@ index 0952ecd..75e0e8a 100644
          Map the 32-bit VDSO to the predictable old-style address too.
  
 diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu
-index c026cca..14657ae 100644
+index f3aaf23..a1d3c49 100644
 --- a/arch/x86/Kconfig.cpu
 +++ b/arch/x86/Kconfig.cpu
 @@ -319,7 +319,7 @@ config X86_PPRO_FENCE
@@ -11768,7 +12207,7 @@ index c026cca..14657ae 100644
  
  config X86_INTEL_USERCOPY
        def_bool y
-@@ -373,7 +373,7 @@ config X86_CMPXCHG64
+@@ -369,7 +369,7 @@ config X86_CMPXCHG64
  # generates cmov.
  config X86_CMOV
        def_bool y
@@ -11778,7 +12217,7 @@ index c026cca..14657ae 100644
  config X86_MINIMUM_CPU_FAMILY
        int
 diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
-index 0f3621e..282f24b 100644
+index 321a52c..3d51a5e 100644
 --- a/arch/x86/Kconfig.debug
 +++ b/arch/x86/Kconfig.debug
 @@ -84,7 +84,7 @@ config X86_PTDUMP
@@ -11800,10 +12239,10 @@ index 0f3621e..282f24b 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
-index 57d0215..b4373fb 100644
+index eeda43a..5a238be 100644
 --- a/arch/x86/Makefile
 +++ b/arch/x86/Makefile
-@@ -49,14 +49,12 @@ ifeq ($(CONFIG_X86_32),y)
+@@ -71,14 +71,12 @@ 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)
@@ -11819,17 +12258,17 @@ index 57d0215..b4373fb 100644
          KBUILD_AFLAGS += -m64
          KBUILD_CFLAGS += -m64
  
-@@ -89,6 +87,9 @@ else
+@@ -111,6 +109,9 @@ else
          KBUILD_CFLAGS += -maccumulate-outgoing-args
  endif
  
 +# temporary until string.h is fixed
 +KBUILD_CFLAGS += -ffreestanding
 +
+ # 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
-         ifeq ($(shell $(CONFIG_SHELL) $(cc_has_sp) $(CC) $(KBUILD_CPPFLAGS) $(biarch)),y)
-@@ -247,3 +248,12 @@ define archhelp
+@@ -267,3 +268,12 @@ define archhelp
    echo  '                  FDINITRD=file initrd for the booted kernel'
    echo  '  kvmconfig  - Enable additional options for guest kernel support'
  endef
@@ -11843,13 +12282,13 @@ index 57d0215..b4373fb 100644
 +archprepare:
 +      $(if $(LDFLAGS_BUILD_ID),,$(error $(OLD_LD)))
 diff --git a/arch/x86/boot/Makefile b/arch/x86/boot/Makefile
-index d9c1195..a26ca0d 100644
+index 878df7e..a803913 100644
 --- a/arch/x86/boot/Makefile
 +++ b/arch/x86/boot/Makefile
-@@ -65,6 +65,9 @@ KBUILD_CFLAGS        := $(USERINCLUDE) -m32 -g -Os -D_SETUP -D__KERNEL__ \
-                  $(call cc-option, -fno-unit-at-a-time)) \
-                  $(call cc-option, -fno-stack-protector) \
-                  $(call cc-option, -mpreferred-stack-boundary=2)
+@@ -52,6 +52,9 @@ $(obj)/cpustr.h: $(obj)/mkcpustr FORCE
+ # ---------------------------------------------------------------------------
+ KBUILD_CFLAGS := $(USERINCLUDE) $(REALMODE_CFLAGS) -D_SETUP
 +ifdef CONSTIFY_PLUGIN
 +KBUILD_CFLAGS += -fplugin-arg-constify_plugin-no-constify
 +endif
@@ -11879,10 +12318,10 @@ index 878e4b9..20537ab 100644
  
  #endif /* BOOT_BITOPS_H */
 diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h
-index ef72bae..353a184 100644
+index 50f8c5e..4f84fff 100644
 --- a/arch/x86/boot/boot.h
 +++ b/arch/x86/boot/boot.h
-@@ -85,7 +85,7 @@ static inline void io_delay(void)
+@@ -84,7 +84,7 @@ static inline void io_delay(void)
  static inline u16 ds(void)
  {
        u16 seg;
@@ -11891,7 +12330,7 @@ index ef72bae..353a184 100644
        return seg;
  }
  
-@@ -181,7 +181,7 @@ static inline void wrgs32(u32 v, addr_t addr)
+@@ -180,7 +180,7 @@ static inline void wrgs32(u32 v, addr_t addr)
  static inline int memcmp(const void *s1, const void *s2, size_t len)
  {
        u8 diff;
@@ -11901,7 +12340,7 @@ index ef72bae..353a184 100644
        return diff;
  }
 diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
-index c8a6792..2402765 100644
+index 0fcd913..3bb5c42 100644
 --- a/arch/x86/boot/compressed/Makefile
 +++ b/arch/x86/boot/compressed/Makefile
 @@ -16,6 +16,9 @@ KBUILD_CFLAGS += $(cflags-y)
@@ -11957,41 +12396,53 @@ index a53440e..c3dbf1e 100644
  .previous
  
 diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
-index 5d6f689..9d06730 100644
+index 9116aac..abbcdb1 100644
 --- a/arch/x86/boot/compressed/head_32.S
 +++ b/arch/x86/boot/compressed/head_32.S
-@@ -118,7 +118,7 @@ preferred_addr:
+@@ -117,10 +117,10 @@ preferred_addr:
+       addl    %eax, %ebx
        notl    %eax
        andl    %eax, %ebx
- #else
+-      cmpl    $LOAD_PHYSICAL_ADDR, %ebx
++      cmpl    $____LOAD_PHYSICAL_ADDR, %ebx
+       jge     1f
+ #endif
 -      movl    $LOAD_PHYSICAL_ADDR, %ebx
 +      movl    $____LOAD_PHYSICAL_ADDR, %ebx
- #endif
+ 1:
  
        /* Target address to relocate to for decompression */
 diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
-index c337422..2c5be72 100644
+index c5c1ae0..2e76d0e 100644
 --- a/arch/x86/boot/compressed/head_64.S
 +++ b/arch/x86/boot/compressed/head_64.S
-@@ -95,7 +95,7 @@ ENTRY(startup_32)
+@@ -94,10 +94,10 @@ ENTRY(startup_32)
+       addl    %eax, %ebx
        notl    %eax
        andl    %eax, %ebx
- #else
+-      cmpl    $LOAD_PHYSICAL_ADDR, %ebx
++      cmpl    $____LOAD_PHYSICAL_ADDR, %ebx
+       jge     1f
+ #endif
 -      movl    $LOAD_PHYSICAL_ADDR, %ebx
 +      movl    $____LOAD_PHYSICAL_ADDR, %ebx
- #endif
+ 1:
  
        /* Target address to relocate to for decompression */
-@@ -270,7 +270,7 @@ preferred_addr:
+@@ -271,10 +271,10 @@ preferred_addr:
+       addq    %rax, %rbp
        notq    %rax
        andq    %rax, %rbp
- #else
+-      cmpq    $LOAD_PHYSICAL_ADDR, %rbp
++      cmpq    $____LOAD_PHYSICAL_ADDR, %rbp
+       jge     1f
+ #endif
 -      movq    $LOAD_PHYSICAL_ADDR, %rbp
 +      movq    $____LOAD_PHYSICAL_ADDR, %rbp
- #endif
+ 1:
  
        /* Target address to relocate to for decompression */
-@@ -362,8 +362,8 @@ gdt:
+@@ -366,8 +366,8 @@ gdt:
        .long   gdt
        .word   0
        .quad   0x0000000000000000      /* NULL descriptor */
@@ -12003,10 +12454,19 @@ index c337422..2c5be72 100644
        .quad   0x0000000000000000      /* TS continued */
  gdt_end:
 diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
-index 434f077..b6b4b38 100644
+index 196eaf3..c96716d 100644
 --- a/arch/x86/boot/compressed/misc.c
 +++ b/arch/x86/boot/compressed/misc.c
-@@ -283,7 +283,7 @@ static void handle_relocations(void *output, unsigned long output_len)
+@@ -218,7 +218,7 @@ void __putstr(const char *s)
+ void *memset(void *s, int c, size_t n)
+ {
+-      int i;
++      size_t i;
+       char *ss = s;
+       for (i = 0; i < n; i++)
+@@ -277,7 +277,7 @@ static void handle_relocations(void *output, unsigned long output_len)
         * Calculate the delta between where vmlinux was linked to load
         * and where it was actually loaded.
         */
@@ -12015,7 +12475,16 @@ index 434f077..b6b4b38 100644
        if (!delta) {
                debug_putstr("No relocation needed... ");
                return;
-@@ -380,7 +380,7 @@ static void parse_elf(void *output)
+@@ -347,7 +347,7 @@ static void parse_elf(void *output)
+       Elf32_Ehdr ehdr;
+       Elf32_Phdr *phdrs, *phdr;
+ #endif
+-      void *dest;
++      void *dest, *prev;
+       int i;
+       memcpy(&ehdr, output, sizeof(ehdr));
+@@ -374,13 +374,16 @@ static void parse_elf(void *output)
                case PT_LOAD:
  #ifdef CONFIG_RELOCATABLE
                        dest = output;
@@ -12024,7 +12493,16 @@ index 434f077..b6b4b38 100644
  #else
                        dest = (void *)(phdr->p_paddr);
  #endif
-@@ -432,7 +432,7 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap,
+                       memcpy(dest,
+                              output + phdr->p_offset,
+                              phdr->p_filesz);
++                      if (i)
++                              memset(prev, 0xff, dest - prev);
++                      prev = dest + phdr->p_filesz;
+                       break;
+               default: /* Ignore other PT_* */ break;
+               }
+@@ -430,7 +433,7 @@ asmlinkage void *decompress_kernel(void *rmode, memptr heap,
                error("Destination address too large");
  #endif
  #ifndef CONFIG_RELOCATABLE
@@ -12034,64 +12512,10 @@ index 434f077..b6b4b38 100644
  #endif
  
 diff --git a/arch/x86/boot/cpucheck.c b/arch/x86/boot/cpucheck.c
-index 4d3ff03..e4972ff 100644
+index 100a9a1..bb3bdb0 100644
 --- a/arch/x86/boot/cpucheck.c
 +++ b/arch/x86/boot/cpucheck.c
-@@ -74,7 +74,7 @@ static int has_fpu(void)
-       u16 fcw = -1, fsw = -1;
-       u32 cr0;
--      asm("movl %%cr0,%0" : "=r" (cr0));
-+      asm volatile("movl %%cr0,%0" : "=r" (cr0));
-       if (cr0 & (X86_CR0_EM|X86_CR0_TS)) {
-               cr0 &= ~(X86_CR0_EM|X86_CR0_TS);
-               asm volatile("movl %0,%%cr0" : : "r" (cr0));
-@@ -90,7 +90,7 @@ static int has_eflag(u32 mask)
- {
-       u32 f0, f1;
--      asm("pushfl ; "
-+      asm volatile("pushfl ; "
-           "pushfl ; "
-           "popl %0 ; "
-           "movl %0,%1 ; "
-@@ -115,7 +115,7 @@ static void get_flags(void)
-               set_bit(X86_FEATURE_FPU, cpu.flags);
-       if (has_eflag(X86_EFLAGS_ID)) {
--              asm("cpuid"
-+              asm volatile("cpuid"
-                   : "=a" (max_intel_level),
-                     "=b" (cpu_vendor[0]),
-                     "=d" (cpu_vendor[1]),
-@@ -124,7 +124,7 @@ static void get_flags(void)
-               if (max_intel_level >= 0x00000001 &&
-                   max_intel_level <= 0x0000ffff) {
--                      asm("cpuid"
-+                      asm volatile("cpuid"
-                           : "=a" (tfms),
-                             "=c" (cpu.flags[4]),
-                             "=d" (cpu.flags[0])
-@@ -136,7 +136,7 @@ static void get_flags(void)
-                               cpu.model += ((tfms >> 16) & 0xf) << 4;
-               }
--              asm("cpuid"
-+              asm volatile("cpuid"
-                   : "=a" (max_amd_level)
-                   : "a" (0x80000000)
-                   : "ebx", "ecx", "edx");
-@@ -144,7 +144,7 @@ static void get_flags(void)
-               if (max_amd_level >= 0x80000001 &&
-                   max_amd_level <= 0x8000ffff) {
-                       u32 eax = 0x80000001;
--                      asm("cpuid"
-+                      asm volatile("cpuid"
-                           : "+a" (eax),
-                             "=c" (cpu.flags[6]),
-                             "=d" (cpu.flags[1])
-@@ -203,9 +203,9 @@ int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr)
+@@ -117,9 +117,9 @@ int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr)
                u32 ecx = MSR_K7_HWCR;
                u32 eax, edx;
  
@@ -12101,9 +12525,9 @@ index 4d3ff03..e4972ff 100644
 -              asm("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx));
 +              asm volatile("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx));
  
-               get_flags();    /* Make sure it really did something */
-               err = check_flags();
-@@ -218,9 +218,9 @@ int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr)
+               get_cpuflags(); /* Make sure it really did something */
+               err = check_cpuflags();
+@@ -132,9 +132,9 @@ int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr)
                u32 ecx = MSR_VIA_FCR;
                u32 eax, edx;
  
@@ -12114,8 +12538,8 @@ index 4d3ff03..e4972ff 100644
 +              asm volatile("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx));
  
                set_bit(X86_FEATURE_CX8, cpu.flags);
-               err = check_flags();
-@@ -231,12 +231,12 @@ int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr)
+               err = check_cpuflags();
+@@ -145,12 +145,12 @@ int check_cpu(int *cpu_level_ptr, int *req_level_ptr, u32 **err_flags_ptr)
                u32 eax, edx;
                u32 level = 1;
  
@@ -12130,13 +12554,13 @@ index 4d3ff03..e4972ff 100644
 -              asm("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx));
 +              asm volatile("wrmsr" : : "a" (eax), "d" (edx), "c" (ecx));
  
-               err = check_flags();
+               err = check_cpuflags();
        }
 diff --git a/arch/x86/boot/header.S b/arch/x86/boot/header.S
-index 9ec06a1..2c25e79 100644
+index ec3b8ba..6a0db1f 100644
 --- a/arch/x86/boot/header.S
 +++ b/arch/x86/boot/header.S
-@@ -409,10 +409,14 @@ setup_data:              .quad 0                 # 64-bit physical pointer to
+@@ -416,10 +416,14 @@ setup_data:              .quad 0                 # 64-bit physical pointer to
                                                # single linked list of
                                                # struct setup_data
  
@@ -13164,7 +13588,7 @@ index dbc4339..de6e120 100644
  
          ################################################################
 diff --git a/arch/x86/crypto/ghash-clmulni-intel_asm.S b/arch/x86/crypto/ghash-clmulni-intel_asm.S
-index 586f41a..d02851e 100644
+index 185fad4..ff4cd36 100644
 --- a/arch/x86/crypto/ghash-clmulni-intel_asm.S
 +++ b/arch/x86/crypto/ghash-clmulni-intel_asm.S
 @@ -18,6 +18,7 @@
@@ -13175,7 +13599,7 @@ index 586f41a..d02851e 100644
  
  .data
  
-@@ -93,6 +94,7 @@ __clmul_gf128mul_ble:
+@@ -89,6 +90,7 @@ __clmul_gf128mul_ble:
        psrlq $1, T2
        pxor T2, T1
        pxor T1, DATA
@@ -13183,7 +13607,7 @@ index 586f41a..d02851e 100644
        ret
  ENDPROC(__clmul_gf128mul_ble)
  
-@@ -105,6 +107,7 @@ ENTRY(clmul_ghash_mul)
+@@ -101,6 +103,7 @@ ENTRY(clmul_ghash_mul)
        call __clmul_gf128mul_ble
        PSHUFB_XMM BSWAP DATA
        movups DATA, (%rdi)
@@ -13191,21 +13615,13 @@ index 586f41a..d02851e 100644
        ret
  ENDPROC(clmul_ghash_mul)
  
-@@ -132,6 +135,7 @@ ENTRY(clmul_ghash_update)
+@@ -128,5 +131,6 @@ ENTRY(clmul_ghash_update)
        PSHUFB_XMM BSWAP DATA
        movups DATA, (%rdi)
  .Lupdate_just_ret:
 +      pax_force_retaddr
        ret
  ENDPROC(clmul_ghash_update)
-@@ -157,5 +161,6 @@ ENTRY(clmul_ghash_setkey)
-       pand .Lpoly, %xmm1
-       pxor %xmm1, %xmm0
-       movups %xmm0, (%rdi)
-+      pax_force_retaddr
-       ret
- ENDPROC(clmul_ghash_setkey)
 diff --git a/arch/x86/crypto/salsa20-x86_64-asm_64.S b/arch/x86/crypto/salsa20-x86_64-asm_64.S
 index 9279e0b..c4b3d2c 100644
 --- a/arch/x86/crypto/salsa20-x86_64-asm_64.S
@@ -15507,7 +15923,7 @@ index f50de69..2b0a458 100644
                clac();
                return ret;
 diff --git a/arch/x86/include/asm/cmpxchg.h b/arch/x86/include/asm/cmpxchg.h
-index d47786a..ce1b05d 100644
+index d47786a..2d8883e 100644
 --- a/arch/x86/include/asm/cmpxchg.h
 +++ b/arch/x86/include/asm/cmpxchg.h
 @@ -14,8 +14,12 @@ extern void __cmpxchg_wrong_size(void)
@@ -15523,10 +15939,11 @@ index d47786a..ce1b05d 100644
  
  /*
   * Constants for operation sizes. On 32-bit, the 64-bit size it set to
-@@ -67,6 +71,34 @@ extern void __add_wrong_size(void)
+@@ -67,6 +71,38 @@ extern void __add_wrong_size(void)
                __ret;                                                  \
        })
  
++#ifdef CONFIG_PAX_REFCOUNT
 +#define __xchg_op_check_overflow(ptr, arg, op, lock)                  \
 +      ({                                                              \
 +              __typeof__ (*(ptr)) __ret = (arg);                      \
@@ -15554,11 +15971,14 @@ index d47786a..ce1b05d 100644
 +              }                                                       \
 +              __ret;                                                  \
 +      })
++#else
++#define __xchg_op_check_overflow(ptr, arg, op, lock) __xchg_op(ptr, arg, op, lock)
++#endif
 +
  /*
   * Note: no "lock" prefix even on SMP: xchg always implies lock anyway.
   * Since this is generally used to protect other memory information, we
-@@ -167,6 +199,9 @@ extern void __add_wrong_size(void)
+@@ -167,6 +203,9 @@ extern void __add_wrong_size(void)
  #define xadd_sync(ptr, inc)   __xadd((ptr), (inc), "lock; ")
  #define xadd_local(ptr, inc)  __xadd((ptr), (inc), "")
  
@@ -15582,7 +16002,7 @@ 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
-index 89270b4..f0abf8e 100644
+index e099f95..5aa0fb2 100644
 --- a/arch/x86/include/asm/cpufeature.h
 +++ b/arch/x86/include/asm/cpufeature.h
 @@ -203,7 +203,7 @@
@@ -15603,7 +16023,7 @@ index 89270b4..f0abf8e 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 */
-@@ -353,6 +353,7 @@ extern const char * const x86_power_flags[32];
+@@ -354,6 +354,7 @@ extern const char * const x86_power_flags[32];
  #undef  cpu_has_centaur_mcr
  #define cpu_has_centaur_mcr   0
  
@@ -15611,7 +16031,7 @@ index 89270b4..f0abf8e 100644
  #endif /* CONFIG_X86_64 */
  
  #if __GNUC__ >= 4
-@@ -405,7 +406,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -406,7 +407,8 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
  
  #ifdef CONFIG_X86_DEBUG_STATIC_CPU_HAS
        t_warn:
@@ -15621,7 +16041,7 @@ index 89270b4..f0abf8e 100644
                return false;
  #endif
  
-@@ -425,7 +427,7 @@ static __always_inline __pure bool __static_cpu_has(u16 bit)
+@@ -426,7 +428,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"
@@ -15630,7 +16050,7 @@ index 89270b4..f0abf8e 100644
                             "3: movb $1,%0\n"
                             "4:\n"
                             ".previous\n"
-@@ -462,7 +464,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -463,7 +465,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"
@@ -15639,7 +16059,7 @@ index 89270b4..f0abf8e 100644
                         "3: .byte 0xe9\n .long %l[t_no] - 2b\n"
                         "4:\n"
                         ".previous\n"
-@@ -495,7 +497,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -496,7 +498,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"
@@ -15648,7 +16068,7 @@ index 89270b4..f0abf8e 100644
                             "3: movb $0,%0\n"
                             "4:\n"
                             ".previous\n"
-@@ -509,7 +511,7 @@ static __always_inline __pure bool _static_cpu_has_safe(u16 bit)
+@@ -510,7 +512,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"
@@ -16063,7 +16483,7 @@ index cea1c76..6c0d79b 100644
  
        return fpu_restore_checking(&tsk->thread.fpu);
 diff --git a/arch/x86/include/asm/futex.h b/arch/x86/include/asm/futex.h
-index be27ba1..04a8801 100644
+index b4c1f54..e290c08 100644
 --- a/arch/x86/include/asm/futex.h
 +++ b/arch/x86/include/asm/futex.h
 @@ -12,6 +12,7 @@
@@ -16126,31 +16546,8 @@ index be27ba1..04a8801 100644
  
        pagefault_enable();
  
-@@ -115,18 +119,20 @@ static inline int futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr,
-       if (!access_ok(VERIFY_WRITE, uaddr, sizeof(u32)))
-               return -EFAULT;
-+      pax_open_userland();
-       asm volatile("\t" ASM_STAC "\n"
--                   "1:\t" LOCK_PREFIX "cmpxchgl %4, %2\n"
-+                   "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgl %4, %2\n"
-                    "2:\t" ASM_CLAC "\n"
-                    "\t.section .fixup, \"ax\"\n"
-                    "3:\tmov     %3, %0\n"
-                    "\tjmp     2b\n"
-                    "\t.previous\n"
-                    _ASM_EXTABLE(1b, 3b)
--                   : "+r" (ret), "=a" (oldval), "+m" (*uaddr)
-+                   : "+r" (ret), "=a" (oldval), "+m" (*(u32 __user *)____m(uaddr))
-                    : "i" (-EFAULT), "r" (newval), "1" (oldval)
-                    : "memory"
-       );
-+      pax_close_userland();
-       *uval = oldval;
-       return ret;
 diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h
-index cba45d9..86344ba 100644
+index 67d69b8..50e4b77 100644
 --- a/arch/x86/include/asm/hw_irq.h
 +++ b/arch/x86/include/asm/hw_irq.h
 @@ -165,8 +165,8 @@ extern void setup_ioapic_dest(void);
@@ -16178,7 +16575,7 @@ index a203659..9889f1c 100644
  extern struct legacy_pic *legacy_pic;
  extern struct legacy_pic null_legacy_pic;
 diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
-index 34f69cb..6d95446 100644
+index 91d9c69..dfae7d0 100644
 --- a/arch/x86/include/asm/io.h
 +++ b/arch/x86/include/asm/io.h
 @@ -51,12 +51,12 @@ static inline void name(type val, volatile void __iomem *addr) \
@@ -16745,7 +17142,7 @@ index 86f9301..b365cda 100644
  void unregister_nmi_handler(unsigned int, const char *);
  
 diff --git a/arch/x86/include/asm/page.h b/arch/x86/include/asm/page.h
-index c878924..21f4889 100644
+index 775873d..de5f0304 100644
 --- a/arch/x86/include/asm/page.h
 +++ b/arch/x86/include/asm/page.h
 @@ -52,6 +52,7 @@ static inline void copy_user_page(void *to, void *from, unsigned long vaddr,
@@ -16773,7 +17170,7 @@ index 0f1ddee..e2fc3d1 100644
        unsigned long y = x - __START_KERNEL_map;
  
 diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
-index 401f350..dee5d13 100644
+index cd6e1610..70f4418 100644
 --- a/arch/x86/include/asm/paravirt.h
 +++ b/arch/x86/include/asm/paravirt.h
 @@ -560,7 +560,7 @@ static inline pmd_t __pmd(pmdval_t val)
@@ -16858,7 +17255,7 @@ index 401f350..dee5d13 100644
  
  #endif /* __ASSEMBLY__ */
 diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
-index aab8f67..0fb0ee4 100644
+index 7549b8b..f0edfda 100644
 --- a/arch/x86/include/asm/paravirt_types.h
 +++ b/arch/x86/include/asm/paravirt_types.h
 @@ -84,7 +84,7 @@ struct pv_init_ops {
@@ -17017,7 +17414,7 @@ index c4412e9..90e88c5 100644
  {
        return (pud_t *)get_zeroed_page(GFP_KERNEL|__GFP_REPEAT);
 diff --git a/arch/x86/include/asm/pgtable-2level.h b/arch/x86/include/asm/pgtable-2level.h
-index 3bf2dd0..23d2a9f 100644
+index 0d193e2..bf59aeb 100644
 --- a/arch/x86/include/asm/pgtable-2level.h
 +++ b/arch/x86/include/asm/pgtable-2level.h
 @@ -18,7 +18,9 @@ static inline void native_set_pte(pte_t *ptep , pte_t pte)
@@ -17401,11 +17798,11 @@ index e22c1db..23a625a 100644
  }
  
 diff --git a/arch/x86/include/asm/pgtable_64_types.h b/arch/x86/include/asm/pgtable_64_types.h
-index 2d88344..4679fc3 100644
+index c883bf7..19970b3 100644
 --- a/arch/x86/include/asm/pgtable_64_types.h
 +++ b/arch/x86/include/asm/pgtable_64_types.h
 @@ -61,6 +61,11 @@ typedef struct { pteval_t pte; } pte_t;
- #define MODULES_VADDR    _AC(0xffffffffa0000000, UL)
+ #define MODULES_VADDR    (__START_KERNEL_map + KERNEL_IMAGE_SIZE)
  #define MODULES_END      _AC(0xffffffffff000000, UL)
  #define MODULES_LEN   (MODULES_END - MODULES_VADDR)
 +#define MODULES_EXEC_VADDR MODULES_VADDR
@@ -17417,7 +17814,7 @@ index 2d88344..4679fc3 100644
  #define EARLY_DYNAMIC_PAGE_TABLES     64
  
 diff --git a/arch/x86/include/asm/pgtable_types.h b/arch/x86/include/asm/pgtable_types.h
-index 0ecac25..7a15e09 100644
+index 94e40f1..ebd03e4 100644
 --- a/arch/x86/include/asm/pgtable_types.h
 +++ b/arch/x86/include/asm/pgtable_types.h
 @@ -16,13 +16,12 @@
@@ -17457,7 +17854,7 @@ index 0ecac25..7a15e09 100644
  #endif
  
  #define _PAGE_FILE    (_AT(pteval_t, 1) << _PAGE_BIT_FILE)
-@@ -146,6 +146,9 @@
+@@ -147,6 +147,9 @@
  #define PAGE_READONLY_EXEC    __pgprot(_PAGE_PRESENT | _PAGE_USER |   \
                                         _PAGE_ACCESSED)
  
@@ -17467,7 +17864,7 @@ index 0ecac25..7a15e09 100644
  #define __PAGE_KERNEL_EXEC                                            \
        (_PAGE_PRESENT | _PAGE_RW | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_GLOBAL)
  #define __PAGE_KERNEL         (__PAGE_KERNEL_EXEC | _PAGE_NX)
-@@ -156,7 +159,7 @@
+@@ -157,7 +160,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)
@@ -17476,7 +17873,7 @@ index 0ecac25..7a15e09 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)
-@@ -218,8 +221,8 @@
+@@ -219,8 +222,8 @@
   * bits are combined, this will alow user to access the high address mapped
   * VDSO in the presence of CONFIG_COMPAT_VDSO
   */
@@ -17487,7 +17884,7 @@ index 0ecac25..7a15e09 100644
  #define PGD_IDENT_ATTR         0x001          /* PRESENT (no other attributes) */
  #endif
  
-@@ -257,7 +260,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd)
+@@ -258,7 +261,17 @@ static inline pgdval_t pgd_flags(pgd_t pgd)
  {
        return native_pgd_val(pgd) & PTE_FLAGS_MASK;
  }
@@ -17505,7 +17902,7 @@ index 0ecac25..7a15e09 100644
  #if PAGETABLE_LEVELS > 3
  typedef struct { pudval_t pud; } pud_t;
  
-@@ -271,8 +284,6 @@ static inline pudval_t native_pud_val(pud_t pud)
+@@ -272,8 +285,6 @@ static inline pudval_t native_pud_val(pud_t pud)
        return pud.pud;
  }
  #else
@@ -17514,7 +17911,7 @@ index 0ecac25..7a15e09 100644
  static inline pudval_t native_pud_val(pud_t pud)
  {
        return native_pgd_val(pud.pgd);
-@@ -292,8 +303,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
+@@ -293,8 +304,6 @@ static inline pmdval_t native_pmd_val(pmd_t pmd)
        return pmd.pmd;
  }
  #else
@@ -17523,7 +17920,7 @@ index 0ecac25..7a15e09 100644
  static inline pmdval_t native_pmd_val(pmd_t pmd)
  {
        return native_pgd_val(pmd.pud.pgd);
-@@ -333,7 +342,6 @@ typedef struct page *pgtable_t;
+@@ -334,7 +343,6 @@ typedef struct page *pgtable_t;
  
  extern pteval_t __supported_pte_mask;
  extern void set_nx(void);
@@ -17545,7 +17942,7 @@ index c8b0519..fd29e73 100644
  
  /*
 diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
-index 7b034a4..4fe3e3f 100644
+index fdedd38..95c02c2 100644
 --- a/arch/x86/include/asm/processor.h
 +++ b/arch/x86/include/asm/processor.h
 @@ -128,7 +128,7 @@ struct cpuinfo_x86 {
@@ -17589,7 +17986,7 @@ index 7b034a4..4fe3e3f 100644
  
  /*
   * Save the original ist values for checking stack pointers during debugging
-@@ -453,6 +465,7 @@ struct thread_struct {
+@@ -470,6 +482,7 @@ struct thread_struct {
        unsigned short          ds;
        unsigned short          fsindex;
        unsigned short          gsindex;
@@ -17597,7 +17994,7 @@ index 7b034a4..4fe3e3f 100644
  #endif
  #ifdef CONFIG_X86_32
        unsigned long           ip;
-@@ -562,29 +575,8 @@ static inline void load_sp0(struct tss_struct *tss,
+@@ -579,29 +592,8 @@ static inline void load_sp0(struct tss_struct *tss,
  extern unsigned long mmu_cr4_features;
  extern u32 *trampoline_cr4_features;
  
@@ -17629,7 +18026,7 @@ index 7b034a4..4fe3e3f 100644
  
  typedef struct {
        unsigned long           seg;
-@@ -833,11 +825,18 @@ static inline void spin_lock_prefetch(const void *x)
+@@ -827,11 +819,18 @@ static inline void spin_lock_prefetch(const void *x)
   */
  #define TASK_SIZE             PAGE_OFFSET
  #define TASK_SIZE_MAX         TASK_SIZE
@@ -17650,7 +18047,7 @@ index 7b034a4..4fe3e3f 100644
        .vm86_info              = NULL,                                   \
        .sysenter_cs            = __KERNEL_CS,                            \
        .io_bitmap_ptr          = NULL,                                   \
-@@ -851,7 +850,7 @@ static inline void spin_lock_prefetch(const void *x)
+@@ -845,7 +844,7 @@ static inline void spin_lock_prefetch(const void *x)
   */
  #define INIT_TSS  {                                                     \
        .x86_tss = {                                                      \
@@ -17659,7 +18056,7 @@ index 7b034a4..4fe3e3f 100644
                .ss0            = __KERNEL_DS,                            \
                .ss1            = __KERNEL_CS,                            \
                .io_bitmap_base = INVALID_IO_BITMAP_OFFSET,               \
-@@ -862,11 +861,7 @@ static inline void spin_lock_prefetch(const void *x)
+@@ -856,11 +855,7 @@ static inline void spin_lock_prefetch(const void *x)
  extern unsigned long thread_saved_pc(struct task_struct *tsk);
  
  #define THREAD_SIZE_LONGS      (THREAD_SIZE/sizeof(unsigned long))
@@ -17672,7 +18069,7 @@ index 7b034a4..4fe3e3f 100644
  
  /*
   * The below -8 is to reserve 8 bytes on top of the ring0 stack.
-@@ -881,7 +876,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -875,7 +870,7 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
  #define task_pt_regs(task)                                             \
  ({                                                                     \
         struct pt_regs *__regs__;                                       \
@@ -17681,7 +18078,7 @@ index 7b034a4..4fe3e3f 100644
         __regs__ - 1;                                                   \
  })
  
-@@ -891,13 +886,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -885,13 +880,13 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
  /*
   * User space process size. 47bits minus one guard page.
   */
@@ -17697,7 +18094,7 @@ index 7b034a4..4fe3e3f 100644
  
  #define TASK_SIZE             (test_thread_flag(TIF_ADDR32) ? \
                                        IA32_PAGE_OFFSET : TASK_SIZE_MAX)
-@@ -908,11 +903,11 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
+@@ -902,11 +897,11 @@ extern unsigned long thread_saved_pc(struct task_struct *tsk);
  #define STACK_TOP_MAX         TASK_SIZE_MAX
  
  #define INIT_THREAD  { \
@@ -17711,7 +18108,7 @@ index 7b034a4..4fe3e3f 100644
  }
  
  /*
-@@ -940,6 +935,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
+@@ -934,6 +929,10 @@ extern void start_thread(struct pt_regs *regs, unsigned long new_ip,
   */
  #define TASK_UNMAPPED_BASE    (PAGE_ALIGN(TASK_SIZE / 3))
  
@@ -17722,7 +18119,7 @@ index 7b034a4..4fe3e3f 100644
  #define KSTK_EIP(task)                (task_pt_regs(task)->ip)
  
  /* Get/set a process' ability to use the timestamp counter instruction */
-@@ -966,7 +965,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
+@@ -960,7 +959,7 @@ static inline uint32_t hypervisor_cpuid_base(const char *sig, uint32_t leaves)
        return 0;
  }
  
@@ -17731,7 +18128,7 @@ index 7b034a4..4fe3e3f 100644
  extern void free_init_pages(char *what, unsigned long begin, unsigned long end);
  
  void default_idle(void);
-@@ -976,6 +975,6 @@ bool xen_set_default_idle(void);
+@@ -970,6 +969,6 @@ bool xen_set_default_idle(void);
  #define xen_set_default_idle 0
  #endif
  
@@ -17740,10 +18137,10 @@ index 7b034a4..4fe3e3f 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
-index 942a086..6c26446 100644
+index 14fd6fd..6740420 100644
 --- a/arch/x86/include/asm/ptrace.h
 +++ b/arch/x86/include/asm/ptrace.h
-@@ -85,28 +85,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs)
+@@ -84,28 +84,29 @@ static inline unsigned long regs_return_value(struct pt_regs *regs)
  }
  
  /*
@@ -17779,7 +18176,7 @@ index 942a086..6c26446 100644
  #endif
  }
  
-@@ -122,15 +123,16 @@ static inline int v8086_mode(struct pt_regs *regs)
+@@ -121,15 +122,16 @@ static inline int v8086_mode(struct pt_regs *regs)
  #ifdef CONFIG_X86_64
  static inline bool user_64bit_mode(struct pt_regs *regs)
  {
@@ -17798,7 +18195,7 @@ index 942a086..6c26446 100644
  #endif
  }
  
-@@ -181,9 +183,11 @@ static inline unsigned long regs_get_register(struct pt_regs *regs,
+@@ -180,9 +182,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.
         */
@@ -18282,10 +18679,10 @@ 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
-index 4137890..03fa172 100644
+index 8cd27e0..7f05ec8 100644
 --- a/arch/x86/include/asm/smp.h
 +++ b/arch/x86/include/asm/smp.h
-@@ -36,7 +36,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
+@@ -35,7 +35,7 @@ DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_core_map);
  /* cpus sharing the last level cache: */
  DECLARE_PER_CPU_READ_MOSTLY(cpumask_var_t, cpu_llc_shared_map);
  DECLARE_PER_CPU_READ_MOSTLY(u16, cpu_llc_id);
@@ -18294,7 +18691,7 @@ index 4137890..03fa172 100644
  
  static inline struct cpumask *cpu_sibling_mask(int cpu)
  {
-@@ -79,7 +79,7 @@ struct smp_ops {
+@@ -78,7 +78,7 @@ struct smp_ops {
  
        void (*send_call_func_ipi)(const struct cpumask *mask);
        void (*send_call_func_single_ipi)(int cpu);
@@ -18303,7 +18700,7 @@ index 4137890..03fa172 100644
  
  /* Globals due to paravirt */
  extern void set_cpu_sibling_map(int cpu);
-@@ -191,14 +191,8 @@ extern unsigned disabled_cpus;
+@@ -190,14 +190,8 @@ extern unsigned disabled_cpus;
  extern int safe_smp_processor_id(void);
  
  #elif defined(CONFIG_X86_64_SMP)
@@ -18321,10 +18718,10 @@ index 4137890..03fa172 100644
  
  #endif
 diff --git a/arch/x86/include/asm/spinlock.h b/arch/x86/include/asm/spinlock.h
-index bf156de..1a782ab 100644
+index 0f62f54..cb5d0dd 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)
+@@ -222,6 +222,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"
@@ -18339,7 +18736,7 @@ index bf156de..1a782ab 100644
                     "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)
+@@ -231,6 +239,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"
@@ -18354,7 +18751,7 @@ index bf156de..1a782ab 100644
                     "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)
+@@ -260,13 +276,29 @@ static inline int arch_write_trylock(arch_rwlock_t *lock)
  
  static inline void arch_read_unlock(arch_rwlock_t *rw)
  {
@@ -18484,7 +18881,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
-index 3ba3de4..6c113b2 100644
+index e1940c0..ac50dd8 100644
 --- a/arch/x86/include/asm/thread_info.h
 +++ b/arch/x86/include/asm/thread_info.h
 @@ -10,6 +10,7 @@
@@ -18572,43 +18969,16 @@ index 3ba3de4..6c113b2 100644
  
  /* Only used for 64 bit */
  #define _TIF_DO_NOTIFY_MASK                                           \
-@@ -153,45 +149,40 @@ struct thread_info {
+@@ -153,6 +149,23 @@ struct thread_info {
  #define _TIF_WORK_CTXSW_PREV (_TIF_WORK_CTXSW|_TIF_USER_RETURN_NOTIFY)
  #define _TIF_WORK_CTXSW_NEXT (_TIF_WORK_CTXSW)
  
--#ifdef CONFIG_X86_32
--
--#define STACK_WARN    (THREAD_SIZE/8)
--/*
-- * macros/functions for gaining access to the thread information structure
-- *
-- * preempt_count needs to be 1 initially, until the scheduler is functional.
-- */
--#ifndef __ASSEMBLY__
--
--
--/* how to get the current stack pointer from C */
--register unsigned long current_stack_pointer asm("esp") __used;
--
--/* how to get the thread information struct from C */
--static inline struct thread_info *current_thread_info(void)
--{
--      return (struct thread_info *)
--              (current_stack_pointer & ~(THREAD_SIZE - 1));
--}
--
--#else /* !__ASSEMBLY__ */
--
 +#ifdef __ASSEMBLY__
- /* how to get the thread information struct from ASM */
- #define GET_THREAD_INFO(reg)   \
--      movl $-THREAD_SIZE, reg; \
--      andl %esp, reg
++/* how to get the thread information struct from ASM */
++#define GET_THREAD_INFO(reg)   \
 +      mov PER_CPU_VAR(current_tinfo), reg
- /* use this one if reg already contains %esp */
--#define GET_THREAD_INFO_WITH_ESP(reg) \
--      andl $-THREAD_SIZE, reg
++
++/* use this one if reg already contains %esp */
 +#define GET_THREAD_INFO_WITH_ESP(reg) GET_THREAD_INFO(reg)
 +#else
 +/* how to get the thread information struct from C */
@@ -18620,19 +18990,31 @@ index 3ba3de4..6c113b2 100644
 +}
 +#endif
 +
-+#ifdef CONFIG_X86_32
-+
-+#define STACK_WARN    (THREAD_SIZE/8)
-+/*
-+ * macros/functions for gaining access to the thread information structure
-+ *
-+ * preempt_count needs to be 1 initially, until the scheduler is functional.
-+ */
-+#ifndef __ASSEMBLY__
-+
-+/* how to get the current stack pointer from C */
-+register unsigned long current_stack_pointer asm("esp") __used;
+ #ifdef CONFIG_X86_32
+ #define STACK_WARN    (THREAD_SIZE/8)
+@@ -169,31 +182,10 @@ struct thread_info {
+       sp;                                     \
+ })
  
+-/* how to get the thread information struct from C */
+-static inline struct thread_info *current_thread_info(void)
+-{
+-      return (struct thread_info *)
+-              (current_stack_pointer & ~(THREAD_SIZE - 1));
+-}
+-
+-#else /* !__ASSEMBLY__ */
+-
+-/* how to get the thread information struct from ASM */
+-#define GET_THREAD_INFO(reg)   \
+-      movl $-THREAD_SIZE, reg; \
+-      andl %esp, reg
+-
+-/* use this one if reg already contains %esp */
+-#define GET_THREAD_INFO_WITH_ESP(reg) \
+-      andl $-THREAD_SIZE, reg
+-
  #endif
  
  #else /* X86_32 */
@@ -18643,7 +19025,7 @@ index 3ba3de4..6c113b2 100644
  /*
   * macros/functions for gaining access to the thread information structure
   * preempt_count needs to be 1 initially, until the scheduler is functional.
-@@ -199,27 +190,8 @@ static inline struct thread_info *current_thread_info(void)
+@@ -201,27 +193,8 @@ static inline struct thread_info *current_thread_info(void)
  #ifndef __ASSEMBLY__
  DECLARE_PER_CPU(unsigned long, kernel_stack);
  
@@ -18673,7 +19055,7 @@ index 3ba3de4..6c113b2 100644
  #endif
  
  #endif /* !X86_32 */
-@@ -278,5 +250,12 @@ static inline bool is_ia32_task(void)
+@@ -280,5 +253,12 @@ static inline bool is_ia32_task(void)
  extern void arch_task_cache_init(void);
  extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
  extern void arch_release_task_struct(struct task_struct *tsk);
@@ -18687,7 +19069,7 @@ index 3ba3de4..6c113b2 100644
  #endif
  #endif /* _ASM_X86_THREAD_INFO_H */
 diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h
-index e6d90ba..f81f114 100644
+index 04905bf..49203ca 100644
 --- a/arch/x86/include/asm/tlbflush.h
 +++ b/arch/x86/include/asm/tlbflush.h
 @@ -17,18 +17,44 @@
@@ -18784,7 +19166,7 @@ index e6d90ba..f81f114 100644
  }
  
 diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
-index 8ec57c0..3ee58c9 100644
+index 0d592e0..f58a222 100644
 --- a/arch/x86/include/asm/uaccess.h
 +++ b/arch/x86/include/asm/uaccess.h
 @@ -7,6 +7,7 @@
@@ -18808,14 +19190,14 @@ index 8ec57c0..3ee58c9 100644
  
  #define segment_eq(a, b)      ((a).seg == (b).seg)
  
-@@ -77,8 +83,34 @@
+@@ -85,8 +91,34 @@ static inline bool __chk_range_not_ok(unsigned long addr, unsigned long size, un
   * checks that the pointer is in the user space range - after calling
   * this function, memory access functions may still return -EFAULT.
   */
 -#define access_ok(type, addr, size) \
--      (likely(__range_not_ok(addr, size, user_addr_max()) == 0))
+-      likely(!__range_not_ok(addr, size, user_addr_max()))
 +extern int _cond_resched(void);
-+#define __access_ok(type, addr, size) (likely(__range_not_ok(addr, size, user_addr_max()) == 0))
++#define access_ok_noprefault(type, addr, size) (likely(!__range_not_ok(addr, size, user_addr_max())))
 +#define access_ok(type, addr, size)                                   \
 +({                                                                    \
 +      long __size = size;                                             \
@@ -18845,7 +19227,7 @@ index 8ec57c0..3ee58c9 100644
  
  /*
   * The exception table consists of pairs of addresses relative to the
-@@ -168,10 +200,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -176,10 +208,12 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
        register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX);            \
        __chk_user_ptr(ptr);                                            \
        might_fault();                                                  \
@@ -18858,7 +19240,7 @@ index 8ec57c0..3ee58c9 100644
        __ret_gu;                                                       \
  })
  
-@@ -179,13 +213,21 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -187,13 +221,21 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
        asm volatile("call __put_user_" #size : "=a" (__ret_pu) \
                     : "0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx")
  
@@ -18883,7 +19265,7 @@ index 8ec57c0..3ee58c9 100644
                     "3: " ASM_CLAC "\n"                                \
                     ".section .fixup,\"ax\"\n"                         \
                     "4:        movl %3,%0\n"                           \
-@@ -198,8 +240,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
+@@ -206,8 +248,8 @@ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL))
  
  #define __put_user_asm_ex_u64(x, addr)                                        \
        asm volatile(ASM_STAC "\n"                                      \
@@ -18894,7 +19276,7 @@ index 8ec57c0..3ee58c9 100644
                     "3: " ASM_CLAC "\n"                                \
                     _ASM_EXTABLE_EX(1b, 2b)                            \
                     _ASM_EXTABLE_EX(2b, 3b)                            \
-@@ -249,7 +291,8 @@ extern void __put_user_8(void);
+@@ -257,7 +299,8 @@ extern void __put_user_8(void);
        __typeof__(*(ptr)) __pu_val;                            \
        __chk_user_ptr(ptr);                                    \
        might_fault();                                          \
@@ -18904,7 +19286,7 @@ index 8ec57c0..3ee58c9 100644
        switch (sizeof(*(ptr))) {                               \
        case 1:                                                 \
                __put_user_x(1, __pu_val, ptr, __ret_pu);       \
-@@ -267,6 +310,7 @@ extern void __put_user_8(void);
+@@ -275,6 +318,7 @@ extern void __put_user_8(void);
                __put_user_x(X, __pu_val, ptr, __ret_pu);       \
                break;                                          \
        }                                                       \
@@ -18912,7 +19294,7 @@ index 8ec57c0..3ee58c9 100644
        __ret_pu;                                               \
  })
  
-@@ -347,8 +391,10 @@ do {                                                                      \
+@@ -355,8 +399,10 @@ do {                                                                      \
  } while (0)
  
  #define __get_user_asm(x, addr, err, itype, rtype, ltype, errret)     \
@@ -18924,7 +19306,7 @@ index 8ec57c0..3ee58c9 100644
                     "2: " ASM_CLAC "\n"                                \
                     ".section .fixup,\"ax\"\n"                         \
                     "3:        mov %3,%0\n"                            \
-@@ -356,8 +402,10 @@ do {                                                                      \
+@@ -364,8 +410,10 @@ do {                                                                      \
                     "  jmp 2b\n"                                       \
                     ".previous\n"                                      \
                     _ASM_EXTABLE(1b, 3b)                               \
@@ -18937,7 +19319,7 @@ index 8ec57c0..3ee58c9 100644
  
  #define __get_user_size_ex(x, ptr, size)                              \
  do {                                                                  \
-@@ -381,7 +429,7 @@ do {                                                                       \
+@@ -389,7 +437,7 @@ do {                                                                       \
  } while (0)
  
  #define __get_user_asm_ex(x, addr, itype, rtype, ltype)                       \
@@ -18946,7 +19328,7 @@ index 8ec57c0..3ee58c9 100644
                     "2:\n"                                             \
                     _ASM_EXTABLE_EX(1b, 2b)                            \
                     : ltype(x) : "m" (__m(addr)))
-@@ -398,13 +446,24 @@ do {                                                                     \
+@@ -406,13 +454,24 @@ do {                                                                     \
        int __gu_err;                                                   \
        unsigned long __gu_val;                                         \
        __get_user_size(__gu_val, (ptr), (size), __gu_err, -EFAULT);    \
@@ -18973,7 +19355,7 @@ index 8ec57c0..3ee58c9 100644
  
  /*
   * Tell gcc we read from memory instead of writing: this is because
-@@ -412,8 +471,10 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -420,8 +479,10 @@ struct __large_struct { unsigned long buf[100]; };
   * aliasing issues.
   */
  #define __put_user_asm(x, addr, err, itype, rtype, ltype, errret)     \
@@ -18985,7 +19367,7 @@ index 8ec57c0..3ee58c9 100644
                     "2: " ASM_CLAC "\n"                                \
                     ".section .fixup,\"ax\"\n"                         \
                     "3:        mov %3,%0\n"                            \
-@@ -421,10 +482,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -429,10 +490,12 @@ struct __large_struct { unsigned long buf[100]; };
                     ".previous\n"                                      \
                     _ASM_EXTABLE(1b, 3b)                               \
                     : "=r"(err)                                        \
@@ -19000,7 +19382,7 @@ index 8ec57c0..3ee58c9 100644
                     "2:\n"                                             \
                     _ASM_EXTABLE_EX(1b, 2b)                            \
                     : : ltype(x), "m" (__m(addr)))
-@@ -434,11 +497,13 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -442,11 +505,13 @@ struct __large_struct { unsigned long buf[100]; };
   */
  #define uaccess_try   do {                                            \
        current_thread_info()->uaccess_err = 0;                         \
@@ -19014,7 +19396,7 @@ index 8ec57c0..3ee58c9 100644
        (err) |= (current_thread_info()->uaccess_err ? -EFAULT : 0);    \
  } while (0)
  
-@@ -463,8 +528,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -471,8 +536,12 @@ struct __large_struct { unsigned long buf[100]; };
   * On error, the variable @x is set to zero.
   */
  
@@ -19027,7 +19409,7 @@ index 8ec57c0..3ee58c9 100644
  
  /**
   * __put_user: - Write a simple value into user space, with less checking.
-@@ -486,8 +555,12 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -494,8 +563,12 @@ struct __large_struct { unsigned long buf[100]; };
   * Returns zero on success, or -EFAULT on error.
   */
  
@@ -19040,7 +19422,7 @@ index 8ec57c0..3ee58c9 100644
  
  #define __get_user_unaligned __get_user
  #define __put_user_unaligned __put_user
-@@ -505,7 +578,7 @@ struct __large_struct { unsigned long buf[100]; };
+@@ -513,7 +586,7 @@ struct __large_struct { unsigned long buf[100]; };
  #define get_user_ex(x, ptr)   do {                                    \
        unsigned long __gue_val;                                        \
        __get_user_size_ex((__gue_val), (ptr), (sizeof(*(ptr))));       \
@@ -19049,7 +19431,88 @@ index 8ec57c0..3ee58c9 100644
  } while (0)
  
  #define put_user_try          uaccess_try
-@@ -536,17 +609,6 @@ extern struct movsl_mask {
+@@ -542,18 +615,19 @@ extern void __cmpxchg_wrong_size(void)
+       __typeof__(ptr) __uval = (uval);                                \
+       __typeof__(*(ptr)) __old = (old);                               \
+       __typeof__(*(ptr)) __new = (new);                               \
++      pax_open_userland();                                            \
+       switch (size) {                                                 \
+       case 1:                                                         \
+       {                                                               \
+               asm volatile("\t" ASM_STAC "\n"                         \
+-                      "1:\t" LOCK_PREFIX "cmpxchgb %4, %2\n"          \
++                      "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgb %4, %2\n"\
+                       "2:\t" ASM_CLAC "\n"                            \
+                       "\t.section .fixup, \"ax\"\n"                   \
+                       "3:\tmov     %3, %0\n"                          \
+                       "\tjmp     2b\n"                                \
+                       "\t.previous\n"                                 \
+                       _ASM_EXTABLE(1b, 3b)                            \
+-                      : "+r" (__ret), "=a" (__old), "+m" (*(ptr))     \
++                      : "+r" (__ret), "=a" (__old), "+m" (*____m(ptr))\
+                       : "i" (-EFAULT), "q" (__new), "1" (__old)       \
+                       : "memory"                                      \
+               );                                                      \
+@@ -562,14 +636,14 @@ extern void __cmpxchg_wrong_size(void)
+       case 2:                                                         \
+       {                                                               \
+               asm volatile("\t" ASM_STAC "\n"                         \
+-                      "1:\t" LOCK_PREFIX "cmpxchgw %4, %2\n"          \
++                      "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgw %4, %2\n"\
+                       "2:\t" ASM_CLAC "\n"                            \
+                       "\t.section .fixup, \"ax\"\n"                   \
+                       "3:\tmov     %3, %0\n"                          \
+                       "\tjmp     2b\n"                                \
+                       "\t.previous\n"                                 \
+                       _ASM_EXTABLE(1b, 3b)                            \
+-                      : "+r" (__ret), "=a" (__old), "+m" (*(ptr))     \
++                      : "+r" (__ret), "=a" (__old), "+m" (*____m(ptr))\
+                       : "i" (-EFAULT), "r" (__new), "1" (__old)       \
+                       : "memory"                                      \
+               );                                                      \
+@@ -578,14 +652,14 @@ extern void __cmpxchg_wrong_size(void)
+       case 4:                                                         \
+       {                                                               \
+               asm volatile("\t" ASM_STAC "\n"                         \
+-                      "1:\t" LOCK_PREFIX "cmpxchgl %4, %2\n"          \
++                      "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgl %4, %2\n"\
+                       "2:\t" ASM_CLAC "\n"                            \
+                       "\t.section .fixup, \"ax\"\n"                   \
+                       "3:\tmov     %3, %0\n"                          \
+                       "\tjmp     2b\n"                                \
+                       "\t.previous\n"                                 \
+                       _ASM_EXTABLE(1b, 3b)                            \
+-                      : "+r" (__ret), "=a" (__old), "+m" (*(ptr))     \
++                      : "+r" (__ret), "=a" (__old), "+m" (*____m(ptr))\
+                       : "i" (-EFAULT), "r" (__new), "1" (__old)       \
+                       : "memory"                                      \
+               );                                                      \
+@@ -597,14 +671,14 @@ extern void __cmpxchg_wrong_size(void)
+                       __cmpxchg_wrong_size();                         \
+                                                                       \
+               asm volatile("\t" ASM_STAC "\n"                         \
+-                      "1:\t" LOCK_PREFIX "cmpxchgq %4, %2\n"          \
++                      "1:\t" LOCK_PREFIX __copyuser_seg"cmpxchgq %4, %2\n"\
+                       "2:\t" ASM_CLAC "\n"                            \
+                       "\t.section .fixup, \"ax\"\n"                   \
+                       "3:\tmov     %3, %0\n"                          \
+                       "\tjmp     2b\n"                                \
+                       "\t.previous\n"                                 \
+                       _ASM_EXTABLE(1b, 3b)                            \
+-                      : "+r" (__ret), "=a" (__old), "+m" (*(ptr))     \
++                      : "+r" (__ret), "=a" (__old), "+m" (*____m(ptr))\
+                       : "i" (-EFAULT), "r" (__new), "1" (__old)       \
+                       : "memory"                                      \
+               );                                                      \
+@@ -613,6 +687,7 @@ extern void __cmpxchg_wrong_size(void)
+       default:                                                        \
+               __cmpxchg_wrong_size();                                 \
+       }                                                               \
++      pax_close_userland();                                           \
+       *__uval = __old;                                                \
+       __ret;                                                          \
+ })
+@@ -636,17 +711,6 @@ extern struct movsl_mask {
  
  #define ARCH_HAS_NOCACHE_UACCESS 1
  
@@ -19067,7 +19530,7 @@ index 8ec57c0..3ee58c9 100644
  #ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
  # define copy_user_diag __compiletime_error
  #else
-@@ -556,7 +618,7 @@ unsigned long __must_check _copy_to_user(void __user *to, const void *from,
+@@ -656,7 +720,7 @@ unsigned long __must_check _copy_to_user(void __user *to, const void *from,
  extern void copy_user_diag("copy_from_user() buffer size is too small")
  copy_from_user_overflow(void);
  extern void copy_user_diag("copy_to_user() buffer size is too small")
@@ -19076,7 +19539,7 @@ index 8ec57c0..3ee58c9 100644
  
  #undef copy_user_diag
  
-@@ -569,7 +631,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
+@@ -669,7 +733,7 @@ __copy_from_user_overflow(void) __asm__("copy_from_user_overflow");
  
  extern void
  __compiletime_warning("copy_to_user() buffer size is not provably correct")
@@ -19085,7 +19548,7 @@ index 8ec57c0..3ee58c9 100644
  #define __copy_to_user_overflow(size, count) __copy_to_user_overflow()
  
  #else
-@@ -584,10 +646,16 @@ __copy_from_user_overflow(int size, unsigned long count)
+@@ -684,10 +748,16 @@ __copy_from_user_overflow(int size, unsigned long count)
  
  #endif
  
@@ -19103,7 +19566,7 @@ index 8ec57c0..3ee58c9 100644
  
        might_fault();
  
-@@ -609,12 +677,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
+@@ -709,12 +779,15 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
         * case, and do only runtime checking for non-constant sizes.
         */
  
@@ -19125,7 +19588,7 @@ index 8ec57c0..3ee58c9 100644
  
        return n;
  }
-@@ -622,17 +693,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
+@@ -722,17 +795,18 @@ copy_from_user(void *to, const void __user *from, unsigned long n)
  static inline unsigned long __must_check
  copy_to_user(void __user *to, const void *from, unsigned long n)
  {
@@ -19221,7 +19684,7 @@ index 3c03a5d..1071638 100644
  
  #endif /* _ASM_X86_UACCESS_32_H */
 diff --git a/arch/x86/include/asm/uaccess_64.h b/arch/x86/include/asm/uaccess_64.h
-index 190413d..8a80c2a 100644
+index 12a26b9..206c200 100644
 --- a/arch/x86/include/asm/uaccess_64.h
 +++ b/arch/x86/include/asm/uaccess_64.h
 @@ -10,6 +10,9 @@
@@ -19274,7 +19737,7 @@ index 190413d..8a80c2a 100644
 +      check_object_size(dst, size, false);
 +
 +#ifdef CONFIG_PAX_MEMORY_UDEREF
-+      if (!__access_ok(VERIFY_READ, src, size))
++      if (!access_ok_noprefault(VERIFY_READ, src, size))
 +              return size;
 +#endif
 +
@@ -19356,7 +19819,7 @@ index 190413d..8a80c2a 100644
 +      check_object_size(src, size, true);
 +
 +#ifdef CONFIG_PAX_MEMORY_UDEREF
-+      if (!__access_ok(VERIFY_WRITE, dst, size))
++      if (!access_ok_noprefault(VERIFY_WRITE, dst, size))
 +              return size;
 +#endif
 +
@@ -19437,9 +19900,9 @@ index 190413d..8a80c2a 100644
 +              return size;
 +
 +#ifdef CONFIG_PAX_MEMORY_UDEREF
-+      if (!__access_ok(VERIFY_READ, src, size))
++      if (!access_ok_noprefault(VERIFY_READ, src, size))
 +              return size;
-+      if (!__access_ok(VERIFY_WRITE, dst, size))
++      if (!access_ok_noprefault(VERIFY_WRITE, dst, size))
 +              return size;
 +#endif
 +
@@ -19499,8 +19962,7 @@ index 190413d..8a80c2a 100644
 +static __must_check __always_inline unsigned long
 +__copy_from_user_inatomic(void *dst, const void __user *src, unsigned long size)
  {
--      return __copy_from_user_nocheck(dst, (__force const void *)src, size);
-+      return __copy_from_user_nocheck(dst, src, size);
+       return __copy_from_user_nocheck(dst, src, size);
  }
  
 -static __must_check __always_inline int
@@ -19508,8 +19970,7 @@ index 190413d..8a80c2a 100644
 +static __must_check __always_inline unsigned long
 +__copy_to_user_inatomic(void __user *dst, const void *src, unsigned long size)
  {
--      return __copy_to_user_nocheck((__force void *)dst, src, size);
-+      return __copy_to_user_nocheck(dst, src, size);
+       return __copy_to_user_nocheck(dst, src, size);
  }
  
 -extern long __copy_user_nocache(void *dst, const void __user *src,
@@ -19528,7 +19989,7 @@ index 190413d..8a80c2a 100644
 +              return size;
 +
 +#ifdef CONFIG_PAX_MEMORY_UDEREF
-+      if (!__access_ok(VERIFY_READ, src, size))
++      if (!access_ok_noprefault(VERIFY_READ, src, size))
 +              return size;
 +#endif
 +
@@ -19545,7 +20006,7 @@ index 190413d..8a80c2a 100644
 +              return size;
 +
 +#ifdef CONFIG_PAX_MEMORY_UDEREF
-+      if (!__access_ok(VERIFY_READ, src, size))
++      if (!access_ok_noprefault(VERIFY_READ, src, size))
 +              return size;
 +#endif
 +
@@ -19571,7 +20032,7 @@ index 5b238981..77fdd78 100644
  
  #define WORD_AT_A_TIME_CONSTANTS { REPEAT_BYTE(0x01), REPEAT_BYTE(0x80) }
 diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
-index 0f1be11..f7542bf 100644
+index e45e4da..44e8572 100644
 --- a/arch/x86/include/asm/x86_init.h
 +++ b/arch/x86/include/asm/x86_init.h
 @@ -129,7 +129,7 @@ struct x86_init_ops {
@@ -19620,7 +20081,7 @@ index 0f1be11..f7542bf 100644
  extern struct x86_init_ops x86_init;
  extern struct x86_cpuinit_ops x86_cpuinit;
 diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h
-index b913915..4f5a581 100644
+index 3e276eb..2eb3c30 100644
 --- a/arch/x86/include/asm/xen/page.h
 +++ b/arch/x86/include/asm/xen/page.h
 @@ -56,7 +56,7 @@ extern int m2p_remove_override(struct page *page,
@@ -19633,10 +20094,10 @@ index b913915..4f5a581 100644
        unsigned long mfn;
  
 diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h
-index 0415cda..3b22adc 100644
+index 5547389..da68716 100644
 --- a/arch/x86/include/asm/xsave.h
 +++ b/arch/x86/include/asm/xsave.h
-@@ -70,8 +70,11 @@ static inline int xsave_user(struct xsave_struct __user *buf)
+@@ -76,8 +76,11 @@ static inline int xsave_user(struct xsave_struct __user *buf)
        if (unlikely(err))
                return -EFAULT;
  
@@ -19649,7 +20110,7 @@ index 0415cda..3b22adc 100644
                             "2: " ASM_CLAC "\n"
                             ".section .fixup,\"ax\"\n"
                             "3:  movl $-1,%[err]\n"
-@@ -81,18 +84,22 @@ static inline int xsave_user(struct xsave_struct __user *buf)
+@@ -87,18 +90,22 @@ static inline int xsave_user(struct xsave_struct __user *buf)
                             : [err] "=r" (err)
                             : "D" (buf), "a" (-1), "d" (-1), "0" (0)
                             : "memory");
@@ -19674,7 +20135,7 @@ index 0415cda..3b22adc 100644
                             "2: " ASM_CLAC "\n"
                             ".section .fixup,\"ax\"\n"
                             "3:  movl $-1,%[err]\n"
-@@ -102,6 +109,7 @@ static inline int xrestore_user(struct xsave_struct __user *buf, u64 mask)
+@@ -108,6 +115,7 @@ static inline int xrestore_user(struct xsave_struct __user *buf, u64 mask)
                             : [err] "=r" (err)
                             : "D" (xstate), "a" (lmask), "d" (hmask), "0" (0)
                             : "memory");       /* memory required? */
@@ -19708,7 +20169,7 @@ index 7b0a55a..ad115bf 100644
  
  /* top of stack page */
 diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile
-index 9b0a34e..fc7e553 100644
+index cb648c8..91cb07e 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
@@ -19721,10 +20182,10 @@ index 9b0a34e..fc7e553 100644
  obj-y                 += syscall_$(BITS).o
  obj-$(CONFIG_X86_64)  += vsyscall_64.o
 diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
-index 6c0b43b..e67bb31 100644
+index 1dac942..19c8b0c 100644
 --- a/arch/x86/kernel/acpi/boot.c
 +++ b/arch/x86/kernel/acpi/boot.c
-@@ -1315,7 +1315,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
+@@ -1312,7 +1312,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)
   * If your system is blacklisted here, but you find that acpi=force
   * works for you, please contact linux-acpi@vger.kernel.org
   */
@@ -19733,7 +20194,7 @@ index 6c0b43b..e67bb31 100644
        /*
         * Boxes that need ACPI disabled
         */
-@@ -1390,7 +1390,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
+@@ -1387,7 +1387,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
  };
  
  /* second table for DMI checks that should run after early-quirks */
@@ -19935,10 +20396,10 @@ index df94598..f3b29bf 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
-index d278736..0b4af9a8 100644
+index 7f26c9a..694544e 100644
 --- a/arch/x86/kernel/apic/apic.c
 +++ b/arch/x86/kernel/apic/apic.c
-@@ -191,7 +191,7 @@ int first_system_vector = 0xfe;
+@@ -198,7 +198,7 @@ int first_system_vector = 0xfe;
  /*
   * Debug level, exported for io_apic.c
   */
@@ -19947,20 +20408,20 @@ index d278736..0b4af9a8 100644
  
  int pic_mode;
  
-@@ -1986,7 +1986,7 @@ static inline void __smp_error_interrupt(struct pt_regs *regs)
+@@ -1992,7 +1992,7 @@ static inline void __smp_error_interrupt(struct pt_regs *regs)
        apic_write(APIC_ESR, 0);
-       v1 = apic_read(APIC_ESR);
+       v = apic_read(APIC_ESR);
        ack_APIC_irq();
 -      atomic_inc(&irq_err_count);
 +      atomic_inc_unchecked(&irq_err_count);
  
-       apic_printk(APIC_DEBUG, KERN_DEBUG "APIC error on CPU%d: %02x(%02x)",
-                   smp_processor_id(), v0 , v1);
+       apic_printk(APIC_DEBUG, KERN_DEBUG "APIC error on CPU%d: %02x",
+                   smp_processor_id(), v);
 diff --git a/arch/x86/kernel/apic/apic_flat_64.c b/arch/x86/kernel/apic/apic_flat_64.c
-index 00c77cf..2dc6a2d 100644
+index 2c621a6..fa2b1ae 100644
 --- a/arch/x86/kernel/apic/apic_flat_64.c
 +++ b/arch/x86/kernel/apic/apic_flat_64.c
-@@ -157,7 +157,7 @@ static int flat_probe(void)
+@@ -154,7 +154,7 @@ static int flat_probe(void)
        return 1;
  }
  
@@ -19969,7 +20430,7 @@ index 00c77cf..2dc6a2d 100644
        .name                           = "flat",
        .probe                          = flat_probe,
        .acpi_madt_oem_check            = flat_acpi_madt_oem_check,
-@@ -271,7 +271,7 @@ static int physflat_probe(void)
+@@ -268,7 +268,7 @@ static int physflat_probe(void)
        return 0;
  }
  
@@ -19979,10 +20440,10 @@ index 00c77cf..2dc6a2d 100644
        .name                           = "physical flat",
        .probe                          = physflat_probe,
 diff --git a/arch/x86/kernel/apic/apic_noop.c b/arch/x86/kernel/apic/apic_noop.c
-index e145f28..2752888 100644
+index 191ce75..2db6d63 100644
 --- a/arch/x86/kernel/apic/apic_noop.c
 +++ b/arch/x86/kernel/apic/apic_noop.c
-@@ -119,7 +119,7 @@ static void noop_apic_write(u32 reg, u32 v)
+@@ -118,7 +118,7 @@ static void noop_apic_write(u32 reg, u32 v)
        WARN_ON_ONCE(cpu_has_apic && !disable_apic);
  }
  
@@ -20028,10 +20489,10 @@ index c552247..587a316 100644
        .name                           = "es7000",
        .probe                          = probe_es7000,
 diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
-index e63a5bd..c0babf8 100644
+index 6ad4658..38a7b5c 100644
 --- a/arch/x86/kernel/apic/io_apic.c
 +++ b/arch/x86/kernel/apic/io_apic.c
-@@ -1060,7 +1060,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin,
+@@ -1057,7 +1057,7 @@ int IO_APIC_get_PCI_irq_vector(int bus, int slot, int pin,
  }
  EXPORT_SYMBOL(IO_APIC_get_PCI_irq_vector);
  
@@ -20040,7 +20501,7 @@ index e63a5bd..c0babf8 100644
  {
        /* Used to the online set of cpus does not change
         * during assign_irq_vector.
-@@ -1068,7 +1068,7 @@ void lock_vector_lock(void)
+@@ -1065,7 +1065,7 @@ void lock_vector_lock(void)
        raw_spin_lock(&vector_lock);
  }
  
@@ -20049,7 +20510,7 @@ index e63a5bd..c0babf8 100644
  {
        raw_spin_unlock(&vector_lock);
  }
-@@ -2367,7 +2367,7 @@ static void ack_apic_edge(struct irq_data *data)
+@@ -2364,7 +2364,7 @@ static void ack_apic_edge(struct irq_data *data)
        ack_APIC_irq();
  }
  
@@ -20058,7 +20519,7 @@ index e63a5bd..c0babf8 100644
  
  #ifdef CONFIG_GENERIC_PENDING_IRQ
  static bool io_apic_level_ack_pending(struct irq_cfg *cfg)
-@@ -2508,7 +2508,7 @@ static void ack_apic_level(struct irq_data *data)
+@@ -2505,7 +2505,7 @@ static void ack_apic_level(struct irq_data *data)
         * at the cpu.
         */
        if (!(v & (1 << (i & 0x1f)))) {
@@ -20095,10 +20556,10 @@ index eb35ef9..f184a21 100644
        .name                           = "default",
        .probe                          = probe_default,
 diff --git a/arch/x86/kernel/apic/summit_32.c b/arch/x86/kernel/apic/summit_32.c
-index 77c95c0..434f8a4 100644
+index 00146f9..5e299b8 100644
 --- a/arch/x86/kernel/apic/summit_32.c
 +++ b/arch/x86/kernel/apic/summit_32.c
-@@ -486,7 +486,7 @@ void setup_summit(void)
+@@ -485,7 +485,7 @@ void setup_summit(void)
  }
  #endif
  
@@ -20108,10 +20569,10 @@ index 77c95c0..434f8a4 100644
        .name                           = "summit",
        .probe                          = probe_summit,
 diff --git a/arch/x86/kernel/apic/x2apic_cluster.c b/arch/x86/kernel/apic/x2apic_cluster.c
-index 140e29d..d88bc95 100644
+index cac85ee..01fa741 100644
 --- a/arch/x86/kernel/apic/x2apic_cluster.c
 +++ b/arch/x86/kernel/apic/x2apic_cluster.c
-@@ -183,7 +183,7 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
+@@ -182,7 +182,7 @@ update_clusterinfo(struct notifier_block *nfb, unsigned long action, void *hcpu)
        return notifier_from_errno(err);
  }
  
@@ -20120,7 +20581,7 @@ index 140e29d..d88bc95 100644
        .notifier_call = update_clusterinfo,
  };
  
-@@ -235,7 +235,7 @@ static void cluster_vector_allocation_domain(int cpu, struct cpumask *retmask,
+@@ -234,7 +234,7 @@ static void cluster_vector_allocation_domain(int cpu, struct cpumask *retmask,
                cpumask_and(retmask, mask, per_cpu(cpus_in_cluster, cpu));
  }
  
@@ -20130,10 +20591,10 @@ index 140e29d..d88bc95 100644
        .name                           = "cluster x2apic",
        .probe                          = x2apic_cluster_probe,
 diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c
-index 562a76d..a003c0f 100644
+index de231e3..1d1b2ee 100644
 --- a/arch/x86/kernel/apic/x2apic_phys.c
 +++ b/arch/x86/kernel/apic/x2apic_phys.c
-@@ -89,7 +89,7 @@ static int x2apic_phys_probe(void)
+@@ -88,7 +88,7 @@ static int x2apic_phys_probe(void)
        return apic == &apic_x2apic_phys;
  }
  
@@ -20143,7 +20604,7 @@ index 562a76d..a003c0f 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
-index ad0dc04..0d9cc56 100644
+index d263b13..963258b 100644
 --- 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)
@@ -20283,7 +20744,7 @@ index e7c798b..2b2019b 100644
        BLANK();
  
 diff --git a/arch/x86/kernel/cpu/Makefile b/arch/x86/kernel/cpu/Makefile
-index 47b56a7..efc2bc6 100644
+index 7fd54f0..0691410 100644
 --- a/arch/x86/kernel/cpu/Makefile
 +++ b/arch/x86/kernel/cpu/Makefile
 @@ -8,10 +8,6 @@ CFLAGS_REMOVE_common.o = -pg
@@ -20298,10 +20759,10 @@ index 47b56a7..efc2bc6 100644
  obj-y                 += proc.o capflags.o powerflags.o common.o
  obj-y                 += rdrand.o
 diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
-index 59bfebc..d8f27bd 100644
+index c67ffa6..f41fbbf 100644
 --- a/arch/x86/kernel/cpu/amd.c
 +++ b/arch/x86/kernel/cpu/amd.c
-@@ -753,7 +753,7 @@ static void init_amd(struct cpuinfo_x86 *c)
+@@ -752,7 +752,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) */
@@ -20311,7 +20772,7 @@ index 59bfebc..d8f27bd 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
-index 6abc172..3b0df94 100644
+index 8e28bf2..bf5c0d2 100644
 --- a/arch/x86/kernel/cpu/common.c
 +++ b/arch/x86/kernel/cpu/common.c
 @@ -88,60 +88,6 @@ static const struct cpu_dev default_cpu = {
@@ -20375,8 +20836,8 @@ index 6abc172..3b0df94 100644
  static int __init x86_xsave_setup(char *s)
  {
        setup_clear_cpu_cap(X86_FEATURE_XSAVE);
-@@ -288,6 +234,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
-               set_in_cr4(X86_CR4_SMAP);
+@@ -293,6 +239,59 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
+       }
  }
  
 +#ifdef CONFIG_X86_64
@@ -20435,7 +20896,7 @@ index 6abc172..3b0df94 100644
  /*
   * Some CPU features depend on higher CPUID levels, which may not always
   * be available due to CPUID level capping or broken virtualization
-@@ -388,7 +387,7 @@ void switch_to_new_gdt(int cpu)
+@@ -393,7 +392,7 @@ void switch_to_new_gdt(int cpu)
  {
        struct desc_ptr gdt_descr;
  
@@ -20444,7 +20905,7 @@ index 6abc172..3b0df94 100644
        gdt_descr.size = GDT_SIZE - 1;
        load_gdt(&gdt_descr);
        /* Reload the per-cpu base */
-@@ -877,6 +876,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -883,6 +882,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
        setup_smep(c);
        setup_smap(c);
  
@@ -20455,7 +20916,7 @@ index 6abc172..3b0df94 100644
        /*
         * The vendor-specific functions might have changed features.
         * Now we do "generic changes."
-@@ -885,6 +888,10 @@ static void identify_cpu(struct cpuinfo_x86 *c)
+@@ -891,6 +894,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);
  
@@ -20466,7 +20927,7 @@ index 6abc172..3b0df94 100644
        /* If the model name is still unset, do table lookup. */
        if (!c->x86_model_id[0]) {
                const char *p;
-@@ -1072,10 +1079,12 @@ static __init int setup_disablecpuid(char *arg)
+@@ -1078,10 +1085,12 @@ static __init int setup_disablecpuid(char *arg)
  }
  __setup("clearcpuid=", setup_disablecpuid);
  
@@ -20482,7 +20943,7 @@ index 6abc172..3b0df94 100644
  
  DEFINE_PER_CPU_FIRST(union irq_stack_union,
                     irq_stack_union) __aligned(PAGE_SIZE) __visible;
-@@ -1089,7 +1098,7 @@ DEFINE_PER_CPU(struct task_struct *, current_task) ____cacheline_aligned =
+@@ -1095,7 +1104,7 @@ DEFINE_PER_CPU(struct task_struct *, current_task) ____cacheline_aligned =
  EXPORT_PER_CPU_SYMBOL(current_task);
  
  DEFINE_PER_CPU(unsigned long, kernel_stack) =
@@ -20491,7 +20952,7 @@ index 6abc172..3b0df94 100644
  EXPORT_PER_CPU_SYMBOL(kernel_stack);
  
  DEFINE_PER_CPU(char *, irq_stack_ptr) =
-@@ -1239,7 +1248,7 @@ void cpu_init(void)
+@@ -1245,7 +1254,7 @@ void cpu_init(void)
        load_ucode_ap();
  
        cpu = stack_smp_processor_id();
@@ -20500,7 +20961,7 @@ index 6abc172..3b0df94 100644
        oist = &per_cpu(orig_ist, cpu);
  
  #ifdef CONFIG_NUMA
-@@ -1274,7 +1283,6 @@ void cpu_init(void)
+@@ -1280,7 +1289,6 @@ void cpu_init(void)
        wrmsrl(MSR_KERNEL_GS_BASE, 0);
        barrier();
  
@@ -20508,7 +20969,7 @@ index 6abc172..3b0df94 100644
        enable_x2apic();
  
        /*
-@@ -1326,7 +1334,7 @@ void cpu_init(void)
+@@ -1332,7 +1340,7 @@ void cpu_init(void)
  {
        int cpu = smp_processor_id();
        struct task_struct *curr = current;
@@ -20609,7 +21070,7 @@ index 0641113..06f5ba4 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 b3218cd..99a75de 100644
+index 4d5419b..95f11bb 100644
 --- a/arch/x86/kernel/cpu/mcheck/mce.c
 +++ b/arch/x86/kernel/cpu/mcheck/mce.c
 @@ -45,6 +45,7 @@
@@ -20733,7 +21194,7 @@ index b3218cd..99a75de 100644
        mce_chrdev_open_exclu = 0;
  
        spin_unlock(&mce_chrdev_state_lock);
-@@ -2404,7 +2407,7 @@ static __init void mce_init_banks(void)
+@@ -2406,7 +2409,7 @@ static __init void mce_init_banks(void)
  
        for (i = 0; i < mca_cfg.banks; i++) {
                struct mce_bank *b = &mce_banks[i];
@@ -20742,7 +21203,7 @@ index b3218cd..99a75de 100644
  
                sysfs_attr_init(&a->attr);
                a->attr.name    = b->attrname;
-@@ -2472,7 +2475,7 @@ struct dentry *mce_get_debugfs_dir(void)
+@@ -2474,7 +2477,7 @@ struct dentry *mce_get_debugfs_dir(void)
  static void mce_reset(void)
  {
        cpu_missing = 0;
@@ -20752,10 +21213,10 @@ index b3218cd..99a75de 100644
        atomic_set(&mce_callin, 0);
        atomic_set(&global_nwo, 0);
 diff --git a/arch/x86/kernel/cpu/mcheck/p5.c b/arch/x86/kernel/cpu/mcheck/p5.c
-index 1c044b1..37a2a43 100644
+index a304298..49b6d06 100644
 --- a/arch/x86/kernel/cpu/mcheck/p5.c
 +++ b/arch/x86/kernel/cpu/mcheck/p5.c
-@@ -11,6 +11,7 @@
+@@ -10,6 +10,7 @@
  #include <asm/processor.h>
  #include <asm/mce.h>
  #include <asm/msr.h>
@@ -20763,7 +21224,7 @@ index 1c044b1..37a2a43 100644
  
  /* By default disabled */
  int mce_p5_enabled __read_mostly;
-@@ -49,7 +50,9 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c)
+@@ -48,7 +49,9 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c)
        if (!cpu_has(c, X86_FEATURE_MCE))
                return;
  
@@ -20774,10 +21235,10 @@ index 1c044b1..37a2a43 100644
        wmb();
  
 diff --git a/arch/x86/kernel/cpu/mcheck/winchip.c b/arch/x86/kernel/cpu/mcheck/winchip.c
-index e9a701a..35317d6 100644
+index 7dc5564..1273569 100644
 --- a/arch/x86/kernel/cpu/mcheck/winchip.c
 +++ b/arch/x86/kernel/cpu/mcheck/winchip.c
-@@ -10,6 +10,7 @@
+@@ -9,6 +9,7 @@
  #include <asm/processor.h>
  #include <asm/mce.h>
  #include <asm/msr.h>
@@ -20785,7 +21246,7 @@ index e9a701a..35317d6 100644
  
  /* Machine check handler for WinChip C6: */
  static void winchip_machine_check(struct pt_regs *regs, long error_code)
-@@ -23,7 +24,9 @@ void winchip_mcheck_init(struct cpuinfo_x86 *c)
+@@ -22,7 +23,9 @@ void winchip_mcheck_init(struct cpuinfo_x86 *c)
  {
        u32 lo, hi;
  
@@ -20795,6 +21256,39 @@ index e9a701a..35317d6 100644
        /* Make sure the vector pointer is visible before we enable MCEs: */
        wmb();
  
+diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
+index 15c9876..0a43909 100644
+--- a/arch/x86/kernel/cpu/microcode/core.c
++++ b/arch/x86/kernel/cpu/microcode/core.c
+@@ -513,7 +513,7 @@ mc_cpu_callback(struct notifier_block *nb, unsigned long action, void *hcpu)
+       return NOTIFY_OK;
+ }
+-static struct notifier_block __refdata mc_cpu_notifier = {
++static struct notifier_block mc_cpu_notifier = {
+       .notifier_call  = mc_cpu_callback,
+ };
+diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
+index a276fa7..e66810f 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,
+ static int get_ucode_user(void *to, const void *from, size_t n)
+ {
+-      return copy_from_user(to, from, n);
++      return copy_from_user(to, (const void __force_user *)from, n);
+ }
+ static enum ucode_state
+ request_microcode_user(int cpu, const void __user *buf, size_t size)
+ {
+-      return generic_load_microcode(cpu, (void *)buf, size, &get_ucode_user);
++      return generic_load_microcode(cpu, (__force_kernel void *)buf, size, &get_ucode_user);
+ }
+ 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
 --- a/arch/x86/kernel/cpu/mtrr/main.c
@@ -20822,10 +21316,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
-index 8e13293..9bfd68c 100644
+index 79f9f84..38ace52 100644
 --- a/arch/x86/kernel/cpu/perf_event.c
 +++ b/arch/x86/kernel/cpu/perf_event.c
-@@ -1348,7 +1348,7 @@ static void __init pmu_check_apic(void)
+@@ -1351,7 +1351,7 @@ static void __init pmu_check_apic(void)
        pr_info("no hardware sampling interrupt available.\n");
  }
  
@@ -20834,7 +21328,7 @@ index 8e13293..9bfd68c 100644
        .name = "format",
        .attrs = NULL,
  };
-@@ -1447,7 +1447,7 @@ static struct attribute *events_attr[] = {
+@@ -1450,7 +1450,7 @@ static struct attribute *events_attr[] = {
        NULL,
  };
  
@@ -20843,7 +21337,7 @@ index 8e13293..9bfd68c 100644
        .name = "events",
        .attrs = events_attr,
  };
-@@ -1958,7 +1958,7 @@ static unsigned long get_segment_base(unsigned int segment)
+@@ -1971,7 +1971,7 @@ static unsigned long get_segment_base(unsigned int segment)
                if (idx > GDT_ENTRIES)
                        return 0;
  
@@ -20852,7 +21346,7 @@ index 8e13293..9bfd68c 100644
        }
  
        return get_desc_base(desc + idx);
-@@ -2048,7 +2048,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
+@@ -2061,7 +2061,7 @@ perf_callchain_user(struct perf_callchain_entry *entry, struct pt_regs *regs)
                        break;
  
                perf_callchain_store(entry, frame.return_address);
@@ -20875,13 +21369,13 @@ 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
-index 0fa4f24..17990ed 100644
+index aa333d9..f9db700 100644
 --- a/arch/x86/kernel/cpu/perf_event_intel.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel.c
-@@ -2314,10 +2314,10 @@ __init int intel_pmu_init(void)
-        * v2 and above have a perf capabilities MSR
-        */
-       if (version > 1) {
+@@ -2309,10 +2309,10 @@ __init int intel_pmu_init(void)
+               x86_pmu.num_counters_fixed = max((int)edx.split.num_counters_fixed, 3);
+       if (boot_cpu_has(X86_FEATURE_PDCM)) {
 -              u64 capabilities;
 +              u64 capabilities = x86_pmu.intel_cap.capabilities;
  
@@ -20892,11 +21386,24 @@ index 0fa4f24..17990ed 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
+index 5ad35ad..e0a3960 100644
+--- a/arch/x86/kernel/cpu/perf_event_intel_rapl.c
++++ b/arch/x86/kernel/cpu/perf_event_intel_rapl.c
+@@ -425,7 +425,7 @@ static struct attribute *rapl_events_cln_attr[] = {
+       NULL,
+ };
+-static struct attribute_group rapl_pmu_events_group = {
++static attribute_group_no_const rapl_pmu_events_group __read_only = {
+       .name = "events",
+       .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 29c2487..a5606fa 100644
+index 047f540..afdeba0 100644
 --- a/arch/x86/kernel/cpu/perf_event_intel_uncore.c
 +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore.c
-@@ -3318,7 +3318,7 @@ static void __init uncore_types_exit(struct intel_uncore_type **types)
+@@ -3326,7 +3326,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;
@@ -20932,10 +21439,10 @@ index 7d9481c..99c7e4b 100644
        .notifier_call = cpuid_class_cpu_callback,
  };
 diff --git a/arch/x86/kernel/crash.c b/arch/x86/kernel/crash.c
-index 18677a9..f67c45b 100644
+index a57902e..ebaae2a 100644
 --- a/arch/x86/kernel/crash.c
 +++ b/arch/x86/kernel/crash.c
-@@ -58,10 +58,8 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
+@@ -57,10 +57,8 @@ static void kdump_nmi_callback(int cpu, struct pt_regs *regs)
  {
  #ifdef CONFIG_X86_32
        struct pt_regs fixed_regs;
@@ -20961,10 +21468,10 @@ index afa64ad..dce67dd 100644
                        return -EFAULT;
                }
 diff --git a/arch/x86/kernel/doublefault.c b/arch/x86/kernel/doublefault.c
-index 5d3fe8d..02e1429 100644
+index f6dfd93..892ade4 100644
 --- a/arch/x86/kernel/doublefault.c
 +++ b/arch/x86/kernel/doublefault.c
-@@ -13,7 +13,7 @@
+@@ -12,7 +12,7 @@
  
  #define DOUBLEFAULT_STACKSIZE (1024)
  static unsigned long doublefault_stack[DOUBLEFAULT_STACKSIZE];
@@ -20973,7 +21480,7 @@ index 5d3fe8d..02e1429 100644
  
  #define ptr_ok(x) ((x) > PAGE_OFFSET && (x) < PAGE_OFFSET + MAXMEM)
  
-@@ -23,7 +23,7 @@ static void doublefault_fn(void)
+@@ -22,7 +22,7 @@ static void doublefault_fn(void)
        unsigned long gdt, tss;
  
        native_store_gdt(&gdt_desc);
@@ -20982,7 +21489,7 @@ index 5d3fe8d..02e1429 100644
  
        printk(KERN_EMERG "PANIC: double fault, gdt at %08lx [%d bytes]\n", gdt, gdt_desc.size);
  
-@@ -60,10 +60,10 @@ struct tss_struct doublefault_tss __cacheline_aligned = {
+@@ -59,10 +59,10 @@ struct tss_struct doublefault_tss __cacheline_aligned = {
                /* 0x2 bit is always set */
                .flags          = X86_EFLAGS_SF | 0x2,
                .sp             = STACK_START,
@@ -21356,7 +21863,7 @@ index addb207..99635fa 100644
 +EXPORT_SYMBOL(pax_check_alloca);
 +#endif
 diff --git a/arch/x86/kernel/e820.c b/arch/x86/kernel/e820.c
-index 174da5f..5e55606 100644
+index 988c00a..4f673b6 100644
 --- 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)
@@ -23409,10 +23916,10 @@ index 1e96c36..3ff710a 100644
  /*
   * End of kprobes section
 diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
-index d4bdd25..912664c 100644
+index e625319..b9abb9d 100644
 --- a/arch/x86/kernel/ftrace.c
 +++ b/arch/x86/kernel/ftrace.c
-@@ -105,6 +105,8 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
+@@ -104,6 +104,8 @@ ftrace_modify_code_direct(unsigned long ip, unsigned const char *old_code,
  {
        unsigned char replaced[MCOUNT_INSN_SIZE];
  
@@ -23421,25 +23928,16 @@ index d4bdd25..912664c 100644
        /*
         * Note: Due to modules and __init, code can
         *  disappear and change, we need to protect against faulting
-@@ -227,7 +229,7 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
-       unsigned char old[MCOUNT_INSN_SIZE], *new;
+@@ -229,7 +231,7 @@ static int update_ftrace_func(unsigned long ip, void *new)
+       unsigned char old[MCOUNT_INSN_SIZE];
        int ret;
  
--      memcpy(old, &ftrace_call, MCOUNT_INSN_SIZE);
-+      memcpy(old, (void *)ktla_ktva((unsigned long)ftrace_call), MCOUNT_INSN_SIZE);
-       new = ftrace_call_replace(ip, (unsigned long)func);
+-      memcpy(old, (void *)ip, MCOUNT_INSN_SIZE);
++      memcpy(old, (void *)ktla_ktva(ip), MCOUNT_INSN_SIZE);
  
-       /* See comment above by declaration of modifying_ftrace_code */
-@@ -238,7 +240,7 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
-       /* Also update the regs callback function */
-       if (!ret) {
-               ip = (unsigned long)(&ftrace_regs_call);
--              memcpy(old, &ftrace_regs_call, MCOUNT_INSN_SIZE);
-+              memcpy(old, ktla_ktva((void *)&ftrace_regs_call), MCOUNT_INSN_SIZE);
-               new = ftrace_call_replace(ip, (unsigned long)func);
-               ret = ftrace_modify_code(ip, old, new);
-       }
-@@ -291,7 +293,7 @@ static int ftrace_write(unsigned long ip, const char *val, int size)
+       ftrace_update_func = ip;
+       /* Make sure the breakpoints see the ftrace_update_func update */
+@@ -306,7 +308,7 @@ static int ftrace_write(unsigned long ip, const char *val, int size)
         * kernel identity mapping to modify code.
         */
        if (within(ip, (unsigned long)_text, (unsigned long)_etext))
@@ -23448,7 +23946,7 @@ index d4bdd25..912664c 100644
  
        return probe_kernel_write((void *)ip, val, size);
  }
-@@ -301,7 +303,7 @@ static int add_break(unsigned long ip, const char *old)
+@@ -316,7 +318,7 @@ static int add_break(unsigned long ip, const char *old)
        unsigned char replaced[MCOUNT_INSN_SIZE];
        unsigned char brk = BREAKPOINT_INSTRUCTION;
  
@@ -23457,7 +23955,7 @@ index d4bdd25..912664c 100644
                return -EFAULT;
  
        /* Make sure it is what we expect it to be */
-@@ -649,7 +651,7 @@ ftrace_modify_code(unsigned long ip, unsigned const char *old_code,
+@@ -664,7 +666,7 @@ ftrace_modify_code(unsigned long ip, unsigned const char *old_code,
        return ret;
  
   fail_update:
@@ -23466,15 +23964,6 @@ index d4bdd25..912664c 100644
        goto out;
  }
  
-@@ -682,6 +684,8 @@ static int ftrace_mod_jmp(unsigned long ip,
- {
-       unsigned char code[MCOUNT_INSN_SIZE];
-+      ip = ktla_ktva(ip);
-+
-       if (probe_kernel_read(code, (void *)ip, MCOUNT_INSN_SIZE))
-               return -EFAULT;
 diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c
 index 85126cc..1bbce17 100644
 --- a/arch/x86/kernel/head64.c
@@ -23529,7 +24018,7 @@ index 85126cc..1bbce17 100644
        init_level4_pgt[511] = early_level4_pgt[511];
  
 diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
-index 81ba276..30c5411 100644
+index f36bd42..56ee1534 100644
 --- a/arch/x86/kernel/head_32.S
 +++ b/arch/x86/kernel/head_32.S
 @@ -26,6 +26,12 @@
@@ -23752,16 +24241,16 @@ index 81ba276..30c5411 100644
        movw %cx, 8 * GDT_ENTRY_STACK_CANARY + 2(%eax)
        shrl $16, %ecx
        movb %cl, 8 * GDT_ENTRY_STACK_CANARY + 4(%eax)
-@@ -544,7 +629,7 @@ ENDPROC(early_idt_handlers)
-       /* This is global to keep gas from relaxing the jumps */
- ENTRY(early_idt_handler)
-       cld
+@@ -548,7 +633,7 @@ ENTRY(early_idt_handler)
+       cmpl $2,(%esp)          # X86_TRAP_NMI
+       je is_nmi               # Ignore NMI
 -      cmpl $2,%ss:early_recursion_flag
 +      cmpl $1,%ss:early_recursion_flag
        je hlt_loop
        incl %ss:early_recursion_flag
  
-@@ -582,8 +667,8 @@ ENTRY(early_idt_handler)
+@@ -586,8 +671,8 @@ ENTRY(early_idt_handler)
        pushl (20+6*4)(%esp)    /* trapno */
        pushl $fault_msg
        call printk
@@ -23771,7 +24260,7 @@ index 81ba276..30c5411 100644
  hlt_loop:
        hlt
        jmp hlt_loop
-@@ -602,8 +687,11 @@ ENDPROC(early_idt_handler)
+@@ -607,8 +692,11 @@ ENDPROC(early_idt_handler)
  /* This is the default interrupt "handler" :-) */
        ALIGN
  ignore_int:
@@ -23784,7 +24273,7 @@ index 81ba276..30c5411 100644
        pushl %eax
        pushl %ecx
        pushl %edx
-@@ -612,9 +700,6 @@ ignore_int:
+@@ -617,9 +705,6 @@ ignore_int:
        movl $(__KERNEL_DS),%eax
        movl %eax,%ds
        movl %eax,%es
@@ -23794,7 +24283,7 @@ index 81ba276..30c5411 100644
        pushl 16(%esp)
        pushl 24(%esp)
        pushl 32(%esp)
-@@ -648,29 +733,34 @@ ENTRY(setup_once_ref)
+@@ -653,29 +738,34 @@ ENTRY(setup_once_ref)
  /*
   * BSS section
   */
@@ -23834,7 +24323,7 @@ index 81ba276..30c5411 100644
  ENTRY(initial_page_table)
        .long   pa(initial_pg_pmd+PGD_IDENT_ATTR),0     /* low identity map */
  # if KPMDS == 3
-@@ -689,12 +779,20 @@ ENTRY(initial_page_table)
+@@ -694,12 +784,20 @@ ENTRY(initial_page_table)
  #  error "Kernel PMDs should be 1, 2 or 3"
  # endif
        .align PAGE_SIZE                /* needs to be page-sized too */
@@ -23856,7 +24345,7 @@ index 81ba276..30c5411 100644
  
  __INITRODATA
  int_msg:
-@@ -722,7 +820,7 @@ fault_msg:
+@@ -727,7 +825,7 @@ fault_msg:
   * segment size, and 32-bit linear address value:
   */
  
@@ -23865,7 +24354,7 @@ index 81ba276..30c5411 100644
  .globl boot_gdt_descr
  .globl idt_descr
  
-@@ -731,7 +829,7 @@ fault_msg:
+@@ -736,7 +834,7 @@ fault_msg:
        .word 0                         # 32 bit align gdt_desc.address
  boot_gdt_descr:
        .word __BOOT_DS+7