The following commit has been merged in the master branch:
commit 521e23e0a4591e8e0734dd90732e3526822069af
Merge: 34c8b507d2b64e7b2e90fe7e0b8e2f9a4373aa8c 
e39d14a760c039af0653e3df967e7525413924a0
Author: Stephen Rothwell <[email protected]>
Date:   Tue May 13 13:05:15 2025 +1000

    Merge branch 'main' of 
git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git
    
    # Conflicts:
    #       MAINTAINERS
    #       drivers/infiniband/hw/irdma/main.c

diff --combined MAINTAINERS
index ae29f6c95c4cd,800d23264c94b..e6acb2514cea2
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@@ -528,7 -528,6 +528,7 @@@ ADP1653 FLASH CONTROLLER DRIVE
  M:    Sakari Ailus <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/adi,adp1653.txt
  F:    drivers/media/i2c/adp1653.c
  F:    include/media/i2c/adp1653.h
  
@@@ -1254,31 -1253,6 +1254,31 @@@ F:    Documentation/devicetree/bindings/pe
  F:    drivers/perf/amlogic/
  F:    include/soc/amlogic/
  
 +AMLOGIC ISP DRIVER
 +M:    Keke Li <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/admin-guide/media/c3-isp.dot
 +F:    Documentation/admin-guide/media/c3-isp.rst
 +F:    Documentation/devicetree/bindings/media/amlogic,c3-isp.yaml
 +F:    Documentation/userspace-api/media/v4l/metafmt-c3-isp.rst
 +F:    drivers/media/platform/amlogic/c3/isp/
 +F:    include/uapi/linux/media/amlogic/
 +
 +AMLOGIC MIPI ADAPTER DRIVER
 +M:    Keke Li <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/amlogic,c3-mipi-adapter.yaml
 +F:    drivers/media/platform/amlogic/c3/mipi-adapter/
 +
 +AMLOGIC MIPI CSI2 DRIVER
 +M:    Keke Li <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/amlogic,c3-mipi-csi2.yaml
 +F:    drivers/media/platform/amlogic/c3/mipi-csi2/
 +
  AMLOGIC PINCTRL DRIVER
  M:    Xianwei Zhao <[email protected]>
  L:    [email protected]
@@@ -1613,14 -1587,14 +1613,14 @@@ M:   Lars-Peter Clausen <[email protected]
  L:    [email protected]
  S:    Supported
  W:    https://ez.analog.com/linux-software-drivers
 -F:    Documentation/devicetree/bindings/media/i2c/adv7180.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/adi,adv7180.yaml
  F:    drivers/media/i2c/adv7180.c
  
  ANALOG DEVICES INC ADV748X DRIVER
  M:    Kieran Bingham <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/media/i2c/adv748x.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/adi,adv748x.yaml
  F:    drivers/media/i2c/adv748x/*
  
  ANALOG DEVICES INC ADV7511 DRIVER
@@@ -1633,7 -1607,7 +1633,7 @@@ ANALOG DEVICES INC ADV7604 DRIVE
  M:    Hans Verkuil <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/media/i2c/adv7604.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/adi,adv7604.yaml
  F:    drivers/media/i2c/adv7604*
  
  ANALOG DEVICES INC ADV7842 DRIVER
@@@ -3090,10 -3064,10 +3090,10 @@@ F:   arch/arm/include/debug/renesas-scif.
  F:    arch/arm/mach-shmobile/
  F:    arch/arm64/boot/dts/renesas/
  F:    arch/riscv/boot/dts/renesas/
 -F:    drivers/nvmem/rcar-efuse.c
  F:    drivers/pmdomain/renesas/
  F:    drivers/soc/renesas/
  F:    include/linux/soc/renesas/
 +N:    rcar
  K:    \brenesas,
  
  ARM/RISCPC ARCHITECTURE
@@@ -3460,7 -3434,7 +3460,7 @@@ M:      Alexey Charkov <[email protected]
  M:    Krzysztof Kozlowski <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Odd Fixes
 -F:    Documentation/devicetree/bindings/i2c/i2c-wmt.txt
 +F:    Documentation/devicetree/bindings/i2c/wm,wm8505-i2c.yaml
  F:    arch/arm/boot/dts/vt8500/
  F:    arch/arm/mach-vt8500/
  F:    drivers/clocksource/timer-vt8500.c
@@@ -5917,8 -5891,6 +5917,8 @@@ F:      include/dt-bindings/clock
  F:    include/linux/clk-pr*
  F:    include/linux/clk/
  F:    include/linux/of_clk.h
 +F:    rust/helpers/clk.c
 +F:    rust/kernel/clk.rs
  X:    drivers/clk/clkdev.c
  
  COMMON INTERNET FILE SYSTEM CLIENT (CIFS and SMB3)
@@@ -6011,9 -5983,7 +6011,9 @@@ S:      Supporte
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/a.hindborg/linux.git 
configfs-next
  F:    fs/configfs/
  F:    include/linux/configfs.h
 +F:    rust/kernel/configfs.rs
  F:    samples/configfs/
 +F:    samples/rust/rust_configfs.rs
  
  CONGATEC BOARD CONTROLLER MFD DRIVER
  M:    Thomas Richard <[email protected]>
@@@ -6178,7 -6148,6 +6178,7 @@@ F:      drivers/cpufreq
  F:    include/linux/cpufreq.h
  F:    include/linux/sched/cpufreq.h
  F:    kernel/sched/cpufreq*.c
 +F:    rust/kernel/cpufreq.rs
  F:    tools/testing/selftests/cpufreq/
  
  CPU HOTPLUG
@@@ -6192,7 -6161,6 +6192,7 @@@ F:      include/linux/cpuhotplug.
  F:    include/linux/smpboot.h
  F:    kernel/cpu.c
  F:    kernel/smpboot.*
 +F:    rust/kernel/cpu.rs
  
  CPU IDLE TIME MANAGEMENT FRAMEWORK
  M:    "Rafael J. Wysocki" <[email protected]>
@@@ -6277,12 -6245,6 +6277,12 @@@ L:    [email protected]
  S:    Maintained
  F:    drivers/cpuidle/cpuidle-riscv-sbi.c
  
 +CPUMASK API [RUST]
 +M:    Viresh Kumar <[email protected]>
 +R:    Yury Norov <[email protected]>
 +S:    Maintained
 +F:    rust/kernel/cpumask.rs
 +
  CRAMFS FILESYSTEM
  M:    Nicolas Pitre <[email protected]>
  S:    Maintained
@@@ -6593,15 -6555,6 +6593,6 @@@ S:     Maintaine
  F:    Documentation/scsi/dc395x.rst
  F:    drivers/scsi/dc395x.*
  
- DCCP PROTOCOL
- L:    [email protected]
- S:    Orphan
- W:    http://www.linuxfoundation.org/collaborate/workgroups/networking/dccp
- F:    include/linux/dccp.h
- F:    include/linux/tfrc.h
- F:    include/uapi/linux/dccp.h
- F:    net/dccp/
- 
  DEBUGOBJECTS:
  M:    Thomas Gleixner <[email protected]>
  L:    [email protected]
@@@ -8878,7 -8831,6 +8869,7 @@@ F:      include/linux/elf.
  F:    include/uapi/linux/auxvec.h
  F:    include/uapi/linux/binfmts.h
  F:    include/uapi/linux/elf.h
 +F:    mm/vma_exec.c
  F:    tools/testing/selftests/exec/
  N:    asm/elf.h
  N:    binfmt
@@@ -9426,6 -9378,7 +9417,7 @@@ F:      Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/freescale/enetc/
  F:    include/linux/fsl/enetc_mdio.h
  F:    include/linux/fsl/netc_global.h
+ F:    include/linux/fsl/ntmp.h
  
  FREESCALE eTSEC ETHERNET DRIVER (GIANFAR)
  M:    Claudiu Manoil <[email protected]>
@@@ -9776,7 -9729,7 +9768,7 @@@ L:      [email protected]
  S:    Maintained
  W:    https://github.com/libfuse/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git
 -F:    Documentation/filesystems/fuse.rst
 +F:    Documentation/filesystems/fuse*
  F:    fs/fuse/
  F:    include/uapi/linux/fuse.h
  
@@@ -10186,13 -10139,6 +10178,13 @@@ F: drivers/gpio/gpio-regmap.
  F:    include/linux/gpio/regmap.h
  K:    (devm_)?gpio_regmap_(un)?register
  
 +GPIO SLOPPY LOGIC ANALYZER
 +M:    Wolfram Sang <[email protected]>
 +S:    Supported
 +F:    Documentation/dev-tools/gpio-sloppy-logic-analyzer.rst
 +F:    drivers/gpio/gpio-sloppy-logic-analyzer.c
 +F:    tools/gpio/gpio-sloppy-logic-analyzer.sh
 +
  GPIO SUBSYSTEM
  M:    Linus Walleij <[email protected]>
  M:    Bartosz Golaszewski <[email protected]>
@@@ -10789,7 -10735,6 +10781,7 @@@ W:   http://www.hisilicon.co
  F:    Documentation/admin-guide/perf/hisi-pcie-pmu.rst
  F:    Documentation/admin-guide/perf/hisi-pmu.rst
  F:    drivers/perf/hisilicon
 +F:    tools/perf/pmu-events/arch/arm64/hisilicon/
  
  HISILICON PTT DRIVER
  M:    Yicong Yang <[email protected]>
@@@ -11284,6 -11229,7 +11276,6 @@@ S:   Maintaine
  F:    drivers/i2c/busses/i2c-cht-wc.c
  
  I2C/SMBUS ISMT DRIVER
 -M:    Seth Heasley <[email protected]>
  M:    Neil Horman <[email protected]>
  L:    [email protected]
  F:    Documentation/i2c/busses/i2c-ismt.rst
@@@ -11956,7 -11902,7 +11948,7 @@@ F:   Documentation/networking/device_driv
  F:    drivers/net/ethernet/intel/
  F:    drivers/net/ethernet/intel/*/
  F:    include/linux/avf/virtchnl.h
- F:    include/linux/net/intel/iidc.h
+ F:    include/linux/net/intel/*/
  
  INTEL ETHERNET PROTOCOL DRIVER FOR RDMA
  M:    Mustafa Ismail <[email protected]>
@@@ -12186,7 -12132,7 +12178,7 @@@ M:   Andy Shevchenko <[email protected]
  L:    [email protected]
  S:    Supported
  F:    arch/x86/include/asm/intel-mid.h
 -F:    arch/x86/pci/intel_mid_pci.c
 +F:    arch/x86/pci/intel_mid.c
  F:    arch/x86/platform/intel-mid/
  F:    drivers/dma/hsu/
  F:    drivers/extcon/extcon-intel-mrfld.c
@@@ -12955,7 -12901,7 +12947,7 @@@ W:   http://kernelnewbies.org/KernelJanit
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
  M:    Chuck Lever <[email protected]>
  M:    Jeff Layton <[email protected]>
 -R:    Neil Brown <[email protected]>
 +R:    NeilBrown <[email protected]>
  R:    Olga Kornievskaia <[email protected]>
  R:    Dai Ngo <[email protected]>
  R:    Tom Talpey <[email protected]>
@@@ -13186,17 -13132,6 +13178,17 @@@ F: include/linux/kexec.
  F:    include/uapi/linux/kexec.h
  F:    kernel/kexec*
  
 +KEXEC HANDOVER (KHO)
 +M:    Alexander Graf <[email protected]>
 +M:    Mike Rapoport <[email protected]>
 +M:    Changyuan Lyu <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/admin-guide/mm/kho.rst
 +F:    Documentation/core-api/kho/*
 +F:    include/linux/kexec_handover.h
 +F:    kernel/kexec_handover.c
 +
  KEYS-ENCRYPTED
  M:    Mimi Zohar <[email protected]>
  L:    [email protected]
@@@ -14061,15 -13996,6 +14053,15 @@@ L: [email protected]
  S:    Maintained
  F:    drivers/scsi/sym53c8xx_2/
  
 +LT3074 HARDWARE MONITOR DRIVER
 +M:    Cedric Encarnacion <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +W:    https://ez.analog.com/linux-software-drivers
 +F:    Documentation/devicetree/bindings/hwmon/pmbus/adi,lt3074.yaml
 +F:    Documentation/hwmon/lt3074.rst
 +F:    drivers/hwmon/pmbus/lt3074.c
 +
  LTC1660 DAC DRIVER
  M:    Marcus Folkesson <[email protected]>
  L:    [email protected]
@@@ -14538,7 -14464,7 +14530,7 @@@ M:   Ramesh Shanmugasundaram <rashanmu@gm
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media.git
 -F:    Documentation/devicetree/bindings/media/i2c/max2175.txt
 +F:    Documentation/devicetree/bindings/media/i2c/maxim,max2175.txt
  F:    Documentation/userspace-api/media/drivers/max2175.rst
  F:    drivers/media/i2c/max2175*
  F:    include/uapi/linux/max2175.h
@@@ -14700,6 -14626,7 +14692,6 @@@ F:   Documentation/devicetree/bindings/*/
  F:    Documentation/devicetree/bindings/*/maxim,max77693.yaml
  F:    Documentation/devicetree/bindings/*/maxim,max77705*.yaml
  F:    Documentation/devicetree/bindings/*/maxim,max77843.yaml
 -F:    Documentation/devicetree/bindings/clock/maxim,max77686.txt
  F:    drivers/leds/leds-max77705.c
  F:    drivers/*/*max77843.c
  F:    drivers/*/max14577*.c
@@@ -14864,7 -14791,7 +14856,7 @@@ L:   [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media.git
  F:    Documentation/admin-guide/media/imx.rst
 -F:    Documentation/devicetree/bindings/media/imx.txt
 +F:    Documentation/devicetree/bindings/media/fsl,imx6-mipi-csi2.yaml
  F:    drivers/staging/media/imx/
  F:    include/linux/imx-media.h
  F:    include/media/imx.h
@@@ -14985,7 -14912,7 +14977,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    Documentation/devicetree/bindings/media/renesas,isp.yaml
  F:    Documentation/devicetree/bindings/media/renesas,vin.yaml
  F:    drivers/media/platform/renesas/rcar-csi2.c
 -F:    drivers/media/platform/renesas/rcar-isp.c
 +F:    drivers/media/platform/renesas/rcar-isp/
  F:    drivers/media/platform/renesas/rcar-vin/
  
  MEDIA DRIVERS FOR RENESAS - VSP1
@@@ -15138,7 -15065,7 +15130,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/platform/mediatek/jpeg/
  
  MEDIATEK KEYPAD DRIVER
 -M:    Mattijs Korpershoek <[email protected]>
 +M:    Mattijs Korpershoek <[email protected]>
  S:    Supported
  F:    Documentation/devicetree/bindings/input/mediatek,mt6779-keypad.yaml
  F:    drivers/input/keyboard/mt6779-keypad.c
@@@ -15503,7 -15430,6 +15495,7 @@@ M:   Mike Rapoport <[email protected]
  L:    [email protected]
  S:    Maintained
  F:    Documentation/core-api/boot-time-mm.rst
 +F:    Documentation/core-api/kho/bindings/memblock/*
  F:    include/linux/memblock.h
  F:    mm/memblock.c
  F:    mm/mm_init.c
@@@ -15562,45 -15488,24 +15554,45 @@@ F:        Documentation/mm
  F:    include/linux/gfp.h
  F:    include/linux/gfp_types.h
  F:    include/linux/memfd.h
 -F:    include/linux/memory.h
  F:    include/linux/memory_hotplug.h
  F:    include/linux/memory-tiers.h
  F:    include/linux/mempolicy.h
  F:    include/linux/mempool.h
  F:    include/linux/memremap.h
 -F:    include/linux/mm.h
 -F:    include/linux/mm_*.h
  F:    include/linux/mmzone.h
  F:    include/linux/mmu_notifier.h
  F:    include/linux/pagewalk.h
 -F:    include/linux/rmap.h
  F:    include/trace/events/ksm.h
  F:    mm/
  F:    tools/mm/
  F:    tools/testing/selftests/mm/
  N:    include/linux/page[-_]*
  
 +MEMORY MANAGEMENT - CORE
 +M:    Andrew Morton <[email protected]>
 +M:    David Hildenbrand <[email protected]>
 +R:    Lorenzo Stoakes <[email protected]>
 +R:    Liam R. Howlett <[email protected]>
 +R:    Vlastimil Babka <[email protected]>
 +R:    Mike Rapoport <[email protected]>
 +R:    Suren Baghdasaryan <[email protected]>
 +R:    Michal Hocko <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +W:    http://www.linux-mm.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
 +F:    include/linux/memory.h
 +F:    include/linux/mm.h
 +F:    include/linux/mm_*.h
 +F:    include/linux/mmdebug.h
 +F:    include/linux/pagewalk.h
 +F:    mm/Kconfig
 +F:    mm/debug.c
 +F:    mm/init-mm.c
 +F:    mm/memory.c
 +F:    mm/pagewalk.c
 +F:    mm/util.c
 +
  MEMORY MANAGEMENT - EXECMEM
  M:    Andrew Morton <[email protected]>
  M:    Mike Rapoport <[email protected]>
@@@ -15609,18 -15514,6 +15601,18 @@@ S: Maintaine
  F:    include/linux/execmem.h
  F:    mm/execmem.c
  
 +MEMORY MANAGEMENT - GUP (GET USER PAGES)
 +M:    Andrew Morton <[email protected]>
 +M:    David Hildenbrand <[email protected]>
 +R:    Jason Gunthorpe <[email protected]>
 +R:    John Hubbard <[email protected]>
 +R:    Peter Xu <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +W:    http://www.linux-mm.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
 +F:    mm/gup.c
 +
  MEMORY MANAGEMENT - NUMA MEMBLOCKS AND NUMA EMULATION
  M:    Andrew Morton <[email protected]>
  M:    Mike Rapoport <[email protected]>
@@@ -15646,19 -15539,6 +15638,19 @@@ F: mm/page_alloc.
  F:    include/linux/gfp.h
  F:    include/linux/compaction.h
  
 +MEMORY MANAGEMENT - RMAP (REVERSE MAPPING)
 +M:    Andrew Morton <[email protected]>
 +M:    David Hildenbrand <[email protected]>
 +M:    Lorenzo Stoakes <[email protected]>
 +R:    Rik van Riel <[email protected]>
 +R:    Liam R. Howlett <[email protected]>
 +R:    Vlastimil Babka <[email protected]>
 +R:    Harry Yoo <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    include/linux/rmap.h
 +F:    mm/rmap.c
 +
  MEMORY MANAGEMENT - SECRETMEM
  M:    Andrew Morton <[email protected]>
  M:    Mike Rapoport <[email protected]>
@@@ -15667,30 -15547,6 +15659,30 @@@ S: Maintaine
  F:    include/linux/secretmem.h
  F:    mm/secretmem.c
  
 +MEMORY MANAGEMENT - THP (TRANSPARENT HUGE PAGE)
 +M:    Andrew Morton <[email protected]>
 +M:    David Hildenbrand <[email protected]>
 +R:    Zi Yan <[email protected]>
 +R:    Baolin Wang <[email protected]>
 +R:    Lorenzo Stoakes <[email protected]>
 +R:    Liam R. Howlett <[email protected]>
 +R:    Nico Pache <[email protected]>
 +R:    Ryan Roberts <[email protected]>
 +R:    Dev Jain <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +W:    http://www.linux-mm.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
 +F:    Documentation/admin-guide/mm/transhuge.rst
 +F:    include/linux/huge_mm.h
 +F:    include/linux/khugepaged.h
 +F:    include/trace/events/huge_memory.h
 +F:    mm/huge_memory.c
 +F:    mm/khugepaged.c
 +F:    tools/testing/selftests/mm/khugepaged.c
 +F:    tools/testing/selftests/mm/split_huge_page_test.c
 +F:    tools/testing/selftests/mm/transhuge-stress.c
 +
  MEMORY MANAGEMENT - USERFAULTFD
  M:    Andrew Morton <[email protected]>
  R:    Peter Xu <[email protected]>
@@@ -15704,19 -15560,6 +15696,19 @@@ F: include/uapi/linux/userfaultfd.
  F:    mm/userfaultfd.c
  F:    tools/testing/selftests/mm/uffd-*.[ch]
  
 +MEMORY MANAGEMENT - RUST
 +M:    Alice Ryhl <[email protected]>
 +R:    Lorenzo Stoakes <[email protected]>
 +R:    Liam R. Howlett <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +W:    http://www.linux-mm.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
 +F:    rust/helpers/mm.c
 +F:    rust/kernel/mm.rs
 +F:    rust/kernel/mm/
 +
  MEMORY MAPPING
  M:    Andrew Morton <[email protected]>
  M:    Liam R. Howlett <[email protected]>
@@@ -15736,10 -15579,7 +15728,10 @@@ F: mm/mremap.
  F:    mm/mseal.c
  F:    mm/vma.c
  F:    mm/vma.h
 +F:    mm/vma_exec.c
 +F:    mm/vma_init.c
  F:    mm/vma_internal.h
 +F:    tools/testing/selftests/mm/merge.c
  F:    tools/testing/vma/
  
  MEMORY MAPPING - LOCKING
@@@ -16714,7 -16554,7 +16706,7 @@@ M:   Laurent Pinchart <laurent.pinchart@i
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media.git
 -F:    Documentation/devicetree/bindings/media/i2c/mt9v032.txt
 +F:    Documentation/devicetree/bindings/media/i2c/aptina,mt9v032.txt
  F:    drivers/media/i2c/mt9v032.c
  F:    include/media/i2c/mt9v032.h
  
@@@ -17437,7 -17277,6 +17429,7 @@@ M:   Pavel Machek <[email protected]
  M:    Sakari Ailus <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/adi,ad5820.yaml
  F:    drivers/media/i2c/ad5820.c
  F:    drivers/media/i2c/et8ek8
  
@@@ -18033,23 -17872,6 +18025,23 @@@ T: git git://linuxtv.org/media.gi
  F:    Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
  F:    drivers/media/i2c/ov02a10.c
  
 +OMNIVISION OV02C10 SENSOR DRIVER
 +M:    Hans de Goede <[email protected]>
 +R:    Bryan O'Donoghue <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://linuxtv.org/media.git
 +F:    drivers/media/i2c/ov02c10.c
 +
 +OMNIVISION OV02E10 SENSOR DRIVER
 +M:    Bryan O'Donoghue <[email protected]>
 +M:    Hans de Goede <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://linuxtv.org/media.git
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov02e10.yaml
 +F:    drivers/media/i2c/ov02e10.c
 +
  OMNIVISION OV08D10 SENSOR DRIVER
  M:    Jimmy Su <[email protected]>
  L:    [email protected]
@@@ -18172,7 -17994,7 +18164,7 @@@ OMNIVISION OV7670 SENSOR DRIVE
  L:    [email protected]
  S:    Orphan
  T:    git git://linuxtv.org/media.git
 -F:    Documentation/devicetree/bindings/media/i2c/ov7670.txt
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov7670.txt
  F:    drivers/media/i2c/ov7670.c
  
  OMNIVISION OV772x SENSOR DRIVER
@@@ -18188,7 -18010,7 +18180,7 @@@ OMNIVISION OV7740 SENSOR DRIVE
  L:    [email protected]
  S:    Orphan
  T:    git git://linuxtv.org/media.git
 -F:    Documentation/devicetree/bindings/media/i2c/ov7740.txt
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov7740.txt
  F:    drivers/media/i2c/ov7740.c
  
  OMNIVISION OV8856 SENSOR DRIVER
@@@ -18229,7 -18051,7 +18221,7 @@@ R:   Sylwester Nawrocki <s.nawrocki@samsu
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media.git
 -F:    Documentation/devicetree/bindings/media/i2c/ov9650.txt
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov9650.txt
  F:    drivers/media/i2c/ov9650.c
  
  OMNIVISION OV9734 SENSOR DRIVER
@@@ -18375,6 -18197,17 +18367,17 @@@ F: arch/openrisc
  F:    drivers/irqchip/irq-ompic.c
  F:    drivers/irqchip/irq-or1k-*
  
+ OPENVPN DATA CHANNEL OFFLOAD
+ M:    Antonio Quartulli <[email protected]>
+ L:    [email protected] (subscribers-only)
+ L:    [email protected]
+ S:    Supported
+ T:    git https://github.com/OpenVPN/linux-kernel-ovpn.git
+ F:    Documentation/netlink/specs/ovpn.yaml
+ F:    drivers/net/ovpn/
+ F:    include/uapi/linux/ovpn.h
+ F:    tools/testing/selftests/net/ovpn/
+ 
  OPENVSWITCH
  M:    Aaron Conole <[email protected]>
  M:    Eelco Chaudron <[email protected]>
@@@ -18399,7 -18232,6 +18402,7 @@@ F:   Documentation/devicetree/bindings/op
  F:    Documentation/power/opp.rst
  F:    drivers/opp/
  F:    include/linux/pm_opp.h
 +F:    rust/kernel/opp.rs
  
  OPL4 DRIVER
  M:    Clemens Ladisch <[email protected]>
@@@ -18435,7 -18267,6 +18438,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:    Documentation/devicetree/bindings/media/i2c/ovti,ov2659.txt
  F:    drivers/media/i2c/ov2659.c
  F:    include/media/i2c/ov2659.h
  
@@@ -18547,7 -18378,7 +18550,7 @@@ F:   include/uapi/linux/ppdev.
  PARAVIRT_OPS INTERFACE
  M:    Juergen Gross <[email protected]>
  R:    Ajay Kaher <[email protected]>
 -R:    Alexey Makhalov <[email protected]>
 +R:    Alexey Makhalov <[email protected]>
  R:    Broadcom internal kernel review list 
<[email protected]>
  L:    [email protected]
  L:    [email protected]
@@@ -18613,13 -18444,6 +18616,13 @@@ S: Maintaine
  F:    Documentation/hwmon/pc87427.rst
  F:    drivers/hwmon/pc87427.c
  
 +MAX77705 HARDWARE MONITORING DRIVER
 +M:    Dzmitry Sankouski <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/hwmon/max77705.rst
 +F:    drivers/hwmon/max77705-hwmon.c
 +
  PCA9532 LED DRIVER
  M:    Riku Voipio <[email protected]>
  S:    Maintained
@@@ -18663,7 -18487,7 +18666,7 @@@ M:   Thomas Petazzoni <thomas.petazzoni@b
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -F:    Documentation/devicetree/bindings/pci/pci-armada8k.txt
 +F:    Documentation/devicetree/bindings/pci/marvell,armada8k-pcie.yaml
  F:    drivers/pci/controller/dwc/pcie-armada8k.c
  
  PCI DRIVER FOR CADENCE PCIE IP
@@@ -18833,7 -18657,7 +18836,7 @@@ F:   drivers/pci/controller/pcie-xilinx-c
  
  PCI ENDPOINT SUBSYSTEM
  M:    Manivannan Sadhasivam <[email protected]>
 -M:    Krzysztof Wilczyński <[email protected]>
 +M:    Krzysztof Wilczyński <[email protected]>
  R:    Kishon Vijay Abraham I <[email protected]>
  L:    [email protected]
  S:    Supported
@@@ -18884,7 -18708,7 +18887,7 @@@ F:   drivers/pci/controller/pci-xgene-msi
  
  PCI NATIVE HOST BRIDGE AND ENDPOINT DRIVERS
  M:    Lorenzo Pieralisi <[email protected]>
 -M:    Krzysztof Wilczyński <[email protected]>
 +M:    Krzysztof Wilczyński <[email protected]>
  M:    Manivannan Sadhasivam <[email protected]>
  R:    Rob Herring <[email protected]>
  L:    [email protected]
@@@ -19140,7 -18964,7 +19143,7 @@@ F:   drivers/net/ethernet/pensando
  PER-CPU MEMORY ALLOCATOR
  M:    Dennis Zhou <[email protected]>
  M:    Tejun Heo <[email protected]>
 -M:    Christoph Lameter <[email protected]>
 +M:    Christoph Lameter <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/dennis/percpu.git
@@@ -20233,7 -20057,6 +20236,7 @@@ QUALCOMM IRIS VIDEO ACCELERATOR DRIVE
  M:    Vikash Garodia <[email protected]>
  M:    Dikshita Agarwal <[email protected]>
  R:    Abhinav Kumar <[email protected]>
 +R:    Bryan O'Donoghue <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
@@@ -20295,8 -20118,8 +20298,8 @@@ F:   Documentation/devicetree/bindings/us
  F:    drivers/usb/typec/tcpm/qcom/
  
  QUALCOMM VENUS VIDEO ACCELERATOR DRIVER
 -M:    Stanimir Varbanov <[email protected]>
  M:    Vikash Garodia <[email protected]>
 +M:    Dikshita Agarwal <[email protected]>
  R:    Bryan O'Donoghue <[email protected]>
  L:    [email protected]
  L:    [email protected]
@@@ -20879,14 -20702,14 +20882,22 @@@ S:        Maintaine
  F:    Documentation/devicetree/bindings/usb/renesas,rzn1-usbf.yaml
  F:    drivers/usb/gadget/udc/renesas_usbf.c
  
+ RENESAS RZ/V2H(P) DWMAC GBETH GLUE LAYER DRIVER
+ M:    Lad Prabhakar <[email protected]>
+ L:    [email protected]
+ L:    [email protected]
+ S:    Maintained
+ F:    Documentation/devicetree/bindings/net/renesas,r9a09g057-gbeth.yaml
+ F:    drivers/net/ethernet/stmicro/stmmac/dwmac-renesas-gbeth.c
+ 
 +RENESAS RZ/V2H(P) USB2PHY PORT RESET DRIVER
 +M:    Fabrizio Castro <[email protected]>
 +M:    Lad Prabhakar <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    Documentation/devicetree/bindings/reset/renesas,rzv2h-usb2phy-reset.yaml
 +F:    drivers/reset/reset-rzv2h-usb2phy.c
 +
  RENESAS RZ/V2M I2C DRIVER
  M:    Fabrizio Castro <[email protected]>
  L:    [email protected]
@@@ -21099,7 -20922,6 +21110,7 @@@ F:   Documentation/devicetree/bindings/fi
  F:    Documentation/devicetree/bindings/mailbox/thead,th1520-mbox.yaml
  F:    Documentation/devicetree/bindings/net/thead,th1520-gmac.yaml
  F:    Documentation/devicetree/bindings/pinctrl/thead,th1520-pinctrl.yaml
 +F:    Documentation/devicetree/bindings/reset/thead,th1520-reset.yaml
  F:    arch/riscv/boot/dts/thead/
  F:    drivers/clk/thead/clk-th1520-ap.c
  F:    drivers/firmware/thead,th1520-aon.c
@@@ -21107,10 -20929,8 +21118,10 @@@ F: drivers/mailbox/mailbox-th1520.
  F:    drivers/net/ethernet/stmicro/stmmac/dwmac-thead.c
  F:    drivers/pinctrl/pinctrl-th1520.c
  F:    drivers/pmdomain/thead/
 +F:    drivers/reset/reset-th1520.c
  F:    include/dt-bindings/clock/thead,th1520-clk-ap.h
  F:    include/dt-bindings/power/thead,th1520-power.h
 +F:    include/dt-bindings/reset/thead,th1520-reset.h
  F:    include/linux/firmware/thead/thead,th1520-aon.h
  
  RNBD BLOCK DRIVERS
@@@ -22515,7 -22335,7 +22526,7 @@@ F:   Documentation/devicetree/bindings/nv
  F:    drivers/nvmem/layouts/sl28vpd.c
  
  SLAB ALLOCATOR
 -M:    Christoph Lameter <[email protected]>
 +M:    Christoph Lameter <[email protected]>
  M:    David Rientjes <[email protected]>
  M:    Andrew Morton <[email protected]>
  M:    Vlastimil Babka <[email protected]>
@@@ -22758,7 -22578,7 +22769,7 @@@ M:   Dave Stevenson <dave.stevenson@raspb
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media.git
 -F:    Documentation/devicetree/bindings/media/i2c/imx219.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/sony,imx219.yaml
  F:    drivers/media/i2c/imx219.c
  
  SONY IMX258 SENSOR DRIVER
@@@ -22818,9 -22638,8 +22829,9 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/imx334.c
  
  SONY IMX335 SENSOR DRIVER
 +M:    Kieran Bingham <[email protected]>
  L:    [email protected]
 -S:    Orphan
 +S:    Maintained
  T:    git git://linuxtv.org/media.git
  F:    Documentation/devicetree/bindings/media/i2c/sony,imx335.yaml
  F:    drivers/media/i2c/imx335.c
@@@ -22840,7 -22659,7 +22851,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/imx412.c
  
  SONY IMX415 SENSOR DRIVER
 -M:    Michael Riesch <[email protected]>
 +M:    Michael Riesch <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media.git
@@@ -23051,6 -22870,7 +23062,6 @@@ F:   drivers/accessibility/speakup
  
  SPEAR PLATFORM/CLOCK/PINCTRL SUPPORT
  M:    Viresh Kumar <[email protected]>
 -M:    Shiraz Hashim <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Maintained
@@@ -23164,12 -22984,6 +23175,12 @@@ L: [email protected]
  S:    Maintained
  F:    drivers/i2c/busses/i2c-stm32*
  
 +ST STM32 OCTO MEMORY MANAGER
 +M:    Patrice Chotard <[email protected]>
 +S:    Maintained
 +F:    
Documentation/devicetree/bindings/memory-controllers/st,stm32mp25-omm.yaml
 +F:    drivers/memory/stm32_omm.c
 +
  ST STM32 SPI DRIVER
  M:    Alain Volmat <[email protected]>
  L:    [email protected]
@@@ -23183,22 -22997,6 +23194,22 @@@ S: Maintaine
  F:    Documentation/hwmon/stpddc60.rst
  F:    drivers/hwmon/pmbus/stpddc60.c
  
 +ST VD55G1 DRIVER
 +M:    Benjamin Mugnier <[email protected]>
 +M:    Sylvain Petinot <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/st,vd55g1.yaml
 +F:    drivers/media/i2c/vd55g1.c
 +
 +ST VD56G3 IMAGE SENSOR DRIVER
 +M:    Benjamin Mugnier <[email protected]>
 +M:    Sylvain Petinot <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/st,vd56g3.yaml
 +F:    drivers/media/i2c/vd56g3.c
 +
  ST VGXY61 DRIVER
  M:    Benjamin Mugnier <[email protected]>
  M:    Sylvain Petinot <[email protected]>
@@@ -23757,13 -23555,6 +23768,13 @@@ L: [email protected]
  S:    Supported
  F:    drivers/i2c/busses/i2c-designware-*
  
 +SYNOPSYS DESIGNWARE I2C DRIVER - AMDISP
 +M:    Nirujogi Pratap <[email protected]>
 +M:    Bin Du <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/i2c/busses/i2c-designware-amdisp.c
 +
  SYNOPSYS DESIGNWARE MMC/SD/SDIO DRIVER
  M:    Jaehoon Chung <[email protected]>
  L:    [email protected]
@@@ -23819,15 -23610,6 +23830,15 @@@ F: include/linux/sc[mp]i_protocol.
  F:    include/trace/events/scmi.h
  F:    include/uapi/linux/virtio_scmi.h
  
 +SYSTEM CONTROL MANAGEMENT INTERFACE (SCMI) i.MX Extension Message Protocol 
drivers
 +M:    Peng Fan <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/firmware/nxp,*scmi.yaml
 +F:    drivers/firmware/arm_scmi/vendors/imx/
 +
  SYSTEM RESET/SHUTDOWN DRIVERS
  M:    Sebastian Reichel <[email protected]>
  L:    [email protected]
@@@ -23934,7 -23716,6 +23945,7 @@@ L:   [email protected]
  S:    Maintained
  W:    https://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
 +F:    Documentation/devicetree/bindings/media/i2c/nxp,tda1997x.txt
  F:    drivers/media/i2c/tda1997x.*
  
  TDA827x MEDIA DRIVER
@@@ -24526,13 -24307,6 +24537,13 @@@ F: drivers/misc/tifm
  F:    drivers/mmc/host/tifm_sd.c
  F:    include/linux/tifm.h
  
 +TI FPC202 DUAL PORT CONTROLLER
 +M:    Romain Gantois <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/misc/ti,fpc202.yaml
 +F:    drivers/misc/ti_fpc202.c
 +
  TI FPD-LINK DRIVERS
  M:    Tomi Valkeinen <[email protected]>
  L:    [email protected]
@@@ -24779,7 -24553,7 +24790,7 @@@ TOSHIBA TC358743 DRIVE
  M:    Hans Verkuil <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/media/i2c/tc358743.txt
 +F:    Documentation/devicetree/bindings/media/i2c/toshiba,tc358743.txt
  F:    drivers/media/i2c/tc358743*
  F:    include/media/i2c/tc358743.h
  
@@@ -24821,7 -24595,6 +24832,7 @@@ F:   arch/arm64/boot/dts/freescale/fsl-*t
  F:    arch/arm64/boot/dts/freescale/imx*mba*.dts*
  F:    arch/arm64/boot/dts/freescale/imx*tqma*.dts*
  F:    arch/arm64/boot/dts/freescale/mba*.dtsi
 +F:    arch/arm64/boot/dts/freescale/tqma8*.dtsi
  F:    arch/arm64/boot/dts/freescale/tqml*.dts*
  F:    drivers/gpio/gpio-tqmx86.c
  F:    drivers/mfd/tqmx86.c
@@@ -25622,8 -25395,6 +25633,8 @@@ F:   drivers/media/i2c/mt
  F:    drivers/media/i2c/og*
  F:    drivers/media/i2c/ov*
  F:    drivers/media/i2c/s5*
 +F:    drivers/media/i2c/vd55g1.c
 +F:    drivers/media/i2c/vd56g3.c
  F:    drivers/media/i2c/vgxy61.c
  
  VF610 NAND DRIVER
@@@ -26077,14 -25848,13 +26088,14 @@@ F:        tools/testing/vsock
  
  VMALLOC
  M:    Andrew Morton <[email protected]>
 -R:    Uladzislau Rezki <[email protected]>
 +M:    Uladzislau Rezki <[email protected]>
  L:    [email protected]
  S:    Maintained
  W:    http://www.linux-mm.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
  F:    include/linux/vmalloc.h
  F:    mm/vmalloc.c
 +F:    lib/test_vmalloc.c
  
  VME SUBSYSTEM
  L:    [email protected]
@@@ -26102,7 -25872,7 +26113,7 @@@ F:   drivers/misc/vmw_balloon.
  
  VMWARE HYPERVISOR INTERFACE
  M:    Ajay Kaher <[email protected]>
 -M:    Alexey Makhalov <[email protected]>
 +M:    Alexey Makhalov <[email protected]>
  R:    Broadcom internal kernel review list 
<[email protected]>
  L:    [email protected]
  L:    [email protected]
@@@ -26130,7 -25900,7 +26141,7 @@@ F:   drivers/scsi/vmw_pvscsi.
  VMWARE VIRTUAL PTP CLOCK DRIVER
  M:    Nick Shi <[email protected]>
  R:    Ajay Kaher <[email protected]>
 -R:    Alexey Makhalov <[email protected]>
 +R:    Alexey Makhalov <[email protected]>
  R:    Broadcom internal kernel review list 
<[email protected]>
  L:    [email protected]
  S:    Supported
diff --combined drivers/infiniband/hw/irdma/main.c
index 7599e31b57436,abb532bc8ce4d..1e840bbd619d2
--- a/drivers/infiniband/hw/irdma/main.c
+++ b/drivers/infiniband/hw/irdma/main.c
@@@ -1,10 -1,8 +1,8 @@@
  // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB
  /* Copyright (c) 2015 - 2021 Intel Corporation */
  #include "main.h"
- #include "../../../net/ethernet/intel/ice/ice.h"
  
  MODULE_ALIAS("i40iw");
- MODULE_AUTHOR("Intel Corporation, <[email protected]>");
  MODULE_DESCRIPTION("Intel(R) Ethernet Protocol Driver for RDMA");
  MODULE_LICENSE("Dual BSD/GPL");
  
@@@ -61,7 -59,7 +59,7 @@@ static void irdma_log_invalid_mtu(u16 m
  }
  
  static void irdma_fill_qos_info(struct irdma_l2params *l2params,
-                               struct iidc_qos_params *qos_info)
+                               struct iidc_rdma_qos_params *qos_info)
  {
        int i;
  
@@@ -85,12 -83,13 +83,13 @@@
        }
  }
  
- static void irdma_iidc_event_handler(struct ice_pf *pf, struct iidc_event 
*event)
+ static void irdma_iidc_event_handler(struct iidc_rdma_core_dev_info 
*cdev_info,
+                                    struct iidc_rdma_event *event)
  {
-       struct irdma_device *iwdev = dev_get_drvdata(&pf->adev->dev);
+       struct irdma_device *iwdev = dev_get_drvdata(&cdev_info->adev->dev);
        struct irdma_l2params l2params = {};
  
-       if (*event->type & BIT(IIDC_EVENT_AFTER_MTU_CHANGE)) {
+       if (*event->type & BIT(IIDC_RDMA_EVENT_AFTER_MTU_CHANGE)) {
                ibdev_dbg(&iwdev->ibdev, "CLNT: new MTU = %d\n", 
iwdev->netdev->mtu);
                if (iwdev->vsi.mtu != iwdev->netdev->mtu) {
                        l2params.mtu = iwdev->netdev->mtu;
@@@ -98,25 -97,26 +97,26 @@@
                        irdma_log_invalid_mtu(l2params.mtu, &iwdev->rf->sc_dev);
                        irdma_change_l2params(&iwdev->vsi, &l2params);
                }
-       } else if (*event->type & BIT(IIDC_EVENT_BEFORE_TC_CHANGE)) {
+       } else if (*event->type & BIT(IIDC_RDMA_EVENT_BEFORE_TC_CHANGE)) {
                if (iwdev->vsi.tc_change_pending)
                        return;
  
                irdma_prep_tc_change(iwdev);
-       } else if (*event->type & BIT(IIDC_EVENT_AFTER_TC_CHANGE)) {
-               struct iidc_qos_params qos_info = {};
+       } else if (*event->type & BIT(IIDC_RDMA_EVENT_AFTER_TC_CHANGE)) {
+               struct iidc_rdma_priv_dev_info *iidc_priv = 
cdev_info->iidc_priv;
  
                if (!iwdev->vsi.tc_change_pending)
                        return;
  
                l2params.tc_changed = true;
                ibdev_dbg(&iwdev->ibdev, "CLNT: TC Change\n");
-               ice_get_qos_params(pf, &qos_info);
-               irdma_fill_qos_info(&l2params, &qos_info);
+ 
+               irdma_fill_qos_info(&l2params, &iidc_priv->qos_info);
                if (iwdev->rf->protocol_used != IRDMA_IWARP_PROTOCOL_ONLY)
-                       iwdev->dcb_vlan_mode = qos_info.num_tc > 1 && 
!l2params.dscp_mode;
+                       iwdev->dcb_vlan_mode =
+                               l2params.num_tc > 1 && !l2params.dscp_mode;
                irdma_change_l2params(&iwdev->vsi, &l2params);
-       } else if (*event->type & BIT(IIDC_EVENT_CRIT_ERR)) {
+       } else if (*event->type & BIT(IIDC_RDMA_EVENT_CRIT_ERR)) {
                ibdev_warn(&iwdev->ibdev, "ICE OICR event notification: oicr = 
0x%08x\n",
                           event->reg);
                if (event->reg & IRDMAPFINT_OICR_PE_CRITERR_M) {
@@@ -151,10 -151,8 +151,8 @@@
   */
  static void irdma_request_reset(struct irdma_pci_f *rf)
  {
-       struct ice_pf *pf = rf->cdev;
- 
        ibdev_warn(&rf->iwdev->ibdev, "Requesting a reset\n");
-       ice_rdma_request_reset(pf, IIDC_PFR);
+       ice_rdma_request_reset(rf->cdev, IIDC_FUNC_RESET);
  }
  
  /**
@@@ -166,14 -164,15 +164,15 @@@ static int irdma_lan_register_qset(stru
                                   struct irdma_ws_node *tc_node)
  {
        struct irdma_device *iwdev = vsi->back_vsi;
-       struct ice_pf *pf = iwdev->rf->cdev;
+       struct iidc_rdma_core_dev_info *cdev_info;
        struct iidc_rdma_qset_params qset = {};
        int ret;
  
+       cdev_info = iwdev->rf->cdev;
        qset.qs_handle = tc_node->qs_handle;
        qset.tc = tc_node->traffic_class;
        qset.vport_id = vsi->vsi_idx;
-       ret = ice_add_rdma_qset(pf, &qset);
+       ret = ice_add_rdma_qset(cdev_info, &qset);
        if (ret) {
                ibdev_dbg(&iwdev->ibdev, "WS: LAN alloc_res for rdma qset 
failed.\n");
                return ret;
@@@ -194,19 -193,20 +193,20 @@@ static void irdma_lan_unregister_qset(s
                                      struct irdma_ws_node *tc_node)
  {
        struct irdma_device *iwdev = vsi->back_vsi;
-       struct ice_pf *pf = iwdev->rf->cdev;
+       struct iidc_rdma_core_dev_info *cdev_info;
        struct iidc_rdma_qset_params qset = {};
  
+       cdev_info = iwdev->rf->cdev;
        qset.qs_handle = tc_node->qs_handle;
        qset.tc = tc_node->traffic_class;
        qset.vport_id = vsi->vsi_idx;
        qset.teid = tc_node->l2_sched_node_id;
  
-       if (ice_del_rdma_qset(pf, &qset))
+       if (ice_del_rdma_qset(cdev_info, &qset))
                ibdev_dbg(&iwdev->ibdev, "WS: LAN free_res for rdma qset 
failed.\n");
  }
  
- static int irdma_init_interrupts(struct irdma_pci_f *rf, struct ice_pf *pf)
+ static int irdma_init_interrupts(struct irdma_pci_f *rf, struct 
iidc_rdma_core_dev_info *cdev)
  {
        int i;
  
@@@ -217,12 -217,12 +217,12 @@@
                return -ENOMEM;
  
        for (i = 0; i < rf->msix_count; i++)
-               if (ice_alloc_rdma_qvector(pf, &rf->msix_entries[i]))
+               if (ice_alloc_rdma_qvector(cdev, &rf->msix_entries[i]))
                        break;
  
        if (i < IRDMA_MIN_MSIX) {
 -              for (; i > 0; i--)
 +              while (--i >= 0)
-                       ice_free_rdma_qvector(pf, &rf->msix_entries[i]);
+                       ice_free_rdma_qvector(cdev, &rf->msix_entries[i]);
  
                kfree(rf->msix_entries);
                return -ENOMEM;
@@@ -233,56 -233,63 +233,65 @@@
        return 0;
  }
  
- static void irdma_deinit_interrupts(struct irdma_pci_f *rf, struct ice_pf *pf)
+ static void irdma_deinit_interrupts(struct irdma_pci_f *rf, struct 
iidc_rdma_core_dev_info *cdev)
  {
        int i;
  
        for (i = 0; i < rf->msix_count; i++)
-               ice_free_rdma_qvector(pf, &rf->msix_entries[i]);
+               ice_free_rdma_qvector(cdev, &rf->msix_entries[i]);
  
        kfree(rf->msix_entries);
  }
  
  static void irdma_remove(struct auxiliary_device *aux_dev)
  {
-       struct iidc_auxiliary_dev *iidc_adev = container_of(aux_dev,
-                                                           struct 
iidc_auxiliary_dev,
-                                                           adev);
-       struct ice_pf *pf = iidc_adev->pf;
        struct irdma_device *iwdev = auxiliary_get_drvdata(aux_dev);
+       struct iidc_rdma_core_auxiliary_dev *iidc_adev;
+       struct iidc_rdma_core_dev_info *cdev_info;
+ 
+       iidc_adev = container_of(aux_dev, struct iidc_rdma_core_auxiliary_dev, 
adev);
+       cdev_info = iidc_adev->cdev_info;
  
+       ice_rdma_update_vsi_filter(cdev_info, iwdev->vsi_num, false);
        irdma_ib_unregister_device(iwdev);
-       ice_rdma_update_vsi_filter(pf, iwdev->vsi_num, false);
-       irdma_deinit_interrupts(iwdev->rf, pf);
+       irdma_deinit_interrupts(iwdev->rf, cdev_info);
  
 +      kfree(iwdev->rf);
 +
-       pr_debug("INIT: Gen2 PF[%d] device remove success\n", 
PCI_FUNC(pf->pdev->devfn));
+       pr_debug("INIT: Gen2 PF[%d] device remove success\n", 
PCI_FUNC(cdev_info->pdev->devfn));
  }
  
- static void irdma_fill_device_info(struct irdma_device *iwdev, struct ice_pf 
*pf,
-                                  struct ice_vsi *vsi)
+ static void irdma_fill_device_info(struct irdma_device *iwdev,
+                                  struct iidc_rdma_core_dev_info *cdev_info)
  {
+       struct iidc_rdma_priv_dev_info *iidc_priv = cdev_info->iidc_priv;
        struct irdma_pci_f *rf = iwdev->rf;
  
-       rf->cdev = pf;
+       rf->sc_dev.hw = &rf->hw;
+       rf->iwdev = iwdev;
+       rf->cdev = cdev_info;
+       rf->hw.hw_addr = iidc_priv->hw_addr;
+       rf->pcidev = cdev_info->pdev;
+       rf->hw.device = &rf->pcidev->dev;
+       rf->pf_id = iidc_priv->pf_id;
        rf->gen_ops.register_qset = irdma_lan_register_qset;
        rf->gen_ops.unregister_qset = irdma_lan_unregister_qset;
-       rf->hw.hw_addr = pf->hw.hw_addr;
-       rf->pcidev = pf->pdev;
-       rf->pf_id = pf->hw.pf_id;
-       rf->default_vsi.vsi_idx = vsi->vsi_num;
-       rf->protocol_used = pf->rdma_mode & IIDC_RDMA_PROTOCOL_ROCEV2 ?
-                           IRDMA_ROCE_PROTOCOL_ONLY : 
IRDMA_IWARP_PROTOCOL_ONLY;
+ 
+       rf->default_vsi.vsi_idx = iidc_priv->vport_id;
+       rf->protocol_used =
+               cdev_info->rdma_protocol == IIDC_RDMA_PROTOCOL_ROCEV2 ?
+               IRDMA_ROCE_PROTOCOL_ONLY : IRDMA_IWARP_PROTOCOL_ONLY;
        rf->rdma_ver = IRDMA_GEN_2;
        rf->rsrc_profile = IRDMA_HMC_PROFILE_DEFAULT;
        rf->rst_to = IRDMA_RST_TIMEOUT_HZ;
        rf->gen_ops.request_reset = irdma_request_reset;
        rf->limits_sel = 7;
        rf->iwdev = iwdev;
+ 
        mutex_init(&iwdev->ah_tbl_lock);
-       iwdev->netdev = vsi->netdev;
-       iwdev->vsi_num = vsi->vsi_num;
+ 
+       iwdev->netdev = iidc_priv->netdev;
+       iwdev->vsi_num = iidc_priv->vport_id;
        iwdev->init_state = INITIAL_STATE;
        iwdev->roce_cwnd = IRDMA_ROCE_CWND_DEFAULT;
        iwdev->roce_ackcreds = IRDMA_ROCE_ACKCREDS_DEFAULT;
@@@ -294,19 -301,18 +303,18 @@@
  
  static int irdma_probe(struct auxiliary_device *aux_dev, const struct 
auxiliary_device_id *id)
  {
-       struct iidc_auxiliary_dev *iidc_adev = container_of(aux_dev,
-                                                           struct 
iidc_auxiliary_dev,
-                                                           adev);
-       struct ice_pf *pf = iidc_adev->pf;
-       struct ice_vsi *vsi = ice_get_main_vsi(pf);
-       struct iidc_qos_params qos_info = {};
+       struct iidc_rdma_core_auxiliary_dev *iidc_adev;
+       struct iidc_rdma_core_dev_info *cdev_info;
+       struct iidc_rdma_priv_dev_info *iidc_priv;
+       struct irdma_l2params l2params = {};
        struct irdma_device *iwdev;
        struct irdma_pci_f *rf;
-       struct irdma_l2params l2params = {};
        int err;
  
-       if (!vsi)
-               return -EIO;
+       iidc_adev = container_of(aux_dev, struct iidc_rdma_core_auxiliary_dev, 
adev);
+       cdev_info = iidc_adev->cdev_info;
+       iidc_priv = cdev_info->iidc_priv;
+ 
        iwdev = ib_alloc_device(irdma_device, ibdev);
        if (!iwdev)
                return -ENOMEM;
@@@ -316,10 -322,10 +324,10 @@@
                return -ENOMEM;
        }
  
-       irdma_fill_device_info(iwdev, pf, vsi);
+       irdma_fill_device_info(iwdev, cdev_info);
        rf = iwdev->rf;
  
-       err = irdma_init_interrupts(rf, pf);
+       err = irdma_init_interrupts(rf, cdev_info);
        if (err)
                goto err_init_interrupts;
  
@@@ -328,8 -334,7 +336,7 @@@
                goto err_ctrl_init;
  
        l2params.mtu = iwdev->netdev->mtu;
-       ice_get_qos_params(pf, &qos_info);
-       irdma_fill_qos_info(&l2params, &qos_info);
+       irdma_fill_qos_info(&l2params, &iidc_priv->qos_info);
        if (iwdev->rf->protocol_used != IRDMA_IWARP_PROTOCOL_ONLY)
                iwdev->dcb_vlan_mode = l2params.num_tc > 1 && 
!l2params.dscp_mode;
  
@@@ -341,7 -346,7 +348,7 @@@
        if (err)
                goto err_ibreg;
  
-       ice_rdma_update_vsi_filter(pf, iwdev->vsi_num, true);
+       ice_rdma_update_vsi_filter(cdev_info, iwdev->vsi_num, true);
  
        ibdev_dbg(&iwdev->ibdev, "INIT: Gen2 PF[%d] device probe success\n", 
PCI_FUNC(rf->pcidev->devfn));
        auxiliary_set_drvdata(aux_dev, iwdev);
@@@ -353,7 -358,7 +360,7 @@@ err_ibreg
  err_rt_init:
        irdma_ctrl_deinit_hw(rf);
  err_ctrl_init:
-       irdma_deinit_interrupts(rf, pf);
+       irdma_deinit_interrupts(rf, cdev_info);
  err_init_interrupts:
        kfree(iwdev->rf);
        ib_dealloc_device(&iwdev->ibdev);
@@@ -369,7 -374,7 +376,7 @@@ static const struct auxiliary_device_i
  
  MODULE_DEVICE_TABLE(auxiliary, irdma_auxiliary_id_table);
  
- static struct iidc_auxiliary_drv irdma_auxiliary_drv = {
+ static struct iidc_rdma_core_auxiliary_drv irdma_auxiliary_drv = {
        .adrv = {
            .id_table = irdma_auxiliary_id_table,
            .probe = irdma_probe,
diff --combined drivers/net/wireless/ath/ath12k/Kconfig
index 2d1eb22deda73,b3b15e1eb282b..1ea1af1b8f6c5
--- a/drivers/net/wireless/ath/ath12k/Kconfig
+++ b/drivers/net/wireless/ath/ath12k/Kconfig
@@@ -7,7 -7,7 +7,7 @@@ config ATH12
        select MHI_BUS
        select QRTR
        select QRTR_MHI
 -      select PCI_PWRCTL_PWRSEQ if HAVE_PWRCTL
 +      select PCI_PWRCTRL_PWRSEQ if HAVE_PWRCTRL
        help
          Enable support for Qualcomm Technologies Wi-Fi 7 (IEEE
          802.11be) family of chipsets, for example WCN7850 and
@@@ -15,6 -15,14 +15,14 @@@
  
          If you choose to build a module, it'll be called ath12k.
  
+ config ATH12K_AHB
+       bool "QTI ath12k AHB support"
+       depends on ATH12K && REMOTEPROC
+       select QCOM_MDT_LOADER
+       select QCOM_SCM
+       help
+         Enable support for Ath12k AHB bus chipsets, example IPQ5332.
+ 
  config ATH12K_DEBUG
        bool "ath12k debugging"
        depends on ATH12K
diff --combined include/linux/mm.h
index 38e16c984b9a6,8dc012e84033b..23b69b7f7a54a
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@@ -12,7 -12,6 +12,7 @@@
  #include <linux/rbtree.h>
  #include <linux/atomic.h>
  #include <linux/debug_locks.h>
 +#include <linux/compiler.h>
  #include <linux/mm_types.h>
  #include <linux/mmap_lock.h>
  #include <linux/range.h>
@@@ -386,7 -385,7 +386,7 @@@ extern unsigned int kobjsize(const voi
  #endif
  
  #ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
 -# define VM_UFFD_MINOR_BIT    38
 +# define VM_UFFD_MINOR_BIT    41
  # define VM_UFFD_MINOR                BIT(VM_UFFD_MINOR_BIT)  /* UFFD minor 
faults */
  #else /* !CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */
  # define VM_UFFD_MINOR                VM_NONE
@@@ -671,11 -670,204 +671,11 @@@ static inline void vma_numab_state_init
  static inline void vma_numab_state_free(struct vm_area_struct *vma) {}
  #endif /* CONFIG_NUMA_BALANCING */
  
 -#ifdef CONFIG_PER_VMA_LOCK
 -static inline void vma_lock_init(struct vm_area_struct *vma, bool 
reset_refcnt)
 -{
 -#ifdef CONFIG_DEBUG_LOCK_ALLOC
 -      static struct lock_class_key lockdep_key;
 -
 -      lockdep_init_map(&vma->vmlock_dep_map, "vm_lock", &lockdep_key, 0);
 -#endif
 -      if (reset_refcnt)
 -              refcount_set(&vma->vm_refcnt, 0);
 -      vma->vm_lock_seq = UINT_MAX;
 -}
 -
 -static inline bool is_vma_writer_only(int refcnt)
 -{
 -      /*
 -       * With a writer and no readers, refcnt is VMA_LOCK_OFFSET if the vma
 -       * is detached and (VMA_LOCK_OFFSET + 1) if it is attached. Waiting on
 -       * a detached vma happens only in vma_mark_detached() and is a rare
 -       * case, therefore most of the time there will be no unnecessary wakeup.
 -       */
 -      return refcnt & VMA_LOCK_OFFSET && refcnt <= VMA_LOCK_OFFSET + 1;
 -}
 -
 -static inline void vma_refcount_put(struct vm_area_struct *vma)
 -{
 -      /* Use a copy of vm_mm in case vma is freed after we drop vm_refcnt */
 -      struct mm_struct *mm = vma->vm_mm;
 -      int oldcnt;
 -
 -      rwsem_release(&vma->vmlock_dep_map, _RET_IP_);
 -      if (!__refcount_dec_and_test(&vma->vm_refcnt, &oldcnt)) {
 -
 -              if (is_vma_writer_only(oldcnt - 1))
 -                      rcuwait_wake_up(&mm->vma_writer_wait);
 -      }
 -}
 -
 -/*
 - * Try to read-lock a vma. The function is allowed to occasionally yield false
 - * locked result to avoid performance overhead, in which case we fall back to
 - * using mmap_lock. The function should never yield false unlocked result.
 - * False locked result is possible if mm_lock_seq overflows or if vma gets
 - * reused and attached to a different mm before we lock it.
 - * Returns the vma on success, NULL on failure to lock and EAGAIN if vma got
 - * detached.
 - */
 -static inline struct vm_area_struct *vma_start_read(struct mm_struct *mm,
 -                                                  struct vm_area_struct *vma)
 -{
 -      int oldcnt;
 -
 -      /*
 -       * Check before locking. A race might cause false locked result.
 -       * We can use READ_ONCE() for the mm_lock_seq here, and don't need
 -       * ACQUIRE semantics, because this is just a lockless check whose result
 -       * we don't rely on for anything - the mm_lock_seq read against which we
 -       * need ordering is below.
 -       */
 -      if (READ_ONCE(vma->vm_lock_seq) == READ_ONCE(mm->mm_lock_seq.sequence))
 -              return NULL;
 -
 -      /*
 -       * If VMA_LOCK_OFFSET is set, __refcount_inc_not_zero_limited_acquire()
 -       * will fail because VMA_REF_LIMIT is less than VMA_LOCK_OFFSET.
 -       * Acquire fence is required here to avoid reordering against later
 -       * vm_lock_seq check and checks inside lock_vma_under_rcu().
 -       */
 -      if (unlikely(!__refcount_inc_not_zero_limited_acquire(&vma->vm_refcnt, 
&oldcnt,
 -                                                            VMA_REF_LIMIT))) {
 -              /* return EAGAIN if vma got detached from under us */
 -              return oldcnt ? NULL : ERR_PTR(-EAGAIN);
 -      }
 -
 -      rwsem_acquire_read(&vma->vmlock_dep_map, 0, 1, _RET_IP_);
 -      /*
 -       * Overflow of vm_lock_seq/mm_lock_seq might produce false locked 
result.
 -       * False unlocked result is impossible because we modify and check
 -       * vma->vm_lock_seq under vma->vm_refcnt protection and mm->mm_lock_seq
 -       * modification invalidates all existing locks.
 -       *
 -       * We must use ACQUIRE semantics for the mm_lock_seq so that if we are
 -       * racing with vma_end_write_all(), we only start reading from the VMA
 -       * after it has been unlocked.
 -       * This pairs with RELEASE semantics in vma_end_write_all().
 -       */
 -      if (unlikely(vma->vm_lock_seq == raw_read_seqcount(&mm->mm_lock_seq))) {
 -              vma_refcount_put(vma);
 -              return NULL;
 -      }
 -
 -      return vma;
 -}
 -
  /*
 - * Use only while holding mmap read lock which guarantees that locking will 
not
 - * fail (nobody can concurrently write-lock the vma). vma_start_read() should
 - * not be used in such cases because it might fail due to mm_lock_seq 
overflow.
 - * This functionality is used to obtain vma read lock and drop the mmap read 
lock.
 + * These must be here rather than mmap_lock.h as dependent on vm_fault type,
 + * declared in this header.
   */
 -static inline bool vma_start_read_locked_nested(struct vm_area_struct *vma, 
int subclass)
 -{
 -      int oldcnt;
 -
 -      mmap_assert_locked(vma->vm_mm);
 -      if (unlikely(!__refcount_inc_not_zero_limited_acquire(&vma->vm_refcnt, 
&oldcnt,
 -                                                            VMA_REF_LIMIT)))
 -              return false;
 -
 -      rwsem_acquire_read(&vma->vmlock_dep_map, 0, 1, _RET_IP_);
 -      return true;
 -}
 -
 -/*
 - * Use only while holding mmap read lock which guarantees that locking will 
not
 - * fail (nobody can concurrently write-lock the vma). vma_start_read() should
 - * not be used in such cases because it might fail due to mm_lock_seq 
overflow.
 - * This functionality is used to obtain vma read lock and drop the mmap read 
lock.
 - */
 -static inline bool vma_start_read_locked(struct vm_area_struct *vma)
 -{
 -      return vma_start_read_locked_nested(vma, 0);
 -}
 -
 -static inline void vma_end_read(struct vm_area_struct *vma)
 -{
 -      vma_refcount_put(vma);
 -}
 -
 -/* WARNING! Can only be used if mmap_lock is expected to be write-locked */
 -static bool __is_vma_write_locked(struct vm_area_struct *vma, unsigned int 
*mm_lock_seq)
 -{
 -      mmap_assert_write_locked(vma->vm_mm);
 -
 -      /*
 -       * current task is holding mmap_write_lock, both vma->vm_lock_seq and
 -       * mm->mm_lock_seq can't be concurrently modified.
 -       */
 -      *mm_lock_seq = vma->vm_mm->mm_lock_seq.sequence;
 -      return (vma->vm_lock_seq == *mm_lock_seq);
 -}
 -
 -void __vma_start_write(struct vm_area_struct *vma, unsigned int mm_lock_seq);
 -
 -/*
 - * Begin writing to a VMA.
 - * Exclude concurrent readers under the per-VMA lock until the currently
 - * write-locked mmap_lock is dropped or downgraded.
 - */
 -static inline void vma_start_write(struct vm_area_struct *vma)
 -{
 -      unsigned int mm_lock_seq;
 -
 -      if (__is_vma_write_locked(vma, &mm_lock_seq))
 -              return;
 -
 -      __vma_start_write(vma, mm_lock_seq);
 -}
 -
 -static inline void vma_assert_write_locked(struct vm_area_struct *vma)
 -{
 -      unsigned int mm_lock_seq;
 -
 -      VM_BUG_ON_VMA(!__is_vma_write_locked(vma, &mm_lock_seq), vma);
 -}
 -
 -static inline void vma_assert_locked(struct vm_area_struct *vma)
 -{
 -      unsigned int mm_lock_seq;
 -
 -      VM_BUG_ON_VMA(refcount_read(&vma->vm_refcnt) <= 1 &&
 -                    !__is_vma_write_locked(vma, &mm_lock_seq), vma);
 -}
 -
 -/*
 - * WARNING: to avoid racing with vma_mark_attached()/vma_mark_detached(), 
these
 - * assertions should be made either under mmap_write_lock or when the object
 - * has been isolated under mmap_write_lock, ensuring no competing writers.
 - */
 -static inline void vma_assert_attached(struct vm_area_struct *vma)
 -{
 -      WARN_ON_ONCE(!refcount_read(&vma->vm_refcnt));
 -}
 -
 -static inline void vma_assert_detached(struct vm_area_struct *vma)
 -{
 -      WARN_ON_ONCE(refcount_read(&vma->vm_refcnt));
 -}
 -
 -static inline void vma_mark_attached(struct vm_area_struct *vma)
 -{
 -      vma_assert_write_locked(vma);
 -      vma_assert_detached(vma);
 -      refcount_set_release(&vma->vm_refcnt, 1);
 -}
 -
 -void vma_mark_detached(struct vm_area_struct *vma);
 -
 +#ifdef CONFIG_PER_VMA_LOCK
  static inline void release_fault_lock(struct vm_fault *vmf)
  {
        if (vmf->flags & FAULT_FLAG_VMA_LOCK)
@@@ -691,7 -883,36 +691,7 @@@ static inline void assert_fault_locked(
        else
                mmap_assert_locked(vmf->vma->vm_mm);
  }
 -
 -struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm,
 -                                        unsigned long address);
 -
 -#else /* CONFIG_PER_VMA_LOCK */
 -
 -static inline void vma_lock_init(struct vm_area_struct *vma, bool 
reset_refcnt) {}
 -static inline struct vm_area_struct *vma_start_read(struct mm_struct *mm,
 -                                                  struct vm_area_struct *vma)
 -              { return NULL; }
 -static inline void vma_end_read(struct vm_area_struct *vma) {}
 -static inline void vma_start_write(struct vm_area_struct *vma) {}
 -static inline void vma_assert_write_locked(struct vm_area_struct *vma)
 -              { mmap_assert_write_locked(vma->vm_mm); }
 -static inline void vma_assert_attached(struct vm_area_struct *vma) {}
 -static inline void vma_assert_detached(struct vm_area_struct *vma) {}
 -static inline void vma_mark_attached(struct vm_area_struct *vma) {}
 -static inline void vma_mark_detached(struct vm_area_struct *vma) {}
 -
 -static inline struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm,
 -              unsigned long address)
 -{
 -      return NULL;
 -}
 -
 -static inline void vma_assert_locked(struct vm_area_struct *vma)
 -{
 -      mmap_assert_locked(vma->vm_mm);
 -}
 -
 +#else
  static inline void release_fault_lock(struct vm_fault *vmf)
  {
        mmap_read_unlock(vmf->vma->vm_mm);
@@@ -701,6 -922,7 +701,6 @@@ static inline void assert_fault_locked(
  {
        mmap_assert_locked(vmf->vma->vm_mm);
  }
 -
  #endif /* CONFIG_PER_VMA_LOCK */
  
  extern const struct vm_operations_struct vma_dummy_vm_ops;
@@@ -1782,45 -2004,6 +1782,45 @@@ static inline struct folio *pfn_folio(u
        return page_folio(pfn_to_page(pfn));
  }
  
 +#ifdef CONFIG_MMU
 +static inline pte_t mk_pte(struct page *page, pgprot_t pgprot)
 +{
 +      return pfn_pte(page_to_pfn(page), pgprot);
 +}
 +
 +/**
 + * folio_mk_pte - Create a PTE for this folio
 + * @folio: The folio to create a PTE for
 + * @pgprot: The page protection bits to use
 + *
 + * Create a page table entry for the first page of this folio.
 + * This is suitable for passing to set_ptes().
 + *
 + * Return: A page table entry suitable for mapping this folio.
 + */
 +static inline pte_t folio_mk_pte(struct folio *folio, pgprot_t pgprot)
 +{
 +      return pfn_pte(folio_pfn(folio), pgprot);
 +}
 +
 +#ifdef CONFIG_TRANSPARENT_HUGEPAGE
 +/**
 + * folio_mk_pmd - Create a PMD for this folio
 + * @folio: The folio to create a PMD for
 + * @pgprot: The page protection bits to use
 + *
 + * Create a page table entry for the first page of this folio.
 + * This is suitable for passing to set_pmd_at().
 + *
 + * Return: A page table entry suitable for mapping this folio.
 + */
 +static inline pmd_t folio_mk_pmd(struct folio *folio, pgprot_t pgprot)
 +{
 +      return pmd_mkhuge(pfn_pmd(folio_pfn(folio), pgprot));
 +}
 +#endif
 +#endif /* CONFIG_MMU */
 +
  static inline bool folio_has_pincount(const struct folio *folio)
  {
        if (IS_ENABLED(CONFIG_64BIT))
@@@ -2001,6 -2184,15 +2001,6 @@@ static inline long compound_nr(struct p
        return folio_large_nr_pages(folio);
  }
  
 -/**
 - * thp_nr_pages - The number of regular pages in this huge page.
 - * @page: The head page of a huge page.
 - */
 -static inline long thp_nr_pages(struct page *page)
 -{
 -      return folio_nr_pages((struct folio *)page);
 -}
 -
  /**
   * folio_next - Move to the next physical folio.
   * @folio: The folio we're currently operating on.
@@@ -2111,62 -2303,7 +2111,62 @@@ static inline bool folio_maybe_mapped_s
         */
        if (mapcount <= 1)
                return false;
 -      return folio_test_large_maybe_mapped_shared(folio);
 +      return test_bit(FOLIO_MM_IDS_SHARED_BITNUM, &folio->_mm_ids);
 +}
 +
 +/**
 + * folio_expected_ref_count - calculate the expected folio refcount
 + * @folio: the folio
 + *
 + * Calculate the expected folio refcount, taking references from the 
pagecache,
 + * swapcache, PG_private and page table mappings into account. Useful in
 + * combination with folio_ref_count() to detect unexpected references (e.g.,
 + * GUP or other temporary references).
 + *
 + * Does currently not consider references from the LRU cache. If the folio
 + * was isolated from the LRU (which is the case during migration or split),
 + * the LRU cache does not apply.
 + *
 + * Calling this function on an unmapped folio -- !folio_mapped() -- that is
 + * locked will return a stable result.
 + *
 + * Calling this function on a mapped folio will not result in a stable result,
 + * because nothing stops additional page table mappings from coming (e.g.,
 + * fork()) or going (e.g., munmap()).
 + *
 + * Calling this function without the folio lock will also not result in a
 + * stable result: for example, the folio might get dropped from the swapcache
 + * concurrently.
 + *
 + * However, even when called without the folio lock or on a mapped folio,
 + * this function can be used to detect unexpected references early (for 
example,
 + * if it makes sense to even lock the folio and unmap it).
 + *
 + * The caller must add any reference (e.g., from folio_try_get()) it might be
 + * holding itself to the result.
 + *
 + * Returns the expected folio refcount.
 + */
 +static inline int folio_expected_ref_count(const struct folio *folio)
 +{
 +      const int order = folio_order(folio);
 +      int ref_count = 0;
 +
 +      if (WARN_ON_ONCE(folio_test_slab(folio)))
 +              return 0;
 +
 +      if (folio_test_anon(folio)) {
 +              /* One reference per page from the swapcache. */
 +              ref_count += folio_test_swapcache(folio) << order;
 +      } else if (!((unsigned long)folio->mapping & PAGE_MAPPING_FLAGS)) {
 +              /* One reference per page from the pagecache. */
 +              ref_count += !!folio->mapping << order;
 +              /* One reference from PG_private. */
 +              ref_count += folio_test_private(folio);
 +      }
 +
 +      /* One reference per page table mapping. */
 +      return ref_count + folio_mapcount(folio);
  }
  
  #ifndef HAVE_ARCH_MAKE_FOLIO_ACCESSIBLE
@@@ -2269,6 -2406,7 +2269,6 @@@ static inline void clear_page_pfmemallo
  extern void pagefault_out_of_memory(void);
  
  #define offset_in_page(p)     ((unsigned long)(p) & ~PAGE_MASK)
 -#define offset_in_thp(page, p)        ((unsigned long)(p) & (thp_size(page) - 
1))
  #define offset_in_folio(folio, p) ((unsigned long)(p) & (folio_size(folio) - 
1))
  
  /*
@@@ -2629,7 -2767,7 +2629,7 @@@ static inline void update_hiwater_rss(s
  {
        unsigned long _rss = get_mm_rss(mm);
  
 -      if ((mm)->hiwater_rss < _rss)
 +      if (data_race(mm->hiwater_rss) < _rss)
                (mm)->hiwater_rss = _rss;
  }
  
@@@ -2979,10 -3117,9 +2979,10 @@@ static inline void pagetable_dtor_free(
        pagetable_free(ptdesc);
  }
  
 -static inline bool pagetable_pte_ctor(struct ptdesc *ptdesc)
 +static inline bool pagetable_pte_ctor(struct mm_struct *mm,
 +                                    struct ptdesc *ptdesc)
  {
 -      if (!ptlock_init(ptdesc))
 +      if (mm != &init_mm && !ptlock_init(ptdesc))
                return false;
        __pagetable_ctor(ptdesc);
        return true;
@@@ -3086,10 -3223,9 +3086,10 @@@ static inline spinlock_t *pmd_lock(stru
        return ptl;
  }
  
 -static inline bool pagetable_pmd_ctor(struct ptdesc *ptdesc)
 +static inline bool pagetable_pmd_ctor(struct mm_struct *mm,
 +                                    struct ptdesc *ptdesc)
  {
 -      if (!pmd_ptlock_init(ptdesc))
 +      if (mm != &init_mm && !pmd_ptlock_init(ptdesc))
                return false;
        ptdesc_pmd_pts_init(ptdesc);
        __pagetable_ctor(ptdesc);
@@@ -3278,6 -3414,7 +3278,6 @@@ void anon_vma_interval_tree_verify(stru
  extern int __vm_enough_memory(struct mm_struct *mm, long pages, int 
cap_sys_admin);
  extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
  extern void exit_mmap(struct mm_struct *);
 -int relocate_vma_down(struct vm_area_struct *vma, unsigned long shift);
  bool mmap_read_lock_maybe_expand(struct mm_struct *mm, struct vm_area_struct 
*vma,
                                 unsigned long addr, bool write);
  
@@@ -4128,4 -4265,62 +4128,62 @@@ int arch_lock_shadow_stack_status(struc
  #define VM_SEALED_SYSMAP      VM_NONE
  #endif
  
+ /*
+  * DMA mapping IDs for page_pool
+  *
+  * When DMA-mapping a page, page_pool allocates an ID (from an xarray) and
+  * stashes it in the upper bits of page->pp_magic. We always want to be able 
to
+  * unambiguously identify page pool pages (using page_pool_page_is_pp()). 
Non-PP
+  * pages can have arbitrary kernel pointers stored in the same field as 
pp_magic
+  * (since it overlaps with page->lru.next), so we must ensure that we cannot
+  * mistake a valid kernel pointer with any of the values we write into this
+  * field.
+  *
+  * On architectures that set POISON_POINTER_DELTA, this is already ensured,
+  * since this value becomes part of PP_SIGNATURE; meaning we can just use the
+  * space between the PP_SIGNATURE value (without POISON_POINTER_DELTA), and 
the
+  * lowest bits of POISON_POINTER_DELTA. On arches where POISON_POINTER_DELTA 
is
+  * 0, we make sure that we leave the two topmost bits empty, as that 
guarantees
+  * we won't mistake a valid kernel pointer for a value we set, regardless of 
the
+  * VMSPLIT setting.
+  *
+  * Altogether, this means that the number of bits available is constrained by
+  * the size of an unsigned long (at the upper end, subtracting two bits per 
the
+  * above), and the definition of PP_SIGNATURE (with or without
+  * POISON_POINTER_DELTA).
+  */
+ #define PP_DMA_INDEX_SHIFT (1 + __fls(PP_SIGNATURE - POISON_POINTER_DELTA))
+ #if POISON_POINTER_DELTA > 0
+ /* PP_SIGNATURE includes POISON_POINTER_DELTA, so limit the size of the DMA
+  * index to not overlap with that if set
+  */
+ #define PP_DMA_INDEX_BITS MIN(32, __ffs(POISON_POINTER_DELTA) - 
PP_DMA_INDEX_SHIFT)
+ #else
+ /* Always leave out the topmost two; see above. */
+ #define PP_DMA_INDEX_BITS MIN(32, BITS_PER_LONG - PP_DMA_INDEX_SHIFT - 2)
+ #endif
+ 
+ #define PP_DMA_INDEX_MASK GENMASK(PP_DMA_INDEX_BITS + PP_DMA_INDEX_SHIFT - 1, 
\
+                                 PP_DMA_INDEX_SHIFT)
+ 
+ /* Mask used for checking in page_pool_page_is_pp() below. page->pp_magic is
+  * OR'ed with PP_SIGNATURE after the allocation in order to preserve bit 0 for
+  * the head page of compound page and bit 1 for pfmemalloc page, as well as 
the
+  * bits used for the DMA index. page_is_pfmemalloc() is checked in
+  * __page_pool_put_page() to avoid recycling the pfmemalloc page.
+  */
+ #define PP_MAGIC_MASK ~(PP_DMA_INDEX_MASK | 0x3UL)
+ 
+ #ifdef CONFIG_PAGE_POOL
+ static inline bool page_pool_page_is_pp(struct page *page)
+ {
+       return (page->pp_magic & PP_MAGIC_MASK) == PP_SIGNATURE;
+ }
+ #else
+ static inline bool page_pool_page_is_pp(struct page *page)
+ {
+       return false;
+ }
+ #endif
+ 
  #endif /* _LINUX_MM_H */
diff --combined include/net/sch_generic.h
index 1c05fed05f2bc,b6c177f7141c0..629368ab2787f
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@@ -803,6 -803,14 +803,14 @@@ static inline bool qdisc_tx_changing(co
        return false;
  }
  
+ /* "noqueue" qdisc identified by not having any enqueue, see noqueue_init() */
+ static inline bool qdisc_txq_has_no_queue(const struct netdev_queue *txq)
+ {
+       struct Qdisc *qdisc = rcu_access_pointer(txq->qdisc);
+ 
+       return qdisc->enqueue == NULL;
+ }
+ 
  /* Is the device using the noop qdisc on all queues?  */
  static inline bool qdisc_tx_is_noop(const struct net_device *dev)
  {
@@@ -1031,21 -1039,6 +1039,21 @@@ static inline struct sk_buff *__qdisc_d
        return skb;
  }
  
 +static inline struct sk_buff *qdisc_dequeue_internal(struct Qdisc *sch, bool 
direct)
 +{
 +      struct sk_buff *skb;
 +
 +      skb = __skb_dequeue(&sch->gso_skb);
 +      if (skb) {
 +              sch->q.qlen--;
 +              return skb;
 +      }
 +      if (direct)
 +              return __qdisc_dequeue_head(&sch->q);
 +      else
 +              return sch->dequeue(sch);
 +}
 +
  static inline struct sk_buff *qdisc_dequeue_head(struct Qdisc *sch)
  {
        struct sk_buff *skb = __qdisc_dequeue_head(&sch->q);
diff --combined include/trace/events/sunrpc.h
index 67db3f2953d5d,de214f1dea586..81f795150097f
--- a/include/trace/events/sunrpc.h
+++ b/include/trace/events/sunrpc.h
@@@ -21,7 -21,6 +21,6 @@@ TRACE_DEFINE_ENUM(SOCK_DGRAM)
  TRACE_DEFINE_ENUM(SOCK_RAW);
  TRACE_DEFINE_ENUM(SOCK_RDM);
  TRACE_DEFINE_ENUM(SOCK_SEQPACKET);
- TRACE_DEFINE_ENUM(SOCK_DCCP);
  TRACE_DEFINE_ENUM(SOCK_PACKET);
  
  #define show_socket_type(type)                                        \
@@@ -31,7 -30,6 +30,6 @@@
                { SOCK_RAW,             "RAW" },                \
                { SOCK_RDM,             "RDM" },                \
                { SOCK_SEQPACKET,       "SEQPACKET" },          \
-               { SOCK_DCCP,            "DCCP" },               \
                { SOCK_PACKET,          "PACKET" })
  
  /* This list is known to be incomplete, add new enums as needed. */
@@@ -2040,20 -2038,19 +2038,20 @@@ TRACE_EVENT(svc_xprt_dequeue
  
        TP_STRUCT__entry(
                SVC_XPRT_ENDPOINT_FIELDS(rqst->rq_xprt)
 -
                __field(unsigned long, wakeup)
 +              __field(unsigned long, qtime)
        ),
  
        TP_fast_assign(
 -              SVC_XPRT_ENDPOINT_ASSIGNMENTS(rqst->rq_xprt);
 +              ktime_t ktime = ktime_get();
  
 -              __entry->wakeup = ktime_to_us(ktime_sub(ktime_get(),
 -                                                      rqst->rq_qtime));
 +              SVC_XPRT_ENDPOINT_ASSIGNMENTS(rqst->rq_xprt);
 +              __entry->wakeup = ktime_to_us(ktime_sub(ktime, rqst->rq_qtime));
 +              __entry->qtime = ktime_to_us(ktime_sub(ktime, 
rqst->rq_xprt->xpt_qtime));
        ),
  
 -      TP_printk(SVC_XPRT_ENDPOINT_FORMAT " wakeup-us=%lu",
 -              SVC_XPRT_ENDPOINT_VARARGS, __entry->wakeup)
 +      TP_printk(SVC_XPRT_ENDPOINT_FORMAT " wakeup-us=%lu qtime-us=%lu",
 +              SVC_XPRT_ENDPOINT_VARARGS, __entry->wakeup, __entry->qtime)
  );
  
  DECLARE_EVENT_CLASS(svc_xprt_event,
diff --combined mm/page_alloc.c
index a6fe1e9b95941,2073c3fdf9c4c..401bf5036f0a4
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@@ -290,8 -290,7 +290,8 @@@ EXPORT_SYMBOL(nr_online_nodes)
  #endif
  
  static bool page_contains_unaccepted(struct page *page, unsigned int order);
 -static bool cond_accept_memory(struct zone *zone, unsigned int order);
 +static bool cond_accept_memory(struct zone *zone, unsigned int order,
 +                             int alloc_flags);
  static bool __free_unaccepted(struct page *page);
  
  int page_group_by_mobility_disabled __read_mostly;
@@@ -898,9 -897,7 +898,7 @@@ static inline bool page_expected_state(
  #ifdef CONFIG_MEMCG
                        page->memcg_data |
  #endif
- #ifdef CONFIG_PAGE_POOL
-                       ((page->pp_magic & ~0x3UL) == PP_SIGNATURE) |
- #endif
+                       page_pool_page_is_pp(page) |
                        (page->flags & check_flags)))
                return false;
  
@@@ -927,20 -924,24 +925,18 @@@ static const char *page_bad_reason(stru
        if (unlikely(page->memcg_data))
                bad_reason = "page still charged to cgroup";
  #endif
- #ifdef CONFIG_PAGE_POOL
-       if (unlikely((page->pp_magic & ~0x3UL) == PP_SIGNATURE))
+       if (unlikely(page_pool_page_is_pp(page)))
                bad_reason = "page_pool leak";
- #endif
        return bad_reason;
  }
  
 -static void free_page_is_bad_report(struct page *page)
 -{
 -      bad_page(page,
 -               page_bad_reason(page, PAGE_FLAGS_CHECK_AT_FREE));
 -}
 -
  static inline bool free_page_is_bad(struct page *page)
  {
        if (likely(page_expected_state(page, PAGE_FLAGS_CHECK_AT_FREE)))
                return false;
  
        /* Something has gone sideways, find it */
 -      free_page_is_bad_report(page);
 +      bad_page(page, page_bad_reason(page, PAGE_FLAGS_CHECK_AT_FREE));
        return true;
  }
  
@@@ -1146,9 -1147,14 +1142,9 @@@ static inline void pgalloc_tag_sub(stru
                __pgalloc_tag_sub(page, nr);
  }
  
 -static inline void pgalloc_tag_sub_pages(struct page *page, unsigned int nr)
 +/* When tag is not NULL, assuming mem_alloc_profiling_enabled */
 +static inline void pgalloc_tag_sub_pages(struct alloc_tag *tag, unsigned int 
nr)
  {
 -      struct alloc_tag *tag;
 -
 -      if (!mem_alloc_profiling_enabled())
 -              return;
 -
 -      tag = __pgalloc_tag_get(page);
        if (tag)
                this_cpu_sub(tag->counters->bytes, PAGE_SIZE * nr);
  }
@@@ -1158,7 -1164,7 +1154,7 @@@
  static inline void pgalloc_tag_add(struct page *page, struct task_struct 
*task,
                                   unsigned int nr) {}
  static inline void pgalloc_tag_sub(struct page *page, unsigned int nr) {}
 -static inline void pgalloc_tag_sub_pages(struct page *page, unsigned int nr) 
{}
 +static inline void pgalloc_tag_sub_pages(struct alloc_tag *tag, unsigned int 
nr) {}
  
  #endif /* CONFIG_MEM_ALLOC_PROFILING */
  
@@@ -2068,25 -2074,31 +2064,25 @@@ static bool should_try_claim_block(unsi
  
  /*
   * Check whether there is a suitable fallback freepage with requested order.
 - * Sets *claim_block to instruct the caller whether it should convert a whole
 - * pageblock to the returned migratetype.
 - * If only_claim is true, this function returns fallback_mt only if
 + * If claimable is true, this function returns fallback_mt only if
   * we would do this whole-block claiming. This would help to reduce
   * fragmentation due to mixed migratetype pages in one pageblock.
   */
  int find_suitable_fallback(struct free_area *area, unsigned int order,
 -                      int migratetype, bool only_claim, bool *claim_block)
 +                         int migratetype, bool claimable)
  {
        int i;
 -      int fallback_mt;
 +
 +      if (claimable && !should_try_claim_block(order, migratetype))
 +              return -2;
  
        if (area->nr_free == 0)
                return -1;
  
 -      *claim_block = false;
        for (i = 0; i < MIGRATE_PCPTYPES - 1 ; i++) {
 -              fallback_mt = fallbacks[migratetype][i];
 -              if (free_area_empty(area, fallback_mt))
 -                      continue;
 +              int fallback_mt = fallbacks[migratetype][i];
  
 -              if (should_try_claim_block(order, migratetype))
 -                      *claim_block = true;
 -
 -              if (*claim_block || !only_claim)
 +              if (!free_area_empty(area, fallback_mt))
                        return fallback_mt;
        }
  
@@@ -2183,6 -2195,7 +2179,6 @@@ __rmqueue_claim(struct zone *zone, int 
        int min_order = order;
        struct page *page;
        int fallback_mt;
 -      bool claim_block;
  
        /*
         * Do not steal pages from freelists belonging to other pageblocks
@@@ -2201,14 -2214,11 +2197,14 @@@
                                --current_order) {
                area = &(zone->free_area[current_order]);
                fallback_mt = find_suitable_fallback(area, current_order,
 -                              start_migratetype, false, &claim_block);
 +                                                   start_migratetype, true);
 +
 +              /* No block in that order */
                if (fallback_mt == -1)
                        continue;
  
 -              if (!claim_block)
 +              /* Advanced into orders too low to claim, abort */
 +              if (fallback_mt == -2)
                        break;
  
                page = get_page_from_free_area(area, fallback_mt);
@@@ -2236,11 -2246,12 +2232,11 @@@ __rmqueue_steal(struct zone *zone, int 
        int current_order;
        struct page *page;
        int fallback_mt;
 -      bool claim_block;
  
        for (current_order = order; current_order < NR_PAGE_ORDERS; 
current_order++) {
                area = &(zone->free_area[current_order]);
                fallback_mt = find_suitable_fallback(area, current_order,
 -                              start_migratetype, false, &claim_block);
 +                                                   start_migratetype, false);
                if (fallback_mt == -1)
                        continue;
  
@@@ -2661,10 -2672,10 +2657,10 @@@ static void free_frozen_page_commit(str
         * stops will be drained from vmstat refresh context.
         */
        if (order && order <= PAGE_ALLOC_COSTLY_ORDER) {
 -              free_high = (pcp->free_count >= batch &&
 +              free_high = (pcp->free_count >= (batch + pcp->high_min / 2) &&
                             (pcp->flags & PCPF_PREV_FREE_HIGH_ORDER) &&
                             (!(pcp->flags & PCPF_FREE_HIGH_BATCH) ||
 -                            pcp->count >= READ_ONCE(batch)));
 +                            pcp->count >= batch));
                pcp->flags |= PCPF_PREV_FREE_HIGH_ORDER;
        } else if (pcp->flags & PCPF_PREV_FREE_HIGH_ORDER) {
                pcp->flags &= ~PCPF_PREV_FREE_HIGH_ORDER;
@@@ -3543,7 -3554,7 +3539,7 @@@ get_page_from_freelist(gfp_t gfp_mask, 
  retry:
        /*
         * Scan zonelist, looking for a zone with enough free.
 -       * See also cpuset_node_allowed() comment in kernel/cgroup/cpuset.c.
 +       * See also cpuset_current_node_allowed() comment in 
kernel/cgroup/cpuset.c.
         */
        no_fallback = alloc_flags & ALLOC_NOFRAGMENT;
        z = ac->preferred_zoneref;
@@@ -3601,7 -3612,7 +3597,7 @@@
                        }
                }
  
 -              cond_accept_memory(zone, order);
 +              cond_accept_memory(zone, order, alloc_flags);
  
                /*
                 * Detect whether the number of free pages is below high
@@@ -3628,7 -3639,7 +3624,7 @@@ check_alloc_wmark
                                       gfp_mask)) {
                        int ret;
  
 -                      if (cond_accept_memory(zone, order))
 +                      if (cond_accept_memory(zone, order, alloc_flags))
                                goto try_this_zone;
  
                        /*
@@@ -3681,7 -3692,7 +3677,7 @@@ try_this_zone
  
                        return page;
                } else {
 -                      if (cond_accept_memory(zone, order))
 +                      if (cond_accept_memory(zone, order, alloc_flags))
                                goto try_this_zone;
  
                        /* Try again if zone has deferred pages */
@@@ -4230,7 -4241,7 +4226,7 @@@ gfp_to_alloc_flags(gfp_t gfp_mask, unsi
                /*
                 * Ignore cpuset mems for non-blocking __GFP_HIGH (probably
                 * GFP_ATOMIC) rather than fail, see the comment for
 -               * cpuset_node_allowed().
 +               * cpuset_current_node_allowed().
                 */
                if (alloc_flags & ALLOC_MIN_RESERVE)
                        alloc_flags &= ~ALLOC_CPUSET;
@@@ -4551,14 -4562,6 +4547,14 @@@ restart
        }
  
  retry:
 +      /*
 +       * Deal with possible cpuset update races or zonelist updates to avoid
 +       * infinite retries.
 +       */
 +      if (check_retry_cpuset(cpuset_mems_cookie, ac) ||
 +          check_retry_zonelist(zonelist_iter_cookie))
 +              goto restart;
 +
        /* Ensure kswapd doesn't accidentally go to sleep as long as we loop */
        if (alloc_flags & ALLOC_KSWAPD)
                wake_all_kswapds(order, gfp_mask, ac);
@@@ -4842,7 -4845,7 +4838,7 @@@ unsigned long alloc_pages_bulk_noprof(g
                        goto failed;
                }
  
 -              cond_accept_memory(zone, 0);
 +              cond_accept_memory(zone, 0, alloc_flags);
  retry_this_zone:
                mark = wmark_pages(zone, alloc_flags & ALLOC_WMARK_MASK) + 
nr_pages;
                if (zone_watermark_fast(zone, 0,  mark,
@@@ -4851,7 -4854,7 +4847,7 @@@
                        break;
                }
  
 -              if (cond_accept_memory(zone, 0))
 +              if (cond_accept_memory(zone, 0, alloc_flags))
                        goto retry_this_zone;
  
                /* Try again if zone has deferred pages */
@@@ -5058,13 -5061,11 +5054,13 @@@ static void ___free_pages(struct page *
  {
        /* get PageHead before we drop reference */
        int head = PageHead(page);
 +      /* get alloc tag in case the page is released by others */
 +      struct alloc_tag *tag = pgalloc_tag_get(page);
  
        if (put_page_testzero(page))
                __free_frozen_pages(page, order, fpi_flags);
        else if (!head) {
 -              pgalloc_tag_sub_pages(page, (1 << order) - 1);
 +              pgalloc_tag_sub_pages(tag, (1 << order) - 1);
                while (order-- > 0)
                        __free_frozen_pages(page + (1 << order), order,
                                            fpi_flags);
@@@ -6693,7 -6694,6 +6689,7 @@@ int alloc_contig_range_noprof(unsigned 
                .alloc_contig = true,
        };
        INIT_LIST_HEAD(&cc.migratepages);
 +      bool is_range_aligned;
  
        gfp_mask = current_gfp_context(gfp_mask);
        if (__alloc_contig_verify_gfp_mask(gfp_mask, (gfp_t *)&cc.gfp_mask))
@@@ -6782,14 -6782,7 +6778,14 @@@
                goto done;
        }
  
 -      if (!(gfp_mask & __GFP_COMP)) {
 +      /*
 +       * With __GFP_COMP and the requested order < MAX_PAGE_ORDER,
 +       * isolated free pages can have higher order than the requested
 +       * one. Use split_free_pages() to free out of range pages.
 +       */
 +      is_range_aligned = is_power_of_2(end - start);
 +      if (!(gfp_mask & __GFP_COMP) ||
 +              (is_range_aligned && ilog2(end - start) < MAX_PAGE_ORDER)) {
                split_free_pages(cc.freepages, gfp_mask);
  
                /* Free head and tail (if any) */
@@@ -6797,15 -6790,7 +6793,15 @@@
                        free_contig_range(outer_start, start - outer_start);
                if (end != outer_end)
                        free_contig_range(end, outer_end - end);
 -      } else if (start == outer_start && end == outer_end && 
is_power_of_2(end - start)) {
 +
 +              outer_start = start;
 +              outer_end = end;
 +
 +              if (!(gfp_mask & __GFP_COMP))
 +                      goto done;
 +      }
 +
 +      if (start == outer_start && end == outer_end && is_range_aligned) {
                struct page *head = pfn_to_page(start);
                int order = ilog2(end - start);
  
@@@ -7185,8 -7170,16 +7181,8 @@@ bool has_managed_dma(void
  
  #ifdef CONFIG_UNACCEPTED_MEMORY
  
 -/* Counts number of zones with unaccepted pages. */
 -static DEFINE_STATIC_KEY_FALSE(zones_with_unaccepted_pages);
 -
  static bool lazy_accept = true;
  
 -void unaccepted_cleanup_work(struct work_struct *work)
 -{
 -      static_branch_dec(&zones_with_unaccepted_pages);
 -}
 -
  static int __init accept_memory_parse(char *p)
  {
        if (!strcmp(p, "lazy")) {
@@@ -7211,7 -7204,11 +7207,7 @@@ static bool page_contains_unaccepted(st
  static void __accept_page(struct zone *zone, unsigned long *flags,
                          struct page *page)
  {
 -      bool last;
 -
        list_del(&page->lru);
 -      last = list_empty(&zone->unaccepted_pages);
 -
        account_freepages(zone, -MAX_ORDER_NR_PAGES, MIGRATE_MOVABLE);
        __mod_zone_page_state(zone, NR_UNACCEPTED, -MAX_ORDER_NR_PAGES);
        __ClearPageUnaccepted(page);
@@@ -7220,6 -7217,28 +7216,6 @@@
        accept_memory(page_to_phys(page), PAGE_SIZE << MAX_PAGE_ORDER);
  
        __free_pages_ok(page, MAX_PAGE_ORDER, FPI_TO_TAIL);
 -
 -      if (last) {
 -              /*
 -               * There are two corner cases:
 -               *
 -               * - If allocation occurs during the CPU bring up,
 -               *   static_branch_dec() cannot be used directly as
 -               *   it causes a deadlock on cpu_hotplug_lock.
 -               *
 -               *   Instead, use schedule_work() to prevent deadlock.
 -               *
 -               * - If allocation occurs before workqueues are initialized,
 -               *   static_branch_dec() should be called directly.
 -               *
 -               *   Workqueues are initialized before CPU bring up, so this
 -               *   will not conflict with the first scenario.
 -               */
 -              if (system_wq)
 -                      schedule_work(&zone->unaccepted_cleanup);
 -              else
 -                      unaccepted_cleanup_work(&zone->unaccepted_cleanup);
 -      }
  }
  
  void accept_page(struct page *page)
@@@ -7256,17 -7275,20 +7252,17 @@@ static bool try_to_accept_memory_one(st
        return true;
  }
  
 -static inline bool has_unaccepted_memory(void)
 -{
 -      return static_branch_unlikely(&zones_with_unaccepted_pages);
 -}
 -
 -static bool cond_accept_memory(struct zone *zone, unsigned int order)
 +static bool cond_accept_memory(struct zone *zone, unsigned int order,
 +                             int alloc_flags)
  {
        long to_accept, wmark;
        bool ret = false;
  
 -      if (!has_unaccepted_memory())
 +      if (list_empty(&zone->unaccepted_pages))
                return false;
  
 -      if (list_empty(&zone->unaccepted_pages))
 +      /* Bailout, since try_to_accept_memory_one() needs to take a lock */
 +      if (alloc_flags & ALLOC_TRYLOCK)
                return false;
  
        wmark = promo_wmark_pages(zone);
@@@ -7299,17 -7321,22 +7295,17 @@@ static bool __free_unaccepted(struct pa
  {
        struct zone *zone = page_zone(page);
        unsigned long flags;
 -      bool first = false;
  
        if (!lazy_accept)
                return false;
  
        spin_lock_irqsave(&zone->lock, flags);
 -      first = list_empty(&zone->unaccepted_pages);
        list_add_tail(&page->lru, &zone->unaccepted_pages);
        account_freepages(zone, MAX_ORDER_NR_PAGES, MIGRATE_MOVABLE);
        __mod_zone_page_state(zone, NR_UNACCEPTED, MAX_ORDER_NR_PAGES);
        __SetPageUnaccepted(page);
        spin_unlock_irqrestore(&zone->lock, flags);
  
 -      if (first)
 -              static_branch_inc(&zones_with_unaccepted_pages);
 -
        return true;
  }
  
@@@ -7320,8 -7347,7 +7316,8 @@@ static bool page_contains_unaccepted(st
        return false;
  }
  
 -static bool cond_accept_memory(struct zone *zone, unsigned int order)
 +static bool cond_accept_memory(struct zone *zone, unsigned int order,
 +                             int alloc_flags)
  {
        return false;
  }
@@@ -7392,6 -7418,11 +7388,6 @@@ struct page *try_alloc_pages_noprof(in
        if (!pcp_allowed_order(order))
                return NULL;
  
 -#ifdef CONFIG_UNACCEPTED_MEMORY
 -      /* Bailout, since try_to_accept_memory_one() needs to take a lock */
 -      if (has_unaccepted_memory())
 -              return NULL;
 -#endif
        /* Bailout, since _deferred_grow_zone() needs to take a lock */
        if (deferred_pages_enabled())
                return NULL;
diff --combined net/core/sock.c
index 1d9466a1f54e3,b64df2463300b..e02a78538e3e2
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@@ -148,8 -148,6 +148,8 @@@
  
  #include <linux/ethtool.h>
  
 +#include <uapi/linux/pidfd.h>
 +
  #include "dev.h"
  
  static DEFINE_MUTEX(proto_list_mutex);
@@@ -1881,7 -1879,6 +1881,7 @@@ int sk_getsockopt(struct sock *sk, int 
        {
                struct pid *peer_pid;
                struct file *pidfd_file = NULL;
 +              unsigned int flags = 0;
                int pidfd;
  
                if (len > sizeof(pidfd))
@@@ -1894,14 -1891,7 +1894,14 @@@
                if (!peer_pid)
                        return -ENODATA;
  
 -              pidfd = pidfd_prepare(peer_pid, 0, &pidfd_file);
 +              /* The use of PIDFD_STALE requires stashing of struct pid
 +               * on pidfs with pidfs_register_pid() and only AF_UNIX
 +               * were prepared for this.
 +               */
 +              if (sk->sk_family == AF_UNIX)
 +                      flags = PIDFD_STALE;
 +
 +              pidfd = pidfd_prepare(peer_pid, flags, &pidfd_file);
                put_pid(peer_pid);
                if (pidfd < 0)
                        return pidfd;
@@@ -2504,17 -2494,14 +2504,14 @@@ struct sock *sk_clone_lock(const struc
                 */
                if (!is_charged)
                        RCU_INIT_POINTER(newsk->sk_filter, NULL);
-               sk_free_unlock_clone(newsk);
-               newsk = NULL;
-               goto out;
+ 
+               goto free;
        }
+ 
        RCU_INIT_POINTER(newsk->sk_reuseport_cb, NULL);
  
-       if (bpf_sk_storage_clone(sk, newsk)) {
-               sk_free_unlock_clone(newsk);
-               newsk = NULL;
-               goto out;
-       }
+       if (bpf_sk_storage_clone(sk, newsk))
+               goto free;
  
        /* Clear sk_user_data if parent had the pointer tagged
         * as not suitable for copying when cloning.
@@@ -2544,18 -2531,17 +2541,17 @@@
                net_enable_timestamp();
  out:
        return newsk;
- }
- EXPORT_SYMBOL_GPL(sk_clone_lock);
- 
- void sk_free_unlock_clone(struct sock *sk)
- {
+ free:
        /* It is still raw copy of parent, so invalidate
-        * destructor and make plain sk_free() */
-       sk->sk_destruct = NULL;
-       bh_unlock_sock(sk);
-       sk_free(sk);
+        * destructor and make plain sk_free()
+        */
+       newsk->sk_destruct = NULL;
+       bh_unlock_sock(newsk);
+       sk_free(newsk);
+       newsk = NULL;
+       goto out;
  }
- EXPORT_SYMBOL_GPL(sk_free_unlock_clone);
+ EXPORT_SYMBOL_GPL(sk_clone_lock);
  
  static u32 sk_dst_gso_max_size(struct sock *sk, struct dst_entry *dst)
  {
@@@ -4014,7 -4000,7 +4010,7 @@@ static int assign_proto_idx(struct prot
  {
        prot->inuse_idx = find_first_zero_bit(proto_inuse_idx, PROTO_INUSE_NR);
  
-       if (unlikely(prot->inuse_idx == PROTO_INUSE_NR - 1)) {
+       if (unlikely(prot->inuse_idx == PROTO_INUSE_NR)) {
                pr_err("PROTO_INUSE_NR exhausted\n");
                return -ENOSPC;
        }
@@@ -4025,7 -4011,7 +4021,7 @@@
  
  static void release_proto_idx(struct proto *prot)
  {
-       if (prot->inuse_idx != PROTO_INUSE_NR - 1)
+       if (prot->inuse_idx != PROTO_INUSE_NR)
                clear_bit(prot->inuse_idx, proto_inuse_idx);
  }
  #else
diff --combined net/unix/af_unix.c
index 472f8aa9ea15d,2ab20821d6bb2..b744c0ae5507a
--- a/net/unix/af_unix.c
+++ b/net/unix/af_unix.c
@@@ -100,7 -100,6 +100,7 @@@
  #include <linux/splice.h>
  #include <linux/string.h>
  #include <linux/uaccess.h>
 +#include <linux/pidfs.h>
  #include <net/af_unix.h>
  #include <net/net_namespace.h>
  #include <net/scm.h>
@@@ -644,9 -643,6 +644,9 @@@ static void unix_sock_destructor(struc
                return;
        }
  
 +      if (sk->sk_peer_pid)
 +              pidfs_put_pid(sk->sk_peer_pid);
 +
        if (u->addr)
                unix_release_addr(u->addr);
  
@@@ -738,48 -734,13 +738,48 @@@ static void unix_release_sock(struct so
                unix_gc();              /* Garbage collect fds */
  }
  
 -static void init_peercred(struct sock *sk)
 +struct unix_peercred {
 +      struct pid *peer_pid;
 +      const struct cred *peer_cred;
 +};
 +
 +static inline int prepare_peercred(struct unix_peercred *peercred)
  {
 -      sk->sk_peer_pid = get_pid(task_tgid(current));
 -      sk->sk_peer_cred = get_current_cred();
 +      struct pid *pid;
 +      int err;
 +
 +      pid = task_tgid(current);
 +      err = pidfs_register_pid(pid);
 +      if (likely(!err)) {
 +              peercred->peer_pid = get_pid(pid);
 +              peercred->peer_cred = get_current_cred();
 +      }
 +      return err;
  }
  
 -static void update_peercred(struct sock *sk)
 +static void drop_peercred(struct unix_peercred *peercred)
 +{
 +      const struct cred *cred = NULL;
 +      struct pid *pid = NULL;
 +
 +      might_sleep();
 +
 +      swap(peercred->peer_pid, pid);
 +      swap(peercred->peer_cred, cred);
 +
 +      pidfs_put_pid(pid);
 +      put_pid(pid);
 +      put_cred(cred);
 +}
 +
 +static inline void init_peercred(struct sock *sk,
 +                               const struct unix_peercred *peercred)
 +{
 +      sk->sk_peer_pid = peercred->peer_pid;
 +      sk->sk_peer_cred = peercred->peer_cred;
 +}
 +
 +static void update_peercred(struct sock *sk, struct unix_peercred *peercred)
  {
        const struct cred *old_cred;
        struct pid *old_pid;
@@@ -787,11 -748,11 +787,11 @@@
        spin_lock(&sk->sk_peer_lock);
        old_pid = sk->sk_peer_pid;
        old_cred = sk->sk_peer_cred;
 -      init_peercred(sk);
 +      init_peercred(sk, peercred);
        spin_unlock(&sk->sk_peer_lock);
  
 -      put_pid(old_pid);
 -      put_cred(old_cred);
 +      peercred->peer_pid = old_pid;
 +      peercred->peer_cred = old_cred;
  }
  
  static void copy_peercred(struct sock *sk, struct sock *peersk)
@@@ -800,7 -761,6 +800,7 @@@
  
        spin_lock(&sk->sk_peer_lock);
        sk->sk_peer_pid = get_pid(peersk->sk_peer_pid);
 +      pidfs_get_pid(sk->sk_peer_pid);
        sk->sk_peer_cred = get_cred(peersk->sk_peer_cred);
        spin_unlock(&sk->sk_peer_lock);
  }
@@@ -810,7 -770,6 +810,7 @@@ static int unix_listen(struct socket *s
        int err;
        struct sock *sk = sock->sk;
        struct unix_sock *u = unix_sk(sk);
 +      struct unix_peercred peercred = {};
  
        err = -EOPNOTSUPP;
        if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET)
@@@ -818,9 -777,6 +818,9 @@@
        err = -EINVAL;
        if (!READ_ONCE(u->addr))
                goto out;       /* No listens on an unbound socket */
 +      err = prepare_peercred(&peercred);
 +      if (err)
 +              goto out;
        unix_state_lock(sk);
        if (sk->sk_state != TCP_CLOSE && sk->sk_state != TCP_LISTEN)
                goto out_unlock;
@@@ -830,12 -786,11 +830,12 @@@
        WRITE_ONCE(sk->sk_state, TCP_LISTEN);
  
        /* set credentials so connect can copy them */
 -      update_peercred(sk);
 +      update_peercred(sk, &peercred);
        err = 0;
  
  out_unlock:
        unix_state_unlock(sk);
 +      drop_peercred(&peercred);
  out:
        return err;
  }
@@@ -995,13 -950,6 +995,6 @@@ static void unix_close(struct sock *sk
         */
  }
  
- static void unix_unhash(struct sock *sk)
- {
-       /* Nothing to do here, unix socket does not need a ->unhash().
-        * This is merely for sockmap.
-        */
- }
- 
  static bool unix_bpf_bypass_getsockopt(int level, int optname)
  {
        if (level == SOL_SOCKET) {
@@@ -1032,7 -980,6 +1025,6 @@@ struct proto unix_stream_proto = 
        .owner                  = THIS_MODULE,
        .obj_size               = sizeof(struct unix_sock),
        .close                  = unix_close,
-       .unhash                 = unix_unhash,
        .bpf_bypass_getsockopt  = unix_bpf_bypass_getsockopt,
  #ifdef CONFIG_BPF_SYSCALL
        .psock_update_sk_prot   = unix_stream_bpf_update_proto,
@@@ -1570,7 -1517,6 +1562,7 @@@ static int unix_stream_connect(struct s
        struct sockaddr_un *sunaddr = (struct sockaddr_un *)uaddr;
        struct sock *sk = sock->sk, *newsk = NULL, *other = NULL;
        struct unix_sock *u = unix_sk(sk), *newu, *otheru;
 +      struct unix_peercred peercred = {};
        struct net *net = sock_net(sk);
        struct sk_buff *skb = NULL;
        unsigned char state;
@@@ -1607,10 -1553,6 +1599,10 @@@
                goto out;
        }
  
 +      err = prepare_peercred(&peercred);
 +      if (err)
 +              goto out;
 +
        /* Allocate skb for sending to listening sock */
        skb = sock_wmalloc(newsk, 1, 0, GFP_KERNEL);
        if (!skb) {
@@@ -1686,7 -1628,7 +1678,7 @@@ restart
        unix_peer(newsk)        = sk;
        newsk->sk_state         = TCP_ESTABLISHED;
        newsk->sk_type          = sk->sk_type;
 -      init_peercred(newsk);
 +      init_peercred(newsk, &peercred);
        newu = unix_sk(newsk);
        newu->listener = other;
        RCU_INIT_POINTER(newsk->sk_wq, &newu->peer_wq);
@@@ -1745,33 -1687,20 +1737,33 @@@ out_free_skb
  out_free_sk:
        unix_release_sock(newsk, 0);
  out:
 +      drop_peercred(&peercred);
        return err;
  }
  
  static int unix_socketpair(struct socket *socka, struct socket *sockb)
  {
 +      struct unix_peercred ska_peercred = {}, skb_peercred = {};
        struct sock *ska = socka->sk, *skb = sockb->sk;
 +      int err;
 +
 +      err = prepare_peercred(&ska_peercred);
 +      if (err)
 +              return err;
 +
 +      err = prepare_peercred(&skb_peercred);
 +      if (err) {
 +              drop_peercred(&ska_peercred);
 +              return err;
 +      }
  
        /* Join our sockets back to back */
        sock_hold(ska);
        sock_hold(skb);
        unix_peer(ska) = skb;
        unix_peer(skb) = ska;
 -      init_peercred(ska);
 -      init_peercred(skb);
 +      init_peercred(ska, &ska_peercred);
 +      init_peercred(skb, &skb_peercred);
  
        ska->sk_state = TCP_ESTABLISHED;
        skb->sk_state = TCP_ESTABLISHED;
diff --combined scripts/checkpatch.pl
index e8afe3f765de5,298c8f8d77199..6aeeba36ffaf1
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@@ -151,24 -151,6 +151,24 @@@ EO
        exit($exitcode);
  }
  
 +my $DO_WHILE_0_ADVICE = q{
 +   do {} while (0) advice is over-stated in a few situations:
 +
 +   The more obvious case is macros, like MODULE_PARM_DESC, invoked at
 +   file-scope, where C disallows code (it must be in functions).  See
 +   $exceptions if you have one to add by name.
 +
 +   More troublesome is declarative macros used at top of new scope,
 +   like DECLARE_PER_CPU.  These might just compile with a do-while-0
 +   wrapper, but would be incorrect.  Most of these are handled by
 +   detecting struct,union,etc declaration primitives in $exceptions.
 +
 +   Theres also macros called inside an if (block), which "return" an
 +   expression.  These cannot do-while, and need a ({}) wrapper.
 +
 +   Enjoy this qualification while we work to improve our heuristics.
 +};
 +
  sub uniq {
        my %seen;
        return grep { !$seen{$_}++ } @_;
@@@ -4822,7 -4804,7 +4822,7 @@@ sub process 
                }
  
  # do not use BUG() or variants
-               if ($line =~ 
/\b(?!AA_|BUILD_|DCCP_|IDA_|KVM_|RWLOCK_|snd_|SPIN_)(?:[a-zA-Z_]*_)?BUG(?:_ON)?(?:_[A-Z_]+)?\s*\(/)
 {
+               if ($line =~ 
/\b(?!AA_|BUILD_|IDA_|KVM_|RWLOCK_|snd_|SPIN_)(?:[a-zA-Z_]*_)?BUG(?:_ON)?(?:_[A-Z_]+)?\s*\(/)
 {
                        my $msg_level = \&WARN;
                        $msg_level = \&CHK if ($file);
                        &{$msg_level}("AVOID_BUG",
@@@ -5901,9 -5883,9 +5901,9 @@@
                        }
                }
  
 -# multi-statement macros should be enclosed in a do while loop, grab the
 -# first statement and ensure its the whole macro if its not enclosed
 -# in a known good container
 +# Usually multi-statement macros should be enclosed in a do {} while
 +# (0) loop.  Grab the first statement and ensure its the whole macro
 +# if its not enclosed in a known good container
                if ($realfile !~ m@/vmlinux.lds.h$@ &&
                    $line =~ /^.\s*\#\s*define\s*$Ident(\()?/) {
                        my $ln = $linenr;
@@@ -5956,13 -5938,10 +5956,13 @@@
  
                        my $exceptions = qr{
                                $Declare|
 +                              # named exceptions
                                module_param_named|
                                MODULE_PARM_DESC|
                                DECLARE_PER_CPU|
                                DEFINE_PER_CPU|
 +                              static_assert|
 +                              # declaration primitives
                                __typeof__\(|
                                union|
                                struct|
@@@ -5997,11 -5976,11 +5997,11 @@@
                                        
ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
                                              "Macros starting with if should 
be enclosed by a do - while loop to avoid possible if/else logic defects\n" . 
"$herectx");
                                } elsif ($dstat =~ /;/) {
 -                                      
ERROR("MULTISTATEMENT_MACRO_USE_DO_WHILE",
 -                                            "Macros with multiple statements 
should be enclosed in a do - while loop\n" . "$herectx");
 +                                      
WARN("MULTISTATEMENT_MACRO_USE_DO_WHILE",
 +                                            "Non-declarative macros with 
multiple statements should be enclosed in a do - while loop\n" . "$herectx\nBUT 
SEE:\n$DO_WHILE_0_ADVICE");
                                } else {
                                        ERROR("COMPLEX_MACRO",
 -                                            "Macros with complex values 
should be enclosed in parentheses\n" . "$herectx");
 +                                            "Macros with complex values 
should be enclosed in parentheses\n" . "$herectx\nBUT 
SEE:\n$DO_WHILE_0_ADVICE");
                                }
  
                        }
@@@ -6045,7 -6024,7 +6045,7 @@@
                                }
  
  # check if this is an unused argument
 -                              if ($define_stmt !~ /\b$arg\b/) {
 +                              if ($define_stmt !~ /\b$arg\b/ && $define_stmt) 
{
                                        WARN("MACRO_ARG_UNUSED",
                                             "Argument '$arg' is not used in 
function-like macro\n" . "$herectx");
                                }
diff --combined tools/testing/selftests/Makefile
index 80fb84fa3cfcb,61bb8bf1b5074..a0a6ba47d6006
--- a/tools/testing/selftests/Makefile
+++ b/tools/testing/selftests/Makefile
@@@ -71,6 -71,7 +71,7 @@@ TARGETS += net/hs
  TARGETS += net/mptcp
  TARGETS += net/netfilter
  TARGETS += net/openvswitch
+ TARGETS += net/ovpn
  TARGETS += net/packetdrill
  TARGETS += net/rds
  TARGETS += net/tcp_ao
@@@ -121,7 -122,6 +122,7 @@@ TARGETS += user_event
  TARGETS += vDSO
  TARGETS += mm
  TARGETS += x86
 +TARGETS += x86/bugs
  TARGETS += zram
  #Please keep the TARGETS list alphabetically sorted
  # Run "make quicktest=1 run_tests" or

-- 
LinuxNextTracking

Reply via email to