Merge tag 's390-6.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Feb 2023 23:09:17 +0000 (15:09 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 21 Feb 2023 23:09:17 +0000 (15:09 -0800)
Pull s390 updates from Heiko Carstens:

 - Large cleanup of the con3270/tty3270 driver. Among others this fixes:
     - Background Color Support
     - ASCII Line Character Support
     - VT100 Support
     - Geometries other than 80x24

 - Cleanup and improve cmpxchg() code. Also add cmpxchg_user_key() to
   uaccess functions, which will be used by KVM to access KVM guest
   memory with a specific storage key

 - Add support for user space events counting to CPUMF

 - Cleanup the vfio/ccw code, which also allows now to properly support
   2K Format-2 IDALs

 - Move kernel page table allocation and initialization to decompressor,
   which finally allows to enter the kernel with dynamic address
   translation enabled. This in turn allows to get rid of code with
   special handling in the kernel, which has to distinguish if DAT is on
   or off

 - Replace kretprobe with rethook

 - Various improvements to vfio/ap queue resets:
     - Use TAPQ to verify completion of a reset in progress rather than
       multiple invocations of ZAPQ.
     - Check TAPQ response codes when verifying successful completion of
       ZAPQ.
     - Fix erroneous handling of some error response codes.
     - Increase the maximum amount of time to wait for successful
       completion of ZAPQ

 - Rework system call wrappers to get rid of alias functions, which were
   only left on s390

 - Cleanup diag288_wdt watchdog driver. It has been agreed on with
   Guenter Roeck that this goes upstream via the s390 tree

 - Add missing loadparm parameter handling for list-directed ECKD
   ipl/reipl

 - Various improvements to memory detection code

 - Remove arch_cpu_idle_time() since the current implementation is
   broken, and allows user space observable accounted idle times which
   can temporarily decrease

 - Add Reset DAT-Protection support: (only) allow to change PTEs from RO
   to RW with a new RDP instruction. Unlike the currently used IPTE
   instruction, this does not necessarily guarantee that TLBs of all
   CPUs are synchronously flushed; and that remote CPUs can see spurious
   protection faults. The overall improvement for not requiring an all
   CPU synchronization, like it is required with IPTE, should be
   beneficial

 - Fix KFENCE page fault reporting

 - Smaller cleanups and improvement all over the place

* tag 's390-6.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (182 commits)
  s390/irq,idle: simplify idle check
  s390/processor: add test_and_set_cpu_flag() and test_and_clear_cpu_flag()
  s390/processor: let cpu helper functions return boolean values
  s390/kfence: fix page fault reporting
  s390/zcrypt: introduce ctfm field in struct CPRBX
  s390: remove confusing comment from uapi types header file
  vfio/ccw: remove WARN_ON during shutdown
  s390/entry: remove toolchain dependent micro-optimization
  s390/mem_detect: do not truncate online memory ranges info
  s390/vx: remove __uint128_t type from __vector128 struct again
  s390/mm: add support for RDP (Reset DAT-Protection)
  s390/mm: define private VM_FAULT_* reasons from top bits
  Documentation: s390: correct spelling
  s390/ap: fix status returned by ap_qact()
  s390/ap: fix status returned by ap_aqic()
  s390: vfio-ap: tighten the NIB validity check
  Revert "s390/mem_detect: do not update output parameters on failure"
  s390/idle: remove arch_cpu_idle_time() and corresponding code
  s390/vx: use simple assignments to access __vector128 members
  s390/vx: add 64 and 128 bit members to __vector128 struct
  ...

1  2 
MAINTAINERS
arch/s390/kernel/idle.c
arch/s390/kernel/perf_cpum_cf.c
arch/s390/kernel/perf_cpum_sf.c
arch/s390/kernel/perf_pai_ext.c
arch/s390/kernel/vmlinux.lds.S

diff --combined MAINTAINERS
@@@ -361,8 -361,6 +361,8 @@@ T: git git://git.kernel.org/pub/scm/lin
  F:    Documentation/ABI/testing/configfs-acpi
  F:    Documentation/ABI/testing/sysfs-bus-acpi
  F:    Documentation/firmware-guide/acpi/
 +F:    arch/x86/kernel/acpi/
 +F:    arch/x86/pci/acpi.c
  F:    drivers/acpi/
  F:    drivers/pci/*/*acpi*
  F:    drivers/pci/*acpi*
@@@ -385,7 -383,7 +385,7 @@@ ACPI COMPONENT ARCHITECTURE (ACPICA
  M:    Robert Moore <robert.moore@intel.com>
  M:    "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
  L:    linux-acpi@vger.kernel.org
 -L:    devel@acpica.org
 +L:    acpica-devel@lists.linuxfoundation.org
  S:    Supported
  W:    https://acpica.org/
  W:    https://github.com/acpica/acpica/
@@@ -1099,12 -1097,14 +1099,12 @@@ S:   Maintaine
  F:    drivers/dma/ptdma/
  
  AMD SEATTLE DEVICE TREE SUPPORT
 -M:    Brijesh Singh <brijeshkumar.singh@amd.com>
  M:    Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
  M:    Tom Lendacky <thomas.lendacky@amd.com>
  S:    Supported
  F:    arch/arm64/boot/dts/amd/
  
  AMD XGBE DRIVER
 -M:    Tom Lendacky <thomas.lendacky@amd.com>
  M:    "Shyam Sundar S K" <Shyam-sundar.S-k@amd.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -1853,6 -1853,21 +1853,6 @@@ F:     include/dt-bindings/reset/actions,
  F:    include/linux/soc/actions/
  N:    owl
  
 -ARM/ADS SPHERE MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
 -ARM/AFEB9260 MACHINE SUPPORT
 -M:    Sergey Lapin <slapin@ossfans.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
 -ARM/AJECO 1ARM MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
  ARM/Allwinner SoC Clock Support
  M:    Emilio López <emilio@elopez.com.ar>
  S:    Maintained
@@@ -1873,7 -1888,7 +1873,7 @@@ F:      drivers/pinctrl/sunxi
  F:    drivers/soc/sunxi/
  N:    allwinner
  N:    sun[x456789]i
 -N:    sun50i
 +N:    sun[25]0i
  
  ARM/Amlogic Meson SoC CLOCK FRAMEWORK
  M:    Neil Armstrong <neil.armstrong@linaro.org>
@@@ -2043,6 -2058,11 +2043,6 @@@ F:     arch/arm/boot/dts/ecx-*.dts
  F:    arch/arm/boot/dts/highbank.dts
  F:    arch/arm/mach-highbank/
  
 -ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT
 -M:    Krzysztof Halasa <khalasa@piap.pl>
 -S:    Maintained
 -F:    arch/arm/mach-cns3xxx/
 -
  ARM/CAVIUM THUNDER NETWORK DRIVER
  M:    Sunil Goutham <sgoutham@marvell.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2071,8 -2091,8 +2071,8 @@@ M:      Hartley Sweeten <hsweeten@visionengr
  M:    Alexander Sverdlin <alexander.sverdlin@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 +F:    arch/arm/boot/compressed/misc-ep93xx.h
  F:    arch/arm/mach-ep93xx/
 -F:    arch/arm/mach-ep93xx/include/mach/
  
  ARM/CLKDEV SUPPORT
  M:    Russell King <linux@armlinux.org.uk>
@@@ -2088,6 -2108,11 +2088,6 @@@ S:     Maintaine
  F:    arch/arm/boot/dts/cx92755*
  N:    digicolor
  
 -ARM/CONTEC MICRO9 MACHINE SUPPORT
 -M:    Hubert Feurstein <hubert.feurstein@contec.at>
 -S:    Maintained
 -F:    arch/arm/mach-ep93xx/micro9.c
 -
  ARM/CORESIGHT FRAMEWORK AND DRIVERS
  M:    Mathieu Poirier <mathieu.poirier@linaro.org>
  M:    Suzuki K Poulose <suzuki.poulose@arm.com>
@@@ -2114,6 -2139,10 +2114,6 @@@ F:     tools/perf/arch/arm/util/pmu.
  F:    tools/perf/util/cs-etm-decoder/*
  F:    tools/perf/util/cs-etm.*
  
 -ARM/CORGI MACHINE SUPPORT
 -M:    Richard Purdie <rpurdie@rpsys.net>
 -S:    Maintained
 -
  ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
  M:    Hans Ulli Kroll <ulli.kroll@googlemail.com>
  M:    Linus Walleij <linus.walleij@linaro.org>
@@@ -2153,6 -2182,12 +2153,6 @@@ F:     include/dt-bindings/bus/moxtet.
  F:    include/linux/armada-37xx-rwtm-mailbox.h
  F:    include/linux/moxtet.h
  
 -ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
 -M:    Robert Jarzmik <robert.jarzmik@free.fr>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/ezx.c
 -
  ARM/FARADAY FA526 PORT
  M:    Hans Ulli Kroll <ulli.kroll@googlemail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2178,9 -2213,6 +2178,9 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux.git
  X:    drivers/media/i2c/
 +F:    arch/arm64/boot/dts/freescale/
 +X:    arch/arm64/boot/dts/freescale/fsl-*
 +X:    arch/arm64/boot/dts/freescale/qoriq-*
  N:    imx
  N:    mxs
  
@@@ -2205,11 -2237,25 +2205,11 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    arch/arm/boot/dts/vf*
  F:    arch/arm/mach-imx/*vf610*
  
 -ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
  ARM/GUMSTIX MACHINE SUPPORT
  M:    Steve Sakoman <sakoman@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
 -ARM/H4700 (HP IPAQ HX4700) MACHINE SUPPORT
 -M:    Philipp Zabel <philipp.zabel@gmail.com>
 -M:    Paul Parsons <lost.distance@yahoo.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/hx4700.c
 -F:    arch/arm/mach-pxa/include/mach/hx4700.h
 -F:    sound/soc/pxa/hx4700.c
 -
  ARM/HISILICON SOC SUPPORT
  M:    Wei Xu <xuwei5@hisilicon.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2252,6 -2298,27 +2252,6 @@@ L:     linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/boot/dts/omap3-igep*
  
 -ARM/INCOME PXA270 SUPPORT
 -M:    Marek Vasut <marek.vasut@gmail.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/colibri-pxa270-income.c
 -
 -ARM/INTEL IOP32X ARM ARCHITECTURE
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
 -ARM/INTEL IQ81342EX MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
 -ARM/INTEL IXDP2850 MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
  ARM/INTEL IXP4XX ARM ARCHITECTURE
  M:    Linus Walleij <linusw@kernel.org>
  M:    Imre Kaloz <kaloz@openwrt.org>
@@@ -2284,12 -2351,22 +2284,12 @@@ M:   Lennert Buytenhek <kernel@wantstofly
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  
 -ARM/IP FABRICS DOUBLE ESPRESSO MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
  ARM/LG1K ARCHITECTURE
  M:    Chanho Min <chanho.min@lge.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm64/boot/dts/lg/
  
 -ARM/LOGICPD PXA270 MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
  ARM/LPC18XX ARCHITECTURE
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2316,6 -2393,10 +2316,6 @@@ F:     drivers/usb/host/ohci-nxp.
  F:    drivers/watchdog/pnx4008_wdt.c
  N:    lpc32xx
  
 -ARM/MAGICIAN MACHINE SUPPORT
 -M:    Philipp Zabel <philipp.zabel@gmail.com>
 -S:    Maintained
 -
  ARM/Marvell Dove/MV78xx0/Orion SOC support
  M:    Andrew Lunn <andrew@lunn.ch>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
@@@ -2370,14 -2451,11 +2370,14 @@@ F:   drivers/rtc/rtc-mt7622.
  
  ARM/Mediatek SoC support
  M:    Matthias Brugger <matthias.bgg@gmail.com>
 +R:    AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
 +L:    linux-kernel@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-mediatek@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  W:    https://mtk.wiki.kernel.org/
 -C:    irc://chat.freenode.net/linux-mediatek
 +C:    irc://irc.libera.chat/linux-mediatek
 +F:    arch/arm/boot/dts/mt2*
  F:    arch/arm/boot/dts/mt6*
  F:    arch/arm/boot/dts/mt7*
  F:    arch/arm/boot/dts/mt8*
@@@ -2385,7 -2463,7 +2385,7 @@@ F:      arch/arm/mach-mediatek
  F:    arch/arm64/boot/dts/mediatek/
  F:    drivers/soc/mediatek/
  N:    mtk
 -N:    mt[678]
 +N:    mt[2678]
  K:    mediatek
  
  ARM/Mediatek USB3 PHY DRIVER
@@@ -2447,6 -2525,12 +2447,6 @@@ F:     arch/arm/boot/dts/milbeaut
  F:    arch/arm/mach-milbeaut/
  N:    milbeaut
  
 -ARM/MIOA701 MACHINE SUPPORT
 -M:    Robert Jarzmik <robert.jarzmik@free.fr>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/mioa701.c
 -
  ARM/MStar/Sigmastar Armv7 SoC support
  M:    Daniel Palmer <daniel@thingy.jp>
  M:    Romain Perier <romain.perier@gmail.com>
@@@ -2467,6 -2551,10 +2467,6 @@@ F:     drivers/watchdog/msc313e_wdt.
  F:    include/dt-bindings/clock/mstar-*
  F:    include/dt-bindings/gpio/msc313-gpio.h
  
 -ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
 -M:    Michael Petchkovsky <mkpetch@internode.on.net>
 -S:    Maintained
 -
  ARM/NOMADIK/Ux500 ARCHITECTURES
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2522,7 -2610,6 +2522,7 @@@ S:      Maintaine
  W:    https://github.com/neuschaefer/wpcm450/wiki
  F:    Documentation/devicetree/bindings/*/*wpcm*
  F:    arch/arm/boot/dts/nuvoton-wpcm450*
 +F:    arch/arm/configs/wpcm450_defconfig
  F:    arch/arm/mach-npcm/wpcm450.c
  F:    drivers/*/*/*wpcm*
  F:    drivers/*/*wpcm*
@@@ -2536,6 -2623,13 +2536,6 @@@ L:     linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm64/boot/dts/freescale/s32g*.dts*
  
 -ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
 -L:    openmoko-kernel@lists.openmoko.org (subscribers-only)
 -S:    Orphan
 -W:    http://wiki.openmoko.org/wiki/Neo_FreeRunner
 -F:    arch/arm/mach-s3c/gta02.h
 -F:    arch/arm/mach-s3c/mach-gta02.c
 -
  ARM/Orion SoC/Technologic Systems TS-78xx platform support
  M:    Alexander Clouter <alex@digriz.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2553,6 -2647,43 +2553,6 @@@ F:     arch/arm/mach-oxnas
  F:    drivers/power/reset/oxnas-restart.c
  N:    oxnas
  
 -ARM/PALM TREO SUPPORT
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Orphan
 -F:    arch/arm/mach-pxa/palmtreo.*
 -
 -ARM/PALMTX,PALMT5,PALMLD,PALMTE2,PALMTC SUPPORT
 -M:    Marek Vasut <marek.vasut@gmail.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -W:    http://hackndev.com
 -F:    arch/arm/mach-pxa/include/mach/palmld.h
 -F:    arch/arm/mach-pxa/include/mach/palmtc.h
 -F:    arch/arm/mach-pxa/include/mach/palmtx.h
 -F:    arch/arm/mach-pxa/palmld.c
 -F:    arch/arm/mach-pxa/palmt5.*
 -F:    arch/arm/mach-pxa/palmtc.c
 -F:    arch/arm/mach-pxa/palmte2.*
 -F:    arch/arm/mach-pxa/palmtx.c
 -
 -ARM/PALMZ72 SUPPORT
 -M:    Sergey Lapin <slapin@ossfans.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -W:    http://hackndev.com
 -F:    arch/arm/mach-pxa/palmz72.*
 -
 -ARM/PLEB SUPPORT
 -M:    Peter Chubb <pleb@gelato.unsw.edu.au>
 -S:    Maintained
 -W:    http://www.disy.cse.unsw.edu.au/Hardware/PLEB
 -
 -ARM/PT DIGITAL BOARD PORT
 -M:    Stefan Eletzhofer <stefan.eletzhofer@eletztrick.de>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -W:    http://www.armlinux.org.uk/
 -
  ARM/QUALCOMM SUPPORT
  M:    Andy Gross <agross@kernel.org>
  M:    Bjorn Andersson <andersson@kernel.org>
@@@ -2596,6 -2727,11 +2596,6 @@@ F:     include/dt-bindings/*/qcom
  F:    include/linux/*/qcom*
  F:    include/linux/soc/qcom/
  
 -ARM/RADISYS ENP2611 MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
  ARM/RDA MICRO ARCHITECTURE
  M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2671,7 -2807,7 +2671,7 @@@ F:      Documentation/devicetree/bindings/i2
  F:    Documentation/devicetree/bindings/mmc/rockchip-dw-mshc.yaml
  F:    Documentation/devicetree/bindings/spi/spi-rockchip.yaml
  F:    arch/arm/boot/dts/rk3*
 -F:    arch/arm/boot/dts/rv1108*
 +F:    arch/arm/boot/dts/rv11*
  F:    arch/arm/mach-rockchip/
  F:    drivers/*/*/*rockchip*
  F:    drivers/*/*rockchip*
@@@ -2716,6 -2852,7 +2716,6 @@@ F:      include/linux/platform_data/*s3c
  F:    include/linux/serial_s3c.h
  F:    include/linux/soc/samsung/
  N:    exynos
 -N:    s3c2410
  N:    s3c64xx
  N:    s5pv210
  
@@@ -2873,7 -3010,7 +2873,7 @@@ M:      linux-fsd@tesla.co
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 -F:    arch/arm64/boot/dts/tesla*
 +F:    arch/arm64/boot/dts/tesla/
  
  ARM/TETON BGA MACHINE SUPPORT
  M:    "Mark F. Brown" <mark.brown314@gmail.com>
@@@ -2926,6 -3063,16 +2926,6 @@@ F:     arch/arm64/boot/dts/ti/Makefil
  F:    arch/arm64/boot/dts/ti/k3-*
  F:    include/dt-bindings/pinctrl/k3.h
  
 -ARM/THECUS N2100 MACHINE SUPPORT
 -M:    Lennert Buytenhek <kernel@wantstofly.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -
 -ARM/TOSA MACHINE SUPPORT
 -M:    Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
 -M:    Dirk Opfer <dirk@opfer-online.de>
 -S:    Maintained
 -
  ARM/TOSHIBA VISCONTI ARCHITECTURE
  M:    Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2982,7 -3129,7 +2982,7 @@@ S:      Maintaine
  F:    */*/*/vexpress*
  F:    */*/vexpress*
  F:    arch/arm/boot/dts/vexpress*
 -F:    arch/arm/mach-vexpress/
 +F:    arch/arm/mach-versatile/
  F:    arch/arm64/boot/dts/arm/
  F:    drivers/clk/versatile/clk-vexpress-osc.c
  F:    drivers/clocksource/timer-versatile.c
@@@ -2995,6 -3142,13 +2995,6 @@@ S:     Maintaine
  W:    http://www.armlinux.org.uk/
  F:    arch/arm/vfp/
  
 -ARM/VOIPAC PXA270 SUPPORT
 -M:    Marek Vasut <marek.vasut@gmail.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/include/mach/vpac270.h
 -F:    arch/arm/mach-pxa/vpac270.c
 -
  ARM/VT8500 ARM ARCHITECTURE
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Orphan
@@@ -3012,6 -3166,13 +3012,6 @@@ F:     drivers/video/fbdev/vt8500lcdfb.
  F:    drivers/video/fbdev/wm8505fb*
  F:    drivers/video/fbdev/wmt_ge_rops.*
  
 -ARM/ZIPIT Z2 SUPPORT
 -M:    Marek Vasut <marek.vasut@gmail.com>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/include/mach/z2.h
 -F:    arch/arm/mach-pxa/z2.c
 -
  ARM/ZYNQ ARCHITECTURE
  M:    Michal Simek <michal.simek@xilinx.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -3606,6 -3767,7 +3606,6 @@@ F:      net/bluetooth
  
  BONDING DRIVER
  M:    Jay Vosburgh <j.vosburgh@gmail.com>
 -M:    Veaceslav Falico <vfalico@gmail.com>
  M:    Andy Gospodarek <andy@greyhouse.net>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -6260,7 -6422,6 +6260,7 @@@ T:      git git://git.linbit.com/linux-drbd.
  T:    git git://git.linbit.com/drbd-8.4.git
  F:    Documentation/admin-guide/blockdev/
  F:    drivers/block/drbd/
 +F:    include/linux/drbd*
  F:    lib/lru_cache.c
  
  DRIVER COMPONENT FRAMEWORK
@@@ -6787,7 -6948,7 +6787,7 @@@ F:      drivers/gpu/drm/atmel-hlcdc
  DRM DRIVERS FOR BRIDGE CHIPS
  M:    Andrzej Hajda <andrzej.hajda@intel.com>
  M:    Neil Armstrong <neil.armstrong@linaro.org>
 -M:    Robert Foss <robert.foss@linaro.org>
 +M:    Robert Foss <rfoss@kernel.org>
  R:    Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
  R:    Jonas Karlman <jonas@kwiboo.se>
  R:    Jernej Skrabec <jernej.skrabec@gmail.com>
@@@ -7455,6 -7616,7 +7455,6 @@@ S:      Maintaine
  F:    drivers/firmware/efi/test/
  
  EFI VARIABLE FILESYSTEM
 -M:    Matthew Garrett <matthew.garrett@nebula.com>
  M:    Jeremy Kerr <jk@ozlabs.org>
  M:    Ard Biesheuvel <ardb@kernel.org>
  L:    linux-efi@vger.kernel.org
@@@ -7583,7 -7745,6 +7583,7 @@@ R:      Jeffle Xu <jefflexu@linux.alibaba.co
  L:    linux-erofs@lists.ozlabs.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
 +F:    Documentation/ABI/testing/sysfs-fs-erofs
  F:    Documentation/filesystems/erofs.rst
  F:    fs/erofs/
  F:    include/trace/events/erofs.h
@@@ -7734,11 -7895,7 +7734,11 @@@ F:    include/linux/extcon
  
  EXTRA BOOT CONFIG
  M:    Masami Hiramatsu <mhiramat@kernel.org>
 +L:    linux-kernel@vger.kernel.org
 +L:    linux-trace-kernel@vger.kernel.org
 +Q:    https://patchwork.kernel.org/project/linux-trace-kernel/list/
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git
  F:    Documentation/admin-guide/bootconfig.rst
  F:    fs/proc/bootconfig.c
  F:    include/linux/bootconfig.h
@@@ -8039,7 -8196,7 +8039,7 @@@ F:      drivers/fpga/microchip-spi.
  FPU EMULATOR
  M:    Bill Metzenthen <billm@melbpc.org.au>
  S:    Maintained
 -W:    http://floatingpoint.sourceforge.net/emulator/index.html
 +W:    https://floatingpoint.billm.au/
  F:    arch/x86/math-emu/
  
  FRAMEBUFFER CORE
@@@ -8311,16 -8468,16 +8311,16 @@@ F:   fs/fscache
  F:    include/linux/fscache*.h
  
  FSCRYPT: FILE SYSTEM LEVEL ENCRYPTION SUPPORT
 +M:    Eric Biggers <ebiggers@kernel.org>
  M:    Theodore Y. Ts'o <tytso@mit.edu>
  M:    Jaegeuk Kim <jaegeuk@kernel.org>
 -M:    Eric Biggers <ebiggers@kernel.org>
  L:    linux-fscrypt@vger.kernel.org
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-fscrypt/list/
 -T:    git git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git
 +T:    git https://git.kernel.org/pub/scm/fs/fscrypt/linux.git
  F:    Documentation/filesystems/fscrypt.rst
  F:    fs/crypto/
 -F:    include/linux/fscrypt*.h
 +F:    include/linux/fscrypt.h
  F:    include/uapi/linux/fscrypt.h
  
  FSI SUBSYSTEM
@@@ -8363,10 -8520,10 +8363,10 @@@ F:   include/linux/fsnotify*.
  FSVERITY: READ-ONLY FILE-BASED AUTHENTICITY PROTECTION
  M:    Eric Biggers <ebiggers@kernel.org>
  M:    Theodore Y. Ts'o <tytso@mit.edu>
 -L:    linux-fscrypt@vger.kernel.org
 +L:    fsverity@lists.linux.dev
  S:    Supported
 -Q:    https://patchwork.kernel.org/project/linux-fscrypt/list/
 -T:    git git://git.kernel.org/pub/scm/fs/fscrypt/fscrypt.git fsverity
 +Q:    https://patchwork.kernel.org/project/fsverity/list/
 +T:    git https://git.kernel.org/pub/scm/fs/fsverity/linux.git
  F:    Documentation/filesystems/fsverity.rst
  F:    fs/verity/
  F:    include/linux/fsverity.h
@@@ -8414,7 -8571,6 +8414,7 @@@ F:      kernel/trace/fgraph.
  F:    arch/*/*/*/*ftrace*
  F:    arch/*/*/*ftrace*
  F:    include/*/ftrace.h
 +F:    samples/ftrace
  
  FUNGIBLE ETHERNET DRIVERS
  M:    Dimitris Michailidis <dmichail@fungible.com>
@@@ -9143,7 -9299,7 +9143,7 @@@ F:      net/dsa/tag_hellcreek.
  
  HISILICON DMA DRIVER
  M:    Zhou Wang <wangzhou1@hisilicon.com>
 -M:    Jie Hai <haijie1@hisilicon.com>
 +M:    Jie Hai <haijie1@huawei.com>
  L:    dmaengine@vger.kernel.org
  S:    Maintained
  F:    drivers/dma/hisi_dma.c
@@@ -9833,7 -9989,7 +9833,7 @@@ S:      Maintaine
  T:    git://git.kernel.org/pub/scm/linux/kernel/git/vfs/idmapping.git
  F:    Documentation/filesystems/idmappings.rst
  F:    tools/testing/selftests/mount_setattr/
 -F:    include/linux/mnt_idmapping.h
 +F:    include/linux/mnt_idmapping.*
  
  IDT VersaClock 5 CLOCK DRIVER
  M:    Luca Ceresoli <luca@lucaceresoli.net>
@@@ -10779,8 -10935,6 +10779,8 @@@ L:   linux-kernel@vger.kernel.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
  F:    kernel/irq/
 +F:    include/linux/group_cpus.h
 +F:    lib/group_cpus.c
  
  IRQCHIP DRIVERS
  M:    Thomas Gleixner <tglx@linutronix.de>
@@@ -11202,9 -11356,9 +11202,9 @@@ F:   virt/kvm/
  KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
  M:    Marc Zyngier <maz@kernel.org>
  R:    James Morse <james.morse@arm.com>
 -R:    Alexandru Elisei <alexandru.elisei@arm.com>
  R:    Suzuki K Poulose <suzuki.poulose@arm.com>
  R:    Oliver Upton <oliver.upton@linux.dev>
 +R:    Zenghui Yu <yuzenghui@huawei.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    kvmarm@lists.linux.dev
  L:    kvmarm@lists.cs.columbia.edu (deprecated, moderated for non-subscribers)
@@@ -13466,7 -13620,7 +13466,7 @@@ F:   arch/microblaze
  
  MICROCHIP AT91 DMA DRIVERS
  M:    Ludovic Desroches <ludovic.desroches@microchip.com>
 -M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +M:    Tudor Ambarus <tudor.ambarus@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    dmaengine@vger.kernel.org
  S:    Supported
@@@ -13511,7 -13665,7 +13511,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/platform/microchip/microchip-csi2dc.c
  
  MICROCHIP ECC DRIVER
 -M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +M:    Tudor Ambarus <tudor.ambarus@linaro.org>
  L:    linux-crypto@vger.kernel.org
  S:    Maintained
  F:    drivers/crypto/atmel-ecc.*
@@@ -13608,7 -13762,7 +13608,7 @@@ S:   Maintaine
  F:    drivers/mmc/host/atmel-mci.c
  
  MICROCHIP NAND DRIVER
 -M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +M:    Tudor Ambarus <tudor.ambarus@linaro.org>
  L:    linux-mtd@lists.infradead.org
  S:    Supported
  F:    Documentation/devicetree/bindings/mtd/atmel-nand.txt
@@@ -13660,7 -13814,7 +13660,7 @@@ S:   Supporte
  F:    drivers/power/reset/at91-sama5d2_shdwc.c
  
  MICROCHIP SPI DRIVER
 -M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +M:    Tudor Ambarus <tudor.ambarus@linaro.org>
  S:    Supported
  F:    drivers/spi/spi-atmel.*
  
@@@ -14447,6 -14601,7 +14447,6 @@@ F:   tools/testing/selftests/net/ipsec.
  
  NETWORKING [IPv4/IPv6]
  M:    "David S. Miller" <davem@davemloft.net>
 -M:    Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
  M:    David Ahern <dsahern@kernel.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -14479,6 -14634,7 +14479,6 @@@ F:   net/netfilter/xt_SECMARK.
  F:    net/netlabel/
  
  NETWORKING [MPTCP]
 -M:    Mat Martineau <mathew.j.martineau@linux.intel.com>
  M:    Matthieu Baerts <matthieu.baerts@tessares.net>
  L:    netdev@vger.kernel.org
  L:    mptcp@lists.linux.dev
@@@ -14763,8 -14919,7 +14763,8 @@@ T:   git://git.infradead.org/nvme.gi
  F:    Documentation/nvme/
  F:    drivers/nvme/host/
  F:    drivers/nvme/common/
 -F:    include/linux/nvme*
 +F:    include/linux/nvme.h
 +F:    include/linux/nvme-*.h
  F:    include/uapi/linux/nvme_ioctl.h
  
  NVM EXPRESS FABRICS AUTHENTICATION
@@@ -15159,6 -15314,7 +15159,6 @@@ Q:   http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
  F:    arch/arm/configs/omap1_defconfig
  F:    arch/arm/mach-omap1/
 -F:    arch/arm/plat-omap/
  F:    drivers/i2c/busses/i2c-omap.c
  F:    include/linux/platform_data/ams-delta-fiq.h
  F:    include/linux/platform_data/i2c-omap.h
@@@ -15173,6 -15329,7 +15173,6 @@@ Q:   http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
  F:    arch/arm/configs/omap2plus_defconfig
  F:    arch/arm/mach-omap2/
 -F:    arch/arm/plat-omap/
  F:    drivers/bus/ti-sysc.c
  F:    drivers/i2c/busses/i2c-omap.c
  F:    drivers/irqchip/irq-omap-intc.c
@@@ -15501,7 -15658,7 +15501,7 @@@ OPENRISC ARCHITECTUR
  M:    Jonas Bonn <jonas@southpole.se>
  M:    Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
  M:    Stafford Horne <shorne@gmail.com>
 -L:    openrisc@lists.librecores.org
 +L:    linux-openrisc@vger.kernel.org
  S:    Maintained
  W:    http://openrisc.io
  T:    git https://github.com/openrisc/linux.git
@@@ -15592,12 -15749,6 +15592,12 @@@ S: Maintaine
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/p54
  F:    drivers/net/wireless/intersil/p54/
  
 +PACKET SOCKETS
 +M:    Willem de Bruijn <willemdebruijn.kernel@gmail.com>
 +S:    Maintained
 +F:    include/uapi/linux/if_packet.h
 +F:    net/packet/af_packet.c
 +
  PACKING
  M:    Vladimir Oltean <olteanv@gmail.com>
  L:    netdev@vger.kernel.org
@@@ -15957,7 -16108,7 +15957,7 @@@ F:   drivers/pci/controller/pci-v3-semi.
  
  PCI ENDPOINT SUBSYSTEM
  M:    Lorenzo Pieralisi <lpieralisi@kernel.org>
 -R:    Krzysztof Wilczyński <kw@linux.com>
 +M:    Krzysztof Wilczyński <kw@linux.com>
  R:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
  R:    Kishon Vijay Abraham I <kishon@kernel.org>
  L:    linux-pci@vger.kernel.org
@@@ -15965,7 -16116,7 +15965,7 @@@ S:   Supporte
  Q:    https://patchwork.kernel.org/project/linux-pci/list/
  B:    https://bugzilla.kernel.org
  C:    irc://irc.oftc.net/linux-pci
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/pci.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git
  F:    Documentation/PCI/endpoint/*
  F:    Documentation/misc-devices/pci-endpoint-test.rst
  F:    drivers/misc/pci_endpoint_test.c
@@@ -16000,7 -16151,7 +16000,7 @@@ S:   Supporte
  Q:    https://patchwork.kernel.org/project/linux-pci/list/
  B:    https://bugzilla.kernel.org
  C:    irc://irc.oftc.net/linux-pci
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git
  F:    Documentation/driver-api/pci/p2pdma.rst
  F:    drivers/pci/p2pdma.c
  F:    include/linux/pci-p2pdma.h
@@@ -16022,14 -16173,14 +16022,14 @@@ F:        drivers/pci/controller/pci-xgene-msi
  
  PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS
  M:    Lorenzo Pieralisi <lpieralisi@kernel.org>
 +M:    Krzysztof Wilczyński <kw@linux.com>
  R:    Rob Herring <robh@kernel.org>
 -R:    Krzysztof Wilczyński <kw@linux.com>
  L:    linux-pci@vger.kernel.org
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-pci/list/
  B:    https://bugzilla.kernel.org
  C:    irc://irc.oftc.net/linux-pci
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/pci.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git
  F:    Documentation/devicetree/bindings/pci/
  F:    drivers/pci/controller/
  F:    drivers/pci/pci-bridge-emul.c
@@@ -16042,7 -16193,7 +16042,7 @@@ S:   Supporte
  Q:    https://patchwork.kernel.org/project/linux-pci/list/
  B:    https://bugzilla.kernel.org
  C:    irc://irc.oftc.net/linux-pci
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git
  F:    Documentation/PCI/
  F:    Documentation/devicetree/bindings/pci/
  F:    arch/x86/kernel/early-quirks.c
@@@ -17086,7 -17237,7 +17086,7 @@@ F:   Documentation/devicetree/bindings/ne
  F:    drivers/net/wwan/qcom_bam_dmux.c
  
  QUALCOMM CAMERA SUBSYSTEM DRIVER
 -M:    Robert Foss <robert.foss@linaro.org>
 +M:    Robert Foss <rfoss@kernel.org>
  M:    Todor Tomov <todor.too@gmail.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
@@@ -17166,7 -17317,7 +17166,7 @@@ F:   drivers/dma/qcom/hidma
  
  QUALCOMM I2C CCI DRIVER
  M:    Loic Poulain <loic.poulain@linaro.org>
 -M:    Robert Foss <robert.foss@linaro.org>
 +M:    Robert Foss <rfoss@kernel.org>
  L:    linux-i2c@vger.kernel.org
  L:    linux-arm-msm@vger.kernel.org
  S:    Maintained
@@@ -17805,7 -17956,6 +17805,7 @@@ M:   Albert Ou <aou@eecs.berkeley.edu
  L:    linux-riscv@lists.infradead.org
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-riscv/list/
 +C:    irc://irc.libera.chat/riscv
  P:    Documentation/riscv/patch-acceptance.rst
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git
  F:    arch/riscv/
@@@ -18071,7 -18221,6 +18071,7 @@@ L:   rust-for-linux@vger.kernel.or
  S:    Supported
  W:    https://github.com/Rust-for-Linux/linux
  B:    https://github.com/Rust-for-Linux/linux/issues
 +C:    zulip://rust-for-linux.zulipchat.com
  T:    git https://github.com/Rust-for-Linux/linux.git rust-next
  F:    Documentation/rust/
  F:    rust/
@@@ -18111,6 -18260,7 +18111,7 @@@ F:   Documentation/driver-api/s390-driver
  F:    Documentation/s390/
  F:    arch/s390/
  F:    drivers/s390/
+ F:    drivers/watchdog/diag288_wdt.c
  
  S390 COMMON I/O LAYER
  M:    Vineeth Vijayan <vneethv@linux.ibm.com>
@@@ -18171,6 -18321,13 +18172,13 @@@ F: arch/s390/pci
  F:    drivers/pci/hotplug/s390_pci_hpc.c
  F:    Documentation/s390/pci.rst
  
+ S390 SCM DRIVER
+ M:    Vineeth Vijayan <vneethv@linux.ibm.com>
+ L:    linux-s390@vger.kernel.org
+ S:    Supported
+ F:    drivers/s390/block/scm*
+ F:    drivers/s390/cio/scm.c
  S390 VFIO AP DRIVER
  M:    Tony Krowiak <akrowiak@linux.ibm.com>
  M:    Halil Pasic <pasic@linux.ibm.com>
@@@ -18214,6 -18371,19 +18222,6 @@@ L:  linux-s390@vger.kernel.or
  S:    Supported
  F:    drivers/s390/scsi/zfcp_*
  
 -S3C ADC BATTERY DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
 -L:    linux-samsung-soc@vger.kernel.org
 -S:    Odd Fixes
 -F:    drivers/power/supply/s3c_adc_battery.c
 -F:    include/linux/s3c_adc_battery.h
 -
 -S3C24XX SD/MMC Driver
 -M:    Ben Dooks <ben-linux@fluff.org>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Supported
 -F:    drivers/mmc/host/s3cmci.*
 -
  SAA6588 RDS RECEIVER DRIVER
  M:    Hans Verkuil <hverkuil@xs4all.nl>
  L:    linux-media@vger.kernel.org
@@@ -18366,9 -18536,11 +18374,9 @@@ F:  Documentation/devicetree/bindings/cl
  F:    Documentation/devicetree/bindings/clock/samsung,s3c*
  F:    drivers/clk/samsung/
  F:    include/dt-bindings/clock/exynos*.h
 -F:    include/dt-bindings/clock/s3c*.h
  F:    include/dt-bindings/clock/s5p*.h
  F:    include/dt-bindings/clock/samsung,*.h
  F:    include/linux/clk/samsung.h
 -F:    include/linux/platform_data/clk-s3c2410.h
  
  SAMSUNG SPI DRIVERS
  M:    Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
@@@ -18379,6 -18551,7 +18387,6 @@@ S:   Maintaine
  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
  
  SAMSUNG SXGBE DRIVERS
  M:    Byungho An <bh74.an@samsung.com>
@@@ -18512,9 -18685,9 +18520,9 @@@ F:   drivers/target
  F:    include/target/
  
  SCTP PROTOCOL
 -M:    Vlad Yasevich <vyasevich@gmail.com>
  M:    Neil Horman <nhorman@tuxdriver.com>
  M:    Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
 +M:    Xin Long <lucien.xin@gmail.com>
  L:    linux-sctp@vger.kernel.org
  S:    Maintained
  W:    http://lksctp.sourceforge.net
@@@ -18948,6 -19121,14 +18956,6 @@@ M:  Simtec Linux Team <linux@simtec.co.u
  S:    Supported
  W:    http://www.simtec.co.uk/products/EB110ATX/
  
 -SIMTEC EB2410ITX (BAST)
 -M:    Simtec Linux Team <linux@simtec.co.uk>
 -S:    Supported
 -W:    http://www.simtec.co.uk/products/EB2410ITX/
 -F:    arch/arm/mach-s3c/bast-ide.c
 -F:    arch/arm/mach-s3c/bast-irq.c
 -F:    arch/arm/mach-s3c/mach-bast.c
 -
  SIOX
  M:    Thorsten Scherer <t.scherer@eckelmann.de>
  M:    Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
@@@ -19152,13 -19333,6 +19160,13 @@@ L: alsa-devel@alsa-project.org (moderat
  S:    Orphan
  F:    sound/soc/uniphier/
  
 +SOCKET TIMESTAMPING
 +M:    Willem de Bruijn <willemdebruijn.kernel@gmail.com>
 +S:    Maintained
 +F:    Documentation/networking/timestamping.rst
 +F:    include/uapi/linux/net_tstamp.h
 +F:    tools/testing/selftests/net/so_txtime.c
 +
  SOEKRIS NET48XX LED SUPPORT
  M:    Chris Boot <bootc@bootc.net>
  S:    Maintained
@@@ -19506,7 -19680,7 +19514,7 @@@ F:   drivers/clk/spear
  F:    drivers/pinctrl/spear/
  
  SPI NOR SUBSYSTEM
 -M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +M:    Tudor Ambarus <tudor.ambarus@linaro.org>
  M:    Pratyush Yadav <pratyush@kernel.org>
  R:    Michael Walle <michael@walle.cc>
  L:    linux-mtd@lists.infradead.org
@@@ -19904,7 -20078,6 +19912,7 @@@ F:   drivers/watchdog/sunplus_wdt.
  SUPERH
  M:    Yoshinori Sato <ysato@users.sourceforge.jp>
  M:    Rich Felker <dalias@libc.org>
 +M:    John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
  L:    linux-sh@vger.kernel.org
  S:    Maintained
  Q:    http://patchwork.kernel.org/project/linux-sh/list/
@@@ -19920,8 -20093,7 +19928,8 @@@ L:   linux-pm@vger.kernel.or
  S:    Supported
  B:    https://bugzilla.kernel.org
  F:    Documentation/power/
 -F:    arch/x86/kernel/acpi/
 +F:    arch/x86/kernel/acpi/sleep*
 +F:    arch/x86/kernel/acpi/wakeup*
  F:    drivers/base/power/
  F:    include/linux/freezer.h
  F:    include/linux/pm.h
@@@ -20138,7 -20310,8 +20146,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/system76_acpi.c
  
  SYSV FILESYSTEM
 -M:    Christoph Hellwig <hch@infradead.org>
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/filesystems/sysv-fs.rst
  F:    fs/sysv/
  F:    include/linux/sysv_fs.h
@@@ -20529,7 -20702,6 +20537,7 @@@ S:   Supporte
  Q:    https://patchwork.kernel.org/project/linux-pm/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git thermal
  F:    Documentation/ABI/testing/sysfs-class-thermal
 +F:    Documentation/admin-guide/thermal/
  F:    Documentation/devicetree/bindings/thermal/
  F:    Documentation/driver-api/thermal/
  F:    drivers/thermal/
@@@ -20686,6 -20858,7 +20694,6 @@@ W:   https://linuxtv.or
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
  F:    drivers/media/platform/ti/davinci/
 -F:    drivers/staging/media/deprecated/vpfe_capture/
  F:    include/media/davinci/
  
  TI ENHANCED CAPTURE (eCAP) DRIVER
@@@ -21545,7 -21718,6 +21553,7 @@@ F:   include/uapi/linux/uvcvideo.
  
  USB WEBCAM GADGET
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 +M:    Daniel Scally <dan.scally@ideasonboard.com>
  L:    linux-usb@vger.kernel.org
  S:    Maintained
  F:    drivers/usb/gadget/function/*uvc*
@@@ -21581,13 -21753,6 +21589,13 @@@ T: git git://linuxtv.org/media_tree.gi
  F:    Documentation/admin-guide/media/zr364xx*
  F:    drivers/staging/media/deprecated/zr364xx/
  
 +USER DATAGRAM PROTOCOL (UDP)
 +M:    Willem de Bruijn <willemdebruijn.kernel@gmail.com>
 +S:    Maintained
 +F:    include/linux/udp.h
 +F:    net/ipv4/udp.c
 +F:    net/ipv6/udp.c
 +
  USER-MODE LINUX (UML)
  M:    Richard Weinberger <richard@nod.at>
  M:    Anton Ivanov <anton.ivanov@cambridgegreys.com>
@@@ -21633,9 -21798,11 +21641,9 @@@ W:  http://en.wikipedia.org/wiki/Util-li
  T:    git git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
  
  UUID HELPERS
 -M:    Christoph Hellwig <hch@lst.de>
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
 -T:    git git://git.infradead.org/users/hch/uuid.git
  F:    include/linux/uuid.h
  F:    include/uapi/linux/uuid.h
  F:    lib/test_uuid.c
@@@ -22749,13 -22916,6 +22757,13 @@@ F: Documentation/devicetree/bindings/dm
  F:    drivers/dma/xilinx/xilinx_dpdma.c
  F:    include/dt-bindings/dma/xlnx-zynqmp-dpdma.h
  
 +XILINX ZYNQMP OCM EDAC DRIVER
 +M:    Shubhrajyoti Datta <shubhrajyoti.datta@amd.com>
 +M:    Sai Krishna Potthuri <sai.krishna.potthuri@amd.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/memory-controllers/xlnx,zynqmp-ocmc-1.0.yaml
 +F:    drivers/edac/zynqmp_edac.c
 +
  XILINX ZYNQMP PSGTR PHY DRIVER
  M:    Anurag Kumar Vulisha <anurag.kumar.vulisha@xilinx.com>
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
diff --combined arch/s390/kernel/idle.c
@@@ -12,9 -12,9 +12,9 @@@
  #include <linux/notifier.h>
  #include <linux/init.h>
  #include <linux/cpu.h>
 -#include <linux/sched/cputime.h>
  #include <trace/events/power.h>
  #include <asm/cpu_mf.h>
 +#include <asm/cputime.h>
  #include <asm/nmi.h>
  #include <asm/smp.h>
  #include "entry.h"
@@@ -24,116 -24,62 +24,61 @@@ static DEFINE_PER_CPU(struct s390_idle_
  void account_idle_time_irq(void)
  {
        struct s390_idle_data *idle = this_cpu_ptr(&s390_idle);
+       unsigned long idle_time;
        u64 cycles_new[8];
        int i;
  
-       clear_cpu_flag(CIF_ENABLED_WAIT);
        if (smp_cpu_mtid) {
                stcctm(MT_DIAG, smp_cpu_mtid, cycles_new);
                for (i = 0; i < smp_cpu_mtid; i++)
                        this_cpu_add(mt_cycles[i], cycles_new[i] - idle->mt_cycles_enter[i]);
        }
  
-       idle->clock_idle_exit = S390_lowcore.int_clock;
-       idle->timer_idle_exit = S390_lowcore.sys_enter_timer;
+       idle_time = S390_lowcore.int_clock - idle->clock_idle_enter;
  
        S390_lowcore.steal_timer += idle->clock_idle_enter - S390_lowcore.last_update_clock;
-       S390_lowcore.last_update_clock = idle->clock_idle_exit;
+       S390_lowcore.last_update_clock = S390_lowcore.int_clock;
  
        S390_lowcore.system_timer += S390_lowcore.last_update_timer - idle->timer_idle_enter;
-       S390_lowcore.last_update_timer = idle->timer_idle_exit;
+       S390_lowcore.last_update_timer = S390_lowcore.sys_enter_timer;
+       /* Account time spent with enabled wait psw loaded as idle time. */
+       WRITE_ONCE(idle->idle_time, READ_ONCE(idle->idle_time) + idle_time);
+       WRITE_ONCE(idle->idle_count, READ_ONCE(idle->idle_count) + 1);
+       account_idle_time(cputime_to_nsecs(idle_time));
  }
  
- void arch_cpu_idle(void)
+ void noinstr arch_cpu_idle(void)
  {
        struct s390_idle_data *idle = this_cpu_ptr(&s390_idle);
-       unsigned long idle_time;
        unsigned long psw_mask;
  
        /* Wait for external, I/O or machine check interrupt. */
-       psw_mask = PSW_KERNEL_BITS | PSW_MASK_WAIT | PSW_MASK_DAT |
-               PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK;
+       psw_mask = PSW_KERNEL_BITS | PSW_MASK_WAIT |
+                  PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK;
        clear_cpu_flag(CIF_NOHZ_DELAY);
  
        /* psw_idle() returns with interrupts disabled. */
        psw_idle(idle, psw_mask);
-       /* Account time spent with enabled wait psw loaded as idle time. */
-       raw_write_seqcount_begin(&idle->seqcount);
-       idle_time = idle->clock_idle_exit - idle->clock_idle_enter;
-       idle->clock_idle_enter = idle->clock_idle_exit = 0ULL;
-       idle->idle_time += idle_time;
-       idle->idle_count++;
-       account_idle_time(cputime_to_nsecs(idle_time));
-       raw_write_seqcount_end(&idle->seqcount);
 -      raw_local_irq_enable();
  }
  
  static ssize_t show_idle_count(struct device *dev,
-                               struct device_attribute *attr, char *buf)
+                              struct device_attribute *attr, char *buf)
  {
        struct s390_idle_data *idle = &per_cpu(s390_idle, dev->id);
-       unsigned long idle_count;
-       unsigned int seq;
-       do {
-               seq = read_seqcount_begin(&idle->seqcount);
-               idle_count = READ_ONCE(idle->idle_count);
-               if (READ_ONCE(idle->clock_idle_enter))
-                       idle_count++;
-       } while (read_seqcount_retry(&idle->seqcount, seq));
-       return sprintf(buf, "%lu\n", idle_count);
+       return sysfs_emit(buf, "%lu\n", READ_ONCE(idle->idle_count));
  }
  DEVICE_ATTR(idle_count, 0444, show_idle_count, NULL);
  
  static ssize_t show_idle_time(struct device *dev,
-                               struct device_attribute *attr, char *buf)
+                             struct device_attribute *attr, char *buf)
  {
-       unsigned long now, idle_time, idle_enter, idle_exit, in_idle;
        struct s390_idle_data *idle = &per_cpu(s390_idle, dev->id);
-       unsigned int seq;
-       do {
-               seq = read_seqcount_begin(&idle->seqcount);
-               idle_time = READ_ONCE(idle->idle_time);
-               idle_enter = READ_ONCE(idle->clock_idle_enter);
-               idle_exit = READ_ONCE(idle->clock_idle_exit);
-       } while (read_seqcount_retry(&idle->seqcount, seq));
-       in_idle = 0;
-       now = get_tod_clock();
-       if (idle_enter) {
-               if (idle_exit) {
-                       in_idle = idle_exit - idle_enter;
-               } else if (now > idle_enter) {
-                       in_idle = now - idle_enter;
-               }
-       }
-       idle_time += in_idle;
-       return sprintf(buf, "%lu\n", idle_time >> 12);
- }
- DEVICE_ATTR(idle_time_us, 0444, show_idle_time, NULL);
  
- u64 arch_cpu_idle_time(int cpu)
- {
-       struct s390_idle_data *idle = &per_cpu(s390_idle, cpu);
-       unsigned long now, idle_enter, idle_exit, in_idle;
-       unsigned int seq;
-       do {
-               seq = read_seqcount_begin(&idle->seqcount);
-               idle_enter = READ_ONCE(idle->clock_idle_enter);
-               idle_exit = READ_ONCE(idle->clock_idle_exit);
-       } while (read_seqcount_retry(&idle->seqcount, seq));
-       in_idle = 0;
-       now = get_tod_clock();
-       if (idle_enter) {
-               if (idle_exit) {
-                       in_idle = idle_exit - idle_enter;
-               } else if (now > idle_enter) {
-                       in_idle = now - idle_enter;
-               }
-       }
-       return cputime_to_nsecs(in_idle);
+       return sysfs_emit(buf, "%lu\n", READ_ONCE(idle->idle_time) >> 12);
  }
+ DEVICE_ATTR(idle_time_us, 0444, show_idle_time, NULL);
  
  void arch_cpu_idle_enter(void)
  {
@@@ -2,7 -2,7 +2,7 @@@
  /*
   * Performance event support for s390x - CPU-measurement Counter Facility
   *
-  *  Copyright IBM Corp. 2012, 2021
+  *  Copyright IBM Corp. 2012, 2023
   *  Author(s): Hendrik Brueckner <brueckner@linux.ibm.com>
   *           Thomas Richter <tmricht@linux.ibm.com>
   */
  #include <linux/init.h>
  #include <linux/export.h>
  #include <linux/miscdevice.h>
+ #include <linux/perf_event.h>
  
- #include <asm/cpu_mcf.h>
+ #include <asm/cpu_mf.h>
  #include <asm/hwctrset.h>
  #include <asm/debug.h>
  
+ enum cpumf_ctr_set {
+       CPUMF_CTR_SET_BASIC   = 0,    /* Basic Counter Set */
+       CPUMF_CTR_SET_USER    = 1,    /* Problem-State Counter Set */
+       CPUMF_CTR_SET_CRYPTO  = 2,    /* Crypto-Activity Counter Set */
+       CPUMF_CTR_SET_EXT     = 3,    /* Extended Counter Set */
+       CPUMF_CTR_SET_MT_DIAG = 4,    /* MT-diagnostic Counter Set */
+       /* Maximum number of counter sets */
+       CPUMF_CTR_SET_MAX,
+ };
+ #define CPUMF_LCCTL_ENABLE_SHIFT    16
+ #define CPUMF_LCCTL_ACTCTL_SHIFT     0
+ static inline void ctr_set_enable(u64 *state, u64 ctrsets)
+ {
+       *state |= ctrsets << CPUMF_LCCTL_ENABLE_SHIFT;
+ }
+ static inline void ctr_set_disable(u64 *state, u64 ctrsets)
+ {
+       *state &= ~(ctrsets << CPUMF_LCCTL_ENABLE_SHIFT);
+ }
+ static inline void ctr_set_start(u64 *state, u64 ctrsets)
+ {
+       *state |= ctrsets << CPUMF_LCCTL_ACTCTL_SHIFT;
+ }
+ static inline void ctr_set_stop(u64 *state, u64 ctrsets)
+ {
+       *state &= ~(ctrsets << CPUMF_LCCTL_ACTCTL_SHIFT);
+ }
+ static inline int ctr_stcctm(enum cpumf_ctr_set set, u64 range, u64 *dest)
+ {
+       switch (set) {
+       case CPUMF_CTR_SET_BASIC:
+               return stcctm(BASIC, range, dest);
+       case CPUMF_CTR_SET_USER:
+               return stcctm(PROBLEM_STATE, range, dest);
+       case CPUMF_CTR_SET_CRYPTO:
+               return stcctm(CRYPTO_ACTIVITY, range, dest);
+       case CPUMF_CTR_SET_EXT:
+               return stcctm(EXTENDED, range, dest);
+       case CPUMF_CTR_SET_MT_DIAG:
+               return stcctm(MT_DIAG_CLEARING, range, dest);
+       case CPUMF_CTR_SET_MAX:
+               return 3;
+       }
+       return 3;
+ }
+ struct cpu_cf_events {
+       struct cpumf_ctr_info   info;
+       atomic_t                ctr_set[CPUMF_CTR_SET_MAX];
+       u64                     state;          /* For perf_event_open SVC */
+       u64                     dev_state;      /* For /dev/hwctr */
+       unsigned int            flags;
+       size_t used;                    /* Bytes used in data */
+       size_t usedss;                  /* Bytes used in start/stop */
+       unsigned char start[PAGE_SIZE]; /* Counter set at event add */
+       unsigned char stop[PAGE_SIZE];  /* Counter set at event delete */
+       unsigned char data[PAGE_SIZE];  /* Counter set at /dev/hwctr */
+       unsigned int sets;              /* # Counter set saved in memory */
+ };
+ /* Per-CPU event structure for the counter facility */
+ static DEFINE_PER_CPU(struct cpu_cf_events, cpu_cf_events);
  static unsigned int cfdiag_cpu_speed; /* CPU speed for CF_DIAG trailer */
  static debug_info_t *cf_dbg;
  
@@@ -112,6 -183,53 +183,53 @@@ static void cfdiag_trailer(struct cf_tr
        te->timestamp = get_tod_clock_fast();
  }
  
+ /*
+  * Return the maximum possible counter set size (in number of 8 byte counters)
+  * depending on type and model number.
+  */
+ static size_t cpum_cf_ctrset_size(enum cpumf_ctr_set ctrset,
+                                 struct cpumf_ctr_info *info)
+ {
+       size_t ctrset_size = 0;
+       switch (ctrset) {
+       case CPUMF_CTR_SET_BASIC:
+               if (info->cfvn >= 1)
+                       ctrset_size = 6;
+               break;
+       case CPUMF_CTR_SET_USER:
+               if (info->cfvn == 1)
+                       ctrset_size = 6;
+               else if (info->cfvn >= 3)
+                       ctrset_size = 2;
+               break;
+       case CPUMF_CTR_SET_CRYPTO:
+               if (info->csvn >= 1 && info->csvn <= 5)
+                       ctrset_size = 16;
+               else if (info->csvn == 6 || info->csvn == 7)
+                       ctrset_size = 20;
+               break;
+       case CPUMF_CTR_SET_EXT:
+               if (info->csvn == 1)
+                       ctrset_size = 32;
+               else if (info->csvn == 2)
+                       ctrset_size = 48;
+               else if (info->csvn >= 3 && info->csvn <= 5)
+                       ctrset_size = 128;
+               else if (info->csvn == 6 || info->csvn == 7)
+                       ctrset_size = 160;
+               break;
+       case CPUMF_CTR_SET_MT_DIAG:
+               if (info->csvn > 3)
+                       ctrset_size = 48;
+               break;
+       case CPUMF_CTR_SET_MAX:
+               break;
+       }
+       return ctrset_size;
+ }
  /* Read a counter set. The counter set number determines the counter set and
   * the CPUM-CF first and second version number determine the number of
   * available counters in each counter set.
@@@ -388,6 -506,47 +506,47 @@@ static void cpumf_pmu_disable(struct pm
        cpuhw->flags &= ~PMU_F_ENABLED;
  }
  
+ #define PMC_INIT      0UL
+ #define PMC_RELEASE   1UL
+ static void cpum_cf_setup_cpu(void *flags)
+ {
+       struct cpu_cf_events *cpuhw = this_cpu_ptr(&cpu_cf_events);
+       switch ((unsigned long)flags) {
+       case PMC_INIT:
+               memset(&cpuhw->info, 0, sizeof(cpuhw->info));
+               qctri(&cpuhw->info);
+               cpuhw->flags |= PMU_F_RESERVED;
+               break;
+       case PMC_RELEASE:
+               cpuhw->flags &= ~PMU_F_RESERVED;
+               break;
+       }
+       /* Disable CPU counter sets */
+       lcctl(0);
+       debug_sprintf_event(cf_dbg, 5, "%s flags %#x flags %#x state %#llx\n",
+                           __func__, *(int *)flags, cpuhw->flags,
+                           cpuhw->state);
+ }
+ /* Initialize the CPU-measurement counter facility */
+ static int __kernel_cpumcf_begin(void)
+ {
+       on_each_cpu(cpum_cf_setup_cpu, (void *)PMC_INIT, 1);
+       irq_subclass_register(IRQ_SUBCLASS_MEASUREMENT_ALERT);
+       return 0;
+ }
+ /* Release the CPU-measurement counter facility */
+ static void __kernel_cpumcf_end(void)
+ {
+       on_each_cpu(cpum_cf_setup_cpu, (void *)PMC_RELEASE, 1);
+       irq_subclass_unregister(IRQ_SUBCLASS_MEASUREMENT_ALERT);
+ }
  
  /* Number of perf events counting hardware events */
  static atomic_t num_events = ATOMIC_INIT(0);
@@@ -397,12 -556,10 +556,10 @@@ static DEFINE_MUTEX(pmc_reserve_mutex)
  /* Release the PMU if event is the last perf event */
  static void hw_perf_event_destroy(struct perf_event *event)
  {
-       if (!atomic_add_unless(&num_events, -1, 1)) {
-               mutex_lock(&pmc_reserve_mutex);
-               if (atomic_dec_return(&num_events) == 0)
-                       __kernel_cpumcf_end();
-               mutex_unlock(&pmc_reserve_mutex);
-       }
+       mutex_lock(&pmc_reserve_mutex);
+       if (atomic_dec_return(&num_events) == 0)
+               __kernel_cpumcf_end();
+       mutex_unlock(&pmc_reserve_mutex);
  }
  
  /* CPUMF <-> perf event mappings for kernel+userspace (basic set) */
@@@ -434,6 -591,12 +591,12 @@@ static void cpumf_hw_inuse(void
        mutex_unlock(&pmc_reserve_mutex);
  }
  
+ static int is_userspace_event(u64 ev)
+ {
+       return cpumf_generic_events_user[PERF_COUNT_HW_CPU_CYCLES] == ev ||
+              cpumf_generic_events_user[PERF_COUNT_HW_INSTRUCTIONS] == ev;
+ }
  static int __hw_perf_event_init(struct perf_event *event, unsigned int type)
  {
        struct perf_event_attr *attr = &event->attr;
                if (is_sampling_event(event))   /* No sampling support */
                        return -ENOENT;
                ev = attr->config;
-               /* Count user space (problem-state) only */
                if (!attr->exclude_user && attr->exclude_kernel) {
-                       if (ev >= ARRAY_SIZE(cpumf_generic_events_user))
-                               return -EOPNOTSUPP;
-                       ev = cpumf_generic_events_user[ev];
-               /* No support for kernel space counters only */
+                       /*
+                        * Count user space (problem-state) only
+                        * Handle events 32 and 33 as 0:u and 1:u
+                        */
+                       if (!is_userspace_event(ev)) {
+                               if (ev >= ARRAY_SIZE(cpumf_generic_events_user))
+                                       return -EOPNOTSUPP;
+                               ev = cpumf_generic_events_user[ev];
+                       }
                } else if (!attr->exclude_kernel && attr->exclude_user) {
+                       /* No support for kernel space counters only */
                        return -EOPNOTSUPP;
-               } else {        /* Count user and kernel space */
-                       if (ev >= ARRAY_SIZE(cpumf_generic_events_basic))
-                               return -EOPNOTSUPP;
-                       ev = cpumf_generic_events_basic[ev];
+               } else {
+                       /* Count user and kernel space, incl. events 32 + 33 */
+                       if (!is_userspace_event(ev)) {
+                               if (ev >= ARRAY_SIZE(cpumf_generic_events_basic))
+                                       return -EOPNOTSUPP;
+                               ev = cpumf_generic_events_basic[ev];
+                       }
                }
                break;
  
@@@ -662,7 -832,9 +832,7 @@@ static int cfdiag_push_sample(struct pe
        if (event->attr.sample_type & PERF_SAMPLE_RAW) {
                raw.frag.size = cpuhw->usedss;
                raw.frag.data = cpuhw->stop;
 -              raw.size = raw.frag.size;
 -              data.raw = &raw;
 -              data.sample_flags |= PERF_SAMPLE_RAW;
 +              perf_sample_save_raw_data(&data, &raw);
        }
  
        overflow = perf_event_overflow(event, &data, &regs);
@@@ -761,31 -933,120 +931,120 @@@ static struct pmu cpumf_pmu = 
        .read         = cpumf_pmu_read,
  };
  
+ static int cpum_cf_setup(unsigned int cpu, unsigned long flags)
+ {
+       local_irq_disable();
+       cpum_cf_setup_cpu((void *)flags);
+       local_irq_enable();
+       return 0;
+ }
+ static int cfset_online_cpu(unsigned int cpu);
+ static int cpum_cf_online_cpu(unsigned int cpu)
+ {
+       debug_sprintf_event(cf_dbg, 4, "%s cpu %d in_irq %ld\n", __func__,
+                           cpu, in_interrupt());
+       cpum_cf_setup(cpu, PMC_INIT);
+       return cfset_online_cpu(cpu);
+ }
+ static int cfset_offline_cpu(unsigned int cpu);
+ static int cpum_cf_offline_cpu(unsigned int cpu)
+ {
+       debug_sprintf_event(cf_dbg, 4, "%s cpu %d\n", __func__, cpu);
+       cfset_offline_cpu(cpu);
+       return cpum_cf_setup(cpu, PMC_RELEASE);
+ }
+ /* Return true if store counter set multiple instruction is available */
+ static inline int stccm_avail(void)
+ {
+       return test_facility(142);
+ }
+ /* CPU-measurement alerts for the counter facility */
+ static void cpumf_measurement_alert(struct ext_code ext_code,
+                                   unsigned int alert, unsigned long unused)
+ {
+       struct cpu_cf_events *cpuhw;
+       if (!(alert & CPU_MF_INT_CF_MASK))
+               return;
+       inc_irq_stat(IRQEXT_CMC);
+       cpuhw = this_cpu_ptr(&cpu_cf_events);
+       /*
+        * Measurement alerts are shared and might happen when the PMU
+        * is not reserved.  Ignore these alerts in this case.
+        */
+       if (!(cpuhw->flags & PMU_F_RESERVED))
+               return;
+       /* counter authorization change alert */
+       if (alert & CPU_MF_INT_CF_CACA)
+               qctri(&cpuhw->info);
+       /* loss of counter data alert */
+       if (alert & CPU_MF_INT_CF_LCDA)
+               pr_err("CPU[%i] Counter data was lost\n", smp_processor_id());
+       /* loss of MT counter data alert */
+       if (alert & CPU_MF_INT_CF_MTDA)
+               pr_warn("CPU[%i] MT counter data was lost\n",
+                       smp_processor_id());
+ }
  static int cfset_init(void);
  static int __init cpumf_pmu_init(void)
  {
        int rc;
  
-       if (!kernel_cpumcf_avail())
+       if (!cpum_cf_avail())
                return -ENODEV;
  
+       /*
+        * Clear bit 15 of cr0 to unauthorize problem-state to
+        * extract measurement counters
+        */
+       ctl_clear_bit(0, 48);
+       /* register handler for measurement-alert interruptions */
+       rc = register_external_irq(EXT_IRQ_MEASURE_ALERT,
+                                  cpumf_measurement_alert);
+       if (rc) {
+               pr_err("Registering for CPU-measurement alerts failed with rc=%i\n", rc);
+               return rc;
+       }
        /* Setup s390dbf facility */
        cf_dbg = debug_register(KMSG_COMPONENT, 2, 1, 128);
        if (!cf_dbg) {
                pr_err("Registration of s390dbf(cpum_cf) failed\n");
-               return -ENOMEM;
+               rc = -ENOMEM;
+               goto out1;
        }
        debug_register_view(cf_dbg, &debug_sprintf_view);
  
        cpumf_pmu.attr_groups = cpumf_cf_event_group();
        rc = perf_pmu_register(&cpumf_pmu, "cpum_cf", -1);
        if (rc) {
-               debug_unregister_view(cf_dbg, &debug_sprintf_view);
-               debug_unregister(cf_dbg);
                pr_err("Registering the cpum_cf PMU failed with rc=%i\n", rc);
+               goto out2;
        } else if (stccm_avail()) {     /* Setup counter set device */
                cfset_init();
        }
+       rc = cpuhp_setup_state(CPUHP_AP_PERF_S390_CF_ONLINE,
+                              "perf/s390/cf:online",
+                              cpum_cf_online_cpu, cpum_cf_offline_cpu);
+       return rc;
+ out2:
+       debug_unregister_view(cf_dbg, &debug_sprintf_view);
+       debug_unregister(cf_dbg);
+ out1:
+       unregister_external_irq(EXT_IRQ_MEASURE_ALERT, cpumf_measurement_alert);
        return rc;
  }
  
@@@ -1003,7 -1264,6 +1262,6 @@@ static int cfset_all_start(struct cfset
        return rc;
  }
  
  /* Return the maximum required space for all possible CPUs in case one
   * CPU will be onlined during the START, READ, STOP cycles.
   * To find out the size of the counter sets, any one CPU will do. They
@@@ -1266,7 -1526,7 +1524,7 @@@ static struct miscdevice cfset_dev = 
  /* Hotplug add of a CPU. Scan through all active processes and add
   * that CPU to the list of CPUs supplied with ioctl(..., START, ...).
   */
- int cfset_online_cpu(unsigned int cpu)
static int cfset_online_cpu(unsigned int cpu)
  {
        struct cfset_call_on_cpu_parm p;
        struct cfset_request *rp;
  /* Hotplug remove of a CPU. Scan through all active processes and clear
   * that CPU from the list of CPUs supplied with ioctl(..., START, ...).
   */
- int cfset_offline_cpu(unsigned int cpu)
static int cfset_offline_cpu(unsigned int cpu)
  {
        struct cfset_call_on_cpu_parm p;
        struct cfset_request *rp;
@@@ -22,6 -22,7 +22,7 @@@
  #include <asm/irq.h>
  #include <asm/debug.h>
  #include <asm/timex.h>
+ #include <asm-generic/io.h>
  
  /* Minimum number of sample-data-block-tables:
   * At least one table is required for the sampling buffer structure.
@@@ -99,6 -100,57 +100,57 @@@ static DEFINE_PER_CPU(struct cpu_hw_sf
  /* Debug feature */
  static debug_info_t *sfdbg;
  
+ /* Sampling control helper functions */
+ static inline unsigned long freq_to_sample_rate(struct hws_qsi_info_block *qsi,
+                                               unsigned long freq)
+ {
+       return (USEC_PER_SEC / freq) * qsi->cpu_speed;
+ }
+ static inline unsigned long sample_rate_to_freq(struct hws_qsi_info_block *qsi,
+                                               unsigned long rate)
+ {
+       return USEC_PER_SEC * qsi->cpu_speed / rate;
+ }
+ /* Return TOD timestamp contained in an trailer entry */
+ static inline unsigned long long trailer_timestamp(struct hws_trailer_entry *te)
+ {
+       /* TOD in STCKE format */
+       if (te->header.t)
+               return *((unsigned long long *)&te->timestamp[1]);
+       /* TOD in STCK format */
+       return *((unsigned long long *)&te->timestamp[0]);
+ }
+ /* Return pointer to trailer entry of an sample data block */
+ static inline struct hws_trailer_entry *trailer_entry_ptr(unsigned long v)
+ {
+       void *ret;
+       ret = (void *)v;
+       ret += PAGE_SIZE;
+       ret -= sizeof(struct hws_trailer_entry);
+       return ret;
+ }
+ /*
+  * Return true if the entry in the sample data block table (sdbt)
+  * is a link to the next sdbt
+  */
+ static inline int is_link_entry(unsigned long *s)
+ {
+       return *s & 0x1UL ? 1 : 0;
+ }
+ /* Return pointer to the linked sdbt */
+ static inline unsigned long *get_next_sdbt(unsigned long *s)
+ {
+       return phys_to_virt(*s & ~0x1UL);
+ }
  /*
   * sf_disable() - Switch off sampling facility
   */
@@@ -150,7 -202,7 +202,7 @@@ static void free_sampling_buffer(struc
                } else {
                        /* Process SDB pointer */
                        if (*curr) {
-                               free_page(*curr);
+                               free_page((unsigned long)phys_to_virt(*curr));
                                curr++;
                        }
                }
@@@ -170,11 -222,11 +222,11 @@@ static int alloc_sample_data_block(unsi
        sdb = get_zeroed_page(gfp_flags);
        if (!sdb)
                return -ENOMEM;
-       te = (struct hws_trailer_entry *)trailer_entry_ptr(sdb);
+       te = trailer_entry_ptr(sdb);
        te->header.a = 1;
  
        /* Link SDB into the sample-data-block-table */
-       *sdbt = sdb;
+       *sdbt = virt_to_phys((void *)sdb);
  
        return 0;
  }
@@@ -233,7 -285,7 +285,7 @@@ static int realloc_sampling_buffer(stru
                        }
                        sfb->num_sdbt++;
                        /* Link current page to tail of chain */
-                       *tail = (unsigned long)(void *) new + 1;
+                       *tail = virt_to_phys((void *)new) + 1;
                        tail_prev = tail;
                        tail = new;
                }
        }
  
        /* Link sampling buffer to its origin */
-       *tail = (unsigned long) sfb->sdbt + 1;
+       *tail = virt_to_phys(sfb->sdbt) + 1;
        sfb->tail = tail;
  
        debug_sprintf_event(sfdbg, 4, "%s: new buffer"
@@@ -301,7 -353,7 +353,7 @@@ static int alloc_sampling_buffer(struc
         * realloc_sampling_buffer() invocation.
         */
        sfb->tail = sfb->sdbt;
-       *sfb->tail = (unsigned long)(void *) sfb->sdbt + 1;
+       *sfb->tail = virt_to_phys((void *)sfb->sdbt) + 1;
  
        /* Allocate requested number of sample-data-blocks */
        rc = realloc_sampling_buffer(sfb, num_sdb, GFP_KERNEL);
@@@ -557,9 -609,6 +609,6 @@@ static void setup_pmc_cpu(void *flags
                if (err)
                        pr_err("Switching off the sampling facility failed "
                               "with rc %i\n", err);
-               debug_sprintf_event(sfdbg, 5,
-                                   "%s: initialized: cpuhw %p\n", __func__,
-                                   cpusf);
                break;
        case PMC_RELEASE:
                cpusf->flags &= ~PMU_F_RESERVED;
                               "with rc %i\n", err);
                } else
                        deallocate_buffers(cpusf);
-               debug_sprintf_event(sfdbg, 5,
-                                   "%s: released: cpuhw %p\n", __func__,
-                                   cpusf);
                break;
        }
        if (err)
@@@ -672,8 -718,7 +718,8 @@@ static void cpumsf_output_event_pid(str
        /* Protect callchain buffers, tasks */
        rcu_read_lock();
  
 -      perf_prepare_sample(&header, data, event, regs);
 +      perf_prepare_sample(data, event, regs);
 +      perf_prepare_header(&header, data, event, regs);
        if (perf_output_begin(&handle, data, event, header.size))
                goto out;
  
@@@ -1177,8 -1222,8 +1223,8 @@@ static void hw_collect_samples(struct p
        struct hws_trailer_entry *te;
        struct hws_basic_entry *sample;
  
-       te = (struct hws_trailer_entry *) trailer_entry_ptr(*sdbt);
-       sample = (struct hws_basic_entry *) *sdbt;
+       te = trailer_entry_ptr((unsigned long)sdbt);
+       sample = (struct hws_basic_entry *)sdbt;
        while ((unsigned long *) sample < (unsigned long *) te) {
                /* Check for an empty sample */
                if (!sample->def || sample->LS)
@@@ -1259,7 -1304,7 +1305,7 @@@ static void hw_perf_event_update(struc
        union hws_trailer_header old, prev, new;
        struct hw_perf_event *hwc = &event->hw;
        struct hws_trailer_entry *te;
-       unsigned long *sdbt;
+       unsigned long *sdbt, sdb;
        int done;
  
        /*
        done = event_overflow = sampl_overflow = num_sdb = 0;
        while (!done) {
                /* Get the trailer entry of the sample-data-block */
-               te = (struct hws_trailer_entry *) trailer_entry_ptr(*sdbt);
+               sdb = (unsigned long)phys_to_virt(*sdbt);
+               te = trailer_entry_ptr(sdb);
  
                /* Leave loop if no more work to do (block full indicator) */
                if (!te->header.f) {
                        sampl_overflow += te->header.overflow;
  
                /* Timestamps are valid for full sample-data-blocks only */
-               debug_sprintf_event(sfdbg, 6, "%s: sdbt %#lx "
+               debug_sprintf_event(sfdbg, 6, "%s: sdbt %#lx/%#lx "
                                    "overflow %llu timestamp %#llx\n",
-                                   __func__, (unsigned long)sdbt, te->header.overflow,
+                                   __func__, sdb, (unsigned long)sdbt,
+                                   te->header.overflow,
                                    (te->header.f) ? trailer_timestamp(te) : 0ULL);
  
                /* Collect all samples from a single sample-data-block and
                 * flag if an (perf) event overflow happened.  If so, the PMU
                 * is stopped and remaining samples will be discarded.
                 */
-               hw_collect_samples(event, sdbt, &event_overflow);
+               hw_collect_samples(event, (unsigned long *)sdb, &event_overflow);
                num_sdb++;
  
                /* Reset trailer (using compare-double-and-swap) */
                                    OVERFLOW_REG(hwc), num_sdb);
  }
  
- #define AUX_SDB_INDEX(aux, i) ((i) % aux->sfb.num_sdb)
- #define AUX_SDB_NUM(aux, start, end) (end >= start ? end - start + 1 : 0)
- #define AUX_SDB_NUM_ALERT(aux) AUX_SDB_NUM(aux, aux->head, aux->alert_mark)
- #define AUX_SDB_NUM_EMPTY(aux) AUX_SDB_NUM(aux, aux->head, aux->empty_mark)
+ static inline unsigned long aux_sdb_index(struct aux_buffer *aux,
+                                         unsigned long i)
+ {
+       return i % aux->sfb.num_sdb;
+ }
+ static inline unsigned long aux_sdb_num(unsigned long start, unsigned long end)
+ {
+       return end >= start ? end - start + 1 : 0;
+ }
+ static inline unsigned long aux_sdb_num_alert(struct aux_buffer *aux)
+ {
+       return aux_sdb_num(aux->head, aux->alert_mark);
+ }
+ static inline unsigned long aux_sdb_num_empty(struct aux_buffer *aux)
+ {
+       return aux_sdb_num(aux->head, aux->empty_mark);
+ }
  
  /*
   * Get trailer entry by index of SDB.
@@@ -1374,9 -1437,9 +1438,9 @@@ static struct hws_trailer_entry *aux_sd
  {
        unsigned long sdb;
  
-       index = AUX_SDB_INDEX(aux, index);
+       index = aux_sdb_index(aux, index);
        sdb = aux->sdb_index[index];
-       return (struct hws_trailer_entry *)trailer_entry_ptr(sdb);
+       return trailer_entry_ptr(sdb);
  }
  
  /*
@@@ -1398,7 -1461,7 +1462,7 @@@ static void aux_output_end(struct perf_
        if (!aux)
                return;
  
-       range_scan = AUX_SDB_NUM_ALERT(aux);
+       range_scan = aux_sdb_num_alert(aux);
        for (i = 0, idx = aux->head; i < range_scan; i++, idx++) {
                te = aux_sdb_trailer(aux, idx);
                if (!te->header.f)
@@@ -1428,9 -1491,7 +1492,7 @@@ static int aux_output_begin(struct perf
                            struct aux_buffer *aux,
                            struct cpu_hw_sf *cpuhw)
  {
-       unsigned long range;
-       unsigned long i, range_scan, idx;
-       unsigned long head, base, offset;
+       unsigned long range, i, range_scan, idx, head, base, offset;
        struct hws_trailer_entry *te;
  
        if (WARN_ON_ONCE(handle->head & ~PAGE_MASK))
                            "%s: range %ld head %ld alert %ld empty %ld\n",
                            __func__, range, aux->head, aux->alert_mark,
                            aux->empty_mark);
-       if (range > AUX_SDB_NUM_EMPTY(aux)) {
-               range_scan = range - AUX_SDB_NUM_EMPTY(aux);
+       if (range > aux_sdb_num_empty(aux)) {
+               range_scan = range - aux_sdb_num_empty(aux);
                idx = aux->empty_mark + 1;
                for (i = 0; i < range_scan; i++, idx++) {
                        te = aux_sdb_trailer(aux, idx);
        te->header.a = 1;
  
        /* Reset hardware buffer head */
-       head = AUX_SDB_INDEX(aux, aux->head);
+       head = aux_sdb_index(aux, aux->head);
        base = aux->sdbt_index[head / CPUM_SF_SDB_PER_TABLE];
        offset = head % CPUM_SF_SDB_PER_TABLE;
-       cpuhw->lsctl.tear = base + offset * sizeof(unsigned long);
-       cpuhw->lsctl.dear = aux->sdb_index[head];
+       cpuhw->lsctl.tear = virt_to_phys((void *)base) + offset * sizeof(unsigned long);
+       cpuhw->lsctl.dear = virt_to_phys((void *)aux->sdb_index[head]);
  
        debug_sprintf_event(sfdbg, 6, "%s: head %ld alert %ld empty %ld "
                            "index %ld tear %#lx dear %#lx\n", __func__,
@@@ -1550,7 -1611,7 +1612,7 @@@ static bool aux_reset_buffer(struct aux
        debug_sprintf_event(sfdbg, 6, "%s: range %ld head %ld alert %ld "
                            "empty %ld\n", __func__, range, aux->head,
                            aux->alert_mark, aux->empty_mark);
-       if (range <= AUX_SDB_NUM_EMPTY(aux))
+       if (range <= aux_sdb_num_empty(aux))
                /*
                 * No need to scan. All SDBs in range are marked as empty.
                 * Just set alert indicator. Should check race with hardware
         * Start scanning from one SDB behind empty_mark. If the new alert
         * indicator fall into this range, set it.
         */
-       range_scan = range - AUX_SDB_NUM_EMPTY(aux);
+       range_scan = range - aux_sdb_num_empty(aux);
        idx_old = idx = aux->empty_mark + 1;
        for (i = 0; i < range_scan; i++, idx++) {
                te = aux_sdb_trailer(aux, idx);
@@@ -1618,7 -1679,7 +1680,7 @@@ static void hw_collect_aux(struct cpu_h
                return;
  
        /* Inform user space new data arrived */
-       size = AUX_SDB_NUM_ALERT(aux) << PAGE_SHIFT;
+       size = aux_sdb_num_alert(aux) << PAGE_SHIFT;
        debug_sprintf_event(sfdbg, 6, "%s: #alert %ld\n", __func__,
                            size >> PAGE_SHIFT);
        perf_aux_output_end(handle, size);
                                            "overflow %lld\n", __func__,
                                            aux->head, range, overflow);
                } else {
-                       size = AUX_SDB_NUM_ALERT(aux) << PAGE_SHIFT;
+                       size = aux_sdb_num_alert(aux) << PAGE_SHIFT;
                        perf_aux_output_end(&cpuhw->handle, size);
                        debug_sprintf_event(sfdbg, 6, "%s: head %ld alert %ld "
                                            "already full, try another\n",
@@@ -1702,7 -1763,7 +1764,7 @@@ static void aux_sdb_init(unsigned long 
  {
        struct hws_trailer_entry *te;
  
-       te = (struct hws_trailer_entry *)trailer_entry_ptr(sdb);
+       te = trailer_entry_ptr(sdb);
  
        /* Save clock base */
        te->clock_base = 1;
@@@ -1782,18 -1843,18 +1844,18 @@@ static void *aux_buffer_setup(struct pe
                                goto no_sdbt;
                        aux->sdbt_index[sfb->num_sdbt++] = (unsigned long)new;
                        /* Link current page to tail of chain */
-                       *tail = (unsigned long)(void *) new + 1;
+                       *tail = virt_to_phys(new) + 1;
                        tail = new;
                }
                /* Tail is the entry in a SDBT */
-               *tail = (unsigned long)pages[i];
+               *tail = virt_to_phys(pages[i]);
                aux->sdb_index[i] = (unsigned long)pages[i];
                aux_sdb_init((unsigned long)pages[i]);
        }
        sfb->num_sdb = nr_pages;
  
        /* Link the last entry in the SDBT to the first SDBT */
-       *tail = (unsigned long) sfb->sdbt + 1;
+       *tail = virt_to_phys(sfb->sdbt) + 1;
        sfb->tail = tail;
  
        /*
@@@ -1933,7 -1994,7 +1995,7 @@@ static int cpumsf_pmu_add(struct perf_e
        cpuhw->lsctl.h = 1;
        cpuhw->lsctl.interval = SAMPL_RATE(&event->hw);
        if (!SAMPL_DIAG_MODE(&event->hw)) {
-               cpuhw->lsctl.tear = (unsigned long) cpuhw->sfb.sdbt;
+               cpuhw->lsctl.tear = virt_to_phys(cpuhw->sfb.sdbt);
                cpuhw->lsctl.dear = *(unsigned long *) cpuhw->sfb.sdbt;
                TEAR_REG(&event->hw) = (unsigned long) cpuhw->sfb.sdbt;
        }
@@@ -16,8 -16,8 +16,8 @@@
  #include <linux/init.h>
  #include <linux/export.h>
  #include <linux/io.h>
+ #include <linux/perf_event.h>
  
- #include <asm/cpu_mcf.h>
  #include <asm/ctl_reg.h>
  #include <asm/pai.h>
  #include <asm/debug.h>
@@@ -451,7 -451,9 +451,7 @@@ static int paiext_push_sample(void
        if (event->attr.sample_type & PERF_SAMPLE_RAW) {
                raw.frag.size = rawsize;
                raw.frag.data = cpump->save;
 -              raw.size = raw.frag.size;
 -              data.raw = &raw;
 -              data.sample_flags |= PERF_SAMPLE_RAW;
 +              perf_sample_save_raw_data(&data, &raw);
        }
  
        overflow = perf_event_overflow(event, &data, &regs);
@@@ -44,6 -44,7 +44,6 @@@ SECTION
                HEAD_TEXT
                TEXT_TEXT
                SCHED_TEXT
 -              CPUIDLE_TEXT
                LOCK_TEXT
                KPROBES_TEXT
                IRQENTRY_TEXT
                QUAD(__rela_dyn_start)                          /* rela_dyn_start */
                QUAD(__rela_dyn_end)                            /* rela_dyn_end */
                QUAD(_eamode31 - _samode31)                     /* amode31_size */
+               QUAD(init_mm)
+               QUAD(swapper_pg_dir)
+               QUAD(invalid_pg_dir)
        } :NONE
  
        /* Debugging sections.  */
        DISCARDS
        /DISCARD/ : {
                *(.eh_frame)
+               *(.interp)
        }
  }