OSDN Git Service

Merge tag 'asm-generic-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Mar 2022 01:03:08 +0000 (18:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 24 Mar 2022 01:03:08 +0000 (18:03 -0700)
Pull asm-generic updates from Arnd Bergmann:
 "There are three sets of updates for 5.18 in the asm-generic tree:

   - The set_fs()/get_fs() infrastructure gets removed for good.

     This was already gone from all major architectures, but now we can
     finally remove it everywhere, which loses some particularly tricky
     and error-prone code. There is a small merge conflict against a
     parisc cleanup, the solution is to use their new version.

   - The nds32 architecture ends its tenure in the Linux kernel.

     The hardware is still used and the code is in reasonable shape, but
     the mainline port is not actively maintained any more, as all
     remaining users are thought to run vendor kernels that would never
     be updated to a future release.

   - A series from Masahiro Yamada cleans up some of the uapi header
     files to pass the compile-time checks"

* tag 'asm-generic-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/asm-generic: (27 commits)
  nds32: Remove the architecture
  uaccess: remove CONFIG_SET_FS
  ia64: remove CONFIG_SET_FS support
  sh: remove CONFIG_SET_FS support
  sparc64: remove CONFIG_SET_FS support
  lib/test_lockup: fix kernel pointer check for separate address spaces
  uaccess: generalize access_ok()
  uaccess: fix type mismatch warnings from access_ok()
  arm64: simplify access_ok()
  m68k: fix access_ok for coldfire
  MIPS: use simpler access_ok()
  MIPS: Handle address errors for accesses above CPU max virtual user address
  uaccess: add generic __{get,put}_kernel_nofault
  nios2: drop access_ok() check from __put_user()
  x86: use more conventional access_ok() definition
  x86: remove __range_not_ok()
  sparc64: add __{get,put}_kernel_nofault()
  nds32: fix access_ok() checks in get/put_user
  uaccess: fix nios2 and microblaze get_user_8()
  sparc64: fix building assembly files
  ...

24 files changed:
1  2 
MAINTAINERS
arch/Kconfig
arch/alpha/Kconfig
arch/arm/kernel/traps.c
arch/arm64/kernel/traps.c
arch/ia64/Kconfig
arch/ia64/include/asm/thread_info.h
arch/microblaze/Kconfig
arch/parisc/Kconfig
arch/parisc/include/asm/uaccess.h
arch/parisc/kernel/signal.c
arch/powerpc/lib/sstep.c
arch/s390/Kconfig
arch/sh/Kconfig
arch/xtensa/Kconfig
drivers/clocksource/Kconfig
drivers/irqchip/Makefile
fs/exec.c
include/linux/uaccess.h
kernel/events/core.c
kernel/exit.c
kernel/kthread.c
mm/maccess.c
mm/memory.c

diff --combined MAINTAINERS
@@@ -389,11 -389,11 +389,11 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    drivers/acpi/arm64
  
 -ACPI I2C MULTI INSTANTIATE DRIVER
 +ACPI SERIAL MULTI INSTANTIATE DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 -F:    drivers/platform/x86/i2c-multi-instantiate.c
 +F:    drivers/platform/x86/serial-multi-instantiate.c
  
  ACPI PCC(Platform Communication Channel) MAILBOX DRIVER
  M:    Sudeep Holla <sudeep.holla@arm.com>
@@@ -1002,7 -1002,6 +1002,7 @@@ L:      linux-pm@vger.kernel.or
  S:    Supported
  F:    Documentation/admin-guide/pm/amd-pstate.rst
  F:    drivers/cpufreq/amd-pstate*
 +F:    tools/power/x86/amd_pstate_tracer/amd_pstate_trace.py
  
  AMD PTDMA DRIVER
  M:    Sanjay R Mehta <sanju.mehta@amd.com>
@@@ -1032,15 -1031,6 +1032,15 @@@ S:    Maintaine
  F:    Documentation/hid/amd-sfh*
  F:    drivers/hid/amd-sfh-hid/
  
 +AMPHION VPU CODEC V4L2 DRIVER
 +M:    Ming Qian <ming.qian@nxp.com>
 +M:    Shijie Qin <shijie.qin@nxp.com>
 +M:    Zhou Peng <eagle.zhou@nxp.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/amphion,vpu.yaml
 +F:    drivers/media/platform/amphion/
 +
  AMS AS73211 DRIVER
  M:    Christian Eggers <ceggers@arri.de>
  L:    linux-iio@vger.kernel.org
@@@ -1239,18 -1229,6 +1239,6 @@@ S:     Supporte
  F:    drivers/clk/analogbits/*
  F:    include/linux/clk/analogbits*
  
- ANDES ARCHITECTURE
- M:    Nick Hu <nickhu@andestech.com>
- M:    Greentime Hu <green.hu@gmail.com>
- M:    Vincent Chen <deanbo422@gmail.com>
- S:    Supported
- T:    git https://git.kernel.org/pub/scm/linux/kernel/git/greentime/linux.git
- F:    Documentation/devicetree/bindings/interrupt-controller/andestech,ativic32.txt
- F:    Documentation/devicetree/bindings/nds32/
- F:    arch/nds32/
- N:    nds32
- K:    nds32
  ANDROID CONFIG FRAGMENTS
  M:    Rob Herring <robh@kernel.org>
  S:    Supported
@@@ -1630,7 -1608,6 +1618,7 @@@ M:      Olof Johansson <olof@lixom.net
  M:    soc@kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +C:    irc://irc.libera.chat/armlinux
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
  F:    arch/arm/boot/dts/Makefile
  F:    arch/arm64/boot/dts/Makefile
  ARM SUB-ARCHITECTURES
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +C:    irc://irc.libera.chat/armlinux
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
  F:    arch/arm/mach-*/
  F:    arch/arm/plat-*/
@@@ -1779,7 -1755,7 +1767,7 @@@ T:      git https://github.com/AsahiLinux/li
  F:    Documentation/devicetree/bindings/arm/apple.yaml
  F:    Documentation/devicetree/bindings/arm/apple/*
  F:    Documentation/devicetree/bindings/i2c/apple,i2c.yaml
 -F:    Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/apple,*
  F:    Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
  F:    Documentation/devicetree/bindings/pci/apple,pcie.yaml
  F:    Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
@@@ -1792,7 -1768,6 +1780,7 @@@ F:      drivers/irqchip/irq-apple-aic.
  F:    drivers/mailbox/apple-mailbox.c
  F:    drivers/pinctrl/pinctrl-apple-gpio.c
  F:    drivers/soc/apple/*
 +F:    drivers/watchdog/apple_wdt.c
  F:    include/dt-bindings/interrupt-controller/apple-aic.h
  F:    include/dt-bindings/pinctrl/apple.h
  F:    include/linux/apple-mailbox.h
@@@ -2264,7 -2239,7 +2252,7 @@@ F:      drivers/phy/mediatek
  ARM/Microchip (AT91) SoC support
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
  M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
 -M:    Ludovic Desroches <ludovic.desroches@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@microchip.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  W:    http://www.linux4sam.org
@@@ -2582,14 -2557,11 +2570,14 @@@ F:   sound/soc/rockchip
  N:    rockchip
  
  ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +R:    Alim Akhtar <alim.akhtar@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 +C:    irc://irc.libera.chat/linux-exynos
  Q:    https://patchwork.kernel.org/project/linux-samsung-soc/list/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
  F:    Documentation/arm/samsung/
  F:    Documentation/devicetree/bindings/arm/samsung/
  F:    Documentation/devicetree/bindings/power/pd-samsung.yaml
@@@ -2624,7 -2596,7 +2612,7 @@@ M:      Ćukasz Stelmach <l.stelmach@samsung
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s5p-g2d/
 +F:    drivers/media/platform/samsung/s5p-g2d/
  
  ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT
  M:    Marek Szyprowski <m.szyprowski@samsung.com>
@@@ -2641,7 -2613,7 +2629,7 @@@ M:      Sylwester Nawrocki <s.nawrocki@samsu
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s5p-jpeg/
 +F:    drivers/media/platform/samsung/s5p-jpeg/
  
  ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
  M:    Marek Szyprowski <m.szyprowski@samsung.com>
@@@ -2649,7 -2621,7 +2637,7 @@@ M:      Andrzej Hajda <andrzej.hajda@intel.c
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s5p-mfc/
 +F:    drivers/media/platform/samsung/s5p-mfc/
  
  ARM/SHMOBILE ARM ARCHITECTURE
  M:    Geert Uytterhoeven <geert+renesas@glider.be>
@@@ -2718,7 -2690,7 +2706,7 @@@ F:      drivers/clocksource/clksrc_st_lpc.
  F:    drivers/cpufreq/sti-cpufreq.c
  F:    drivers/dma/st_fdma*
  F:    drivers/i2c/busses/i2c-st.c
 -F:    drivers/media/platform/sti/c8sectpfe/
 +F:    drivers/media/platform/st/sti/c8sectpfe/
  F:    drivers/media/rc/st_rc.c
  F:    drivers/mmc/host/sdhci-st.c
  F:    drivers/phy/st/phy-miphy28lp.c
@@@ -2749,7 -2721,7 +2737,7 @@@ N:      stm3
  N:    stm
  
  ARM/Synaptics SoC support
 -M:    Jisheng Zhang <Jisheng.Zhang@synaptics.com>
 +M:    Jisheng Zhang <jszhang@kernel.org>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -3034,7 -3006,7 +3022,7 @@@ L:      linux-media@vger.kernel.or
  L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/aspeed-video.txt
 -F:    drivers/media/platform/aspeed-video.c
 +F:    drivers/media/platform/aspeed/
  
  ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
  M:    Corentin Chary <corentin.chary@gmail.com>
@@@ -3066,12 -3038,6 +3054,12 @@@ L:    linux-hwmon@vger.kernel.or
  S:    Maintained
  F:    drivers/hwmon/asus_wmi_ec_sensors.c
  
 +ASUS EC HARDWARE MONITOR DRIVER
 +M:    Eugene Shalygin <eugene.shalygin@gmail.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hwmon/asus-ec-sensors.c
 +
  ASUS WIRELESS RADIO CONTROL DRIVER
  M:    JoĂŁo Paulo Rechi Vita <jprvita@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -3155,9 -3121,11 +3143,9 @@@ W:     https://wireless.wiki.kernel.org/en/
  F:    drivers/net/wireless/ath/ath5k/
  
  ATHEROS ATH6KL WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@kernel.org>
  L:    linux-wireless@vger.kernel.org
 -S:    Supported
 +S:    Orphan
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath6kl
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
  F:    drivers/net/wireless/ath/ath6kl/
  
  ATI_REMOTE2 DRIVER
@@@ -3214,7 -3182,6 +3202,7 @@@ ATOMIC INFRASTRUCTUR
  M:    Will Deacon <will@kernel.org>
  M:    Peter Zijlstra <peterz@infradead.org>
  R:    Boqun Feng <boqun.feng@gmail.com>
 +R:    Mark Rutland <mark.rutland@arm.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    arch/*/include/asm/atomic*.h
@@@ -3396,7 -3363,7 +3384,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/sti/bdisp
 +F:    drivers/media/platform/st/sti/bdisp
  
  BECKHOFF CX5020 ETHERCAT MASTER DRIVER
  M:    Dariusz Marcinkiewicz <reksio@newterm.pl>
@@@ -3457,7 -3424,6 +3445,7 @@@ F:      Documentation/ABI/stable/sysfs-bloc
  F:    Documentation/block/
  F:    block/
  F:    drivers/block/
 +F:    include/linux/bio.h
  F:    include/linux/blk*
  F:    kernel/trace/blktrace.c
  F:    lib/sbitmap.c
@@@ -3923,7 -3889,7 +3911,7 @@@ M:      Scott Branden <sbranden@broadcom.com
  M:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://github.com/broadcom/cygnus-linux.git
 +T:    git git://github.com/broadcom/stblinux.git
  F:    arch/arm64/boot/dts/broadcom/northstar2/*
  F:    arch/arm64/boot/dts/broadcom/stingray/*
  F:    drivers/clk/bcm/clk-ns*
@@@ -4261,7 -4227,7 +4249,7 @@@ L:      linux-media@vger.kernel.or
  S:    Orphan
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/admin-guide/media/cafe_ccic*
 -F:    drivers/media/platform/marvell-ccic/
 +F:    drivers/media/platform/marvell/
  
  CAIF NETWORK LAYER
  L:    netdev@vger.kernel.org
@@@ -4565,7 -4531,6 +4553,7 @@@ F:      drivers/platform/chrome
  
  CHROMEOS EC CODEC DRIVER
  M:    Cheng-Yi Chiang <cychiang@chromium.org>
 +M:    Tzung-Bi Shih <tzungbi@google.com>
  R:    Guenter Roeck <groeck@chromium.org>
  S:    Maintained
  F:    Documentation/devicetree/bindings/sound/google,cros-ec-codec.yaml
@@@ -4785,7 -4750,7 +4773,7 @@@ M:      Philipp Zabel <p.zabel@pengutronix.d
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/coda.yaml
 -F:    drivers/media/platform/coda/
 +F:    drivers/media/platform/chips-media/
  
  CODE OF CONDUCT
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
@@@ -4931,8 -4896,7 +4919,8 @@@ F:      kernel/cgroup/cpuset.
  CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
  M:    Johannes Weiner <hannes@cmpxchg.org>
  M:    Michal Hocko <mhocko@kernel.org>
 -M:    Vladimir Davydov <vdavydov.dev@gmail.com>
 +M:    Roman Gushchin <roman.gushchin@linux.dev>
 +M:    Shakeel Butt <shakeelb@google.com>
  L:    cgroups@vger.kernel.org
  L:    linux-mm@kvack.org
  S:    Maintained
@@@ -5335,7 -5299,6 +5323,7 @@@ DATA ACCESS MONITO
  M:    SeongJae Park <sj@kernel.org>
  L:    linux-mm@kvack.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-kernel-mm-damon
  F:    Documentation/admin-guide/mm/damon/
  F:    Documentation/vm/damon/
  F:    include/linux/damon.h
@@@ -5429,7 -5392,6 +5417,7 @@@ F:      drivers/platform/x86/dell/dell-rbtn.
  DELL LAPTOP SMM DRIVER
  M:    Pali RohĂĄr <pali@kernel.org>
  S:    Maintained
 +F:    Documentation/ABI/obsolete/procfs-i8k
  F:    drivers/hwmon/dell-smm-hwmon.c
  F:    include/uapi/linux/i8k.h
  
@@@ -5499,7 -5461,7 +5487,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/sti/delta
 +F:    drivers/media/platform/st/sti/delta
  
  DELTA AHE-50DC FAN CONTROL MODULE DRIVER
  M:    Zev Weiss <zev@bewilderbeest.net>
@@@ -5798,7 -5760,7 +5786,7 @@@ F:      tools/testing/selftests/dma
  
  DMA-BUF HEAPS FRAMEWORK
  M:    Sumit Semwal <sumit.semwal@linaro.org>
 -R:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 +R:    Benjamin Gaignard <benjamin.gaignard@collabora.com>
  R:    Liam Mark <lmark@codeaurora.org>
  R:    Laura Abbott <labbott@redhat.com>
  R:    Brian Starkey <Brian.Starkey@arm.com>
@@@ -6327,8 -6289,8 +6315,8 @@@ T:      git git://anongit.freedesktop.org/dr
  F:    drivers/gpu/drm/vboxvideo/
  
  DRM DRIVER FOR VMWARE VIRTUAL GPU
 -M:    "VMware Graphics" <linux-graphics-maintainer@vmware.com>
  M:    Zack Rusin <zackr@vmware.com>
 +R:    VMware Graphics Reviewers <linux-graphics-maintainer@vmware.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6528,7 -6490,7 +6516,7 @@@ F:      Documentation/devicetree/bindings/di
  F:    drivers/gpu/drm/rockchip/
  
  DRM DRIVERS FOR STI
 -M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 +M:    Alain Volmat <alain.volmat@foss.st.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6537,8 -6499,8 +6525,8 @@@ F:      drivers/gpu/drm/st
  
  DRM DRIVERS FOR STM
  M:    Yannick Fertre <yannick.fertre@foss.st.com>
 +M:    Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com>
  M:    Philippe Cornu <philippe.cornu@foss.st.com>
 -M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -7032,6 -6994,12 +7020,6 @@@ L:     linux-edac@vger.kernel.or
  S:    Maintained
  F:    drivers/edac/sb_edac.c
  
 -EDAC-SIFIVE
 -M:    Yash Shah <yash.shah@sifive.com>
 -L:    linux-edac@vger.kernel.org
 -S:    Supported
 -F:    drivers/edac/sifive_edac.c
 -
  EDAC-SKYLAKE
  M:    Tony Luck <tony.luck@intel.com>
  L:    linux-edac@vger.kernel.org
@@@ -7202,7 -7170,7 +7190,7 @@@ F:      drivers/net/can/usb/etas_es58x
  
  ETHERNET BRIDGE
  M:    Roopa Prabhu <roopa@nvidia.com>
 -M:    Nikolay Aleksandrov <nikolay@nvidia.com>
 +M:    Nikolay Aleksandrov <razor@blackwall.org>
  L:    bridge@lists.linux-foundation.org (moderated for non-subscribers)
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -7245,9 -7213,6 +7233,9 @@@ F:      net/core/of_net.
  EXEC & BINFMT API
  R:    Eric Biederman <ebiederm@xmission.com>
  R:    Kees Cook <keescook@chromium.org>
 +L:    linux-mm@kvack.org
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/execve
  F:    arch/alpha/kernel/binfmt_loader.c
  F:    arch/x86/ia32/ia32_aout.c
  F:    fs/*binfmt_*.c
@@@ -7255,7 -7220,6 +7243,7 @@@ F:      fs/exec.
  F:    include/linux/binfmts.h
  F:    include/linux/elf.h
  F:    include/uapi/linux/binfmts.h
 +F:    include/uapi/linux/elf.h
  F:    tools/testing/selftests/exec/
  N:    asm/elf.h
  N:    binfmt
@@@ -7291,9 -7255,7 +7279,9 @@@ Extended Verification Module (EVM
  M:    Mimi Zohar <zohar@linux.ibm.com>
  L:    linux-integrity@vger.kernel.org
  S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git
  F:    security/integrity/evm/
 +F:    security/integrity/
  
  EXTENSIBLE FIRMWARE INTERFACE (EFI)
  M:    Ard Biesheuvel <ardb@kernel.org>
@@@ -7601,12 -7563,6 +7589,12 @@@ S:    Maintaine
  W:    http://floatingpoint.sourceforge.net/emulator/index.html
  F:    arch/x86/math-emu/
  
 +FRAMEBUFFER CORE
 +M:    Daniel Vetter <daniel@ffwll.ch>
 +F:    drivers/video/fbdev/core/
 +S:    Odd Fixes
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +
  FRAMEBUFFER LAYER
  M:    Helge Deller <deller@gmx.de>
  L:    linux-fbdev@vger.kernel.org
@@@ -7770,7 -7726,8 +7758,7 @@@ M:      Qiang Zhao <qiang.zhao@nxp.com
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/soc/fsl/qe/
 -F:    include/soc/fsl/*qe*.h
 -F:    include/soc/fsl/*ucc*.h
 +F:    include/soc/fsl/qe/
  
  FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
  M:    Li Yang <leoyang.li@nxp.com>
@@@ -7801,7 -7758,6 +7789,7 @@@ F:      Documentation/devicetree/bindings/mi
  F:    Documentation/devicetree/bindings/soc/fsl/
  F:    drivers/soc/fsl/
  F:    include/linux/fsl/
 +F:    include/soc/fsl/
  
  FREESCALE SOC FS_ENET DRIVER
  M:    Pantelis Antoniou <pantelis.antoniou@gmail.com>
@@@ -7812,10 -7768,10 +7800,10 @@@ F:   drivers/net/ethernet/freescale/fs_en
  F:    include/linux/fs_enet_pd.h
  
  FREESCALE SOC SOUND DRIVERS
 -M:    Nicolin Chen <nicoleotsuka@gmail.com>
 +M:    Shengjiu Wang <shengjiu.wang@gmail.com>
  M:    Xiubo Li <Xiubo.Lee@gmail.com>
  R:    Fabio Estevam <festevam@gmail.com>
 -R:    Shengjiu Wang <shengjiu.wang@gmail.com>
 +R:    Nicolin Chen <nicoleotsuka@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
@@@ -8669,7 -8625,7 +8657,7 @@@ S:      Maintaine
  F:    drivers/gpio/gpio-hisi.c
  
  HISILICON HIGH PERFORMANCE RSA ENGINE DRIVER (HPRE)
 -M:    Zaibo Xu <xuzaibo@huawei.com>
 +M:    Longfang Liu <liulongfang@huawei.com>
  L:    linux-crypto@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/debugfs-hisi-hpre
@@@ -8749,8 -8705,8 +8737,8 @@@ F:      Documentation/devicetree/bindings/sc
  F:    drivers/scsi/hisi_sas/
  
  HISILICON SECURITY ENGINE V2 DRIVER (SEC2)
 -M:    Zaibo Xu <xuzaibo@huawei.com>
  M:    Kai Ye <yekai13@huawei.com>
 +M:    Longfang Liu <liulongfang@huawei.com>
  L:    linux-crypto@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/debugfs-hisi-sec
@@@ -8781,7 -8737,7 +8769,7 @@@ F:      Documentation/devicetree/bindings/mf
  F:    drivers/mfd/hi6421-spmi-pmic.c
  
  HISILICON TRUE RANDOM NUMBER GENERATOR V2 SUPPORT
 -M:    Zaibo Xu <xuzaibo@huawei.com>
 +M:    Weili Qian <qianweili@huawei.com>
  S:    Maintained
  F:    drivers/crypto/hisilicon/trng/trng.c
  
@@@ -8895,7 -8851,7 +8883,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/sti/hva
 +F:    drivers/media/platform/st/sti/hva
  
  HWPOISON MEMORY FAILURE HANDLING
  M:    Naoya Horiguchi <naoya.horiguchi@nec.com>
@@@ -8930,12 -8886,6 +8918,12 @@@ L:    linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/i2c/hi846.c
  
 +HYNIX HI847 SENSOR DRIVER
 +M:    Shawn Tu <shawnx.tu@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/hi847.c
 +
  Hyper-V/Azure CORE AND DRIVERS
  M:    "K. Y. Srinivasan" <kys@microsoft.com>
  M:    Haiyang Zhang <haiyangz@microsoft.com>
@@@ -9290,15 -9240,6 +9278,15 @@@ S:    Maintaine
  W:    https://github.com/o2genum/ideapad-slidebar
  F:    drivers/input/misc/ideapad_slidebar.c
  
 +IDMAPPED MOUNTS
 +M:    Christian Brauner <brauner@kernel.org>
 +L:    linux-fsdevel@vger.kernel.org
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/brauner/linux.git
 +F:    Documentation/filesystems/idmappings.rst
 +F:    tools/testing/selftests/mount_setattr/
 +F:    include/linux/mnt_idmapping.h
 +
  IDT VersaClock 5 CLOCK DRIVER
  M:    Luca Ceresoli <luca@lucaceresoli.net>
  S:    Maintained
@@@ -9556,7 -9497,6 +9544,7 @@@ L:      linux-integrity@vger.kernel.or
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git
  F:    security/integrity/ima/
 +F:    security/integrity/
  
  INTEL 810/815 FRAMEBUFFER DRIVER
  M:    Antonino Daplas <adaplas@gmail.com>
@@@ -10050,14 -9990,6 +10038,14 @@@ L:  linux-iio@vger.kernel.or
  F:    Documentation/devicetree/bindings/counter/interrupt-counter.yaml
  F:    drivers/counter/interrupt-cnt.c
  
 +INTERSIL ISL7998X VIDEO DECODER DRIVER
 +M:    Michael Tretter <m.tretter@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/isil,isl79987.yaml
 +F:    drivers/media/i2c/isl7998x.c
 +
  INVENSENSE ICM-426xx IMU DRIVER
  M:    Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
  L:    linux-iio@vger.kernel.org
@@@ -10357,7 -10289,7 +10345,7 @@@ M:   Mikhail Ulyanov <mikhail.ulyanov@cog
  L:    linux-media@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/rcar_jpu.c
 +F:    drivers/media/platform/renesas/rcar_jpu.c
  
  JSM Neo PCI based serial card
  L:    linux-serial@vger.kernel.org
@@@ -10496,8 -10428,6 +10484,8 @@@ KERNEL REGRESSION
  M:    Thorsten Leemhuis <linux@leemhuis.info>
  L:    regressions@lists.linux.dev
  S:    Supported
 +F:    Documentation/admin-guide/reporting-regressions.rst
 +F:    Documentation/process/handling-regressions.rst
  
  KERNEL SELFTEST FRAMEWORK
  M:    Shuah Khan <shuah@kernel.org>
@@@ -10703,14 -10633,6 +10691,14 @@@ F: include/linux/keyctl.
  F:    include/uapi/linux/keyctl.h
  F:    security/keys/
  
 +KEYS/KEYRINGS_INTEGRITY
 +M:    Jarkko Sakkinen <jarkko@kernel.org>
 +M:    Mimi Zohar <zohar@linux.ibm.com>
 +L:    linux-integrity@vger.kernel.org
 +L:    keyrings@vger.kernel.org
 +S:    Supported
 +F:    security/integrity/platform_certs
 +
  KFENCE
  M:    Alexander Potapenko <glider@google.com>
  M:    Marco Elver <elver@google.com>
@@@ -11181,17 -11103,12 +11169,17 @@@ F:        lib/list-test.
  LITEX PLATFORM
  M:    Karol Gugala <kgugala@antmicro.com>
  M:    Mateusz Holenko <mholenko@antmicro.com>
 +M:    Gabriel Somlo <gsomlo@gmail.com>
 +M:    Joel Stanley <joel@jms.id.au>
  S:    Maintained
  F:    Documentation/devicetree/bindings/*/litex,*.yaml
  F:    arch/openrisc/boot/dts/or1klitex.dts
 -F:    drivers/soc/litex/litex_soc_ctrl.c
 -F:    drivers/tty/serial/liteuart.c
  F:    include/linux/litex.h
 +F:    drivers/tty/serial/liteuart.c
 +F:    drivers/soc/litex/*
 +F:    drivers/net/ethernet/litex/*
 +F:    drivers/mmc/host/litex_mmc.c
 +N:    litex
  
  LIVE PATCHING
  M:    Josh Poimboeuf <jpoimboe@redhat.com>
@@@ -11731,7 -11648,7 +11719,7 @@@ F:   drivers/iio/proximity/mb1232.
  
  MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS
  R:    Iskren Chernev <iskren.chernev@gmail.com>
 -R:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +R:    Krzysztof Kozlowski <krzk@kernel.org>
  R:    Marek Szyprowski <m.szyprowski@samsung.com>
  R:    Matheus Castello <matheus@castello.eng.br>
  L:    linux-pm@vger.kernel.org
@@@ -11741,7 -11658,7 +11729,7 @@@ F:   drivers/power/supply/max17040_batter
  
  MAXIM MAX17042 FAMILY FUEL GAUGE DRIVERS
  R:    Hans de Goede <hdegoede@redhat.com>
 -R:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +R:    Krzysztof Kozlowski <krzk@kernel.org>
  R:    Marek Szyprowski <m.szyprowski@samsung.com>
  R:    Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
  R:    Purism Kernel Team <kernel@puri.sm>
@@@ -11775,7 -11692,7 +11763,7 @@@ MAXIM MAX77802 PMIC REGULATOR DEVICE DR
  M:    Javier Martinez Canillas <javier@dowhile0.org>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/*/*max77802.txt
 +F:    Documentation/devicetree/bindings/*/*max77802.yaml
  F:    drivers/regulator/max77802-regulator.c
  F:    include/dt-bindings/*/*max77802.h
  
@@@ -11786,26 -11703,23 +11774,26 @@@ F:        Documentation/devicetree/bindings/po
  F:    drivers/power/supply/max77976_charger.c
  
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/power/supply/maxim,max14577.yaml
  F:    drivers/power/supply/max14577_charger.c
  F:    drivers/power/supply/max77693_charger.c
  
  MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/*/maxim,max14577.yaml
  F:    Documentation/devicetree/bindings/*/maxim,max77686.yaml
 +F:    Documentation/devicetree/bindings/*/maxim,max77843.yaml
  F:    Documentation/devicetree/bindings/clock/maxim,max77686.txt
 -F:    Documentation/devicetree/bindings/mfd/max14577.txt
  F:    Documentation/devicetree/bindings/mfd/max77693.txt
 +F:    drivers/*/*max77843.c
  F:    drivers/*/max14577*.c
  F:    drivers/*/max77686*.c
  F:    drivers/*/max77693*.c
@@@ -11901,7 -11815,7 +11889,7 @@@ M:   Philipp Zabel <p.zabel@pengutronix.d
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/imx-pxp.[ch]
 +F:    drivers/media/platform/nxp/imx-pxp.[ch]
  
  MEDIA DRIVERS FOR ASCOT2E
  M:    Sergey Kozlov <serjk@netup.ru>
@@@ -11966,10 -11880,10 +11954,10 @@@ L:        linux-media@vger.kernel.or
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/admin-guide/media/imx7.rst
 +F:    Documentation/devicetree/bindings/media/nxp,imx-mipi-csi2.yaml
  F:    Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml
 -F:    Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.yaml
 +F:    drivers/media/platform/imx/imx-mipi-csis.c
  F:    drivers/staging/media/imx/imx7-media-csi.c
 -F:    drivers/staging/media/imx/imx7-mipi-csis.c
  
  MEDIA DRIVERS FOR HELENE
  M:    Abylay Ospan <aospan@netup.ru>
@@@ -12024,7 -11938,7 +12012,7 @@@ L:   linux-tegra@vger.kernel.or
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt
 -F:    drivers/staging/media/tegra-vde/
 +F:    drivers/media/platform/nvidia/tegra-vde/
  
  MEDIA DRIVERS FOR RENESAS - CEU
  M:    Jacopo Mondi <jacopo@jmondi.org>
@@@ -12033,7 -11947,7 +12021,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,ceu.yaml
 -F:    drivers/media/platform/renesas-ceu.c
 +F:    drivers/media/platform/renesas/renesas-ceu.c
  F:    include/media/drv-intf/renesas-ceu.h
  
  MEDIA DRIVERS FOR RENESAS - DRIF
@@@ -12043,7 -11957,7 +12031,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,drif.yaml
 -F:    drivers/media/platform/rcar_drif.c
 +F:    drivers/media/platform/renesas/rcar_drif.c
  
  MEDIA DRIVERS FOR RENESAS - FCP
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@@@ -12052,7 -11966,7 +12040,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,fcp.yaml
 -F:    drivers/media/platform/rcar-fcp.c
 +F:    drivers/media/platform/renesas/rcar-fcp.c
  F:    include/media/rcar-fcp.h
  
  MEDIA DRIVERS FOR RENESAS - FDP1
@@@ -12062,7 -11976,7 +12050,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,fdp1.yaml
 -F:    drivers/media/platform/rcar_fdp1.c
 +F:    drivers/media/platform/renesas/rcar_fdp1.c
  
  MEDIA DRIVERS FOR RENESAS - VIN
  M:    Niklas Söderlund <niklas.soderlund@ragnatech.se>
@@@ -12073,8 -11987,8 +12061,8 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    Documentation/devicetree/bindings/media/renesas,csi2.yaml
  F:    Documentation/devicetree/bindings/media/renesas,isp.yaml
  F:    Documentation/devicetree/bindings/media/renesas,vin.yaml
 -F:    drivers/media/platform/rcar-isp.c
 -F:    drivers/media/platform/rcar-vin/
 +F:    drivers/media/platform/renesas/rcar-isp.c
 +F:    drivers/media/platform/renesas/rcar-vin/
  
  MEDIA DRIVERS FOR RENESAS - VSP1
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@@@ -12084,7 -11998,7 +12072,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,vsp1.yaml
 -F:    drivers/media/platform/vsp1/
 +F:    drivers/media/platform/renesas/vsp1/
  
  MEDIA DRIVERS FOR ST STV0910 DEMODULATOR ICs
  L:    linux-media@vger.kernel.org
@@@ -12106,7 -12020,7 +12094,7 @@@ L:   linux-media@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml
 -F:    drivers/media/platform/stm32/stm32-dcmi.c
 +F:    drivers/media/platform/st/stm32/stm32-dcmi.c
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
@@@ -12190,7 -12104,7 +12178,7 @@@ M:   Rick Chang <rick.chang@mediatek.com
  M:    Bin Liu <bin.liu@mediatek.com>
  S:    Supported
  F:    Documentation/devicetree/bindings/media/mediatek-jpeg-decoder.txt
 -F:    drivers/media/platform/mtk-jpeg/
 +F:    drivers/media/platform/mediatek/jpeg/
  
  MEDIATEK MDP DRIVER
  M:    Minghsiu Tsai <minghsiu.tsai@mediatek.com>
@@@ -12198,8 -12112,8 +12186,8 @@@ M:   Houlong Wei <houlong.wei@mediatek.co
  M:    Andrew-CT Chen <andrew-ct.chen@mediatek.com>
  S:    Supported
  F:    Documentation/devicetree/bindings/media/mediatek-mdp.txt
 -F:    drivers/media/platform/mtk-mdp/
 -F:    drivers/media/platform/mtk-vpu/
 +F:    drivers/media/platform/mediatek/mdp/
 +F:    drivers/media/platform/mediatek/vpu/
  
  MEDIATEK MEDIA DRIVER
  M:    Tiffany Lin <tiffany.lin@mediatek.com>
@@@ -12207,8 -12121,8 +12195,8 @@@ M:   Andrew-CT Chen <andrew-ct.chen@media
  S:    Supported
  F:    Documentation/devicetree/bindings/media/mediatek-vcodec.txt
  F:    Documentation/devicetree/bindings/media/mediatek-vpu.txt
 -F:    drivers/media/platform/mtk-vcodec/
 -F:    drivers/media/platform/mtk-vpu/
 +F:    drivers/media/platform/mediatek/vcodec/
 +F:    drivers/media/platform/mediatek/vpu/
  
  MEDIATEK MMC/SD/SDIO DRIVER
  M:    Chaotian Jing <chaotian.jing@mediatek.com>
@@@ -12487,7 -12401,7 +12475,7 @@@ F:   include/linux/memblock.
  F:    mm/memblock.c
  
  MEMORY CONTROLLER DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
@@@ -12583,7 -12497,7 +12571,7 @@@ L:   linux-amlogic@lists.infradead.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/amlogic,axg-ge2d.yaml
 -F:    drivers/media/platform/meson/ge2d/
 +F:    drivers/media/platform/amlogic/meson-ge2d/
  
  MESON NAND CONTROLLER DRIVER FOR AMLOGIC SOCS
  M:    Liang Yang <liang.yang@amlogic.com>
@@@ -12665,13 -12579,6 +12653,13 @@@ L: alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/atmel
  
 +MICROCHIP CSI2DC DRIVER
 +M:    Eugen Hristev <eugen.hristev@microchip.com>
 +L:    linux-media@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/media/microchip,csi2dc.yaml
 +F:    drivers/media/platform/atmel/microchip-csi2dc.c
 +
  MICROCHIP ECC DRIVER
  M:    Tudor Ambarus <tudor.ambarus@microchip.com>
  L:    linux-crypto@vger.kernel.org
@@@ -12697,8 -12604,11 +12685,8 @@@ L:  linux-media@vger.kernel.or
  S:    Supported
  F:    Documentation/devicetree/bindings/media/atmel,isc.yaml
  F:    Documentation/devicetree/bindings/media/microchip,xisc.yaml
 -F:    drivers/media/platform/atmel/atmel-isc-base.c
 -F:    drivers/media/platform/atmel/atmel-isc-regs.h
 -F:    drivers/media/platform/atmel/atmel-isc.h
 -F:    drivers/media/platform/atmel/atmel-sama5d2-isc.c
 -F:    drivers/media/platform/atmel/atmel-sama7g5-isc.c
 +F:    drivers/media/platform/atmel/atmel-isc*
 +F:    drivers/media/platform/atmel/atmel-sama*-isc*
  F:    include/linux/atmel-isc-media.h
  
  MICROCHIP ISI DRIVER
@@@ -13381,8 -13291,8 +13369,8 @@@ W:   http://www.iptables.org
  W:    http://www.nftables.org/
  Q:    http://patchwork.ozlabs.org/project/netfilter-devel/list/
  C:    irc://irc.libera.chat/netfilter
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf.git
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf-next.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/netfilter/nf-next.git
  F:    include/linux/netfilter*
  F:    include/linux/netfilter/
  F:    include/net/netfilter/
@@@ -13439,7 -13349,6 +13427,7 @@@ F:   net/core/drop_monitor.
  NETWORKING DRIVERS
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Jakub Kicinski <kuba@kernel.org>
 +M:    Paolo Abeni <pabeni@redhat.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  Q:    https://patchwork.kernel.org/project/netdevbpf/list/
@@@ -13486,7 -13395,6 +13474,7 @@@ F:   tools/testing/selftests/drivers/net/
  NETWORKING [GENERAL]
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Jakub Kicinski <kuba@kernel.org>
 +M:    Paolo Abeni <pabeni@redhat.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  Q:    https://patchwork.kernel.org/project/netdevbpf/list/
@@@ -13630,7 -13538,7 +13618,7 @@@ F:   include/uapi/linux/nexthop.
  F:    net/ipv4/nexthop.c
  
  NFC SUBSYSTEM
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-nfc@lists.01.org (subscribers-only)
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -13651,7 -13559,7 +13639,7 @@@ F:   tools/testing/selftests/nci
  
  NFS, SUNRPC, AND LOCKD CLIENTS
  M:    Trond Myklebust <trond.myklebust@hammerspace.com>
 -M:    Anna Schumaker <anna.schumaker@netapp.com>
 +M:    Anna Schumaker <anna@kernel.org>
  L:    linux-nfs@vger.kernel.org
  S:    Maintained
  W:    http://client.linux-nfs.org
@@@ -13764,7 -13672,7 +13752,7 @@@ F:   scripts/nsdep
  NTB AMD DRIVER
  M:    Sanjay R Mehta <sanju.mehta@amd.com>
  M:    Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  F:    drivers/ntb/hw/amd/
  
@@@ -13772,7 -13680,7 +13760,7 @@@ NTB DRIVER COR
  M:    Jon Mason <jdmason@kudzu.us>
  M:    Dave Jiang <dave.jiang@intel.com>
  M:    Allen Hubbe <allenbh@gmail.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  W:    https://github.com/jonmason/ntb/wiki
  T:    git git://github.com/jonmason/ntb.git
@@@ -13784,13 -13692,13 +13772,13 @@@ F:        tools/testing/selftests/ntb
  
  NTB IDT DRIVER
  M:    Serge Semin <fancer.lancer@gmail.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  F:    drivers/ntb/hw/idt/
  
  NTB INTEL DRIVER
  M:    Dave Jiang <dave.jiang@intel.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  W:    https://github.com/davejiang/linux/wiki
  T:    git https://github.com/davejiang/linux.git
@@@ -13944,7 -13852,7 +13932,7 @@@ F:   Documentation/devicetree/bindings/re
  F:    drivers/regulator/pf8x00-regulator.c
  
  NXP PTN5150A CC LOGIC AND EXTCON DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml
@@@ -14157,7 -14065,7 +14145,7 @@@ M:   Laurent Pinchart <laurent.pinchart@i
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/ti,omap3isp.txt
 -F:    drivers/media/platform/omap3isp/
 +F:    drivers/media/platform/ti/omap3isp/
  F:    drivers/staging/media/omap4iss/
  
  OMAP MMC SUPPORT
@@@ -14265,12 -14173,6 +14253,12 @@@ M: Harald Welte <laforge@gnumonks.org
  S:    Maintained
  F:    drivers/char/pcmcia/cm4040_cs.*
  
 +OMNIVISION OG01A1B SENSOR DRIVER
 +M:    Shawn Tu <shawnx.tu@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/og01a1b.c
 +
  OMNIVISION OV02A10 SENSOR DRIVER
  M:    Dongchun Zhu <dongchun.zhu@mediatek.com>
  L:    linux-media@vger.kernel.org
@@@ -14279,13 -14181,6 +14267,13 @@@ T: git git://linuxtv.org/media_tree.gi
  F:    Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
  F:    drivers/media/i2c/ov02a10.c
  
 +OMNIVISION OV08D10 SENSOR DRIVER
 +M:    Jimmy Su <jimmy.su@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +F:    drivers/media/i2c/ov08d10.c
 +
  OMNIVISION OV13858 SENSOR DRIVER
  M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    linux-media@vger.kernel.org
@@@ -14482,7 -14377,6 +14470,7 @@@ M:   Rob Herring <robh+dt@kernel.org
  M:    Frank Rowand <frowand.list@gmail.com>
  L:    devicetree@vger.kernel.org
  S:    Maintained
 +C:    irc://irc.libera.chat/devicetree
  W:    http://www.devicetree.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
  F:    Documentation/ABI/testing/sysfs-firmware-ofw
@@@ -14494,7 -14388,6 +14482,7 @@@ OPEN FIRMWARE AND FLATTENED DEVICE TRE
  M:    Rob Herring <robh+dt@kernel.org>
  L:    devicetree@vger.kernel.org
  S:    Maintained
 +C:    irc://irc.libera.chat/devicetree
  Q:    http://patchwork.ozlabs.org/project/devicetree-bindings/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git
  F:    Documentation/devicetree/
@@@ -14681,9 -14574,8 +14669,9 @@@ F:   include/uapi/linux/ppdev.
  
  PARAVIRT_OPS INTERFACE
  M:    Juergen Gross <jgross@suse.com>
 -M:    Deep Shah <sdeep@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +M:    Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu>
 +R:    Alexey Makhalov <amakhalov@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    virtualization@lists.linux-foundation.org
  L:    x86@kernel.org
  S:    Supported
@@@ -15229,7 -15121,7 +15217,7 @@@ M:   Ingo Molnar <mingo@redhat.com
  M:    Arnaldo Carvalho de Melo <acme@kernel.org>
  R:    Mark Rutland <mark.rutland@arm.com>
  R:    Alexander Shishkin <alexander.shishkin@linux.intel.com>
 -R:    Jiri Olsa <jolsa@redhat.com>
 +R:    Jiri Olsa <jolsa@kernel.org>
  R:    Namhyung Kim <namhyung@kernel.org>
  L:    linux-perf-users@vger.kernel.org
  L:    linux-kernel@vger.kernel.org
@@@ -15384,13 -15276,11 +15372,13 @@@ F:        drivers/pinctrl/renesas
  
  PIN CONTROLLER - SAMSUNG
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
 +R:    Alim Akhtar <alim.akhtar@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 +C:    irc://irc.libera.chat/linux-exynos
  Q:    https://patchwork.kernel.org/project/linux-samsung-soc/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git
  F:    Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt
@@@ -15612,7 -15502,6 +15600,7 @@@ F:   drivers/net/ppp/pptp.
  
  PRESSURE STALL INFORMATION (PSI)
  M:    Johannes Weiner <hannes@cmpxchg.org>
 +M:    Suren Baghdasaryan <surenb@google.com>
  S:    Maintained
  F:    include/linux/psi*
  F:    kernel/sched/psi.c
@@@ -15648,7 -15537,6 +15636,7 @@@ M:   Iurii Zaikin <yzaikin@google.com
  L:    linux-kernel@vger.kernel.org
  L:    linux-fsdevel@vger.kernel.org
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git sysctl-next
  F:    fs/proc/proc_sysctl.c
  F:    include/linux/sysctl.h
  F:    kernel/sysctl-test.c
@@@ -15996,7 -15884,6 +15984,7 @@@ S:   Supporte
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
  F:    drivers/net/wireless/ath/ath10k/
 +F:    Documentation/devicetree/bindings/net/wireless/qcom,ath10k.txt
  
  QUALCOMM ATHEROS ATH11K WIRELESS DRIVER
  M:    Kalle Valo <kvalo@kernel.org>
@@@ -16004,12 -15891,11 +15992,12 @@@ L:        ath11k@lists.infradead.or
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
  F:    drivers/net/wireless/ath/ath11k/
 +F:    Documentation/devicetree/bindings/net/wireless/qcom,ath11k.txt
  
  QUALCOMM ATHEROS ATH9K WIRELESS DRIVER
 -M:    ath9k-devel@qca.qualcomm.com
 +M:    Toke HĂžiland-JĂžrgensen <toke@toke.dk>
  L:    linux-wireless@vger.kernel.org
 -S:    Supported
 +S:    Maintained
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath9k
  F:    Documentation/devicetree/bindings/net/wireless/qca,ath9k.yaml
  F:    drivers/net/wireless/ath/ath9k/
@@@ -16084,6 -15970,14 +16072,6 @@@ F:  Documentation/devicetree/bindings/mi
  F:    drivers/misc/fastrpc.c
  F:    include/uapi/misc/fastrpc.h
  
 -QUALCOMM GENERIC INTERFACE I2C DRIVER
 -M:    Akash Asthana <akashast@codeaurora.org>
 -M:    Mukesh Savaliya <msavaliy@codeaurora.org>
 -L:    linux-i2c@vger.kernel.org
 -L:    linux-arm-msm@vger.kernel.org
 -S:    Supported
 -F:    drivers/i2c/busses/i2c-qcom-geni.c
 -
  QUALCOMM HEXAGON ARCHITECTURE
  M:    Brian Cain <bcain@codeaurora.org>
  L:    linux-hexagon@vger.kernel.org
@@@ -16155,8 -16049,8 +16143,8 @@@ F:   Documentation/devicetree/bindings/mt
  F:    drivers/mtd/nand/raw/qcom_nandc.c
  
  QUALCOMM RMNET DRIVER
 -M:    Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
 -M:    Sean Tranchetti <stranche@codeaurora.org>
 +M:    Subash Abhinov Kasiviswanathan <quic_subashab@quicinc.com>
 +M:    Sean Tranchetti <quic_stranche@quicinc.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/networking/device_drivers/cellular/qualcomm/rmnet.rst
@@@ -16182,10 -16076,11 +16170,10 @@@ F:        Documentation/devicetree/bindings/me
  F:    drivers/media/platform/qcom/venus/
  
  QUALCOMM WCN36XX WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@kernel.org>
 +M:    Loic Poulain <loic.poulain@linaro.org>
  L:    wcn36xx@lists.infradead.org
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx
 -T:    git git://github.com/KrasnikovEugene/wcn36xx.git
  F:    drivers/net/wireless/ath/wcn36xx/
  
  QUANTENNA QTNFMAC WIRELESS DRIVER
@@@ -16287,7 -16182,6 +16275,7 @@@ M:   Jason A. Donenfeld <Jason@zx2c4.com
  T:    git https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git
  S:    Maintained
  F:    drivers/char/random.c
 +F:    drivers/virt/vmgenid.c
  
  RAPIDIO SUBSYSTEM
  M:    Matt Porter <mporter@kernel.crashing.org>
@@@ -16402,8 -16296,6 +16390,8 @@@ F:   tools/testing/selftests/resctrl
  
  READ-COPY UPDATE (RCU)
  M:    "Paul E. McKenney" <paulmck@kernel.org>
 +M:    Frederic Weisbecker <frederic@kernel.org> (kernel/rcu/tree_nocb.h)
 +M:    Neeraj Upadhyay <quic_neeraju@quicinc.com> (kernel/rcu/tasks.h)
  M:    Josh Triplett <josh@joshtriplett.org>
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
@@@ -16451,7 -16343,6 +16439,7 @@@ F:   drivers/watchdog/realtek_otto_wdt.
  
  REALTEK RTL83xx SMI DSA ROUTER CHIPS
  M:    Linus Walleij <linus.walleij@linaro.org>
 +M:    Alvin Ć ipraga <alsi@bang-olufsen.dk>
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/dsa/realtek-smi.txt
  F:    drivers/net/dsa/realtek-smi*
@@@ -16720,7 -16611,8 +16708,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/rockchip/rockchip_i2s_tdm.*
  
  ROCKCHIP ISP V1 DRIVER
 -M:    Helen Koike <helen.koike@collabora.com>
 -M:    Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
 +M:    Dafna Hirschfeld <dafna@fastmail.com>
  L:    linux-media@vger.kernel.org
  L:    linux-rockchip@lists.infradead.org
  S:    Maintained
@@@ -16913,8 -16805,8 +16901,8 @@@ F:   drivers/video/fbdev/savage
  S390
  M:    Heiko Carstens <hca@linux.ibm.com>
  M:    Vasily Gorbik <gor@linux.ibm.com>
 -M:    Christian Borntraeger <borntraeger@linux.ibm.com>
 -R:    Alexander Gordeev <agordeev@linux.ibm.com>
 +M:    Alexander Gordeev <agordeev@linux.ibm.com>
 +R:    Christian Borntraeger <borntraeger@linux.ibm.com>
  R:    Sven Schnelle <svens@linux.ibm.com>
  L:    linux-s390@vger.kernel.org
  S:    Supported
@@@ -17029,7 -16921,7 +17017,7 @@@ W:   http://www.ibm.com/developerworks/li
  F:    drivers/s390/scsi/zfcp_*
  
  S3C ADC BATTERY DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-samsung-soc@vger.kernel.org
  S:    Odd Fixes
  F:    drivers/power/supply/s3c_adc_battery.c
@@@ -17074,7 -16966,7 +17062,7 @@@ F:   Documentation/admin-guide/LSM/SafeSe
  F:    security/safesetid/
  
  SAMSUNG AUDIO (ASoC) DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
@@@ -17082,7 -16974,7 +17070,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/samsung/
  
  SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -17117,7 -17009,7 +17105,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/samsung-laptop.c
  
  SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -17139,11 -17031,11 +17127,11 @@@ M:        Sylwester Nawrocki <sylvester.nawroc
  L:    linux-media@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s3c-camif/
 +F:    drivers/media/platform/samsung/s3c-camif/
  F:    include/media/drv-intf/s3c_camif.h
  
  SAMSUNG S3FWRN5 NFC DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Krzysztof Opasiak <k.opasiak@samsung.com>
  L:    linux-nfc@lists.01.org (subscribers-only)
  S:    Maintained
@@@ -17165,7 -17057,7 +17153,7 @@@ S:   Supporte
  F:    drivers/media/i2c/s5k5baf.c
  
  SAMSUNG S5P Security SubSystem (SSS) DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -17179,13 -17071,12 +17167,13 @@@ M:        Sylwester Nawrocki <s.nawrocki@samsu
  L:    linux-media@vger.kernel.org
  S:    Supported
  Q:    https://patchwork.linuxtv.org/project/linux-media/list/
 -F:    drivers/media/platform/exynos4-is/
 +F:    drivers/media/platform/samsung/exynos4-is/
  
  SAMSUNG SOC CLOCK DRIVERS
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  M:    Tomasz Figa <tomasz.figa@gmail.com>
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 +R:    Alim Akhtar <alim.akhtar@samsung.com>
  L:    linux-samsung-soc@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git
@@@ -17200,12 -17091,12 +17188,12 @@@ F:        include/linux/clk/samsung.
  F:    include/linux/platform_data/clk-s3c2410.h
  
  SAMSUNG SPI DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Andi Shyti <andi@etezian.org>
  L:    linux-spi@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/spi/spi-samsung.txt
 +F:    Documentation/devicetree/bindings/spi/samsung,spi*.yaml
  F:    drivers/spi/spi-s3c*
  F:    include/linux/platform_data/spi-s3c64xx.h
  F:    include/linux/spi/s3c24xx-fiq.h
@@@ -17217,12 -17108,11 +17205,12 @@@ S:        Supporte
  F:    drivers/net/ethernet/samsung/sxgbe/
  
  SAMSUNG THERMAL DRIVER
 -M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 +M:    Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-pm@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
 -S:    Supported
 -T:    git https://github.com/lmajewski/linux-samsung-thermal.git
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/thermal/samsung,exynos-thermal.yaml
  F:    drivers/thermal/samsung/
  
  SAMSUNG USB2 PHY DRIVER
@@@ -17614,7 -17504,7 +17602,7 @@@ F:   include/media/i2c/rj54n1cb0c.
  SH_VOU V4L2 OUTPUT DRIVER
  L:    linux-media@vger.kernel.org
  S:    Orphan
 -F:    drivers/media/platform/sh_vou.c
 +F:    drivers/media/platform/renesas/sh_vou.c
  F:    include/media/drv-intf/sh_vou.h
  
  SI2157 MEDIA DRIVER
@@@ -17823,21 -17713,6 +17811,21 @@@ S: Maintaine
  W:    http://www.winischhofer.at/linuxsisusbvga.shtml
  F:    drivers/usb/misc/sisusbvga/
  
 +SL28 CPLD MFD DRIVER
 +M:    Michael Walle <michael@walle.cc>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/gpio/kontron,sl28cpld-gpio.yaml
 +F:    Documentation/devicetree/bindings/hwmon/kontron,sl28cpld-hwmon.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/kontron,sl28cpld-intc.yaml
 +F:    Documentation/devicetree/bindings/mfd/kontron,sl28cpld.yaml
 +F:    Documentation/devicetree/bindings/pwm/kontron,sl28cpld-pwm.yaml
 +F:    Documentation/devicetree/bindings/watchdog/kontron,sl28cpld-wdt.yaml
 +F:    drivers/gpio/gpio-sl28cpld.c
 +F:    drivers/hwmon/sl28cpld-hwmon.c
 +F:    drivers/irqchip/irq-sl28cpld.c
 +F:    drivers/pwm/pwm-sl28cpld.c
 +F:    drivers/watchdog/sl28cpld_wdt.c
 +
  SLAB ALLOCATOR
  M:    Christoph Lameter <cl@linux.com>
  M:    Pekka Enberg <penberg@kernel.org>
@@@ -17845,10 -17720,8 +17833,10 @@@ M: David Rientjes <rientjes@google.com
  M:    Joonsoo Kim <iamjoonsoo.kim@lge.com>
  M:    Andrew Morton <akpm@linux-foundation.org>
  M:    Vlastimil Babka <vbabka@suse.cz>
 +R:    Roman Gushchin <roman.gushchin@linux.dev>
  L:    linux-mm@kvack.org
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/vbabka/slab.git
  F:    include/linux/sl?b*.h
  F:    mm/sl?b*
  
@@@ -18386,8 -18259,7 +18374,8 @@@ F:   Documentation/devicetree/bindings/ii
  F:    drivers/iio/imu/st_lsm6dsx/
  
  ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
 -M:    Mickael Guene <mickael.guene@st.com>
 +M:    Benjamin Mugnier <benjamin.mugnier@foss.st.com>
 +M:    Sylvain Petinot <sylvain.petinot@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -18557,7 -18429,7 +18545,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/sti/
  
  STI CEC DRIVER
 -M:    Benjamin Gaignard <benjamin.gaignard@linaro.org>
 +M:    Alain Volmat <alain.volmat@foss.st.com>
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/stih-cec.txt
  F:    drivers/media/cec/platform/sti/
@@@ -18626,13 -18498,6 +18614,13 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/rtc/sunplus,sp7021-rtc.yaml
  F:    drivers/rtc/rtc-sunplus.c
  
 +SUNPLUS SPI CONTROLLER INTERFACE DRIVER
 +M:    Li-hao Kuo <lhjeff911@gmail.com>
 +L:    linux-spi@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/spi-sunplus-sp7021.yaml
 +F:    drivers/spi/spi-sunplus-sp7021.c
 +
  SUPERH
  M:    Yoshinori Sato <ysato@users.sourceforge.jp>
  M:    Rich Felker <dalias@libc.org>
@@@ -19184,7 -19049,6 +19172,7 @@@ TEXAS INSTRUMENTS ASoC DRIVER
  M:    Peter Ujfalusi <peter.ujfalusi@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml
  F:    sound/soc/ti/
  
  TEXAS INSTRUMENTS' DAC7612 DAC DRIVER
@@@ -19365,7 -19229,7 +19353,7 @@@ S:   Maintaine
  W:    https://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 -F:    drivers/media/platform/am437x/
 +F:    drivers/media/platform/ti/am437x/
  
  TI BANDGAP AND THERMAL DRIVER
  M:    Eduardo Valentin <edubezval@gmail.com>
@@@ -19424,7 -19288,7 +19412,7 @@@ S:   Maintaine
  W:    https://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 -F:    drivers/media/platform/davinci/
 +F:    drivers/media/platform/ti/davinci/
  F:    include/media/davinci/
  
  TI ENHANCED QUADRATURE ENCODER PULSE (eQEP) DRIVER
@@@ -19510,8 -19374,7 +19498,8 @@@ W:   http://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  F:    Documentation/devicetree/bindings/media/ti,cal.yaml
  F:    Documentation/devicetree/bindings/media/ti,vpe.yaml
 -F:    drivers/media/platform/ti-vpe/
 +F:    drivers/media/platform/ti/cal/
 +F:    drivers/media/platform/ti/vpe/
  
  TI WILINK WIRELESS DRIVERS
  L:    linux-wireless@vger.kernel.org
@@@ -19582,15 -19445,6 +19570,15 @@@ S: Maintaine
  F:    Documentation/hwmon/tmp401.rst
  F:    drivers/hwmon/tmp401.c
  
 +TMP464 HARDWARE MONITOR DRIVER
 +M:    Agathe Porte <agathe.porte@nokia.com>
 +M:    Guenter Roeck <linux@roeck-us.net>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml
 +F:    Documentation/hwmon/tmp464.rst
 +F:    drivers/hwmon/tmp464.c
 +
  TMP513 HARDWARE MONITOR DRIVER
  M:    Eric Tremblay <etremblay@distech-controls.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -19729,14 -19583,6 +19717,14 @@@ F: Documentation/trace/timerlat-tracer.
  F:    Documentation/trace/hwlat_detector.rst
  F:    arch/*/kernel/trace.c
  
 +Real-time Linux Analysis (RTLA) tools
 +M:    Daniel Bristot de Oliveira <bristot@kernel.org>
 +M:    Steven Rostedt <rostedt@goodmis.org>
 +L:    linux-trace-devel@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/tools/rtla/
 +F:    tools/tracing/rtla/
 +
  TRADITIONAL CHINESE DOCUMENTATION
  M:    Hu Haowen <src.res@email.cn>
  L:    linux-doc-tw-discuss@lists.sourceforge.net
@@@ -20484,8 -20330,8 +20472,8 @@@ F:   drivers/media/common/videobuf2/
  F:    include/media/videobuf2-*
  
  VIMC VIRTUAL MEDIA CONTROLLER DRIVER
 -M:    Helen Koike <helen.koike@collabora.com>
 -R:    Shuah Khan <skhan@linuxfoundation.org>
 +M:    Shuah Khan <skhan@linuxfoundation.org>
 +R:    Kieran Bingham <kieran.bingham@ideasonboard.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  W:    https://linuxtv.org
@@@ -20740,33 -20586,30 +20728,33 @@@ F:        tools/testing/vsock
  
  VMWARE BALLOON DRIVER
  M:    Nadav Amit <namit@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    drivers/misc/vmw_balloon.c
  
  VMWARE HYPERVISOR INTERFACE
 -M:    Deep Shah <sdeep@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +M:    Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu>
 +M:    Alexey Makhalov <amakhalov@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    virtualization@lists.linux-foundation.org
 +L:    x86@kernel.org
  S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/vmware
  F:    arch/x86/include/asm/vmware.h
  F:    arch/x86/kernel/cpu/vmware.c
  
  VMWARE PVRDMA DRIVER
  M:    Bryan Tan <bryantan@vmware.com>
  M:    Vishnu Dasa <vdasa@vmware.com>
 -M:    VMware PV-Drivers <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
  F:    drivers/infiniband/hw/vmw_pvrdma/
  
  VMware PVSCSI driver
  M:    Vishal Bhakta <vbhakta@vmware.com>
 -M:    VMware PV-Drivers <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  F:    drivers/scsi/vmw_pvscsi.c
@@@ -20774,7 -20617,7 +20762,7 @@@ F:   drivers/scsi/vmw_pvscsi.
  
  VMWARE VIRTUAL PTP CLOCK DRIVER
  M:    Vivek Thampi <vithampi@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/ptp/ptp_vmw.c
  VMWARE VMCI DRIVER
  M:    Jorgen Hansen <jhansen@vmware.com>
  M:    Vishnu Dasa <vdasa@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-kernel@vger.kernel.org
 -L:    pv-drivers@vmware.com (private)
  S:    Maintained
  F:    drivers/misc/vmw_vmci/
  
  VMWARE VMMOUSE SUBDRIVER
 -M:    "VMware Graphics" <linux-graphics-maintainer@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +M:    Zack Rusin <zackr@vmware.com>
 +R:    VMware Graphics Reviewers <linux-graphics-maintainer@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-input@vger.kernel.org
  S:    Maintained
  F:    drivers/input/mouse/vmmouse.c
@@@ -20798,7 -20640,7 +20786,7 @@@ F:   drivers/input/mouse/vmmouse.
  
  VMWARE VMXNET3 ETHERNET DRIVER
  M:    Ronak Doshi <doshir@vmware.com>
 -M:    pv-drivers@vmware.com
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/vmxnet3/
@@@ -21174,7 -21016,7 +21162,7 @@@ L:   linux-media@vger.kernel.or
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/tuners/tuner-xc2028.*
 +F:    drivers/media/tuners/xc2028.*
  
  XDP (eXpress Data Path)
  M:    Alexei Starovoitov <ast@kernel.org>
@@@ -21394,11 -21236,6 +21382,11 @@@ T: git https://github.com/Xilinx/linux-
  F:    Documentation/devicetree/bindings/phy/xlnx,zynqmp-psgtr.yaml
  F:    drivers/phy/xilinx/phy-zynqmp.c
  
 +XILINX ZYNQMP SHA3 DRIVER
 +M:    Harsha <harsha.harsha@xilinx.com>
 +S:    Maintained
 +F:    drivers/crypto/xilinx/zynqmp-sha.c
 +
  XILINX EVENT MANAGEMENT DRIVER
  M:    Abhyuday Godhasara <abhyuday.godhasara@xilinx.com>
  S:    Maintained
@@@ -21579,6 -21416,7 +21567,6 @@@ THE RES
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
  S:    Buried alive in reporters
 -Q:    http://patchwork.kernel.org/project/LKML/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  F:    *
  F:    */
diff --combined arch/Kconfig
@@@ -24,9 -24,6 +24,6 @@@ config KEXEC_EL
  config HAVE_IMA_KEXEC
        bool
  
- config SET_FS
-       bool
  config HOTPLUG_SMT
        bool
  
@@@ -599,22 -596,21 +596,22 @@@ config STACKPROTECTOR_STRON
  config ARCH_SUPPORTS_SHADOW_CALL_STACK
        bool
        help
 -        An architecture should select this if it supports Clang's Shadow
 -        Call Stack and implements runtime support for shadow stack
 +        An architecture should select this if it supports the compiler's
 +        Shadow Call Stack and implements runtime support for shadow stack
          switching.
  
  config SHADOW_CALL_STACK
 -      bool "Clang Shadow Call Stack"
 -      depends on CC_IS_CLANG && ARCH_SUPPORTS_SHADOW_CALL_STACK
 +      bool "Shadow Call Stack"
 +      depends on ARCH_SUPPORTS_SHADOW_CALL_STACK
        depends on DYNAMIC_FTRACE_WITH_REGS || !FUNCTION_GRAPH_TRACER
        help
 -        This option enables Clang's Shadow Call Stack, which uses a
 -        shadow stack to protect function return addresses from being
 -        overwritten by an attacker. More information can be found in
 -        Clang's documentation:
 +        This option enables the compiler's Shadow Call Stack, which
 +        uses a shadow stack to protect function return addresses from
 +        being overwritten by an attacker. More information can be found
 +        in the compiler's documentation:
  
 -          https://clang.llvm.org/docs/ShadowCallStack.html
 +        - Clang: https://clang.llvm.org/docs/ShadowCallStack.html
 +        - GCC: https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html#Instrumentation-Options
  
          Note that security guarantees in the kernel differ from the
          ones documented for user space. The kernel must store addresses
@@@ -899,6 -895,13 +896,13 @@@ config HAVE_SOFTIRQ_ON_OWN_STAC
          Architecture provides a function to run __do_softirq() on a
          separate stack.
  
+ config ALTERNATE_USER_ADDRESS_SPACE
+       bool
+       help
+         Architectures set this when the CPU uses separate address
+         spaces for kernel and user space pointers. In this case, the
+         access_ok() check on a __user pointer is skipped.
  config PGTABLE_LEVELS
        int
        default 2
@@@ -1160,30 -1163,16 +1164,30 @@@ config HAVE_ARCH_RANDOMIZE_KSTACK_OFFSE
          to the compiler, so it will attempt to add canary checks regardless
          of the static branch state.
  
 -config RANDOMIZE_KSTACK_OFFSET_DEFAULT
 -      bool "Randomize kernel stack offset on syscall entry"
 +config RANDOMIZE_KSTACK_OFFSET
 +      bool "Support for randomizing kernel stack offset on syscall entry" if EXPERT
 +      default y
        depends on HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET
 +      depends on INIT_STACK_NONE || !CC_IS_CLANG || CLANG_VERSION >= 140000
        help
          The kernel stack offset can be randomized (after pt_regs) by
          roughly 5 bits of entropy, frustrating memory corruption
          attacks that depend on stack address determinism or
 -        cross-syscall address exposures. This feature is controlled
 -        by kernel boot param "randomize_kstack_offset=on/off", and this
 -        config chooses the default boot state.
 +        cross-syscall address exposures.
 +
 +        The feature is controlled via the "randomize_kstack_offset=on/off"
 +        kernel boot param, and if turned off has zero overhead due to its use
 +        of static branches (see JUMP_LABEL).
 +
 +        If unsure, say Y.
 +
 +config RANDOMIZE_KSTACK_OFFSET_DEFAULT
 +      bool "Default state of kernel stack offset randomization"
 +      depends on RANDOMIZE_KSTACK_OFFSET
 +      help
 +        Kernel stack offset randomization is controlled by kernel boot param
 +        "randomize_kstack_offset=on/off", and this config chooses the default
 +        boot state.
  
  config ARCH_OPTIONAL_KERNEL_RWX
        def_bool n
@@@ -1293,41 -1282,12 +1297,41 @@@ config HAVE_STATIC_CALL_INLIN
  
  config HAVE_PREEMPT_DYNAMIC
        bool
 +
 +config HAVE_PREEMPT_DYNAMIC_CALL
 +      bool
        depends on HAVE_STATIC_CALL
 -      depends on GENERIC_ENTRY
 +      select HAVE_PREEMPT_DYNAMIC
        help
 -         Select this if the architecture support boot time preempt setting
 -         on top of static calls. It is strongly advised to support inline
 -         static call to avoid any overhead.
 +         An architecture should select this if it can handle the preemption
 +         model being selected at boot time using static calls.
 +
 +         Where an architecture selects HAVE_STATIC_CALL_INLINE, any call to a
 +         preemption function will be patched directly.
 +
 +         Where an architecture does not select HAVE_STATIC_CALL_INLINE, any
 +         call to a preemption function will go through a trampoline, and the
 +         trampoline will be patched.
 +
 +         It is strongly advised to support inline static call to avoid any
 +         overhead.
 +
 +config HAVE_PREEMPT_DYNAMIC_KEY
 +      bool
 +      depends on HAVE_ARCH_JUMP_LABEL && CC_HAS_ASM_GOTO
 +      select HAVE_PREEMPT_DYNAMIC
 +      help
 +         An architecture should select this if it can handle the preemption
 +         model being selected at boot time using static keys.
 +
 +         Each preemption function will be given an early return based on a
 +         static key. This should have slightly lower overhead than non-inline
 +         static calls, as this effectively inlines each trampoline into the
 +         start of its callee. This may avoid redundant work, and may
 +         integrate better with CFI schemes.
 +
 +         This will have greater overhead than using inline static calls as
 +         the call to the preemption function cannot be entirely elided.
  
  config ARCH_WANT_LD_ORPHAN_WARN
        bool
diff --combined arch/alpha/Kconfig
@@@ -12,6 -12,7 +12,6 @@@ config ALPH
        select FORCE_PCI if !ALPHA_JENSEN
        select PCI_DOMAINS if PCI
        select PCI_SYSCALL if PCI
 -      select HAVE_AOUT
        select HAVE_ASM_MODVERSIONS
        select HAVE_PCSPKR_PLATFORM
        select HAVE_PERF_EVENTS
@@@ -34,7 -35,6 +34,6 @@@
        select OLD_SIGSUSPEND
        select CPU_NO_EFFICIENT_FFS if !ALPHA_EV67
        select MMU_GATHER_NO_RANGE
-       select SET_FS
        select SPARSEMEM_EXTREME if SPARSEMEM
        select ZONE_DMA
        help
diff --combined arch/arm/kernel/traps.c
  #include <linux/atomic.h>
  #include <asm/cacheflush.h>
  #include <asm/exception.h>
 +#include <asm/spectre.h>
  #include <asm/unistd.h>
  #include <asm/traps.h>
  #include <asm/ptrace.h>
  #include <asm/unwind.h>
  #include <asm/tls.h>
 +#include <asm/stacktrace.h>
  #include <asm/system_misc.h>
  #include <asm/opcodes.h>
  
@@@ -62,24 -60,13 +62,24 @@@ static int __init user_debug_setup(cha
  __setup("user_debug=", user_debug_setup);
  #endif
  
 -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, const char *loglvl)
  {
        unsigned long end = frame + 4 + sizeof(struct pt_regs);
  
 +      if (IS_ENABLED(CONFIG_UNWINDER_FRAME_POINTER) &&
 +          IS_ENABLED(CONFIG_CC_IS_GCC) &&
 +          end > ALIGN(frame, THREAD_SIZE)) {
 +              /*
 +               * If we are walking past the end of the stack, it may be due
 +               * to the fact that we are on an IRQ or overflow stack. In this
 +               * case, we can load the address of the other stack from the
 +               * frame record.
 +               */
 +              frame = ((unsigned long *)frame)[-2] - 4;
 +              end = frame + 4 + sizeof(struct pt_regs);
 +      }
 +
  #ifndef CONFIG_KALLSYMS
        printk("%sFunction entered at [<%08lx>] from [<%08lx>]\n",
                loglvl, where, from);
@@@ -123,8 -110,7 +123,8 @@@ void dump_backtrace_stm(u32 *stack, u3
  static int verify_stack(unsigned long sp)
  {
        if (sp < PAGE_OFFSET ||
 -          (sp > (unsigned long)high_memory && high_memory != NULL))
 +          (!IS_ENABLED(CONFIG_VMAP_STACK) &&
 +           sp > (unsigned long)high_memory && high_memory != NULL))
                return -EFAULT;
  
        return 0;
  /*
   * Dump out the contents of some memory nicely...
   */
 -static void dump_mem(const char *lvl, const char *str, unsigned long bottom,
 -                   unsigned long top)
 +void dump_mem(const char *lvl, const char *str, unsigned long bottom,
 +            unsigned long top)
  {
        unsigned long first;
        int i;
@@@ -294,8 -280,7 +294,8 @@@ static int __die(const char *str, int e
  
        if (!user_mode(regs) || in_interrupt()) {
                dump_mem(KERN_EMERG, "Stack: ", regs->ARM_sp,
 -                       THREAD_SIZE + (unsigned long)task_stack_page(tsk));
 +                       ALIGN(regs->ARM_sp - THREAD_SIZE, THREAD_ALIGN)
 +                       + THREAD_SIZE);
                dump_backtrace(regs, tsk, KERN_EMERG);
                dump_instr(KERN_EMERG, regs);
        }
@@@ -591,7 -576,7 +591,7 @@@ do_cache_op(unsigned long start, unsign
        if (end < start || flags)
                return -EINVAL;
  
-       if (!access_ok(start, end - start))
+       if (!access_ok((void __user *)start, end - start))
                return -EFAULT;
  
        return __do_cache_op(start, end);
@@@ -804,59 -789,10 +804,59 @@@ static inline void __init kuser_init(vo
  }
  #endif
  
 +#ifndef CONFIG_CPU_V7M
 +static void copy_from_lma(void *vma, void *lma_start, void *lma_end)
 +{
 +      memcpy(vma, lma_start, lma_end - lma_start);
 +}
 +
 +static void flush_vectors(void *vma, size_t offset, size_t size)
 +{
 +      unsigned long start = (unsigned long)vma + offset;
 +      unsigned long end = start + size;
 +
 +      flush_icache_range(start, end);
 +}
 +
 +#ifdef CONFIG_HARDEN_BRANCH_HISTORY
 +int spectre_bhb_update_vectors(unsigned int method)
 +{
 +      extern char __vectors_bhb_bpiall_start[], __vectors_bhb_bpiall_end[];
 +      extern char __vectors_bhb_loop8_start[], __vectors_bhb_loop8_end[];
 +      void *vec_start, *vec_end;
 +
 +      if (system_state >= SYSTEM_FREEING_INITMEM) {
 +              pr_err("CPU%u: Spectre BHB workaround too late - system vulnerable\n",
 +                     smp_processor_id());
 +              return SPECTRE_VULNERABLE;
 +      }
 +
 +      switch (method) {
 +      case SPECTRE_V2_METHOD_LOOP8:
 +              vec_start = __vectors_bhb_loop8_start;
 +              vec_end = __vectors_bhb_loop8_end;
 +              break;
 +
 +      case SPECTRE_V2_METHOD_BPIALL:
 +              vec_start = __vectors_bhb_bpiall_start;
 +              vec_end = __vectors_bhb_bpiall_end;
 +              break;
 +
 +      default:
 +              pr_err("CPU%u: unknown Spectre BHB state %d\n",
 +                     smp_processor_id(), method);
 +              return SPECTRE_VULNERABLE;
 +      }
 +
 +      copy_from_lma(vectors_page, vec_start, vec_end);
 +      flush_vectors(vectors_page, 0, vec_end - vec_start);
 +
 +      return SPECTRE_MITIGATED;
 +}
 +#endif
 +
  void __init early_trap_init(void *vectors_base)
  {
 -#ifndef CONFIG_CPU_V7M
 -      unsigned long vectors = (unsigned long)vectors_base;
        extern char __stubs_start[], __stubs_end[];
        extern char __vectors_start[], __vectors_end[];
        unsigned i;
         * into the vector page, mapped at 0xffff0000, and ensure these
         * are visible to the instruction stream.
         */
 -      memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);
 -      memcpy((void *)vectors + 0x1000, __stubs_start, __stubs_end - __stubs_start);
 +      copy_from_lma(vectors_base, __vectors_start, __vectors_end);
 +      copy_from_lma(vectors_base + 0x1000, __stubs_start, __stubs_end);
  
        kuser_init(vectors_base);
  
 -      flush_icache_range(vectors, vectors + PAGE_SIZE * 2);
 +      flush_vectors(vectors_base, 0, PAGE_SIZE * 2);
 +}
  #else /* ifndef CONFIG_CPU_V7M */
 +void __init early_trap_init(void *vectors_base)
 +{
        /*
         * on V7-M there is no need to copy the vector table to a dedicated
         * memory area. The address is configurable and so a table in the kernel
         * image can be used.
         */
 +}
 +#endif
 +
 +#ifdef CONFIG_VMAP_STACK
 +
 +DECLARE_PER_CPU(u8 *, irq_stack_ptr);
 +
 +asmlinkage DEFINE_PER_CPU(u8 *, overflow_stack_ptr);
 +
 +static int __init allocate_overflow_stacks(void)
 +{
 +      u8 *stack;
 +      int cpu;
 +
 +      for_each_possible_cpu(cpu) {
 +              stack = (u8 *)__get_free_page(GFP_KERNEL);
 +              if (WARN_ON(!stack))
 +                      return -ENOMEM;
 +              per_cpu(overflow_stack_ptr, cpu) = &stack[OVERFLOW_STACK_SIZE];
 +      }
 +      return 0;
 +}
 +early_initcall(allocate_overflow_stacks);
 +
 +asmlinkage void handle_bad_stack(struct pt_regs *regs)
 +{
 +      unsigned long tsk_stk = (unsigned long)current->stack;
 +#ifdef CONFIG_IRQSTACKS
 +      unsigned long irq_stk = (unsigned long)this_cpu_read(irq_stack_ptr);
  #endif
 +      unsigned long ovf_stk = (unsigned long)this_cpu_read(overflow_stack_ptr);
 +
 +      console_verbose();
 +      pr_emerg("Insufficient stack space to handle exception!");
 +
 +      pr_emerg("Task stack:     [0x%08lx..0x%08lx]\n",
 +               tsk_stk, tsk_stk + THREAD_SIZE);
 +#ifdef CONFIG_IRQSTACKS
 +      pr_emerg("IRQ stack:      [0x%08lx..0x%08lx]\n",
 +               irq_stk - THREAD_SIZE, irq_stk);
 +#endif
 +      pr_emerg("Overflow stack: [0x%08lx..0x%08lx]\n",
 +               ovf_stk - OVERFLOW_STACK_SIZE, ovf_stk);
 +
 +      die("kernel stack overflow", regs, 0);
 +}
 +
 +#ifndef CONFIG_ARM_LPAE
 +/*
 + * Normally, we rely on the logic in do_translation_fault() to update stale PMD
 + * entries covering the vmalloc space in a task's page tables when it first
 + * accesses the region in question. Unfortunately, this is not sufficient when
 + * the task stack resides in the vmalloc region, as do_translation_fault() is a
 + * C function that needs a stack to run.
 + *
 + * So we need to ensure that these PMD entries are up to date *before* the MM
 + * switch. As we already have some logic in the MM switch path that takes care
 + * of this, let's trigger it by bumping the counter every time the core vmalloc
 + * code modifies a PMD entry in the vmalloc region. Use release semantics on
 + * the store so that other CPUs observing the counter's new value are
 + * guaranteed to see the updated page table entries as well.
 + */
 +void arch_sync_kernel_mappings(unsigned long start, unsigned long end)
 +{
 +      if (start < VMALLOC_END && end > VMALLOC_START)
 +              atomic_inc_return_release(&init_mm.context.vmalloc_seq);
  }
 +#endif
 +#endif
@@@ -9,6 -9,7 +9,6 @@@
  #include <linux/bug.h>
  #include <linux/context_tracking.h>
  #include <linux/signal.h>
 -#include <linux/personality.h>
  #include <linux/kallsyms.h>
  #include <linux/kprobes.h>
  #include <linux/spinlock.h>
@@@ -518,7 -519,7 +518,7 @@@ void do_ptrauth_fault(struct pt_regs *r
  NOKPROBE_SYMBOL(do_ptrauth_fault);
  
  #define __user_cache_maint(insn, address, res)                        \
-       if (address >= user_addr_max()) {                       \
+       if (address >= TASK_SIZE_MAX) {                         \
                res = -EFAULT;                                  \
        } else {                                                \
                uaccess_ttbr0_enable();                         \
diff --combined arch/ia64/Kconfig
@@@ -8,7 -8,6 +8,7 @@@ menu "Processor type and features
  
  config IA64
        bool
 +      select ARCH_BINFMT_ELF_EXTRA_PHDRS
        select ARCH_HAS_DMA_MARK_CLEAN
        select ARCH_HAS_STRNCPY_FROM_USER
        select ARCH_HAS_STRNLEN_USER
@@@ -62,7 -61,6 +62,6 @@@
        select NEED_SG_DMA_LENGTH
        select NUMA if !FLATMEM
        select PCI_MSI_ARCH_FALLBACKS if PCI_MSI
-       select SET_FS
        select ZONE_DMA32
        default y
        help
@@@ -27,7 -27,6 +27,6 @@@ struct thread_info 
        __u32 cpu;                      /* current CPU */
        __u32 last_cpu;                 /* Last CPU thread ran on */
        __u32 status;                   /* Thread synchronous flags */
-       mm_segment_t addr_limit;        /* user-level address space limit */
        int preempt_count;              /* 0=premptable, <0=BUG; will also serve as bh-counter */
  #ifdef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
        __u64 utime;
        .task           = &tsk,                 \
        .flags          = 0,                    \
        .cpu            = 0,                    \
-       .addr_limit     = KERNEL_DS,            \
        .preempt_count  = INIT_PREEMPT_COUNT,   \
  }
  
  #ifndef ASM_OFFSETS_C
  /* how to get the thread information struct from C */
  #define current_thread_info() ((struct thread_info *) ((char *) current + IA64_TASK_SIZE))
 -#define alloc_thread_stack_node(tsk, node)    \
 +#define arch_alloc_thread_stack_node(tsk, node)       \
                ((unsigned long *) ((char *) (tsk) + IA64_TASK_SIZE))
  #define task_thread_info(tsk) ((struct thread_info *) ((char *) (tsk) + IA64_TASK_SIZE))
  #else
  #define current_thread_info() ((struct thread_info *) 0)
 -#define alloc_thread_stack_node(tsk, node)    ((unsigned long *) 0)
 +#define arch_alloc_thread_stack_node(tsk, node)       ((unsigned long *) 0)
  #define task_thread_info(tsk) ((struct thread_info *) 0)
  #endif
 -#define free_thread_stack(tsk)        /* nothing */
 +#define arch_free_thread_stack(tsk)   /* nothing */
  #define task_stack_page(tsk)  ((void *)(tsk))
  
  #define __HAVE_THREAD_FUNCTIONS
diff --combined arch/microblaze/Kconfig
@@@ -42,11 -42,8 +42,10 @@@ config MICROBLAZ
        select CPU_NO_EFFICIENT_FFS
        select MMU_GATHER_NO_RANGE
        select SPARSE_IRQ
-       select SET_FS
        select ZONE_DMA
        select TRACE_IRQFLAGS_SUPPORT
 +      select GENERIC_IRQ_MULTI_HANDLER
 +      select HANDLE_DOMAIN_IRQ
  
  # Endianness selection
  choice
diff --combined arch/parisc/Kconfig
@@@ -1,6 -1,7 +1,7 @@@
  # SPDX-License-Identifier: GPL-2.0
  config PARISC
        def_bool y
+       select ALTERNATE_USER_ADDRESS_SPACE
        select ARCH_32BIT_OFF_T if !64BIT
        select ARCH_MIGHT_HAVE_PC_PARPORT
        select HAVE_FUNCTION_TRACER
        select ARCH_HAS_ELF_RANDOMIZE
        select ARCH_HAS_STRICT_KERNEL_RWX
        select ARCH_HAS_UBSAN_SANITIZE_ALL
 +      select ARCH_HAS_PTE_SPECIAL
        select ARCH_NO_SG_CHAIN
        select ARCH_SUPPORTS_HUGETLBFS if PA20
        select ARCH_SUPPORTS_MEMORY_FAILURE
        select ARCH_STACKWALK
 +      select ARCH_HAS_DEBUG_VM_PGTABLE
        select HAVE_RELIABLE_STACKTRACE
        select DMA_OPS
        select RTC_CLASS
@@@ -261,6 -260,18 +262,6 @@@ config PARISC_PAGE_SIZE_64K
  
  endchoice
  
 -config PARISC_SELF_EXTRACT
 -      bool "Build kernel as self-extracting executable"
 -      default y
 -      help
 -        Say Y if you want to build the parisc kernel as a kind of
 -        self-extracting executable.
 -
 -        If you say N here, the kernel will be compressed with gzip
 -        which can be loaded by the palo bootloader directly too.
 -
 -        If you don't know what to do here, say Y.
 -
  config SMP
        bool "Symmetric multi-processing support"
        help
  #include <linux/bug.h>
  #include <linux/string.h>
  
- /*
-  * Note that since kernel addresses are in a separate address space on
-  * parisc, we don't need to do anything for access_ok().
-  * We just let the page fault handler do the right thing. This also means
-  * that put_user is the same as __put_user, etc.
-  */
- #define access_ok(uaddr, size)        \
-       ( (uaddr) == (uaddr) )
+ #define TASK_SIZE_MAX DEFAULT_TASK_SIZE
+ #include <asm/pgtable.h>
+ #include <asm-generic/access_ok.h>
  
  #define put_user __put_user
  #define get_user __get_user
@@@ -79,28 -73,27 +73,27 @@@ struct exception_table_entry 
  
  #define __get_user(val, ptr)                          \
  ({                                                    \
 -      __get_user_internal("%%sr3,", val, ptr);        \
 +      __get_user_internal(SR_USER, val, ptr); \
  })
  
  #define __get_user_asm(sr, val, ldx, ptr)             \
  {                                                     \
        register long __gu_val;                         \
                                                        \
 -      __asm__("1: " ldx " 0(" sr "%2),%0\n"           \
 +      __asm__("1: " ldx " 0(%%sr%2,%3),%0\n"          \
                "9:\n"                                  \
                ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
 -              : "=r"(__gu_val), "=r"(__gu_err)        \
 -              : "r"(ptr), "1"(__gu_err));             \
 +              : "=r"(__gu_val), "+r"(__gu_err)        \
 +              : "i"(sr), "r"(ptr));                   \
                                                        \
        (val) = (__force __typeof__(*(ptr))) __gu_val;  \
  }
  
- #define HAVE_GET_KERNEL_NOFAULT
  #define __get_kernel_nofault(dst, src, type, err_label)       \
  {                                                     \
        type __z;                                       \
        long __err;                                     \
 -      __err = __get_user_internal("%%sr0,", __z, (type *)(src)); \
 +      __err = __get_user_internal(SR_KERNEL, __z, (type *)(src)); \
        if (unlikely(__err))                            \
                goto err_label;                         \
        else                                            \
        } __gu_tmp;                                     \
                                                        \
        __asm__("   copy %%r0,%R0\n"                    \
 -              "1: ldw 0(" sr "%2),%0\n"               \
 -              "2: ldw 4(" sr "%2),%R0\n"              \
 +              "1: ldw 0(%%sr%2,%3),%0\n"              \
 +              "2: ldw 4(%%sr%2,%3),%R0\n"             \
                "9:\n"                                  \
                ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b) \
                ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 9b) \
 -              : "=&r"(__gu_tmp.l), "=r"(__gu_err)     \
 -              : "r"(ptr), "1"(__gu_err));             \
 +              : "=&r"(__gu_tmp.l), "+r"(__gu_err)     \
 +              : "i"(sr), "r"(ptr));                   \
                                                        \
        (val) = __gu_tmp.t;                             \
  }
  #define __put_user_internal(sr, x, ptr)                               \
  ({                                                            \
        ASM_EXCEPTIONTABLE_VAR(__pu_err);                       \
 -        __typeof__(*(ptr)) __x = (__typeof__(*(ptr)))(x);     \
                                                                \
        switch (sizeof(*(ptr))) {                               \
 -      case 1: __put_user_asm(sr, "stb", __x, ptr); break;     \
 -      case 2: __put_user_asm(sr, "sth", __x, ptr); break;     \
 -      case 4: __put_user_asm(sr, "stw", __x, ptr); break;     \
 -      case 8: STD_USER(sr, __x, ptr); break;                  \
 +      case 1: __put_user_asm(sr, "stb", x, ptr); break;       \
 +      case 2: __put_user_asm(sr, "sth", x, ptr); break;       \
 +      case 4: __put_user_asm(sr, "stw", x, ptr); break;       \
 +      case 8: STD_USER(sr, x, ptr); break;                    \
        default: BUILD_BUG();                                   \
        }                                                       \
                                                                \
  
  #define __put_user(x, ptr)                                    \
  ({                                                            \
 -      __put_user_internal("%%sr3,", x, ptr);                  \
 +      __typeof__(&*(ptr)) __ptr = ptr;                        \
 +      __typeof__(*(__ptr)) __x = (__typeof__(*(__ptr)))(x);   \
 +      __put_user_internal(SR_USER, __x, __ptr);               \
  })
  
  #define __put_kernel_nofault(dst, src, type, err_label)               \
  {                                                             \
        type __z = *(type *)(src);                              \
        long __err;                                             \
 -      __err = __put_user_internal("%%sr0,", __z, (type *)(dst)); \
 +      __err = __put_user_internal(SR_KERNEL, __z, (type *)(dst)); \
        if (unlikely(__err))                                    \
                goto err_label;                                 \
  }
  
  #define __put_user_asm(sr, stx, x, ptr)                               \
        __asm__ __volatile__ (                                  \
 -              "1: " stx " %2,0(" sr "%1)\n"                   \
 +              "1: " stx " %1,0(%%sr%2,%3)\n"                  \
                "9:\n"                                          \
                ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b)         \
 -              : "=r"(__pu_err)                                \
 -              : "r"(ptr), "r"(x), "0"(__pu_err))
 +              : "+r"(__pu_err)                                \
 +              : "r"(x), "i"(sr), "r"(ptr))
  
  
  #if !defined(CONFIG_64BIT)
  
  #define __put_user_asm64(sr, __val, ptr) do {                 \
        __asm__ __volatile__ (                                  \
 -              "1: stw %2,0(" sr "%1)\n"                       \
 -              "2: stw %R2,4(" sr "%1)\n"                      \
 +              "1: stw %1,0(%%sr%2,%3)\n"                      \
 +              "2: stw %R1,4(%%sr%2,%3)\n"                     \
                "9:\n"                                          \
                ASM_EXCEPTIONTABLE_ENTRY_EFAULT(1b, 9b)         \
                ASM_EXCEPTIONTABLE_ENTRY_EFAULT(2b, 9b)         \
 -              : "=r"(__pu_err)                                \
 -              : "r"(ptr), "r"(__val), "0"(__pu_err));         \
 +              : "+r"(__pu_err)                                \
 +              : "r"(__val), "i"(sr), "r"(ptr));               \
  } while (0)
  
  #endif /* !defined(CONFIG_64BIT) */
@@@ -1,13 -1,16 +1,13 @@@
  // SPDX-License-Identifier: GPL-2.0
  /*
 - *  linux/arch/parisc/kernel/signal.c: Architecture-specific signal
 - *  handling support.
 + *  PA-RISC architecture-specific signal handling support.
   *
   *  Copyright (C) 2000 David Huggins-Daines <dhd@debian.org>
   *  Copyright (C) 2000 Linuxcare, Inc.
 + *  Copyright (C) 2000-2022 Helge Deller <deller@gmx.de>
 + *  Copyright (C) 2022 John David Anglin <dave.anglin@bell.net>
   *
   *  Based on the ia64, i386, and alpha versions.
 - *
 - *  Like the IA-64, we are a recent enough port (we are *starting*
 - *  with glibc2.2) that we do not need to support the old non-realtime
 - *  Linux signals.  Therefore we don't.
   */
  
  #include <linux/sched.h>
@@@ -29,7 -32,6 +29,7 @@@
  #include <linux/uaccess.h>
  #include <asm/cacheflush.h>
  #include <asm/asm-offsets.h>
 +#include <asm/vdso.h>
  
  #ifdef CONFIG_COMPAT
  #include "signal32.h"
   * Do a signal return - restore sigcontext.
   */
  
 -/* Trampoline for calling rt_sigreturn() */
 -#define INSN_LDI_R25_0         0x34190000 /* ldi  0,%r25 (in_syscall=0) */
 -#define INSN_LDI_R25_1         0x34190002 /* ldi  1,%r25 (in_syscall=1) */
 -#define INSN_LDI_R20   0x3414015a /* ldi  __NR_rt_sigreturn,%r20 */
 -#define INSN_BLE_SR2_R0  0xe4008200 /* be,l 0x100(%sr2,%r0),%sr0,%r31 */
 -/* For debugging */
 -#define INSN_DIE_HORRIBLY 0x68000ccc /* stw %r0,0x666(%sr0,%r0) */
 -
  static long
  restore_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs)
  {
@@@ -67,9 -77,9 +67,9 @@@
        err |= __copy_from_user(regs->iaoq, sc->sc_iaoq, sizeof(regs->iaoq));
        err |= __copy_from_user(regs->iasq, sc->sc_iasq, sizeof(regs->iasq));
        err |= __get_user(regs->sar, &sc->sc_sar);
 -      DBG(2,"restore_sigcontext: iaoq is %#lx / %#lx\n",
 -                      regs->iaoq[0],regs->iaoq[1]);
 -      DBG(2,"restore_sigcontext: r28 is %ld\n", regs->gr[28]);
 +      DBG(2, "%s: iaoq is %#lx / %#lx\n",
 +                      __func__, regs->iaoq[0], regs->iaoq[1]);
 +      DBG(2, "%s: r28 is %ld\n", __func__, regs->gr[28]);
        return err;
  }
  
@@@ -92,7 -102,7 +92,7 @@@ sys_rt_sigreturn(struct pt_regs *regs, 
        /* Unwind the user stack to get the rt_sigframe structure. */
        frame = (struct rt_sigframe __user *)
                (usp - sigframe_size);
 -      DBG(2,"sys_rt_sigreturn: frame is %p\n", frame);
 +      DBG(2, "%s: frame is %p pid %d\n", __func__, frame, task_pid_nr(current));
  
        regs->orig_r28 = 1; /* no restarts for sigreturn */
  
        compat_frame = (struct compat_rt_sigframe __user *)frame;
        
        if (is_compat_task()) {
 -              DBG(2,"sys_rt_sigreturn: ELF32 process.\n");
                if (get_compat_sigset(&set, &compat_frame->uc.uc_sigmask))
                        goto give_sigsegv;
        } else
        /* Good thing we saved the old gr[30], eh? */
  #ifdef CONFIG_64BIT
        if (is_compat_task()) {
 -              DBG(1,"sys_rt_sigreturn: compat_frame->uc.uc_mcontext 0x%p\n",
 -                              &compat_frame->uc.uc_mcontext);
 +              DBG(1, "%s: compat_frame->uc.uc_mcontext 0x%p\n",
 +                              __func__, &compat_frame->uc.uc_mcontext);
  // FIXME: Load upper half from register file
                if (restore_sigcontext32(&compat_frame->uc.uc_mcontext, 
                                        &compat_frame->regs, regs))
                        goto give_sigsegv;
 -              DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n", 
 -                              usp, &compat_frame->uc.uc_stack);
 +              DBG(1, "%s: usp %#08lx stack 0x%p\n",
 +                              __func__, usp, &compat_frame->uc.uc_stack);
                if (compat_restore_altstack(&compat_frame->uc.uc_stack))
                        goto give_sigsegv;
        } else
  #endif
        {
 -              DBG(1,"sys_rt_sigreturn: frame->uc.uc_mcontext 0x%p\n",
 -                              &frame->uc.uc_mcontext);
 +              DBG(1, "%s: frame->uc.uc_mcontext 0x%p\n",
 +                              __func__, &frame->uc.uc_mcontext);
                if (restore_sigcontext(&frame->uc.uc_mcontext, regs))
                        goto give_sigsegv;
 -              DBG(1,"sys_rt_sigreturn: usp %#08lx stack 0x%p\n", 
 -                              usp, &frame->uc.uc_stack);
 +              DBG(1, "%s: usp %#08lx stack 0x%p\n",
 +                              __func__, usp, &frame->uc.uc_stack);
                if (restore_altstack(&frame->uc.uc_stack))
                        goto give_sigsegv;
        }
         */
        if (in_syscall)
                regs->gr[31] = regs->iaoq[0];
 -#if DEBUG_SIG
 -      DBG(1,"sys_rt_sigreturn: returning to %#lx, DUMPING REGS:\n", regs->iaoq[0]);
 -      show_regs(regs);
 -#endif
 +
        return;
  
  give_sigsegv:
 -      DBG(1,"sys_rt_sigreturn: Sending SIGSEGV\n");
 +      DBG(1, "%s: Sending SIGSEGV\n", __func__);
        force_sig(SIGSEGV);
        return;
  }
@@@ -163,15 -177,15 +163,15 @@@ get_sigframe(struct k_sigaction *ka, un
        /*FIXME: ELF32 vs. ELF64 has different frame_size, but since we
          don't use the parameter it doesn't matter */
  
 -      DBG(1,"get_sigframe: ka = %#lx, sp = %#lx, frame_size = %#lx\n",
 -                      (unsigned long)ka, sp, frame_size);
 +      DBG(1, "%s: ka = %#lx, sp = %#lx, frame_size = %zu\n",
 +                      __func__, (unsigned long)ka, sp, frame_size);
        
        /* Align alternate stack and reserve 64 bytes for the signal
           handler's frame marker.  */
        if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp))
                sp = (current->sas_ss_sp + 0x7f) & ~0x3f; /* Stacks grow up! */
  
 -      DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp);
 +      DBG(1, "%s: Returning sp = %#lx\n", __func__, (unsigned long)sp);
        return (void __user *) sp; /* Stacks grow up.  Fun. */
  }
  
@@@ -191,20 -205,20 +191,20 @@@ setup_sigcontext(struct sigcontext __us
                err |= __put_user(regs->gr[31]+4, &sc->sc_iaoq[1]);
                err |= __put_user(regs->sr[3], &sc->sc_iasq[0]);
                err |= __put_user(regs->sr[3], &sc->sc_iasq[1]);
 -              DBG(1,"setup_sigcontext: iaoq %#lx / %#lx (in syscall)\n",
 -                      regs->gr[31], regs->gr[31]+4);
 +              DBG(1, "%s: iaoq %#lx / %#lx (in syscall)\n",
 +                      __func__, regs->gr[31], regs->gr[31]+4);
        } else {
                err |= __copy_to_user(sc->sc_iaoq, regs->iaoq, sizeof(regs->iaoq));
                err |= __copy_to_user(sc->sc_iasq, regs->iasq, sizeof(regs->iasq));
 -              DBG(1,"setup_sigcontext: iaoq %#lx / %#lx (not in syscall)\n", 
 -                      regs->iaoq[0], regs->iaoq[1]);
 +              DBG(1, "%s: iaoq %#lx / %#lx (not in syscall)\n",
 +                      __func__, regs->iaoq[0], regs->iaoq[1]);
        }
  
        err |= __put_user(flags, &sc->sc_flags);
        err |= __copy_to_user(sc->sc_gr, regs->gr, sizeof(regs->gr));
        err |= __copy_to_user(sc->sc_fr, regs->fr, sizeof(regs->fr));
        err |= __put_user(regs->sar, &sc->sc_sar);
 -      DBG(1,"setup_sigcontext: r28 is %ld\n", regs->gr[28]);
 +      DBG(1, "%s: r28 is %ld\n", __func__, regs->gr[28]);
  
        return err;
  }
@@@ -216,7 -230,7 +216,7 @@@ setup_rt_frame(struct ksignal *ksig, si
        struct rt_sigframe __user *frame;
        unsigned long rp, usp;
        unsigned long haddr, sigframe_size;
 -      unsigned long start, end;
 +      unsigned long start;
        int err = 0;
  #ifdef CONFIG_64BIT
        struct compat_rt_sigframe __user * compat_frame;
  #endif
        frame = get_sigframe(&ksig->ka, usp, sigframe_size);
  
 -      DBG(1,"SETUP_RT_FRAME: START\n");
 -      DBG(1,"setup_rt_frame: frame %p info %p\n", frame, ksig->info);
 +      DBG(1, "%s: frame %p info %p\n", __func__, frame, &ksig->info);
  
        start = (unsigned long) frame;
-       if (start >= user_addr_max() - sigframe_size)
+       if (start >= TASK_SIZE_MAX - sigframe_size)
                return -EFAULT;
        
  #ifdef CONFIG_64BIT
        compat_frame = (struct compat_rt_sigframe __user *)frame;
        
        if (is_compat_task()) {
 -              DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &compat_frame->info);
 +              DBG(1, "%s: frame->info = 0x%p\n", __func__, &compat_frame->info);
                err |= copy_siginfo_to_user32(&compat_frame->info, &ksig->info);
                err |= __compat_save_altstack( &compat_frame->uc.uc_stack, regs->gr[30]);
 -              DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &compat_frame->uc);
 -              DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &compat_frame->uc.uc_mcontext);
 +              DBG(1, "%s: frame->uc = 0x%p\n", __func__, &compat_frame->uc);
 +              DBG(1, "%s: frame->uc.uc_mcontext = 0x%p\n",
 +                      __func__, &compat_frame->uc.uc_mcontext);
                err |= setup_sigcontext32(&compat_frame->uc.uc_mcontext, 
                                        &compat_frame->regs, regs, in_syscall);
                err |= put_compat_sigset(&compat_frame->uc.uc_sigmask, set,
        } else
  #endif
        {       
 -              DBG(1,"setup_rt_frame: frame->info = 0x%p\n", &frame->info);
 +              DBG(1, "%s: frame->info = 0x%p\n", __func__, &frame->info);
                err |= copy_siginfo_to_user(&frame->info, &ksig->info);
                err |= __save_altstack(&frame->uc.uc_stack, regs->gr[30]);
 -              DBG(1,"setup_rt_frame: frame->uc = 0x%p\n", &frame->uc);
 -              DBG(1,"setup_rt_frame: frame->uc.uc_mcontext = 0x%p\n", &frame->uc.uc_mcontext);
 +              DBG(1, "%s: frame->uc = 0x%p\n", __func__, &frame->uc);
 +              DBG(1, "%s: frame->uc.uc_mcontext = 0x%p\n",
 +                      __func__, &frame->uc.uc_mcontext);
                err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, in_syscall);
                /* FIXME: Should probably be converted as well for the compat case */
                err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
        if (err)
                return -EFAULT;
  
 -      /* Set up to return from userspace.  If provided, use a stub
 -         already in userspace. The first words of tramp are used to
 -         save the previous sigrestartblock trampoline that might be
 -         on the stack. We start the sigreturn trampoline at 
 -         SIGRESTARTBLOCK_TRAMP+X. */
 -      err |= __put_user(in_syscall ? INSN_LDI_R25_1 : INSN_LDI_R25_0,
 -                      &frame->tramp[SIGRESTARTBLOCK_TRAMP+0]);
 -      err |= __put_user(INSN_LDI_R20, 
 -                      &frame->tramp[SIGRESTARTBLOCK_TRAMP+1]);
 -      err |= __put_user(INSN_BLE_SR2_R0, 
 -                      &frame->tramp[SIGRESTARTBLOCK_TRAMP+2]);
 -      err |= __put_user(INSN_NOP, &frame->tramp[SIGRESTARTBLOCK_TRAMP+3]);
 -
 -      start = (unsigned long) &frame->tramp[0];
 -      end = (unsigned long) &frame->tramp[TRAMP_SIZE];
 -      flush_user_dcache_range_asm(start, end);
 -      flush_user_icache_range_asm(start, end);
 -
 -      /* TRAMP Words 0-4, Length 5 = SIGRESTARTBLOCK_TRAMP
 -       * TRAMP Words 5-9, Length 4 = SIGRETURN_TRAMP
 -       * So the SIGRETURN_TRAMP is at the end of SIGRESTARTBLOCK_TRAMP
 -       */
 -      rp = (unsigned long) &frame->tramp[SIGRESTARTBLOCK_TRAMP];
 +#ifdef CONFIG_64BIT
 +      if (!is_compat_task())
 +              rp = VDSO64_SYMBOL(current, sigtramp_rt);
 +      else
 +#endif
 +              rp = VDSO32_SYMBOL(current, sigtramp_rt);
  
 -      if (err)
 -              return -EFAULT;
 +      if (in_syscall)
 +              rp += 4*4; /* skip 4 instructions and start at ldi 1,%r25 */
  
        haddr = A(ksig->ka.sa.sa_handler);
        /* The sa_handler may be a pointer to a function descriptor */
                
                haddr = fdesc.addr;
                regs->gr[19] = fdesc.gp;
 -              DBG(1,"setup_rt_frame: 64 bit signal, exe=%#lx, r19=%#lx, in_syscall=%d\n",
 -                   haddr, regs->gr[19], in_syscall);
 +              DBG(1, "%s: 64 bit signal, exe=%#lx, r19=%#lx, in_syscall=%d\n",
 +                   __func__, haddr, regs->gr[19], in_syscall);
        }
  #endif
  
                regs->gr[31] = haddr;
  #ifdef CONFIG_64BIT
                if (!test_thread_flag(TIF_32BIT))
 -                      sigframe_size |= 1;
 +                      sigframe_size |= 1; /* XXX ???? */
  #endif
        } else {
                unsigned long psw = USER_PSW;
                }
  
                regs->gr[0] = psw;
 -              regs->iaoq[0] = haddr | 3;
 +              regs->iaoq[0] = haddr | PRIV_USER;
                regs->iaoq[1] = regs->iaoq[0] + 4;
        }
  
 -      regs->gr[2]  = rp;                /* userland return pointer */
 +      regs->gr[2]  = rp;                      /* userland return pointer */
        regs->gr[26] = ksig->sig;               /* signal number */
        
  #ifdef CONFIG_64BIT
                regs->gr[24] = A(&frame->uc);   /* ucontext pointer */
        }
        
 -      DBG(1,"setup_rt_frame: making sigreturn frame: %#lx + %#lx = %#lx\n",
 +      DBG(1, "%s: making sigreturn frame: %#lx + %#lx = %#lx\n", __func__,
               regs->gr[30], sigframe_size,
               regs->gr[30] + sigframe_size);
        /* Raise the user stack pointer to make a proper call frame. */
        regs->gr[30] = (A(frame) + sigframe_size);
  
  
 -      DBG(1,"setup_rt_frame: sig deliver (%s,%d) frame=0x%p sp=%#lx iaoq=%#lx/%#lx rp=%#lx\n",
 -             current->comm, current->pid, frame, regs->gr[30],
 +      DBG(1, "%s: sig deliver (%s,%d) frame=0x%p sp=%#lx iaoq=%#lx/%#lx rp=%#lx\n",
 +             __func__, current->comm, current->pid, frame, regs->gr[30],
               regs->iaoq[0], regs->iaoq[1], rp);
  
        return 0;
@@@ -385,8 -415,8 +385,8 @@@ handle_signal(struct ksignal *ksig, str
        int ret;
        sigset_t *oldset = sigmask_to_save();
  
 -      DBG(1,"handle_signal: sig=%ld, ka=%p, info=%p, oldset=%p, regs=%p\n",
 -             ksig->sig, ksig->ka, ksig->info, oldset, regs);
 +      DBG(1, "%s: sig=%d, ka=%p, info=%p, oldset=%p, regs=%p\n",
 +             __func__, ksig->sig, &ksig->ka, &ksig->info, oldset, regs);
        
        /* Set up the stack frame */
        ret = setup_rt_frame(ksig, oldset, regs, in_syscall);
        signal_setup_done(ret, ksig, test_thread_flag(TIF_SINGLESTEP) ||
                          test_thread_flag(TIF_BLOCKSTEP));
  
 -      DBG(1,KERN_DEBUG "do_signal: Exit (success), regs->gr[28] = %ld\n",
 -              regs->gr[28]);
 +      DBG(1, "%s: Exit (success), regs->gr[28] = %ld\n",
 +              __func__, regs->gr[28]);
  }
  
  /*
@@@ -453,27 -483,21 +453,27 @@@ syscall_restart(struct pt_regs *regs, s
        if (regs->orig_r28)
                return;
        regs->orig_r28 = 1; /* no more restarts */
 +
 +      DBG(1, "%s:  orig_r28 = %ld  pid %d  r20 %ld\n",
 +              __func__, regs->orig_r28, task_pid_nr(current), regs->gr[20]);
 +
        /* Check the return code */
        switch (regs->gr[28]) {
        case -ERESTART_RESTARTBLOCK:
        case -ERESTARTNOHAND:
 -              DBG(1,"ERESTARTNOHAND: returning -EINTR\n");
 +              DBG(1, "%s: ERESTARTNOHAND: returning -EINTR\n", __func__);
                regs->gr[28] = -EINTR;
                break;
        case -ERESTARTSYS:
                if (!(ka->sa.sa_flags & SA_RESTART)) {
 -                      DBG(1,"ERESTARTSYS: putting -EINTR\n");
 +                      DBG(1, "%s: ERESTARTSYS: putting -EINTR pid %d\n",
 +                              __func__, task_pid_nr(current));
                        regs->gr[28] = -EINTR;
                        break;
                }
                fallthrough;
        case -ERESTARTNOINTR:
 +              DBG(1, "%s: %ld\n", __func__, regs->gr[28]);
                check_syscallno_in_delay_branch(regs);
                break;
        }
@@@ -485,52 -509,50 +485,52 @@@ insert_restart_trampoline(struct pt_reg
        if (regs->orig_r28)
                return;
        regs->orig_r28 = 1; /* no more restarts */
 -      switch(regs->gr[28]) {
 +
 +      DBG(2, "%s: gr28 = %ld pid %d\n",
 +              __func__, regs->gr[28], task_pid_nr(current));
 +
 +      switch (regs->gr[28]) {
        case -ERESTART_RESTARTBLOCK: {
                /* Restart the system call - no handlers present */
                unsigned int *usp = (unsigned int *)regs->gr[30];
 -              unsigned long start = (unsigned long) &usp[2];
 -              unsigned long end  = (unsigned long) &usp[5];
 +              unsigned long rp;
                long err = 0;
  
                /* check that we don't exceed the stack */
-               if (A(&usp[0]) >= user_addr_max() - 5 * sizeof(int))
+               if (A(&usp[0]) >= TASK_SIZE_MAX - 5 * sizeof(int))
                        return;
  
 -              /* Setup a trampoline to restart the syscall
 -               * with __NR_restart_syscall
 +              /* Call trampoline in vdso to restart the syscall
 +               * with __NR_restart_syscall.
 +               * Original return addresses are on stack like this:
                 *
                 *  0: <return address (orig r31)>
                 *  4: <2nd half for 64-bit>
 -               *  8: ldw 0(%sp), %r31
 -               * 12: be 0x100(%sr2, %r0)
 -               * 16: ldi __NR_restart_syscall, %r20
                 */
  #ifdef CONFIG_64BIT
 -              err |= put_user(regs->gr[31] >> 32, &usp[0]);
 -              err |= put_user(regs->gr[31] & 0xffffffff, &usp[1]);
 -              err |= put_user(0x0fc010df, &usp[2]);
 -#else
 -              err |= put_user(regs->gr[31], &usp[0]);
 -              err |= put_user(0x0fc0109f, &usp[2]);
 +              if (!is_compat_task()) {
 +                      err |= put_user(regs->gr[31] >> 32, &usp[0]);
 +                      err |= put_user(regs->gr[31] & 0xffffffff, &usp[1]);
 +                      rp = VDSO64_SYMBOL(current, restart_syscall);
 +              } else
  #endif
 -              err |= put_user(0xe0008200, &usp[3]);
 -              err |= put_user(0x34140000, &usp[4]);
 -
 +              {
 +                      err |= put_user(regs->gr[31], &usp[0]);
 +                      rp = VDSO32_SYMBOL(current, restart_syscall);
 +              }
                WARN_ON(err);
  
 -              /* flush data/instruction cache for new insns */
 -              flush_user_dcache_range_asm(start, end);
 -              flush_user_icache_range_asm(start, end);
 -
 -              regs->gr[31] = regs->gr[30] + 8;
 +              regs->gr[31] = rp;
 +              DBG(1, "%s: ERESTART_RESTARTBLOCK\n", __func__);
                return;
        }
 +      case -EINTR:
 +              /* ok, was handled before and should be returned. */
 +              break;
        case -ERESTARTNOHAND:
        case -ERESTARTSYS:
        case -ERESTARTNOINTR:
 +              DBG(1, "%s: Type %ld\n", __func__, regs->gr[28]);
                check_syscallno_in_delay_branch(regs);
                return;
        default:
   * registers).  As noted below, the syscall number gets restored for
   * us due to the magic of delayed branching.
   */
 -asmlinkage void
 -do_signal(struct pt_regs *regs, long in_syscall)
 +static void do_signal(struct pt_regs *regs, long in_syscall)
  {
        struct ksignal ksig;
 +      int restart_syscall;
 +      bool has_handler;
  
 -      DBG(1,"\ndo_signal: regs=0x%p, sr7 %#lx, in_syscall=%d\n",
 -             regs, regs->sr[7], in_syscall);
 +      has_handler = get_signal(&ksig);
  
 -      if (get_signal(&ksig)) {
 -              DBG(3,"do_signal: signr = %d, regs->gr[28] = %ld\n", signr, regs->gr[28]);
 +      restart_syscall = 0;
 +      if (in_syscall)
 +              restart_syscall = 1;
 +
 +      if (has_handler) {
                /* Restart a system call if necessary. */
 -              if (in_syscall)
 +              if (restart_syscall)
                        syscall_restart(regs, &ksig.ka);
  
                handle_signal(&ksig, regs, in_syscall);
 +              DBG(1, "%s: Handled signal pid %d\n",
 +                      __func__, task_pid_nr(current));
                return;
        }
  
 -      /* Did we come from a system call? */
 -      if (in_syscall)
 +      /* Do we need to restart the system call? */
 +      if (restart_syscall)
                insert_restart_trampoline(regs);
        
 -      DBG(1,"do_signal: Exit (not delivered), regs->gr[28] = %ld\n", 
 -              regs->gr[28]);
 +      DBG(1, "%s: Exit (not delivered), regs->gr[28] = %ld  orig_r28 = %ld  pid %d\n",
 +              __func__, regs->gr[28], regs->orig_r28, task_pid_nr(current));
  
        restore_saved_sigmask();
  }
diff --combined arch/powerpc/lib/sstep.c
@@@ -112,9 -112,9 +112,9 @@@ static nokprobe_inline long address_ok(
  {
        if (!user_mode(regs))
                return 1;
-       if (__access_ok(ea, nb))
+       if (access_ok((void __user *)ea, nb))
                return 1;
-       if (__access_ok(ea, 1))
+       if (access_ok((void __user *)ea, 1))
                /* Access overlaps the end of the user region */
                regs->dar = TASK_SIZE_MAX - 1;
        else
@@@ -3264,14 -3264,12 +3264,14 @@@ void emulate_update_regs(struct pt_reg
                case BARRIER_EIEIO:
                        eieio();
                        break;
 +#ifdef CONFIG_PPC64
                case BARRIER_LWSYNC:
                        asm volatile("lwsync" : : : "memory");
                        break;
                case BARRIER_PTESYNC:
                        asm volatile("ptesync" : : : "memory");
                        break;
 +#endif
                }
                break;
  
diff --combined arch/s390/Kconfig
@@@ -55,12 -55,12 +55,13 @@@ config S39
        # Note: keep this list sorted alphabetically
        #
        imply IMA_SECURE_AND_OR_TRUSTED_BOOT
+       select ALTERNATE_USER_ADDRESS_SPACE
        select ARCH_32BIT_USTAT_F_TINODE
        select ARCH_BINFMT_ELF_STATE
        select ARCH_ENABLE_MEMORY_HOTPLUG if SPARSEMEM
        select ARCH_ENABLE_MEMORY_HOTREMOVE
        select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
 +      select ARCH_HAS_CURRENT_STACK_POINTER
        select ARCH_HAS_DEBUG_VM_PGTABLE
        select ARCH_HAS_DEBUG_WX
        select ARCH_HAS_DEVMEM_IS_ALLOWED
diff --combined arch/sh/Kconfig
@@@ -7,7 -7,6 +7,7 @@@ config SUPER
        select ARCH_HAVE_CUSTOM_GPIO_H
        select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)
        select ARCH_HAS_BINFMT_FLAT if !MMU
 +      select ARCH_HAS_CURRENT_STACK_POINTER
        select ARCH_HAS_GIGANTIC_PAGE
        select ARCH_HAS_GCOV_PROFILE_ALL
        select ARCH_HAS_PTE_SPECIAL
@@@ -66,7 -65,6 +66,6 @@@
        select PERF_EVENTS
        select PERF_USE_VMALLOC
        select RTC_LIB
-       select SET_FS
        select SPARSE_IRQ
        select TRACE_IRQFLAGS_SUPPORT
        help
diff --combined arch/xtensa/Kconfig
@@@ -3,7 -3,6 +3,7 @@@ config XTENS
        def_bool y
        select ARCH_32BIT_OFF_T
        select ARCH_HAS_BINFMT_FLAT if !MMU
 +      select ARCH_HAS_CURRENT_STACK_POINTER
        select ARCH_HAS_DMA_PREP_COHERENT if MMU
        select ARCH_HAS_SYNC_DMA_FOR_CPU if MMU
        select ARCH_HAS_SYNC_DMA_FOR_DEVICE if MMU
@@@ -41,7 -40,6 +41,6 @@@
        select IRQ_DOMAIN
        select MODULES_USE_ELF_RELA
        select PERF_USE_VMALLOC
-       select SET_FS
        select TRACE_IRQFLAGS_SUPPORT
        select VIRT_TO_BUS
        help
@@@ -617,15 -617,6 +617,6 @@@ config CLKSRC_ST_LP
          Enable this option to use the Low Power controller timer
          as clocksource.
  
- config ATCPIT100_TIMER
-       bool "ATCPIT100 timer driver"
-       depends on NDS32 || COMPILE_TEST
-       depends on HAS_IOMEM
-       select TIMER_OF
-       default NDS32
-       help
-         This option enables support for the Andestech ATCPIT100 timers.
  config RISCV_TIMER
        bool "Timer for the RISC-V platform" if COMPILE_TEST
        depends on GENERIC_SCHED_CLOCK && RISCV && RISCV_SBI
@@@ -713,6 -704,7 +704,6 @@@ config INGENIC_OS
  config MICROCHIP_PIT64B
        bool "Microchip PIT64B support"
        depends on OF || COMPILE_TEST
 -      select CLKSRC_MMIO
        select TIMER_OF
        help
          This option enables Microchip PIT64B timer for Atmel
diff --combined drivers/irqchip/Makefile
@@@ -92,9 -92,7 +92,8 @@@ obj-$(CONFIG_IRQ_UNIPHIER_AIDET)      += irq
  obj-$(CONFIG_ARCH_SYNQUACER)          += irq-sni-exiu.o
  obj-$(CONFIG_MESON_IRQ_GPIO)          += irq-meson-gpio.o
  obj-$(CONFIG_GOLDFISH_PIC)            += irq-goldfish-pic.o
- obj-$(CONFIG_NDS32)                   += irq-ativic32.o
  obj-$(CONFIG_QCOM_PDC)                        += qcom-pdc.o
 +obj-$(CONFIG_QCOM_MPM)                        += irq-qcom-mpm.o
  obj-$(CONFIG_CSKY_MPINTC)             += irq-csky-mpintc.o
  obj-$(CONFIG_CSKY_APB_INTC)           += irq-csky-apb-intc.o
  obj-$(CONFIG_RISCV_INTC)              += irq-riscv-intc.o
diff --combined fs/exec.c
+++ b/fs/exec.c
@@@ -118,7 -118,7 +118,7 @@@ bool path_noexec(const struct path *pat
   * Note that a shared library must be both readable and executable due to
   * security reasons.
   *
 - * Also note that we take the address to load from from the file itself.
 + * Also note that we take the address to load from the file itself.
   */
  SYSCALL_DEFINE1(uselib, const char __user *, library)
  {
@@@ -495,14 -495,8 +495,14 @@@ static int bprm_stack_limits(struct lin
         * the stack. They aren't stored until much later when we can't
         * signal to the parent that the child has run out of stack space.
         * Instead, calculate it here so it's possible to fail gracefully.
 +       *
 +       * In the case of argc = 0, make sure there is space for adding a
 +       * empty string (which will bump argc to 1), to ensure confused
 +       * userspace programs don't start processing from argv[1], thinking
 +       * argc can never be 0, to keep them from walking envp by accident.
 +       * See do_execveat_common().
         */
 -      ptr_size = (bprm->argc + bprm->envc) * sizeof(void *);
 +      ptr_size = (max(bprm->argc, 1) + bprm->envc) * sizeof(void *);
        if (limit <= ptr_size)
                return -E2BIG;
        limit -= ptr_size;
@@@ -542,7 -536,7 +542,7 @@@ static int copy_strings(int argc, struc
                if (!valid_arg_len(bprm, len))
                        goto out;
  
 -              /* We're going to work our way backwords. */
 +              /* We're going to work our way backwards. */
                pos = bprm->p;
                str += len;
                bprm->p -= len;
@@@ -1275,7 -1269,7 +1275,7 @@@ int begin_new_exec(struct linux_binprm 
  
        /*
         * Must be called _before_ exec_mmap() as bprm->mm is
 -       * not visibile until then. This also enables the update
 +       * not visible until then. This also enables the update
         * to be lockless.
         */
        retval = set_mm_exe_file(bprm->mm, bprm->file);
        if (retval)
                goto out_unlock;
  
-       /*
-        * Ensure that the uaccess routines can actually operate on userspace
-        * pointers:
-        */
-       force_uaccess_begin();
        if (me->flags & PF_KTHREAD)
                free_kthread_struct(me);
        me->flags &= ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD |
@@@ -1903,9 -1891,6 +1897,9 @@@ static int do_execveat_common(int fd, s
        }
  
        retval = count(argv, MAX_ARG_STRINGS);
 +      if (retval == 0)
 +              pr_warn_once("process '%s' launched '%s' with NULL argv: empty string added\n",
 +                           current->comm, bprm->filename);
        if (retval < 0)
                goto out_free;
        bprm->argc = retval;
        if (retval < 0)
                goto out_free;
  
 +      /*
 +       * When argv is empty, add an empty string ("") as argv[0] to
 +       * ensure confused userspace programs that start processing
 +       * from argv[1] won't end up walking envp. See also
 +       * bprm_stack_limits().
 +       */
 +      if (bprm->argc == 0) {
 +              retval = copy_string_kernel("", bprm);
 +              if (retval < 0)
 +                      goto out_free;
 +              bprm->argc = 1;
 +      }
 +
        retval = bprm_execve(bprm, fd, filename, flags);
  out_free:
        free_bprm(bprm);
@@@ -1973,8 -1945,6 +1967,8 @@@ int kernel_execve(const char *kernel_fi
        }
  
        retval = count_strings_kernel(argv);
 +      if (WARN_ON_ONCE(retval == 0))
 +              retval = -EINVAL;
        if (retval < 0)
                goto out_free;
        bprm->argc = retval;
diff --combined include/linux/uaccess.h
  
  #include <asm/uaccess.h>
  
- #ifdef CONFIG_SET_FS
- /*
-  * Force the uaccess routines to be wired up for actual userspace access,
-  * overriding any possible set_fs(KERNEL_DS) still lingering around.  Undone
-  * using force_uaccess_end below.
-  */
- static inline mm_segment_t force_uaccess_begin(void)
- {
-       mm_segment_t fs = get_fs();
-       set_fs(USER_DS);
-       return fs;
- }
- static inline void force_uaccess_end(mm_segment_t oldfs)
- {
-       set_fs(oldfs);
- }
- #else /* CONFIG_SET_FS */
- typedef struct {
-       /* empty dummy */
- } mm_segment_t;
- #ifndef TASK_SIZE_MAX
- #define TASK_SIZE_MAX                 TASK_SIZE
- #endif
- #define uaccess_kernel()              (false)
- #define user_addr_max()                       (TASK_SIZE_MAX)
- static inline mm_segment_t force_uaccess_begin(void)
- {
-       return (mm_segment_t) { };
- }
- static inline void force_uaccess_end(mm_segment_t oldfs)
- {
- }
- #endif /* CONFIG_SET_FS */
  /*
   * Architectures should provide two primitives (raw_copy_{to,from}_user())
   * and get rid of their private instances of copy_{to,from}_user() and
@@@ -368,6 -328,25 +328,25 @@@ long strncpy_from_user_nofault(char *ds
                long count);
  long strnlen_user_nofault(const void __user *unsafe_addr, long count);
  
+ #ifndef __get_kernel_nofault
+ #define __get_kernel_nofault(dst, src, type, label)   \
+ do {                                                  \
+       type __user *p = (type __force __user *)(src);  \
+       type data;                                      \
+       if (__get_user(data, p))                        \
+               goto label;                             \
+       *(type *)dst = data;                            \
+ } while (0)
+ #define __put_kernel_nofault(dst, src, type, label)   \
+ do {                                                  \
+       type __user *p = (type __force __user *)(dst);  \
+       type data = *(type *)src;                       \
+       if (__put_user(data, p))                        \
+               goto label;                             \
+ } while (0)
+ #endif
  /**
   * get_kernel_nofault(): safely attempt to read from a location
   * @val: read into this variable
@@@ -401,6 -380,8 +380,6 @@@ static inline void user_access_restore(
  #endif
  
  #ifdef CONFIG_HARDENED_USERCOPY
 -void usercopy_warn(const char *name, const char *detail, bool to_user,
 -                 unsigned long offset, unsigned long len);
  void __noreturn usercopy_abort(const char *name, const char *detail,
                               bool to_user, unsigned long offset,
                               unsigned long len);
diff --combined kernel/events/core.c
@@@ -839,7 -839,7 +839,7 @@@ static DEFINE_PER_CPU(struct list_head
   */
  static void perf_cgroup_switch(struct task_struct *task, int mode)
  {
 -      struct perf_cpu_context *cpuctx;
 +      struct perf_cpu_context *cpuctx, *tmp;
        struct list_head *list;
        unsigned long flags;
  
        local_irq_save(flags);
  
        list = this_cpu_ptr(&cgrp_cpuctx_list);
 -      list_for_each_entry(cpuctx, list, cgrp_cpuctx_entry) {
 +      list_for_each_entry_safe(cpuctx, tmp, list, cgrp_cpuctx_entry) {
                WARN_ON_ONCE(cpuctx->ctx.nr_cgroups == 0);
  
                perf_ctx_lock(cpuctx, cpuctx->task_ctx);
@@@ -6746,7 -6746,6 +6746,6 @@@ perf_output_sample_ustack(struct perf_o
                unsigned long sp;
                unsigned int rem;
                u64 dyn_size;
-               mm_segment_t fs;
  
                /*
                 * We dump:
  
                /* Data. */
                sp = perf_user_stack_pointer(regs);
-               fs = force_uaccess_begin();
                rem = __output_copy_user(handle, (void *) sp, dump_size);
-               force_uaccess_end(fs);
                dyn_size = dump_size - rem;
  
                perf_output_skip(handle, rem);
@@@ -10531,6 -10528,8 +10528,6 @@@ perf_event_parse_addr_filter(struct per
                 */
                if (state == IF_STATE_END) {
                        ret = -EINVAL;
 -                      if (kernel && event->attr.exclude_kernel)
 -                              goto fail;
  
                        /*
                         * ACTION "filter" must have a non-zero length region
                        }
  
                        /* ready to consume more filters */
 +                      kfree(filename);
 +                      filename = NULL;
                        state = IF_STATE_ACTION;
                        filter = NULL;
 +                      kernel = 0;
                }
        }
  
diff --combined kernel/exit.c
@@@ -735,22 -735,8 +735,8 @@@ void __noreturn do_exit(long code
        struct task_struct *tsk = current;
        int group_dead;
  
 -      WARN_ON(blk_needs_flush_plug(tsk));
 +      WARN_ON(tsk->plug);
  
-       /*
-        * If do_dead is called because this processes oopsed, it's possible
-        * that get_fs() was left as KERNEL_DS, so reset it to USER_DS before
-        * continuing. Amongst other possible reasons, this is to prevent
-        * mm_release()->clear_child_tid() from writing to a user-controlled
-        * kernel address.
-        *
-        * On uptodate architectures force_uaccess_begin is a noop.  On
-        * architectures that still have set_fs/get_fs in addition to handling
-        * oopses handles kernel threads that run as set_fs(KERNEL_DS) by
-        * default.
-        */
-       force_uaccess_begin();
        kcov_task_exit(tsk);
  
        coredump_task_exit(tsk);
                put_page(tsk->task_frag.page);
  
        validate_creds_for_do_exit(tsk);
 +      exit_task_stack_account(tsk);
  
        check_stack_usage();
        preempt_disable();
diff --combined kernel/kthread.c
@@@ -55,7 -55,6 +55,6 @@@ struct kthread 
        int result;
        int (*threadfn)(void *);
        void *data;
-       mm_segment_t oldfs;
        struct completion parked;
        struct completion exited;
  #ifdef CONFIG_BLK_CGROUP
@@@ -356,7 -355,7 +355,7 @@@ static int kthread(void *_create
         * back to default in case they have been changed.
         */
        sched_setscheduler_nocheck(current, SCHED_NORMAL, &param);
 -      set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_FLAG_KTHREAD));
 +      set_cpus_allowed_ptr(current, housekeeping_cpumask(HK_TYPE_KTHREAD));
  
        /* OK, tell user we're spawned, wait for stop or wakeup */
        __set_current_state(TASK_UNINTERRUPTIBLE);
@@@ -722,7 -721,7 +721,7 @@@ int kthreadd(void *unused
        /* Setup a clean context for our children to inherit. */
        set_task_comm(tsk, "kthreadd");
        ignore_signals(tsk);
 -      set_cpus_allowed_ptr(tsk, housekeeping_cpumask(HK_FLAG_KTHREAD));
 +      set_cpus_allowed_ptr(tsk, housekeeping_cpumask(HK_TYPE_KTHREAD));
        set_mems_allowed(node_states[N_MEMORY]);
  
        current->flags |= PF_NOFREEZE;
@@@ -1441,8 -1440,6 +1440,6 @@@ void kthread_use_mm(struct mm_struct *m
                mmdrop(active_mm);
        else
                smp_mb();
-       to_kthread(tsk)->oldfs = force_uaccess_begin();
  }
  EXPORT_SYMBOL_GPL(kthread_use_mm);
  
@@@ -1457,8 -1454,6 +1454,6 @@@ void kthread_unuse_mm(struct mm_struct 
        WARN_ON_ONCE(!(tsk->flags & PF_KTHREAD));
        WARN_ON_ONCE(!tsk->mm);
  
-       force_uaccess_end(to_kthread(tsk)->oldfs);
        task_lock(tsk);
        /*
         * When a kthread stops operating on an address space, the loop
diff --combined mm/maccess.c
@@@ -12,8 -12,6 +12,6 @@@ bool __weak copy_from_kernel_nofault_al
        return true;
  }
  
- #ifdef HAVE_GET_KERNEL_NOFAULT
  #define copy_from_kernel_nofault_loop(dst, src, len, type, err_label) \
        while (len >= sizeof(type)) {                                   \
                __get_kernel_nofault(dst, src, type, err_label);                \
@@@ -102,112 -100,6 +100,6 @@@ Efault
        dst[-1] = '\0';
        return -EFAULT;
  }
- #else /* HAVE_GET_KERNEL_NOFAULT */
- /**
-  * copy_from_kernel_nofault(): safely attempt to read from kernel-space
-  * @dst: pointer to the buffer that shall take the data
-  * @src: address to read from
-  * @size: size of the data chunk
-  *
-  * Safely read from kernel address @src to the buffer at @dst.  If a kernel
-  * fault happens, handle that and return -EFAULT.  If @src is not a valid kernel
-  * address, return -ERANGE.
-  *
-  * We ensure that the copy_from_user is executed in atomic context so that
-  * do_page_fault() doesn't attempt to take mmap_lock.  This makes
-  * copy_from_kernel_nofault() suitable for use within regions where the caller
-  * already holds mmap_lock, or other locks which nest inside mmap_lock.
-  */
- long copy_from_kernel_nofault(void *dst, const void *src, size_t size)
- {
-       long ret;
-       mm_segment_t old_fs = get_fs();
-       if (!copy_from_kernel_nofault_allowed(src, size))
-               return -ERANGE;
-       set_fs(KERNEL_DS);
-       pagefault_disable();
-       ret = __copy_from_user_inatomic(dst, (__force const void __user *)src,
-                       size);
-       pagefault_enable();
-       set_fs(old_fs);
-       if (ret)
-               return -EFAULT;
-       return 0;
- }
- EXPORT_SYMBOL_GPL(copy_from_kernel_nofault);
- /**
-  * copy_to_kernel_nofault(): safely attempt to write to a location
-  * @dst: address to write to
-  * @src: pointer to the data that shall be written
-  * @size: size of the data chunk
-  *
-  * Safely write to address @dst from the buffer at @src.  If a kernel fault
-  * happens, handle that and return -EFAULT.
-  */
- long copy_to_kernel_nofault(void *dst, const void *src, size_t size)
- {
-       long ret;
-       mm_segment_t old_fs = get_fs();
-       set_fs(KERNEL_DS);
-       pagefault_disable();
-       ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
-       pagefault_enable();
-       set_fs(old_fs);
-       if (ret)
-               return -EFAULT;
-       return 0;
- }
- /**
-  * strncpy_from_kernel_nofault: - Copy a NUL terminated string from unsafe
-  *                             address.
-  * @dst:   Destination address, in kernel space.  This buffer must be at
-  *         least @count bytes long.
-  * @unsafe_addr: Unsafe address.
-  * @count: Maximum number of bytes to copy, including the trailing NUL.
-  *
-  * Copies a NUL-terminated string from unsafe address to kernel buffer.
-  *
-  * On success, returns the length of the string INCLUDING the trailing NUL.
-  *
-  * If access fails, returns -EFAULT (some data may have been copied and the
-  * trailing NUL added).  If @unsafe_addr is not a valid kernel address, return
-  * -ERANGE.
-  *
-  * If @count is smaller than the length of the string, copies @count-1 bytes,
-  * sets the last byte of @dst buffer to NUL and returns @count.
-  */
- long strncpy_from_kernel_nofault(char *dst, const void *unsafe_addr, long count)
- {
-       mm_segment_t old_fs = get_fs();
-       const void *src = unsafe_addr;
-       long ret;
-       if (unlikely(count <= 0))
-               return 0;
-       if (!copy_from_kernel_nofault_allowed(unsafe_addr, count))
-               return -ERANGE;
-       set_fs(KERNEL_DS);
-       pagefault_disable();
-       do {
-               ret = __get_user(*dst++, (const char __user __force *)src++);
-       } while (dst[-1] && ret == 0 && src - unsafe_addr < count);
-       dst[-1] = '\0';
-       pagefault_enable();
-       set_fs(old_fs);
-       return ret ? -EFAULT : src - unsafe_addr;
- }
- #endif /* HAVE_GET_KERNEL_NOFAULT */
  
  /**
   * copy_from_user_nofault(): safely attempt to read from a user-space location
  long copy_from_user_nofault(void *dst, const void __user *src, size_t size)
  {
        long ret = -EFAULT;
-       mm_segment_t old_fs = force_uaccess_begin();
        if (access_ok(src, size)) {
                pagefault_disable();
                ret = __copy_from_user_inatomic(dst, src, size);
                pagefault_enable();
        }
-       force_uaccess_end(old_fs);
  
        if (ret)
                return -EFAULT;
@@@ -248,14 -137,12 +137,12 @@@ EXPORT_SYMBOL_GPL(copy_from_user_nofaul
  long copy_to_user_nofault(void __user *dst, const void *src, size_t size)
  {
        long ret = -EFAULT;
-       mm_segment_t old_fs = force_uaccess_begin();
  
        if (access_ok(dst, size)) {
                pagefault_disable();
                ret = __copy_to_user_inatomic(dst, src, size);
                pagefault_enable();
        }
-       force_uaccess_end(old_fs);
  
        if (ret)
                return -EFAULT;
@@@ -284,17 -171,14 +171,14 @@@ EXPORT_SYMBOL_GPL(copy_to_user_nofault)
  long strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr,
                              long count)
  {
-       mm_segment_t old_fs;
        long ret;
  
        if (unlikely(count <= 0))
                return 0;
  
-       old_fs = force_uaccess_begin();
        pagefault_disable();
        ret = strncpy_from_user(dst, unsafe_addr, count);
        pagefault_enable();
-       force_uaccess_end(old_fs);
  
        if (ret >= count) {
                ret = count;
   */
  long strnlen_user_nofault(const void __user *unsafe_addr, long count)
  {
-       mm_segment_t old_fs;
        int ret;
  
-       old_fs = force_uaccess_begin();
        pagefault_disable();
        ret = strnlen_user(unsafe_addr, count);
        pagefault_enable();
-       force_uaccess_end(old_fs);
  
        return ret;
  }
 +
 +void __copy_overflow(int size, unsigned long count)
 +{
 +      WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
 +}
 +EXPORT_SYMBOL(__copy_overflow);
diff --combined mm/memory.c
@@@ -735,6 -735,9 +735,6 @@@ static void restore_exclusive_pte(struc
  
        set_pte_at(vma->vm_mm, address, ptep, pte);
  
 -      if (vma->vm_flags & VM_LOCKED)
 -              mlock_vma_page(page);
 -
        /*
         * No need to invalidate - it was non-present before. However
         * secondary CPUs may have mappings that need invalidating.
@@@ -1306,34 -1309,22 +1306,34 @@@ copy_page_range(struct vm_area_struct *
   * Parameter block passed down to zap_pte_range in exceptional cases.
   */
  struct zap_details {
 -      struct address_space *zap_mapping;      /* Check page->mapping if set */
        struct folio *single_folio;     /* Locked folio to be unmapped */
 +      bool even_cows;                 /* Zap COWed private pages too? */
  };
  
 -/*
 - * We set details->zap_mapping when we want to unmap shared but keep private
 - * pages. Return true if skip zapping this page, false otherwise.
 - */
 -static inline bool
 -zap_skip_check_mapping(struct zap_details *details, struct page *page)
 +/* Whether we should zap all COWed (private) pages too */
 +static inline bool should_zap_cows(struct zap_details *details)
  {
 -      if (!details || !page)
 -              return false;
 +      /* By default, zap all pages */
 +      if (!details)
 +              return true;
 +
 +      /* Or, we zap COWed pages only if the caller wants to */
 +      return details->even_cows;
 +}
 +
 +/* Decides whether we should zap this page with the page pointer specified */
 +static inline bool should_zap_page(struct zap_details *details, struct page *page)
 +{
 +      /* If we can make a decision without *page.. */
 +      if (should_zap_cows(details))
 +              return true;
  
 -      return details->zap_mapping &&
 -              (details->zap_mapping != page_rmapping(page));
 +      /* E.g. the caller passes NULL for the case of a zero page */
 +      if (!page)
 +              return true;
 +
 +      /* Otherwise we should only zap non-anon pages */
 +      return !PageAnon(page);
  }
  
  static unsigned long zap_pte_range(struct mmu_gather *tlb,
@@@ -1358,8 -1349,6 +1358,8 @@@ again
        arch_enter_lazy_mmu_mode();
        do {
                pte_t ptent = *pte;
 +              struct page *page;
 +
                if (pte_none(ptent))
                        continue;
  
                        break;
  
                if (pte_present(ptent)) {
 -                      struct page *page;
 -
                        page = vm_normal_page(vma, addr, ptent);
 -                      if (unlikely(zap_skip_check_mapping(details, page)))
 +                      if (unlikely(!should_zap_page(details, page)))
                                continue;
                        ptent = ptep_get_and_clear_full(mm, addr, pte,
                                                        tlb->fullmm);
                                        mark_page_accessed(page);
                        }
                        rss[mm_counter(page)]--;
 -                      page_remove_rmap(page, false);
 +                      page_remove_rmap(page, vma, false);
                        if (unlikely(page_mapcount(page) < 0))
                                print_bad_pte(vma, addr, ptent, page);
                        if (unlikely(__tlb_remove_page(tlb, page))) {
                entry = pte_to_swp_entry(ptent);
                if (is_device_private_entry(entry) ||
                    is_device_exclusive_entry(entry)) {
 -                      struct page *page = pfn_swap_entry_to_page(entry);
 -
 -                      if (unlikely(zap_skip_check_mapping(details, page)))
 +                      page = pfn_swap_entry_to_page(entry);
 +                      if (unlikely(!should_zap_page(details, page)))
                                continue;
 -                      pte_clear_not_present_full(mm, addr, pte, tlb->fullmm);
                        rss[mm_counter(page)]--;
 -
                        if (is_device_private_entry(entry))
 -                              page_remove_rmap(page, false);
 -
 +                              page_remove_rmap(page, vma, false);
                        put_page(page);
 -                      continue;
 -              }
 -
 -              /* If details->check_mapping, we leave swap entries. */
 -              if (unlikely(details))
 -                      continue;
 -
 -              if (!non_swap_entry(entry))
 +              } else if (!non_swap_entry(entry)) {
 +                      /* Genuine swap entry, hence a private anon page */
 +                      if (!should_zap_cows(details))
 +                              continue;
                        rss[MM_SWAPENTS]--;
 -              else if (is_migration_entry(entry)) {
 -                      struct page *page;
 -
 +                      if (unlikely(!free_swap_and_cache(entry)))
 +                              print_bad_pte(vma, addr, ptent, NULL);
 +              } else if (is_migration_entry(entry)) {
                        page = pfn_swap_entry_to_page(entry);
 +                      if (!should_zap_page(details, page))
 +                              continue;
                        rss[mm_counter(page)]--;
 +              } else if (is_hwpoison_entry(entry)) {
 +                      if (!should_zap_cows(details))
 +                              continue;
 +              } else {
 +                      /* We should have covered all the swap entry types */
 +                      WARN_ON_ONCE(1);
                }
 -              if (unlikely(!free_swap_and_cache(entry)))
 -                      print_bad_pte(vma, addr, ptent, NULL);
                pte_clear_not_present_full(mm, addr, pte, tlb->fullmm);
        } while (pte++, addr += PAGE_SIZE, addr != end);
  
@@@ -1712,7 -1705,7 +1712,7 @@@ static void zap_page_range_single(struc
  void zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
                unsigned long size)
  {
 -      if (address < vma->vm_start || address + size > vma->vm_end ||
 +      if (!range_in_vma(vma, address, address + size) ||
                        !(vma->vm_flags & VM_PFNMAP))
                return;
  
@@@ -1760,16 -1753,16 +1760,16 @@@ static int validate_page_before_insert(
        return 0;
  }
  
 -static int insert_page_into_pte_locked(struct mm_struct *mm, pte_t *pte,
 +static int insert_page_into_pte_locked(struct vm_area_struct *vma, pte_t *pte,
                        unsigned long addr, struct page *page, pgprot_t prot)
  {
        if (!pte_none(*pte))
                return -EBUSY;
        /* Ok, finally just insert the thing.. */
        get_page(page);
 -      inc_mm_counter_fast(mm, mm_counter_file(page));
 -      page_add_file_rmap(page, false);
 -      set_pte_at(mm, addr, pte, mk_pte(page, prot));
 +      inc_mm_counter_fast(vma->vm_mm, mm_counter_file(page));
 +      page_add_file_rmap(page, vma, false);
 +      set_pte_at(vma->vm_mm, addr, pte, mk_pte(page, prot));
        return 0;
  }
  
  static int insert_page(struct vm_area_struct *vma, unsigned long addr,
                        struct page *page, pgprot_t prot)
  {
 -      struct mm_struct *mm = vma->vm_mm;
        int retval;
        pte_t *pte;
        spinlock_t *ptl;
        if (retval)
                goto out;
        retval = -ENOMEM;
 -      pte = get_locked_pte(mm, addr, &ptl);
 +      pte = get_locked_pte(vma->vm_mm, addr, &ptl);
        if (!pte)
                goto out;
 -      retval = insert_page_into_pte_locked(mm, pte, addr, page, prot);
 +      retval = insert_page_into_pte_locked(vma, pte, addr, page, prot);
        pte_unmap_unlock(pte, ptl);
  out:
        return retval;
  }
  
  #ifdef pte_index
 -static int insert_page_in_batch_locked(struct mm_struct *mm, pte_t *pte,
 +static int insert_page_in_batch_locked(struct vm_area_struct *vma, pte_t *pte,
                        unsigned long addr, struct page *page, pgprot_t prot)
  {
        int err;
        err = validate_page_before_insert(page);
        if (err)
                return err;
 -      return insert_page_into_pte_locked(mm, pte, addr, page, prot);
 +      return insert_page_into_pte_locked(vma, pte, addr, page, prot);
  }
  
  /* insert_pages() amortizes the cost of spinlock operations
@@@ -1848,7 -1842,7 +1848,7 @@@ more
  
                start_pte = pte_offset_map_lock(mm, pmd, addr, &pte_lock);
                for (pte = start_pte; pte_idx < batch_size; ++pte, ++pte_idx) {
 -                      int err = insert_page_in_batch_locked(mm, pte,
 +                      int err = insert_page_in_batch_locked(vma, pte,
                                addr, pages[curr_page_idx], prot);
                        if (unlikely(err)) {
                                pte_unmap_unlock(start_pte, pte_lock);
@@@ -3104,7 -3098,7 +3104,7 @@@ static vm_fault_t wp_page_copy(struct v
                         * mapcount is visible. So transitively, TLBs to
                         * old page will be flushed before it can be reused.
                         */
 -                      page_remove_rmap(old_page, false);
 +                      page_remove_rmap(old_page, vma, false);
                }
  
                /* Free the old page.. */
         */
        mmu_notifier_invalidate_range_only_end(&range);
        if (old_page) {
 -              /*
 -               * Don't let another task, with possibly unlocked vma,
 -               * keep the mlocked page.
 -               */
 -              if (page_copied && (vma->vm_flags & VM_LOCKED)) {
 -                      lock_page(old_page);    /* LRU manipulation */
 -                      if (PageMlocked(old_page))
 -                              munlock_vma_page(old_page);
 -                      unlock_page(old_page);
 -              }
                if (page_copied)
                        free_swap_cache(old_page);
                put_page(old_page);
@@@ -3336,8 -3340,12 +3336,8 @@@ static inline void unmap_mapping_range_
        vma_interval_tree_foreach(vma, root, first_index, last_index) {
                vba = vma->vm_pgoff;
                vea = vba + vma_pages(vma) - 1;
 -              zba = first_index;
 -              if (zba < vba)
 -                      zba = vba;
 -              zea = last_index;
 -              if (zea > vea)
 -                      zea = vea;
 +              zba = max(first_index, vba);
 +              zea = min(last_index, vea);
  
                unmap_mapping_range_vma(vma,
                        ((zba - vba) << PAGE_SHIFT) + vma->vm_start,
@@@ -3369,7 -3377,7 +3369,7 @@@ void unmap_mapping_folio(struct folio *
        first_index = folio->index;
        last_index = folio->index + folio_nr_pages(folio) - 1;
  
 -      details.zap_mapping = mapping;
 +      details.even_cows = false;
        details.single_folio = folio;
  
        i_mmap_lock_write(mapping);
@@@ -3398,7 -3406,7 +3398,7 @@@ void unmap_mapping_pages(struct address
        pgoff_t first_index = start;
        pgoff_t last_index = start + nr - 1;
  
 -      details.zap_mapping = even_cows ? NULL : mapping;
 +      details.even_cows = even_cows;
        if (last_index < first_index)
                last_index = ULONG_MAX;
  
@@@ -3863,16 -3871,11 +3863,16 @@@ static vm_fault_t __do_fault(struct vm_
                return ret;
  
        if (unlikely(PageHWPoison(vmf->page))) {
 -              if (ret & VM_FAULT_LOCKED)
 +              vm_fault_t poisonret = VM_FAULT_HWPOISON;
 +              if (ret & VM_FAULT_LOCKED) {
 +                      /* Retry if a clean page was removed from the cache. */
 +                      if (invalidate_inode_page(vmf->page))
 +                              poisonret = 0;
                        unlock_page(vmf->page);
 +              }
                put_page(vmf->page);
                vmf->page = NULL;
 -              return VM_FAULT_HWPOISON;
 +              return poisonret;
        }
  
        if (unlikely(!(ret & VM_FAULT_LOCKED)))
@@@ -3944,8 -3947,7 +3944,8 @@@ vm_fault_t do_set_pmd(struct vm_fault *
                entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma);
  
        add_mm_counter(vma->vm_mm, mm_counter_file(page), HPAGE_PMD_NR);
 -      page_add_file_rmap(page, true);
 +      page_add_file_rmap(page, vma, true);
 +
        /*
         * deposit and withdraw with pmd lock held
         */
@@@ -3994,7 -3996,7 +3994,7 @@@ void do_set_pte(struct vm_fault *vmf, s
                lru_cache_add_inactive_or_unevictable(page, vma);
        } else {
                inc_mm_counter_fast(vma->vm_mm, mm_counter_file(page));
 -              page_add_file_rmap(page, false);
 +              page_add_file_rmap(page, vma, false);
        }
        set_pte_at(vma->vm_mm, addr, vmf->pte, entry);
  }
@@@ -4620,7 -4622,6 +4620,7 @@@ static vm_fault_t __handle_mm_fault(str
        struct vm_fault vmf = {
                .vma = vma,
                .address = address & PAGE_MASK,
 +              .real_address = address,
                .flags = flags,
                .pgoff = linear_page_index(vma, address),
                .gfp_mask = __get_fault_gfp_mask(vma),
@@@ -5255,14 -5256,6 +5255,6 @@@ void print_vma_addr(char *prefix, unsig
  #if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_DEBUG_ATOMIC_SLEEP)
  void __might_fault(const char *file, int line)
  {
-       /*
-        * Some code (nfs/sunrpc) uses socket ops on kernel memory while
-        * holding the mmap_lock, this is safe because kernel memory doesn't
-        * get paged out, therefore we'll never actually fault, and the
-        * below annotations will generate false positives.
-        */
-       if (uaccess_kernel())
-               return;
        if (pagefault_disabled())
                return;
        __might_sleep(file, line);
@@@ -5443,8 -5436,6 +5435,8 @@@ long copy_huge_page_from_user(struct pa
                if (rc)
                        break;
  
 +              flush_dcache_page(subpage);
 +
                cond_resched();
        }
        return ret_val;